<?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>202266</bug_id>
          
          <creation_ts>2019-09-26 04:22:37 -0700</creation_ts>
          <short_desc>Use LineLayoutTraversal for RenderText functions</short_desc>
          <delta_ts>2019-09-26 11:26:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</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>1574418</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-26 04:22:37 -0700</bug_when>
    <thetext>Get rid of the separate simple and complex line layout versions of various functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574420</commentid>
    <comment_count>1</comment_count>
      <attachid>379631</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-26 04:23:15 -0700</bug_when>
    <thetext>Created attachment 379631
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574438</commentid>
    <comment_count>2</comment_count>
      <attachid>379638</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-26 07:25:38 -0700</bug_when>
    <thetext>Created attachment 379638
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574439</commentid>
    <comment_count>3</comment_count>
      <attachid>379639</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-26 07:31:29 -0700</bug_when>
    <thetext>Created attachment 379639
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574457</commentid>
    <comment_count>4</comment_count>
      <attachid>379642</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-26 08:25:44 -0700</bug_when>
    <thetext>Created attachment 379642
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574553</commentid>
    <comment_count>5</comment_count>
      <attachid>379642</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-26 11:25:54 -0700</bug_when>
    <thetext>Comment on attachment 379642
patch

Clearing flags on attachment: 379642

Committed r250390: &lt;https://trac.webkit.org/changeset/250390&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574554</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-26 11:25:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574555</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-26 11:26:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/55751571&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379631</attachid>
            <date>2019-09-26 04:23:15 -0700</date>
            <delta_ts>2019-09-26 07:25:38 -0700</delta_ts>
            <desc>wip</desc>
            <filename>more-llt.patch</filename>
            <type>text/plain</type>
            <size>5685</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvb3JpZW50YXRp
b24tc2lkZXdheXMtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
dGV4dC9vcmllbnRhdGlvbi1zaWRld2F5cy1leHBlY3RlZC5wbmcKaW5kZXggYjVmY2U2YjY3ODMu
LjZhOWFkMjI0YTUwIDEwMDY0NApCaW5hcnkgZmlsZXMgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvZmFzdC90ZXh0L29yaWVudGF0aW9uLXNpZGV3YXlzLWV4cGVjdGVkLnBuZyBhbmQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L29yaWVudGF0aW9uLXNpZGV3YXlzLWV4cGVj
dGVkLnBuZyBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRl
eCA2YjQzMmYzMThkNy4uYWQ4ZTRjZDI0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgpA
QCAtMTA4MCwxMCArMTA4MSwxMCBAQCBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250ZW50UmFuZ2VzQmV0d2Vlbk9mZgogCiBJbnRQb2lu
dCBSZW5kZXJUZXh0OjpmaXJzdFJ1bkxvY2F0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byog
bGF5b3V0ID0gc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxh
eW91dDo6Y29tcHV0ZUZpcnN0UnVuTG9jYXRpb24oKnRoaXMsICpsYXlvdXQpOwotCi0gICAgcmV0
dXJuIG1fbGluZUJveGVzLmZpcnN0UnVuTG9jYXRpb24oKTsKKyAgICBhdXRvIGZpcnN0ID0gTGlu
ZUxheW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcigqdGhpcyk7Cisg
ICAgaWYgKCFmaXJzdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gSW50UG9pbnQo
Zmlyc3QtPnJlY3QoKS5sb2NhdGlvbigpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjpzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKQEAgLTEzODIsMTAgKzEzODMsMTUgQEAg
ZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25z
dCBGb250Q2FzY2FkZSYgZiwgZmxvYXQKIAogSW50UmVjdCBSZW5kZXJUZXh0OjpsaW5lc0JvdW5k
aW5nQm94KCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5b3V0ID0gc2ltcGxlTGluZUxheW91
dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZUJvdW5kaW5nQm94
KCp0aGlzLCAqbGF5b3V0KTsKKyAgICBhdXRvIGZpcnN0ID0gTGluZUxheW91dFRyYXZlcnNhbDo6
Zmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcigqdGhpcyk7CisgICAgaWYgKCFmaXJzdCkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYm91bmRpbmdCb3ggPSBmaXJzdC0+cmVjdCgp
OworICAgIGZvciAoYXV0byBib3ggPSBmaXJzdDsgYm94OyArK2JveCkKKyAgICAgICAgYm91bmRp
bmdCb3gudW5pdGVFdmVuSWZFbXB0eShib3gtPnJlY3QoKSk7CiAKLSAgICByZXR1cm4gbV9saW5l
Qm94ZXMuYm91bmRpbmdCb3goKnRoaXMpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJv
dW5kaW5nQm94KTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJm
bG93Qm91bmRpbmdCb3goKSBjb25zdApAQCAtMTQ2OCwyMiArMTQ3NCwzNyBAQCBMYXlvdXRSZWN0
IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcAogCiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAog
ewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJl
dHVybiBTaW1wbGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRNaW5pbXVtT2Zmc2V0KCp0aGlzLCAqbGF5
b3V0KTsKLSAgICByZXR1cm4gbV9saW5lQm94ZXMuY2FyZXRNaW5PZmZzZXQoKTsKKyAgICBpbnQg
bWluT2Zmc2V0ID0gMDsKKyAgICBmb3IgKGF1dG8mIGJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6
OnRleHRCb3hlc0ZvcigqdGhpcykpCisgICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluPGludD4o
bWluT2Zmc2V0LCBib3gubG9jYWxTdGFydE9mZnNldCgpKTsKKworICAgIHJldHVybiBtaW5PZmZz
ZXQ7CiB9CiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1heE9mZnNldCgpIGNvbnN0CiB7Ci0gICAg
aWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZUxpbmVMYXlvdXQ6OmZpbmRDYXJldE1heGltdW1PZmZzZXQoKnRoaXMsICpsYXlvdXQpOwot
ICAgIHJldHVybiBtX2xpbmVCb3hlcy5jYXJldE1heE9mZnNldCgqdGhpcyk7CisgICAgaW50IG1h
eE9mZnNldCA9IC0xOworICAgIGZvciAoYXV0byYgYm94IDogTGluZUxheW91dFRyYXZlcnNhbDo6
dGV4dEJveGVzRm9yKCp0aGlzKSkKKyAgICAgICAgbWF4T2Zmc2V0ID0gc3RkOjptYXg8aW50Piht
YXhPZmZzZXQsIGJveC5sb2NhbEVuZE9mZnNldCgpKTsKKworICAgIHJldHVybiBtYXhPZmZzZXQg
PCAwID8gdGV4dCgpLmxlbmd0aCgpIDogbWF4T2Zmc2V0OwogfQogCiB1bnNpZ25lZCBSZW5kZXJU
ZXh0Ojpjb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0c1VudGlsKHVuc2lnbmVkIG9mZnNldCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0gICAgcmV0dXJuIG1f
bGluZUJveGVzLmNvdW50Q2hhcmFjdGVyT2Zmc2V0c1VudGlsKG9mZnNldCk7CisgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGF1dG8mIGJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6
OnRleHRCb3hlc0ZvcigqdGhpcykpIHsKKyAgICAgICAgYXV0byBzdGFydCA9IGJveC5sb2NhbFN0
YXJ0T2Zmc2V0KCk7CisgICAgICAgIGF1dG8gbGVuZ3RoID0gYm94Lmxlbmd0aCgpOworICAgICAg
ICBpZiAob2Zmc2V0IDwgc3RhcnQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICBpZiAob2Zmc2V0IDw9IHN0YXJ0ICsgbGVuZ3RoKSB7CisgICAgICAgICAgICByZXN1bHQgKz0g
b2Zmc2V0IC0gc3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgICAgIHJlc3VsdCArPSBsZW5ndGg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNSZW5kZXJlZENoYXJhY3Rlck9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKaW5kZXggNjljNTk4YWE4ZGMuLjdjODU5Yzc0ZGQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NDksNyArNTQ5LDcgQEAg
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBPcHRpb25T
ZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmUKIAogICAgIGlmIChpczxSZW5kZXJUZXh0PihvKSkgewog
ICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obyk7Ci0gICAgICAgIGZv
ciAoYXV0byYgdGV4dEJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6OnRleHRCb3hSYW5nZUZvcih0
ZXh0KSkgeworICAgICAgICBmb3IgKGF1dG8mIHRleHRCb3ggOiBMaW5lTGF5b3V0VHJhdmVyc2Fs
Ojp0ZXh0Qm94ZXNGb3IodGV4dCkpIHsKICAgICAgICAgICAgIHRzIDw8IGluZGVudDsKICAgICAg
ICAgICAgIHdyaXRlVGV4dEJveCh0cywgdGV4dCwgdGV4dEJveCk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5j
cHAKaW5kZXggMzRkMjI2YTMzMjQuLjU0MWJkMmNiYzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcApAQCAtMjk1LDEw
ICsyOTUsMTUgQEAgVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEluVGV4dE9yZGVyRm9yKGNv
bnN0IFJlbmRlclRleHQmIHRleHQpCiAgICAgcmV0dXJuIGZpcnN0VGV4dEJveEluVmlzdWFsT3Jk
ZXJGb3IodGV4dCk7CiB9CiAKLVRleHRCb3hSYW5nZSB0ZXh0Qm94UmFuZ2VGb3IoY29uc3QgUmVu
ZGVyVGV4dCYgdGV4dCkKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4
dCYgdGV4dCkKIHsKICAgICByZXR1cm4geyBmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVyRm9yKHRl
eHQpIH07CiB9CiAKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXNJblRleHRPcmRlckZvcihjb25zdCBS
ZW5kZXJUZXh0JiB0ZXh0KQoreworICAgIHJldHVybiB7IGZpcnN0VGV4dEJveEluVGV4dE9yZGVy
Rm9yKHRleHQpIH07Cit9CisKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAppbmRleCAxZjYxOTY1ZWNjNS4uNzU4NDkyYjNi
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRU
cmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
VHJhdmVyc2FsLmgKQEAgLTEzMiw3ICsxMzIsOSBAQCBwcml2YXRlOgogCiBUZXh0Qm94SXRlcmF0
b3IgZmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0Jik7CiBUZXh0
Qm94SXRlcmF0b3IgZmlyc3RUZXh0Qm94SW5UZXh0T3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYp
OwotVGV4dEJveFJhbmdlIHRleHRCb3hSYW5nZUZvcihjb25zdCBSZW5kZXJUZXh0Jik7CitUZXh0
Qm94UmFuZ2UgdGV4dEJveGVzRm9yKGNvbnN0IFJlbmRlclRleHQmKTsKK1RleHRCb3hSYW5nZSB0
ZXh0Qm94ZXNJblRleHRPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0Jik7CisKIGlubGluZSBib29s
IGhhc1RleHRCb3hlcyhjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KSB7IHJldHVybiAhZmlyc3RUZXh0
Qm94SW5WaXN1YWxPcmRlckZvcih0ZXh0KS5hdEVuZCgpOyB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379638</attachid>
            <date>2019-09-26 07:25:38 -0700</date>
            <delta_ts>2019-09-26 07:31:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-llt-4.patch</filename>
            <type>text/plain</type>
            <size>24965</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNGNmMWNjZThhNi4uYTcwNTQ5ZjdlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAxOS0wOS0yNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgZm9yIFJlbmRlclRleHQgZnVuY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIy
NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzZXBhcmF0ZSBzaW1wbGUgYW5kIGNv
bXBsZXggbGluZSBsYXlvdXQgdmVyc2lvbnMgd2l0aAorICAgICAgICBzaGFyZWQgZnVuY3Rpb25z
IHRoYXQgdXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3Rz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuTG9jYXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpjYXJldE1heE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0c1VudGlsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbnRhaW5zUmVuZGVyZWRDaGFyYWN0ZXJPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29udGFpbnNDYXJldE9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYXNSZW5kZXJlZFRl
eHQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmJvdW5kaW5nQm94IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmZpcnN0
UnVuTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dExpbmVCb3hlczo6aGFzUmVuZGVyZWRUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNhcmV0TWluT2Zmc2V0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNhcmV0TWF4T2Zmc2V0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6
OmNvbnRhaW5zT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRMaW5lQm94ZXM6OmNvdW50Q2hhcmFjdGVyT2Zmc2V0c1VudGlsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5l
U3RhdGU6OmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5l
TGF5b3V0OjpSdW46OlJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
dW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y29tcHV0
ZUZpcnN0UnVuTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0
OjpmaW5kQ2FyZXRNaW5pbXVtT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OmZpbmRDYXJldE1heGltdW1PZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y29udGFpbnNPZmZzZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6aXNUZXh0UmVuZGVyZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OmlzTGlu
ZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVy
c2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6
OmlzTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJz
YWw6OmZpcnN0VGV4dEJveEZvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpmaXJzdFRleHRCb3hJblRleHRPcmRlckZvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94ZXNGb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94UmFuZ2VGb3IpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6Omhhc1RleHRCb3hlcyk6CisK
IDIwMTktMDktMjYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAg
IEZsYWt5IFRlc3Q6IGluc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLmh0bWwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA2YjQzMmYzMThkNy4uMWU3YTc1YzQ1
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRp
b24uaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
ICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgpAQCAtMzE4LDExICszMTksMTAgQEAgU3Ry
aW5nIFJlbmRlclRleHQ6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dDo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBs
ZUxpbmVMYXlvdXQoKSkgewotICAgICAgICByZWN0cy5hcHBlbmRWZWN0b3IoU2ltcGxlTGluZUxh
eW91dDo6Y29sbGVjdEFic29sdXRlUmVjdHMoKnRoaXMsICpsYXlvdXQsIGFjY3VtdWxhdGVkT2Zm
c2V0KSk7Ci0gICAgICAgIHJldHVybjsKKyAgIGZvciAoYXV0byYgYm94IDogTGluZUxheW91dFRy
YXZlcnNhbDo6dGV4dEJveGVzRm9yKCp0aGlzKSkgeworICAgICAgICBhdXRvIHJlY3QgPSBib3gu
cmVjdCgpOworICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3Qo
YWNjdW11bGF0ZWRPZmZzZXQgKyByZWN0LmxvY2F0aW9uKCksIHJlY3Quc2l6ZSgpKSkpOwogICAg
IH0KLSAgICByZWN0cy5hcHBlbmRWZWN0b3IobV9saW5lQm94ZXMuYWJzb2x1dGVSZWN0cyhhY2N1
bXVsYXRlZE9mZnNldCkpOwogfQogCiBWZWN0b3I8SW50UmVjdD4gUmVuZGVyVGV4dDo6YWJzb2x1
dGVSZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2Vs
ZWN0aW9uSGVpZ2h0LCBib29sKiB3YXNGaXhlZCkgY29uc3QKQEAgLTEwODAsMTAgKzEwODAsMTAg
QEAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+PiBSZW5kZXJUZXh0OjpkcmFn
Z2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmYKIAogSW50UG9pbnQgUmVuZGVyVGV4dDo6Zmlyc3RS
dW5Mb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVM
YXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGaXJzdFJ1
bkxvY2F0aW9uKCp0aGlzLCAqbGF5b3V0KTsKLQotICAgIHJldHVybiBtX2xpbmVCb3hlcy5maXJz
dFJ1bkxvY2F0aW9uKCk7CisgICAgYXV0byBmaXJzdCA9IExpbmVMYXlvdXRUcmF2ZXJzYWw6OmZp
cnN0VGV4dEJveEZvcigqdGhpcyk7CisgICAgaWYgKCFmaXJzdCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KGZpcnN0LT5yZWN0KCkubG9jYXRpb24oKSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUg
c3RhdGUpCkBAIC0xMzgyLDEwICsxMzgyLDE1IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0CiAK
IEludFJlY3QgUmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgaWYg
KGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBs
ZUxpbmVMYXlvdXQ6OmNvbXB1dGVCb3VuZGluZ0JveCgqdGhpcywgKmxheW91dCk7CisgICAgYXV0
byBmaXJzdCA9IExpbmVMYXlvdXRUcmF2ZXJzYWw6OmZpcnN0VGV4dEJveEZvcigqdGhpcyk7Cisg
ICAgaWYgKCFmaXJzdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYm91bmRpbmdC
b3ggPSBmaXJzdC0+cmVjdCgpOworICAgIGZvciAoYXV0byBib3ggPSBmaXJzdDsgKytib3g7KQor
ICAgICAgICBib3VuZGluZ0JveC51bml0ZUV2ZW5JZkVtcHR5KGJveC0+cmVjdCgpKTsKIAotICAg
IHJldHVybiBtX2xpbmVCb3hlcy5ib3VuZGluZ0JveCgqdGhpcyk7CisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoYm91bmRpbmdCb3gpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6Omxp
bmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0CkBAIC0xNDY4LDQzICsxNDczLDg0
IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwCiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9m
ZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQo
KSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmZpbmRDYXJldE1pbmltdW1PZmZz
ZXQoKnRoaXMsICpsYXlvdXQpOwotICAgIHJldHVybiBtX2xpbmVCb3hlcy5jYXJldE1pbk9mZnNl
dCgpOworICAgIGF1dG8gZmlyc3QgPSBMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hG
b3IoKnRoaXMpOworICAgIGlmICghZmlyc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50
IG1pbk9mZnNldCA9IGZpcnN0LT5sb2NhbFN0YXJ0T2Zmc2V0KCk7CisgICAgZm9yIChhdXRvIGJv
eCA9IGZpcnN0OyArK2JveDspCisgICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluPGludD4obWlu
T2Zmc2V0LCBib3gtPmxvY2FsU3RhcnRPZmZzZXQoKSk7CisKKyAgICByZXR1cm4gbWluT2Zmc2V0
OwogfQogCiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogewotICAgIGlm
IChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBTaW1w
bGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRNYXhpbXVtT2Zmc2V0KCp0aGlzLCAqbGF5b3V0KTsKLSAg
ICByZXR1cm4gbV9saW5lQm94ZXMuY2FyZXRNYXhPZmZzZXQoKnRoaXMpOworICAgIGF1dG8gZmly
c3QgPSBMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3IoKnRoaXMpOworICAgIGlm
ICghZmlyc3QpCisgICAgICAgIHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7CisKKyAgICBpbnQgbWF4
T2Zmc2V0ID0gZmlyc3QtPmxvY2FsRW5kT2Zmc2V0KCk7CisgICAgZm9yIChhdXRvIGJveCA9IGZp
cnN0OyArK2JveDspCisgICAgICAgIG1heE9mZnNldCA9IHN0ZDo6bWF4PGludD4obWF4T2Zmc2V0
LCBib3gtPmxvY2FsRW5kT2Zmc2V0KCkpOworCisgICAgcmV0dXJuIG1heE9mZnNldDsKIH0KIAog
dW5zaWduZWQgUmVuZGVyVGV4dDo6Y291bnRSZW5kZXJlZENoYXJhY3Rlck9mZnNldHNVbnRpbCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkp
OwotICAgIHJldHVybiBtX2xpbmVCb3hlcy5jb3VudENoYXJhY3Rlck9mZnNldHNVbnRpbChvZmZz
ZXQpOworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9yIChhdXRvJiBib3ggOiBMaW5l
TGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94ZXNGb3IoKnRoaXMpKSB7CisgICAgICAgIGF1dG8gc3Rh
cnQgPSBib3gubG9jYWxTdGFydE9mZnNldCgpOworICAgICAgICBhdXRvIGxlbmd0aCA9IGJveC5s
ZW5ndGgoKTsKKyAgICAgICAgaWYgKG9mZnNldCA8IHN0YXJ0KQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCArIGxlbmd0aCkgeworICAgICAg
ICAgICAgcmVzdWx0ICs9IG9mZnNldCAtIHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgKz0gbGVuZ3RoOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitlbnVtIGNsYXNzIE9mZnNldFR5cGUgeyBDaGFyYWN0ZXIsIENhcmV0
IH07CitzdGF0aWMgYm9vbCBjb250YWluc09mZnNldChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCB1
bnNpZ25lZCBvZmZzZXQsIE9mZnNldFR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gYm94ID0g
TGluZUxheW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94SW5UZXh0T3JkZXJGb3IodGV4dCk7IGJv
eDsgYm94LnRyYXZlcnNlTmV4dEluVGV4dE9yZGVyKCkpIHsKKyAgICAgICAgYXV0byBzdGFydCA9
IGJveC0+bG9jYWxTdGFydE9mZnNldCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgc3RhcnQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGVuZCA9IGJveC0+bG9j
YWxFbmRPZmZzZXQoKTsKKyAgICAgICAgaWYgKG9mZnNldCA+PSBzdGFydCAmJiBvZmZzZXQgPD0g
ZW5kKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IGVuZCAmJiAodHlwZSA9PSBPZmZzZXRU
eXBlOjpDaGFyYWN0ZXIgfHwgYm94LT5pc0xpbmVCcmVhaygpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICh0eXBlID09IE9mZnNldFR5cGU6OkNoYXJhY3RlcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFJldHVybiBmYWxz
ZSBmb3Igb2Zmc2V0cyBpbnNpZGUgY29tcG9zZWQgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIHJl
dHVybiAhb2Zmc2V0IHx8IG9mZnNldCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dC5uZXh0
T2Zmc2V0KHRleHQucHJldmlvdXNPZmZzZXQob2Zmc2V0KSkpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc1JlbmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byog
bGF5b3V0ID0gc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxh
eW91dDo6Y29udGFpbnNPZmZzZXQoKnRoaXMsICpsYXlvdXQsIG9mZnNldCwgU2ltcGxlTGluZUxh
eW91dDo6T2Zmc2V0VHlwZTo6Q2hhcmFjdGVyT2Zmc2V0KTsKLSAgICByZXR1cm4gbV9saW5lQm94
ZXMuY29udGFpbnNPZmZzZXQoKnRoaXMsIG9mZnNldCwgUmVuZGVyVGV4dExpbmVCb3hlczo6Q2hh
cmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1cm4gY29udGFpbnNPZmZzZXQoKnRoaXMsIG9mZnNldCwg
T2Zmc2V0VHlwZTo6Q2hhcmFjdGVyKTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc0Nh
cmV0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5b3V0
ID0gc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6
Y29udGFpbnNPZmZzZXQoKnRoaXMsICpsYXlvdXQsIG9mZnNldCwgU2ltcGxlTGluZUxheW91dDo6
T2Zmc2V0VHlwZTo6Q2FyZXRPZmZzZXQpOwotICAgIHJldHVybiBtX2xpbmVCb3hlcy5jb250YWlu
c09mZnNldCgqdGhpcywgb2Zmc2V0LCBSZW5kZXJUZXh0TGluZUJveGVzOjpDYXJldE9mZnNldCk7
CisgICAgcmV0dXJuIGNvbnRhaW5zT2Zmc2V0KCp0aGlzLCBvZmZzZXQsIE9mZnNldFR5cGU6OkNh
cmV0KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0OjpoYXNSZW5kZXJlZFRleHQoKSBjb25zdAogewot
ICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVy
biBTaW1wbGVMaW5lTGF5b3V0Ojppc1RleHRSZW5kZXJlZCgqdGhpcywgKmxheW91dCk7Ci0gICAg
cmV0dXJuIG1fbGluZUJveGVzLmhhc1JlbmRlcmVkVGV4dCgpOworICAgIGZvciAoYXV0byYgYm94
IDogTGluZUxheW91dFRyYXZlcnNhbDo6dGV4dEJveGVzRm9yKCp0aGlzKSkgeworICAgICAgICBp
ZiAoYm94Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogaW50IFJlbmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0KGludCBjdXJy
ZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwCmluZGV4IDM0ODIyYjQyYzIxLi44ZDcwZjQyMzRiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtMTQ2LDM3ICsx
NDYsNiBAQCBJbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0TGluZUJveGVzOjpmaW5kTmV4dChpbnQg
b2Zmc2V0LCBpbnQmIHBvc2l0aW9uKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50OwogfQogCi1J
bnRSZWN0IFJlbmRlclRleHRMaW5lQm94ZXM6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlclRleHQm
IHJlbmRlcmVyKSBjb25zdAotewotICAgIGlmICghbV9maXJzdCkKLSAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKLQotICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVmdCBz
aWRlIGFuZCB0aGUgbWF4aW1hbCByaWdodCBzaWRlLgotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0U2lk
ZSA9IDA7Ci0gICAgZmxvYXQgbG9naWNhbFJpZ2h0U2lkZSA9IDA7Ci0gICAgZm9yIChhdXRvKiBj
dXJyZW50ID0gbV9maXJzdDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRUZXh0Qm94
KCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQgPT0gbV9maXJzdCB8fCBjdXJyZW50LT5sb2dpY2Fs
TGVmdCgpIDwgbG9naWNhbExlZnRTaWRlKQotICAgICAgICAgICAgbG9naWNhbExlZnRTaWRlID0g
Y3VycmVudC0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnQgPT0gbV9maXJzdCB8
fCBjdXJyZW50LT5sb2dpY2FsUmlnaHQoKSA+IGxvZ2ljYWxSaWdodFNpZGUpCi0gICAgICAgICAg
ICBsb2dpY2FsUmlnaHRTaWRlID0gY3VycmVudC0+bG9naWNhbFJpZ2h0KCk7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgaXNIb3Jpem9udGFsID0gcmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpOwotICAgIAotICAgIGZsb2F0IHggPSBpc0hvcml6b250YWwgPyBsb2dpY2Fs
TGVmdFNpZGUgOiBtX2ZpcnN0LT54KCk7Ci0gICAgZmxvYXQgeSA9IGlzSG9yaXpvbnRhbCA/IG1f
Zmlyc3QtPnkoKSA6IGxvZ2ljYWxMZWZ0U2lkZTsKLSAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpv
bnRhbCA/IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGUgOiBtX2xhc3QtPmxvZ2lj
YWxCb3R0b20oKSAtIHg7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gbV9sYXN0
LT5sb2dpY2FsQm90dG9tKCkgLSB5IDogbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lk
ZTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOwotfQotCi1JbnRQb2ludCBSZW5kZXJUZXh0TGluZUJveGVzOjpmaXJzdFJ1bkxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZmlyc3QpCi0gICAgICAgIHJldHVybiBJbnRQb2lu
dCgpOwotICAgIHJldHVybiBJbnRQb2ludChtX2ZpcnN0LT50b3BMZWZ0KCkpOwotfQotCiBMYXlv
dXRSZWN0IFJlbmRlclRleHRMaW5lQm94ZXM6OnZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goY29u
c3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpcnN0KQpAQCAt
MjAwLDcxICsxNjksNiBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHRMaW5lQm94ZXM6OnZpc3VhbE92
ZXJmbG93Qm91bmRpbmdCb3goY29uc3QgUmVuZGVyVGV4dCYgcmVuZAogICAgIHJldHVybiByZWN0
OwogfQogCi1ib29sIFJlbmRlclRleHRMaW5lQm94ZXM6Omhhc1JlbmRlcmVkVGV4dCgpIGNvbnN0
Ci17Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRl
eHRCb3goKSkgewotICAgICAgICBpZiAoYm94LT5sZW4oKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBSZW5kZXJUZXh0TGluZUJv
eGVzOjpjYXJldE1pbk9mZnNldCgpIGNvbnN0Ci17Ci0gICAgYXV0byBib3ggPSBtX2ZpcnN0Owot
ICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgbWluT2Zmc2V0ID0gYm94
LT5zdGFydCgpOwotICAgIGZvciAoYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOyBib3g7IGJveCA9
IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgbWluT2Zmc2V0ID0gc3RkOjptaW48aW50Piht
aW5PZmZzZXQsIGJveC0+c3RhcnQoKSk7Ci0gICAgcmV0dXJuIG1pbk9mZnNldDsKLX0KLQotaW50
IFJlbmRlclRleHRMaW5lQm94ZXM6OmNhcmV0TWF4T2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyKSBjb25zdAotewotICAgIGF1dG8gYm94ID0gbV9sYXN0OwotICAgIGlmICghYm94KQot
ICAgICAgICByZXR1cm4gcmVuZGVyZXIudGV4dCgpLmxlbmd0aCgpOwotCi0gICAgaW50IG1heE9m
ZnNldCA9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCk7Ci0gICAgZm9yIChib3ggPSBib3gtPnBy
ZXZUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5wcmV2VGV4dEJveCgpKQotICAgICAgICBtYXhP
ZmZzZXQgPSBzdGQ6Om1heDxpbnQ+KG1heE9mZnNldCwgYm94LT5zdGFydCgpICsgYm94LT5sZW4o
KSk7Ci0gICAgcmV0dXJuIG1heE9mZnNldDsKLX0KLQotYm9vbCBSZW5kZXJUZXh0TGluZUJveGVz
Ojpjb250YWluc09mZnNldChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgdW5zaWduZWQgb2Zm
c2V0LCBPZmZzZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2Zp
cnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAob2Zmc2V0
IDwgYm94LT5zdGFydCgpICYmICFyZW5kZXJlci5jb250YWluc1JldmVyc2VkVGV4dCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNpZ25lZCBib3hFbmQgPSBib3gtPnN0
YXJ0KCkgKyBib3gtPmxlbigpOwotICAgICAgICBpZiAob2Zmc2V0ID49IGJveC0+c3RhcnQoKSAm
JiBvZmZzZXQgPD0gYm94RW5kKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID09IGJveEVuZCAm
JiAodHlwZSA9PSBDaGFyYWN0ZXJPZmZzZXQgfHwgYm94LT5pc0xpbmVCcmVhaygpKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh0eXBlID09IENoYXJhY3Rlck9m
ZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFJldHVy
biBmYWxzZSBmb3Igb2Zmc2V0cyBpbnNpZGUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICAgICAg
ICAgIHJldHVybiAhb2Zmc2V0IHx8IG9mZnNldCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVu
ZGVyZXIubmV4dE9mZnNldChyZW5kZXJlci5wcmV2aW91c09mZnNldChvZmZzZXQpKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25lZCBSZW5kZXJUZXh0
TGluZUJveGVzOjpjb3VudENoYXJhY3Rlck9mZnNldHNVbnRpbCh1bnNpZ25lZCBvZmZzZXQpIGNv
bnN0Ci17Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1f
Zmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmIChvZmZz
ZXQgPCBib3gtPnN0YXJ0KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBp
ZiAob2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpIHsKLSAgICAgICAgICAgIHJl
c3VsdCArPSBvZmZzZXQgLSBib3gtPnN0YXJ0KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCArPSBib3gtPmxlbigpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBlbnVtIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3
YXlzRG93bnN0cmVhbSwgQWx3YXlzVXBzdHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRT
dGFydCB9OwogCiBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBv
aW50TGluZURpcmVjdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCYgYm94LCBTaG91bGRBZmZpbml0
eUJlRG93bnN0cmVhbSYgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCkBAIC01MDUsMTQgKzQw
OSw2IEBAIHZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9y
UmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkCiAgICAgfQogfQogCi1WZWN0b3I8SW50UmVj
dD4gUmVuZGVyVGV4dExpbmVCb3hlczo6YWJzb2x1dGVSZWN0cyhjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwot
ICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94
KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChhY2N1
bXVsYXRlZE9mZnNldCArIGJveC0+dG9wTGVmdCgpLCBib3gtPnNpemUoKSkpKTsKLSAgICByZXR1
cm4gcmVjdHM7Ci19Ci0KIHN0YXRpYyBGbG9hdFJlY3QgbG9jYWxRdWFkRm9yVGV4dEJveChjb25z
dCBJbmxpbmVUZXh0Qm94JiBib3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0KQogewogICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBzdGQ6Om1pbihi
b3guZW5kKCksIGVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKaW5kZXggNjljNTk4YWE4ZGMuLjdjODU5Yzc0ZGQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NDksNyArNTQ5LDcgQEAg
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBPcHRpb25T
ZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmUKIAogICAgIGlmIChpczxSZW5kZXJUZXh0PihvKSkgewog
ICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obyk7Ci0gICAgICAgIGZv
ciAoYXV0byYgdGV4dEJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6OnRleHRCb3hSYW5nZUZvcih0
ZXh0KSkgeworICAgICAgICBmb3IgKGF1dG8mIHRleHRCb3ggOiBMaW5lTGF5b3V0VHJhdmVyc2Fs
Ojp0ZXh0Qm94ZXNGb3IodGV4dCkpIHsKICAgICAgICAgICAgIHRzIDw8IGluZGVudDsKICAgICAg
ICAgICAgIHdyaXRlVGV4dEJveCh0cywgdGV4dCwgdGV4dEJveCk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAppbmRleCA1MzdjOTE3
ZmFmYy4uNTE2NmFlYTE4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIE5l
dyBsaW5lIG5lZWRzIG5ldyBydW4uCiAgICAgICAgIGlmICghbV9ydW5zV2lkdGgpIHsKICAgICAg
ICAgICAgIEFTU0VSVCghbV91bmNvbXBsZXRlZFdpZHRoKTsKLSAgICAgICAgICAgIHJ1bnMuYXBw
ZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVu
c1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpKSk7
CisgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRp
b24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoKCksIGZhbHNlLCBm
cmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0IGNvbXBsZXRlZCBmcmFnbWVudCB3
aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0IChpbmNsdWRpbmcgbXVsdGlwbGUg
cGFydHMgYWNyb3NzIHJlbmRlcmVycykKICAgICAgICAgICAgIGlmICgobV9sYXN0RnJhZ21lbnQu
dHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkgfHwgIW1fbGFzdEZyYWdtZW50Lm92ZXJsYXBzVG9O
ZXh0UmVuZGVyZXIoKSkgewpAQCAtNDkyLDcgKzQ5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21l
bnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IG1fbGFzdEZyYWdtZW50LmlzQ29sbGFwc2VkKCkpCi0g
ICAgICAgICAgICAgICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0
aW9uLCBtX3J1bnNXaWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSwg
ZnJhZ21lbnQuaGFzSHlwaGVuKCkpKTsKKyAgICAgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4o
ZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCAr
IGZyYWdtZW50LndpZHRoKCksIGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQu
aXNMaW5lQnJlYWsoKSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUnVu
JiBsYXN0UnVuID0gcnVucy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgbGFzdFJ1bi5lbmQgPSBl
bmRQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5o
CmluZGV4IDRiZWI5OGNmYjdhLi40ZDlmMmJkZjUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCkBAIC01MSwxOSArNTEsMjEgQEAgc3RydWN0IFJ1biB7
CiAjaWYgQ09NUElMRVIoTVNWQykKICAgICBSdW4oKSB7IH0KICNlbmRpZgotICAgIFJ1bih1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNh
bFJpZ2h0LCBib29sIGlzRW5kT2ZMaW5lLCBib29sIGhhc0h5cGhlbikKKyAgICBSdW4odW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxS
aWdodCwgYm9vbCBpc0VuZE9mTGluZSwgYm9vbCBoYXNIeXBoZW4sIGJvb2wgaXNMaW5lQnJlYWsp
CiAgICAgICAgIDogZW5kKGVuZCkKICAgICAgICAgLCBzdGFydChzdGFydCkKICAgICAgICAgLCBp
c0VuZE9mTGluZShpc0VuZE9mTGluZSkKICAgICAgICAgLCBoYXNIeXBoZW4oaGFzSHlwaGVuKQor
ICAgICAgICAsIGlzTGluZUJyZWFrKGlzTGluZUJyZWFrKQogICAgICAgICAsIGxvZ2ljYWxMZWZ0
KGxvZ2ljYWxMZWZ0KQogICAgICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQpCiAgICAg
eyB9CiAKICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgdW5zaWduZWQgc3RhcnQgOiAzMDsKKyAgICB1
bnNpZ25lZCBzdGFydCA6IDI5OwogICAgIHVuc2lnbmVkIGlzRW5kT2ZMaW5lIDogMTsKICAgICB1
bnNpZ25lZCBoYXNIeXBoZW4gOiAxOworICAgIHVuc2lnbmVkIGlzTGluZUJyZWFrIDogMTsKICAg
ICBmbG9hdCBsb2dpY2FsTGVmdDsKICAgICBmbG9hdCBsb2dpY2FsUmlnaHQ7CiAgICAgLy8gVE9E
TzogTW92ZSB0aGVzZSBvcHRpb25hbCBpdGVtcyBvdXQgb2YgU2ltcGxlTGluZUxheW91dDo6UnVu
IHRvIGEgc3VwcGxlbWVudGFyeSBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXggOWRmMDNjM2I4
ZTQuLjYxOTc5OTdjMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCkBAIC0xOTcsMTYgKzE5Nyw2IEBAIEludFJl
Y3QgY29tcHV0ZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0
IExheW91dCYgbGF5b3V0KQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94
UmVjdCk7CiB9CiAKLUludFBvaW50IGNvbXB1dGVGaXJzdFJ1bkxvY2F0aW9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8mIHJl
c29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgYXV0byByYW5nZSA9IHJlc29sdmVy
LnJhbmdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGF1dG8gYmVnaW4gPSByYW5nZS5iZWdp
bigpOwotICAgIGlmIChiZWdpbiA9PSByYW5nZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEludFBv
aW50KDAsIDApOwotICAgIHJldHVybiBmbG9vcmVkSW50UG9pbnQoKCpiZWdpbikucmVjdCgpLmxv
Y2F0aW9uKCkpOwotfQotCiBWZWN0b3I8SW50UmVjdD4gY29sbGVjdEFic29sdXRlUmVjdHMoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBWZWN0b3I8SW50UmVjdD4gcmVj
dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
dW5jdGlvbnMuaAppbmRleCBkZGFkMWQwYTQ5NS4uNzBkNmFkOWU4ZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaApAQCAt
NDksMTMgKzQ5LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29u
c3QgTGF5b3V0JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG8KIGJvb2wgaGl0VGVzdEZsb3co
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0JiwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOwogdm9pZCBjb2xsZWN0Rmxvd092ZXJmbG93KFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExh
eW91dCYpOwogCi1ib29sIGlzVGV4dFJlbmRlcmVkKGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBM
YXlvdXQmKTsKLWVudW0gY2xhc3MgT2Zmc2V0VHlwZSB7IENhcmV0T2Zmc2V0LCBDaGFyYWN0ZXJP
ZmZzZXQgfTsKLWJvb2wgY29udGFpbnNPZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExh
eW91dCYsIHVuc2lnbmVkLCBPZmZzZXRUeXBlKTsKLXVuc2lnbmVkIGZpbmRDYXJldE1pbmltdW1P
ZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91dCYpOwotdW5zaWduZWQgZmluZENh
cmV0TWF4aW11bU9mZnNldChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0Jik7CiBJbnRS
ZWN0IGNvbXB1dGVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXQm
KTsKLUludFBvaW50IGNvbXB1dGVGaXJzdFJ1bkxvY2F0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IExheW91dCYpOwogCiBWZWN0b3I8SW50UmVjdD4gY29sbGVjdEFic29sdXRlUmVjdHMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRz
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExheW91dCYsIGJvb2wqIHdhc0ZpeGVkKTsKQEAg
LTEwMiw0MyArOTYsNiBAQCBpbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxvd0xhc3RMaW5lQmFz
ZWxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdAogICAgIHJldHVybiBmbG93
LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIChs
YXlvdXQubGluZUNvdW50KCkgLSAxKSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7CiB9CiAKLWlu
bGluZSB1bnNpZ25lZCBmaW5kQ2FyZXRNaW5pbXVtT2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmLCBj
b25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBpZiAoIWxheW91dC5ydW5Db3VudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGF5b3V0LnJ1bkF0KDApLnN0YXJ0OwotfQotCi1p
bmxpbmUgdW5zaWduZWQgZmluZENhcmV0TWF4aW11bU9mZnNldChjb25zdCBSZW5kZXJUZXh0JiBy
ZW5kZXJlciwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgaWYgKCFsYXlvdXQucnVuQ291
bnQoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnRleHQoKS5sZW5ndGgoKTsKLSAgICBhdXRv
JiBsYXN0ID0gbGF5b3V0LnJ1bkF0KGxheW91dC5ydW5Db3VudCgpIC0gMSk7Ci0gICAgcmV0dXJu
IGxhc3QuZW5kOwotfQotCi1pbmxpbmUgYm9vbCBjb250YWluc09mZnNldChjb25zdCBSZW5kZXJU
ZXh0JiwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIG9mZnNldCwgT2Zmc2V0VHlwZSBv
ZmZzZXRUeXBlKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXlvdXQucnVuQ291
bnQoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHJ1biA9IGxheW91dC5ydW5BdChpKTsKLSAgICAg
ICAgaWYgKG9mZnNldCA8IHJ1bi5zdGFydCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKG9mZnNldCA8IHJ1bi5lbmQgfHwgKG9mZnNldFR5cGUgPT0gT2Zmc2V0VHlwZTo6
Q2FyZXRPZmZzZXQgJiYgb2Zmc2V0ID09IHJ1bi5lbmQpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5saW5lIGJvb2wgaXNUZXh0UmVu
ZGVyZWQoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXlvdXQucnVuQ291bnQoKTsgKytpKSB7Ci0gICAgICAg
IGF1dG8mIHJ1biA9IGxheW91dC5ydW5BdChpKTsKLSAgICAgICAgaWYgKHJ1bi5lbmQgPiBydW4u
c3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBpbmxpbmUgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0RnJvbUZsb3coY29uc3QgUmVuZGVy
QmxvY2tGbG93JiBmbG93KQogewogICAgIHJldHVybiBmbG93LmxpbmVIZWlnaHQoZmFsc2UsIEhv
cml6b250YWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCmluZGV4IGNh
MTNjYmU2MTliLi4wZTZmZTI1MTA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdDsKICAgICAgICAg
Ym9vbCBpc0VuZE9mTGluZSgpIGNvbnN0OwogICAgICAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0
IHsgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaGFzSHlwaGVuOyB9CisgICAgICAgIGJv
b2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmlz
TGluZUJyZWFrOyB9CiAgICAgICAgIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgc2ltcGxl
UnVuKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsgfQogCiAgICAgICAg
IHVuc2lnbmVkIGxpbmVJbmRleCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAppbmRleCAzNGQyMjZhMzMyNC4u
OWI4YzYwZTcyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC0xMTEsNiArMTExLDE5IEBAIFN0cmluZ1ZpZXcg
VGV4dEJveDo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3Io
KS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwogfQogCitib29sIFRleHRCb3g6Omlz
TGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IFRleHRCb3hJ
dGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgeworICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJh
dG9yKS5pc0xpbmVCcmVhaygpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25z
dCBUZXh0Qm94SXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBw
YXRoLmlubGluZVRleHRCb3gtPmlzTGluZUJyZWFrKCk7CisgICAgfTsKKworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsK
K30KKwogdW5zaWduZWQgVGV4dEJveDo6bG9jYWxTdGFydE9mZnNldCgpIGNvbnN0CiB7CiAgICAg
YXV0byBzaW1wbGUgPSBbXShjb25zdCBUZXh0Qm94SXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgp
IHsKQEAgLTI3Miw3ICsyODUsNyBAQCBib29sIFRleHRCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25z
dAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxl
eCk7CiB9CiAKLVRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVyRm9yKGNv
bnN0IFJlbmRlclRleHQmIHRleHQpCitUZXh0Qm94SXRlcmF0b3IgZmlyc3RUZXh0Qm94Rm9yKGNv
bnN0IFJlbmRlclRleHQmIHRleHQpCiB7CiAgICAgaWYgKGF1dG8qIHNpbXBsZUxpbmVMYXlvdXQg
PSB0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkgewogICAgICAgICBhdXRvIHJhbmdlID0gc2ltcGxl
TGluZUxheW91dC0+cnVuUmVzb2x2ZXIoKS5yYW5nZUZvclJlbmRlcmVyKHRleHQpOwpAQCAtMjky
LDEyICszMDUsMTIgQEAgVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEluVGV4dE9yZGVyRm9y
KGNvbnN0IFJlbmRlclRleHQmIHRleHQpCiAgICAgICAgIHJldHVybiBUZXh0Qm94SXRlcmF0b3Ig
eyBXVEZNb3ZlKHNvcnRlZFRleHRCb3hlcyksIDAgfTsKICAgICB9CiAKLSAgICByZXR1cm4gZmly
c3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcih0ZXh0KTsKKyAgICByZXR1cm4gZmlyc3RUZXh0Qm94
Rm9yKHRleHQpOwogfQogCi1UZXh0Qm94UmFuZ2UgdGV4dEJveFJhbmdlRm9yKGNvbnN0IFJlbmRl
clRleHQmIHRleHQpCitUZXh0Qm94UmFuZ2UgdGV4dEJveGVzRm9yKGNvbnN0IFJlbmRlclRleHQm
IHRleHQpCiB7Ci0gICAgcmV0dXJuIHsgZmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcih0ZXh0
KSB9OworICAgIHJldHVybiB7IGZpcnN0VGV4dEJveEZvcih0ZXh0KSB9OwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgK
aW5kZXggMWY2MTk2NWVjYzUuLmZjOTI3ODE4NDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCkBAIC01NCw2ICs1NCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3Q7CiAKICAgICBTdHJpbmdWaWV3
IHRleHQoKSBjb25zdDsKKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7CiAKICAgICAvLyBU
aGVzZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byB0aGUgdGV4dCByZW5kZXJlciAobm90IGZsb3cp
LgogICAgIHVuc2lnbmVkIGxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdDsKQEAgLTY3LDYgKzY4LDcg
QEAgcHJvdGVjdGVkOgogICAgIFRleHRCb3goKSA9IGRlZmF1bHQ7CiAgICAgVGV4dEJveChjb25z
dCBUZXh0Qm94JikgPSBkZWZhdWx0OwogICAgIFRleHRCb3goVGV4dEJveCYmKSA9IGRlZmF1bHQ7
CisgICAgflRleHRCb3goKSA9IGRlZmF1bHQ7CiAgICAgVGV4dEJveCYgb3BlcmF0b3I9KGNvbnN0
IFRleHRCb3gmKSA9IGRlZmF1bHQ7CiAgICAgVGV4dEJveCYgb3BlcmF0b3I9KFRleHRCb3gmJikg
PSBkZWZhdWx0OwogCkBAIC0xMzAsMTAgKzEzMiwxMSBAQCBwcml2YXRlOgogICAgIFRleHRCb3hJ
dGVyYXRvciBtX2JlZ2luOwogfTsKIAotVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEluVmlz
dWFsT3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYpOworVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4
dEJveEZvcihjb25zdCBSZW5kZXJUZXh0Jik7CiBUZXh0Qm94SXRlcmF0b3IgZmlyc3RUZXh0Qm94
SW5UZXh0T3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYpOwotVGV4dEJveFJhbmdlIHRleHRCb3hS
YW5nZUZvcihjb25zdCBSZW5kZXJUZXh0Jik7Ci1pbmxpbmUgYm9vbCBoYXNUZXh0Qm94ZXMoY29u
c3QgUmVuZGVyVGV4dCYgdGV4dCkgeyByZXR1cm4gIWZpcnN0VGV4dEJveEluVmlzdWFsT3JkZXJG
b3IodGV4dCkuYXRFbmQoKTsgfQorVGV4dEJveFJhbmdlIHRleHRCb3hlc0Zvcihjb25zdCBSZW5k
ZXJUZXh0Jik7CisKK2lubGluZSBib29sIGhhc1RleHRCb3hlcyhjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0KSB7IHJldHVybiAhZmlyc3RUZXh0Qm94Rm9yKHRleHQpLmF0RW5kKCk7IH0KIAogfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379639</attachid>
            <date>2019-09-26 07:31:29 -0700</date>
            <delta_ts>2019-09-26 08:25:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-llt-5.patch</filename>
            <type>text/plain</type>
            <size>25176</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNGNmMWNjZThhNi4uZjE2Njk1ZGVlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxOS0wOS0yNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgZm9yIFJlbmRlclRleHQgZnVuY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIy
NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzZXBhcmF0ZSBzaW1wbGUgYW5kIGNv
bXBsZXggbGluZSBsYXlvdXQgdmVyc2lvbnMgd2l0aAorICAgICAgICBzaGFyZWQgZnVuY3Rpb25z
IHRoYXQgdXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3Rz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuTG9jYXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCBj
b25zdCk6CisKKyAgICAgICAgVGhpcyBpcyBzdWJzdGFudGlhbGx5IHNpbXBsZXIgdGhhbiBSZW5k
ZXJUZXh0TGluZUJveGVzOjpib3VuZGluZ0JveCBiZWNhdXNlIGl0IHVzZXMgcGh5c2ljYWwgcmVj
dHMgZm9yIGFsbCBjb21wdXRhdGlvbnMKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBsb2dpY2Fs
IHJlY3RzIGFuZCBmbGlwcGluZyB0byBwaHlzaWNhbCBhdCB0aGUgZW5kLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpjYXJldE1heE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0c1VudGlsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OmNvbnRhaW5zUmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29udGFpbnNDYXJldE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYXNSZW5kZXJlZFRleHQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRMaW5lQm94ZXM6OmJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmZpcnN0UnVuTG9jYXRpb24gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6aGFzUmVu
ZGVyZWRUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRM
aW5lQm94ZXM6OmNhcmV0TWluT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNhcmV0TWF4T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNvbnRhaW5zT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNv
dW50Q2hhcmFjdGVyT2Zmc2V0c1VudGlsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdt
ZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW46OlJ1bik6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZUZpcnN0UnVuTG9jYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25z
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRNaW5pbXVt
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZp
bmRDYXJldE1heGltdW1PZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6Y29udGFpbnNPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlTGluZUxheW91dDo6aXNUZXh0UmVuZGVyZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OmlzTGluZUJyZWFrIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OmlzTGluZUJyZWFrIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OmZpcnN0VGV4dEJveEZv
cik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hJ
blRleHRPcmRlckZvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjp0
ZXh0Qm94ZXNGb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Zmly
c3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94UmFuZ2VGb3IpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6Omhhc1RleHRCb3hlcyk6CisKIDIwMTktMDktMjYgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIEZsYWt5IFRlc3Q6IGluc3Bl
Y3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAppbmRleCA2YjQzMmYzMThkNy4uZDIyZWNlOWQ4Y2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJD
b21iaW5lVGV4dC5oIgpAQCAtMzE4LDExICszMTksMTAgQEAgU3RyaW5nIFJlbmRlclRleHQ6Om9y
aWdpbmFsVGV4dCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
IGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkgewot
ICAgICAgICByZWN0cy5hcHBlbmRWZWN0b3IoU2ltcGxlTGluZUxheW91dDo6Y29sbGVjdEFic29s
dXRlUmVjdHMoKnRoaXMsICpsYXlvdXQsIGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBmb3IgKGF1dG8mIGJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6OnRleHRCb3hl
c0ZvcigqdGhpcykpIHsKKyAgICAgICAgYXV0byByZWN0ID0gYm94LnJlY3QoKTsKKyAgICAgICAg
cmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0
ICsgcmVjdC5sb2NhdGlvbigpLCByZWN0LnNpemUoKSkpKTsKICAgICB9Ci0gICAgcmVjdHMuYXBw
ZW5kVmVjdG9yKG1fbGluZUJveGVzLmFic29sdXRlUmVjdHMoYWNjdW11bGF0ZWRPZmZzZXQpKTsK
IH0KIAogVmVjdG9yPEludFJlY3Q+IFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZSh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CkBAIC0xMDgwLDEwICsxMDgwLDEwIEBAIFZlY3RvcjxzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPj4gUmVuZGVyVGV4dDo6ZHJhZ2dlZENvbnRlbnRSYW5nZXNC
ZXR3ZWVuT2ZmCiAKIEludFBvaW50IFJlbmRlclRleHQ6OmZpcnN0UnVuTG9jYXRpb24oKSBjb25z
dAogewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAg
IHJldHVybiBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRlRmlyc3RSdW5Mb2NhdGlvbigqdGhpcywg
KmxheW91dCk7Ci0KLSAgICByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3RSdW5Mb2NhdGlvbigpOwor
ICAgIGF1dG8gZmlyc3QgPSBMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3IoKnRo
aXMpOworICAgIGlmICghZmlyc3QpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGZs
b29yZWRJbnRQb2ludChmaXJzdC0+cmVjdCgpLmxvY2F0aW9uKCkpOwogfQogCiB2b2lkIFJlbmRl
clRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQpAQCAtMTM4Miwx
MCArMTM4MiwxNSBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdAogCiBJbnRSZWN0IFJlbmRlclRl
eHQ6OmxpbmVzQm91bmRpbmdCb3goKSBjb25zdAogewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBz
aW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0Ojpjb21w
dXRlQm91bmRpbmdCb3goKnRoaXMsICpsYXlvdXQpOworICAgIGF1dG8gZmlyc3QgPSBMaW5lTGF5
b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3IoKnRoaXMpOworICAgIGlmICghZmlyc3QpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGJvdW5kaW5nQm94ID0gZmlyc3QtPnJlY3Qo
KTsKKyAgICBmb3IgKGF1dG8gYm94ID0gZmlyc3Q7ICsrYm94OykKKyAgICAgICAgYm91bmRpbmdC
b3gudW5pdGVFdmVuSWZFbXB0eShib3gtPnJlY3QoKSk7CiAKLSAgICByZXR1cm4gbV9saW5lQm94
ZXMuYm91bmRpbmdCb3goKnRoaXMpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5k
aW5nQm94KTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbG93
Qm91bmRpbmdCb3goKSBjb25zdApAQCAtMTQ2OCw0MyArMTQ3Myw4NCBAQCBMYXlvdXRSZWN0IFJl
bmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcAogCiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAogewot
ICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVy
biBTaW1wbGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRNaW5pbXVtT2Zmc2V0KCp0aGlzLCAqbGF5b3V0
KTsKLSAgICByZXR1cm4gbV9saW5lQm94ZXMuY2FyZXRNaW5PZmZzZXQoKTsKKyAgICBhdXRvIGZp
cnN0ID0gTGluZUxheW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94Rm9yKCp0aGlzKTsKKyAgICBp
ZiAoIWZpcnN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBtaW5PZmZzZXQgPSBmaXJz
dC0+bG9jYWxTdGFydE9mZnNldCgpOworICAgIGZvciAoYXV0byBib3ggPSBmaXJzdDsgKytib3g7
KQorICAgICAgICBtaW5PZmZzZXQgPSBzdGQ6Om1pbjxpbnQ+KG1pbk9mZnNldCwgYm94LT5sb2Nh
bFN0YXJ0T2Zmc2V0KCkpOworCisgICAgcmV0dXJuIG1pbk9mZnNldDsKIH0KIAogaW50IFJlbmRl
clRleHQ6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5b3V0ID0g
c2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6Zmlu
ZENhcmV0TWF4aW11bU9mZnNldCgqdGhpcywgKmxheW91dCk7Ci0gICAgcmV0dXJuIG1fbGluZUJv
eGVzLmNhcmV0TWF4T2Zmc2V0KCp0aGlzKTsKKyAgICBhdXRvIGZpcnN0ID0gTGluZUxheW91dFRy
YXZlcnNhbDo6Zmlyc3RUZXh0Qm94Rm9yKCp0aGlzKTsKKyAgICBpZiAoIWZpcnN0KQorICAgICAg
ICByZXR1cm4gdGV4dCgpLmxlbmd0aCgpOworCisgICAgaW50IG1heE9mZnNldCA9IGZpcnN0LT5s
b2NhbEVuZE9mZnNldCgpOworICAgIGZvciAoYXV0byBib3ggPSBmaXJzdDsgKytib3g7KQorICAg
ICAgICBtYXhPZmZzZXQgPSBzdGQ6Om1heDxpbnQ+KG1heE9mZnNldCwgYm94LT5sb2NhbEVuZE9m
ZnNldCgpKTsKKworICAgIHJldHVybiBtYXhPZmZzZXQ7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclRl
eHQ6OmNvdW50UmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXRzVW50aWwodW5zaWduZWQgb2Zmc2V0KSBj
b25zdAogewotICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsKLSAgICByZXR1cm4gbV9s
aW5lQm94ZXMuY291bnRDaGFyYWN0ZXJPZmZzZXRzVW50aWwob2Zmc2V0KTsKKyAgICB1bnNpZ25l
ZCByZXN1bHQgPSAwOworICAgIGZvciAoYXV0byYgYm94IDogTGluZUxheW91dFRyYXZlcnNhbDo6
dGV4dEJveGVzRm9yKCp0aGlzKSkgeworICAgICAgICBhdXRvIHN0YXJ0ID0gYm94LmxvY2FsU3Rh
cnRPZmZzZXQoKTsKKyAgICAgICAgYXV0byBsZW5ndGggPSBib3gubGVuZ3RoKCk7CisgICAgICAg
IGlmIChvZmZzZXQgPCBzdGFydCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IGlmIChvZmZzZXQgPD0gc3RhcnQgKyBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBv
ZmZzZXQgLSBzdGFydDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0ICs9IGxlbmd0aDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZW51bSBjbGFzcyBPZmZzZXRUeXBlIHsgQ2hhcmFjdGVyLCBDYXJldCB9Oworc3RhdGljIGJvb2wg
Y29udGFpbnNPZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCBP
ZmZzZXRUeXBlIHR5cGUpCit7CisgICAgZm9yIChhdXRvIGJveCA9IExpbmVMYXlvdXRUcmF2ZXJz
YWw6OmZpcnN0VGV4dEJveEluVGV4dE9yZGVyRm9yKHRleHQpOyBib3g7IGJveC50cmF2ZXJzZU5l
eHRJblRleHRPcmRlcigpKSB7CisgICAgICAgIGF1dG8gc3RhcnQgPSBib3gtPmxvY2FsU3RhcnRP
ZmZzZXQoKTsKKyAgICAgICAgaWYgKG9mZnNldCA8IHN0YXJ0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBlbmQgPSBib3gtPmxvY2FsRW5kT2Zmc2V0KCk7Cisg
ICAgICAgIGlmIChvZmZzZXQgPj0gc3RhcnQgJiYgb2Zmc2V0IDw9IGVuZCkgeworICAgICAgICAg
ICAgaWYgKG9mZnNldCA9PSBlbmQgJiYgKHR5cGUgPT0gT2Zmc2V0VHlwZTo6Q2hhcmFjdGVyIHx8
IGJveC0+aXNMaW5lQnJlYWsoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAodHlwZSA9PSBPZmZzZXRUeXBlOjpDaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIG9mZnNldHMgaW5z
aWRlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gIW9mZnNldCB8fCBv
ZmZzZXQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHQubmV4dE9mZnNldCh0ZXh0LnByZXZp
b3VzT2Zmc2V0KG9mZnNldCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNSZW5kZXJlZENoYXJhY3Rlck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxp
bmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbnRhaW5zT2Zm
c2V0KCp0aGlzLCAqbGF5b3V0LCBvZmZzZXQsIFNpbXBsZUxpbmVMYXlvdXQ6Ok9mZnNldFR5cGU6
OkNoYXJhY3Rlck9mZnNldCk7Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLmNvbnRhaW5zT2Zmc2V0
KCp0aGlzLCBvZmZzZXQsIFJlbmRlclRleHRMaW5lQm94ZXM6OkNoYXJhY3Rlck9mZnNldCk7Cisg
ICAgcmV0dXJuIGNvbnRhaW5zT2Zmc2V0KCp0aGlzLCBvZmZzZXQsIE9mZnNldFR5cGU6OkNoYXJh
Y3Rlcik7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNDYXJldE9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlv
dXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbnRhaW5zT2Zmc2V0KCp0
aGlzLCAqbGF5b3V0LCBvZmZzZXQsIFNpbXBsZUxpbmVMYXlvdXQ6Ok9mZnNldFR5cGU6OkNhcmV0
T2Zmc2V0KTsKLSAgICByZXR1cm4gbV9saW5lQm94ZXMuY29udGFpbnNPZmZzZXQoKnRoaXMsIG9m
ZnNldCwgUmVuZGVyVGV4dExpbmVCb3hlczo6Q2FyZXRPZmZzZXQpOworICAgIHJldHVybiBjb250
YWluc09mZnNldCgqdGhpcywgb2Zmc2V0LCBPZmZzZXRUeXBlOjpDYXJldCk7CiB9CiAKIGJvb2wg
UmVuZGVyVGV4dDo6aGFzUmVuZGVyZWRUZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5
b3V0ID0gc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91
dDo6aXNUZXh0UmVuZGVyZWQoKnRoaXMsICpsYXlvdXQpOwotICAgIHJldHVybiBtX2xpbmVCb3hl
cy5oYXNSZW5kZXJlZFRleHQoKTsKKyAgICBmb3IgKGF1dG8mIGJveCA6IExpbmVMYXlvdXRUcmF2
ZXJzYWw6OnRleHRCb3hlc0ZvcigqdGhpcykpIHsKKyAgICAgICAgaWYgKGJveC5sZW5ndGgoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGludCBSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCAz
NDgyMmI0MmMyMS4uOGQ3MGY0MjM0YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTE0NiwzNyArMTQ2LDYgQEAgSW5saW5lVGV4
dEJveCogUmVuZGVyVGV4dExpbmVCb3hlczo6ZmluZE5leHQoaW50IG9mZnNldCwgaW50JiBwb3Np
dGlvbikgY29uc3QKICAgICByZXR1cm4gY3VycmVudDsKIH0KIAotSW50UmVjdCBSZW5kZXJUZXh0
TGluZUJveGVzOjpib3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikgY29uc3QK
LXsKLSAgICBpZiAoIW1fZmlyc3QpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAv
LyBSZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGlt
YWwgcmlnaHQgc2lkZS4KLSAgICBmbG9hdCBsb2dpY2FsTGVmdFNpZGUgPSAwOwotICAgIGZsb2F0
IGxvZ2ljYWxSaWdodFNpZGUgPSAwOwotICAgIGZvciAoYXV0byogY3VycmVudCA9IG1fZmlyc3Q7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlm
IChjdXJyZW50ID09IG1fZmlyc3QgfHwgY3VycmVudC0+bG9naWNhbExlZnQoKSA8IGxvZ2ljYWxM
ZWZ0U2lkZSkKLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0U2lkZSA9IGN1cnJlbnQtPmxvZ2ljYWxM
ZWZ0KCk7Ci0gICAgICAgIGlmIChjdXJyZW50ID09IG1fZmlyc3QgfHwgY3VycmVudC0+bG9naWNh
bFJpZ2h0KCkgPiBsb2dpY2FsUmlnaHRTaWRlKQotICAgICAgICAgICAgbG9naWNhbFJpZ2h0U2lk
ZSA9IGN1cnJlbnQtPmxvZ2ljYWxSaWdodCgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzSG9y
aXpvbnRhbCA9IHJlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAg
ICAKLSAgICBmbG9hdCB4ID0gaXNIb3Jpem9udGFsID8gbG9naWNhbExlZnRTaWRlIDogbV9maXJz
dC0+eCgpOwotICAgIGZsb2F0IHkgPSBpc0hvcml6b250YWwgPyBtX2ZpcnN0LT55KCkgOiBsb2dp
Y2FsTGVmdFNpZGU7Ci0gICAgZmxvYXQgd2lkdGggPSBpc0hvcml6b250YWwgPyBsb2dpY2FsUmln
aHRTaWRlIC0gbG9naWNhbExlZnRTaWRlIDogbV9sYXN0LT5sb2dpY2FsQm90dG9tKCkgLSB4Owot
ICAgIGZsb2F0IGhlaWdodCA9IGlzSG9yaXpvbnRhbCA/IG1fbGFzdC0+bG9naWNhbEJvdHRvbSgp
IC0geSA6IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7Ci0gICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLX0KLQotSW50
UG9pbnQgUmVuZGVyVGV4dExpbmVCb3hlczo6Zmlyc3RSdW5Mb2NhdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2ZpcnN0KQotICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKLSAgICByZXR1cm4g
SW50UG9pbnQobV9maXJzdC0+dG9wTGVmdCgpKTsKLX0KLQogTGF5b3V0UmVjdCBSZW5kZXJUZXh0
TGluZUJveGVzOjp2aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyKSBjb25zdAogewogICAgIGlmICghbV9maXJzdCkKQEAgLTIwMCw3MSArMTY5LDYgQEAg
TGF5b3V0UmVjdCBSZW5kZXJUZXh0TGluZUJveGVzOjp2aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94
KGNvbnN0IFJlbmRlclRleHQmIHJlbmQKICAgICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBSZW5k
ZXJUZXh0TGluZUJveGVzOjpoYXNSZW5kZXJlZFRleHQoKSBjb25zdAotewotICAgIGZvciAoYXV0
byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAg
ICAgaWYgKGJveC0+bGVuKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1pbnQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y2FyZXRNaW5PZmZz
ZXQoKSBjb25zdAotewotICAgIGF1dG8gYm94ID0gbV9maXJzdDsKLSAgICBpZiAoIWJveCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IG1pbk9mZnNldCA9IGJveC0+c3RhcnQoKTsKLSAgICBm
b3IgKGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94
KCkpCi0gICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluPGludD4obWluT2Zmc2V0LCBib3gtPnN0
YXJ0KCkpOwotICAgIHJldHVybiBtaW5PZmZzZXQ7Ci19Ci0KLWludCBSZW5kZXJUZXh0TGluZUJv
eGVzOjpjYXJldE1heE9mZnNldChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikgY29uc3QKLXsK
LSAgICBhdXRvIGJveCA9IG1fbGFzdDsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLnRleHQoKS5sZW5ndGgoKTsKLQotICAgIGludCBtYXhPZmZzZXQgPSBib3gtPnN0YXJ0
KCkgKyBib3gtPmxlbigpOwotICAgIGZvciAoYm94ID0gYm94LT5wcmV2VGV4dEJveCgpOyBib3g7
IGJveCA9IGJveC0+cHJldlRleHRCb3goKSkKLSAgICAgICAgbWF4T2Zmc2V0ID0gc3RkOjptYXg8
aW50PihtYXhPZmZzZXQsIGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpOwotICAgIHJldHVybiBt
YXhPZmZzZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dExpbmVCb3hlczo6Y29udGFpbnNPZmZzZXQo
Y29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCwgT2Zmc2V0VHlwZSB0
eXBlKSBjb25zdAotewotICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYgKG9mZnNldCA8IGJveC0+c3RhcnQoKSAm
JiAhcmVuZGVyZXIuY29udGFpbnNSZXZlcnNlZFRleHQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgdW5zaWduZWQgYm94RW5kID0gYm94LT5zdGFydCgpICsgYm94LT5sZW4o
KTsKLSAgICAgICAgaWYgKG9mZnNldCA+PSBib3gtPnN0YXJ0KCkgJiYgb2Zmc2V0IDw9IGJveEVu
ZCkgewotICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBib3hFbmQgJiYgKHR5cGUgPT0gQ2hhcmFj
dGVyT2Zmc2V0IHx8IGJveC0+aXNMaW5lQnJlYWsoKSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBDaGFyYWN0ZXJPZmZzZXQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIG9mZnNl
dHMgaW5zaWRlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gIW9mZnNl
dCB8fCBvZmZzZXQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlbmRlcmVyLm5leHRPZmZzZXQo
cmVuZGVyZXIucHJldmlvdXNPZmZzZXQob2Zmc2V0KSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y291bnRD
aGFyYWN0ZXJPZmZzZXRzVW50aWwodW5zaWduZWQgb2Zmc2V0KSBjb25zdAotewotICAgIHVuc2ln
bmVkIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9
IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAob2Zmc2V0IDwgYm94LT5zdGFydCgp
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgaWYgKG9mZnNldCA8PSBib3gt
PnN0YXJ0KCkgKyBib3gtPmxlbigpKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gb2Zmc2V0IC0g
Ym94LT5zdGFydCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICByZXN1bHQgKz0gYm94LT5sZW4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQogZW51bSBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSB7IEFsd2F5c0Rvd25zdHJlYW0sIEFs
d2F5c1Vwc3RyZWFtLCBVcHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQgfTsKIAogc3RhdGlj
IGJvb2wgbGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KGludCBwb2ludExpbmVEaXJlY3Rpb24s
IGNvbnN0IElubGluZVRleHRCb3gmIGJveCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0mIHNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKQpAQCAtNTA1LDE0ICs0MDksNiBAQCB2b2lkIFJlbmRl
clRleHRMaW5lQm94ZXM6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZAogICAgIH0KIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlbmRlclRleHRMaW5l
Qm94ZXM6OmFic29sdXRlUmVjdHMoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KSBjb25zdAotewotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICBmb3IgKGF1dG8qIGJv
eCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBi
b3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7Ci0gICAgcmV0dXJuIHJlY3RzOwotfQotCiBz
dGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZvclRleHRCb3goY29uc3QgSW5saW5lVGV4dEJveCYg
Ym94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCkKIHsKICAgICB1bnNpZ25lZCByZWFsRW5kID0gc3RkOjptaW4oYm94LmVuZCgpLCBlbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDY5
YzU5OGFhOGRjLi43Yzg1OWM3NGRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZs
YWc+IGJlCiAKICAgICBpZiAoaXM8UmVuZGVyVGV4dD4obykpIHsKICAgICAgICAgYXV0byYgdGV4
dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KG8pOwotICAgICAgICBmb3IgKGF1dG8mIHRleHRCb3gg
OiBMaW5lTGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94UmFuZ2VGb3IodGV4dCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiB0ZXh0Qm94IDogTGluZUxheW91dFRyYXZlcnNhbDo6dGV4dEJveGVzRm9yKHRl
eHQpKSB7CiAgICAgICAgICAgICB0cyA8PCBpbmRlbnQ7CiAgICAgICAgICAgICB3cml0ZVRleHRC
b3godHMsIHRleHQsIHRleHRCb3gpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggNTM3YzkxN2ZhZmMuLjUxNjZhZWExODU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBA
IC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgICAgICAvLyBOZXcgbGluZSBuZWVkcyBuZXcg
cnVuLgogICAgICAgICBpZiAoIW1fcnVuc1dpZHRoKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1f
dW5jb21wbGV0ZWRXaWR0aCk7Ci0gICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQu
c3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50
LndpZHRoKCksIGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSkpOworICAgICAgICAgICAgcnVu
cy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0aCwg
bV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSwgZnJhZ21lbnQuaGFzSHlwaGVu
KCksIGZyYWdtZW50LmlzTGluZUJyZWFrKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEFkdmFuY2UgbGFzdCBjb21wbGV0ZWQgZnJhZ21lbnQgd2hlbiB0aGUgcHJldmlvdXMg
ZnJhZ21lbnQgaXMgYWxsIHNldCAoaW5jbHVkaW5nIG11bHRpcGxlIHBhcnRzIGFjcm9zcyByZW5k
ZXJlcnMpCiAgICAgICAgICAgICBpZiAoKG1fbGFzdEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVu
dC50eXBlKCkpIHx8ICFtX2xhc3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsK
QEAgLTQ5Miw3ICs0OTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fbGFzdEZyYWdtZW50LmlzTGFzdEluUmVuZGVy
ZXIoKSB8fCBtX2xhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKQotICAgICAgICAgICAgICAgIHJ1
bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgs
IG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhl
bigpKSk7CisgICAgICAgICAgICAgICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCks
IGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgp
LCBmYWxzZSwgZnJhZ21lbnQuaGFzSHlwaGVuKCksIGZyYWdtZW50LmlzTGluZUJyZWFrKCkpKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFJ1biYgbGFzdFJ1biA9IHJ1bnMu
bGFzdCgpOwogICAgICAgICAgICAgICAgIGxhc3RSdW4uZW5kID0gZW5kUG9zaXRpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAppbmRleCA0YmViOThjZmI3
YS4uNGQ5ZjJiZGY1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXQuaApAQCAtNTEsMTkgKzUxLDIxIEBAIHN0cnVjdCBSdW4gewogI2lmIENPTVBJTEVSKE1T
VkMpCiAgICAgUnVuKCkgeyB9CiAjZW5kaWYKLSAgICBSdW4odW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgYm9vbCBpc0Vu
ZE9mTGluZSwgYm9vbCBoYXNIeXBoZW4pCisgICAgUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQsIGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGJvb2wgaXNFbmRP
ZkxpbmUsIGJvb2wgaGFzSHlwaGVuLCBib29sIGlzTGluZUJyZWFrKQogICAgICAgICA6IGVuZChl
bmQpCiAgICAgICAgICwgc3RhcnQoc3RhcnQpCiAgICAgICAgICwgaXNFbmRPZkxpbmUoaXNFbmRP
ZkxpbmUpCiAgICAgICAgICwgaGFzSHlwaGVuKGhhc0h5cGhlbikKKyAgICAgICAgLCBpc0xpbmVC
cmVhayhpc0xpbmVCcmVhaykKICAgICAgICAgLCBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKICAg
ICAgICAgLCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQogICAgIHsgfQogCiAgICAgdW5zaWdu
ZWQgZW5kOwotICAgIHVuc2lnbmVkIHN0YXJ0IDogMzA7CisgICAgdW5zaWduZWQgc3RhcnQgOiAy
OTsKICAgICB1bnNpZ25lZCBpc0VuZE9mTGluZSA6IDE7CiAgICAgdW5zaWduZWQgaGFzSHlwaGVu
IDogMTsKKyAgICB1bnNpZ25lZCBpc0xpbmVCcmVhayA6IDE7CiAgICAgZmxvYXQgbG9naWNhbExl
ZnQ7CiAgICAgZmxvYXQgbG9naWNhbFJpZ2h0OwogICAgIC8vIFRPRE86IE1vdmUgdGhlc2Ugb3B0
aW9uYWwgaXRlbXMgb3V0IG9mIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biB0byBhIHN1cHBsZW1lbnRh
cnkgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCmluZGV4IDlkZjAzYzNiOGU0Li42MTk3OTk3YzAwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmNwcApAQCAtMTk3LDE2ICsxOTcsNiBAQCBJbnRSZWN0IGNvbXB1dGVCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXQmIGxheW91dCkK
ICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveFJlY3QpOwogfQogCi1JbnRQ
b2ludCBjb21wdXRlRmlyc3RSdW5Mb2NhdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91dC5y
dW5SZXNvbHZlcigpOwotICAgIGF1dG8gcmFuZ2UgPSByZXNvbHZlci5yYW5nZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKLSAgICBhdXRvIGJlZ2luID0gcmFuZ2UuYmVnaW4oKTsKLSAgICBpZiAoYmVn
aW4gPT0gcmFuZ2UuZW5kKCkpCi0gICAgICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsKLSAgICBy
ZXR1cm4gZmxvb3JlZEludFBvaW50KCgqYmVnaW4pLnJlY3QoKS5sb2NhdGlvbigpKTsKLX0KLQog
VmVjdG9yPEludFJlY3Q+IGNvbGxlY3RBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIsIGNvbnN0IExheW91dCYgbGF5b3V0LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpCiB7CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgKaW5kZXgg
ZGRhZDFkMGE0OTUuLjcwZDZhZDllOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgKQEAgLTQ5LDEzICs0OSw3IEBAIHZv
aWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYsIFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvCiBib29sIGhpdFRlc3RGbG93KGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYsIGNvbnN0IExheW91dCYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIHZvaWQgY29sbGVj
dEZsb3dPdmVyZmxvdyhSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKIAotYm9vbCBp
c1RleHRSZW5kZXJlZChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0Jik7Ci1lbnVtIGNs
YXNzIE9mZnNldFR5cGUgeyBDYXJldE9mZnNldCwgQ2hhcmFjdGVyT2Zmc2V0IH07Ci1ib29sIGNv
bnRhaW5zT2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXQmLCB1bnNpZ25lZCwg
T2Zmc2V0VHlwZSk7Ci11bnNpZ25lZCBmaW5kQ2FyZXRNaW5pbXVtT2Zmc2V0KGNvbnN0IFJlbmRl
clRleHQmLCBjb25zdCBMYXlvdXQmKTsKLXVuc2lnbmVkIGZpbmRDYXJldE1heGltdW1PZmZzZXQo
Y29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91dCYpOwogSW50UmVjdCBjb21wdXRlQm91bmRp
bmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0Jik7Ci1JbnRQb2ludCBjb21w
dXRlRmlyc3RSdW5Mb2NhdGlvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXQmKTsK
IAogVmVjdG9yPEludFJlY3Q+IGNvbGxlY3RBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IExheW91dCYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7
CiBWZWN0b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBMYXlvdXQmLCBib29sKiB3YXNGaXhlZCk7CkBAIC0xMDIsNDMgKzk2LDYgQEAg
aW5saW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dMYXN0TGluZUJhc2VsaW5lKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgZmxvdywgY29uc3QKICAgICByZXR1cm4gZmxvdy5ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKCkgKyBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykgKiAobGF5b3V0LmxpbmVDb3VudCgp
IC0gMSkgKyBiYXNlbGluZUZyb21GbG93KGZsb3cpOwogfQogCi1pbmxpbmUgdW5zaWduZWQgZmlu
ZENhcmV0TWluaW11bU9mZnNldChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0JiBsYXlv
dXQpCi17Ci0gICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGxheW91dC5ydW5BdCgwKS5zdGFydDsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGZp
bmRDYXJldE1heGltdW1PZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IExh
eW91dCYgbGF5b3V0KQotewotICAgIGlmICghbGF5b3V0LnJ1bkNvdW50KCkpCi0gICAgICAgIHJl
dHVybiByZW5kZXJlci50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgYXV0byYgbGFzdCA9IGxheW91dC5y
dW5BdChsYXlvdXQucnVuQ291bnQoKSAtIDEpOwotICAgIHJldHVybiBsYXN0LmVuZDsKLX0KLQot
aW5saW5lIGJvb2wgY29udGFpbnNPZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91
dCYgbGF5b3V0LCB1bnNpZ25lZCBvZmZzZXQsIE9mZnNldFR5cGUgb2Zmc2V0VHlwZSkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5b3V0LnJ1bkNvdW50KCk7ICsraSkgewotICAg
ICAgICBhdXRvJiBydW4gPSBsYXlvdXQucnVuQXQoaSk7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBy
dW4uc3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvZmZzZXQg
PCBydW4uZW5kIHx8IChvZmZzZXRUeXBlID09IE9mZnNldFR5cGU6OkNhcmV0T2Zmc2V0ICYmIG9m
ZnNldCA9PSBydW4uZW5kKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSBib29sIGlzVGV4dFJlbmRlcmVkKGNvbnN0IFJlbmRl
clRleHQmLCBjb25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGF5b3V0LnJ1bkNvdW50KCk7ICsraSkgewotICAgICAgICBhdXRvJiBydW4gPSBsYXlv
dXQucnVuQXQoaSk7Ci0gICAgICAgIGlmIChydW4uZW5kID4gcnVuLnN0YXJ0KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIExh
eW91dFVuaXQgbGluZUhlaWdodEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykK
IHsKICAgICByZXR1cm4gZmxvdy5saW5lSGVpZ2h0KGZhbHNlLCBIb3Jpem9udGFsTGluZSwgUG9z
aXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAppbmRleCBjYTEzY2JlNjE5Yi4uMGU2ZmUy
NTEwNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbmRPZkxpbmUo
KSBjb25zdDsKICAgICAgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBtX2l0ZXJh
dG9yLnNpbXBsZVJ1bigpLmhhc0h5cGhlbjsgfQorICAgICAgICBib29sIGlzTGluZUJyZWFrKCkg
Y29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5pc0xpbmVCcmVhazsgfQogICAg
ICAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW4mIHNpbXBsZVJ1bigpIGNvbnN0IHsgcmV0
dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7IH0KIAogICAgICAgICB1bnNpZ25lZCBsaW5lSW5k
ZXgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUxheW91dFRyYXZlcnNhbC5jcHAKaW5kZXggMzRkMjI2YTMzMjQuLjliOGM2MGU3MmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVy
c2FsLmNwcApAQCAtMTExLDYgKzExMSwxOSBAQCBTdHJpbmdWaWV3IFRleHRCb3g6OnRleHQoKSBj
b25zdAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwg
c2ltcGxlLCBjb21wbGV4KTsKIH0KIAorYm9vbCBUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0
Cit7CisgICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBUZXh0Qm94SXRlcmF0b3I6OlNpbXBsZVBh
dGgmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikuaXNMaW5lQnJlYWso
KTsKKyAgICB9OworCisgICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgVGV4dEJveEl0ZXJhdG9y
OjpDb21wbGV4UGF0aCYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVUZXh0Qm94
LT5pc0xpbmVCcmVhaygpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVy
YXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisKIHVuc2lnbmVkIFRl
eHRCb3g6OmxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdAogewogICAgIGF1dG8gc2ltcGxlID0gW10o
Y29uc3QgVGV4dEJveEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7CkBAIC0yNzIsNyArMjg1
LDcgQEAgYm9vbCBUZXh0Qm94SXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKICAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwogfQogCi1UZXh0Qm94
SXRlcmF0b3IgZmlyc3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0KQorVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEZvcihjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0KQogewogICAgIGlmIChhdXRvKiBzaW1wbGVMaW5lTGF5b3V0ID0gdGV4dC5zaW1wbGVMaW5l
TGF5b3V0KCkpIHsKICAgICAgICAgYXV0byByYW5nZSA9IHNpbXBsZUxpbmVMYXlvdXQtPnJ1blJl
c29sdmVyKCkucmFuZ2VGb3JSZW5kZXJlcih0ZXh0KTsKQEAgLTI5MiwxMiArMzA1LDEyIEBAIFRl
eHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hJblRleHRPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0
JiB0ZXh0KQogICAgICAgICByZXR1cm4gVGV4dEJveEl0ZXJhdG9yIHsgV1RGTW92ZShzb3J0ZWRU
ZXh0Qm94ZXMpLCAwIH07CiAgICAgfQogCi0gICAgcmV0dXJuIGZpcnN0VGV4dEJveEluVmlzdWFs
T3JkZXJGb3IodGV4dCk7CisgICAgcmV0dXJuIGZpcnN0VGV4dEJveEZvcih0ZXh0KTsKIH0KIAot
VGV4dEJveFJhbmdlIHRleHRCb3hSYW5nZUZvcihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KQorVGV4
dEJveFJhbmdlIHRleHRCb3hlc0Zvcihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KQogewotICAgIHJl
dHVybiB7IGZpcnN0VGV4dEJveEluVmlzdWFsT3JkZXJGb3IodGV4dCkgfTsKKyAgICByZXR1cm4g
eyBmaXJzdFRleHRCb3hGb3IodGV4dCkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCmluZGV4IDFmNjE5NjVlY2M1
Li5mYzkyNzgxODQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
TGluZUxheW91dFRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBkaXJPdmVycmlkZSgpIGNvbnN0OwogCiAgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0OwogCiAgICAgLy8gVGhlc2Ugb2Zmc2V0cyBhcmUg
cmVsYXRpdmUgdG8gdGhlIHRleHQgcmVuZGVyZXIgKG5vdCBmbG93KS4KICAgICB1bnNpZ25lZCBs
b2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3Q7CkBAIC02Nyw2ICs2OCw3IEBAIHByb3RlY3RlZDoKICAg
ICBUZXh0Qm94KCkgPSBkZWZhdWx0OwogICAgIFRleHRCb3goY29uc3QgVGV4dEJveCYpID0gZGVm
YXVsdDsKICAgICBUZXh0Qm94KFRleHRCb3gmJikgPSBkZWZhdWx0OworICAgIH5UZXh0Qm94KCkg
PSBkZWZhdWx0OwogICAgIFRleHRCb3gmIG9wZXJhdG9yPShjb25zdCBUZXh0Qm94JikgPSBkZWZh
dWx0OwogICAgIFRleHRCb3gmIG9wZXJhdG9yPShUZXh0Qm94JiYpID0gZGVmYXVsdDsKIApAQCAt
MTMwLDEwICsxMzIsMTEgQEAgcHJpdmF0ZToKICAgICBUZXh0Qm94SXRlcmF0b3IgbV9iZWdpbjsK
IH07CiAKLVRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVyRm9yKGNvbnN0
IFJlbmRlclRleHQmKTsKK1RleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hGb3IoY29uc3QgUmVu
ZGVyVGV4dCYpOwogVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEluVGV4dE9yZGVyRm9yKGNv
bnN0IFJlbmRlclRleHQmKTsKLVRleHRCb3hSYW5nZSB0ZXh0Qm94UmFuZ2VGb3IoY29uc3QgUmVu
ZGVyVGV4dCYpOwotaW5saW5lIGJvb2wgaGFzVGV4dEJveGVzKGNvbnN0IFJlbmRlclRleHQmIHRl
eHQpIHsgcmV0dXJuICFmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVyRm9yKHRleHQpLmF0RW5kKCk7
IH0KK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYpOworCitpbmxp
bmUgYm9vbCBoYXNUZXh0Qm94ZXMoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkgeyByZXR1cm4gIWZp
cnN0VGV4dEJveEZvcih0ZXh0KS5hdEVuZCgpOyB9CiAKIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379642</attachid>
            <date>2019-09-26 08:25:44 -0700</date>
            <delta_ts>2019-09-26 11:25:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-llt-6.patch</filename>
            <type>text/plain</type>
            <size>26683</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNGNmMWNjZThhNi4uZjE2Njk1ZGVlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxOS0wOS0yNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgZm9yIFJlbmRlclRleHQgZnVuY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIy
NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzZXBhcmF0ZSBzaW1wbGUgYW5kIGNv
bXBsZXggbGluZSBsYXlvdXQgdmVyc2lvbnMgd2l0aAorICAgICAgICBzaGFyZWQgZnVuY3Rpb25z
IHRoYXQgdXNlIExpbmVMYXlvdXRUcmF2ZXJzYWwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3Rz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuTG9jYXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCBj
b25zdCk6CisKKyAgICAgICAgVGhpcyBpcyBzdWJzdGFudGlhbGx5IHNpbXBsZXIgdGhhbiBSZW5k
ZXJUZXh0TGluZUJveGVzOjpib3VuZGluZ0JveCBiZWNhdXNlIGl0IHVzZXMgcGh5c2ljYWwgcmVj
dHMgZm9yIGFsbCBjb21wdXRhdGlvbnMKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyBsb2dpY2Fs
IHJlY3RzIGFuZCBmbGlwcGluZyB0byBwaHlzaWNhbCBhdCB0aGUgZW5kLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpjYXJldE1heE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0c1VudGlsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OmNvbnRhaW5zUmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29udGFpbnNDYXJldE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYXNSZW5kZXJlZFRleHQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRMaW5lQm94ZXM6OmJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmZpcnN0UnVuTG9jYXRpb24gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6aGFzUmVu
ZGVyZWRUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRM
aW5lQm94ZXM6OmNhcmV0TWluT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNhcmV0TWF4T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNvbnRhaW5zT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmNv
dW50Q2hhcmFjdGVyT2Zmc2V0c1VudGlsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdt
ZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW46OlJ1bik6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZUZpcnN0UnVuTG9jYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25z
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRNaW5pbXVt
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZp
bmRDYXJldE1heGltdW1PZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6Y29udGFpbnNPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlTGluZUxheW91dDo6aXNUZXh0UmVuZGVyZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OmlzTGluZUJyZWFrIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OmlzTGluZUJyZWFrIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OmZpcnN0VGV4dEJveEZv
cik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hJ
blRleHRPcmRlckZvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjp0
ZXh0Qm94ZXNGb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Zmly
c3RUZXh0Qm94SW5WaXN1YWxPcmRlckZvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94UmFuZ2VGb3IpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6Omhhc1RleHRCb3hlcyk6CisKIDIwMTktMDktMjYgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIEZsYWt5IFRlc3Q6IGluc3Bl
Y3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAppbmRleCA2YjQzMmYzMThkNy4uMmFjMGIxZWE2ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJD
b21iaW5lVGV4dC5oIgpAQCAtMzE4LDExICszMTksMTAgQEAgU3RyaW5nIFJlbmRlclRleHQ6Om9y
aWdpbmFsVGV4dCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
IGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkgewot
ICAgICAgICByZWN0cy5hcHBlbmRWZWN0b3IoU2ltcGxlTGluZUxheW91dDo6Y29sbGVjdEFic29s
dXRlUmVjdHMoKnRoaXMsICpsYXlvdXQsIGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBmb3IgKGF1dG8mIGJveCA6IExpbmVMYXlvdXRUcmF2ZXJzYWw6OnRleHRCb3hl
c0ZvcigqdGhpcykpIHsKKyAgICAgICAgYXV0byByZWN0ID0gYm94LnJlY3QoKTsKKyAgICAgICAg
cmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0
ICsgcmVjdC5sb2NhdGlvbigpLCByZWN0LnNpemUoKSkpKTsKICAgICB9Ci0gICAgcmVjdHMuYXBw
ZW5kVmVjdG9yKG1fbGluZUJveGVzLmFic29sdXRlUmVjdHMoYWNjdW11bGF0ZWRPZmZzZXQpKTsK
IH0KIAogVmVjdG9yPEludFJlY3Q+IFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZSh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CkBAIC0xMDgwLDEwICsxMDgwLDEwIEBAIFZlY3RvcjxzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPj4gUmVuZGVyVGV4dDo6ZHJhZ2dlZENvbnRlbnRSYW5nZXNC
ZXR3ZWVuT2ZmCiAKIEludFBvaW50IFJlbmRlclRleHQ6OmZpcnN0UnVuTG9jYXRpb24oKSBjb25z
dAogewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAg
IHJldHVybiBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRlRmlyc3RSdW5Mb2NhdGlvbigqdGhpcywg
KmxheW91dCk7Ci0KLSAgICByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3RSdW5Mb2NhdGlvbigpOwor
ICAgIGF1dG8gZmlyc3QgPSBMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3IoKnRo
aXMpOworICAgIGlmICghZmlyc3QpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIElu
dFBvaW50KGZpcnN0LT5yZWN0KCkubG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCkBAIC0xMzgyLDEwICsxMzgy
LDE1IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
biwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0CiAKIEludFJlY3QgUmVuZGVyVGV4dDo6bGlu
ZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGxheW91dCA9IHNpbXBsZUxp
bmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVCb3Vu
ZGluZ0JveCgqdGhpcywgKmxheW91dCk7CisgICAgYXV0byBmaXJzdCA9IExpbmVMYXlvdXRUcmF2
ZXJzYWw6OmZpcnN0VGV4dEJveEZvcigqdGhpcyk7CisgICAgaWYgKCFmaXJzdCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gYm91bmRpbmdCb3ggPSBmaXJzdC0+cmVjdCgpOworICAg
IGZvciAoYXV0byBib3ggPSBmaXJzdDsgKytib3g7KQorICAgICAgICBib3VuZGluZ0JveC51bml0
ZUV2ZW5JZkVtcHR5KGJveC0+cmVjdCgpKTsKIAotICAgIHJldHVybiBtX2xpbmVCb3hlcy5ib3Vu
ZGluZ0JveCgqdGhpcyk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gp
OwogfQogCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGlu
Z0JveCgpIGNvbnN0CkBAIC0xNDY4LDQzICsxNDczLDg0IEBAIExheW91dFJlY3QgUmVuZGVyVGV4
dDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVwCiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYg
KGF1dG8qIGxheW91dCA9IHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBs
ZUxpbmVMYXlvdXQ6OmZpbmRDYXJldE1pbmltdW1PZmZzZXQoKnRoaXMsICpsYXlvdXQpOwotICAg
IHJldHVybiBtX2xpbmVCb3hlcy5jYXJldE1pbk9mZnNldCgpOworICAgIGF1dG8gZmlyc3QgPSBM
aW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3IoKnRoaXMpOworICAgIGlmICghZmly
c3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IG1pbk9mZnNldCA9IGZpcnN0LT5sb2Nh
bFN0YXJ0T2Zmc2V0KCk7CisgICAgZm9yIChhdXRvIGJveCA9IGZpcnN0OyArK2JveDspCisgICAg
ICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluPGludD4obWluT2Zmc2V0LCBib3gtPmxvY2FsU3RhcnRP
ZmZzZXQoKSk7CisKKyAgICByZXR1cm4gbWluT2Zmc2V0OwogfQogCiBpbnQgUmVuZGVyVGV4dDo6
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBzaW1wbGVM
aW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpmaW5kQ2FyZXRN
YXhpbXVtT2Zmc2V0KCp0aGlzLCAqbGF5b3V0KTsKLSAgICByZXR1cm4gbV9saW5lQm94ZXMuY2Fy
ZXRNYXhPZmZzZXQoKnRoaXMpOworICAgIGF1dG8gZmlyc3QgPSBMaW5lTGF5b3V0VHJhdmVyc2Fs
OjpmaXJzdFRleHRCb3hGb3IoKnRoaXMpOworICAgIGlmICghZmlyc3QpCisgICAgICAgIHJldHVy
biB0ZXh0KCkubGVuZ3RoKCk7CisKKyAgICBpbnQgbWF4T2Zmc2V0ID0gZmlyc3QtPmxvY2FsRW5k
T2Zmc2V0KCk7CisgICAgZm9yIChhdXRvIGJveCA9IGZpcnN0OyArK2JveDspCisgICAgICAgIG1h
eE9mZnNldCA9IHN0ZDo6bWF4PGludD4obWF4T2Zmc2V0LCBib3gtPmxvY2FsRW5kT2Zmc2V0KCkp
OworCisgICAgcmV0dXJuIG1heE9mZnNldDsKIH0KIAogdW5zaWduZWQgUmVuZGVyVGV4dDo6Y291
bnRSZW5kZXJlZENoYXJhY3Rlck9mZnNldHNVbnRpbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwotICAgIHJldHVybiBtX2xpbmVCb3hl
cy5jb3VudENoYXJhY3Rlck9mZnNldHNVbnRpbChvZmZzZXQpOworICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDA7CisgICAgZm9yIChhdXRvJiBib3ggOiBMaW5lTGF5b3V0VHJhdmVyc2FsOjp0ZXh0Qm94
ZXNGb3IoKnRoaXMpKSB7CisgICAgICAgIGF1dG8gc3RhcnQgPSBib3gubG9jYWxTdGFydE9mZnNl
dCgpOworICAgICAgICBhdXRvIGxlbmd0aCA9IGJveC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKG9m
ZnNldCA8IHN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKG9m
ZnNldCA8PSBzdGFydCArIGxlbmd0aCkgeworICAgICAgICAgICAgcmVzdWx0ICs9IG9mZnNldCAt
IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQgKz0gbGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitlbnVtIGNs
YXNzIE9mZnNldFR5cGUgeyBDaGFyYWN0ZXIsIENhcmV0IH07CitzdGF0aWMgYm9vbCBjb250YWlu
c09mZnNldChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIE9mZnNldFR5
cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gYm94ID0gTGluZUxheW91dFRyYXZlcnNhbDo6Zmly
c3RUZXh0Qm94SW5UZXh0T3JkZXJGb3IodGV4dCk7IGJveDsgYm94LnRyYXZlcnNlTmV4dEluVGV4
dE9yZGVyKCkpIHsKKyAgICAgICAgYXV0byBzdGFydCA9IGJveC0+bG9jYWxTdGFydE9mZnNldCgp
OworICAgICAgICBpZiAob2Zmc2V0IDwgc3RhcnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHVuc2lnbmVkIGVuZCA9IGJveC0+bG9jYWxFbmRPZmZzZXQoKTsKKyAgICAgICAg
aWYgKG9mZnNldCA+PSBzdGFydCAmJiBvZmZzZXQgPD0gZW5kKSB7CisgICAgICAgICAgICBpZiAo
b2Zmc2V0ID09IGVuZCAmJiAodHlwZSA9PSBPZmZzZXRUeXBlOjpDaGFyYWN0ZXIgfHwgYm94LT5p
c0xpbmVCcmVhaygpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IE9mZnNldFR5cGU6OkNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIC8vIFJldHVybiBmYWxzZSBmb3Igb2Zmc2V0cyBpbnNpZGUgY29t
cG9zZWQgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIHJldHVybiAhb2Zmc2V0IHx8IG9mZnNldCA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dC5uZXh0T2Zmc2V0KHRleHQucHJldmlvdXNPZmZz
ZXQob2Zmc2V0KSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBSZW5kZXJUZXh0Ojpjb250YWluc1JlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5b3V0ID0gc2ltcGxlTGluZUxheW91
dCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6Y29udGFpbnNPZmZzZXQoKnRo
aXMsICpsYXlvdXQsIG9mZnNldCwgU2ltcGxlTGluZUxheW91dDo6T2Zmc2V0VHlwZTo6Q2hhcmFj
dGVyT2Zmc2V0KTsKLSAgICByZXR1cm4gbV9saW5lQm94ZXMuY29udGFpbnNPZmZzZXQoKnRoaXMs
IG9mZnNldCwgUmVuZGVyVGV4dExpbmVCb3hlczo6Q2hhcmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1
cm4gY29udGFpbnNPZmZzZXQoKnRoaXMsIG9mZnNldCwgT2Zmc2V0VHlwZTo6Q2hhcmFjdGVyKTsK
IH0KIAogYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc0NhcmV0T2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogbGF5b3V0ID0gc2ltcGxlTGluZUxheW91dCgpKQot
ICAgICAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6Y29udGFpbnNPZmZzZXQoKnRoaXMsICps
YXlvdXQsIG9mZnNldCwgU2ltcGxlTGluZUxheW91dDo6T2Zmc2V0VHlwZTo6Q2FyZXRPZmZzZXQp
OwotICAgIHJldHVybiBtX2xpbmVCb3hlcy5jb250YWluc09mZnNldCgqdGhpcywgb2Zmc2V0LCBS
ZW5kZXJUZXh0TGluZUJveGVzOjpDYXJldE9mZnNldCk7CisgICAgcmV0dXJuIGNvbnRhaW5zT2Zm
c2V0KCp0aGlzLCBvZmZzZXQsIE9mZnNldFR5cGU6OkNhcmV0KTsKIH0KIAogYm9vbCBSZW5kZXJU
ZXh0OjpoYXNSZW5kZXJlZFRleHQoKSBjb25zdAogewotICAgIGlmIChhdXRvKiBsYXlvdXQgPSBz
aW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0Ojppc1Rl
eHRSZW5kZXJlZCgqdGhpcywgKmxheW91dCk7Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLmhhc1Jl
bmRlcmVkVGV4dCgpOworICAgIGZvciAoYXV0byYgYm94IDogTGluZUxheW91dFRyYXZlcnNhbDo6
dGV4dEJveGVzRm9yKCp0aGlzKSkgeworICAgICAgICBpZiAoYm94Lmxlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogaW50IFJl
bmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0KGludCBjdXJyZW50KSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCmluZGV4IDM0ODIyYjQy
YzIxLi44ZDcwZjQyMzRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0TGluZUJveGVzLmNwcApAQCAtMTQ2LDM3ICsxNDYsNiBAQCBJbmxpbmVUZXh0Qm94KiBS
ZW5kZXJUZXh0TGluZUJveGVzOjpmaW5kTmV4dChpbnQgb2Zmc2V0LCBpbnQmIHBvc2l0aW9uKSBj
b25zdAogICAgIHJldHVybiBjdXJyZW50OwogfQogCi1JbnRSZWN0IFJlbmRlclRleHRMaW5lQm94
ZXM6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKSBjb25zdAotewotICAg
IGlmICghbV9maXJzdCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVy
biB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVmdCBzaWRlIGFuZCB0aGUgbWF4aW1hbCByaWdo
dCBzaWRlLgotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0U2lkZSA9IDA7Ci0gICAgZmxvYXQgbG9naWNh
bFJpZ2h0U2lkZSA9IDA7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50ID0gbV9maXJzdDsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYgKGN1cnJl
bnQgPT0gbV9maXJzdCB8fCBjdXJyZW50LT5sb2dpY2FsTGVmdCgpIDwgbG9naWNhbExlZnRTaWRl
KQotICAgICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gY3VycmVudC0+bG9naWNhbExlZnQoKTsK
LSAgICAgICAgaWYgKGN1cnJlbnQgPT0gbV9maXJzdCB8fCBjdXJyZW50LT5sb2dpY2FsUmlnaHQo
KSA+IGxvZ2ljYWxSaWdodFNpZGUpCi0gICAgICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gY3Vy
cmVudC0+bG9naWNhbFJpZ2h0KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gcmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIAotICAg
IGZsb2F0IHggPSBpc0hvcml6b250YWwgPyBsb2dpY2FsTGVmdFNpZGUgOiBtX2ZpcnN0LT54KCk7
Ci0gICAgZmxvYXQgeSA9IGlzSG9yaXpvbnRhbCA/IG1fZmlyc3QtPnkoKSA6IGxvZ2ljYWxMZWZ0
U2lkZTsKLSAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpvbnRhbCA/IGxvZ2ljYWxSaWdodFNpZGUg
LSBsb2dpY2FsTGVmdFNpZGUgOiBtX2xhc3QtPmxvZ2ljYWxCb3R0b20oKSAtIHg7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gbV9sYXN0LT5sb2dpY2FsQm90dG9tKCkgLSB5IDog
bG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKLSAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotfQotCi1JbnRQb2ludCBS
ZW5kZXJUZXh0TGluZUJveGVzOjpmaXJzdFJ1bkxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZmlyc3QpCi0gICAgICAgIHJldHVybiBJbnRQb2ludCgpOwotICAgIHJldHVybiBJbnRQb2lu
dChtX2ZpcnN0LT50b3BMZWZ0KCkpOwotfQotCiBMYXlvdXRSZWN0IFJlbmRlclRleHRMaW5lQm94
ZXM6OnZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpcnN0KQpAQCAtMjAwLDcxICsxNjksNiBAQCBMYXlvdXRS
ZWN0IFJlbmRlclRleHRMaW5lQm94ZXM6OnZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goY29uc3Qg
UmVuZGVyVGV4dCYgcmVuZAogICAgIHJldHVybiByZWN0OwogfQogCi1ib29sIFJlbmRlclRleHRM
aW5lQm94ZXM6Omhhc1JlbmRlcmVkVGV4dCgpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvKiBib3gg
PSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAo
Ym94LT5sZW4oKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWludCBSZW5kZXJUZXh0TGluZUJveGVzOjpjYXJldE1pbk9mZnNldCgpIGNv
bnN0Ci17Ci0gICAgYXV0byBib3ggPSBtX2ZpcnN0OwotICAgIGlmICghYm94KQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpbnQgbWluT2Zmc2V0ID0gYm94LT5zdGFydCgpOwotICAgIGZvciAoYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAg
ICAgICAgbWluT2Zmc2V0ID0gc3RkOjptaW48aW50PihtaW5PZmZzZXQsIGJveC0+c3RhcnQoKSk7
Ci0gICAgcmV0dXJuIG1pbk9mZnNldDsKLX0KLQotaW50IFJlbmRlclRleHRMaW5lQm94ZXM6OmNh
cmV0TWF4T2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKSBjb25zdAotewotICAgIGF1
dG8gYm94ID0gbV9sYXN0OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gcmVuZGVyZXIu
dGV4dCgpLmxlbmd0aCgpOwotCi0gICAgaW50IG1heE9mZnNldCA9IGJveC0+c3RhcnQoKSArIGJv
eC0+bGVuKCk7Ci0gICAgZm9yIChib3ggPSBib3gtPnByZXZUZXh0Qm94KCk7IGJveDsgYm94ID0g
Ym94LT5wcmV2VGV4dEJveCgpKQotICAgICAgICBtYXhPZmZzZXQgPSBzdGQ6Om1heDxpbnQ+KG1h
eE9mZnNldCwgYm94LT5zdGFydCgpICsgYm94LT5sZW4oKSk7Ci0gICAgcmV0dXJuIG1heE9mZnNl
dDsKLX0KLQotYm9vbCBSZW5kZXJUZXh0TGluZUJveGVzOjpjb250YWluc09mZnNldChjb25zdCBS
ZW5kZXJUZXh0JiByZW5kZXJlciwgdW5zaWduZWQgb2Zmc2V0LCBPZmZzZXRUeXBlIHR5cGUpIGNv
bnN0Ci17Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgewotICAgICAgICBpZiAob2Zmc2V0IDwgYm94LT5zdGFydCgpICYmICFyZW5k
ZXJlci5jb250YWluc1JldmVyc2VkVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB1bnNpZ25lZCBib3hFbmQgPSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpOwotICAg
ICAgICBpZiAob2Zmc2V0ID49IGJveC0+c3RhcnQoKSAmJiBvZmZzZXQgPD0gYm94RW5kKSB7Ci0g
ICAgICAgICAgICBpZiAob2Zmc2V0ID09IGJveEVuZCAmJiAodHlwZSA9PSBDaGFyYWN0ZXJPZmZz
ZXQgfHwgYm94LT5pc0xpbmVCcmVhaygpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmICh0eXBlID09IENoYXJhY3Rlck9mZnNldCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFJldHVybiBmYWxzZSBmb3Igb2Zmc2V0cyBpbnNp
ZGUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIHJldHVybiAhb2Zmc2V0IHx8IG9m
ZnNldCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVuZGVyZXIubmV4dE9mZnNldChyZW5kZXJl
ci5wcmV2aW91c09mZnNldChvZmZzZXQpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi11bnNpZ25lZCBSZW5kZXJUZXh0TGluZUJveGVzOjpjb3VudENoYXJhY3Rl
ck9mZnNldHNVbnRpbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgcmVz
dWx0ID0gMDsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5u
ZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBib3gtPnN0YXJ0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBpZiAob2Zmc2V0IDw9IGJveC0+c3RhcnQo
KSArIGJveC0+bGVuKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBvZmZzZXQgLSBib3gtPnN0
YXJ0KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHJl
c3VsdCArPSBib3gtPmxlbigpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBlbnVt
IFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3YXlzRG93bnN0cmVhbSwgQWx3YXlzVXBz
dHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCB9OwogCiBzdGF0aWMgYm9vbCBs
aW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlvbiwgY29uc3Qg
SW5saW5lVGV4dEJveCYgYm94LCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSYgc2hvdWxkQWZm
aW5pdHlCZURvd25zdHJlYW0pCkBAIC01MDUsMTQgKzQwOSw2IEBAIHZvaWQgUmVuZGVyVGV4dExp
bmVCb3hlczo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkCiAgICAgfQogfQogCi1WZWN0b3I8SW50UmVjdD4gUmVuZGVyVGV4dExpbmVCb3hlczo6
YWJzb2x1dGVSZWN0cyhjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0
Ci17Ci0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIGZvciAoYXV0byogYm94ID0gbV9m
aXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgIHJlY3RzLmFwcGVu
ZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGJveC0+dG9w
TGVmdCgpLCBib3gtPnNpemUoKSkpKTsKLSAgICByZXR1cm4gcmVjdHM7Ci19Ci0KIHN0YXRpYyBG
bG9hdFJlY3QgbG9jYWxRdWFkRm9yVGV4dEJveChjb25zdCBJbmxpbmVUZXh0Qm94JiBib3gsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQogewog
ICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBzdGQ6Om1pbihib3guZW5kKCksIGVuZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaAppbmRleCAyZTVhZTVh
NzMzOS4uODk3MGUwZTc5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRMaW5lQm94ZXMuaApAQCAtNTYsMjQgKzU2LDE0IEBAIHB1YmxpYzoKIAogICAgIElubGlu
ZVRleHRCb3gqIGZpbmROZXh0KGludCBvZmZzZXQsIGludCYgcG9zaXRpb24pIGNvbnN0OwogCi0g
ICAgYm9vbCBoYXNSZW5kZXJlZFRleHQoKSBjb25zdDsKLSAgICBpbnQgY2FyZXRNaW5PZmZzZXQo
KSBjb25zdDsKLSAgICBpbnQgY2FyZXRNYXhPZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYpIGNvbnN0
OwotICAgIGVudW0gT2Zmc2V0VHlwZSB7IENhcmV0T2Zmc2V0LCBDaGFyYWN0ZXJPZmZzZXQgfTsK
LSAgICBib29sIGNvbnRhaW5zT2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmLCB1bnNpZ25lZCwgT2Zm
c2V0VHlwZSkgY29uc3Q7Ci0gICAgdW5zaWduZWQgY291bnRDaGFyYWN0ZXJPZmZzZXRzVW50aWwo
dW5zaWduZWQpIGNvbnN0OwotCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lk
IHNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmLCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlKTsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKTsKICAgICB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdl
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMp
OwogCi0gICAgSW50UmVjdCBib3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JikgY29uc3Q7Ci0g
ICAgSW50UG9pbnQgZmlyc3RSdW5Mb2NhdGlvbigpIGNvbnN0OwogICAgIExheW91dFJlY3Qgdmlz
dWFsT3ZlcmZsb3dCb3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JikgY29uc3Q7CiAKLSAgICBW
ZWN0b3I8SW50UmVjdD4gYWJzb2x1dGVSZWN0cyhjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQpIGNvbnN0OwogICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVJlY3RzRm9yUmFu
Z2UoY29uc3QgUmVuZGVyVGV4dCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAgICAgZW51bSBDbGlw
cGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07CiAgICAgVmVjdG9yPEZs
b2F0UXVhZD4gYWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJUZXh0JiwgYm9vbCogd2FzRml4ZWQs
IENsaXBwaW5nT3B0aW9uKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAppbmRleCA2OWM1OThhYThkYy4uN2M4NTljNzRkZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU0OSw3ICs1
NDksNyBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8s
IE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPiBiZQogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KG8pKSB7CiAgICAgICAgIGF1dG8mIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihvKTsKLSAg
ICAgICAgZm9yIChhdXRvJiB0ZXh0Qm94IDogTGluZUxheW91dFRyYXZlcnNhbDo6dGV4dEJveFJh
bmdlRm9yKHRleHQpKSB7CisgICAgICAgIGZvciAoYXV0byYgdGV4dEJveCA6IExpbmVMYXlvdXRU
cmF2ZXJzYWw6OnRleHRCb3hlc0Zvcih0ZXh0KSkgewogICAgICAgICAgICAgdHMgPDwgaW5kZW50
OwogICAgICAgICAgICAgd3JpdGVUZXh0Qm94KHRzLCB0ZXh0LCB0ZXh0Qm94KTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4
IDUzN2M5MTdmYWZjLi41MTY2YWVhMTg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcApAQCAtNDczLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gTmV3IGxpbmUgbmVlZHMgbmV3IHJ1bi4KICAgICAgICAgaWYgKCFtX3J1bnNXaWR0aCkg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX3VuY29tcGxldGVkV2lkdGgpOwotICAgICAgICAgICAg
cnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0
aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSwgZnJhZ21lbnQuaGFzSHlw
aGVuKCkpKTsKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBl
bmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwg
ZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xpbmVCcmVhaygpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBBZHZhbmNlIGxhc3QgY29tcGxldGVkIGZy
YWdtZW50IHdoZW4gdGhlIHByZXZpb3VzIGZyYWdtZW50IGlzIGFsbCBzZXQgKGluY2x1ZGluZyBt
dWx0aXBsZSBwYXJ0cyBhY3Jvc3MgcmVuZGVyZXJzKQogICAgICAgICAgICAgaWYgKChtX2xhc3RG
cmFnbWVudC50eXBlKCkgIT0gZnJhZ21lbnQudHlwZSgpKSB8fCAhbV9sYXN0RnJhZ21lbnQub3Zl
cmxhcHNUb05leHRSZW5kZXJlcigpKSB7CkBAIC00OTIsNyArNDkyLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX2xh
c3RGcmFnbWVudC5pc0xhc3RJblJlbmRlcmVyKCkgfHwgbV9sYXN0RnJhZ21lbnQuaXNDb2xsYXBz
ZWQoKSkKLSAgICAgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwg
ZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoKCks
IGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSkpOworICAgICAgICAgICAgICAgIHJ1bnMuYXBw
ZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVu
c1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBm
cmFnbWVudC5pc0xpbmVCcmVhaygpKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKICAgICAgICAgICAgICAgICBsYXN0UnVu
LmVuZCA9IGVuZFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmgKaW5kZXggNGJlYjk4Y2ZiN2EuLjRkOWYyYmRmNTMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKQEAgLTUxLDE5ICs1MSwyMSBAQCBzdHJ1
Y3QgUnVuIHsKICNpZiBDT01QSUxFUihNU1ZDKQogICAgIFJ1bigpIHsgfQogI2VuZGlmCi0gICAg
UnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9h
dCBsb2dpY2FsUmlnaHQsIGJvb2wgaXNFbmRPZkxpbmUsIGJvb2wgaGFzSHlwaGVuKQorICAgIFJ1
bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQg
bG9naWNhbFJpZ2h0LCBib29sIGlzRW5kT2ZMaW5lLCBib29sIGhhc0h5cGhlbiwgYm9vbCBpc0xp
bmVCcmVhaykKICAgICAgICAgOiBlbmQoZW5kKQogICAgICAgICAsIHN0YXJ0KHN0YXJ0KQogICAg
ICAgICAsIGlzRW5kT2ZMaW5lKGlzRW5kT2ZMaW5lKQogICAgICAgICAsIGhhc0h5cGhlbihoYXNI
eXBoZW4pCisgICAgICAgICwgaXNMaW5lQnJlYWsoaXNMaW5lQnJlYWspCiAgICAgICAgICwgbG9n
aWNhbExlZnQobG9naWNhbExlZnQpCiAgICAgICAgICwgbG9naWNhbFJpZ2h0KGxvZ2ljYWxSaWdo
dCkKICAgICB7IH0KIAogICAgIHVuc2lnbmVkIGVuZDsKLSAgICB1bnNpZ25lZCBzdGFydCA6IDMw
OworICAgIHVuc2lnbmVkIHN0YXJ0IDogMjk7CiAgICAgdW5zaWduZWQgaXNFbmRPZkxpbmUgOiAx
OwogICAgIHVuc2lnbmVkIGhhc0h5cGhlbiA6IDE7CisgICAgdW5zaWduZWQgaXNMaW5lQnJlYWsg
OiAxOwogICAgIGZsb2F0IGxvZ2ljYWxMZWZ0OwogICAgIGZsb2F0IGxvZ2ljYWxSaWdodDsKICAg
ICAvLyBUT0RPOiBNb3ZlIHRoZXNlIG9wdGlvbmFsIGl0ZW1zIG91dCBvZiBTaW1wbGVMaW5lTGF5
b3V0OjpSdW4gdG8gYSBzdXBwbGVtZW50YXJ5IHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAppbmRleCA5
ZGYwM2MzYjhlNC4uNjE5Nzk5N2MwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKQEAgLTE5NywxNiArMTk3LDYg
QEAgSW50UmVjdCBjb21wdXRlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91
bmRpbmdCb3hSZWN0KTsKIH0KIAotSW50UG9pbnQgY29tcHV0ZUZpcnN0UnVuTG9jYXRpb24oY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAg
YXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsKLSAgICBhdXRvIHJhbmdlID0g
cmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgYXV0byBiZWdpbiA9IHJh
bmdlLmJlZ2luKCk7Ci0gICAgaWYgKGJlZ2luID09IHJhbmdlLmVuZCgpKQotICAgICAgICByZXR1
cm4gSW50UG9pbnQoMCwgMCk7Ci0gICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludCgoKmJlZ2luKS5y
ZWN0KCkubG9jYXRpb24oKSk7Ci19Ci0KIFZlY3RvcjxJbnRSZWN0PiBjb2xsZWN0QWJzb2x1dGVS
ZWN0cyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXQmIGxheW91dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQogewogICAgIFZlY3RvcjxJbnRS
ZWN0PiByZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oCmluZGV4IGRkYWQxZDBhNDk1Li43MGQ2YWQ5ZThmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5oCkBAIC00OSwxMyArNDksNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmLCBjb25zdCBMYXlvdXQmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQbwogYm9vbCBoaXRU
ZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CiB2b2lkIGNvbGxlY3RGbG93T3ZlcmZsb3coUmVuZGVyQmxvY2tGbG93Jiwg
Y29uc3QgTGF5b3V0Jik7CiAKLWJvb2wgaXNUZXh0UmVuZGVyZWQoY29uc3QgUmVuZGVyVGV4dCYs
IGNvbnN0IExheW91dCYpOwotZW51bSBjbGFzcyBPZmZzZXRUeXBlIHsgQ2FyZXRPZmZzZXQsIENo
YXJhY3Rlck9mZnNldCB9OwotYm9vbCBjb250YWluc09mZnNldChjb25zdCBSZW5kZXJUZXh0Jiwg
Y29uc3QgTGF5b3V0JiwgdW5zaWduZWQsIE9mZnNldFR5cGUpOwotdW5zaWduZWQgZmluZENhcmV0
TWluaW11bU9mZnNldChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0Jik7Ci11bnNpZ25l
ZCBmaW5kQ2FyZXRNYXhpbXVtT2Zmc2V0KGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXQm
KTsKIEludFJlY3QgY29tcHV0ZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IExheW91dCYpOwotSW50UG9pbnQgY29tcHV0ZUZpcnN0UnVuTG9jYXRpb24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgTGF5b3V0Jik7CiAKIFZlY3RvcjxJbnRSZWN0PiBjb2xsZWN0QWJzb2x1
dGVSZWN0cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogVmVjdG9yPEZsb2F0UXVhZD4gY29sbGVjdEFic29s
dXRlUXVhZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgTGF5b3V0JiwgYm9vbCogd2FzRml4
ZWQpOwpAQCAtMTAyLDQzICs5Niw2IEBAIGlubGluZSBMYXlvdXRVbml0IGNvbXB1dGVGbG93TGFz
dExpbmVCYXNlbGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0CiAgICAgcmV0
dXJuIGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgbGluZUhlaWdodEZyb21GbG93KGZs
b3cpICogKGxheW91dC5saW5lQ291bnQoKSAtIDEpICsgYmFzZWxpbmVGcm9tRmxvdyhmbG93KTsK
IH0KIAotaW5saW5lIHVuc2lnbmVkIGZpbmRDYXJldE1pbmltdW1PZmZzZXQoY29uc3QgUmVuZGVy
VGV4dCYsIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGlmICghbGF5b3V0LnJ1bkNvdW50
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBsYXlvdXQucnVuQXQoMCkuc3RhcnQ7
Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBmaW5kQ2FyZXRNYXhpbXVtT2Zmc2V0KGNvbnN0IFJlbmRl
clRleHQmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBpZiAoIWxheW91
dC5ydW5Db3VudCgpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIudGV4dCgpLmxlbmd0aCgpOwot
ICAgIGF1dG8mIGxhc3QgPSBsYXlvdXQucnVuQXQobGF5b3V0LnJ1bkNvdW50KCkgLSAxKTsKLSAg
ICByZXR1cm4gbGFzdC5lbmQ7Ci19Ci0KLWlubGluZSBib29sIGNvbnRhaW5zT2Zmc2V0KGNvbnN0
IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgb2Zmc2V0LCBPZmZz
ZXRUeXBlIG9mZnNldFR5cGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxheW91
dC5ydW5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgcnVuID0gbGF5b3V0LnJ1bkF0KGkp
OwotICAgICAgICBpZiAob2Zmc2V0IDwgcnVuLnN0YXJ0KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAob2Zmc2V0IDwgcnVuLmVuZCB8fCAob2Zmc2V0VHlwZSA9PSBPZmZz
ZXRUeXBlOjpDYXJldE9mZnNldCAmJiBvZmZzZXQgPT0gcnVuLmVuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxpbmUgYm9vbCBp
c1RleHRSZW5kZXJlZChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxheW91dC5ydW5Db3VudCgpOyArK2kpIHsK
LSAgICAgICAgYXV0byYgcnVuID0gbGF5b3V0LnJ1bkF0KGkpOwotICAgICAgICBpZiAocnVuLmVu
ZCA+IHJ1bi5zdGFydCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIGlubGluZSBMYXlvdXRVbml0IGxpbmVIZWlnaHRGcm9tRmxvdyhjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiB7CiAgICAgcmV0dXJuIGZsb3cubGluZUhlaWdodChm
YWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgK
aW5kZXggY2ExM2NiZTYxOWIuLjBlNmZlMjUxMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCkBAIC02Myw2ICs2Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0Owog
ICAgICAgICBib29sIGlzRW5kT2ZMaW5lKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaGFzSHlwaGVu
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5oYXNIeXBoZW47IH0KKyAg
ICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxl
UnVuKCkuaXNMaW5lQnJlYWs7IH0KICAgICAgICAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVu
JiBzaW1wbGVSdW4oKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOyB9CiAK
ICAgICAgICAgdW5zaWduZWQgbGluZUluZGV4KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCmluZGV4IDM0ZDIy
NmEzMzI0Li45YjhjNjBlNzJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKQEAgLTExMSw2ICsxMTEsMTkgQEAgU3Ry
aW5nVmlldyBUZXh0Qm94Ojp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihp
dGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CiB9CiAKK2Jvb2wgVGV4
dEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAoreworICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3Qg
VGV4dEJveEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7CisgICAgICAgIHJldHVybiAoKnBh
dGguaXRlcmF0b3IpLmlzTGluZUJyZWFrKCk7CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9
IFtdKGNvbnN0IFRleHRCb3hJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKKyAgICAgICAg
cmV0dXJuIHBhdGguaW5saW5lVGV4dEJveC0+aXNMaW5lQnJlYWsoKTsKKyAgICB9OworCisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNv
bXBsZXgpOworfQorCiB1bnNpZ25lZCBUZXh0Qm94Ojpsb2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3QK
IHsKICAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IFRleHRCb3hJdGVyYXRvcjo6U2ltcGxlUGF0
aCYgcGF0aCkgewpAQCAtMjcyLDcgKzI4NSw3IEBAIGJvb2wgVGV4dEJveEl0ZXJhdG9yOjphdEVu
ZCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxl
LCBjb21wbGV4KTsKIH0KIAotVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEluVmlzdWFsT3Jk
ZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKK1RleHRCb3hJdGVyYXRvciBmaXJzdFRleHRC
b3hGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKIHsKICAgICBpZiAoYXV0byogc2ltcGxlTGlu
ZUxheW91dCA9IHRleHQuc2ltcGxlTGluZUxheW91dCgpKSB7CiAgICAgICAgIGF1dG8gcmFuZ2Ug
PSBzaW1wbGVMaW5lTGF5b3V0LT5ydW5SZXNvbHZlcigpLnJhbmdlRm9yUmVuZGVyZXIodGV4dCk7
CkBAIC0yOTIsMTIgKzMwNSwxMiBAQCBUZXh0Qm94SXRlcmF0b3IgZmlyc3RUZXh0Qm94SW5UZXh0
T3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKICAgICAgICAgcmV0dXJuIFRleHRCb3hJ
dGVyYXRvciB7IFdURk1vdmUoc29ydGVkVGV4dEJveGVzKSwgMCB9OwogICAgIH0KIAotICAgIHJl
dHVybiBmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVyRm9yKHRleHQpOworICAgIHJldHVybiBmaXJz
dFRleHRCb3hGb3IodGV4dCk7CiB9CiAKLVRleHRCb3hSYW5nZSB0ZXh0Qm94UmFuZ2VGb3IoY29u
c3QgUmVuZGVyVGV4dCYgdGV4dCkKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXNGb3IoY29uc3QgUmVu
ZGVyVGV4dCYgdGV4dCkKIHsKLSAgICByZXR1cm4geyBmaXJzdFRleHRCb3hJblZpc3VhbE9yZGVy
Rm9yKHRleHQpIH07CisgICAgcmV0dXJuIHsgZmlyc3RUZXh0Qm94Rm9yKHRleHQpIH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRU
cmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2
ZXJzYWwuaAppbmRleCAxZjYxOTY1ZWNjNS4uZmM5Mjc4MTg0OTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdDsKIAogICAgIFN0
cmluZ1ZpZXcgdGV4dCgpIGNvbnN0OworICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdDsKIAog
ICAgIC8vIFRoZXNlIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0IHJlbmRlcmVyIChu
b3QgZmxvdykuCiAgICAgdW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0OwpAQCAtNjcs
NiArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgVGV4dEJveCgpID0gZGVmYXVsdDsKICAgICBUZXh0
Qm94KGNvbnN0IFRleHRCb3gmKSA9IGRlZmF1bHQ7CiAgICAgVGV4dEJveChUZXh0Qm94JiYpID0g
ZGVmYXVsdDsKKyAgICB+VGV4dEJveCgpID0gZGVmYXVsdDsKICAgICBUZXh0Qm94JiBvcGVyYXRv
cj0oY29uc3QgVGV4dEJveCYpID0gZGVmYXVsdDsKICAgICBUZXh0Qm94JiBvcGVyYXRvcj0oVGV4
dEJveCYmKSA9IGRlZmF1bHQ7CiAKQEAgLTEzMCwxMCArMTMyLDExIEBAIHByaXZhdGU6CiAgICAg
VGV4dEJveEl0ZXJhdG9yIG1fYmVnaW47CiB9OwogCi1UZXh0Qm94SXRlcmF0b3IgZmlyc3RUZXh0
Qm94SW5WaXN1YWxPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0Jik7CitUZXh0Qm94SXRlcmF0b3Ig
Zmlyc3RUZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmKTsKIFRleHRCb3hJdGVyYXRvciBmaXJz
dFRleHRCb3hJblRleHRPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0Jik7Ci1UZXh0Qm94UmFuZ2Ug
dGV4dEJveFJhbmdlRm9yKGNvbnN0IFJlbmRlclRleHQmKTsKLWlubGluZSBib29sIGhhc1RleHRC
b3hlcyhjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KSB7IHJldHVybiAhZmlyc3RUZXh0Qm94SW5WaXN1
YWxPcmRlckZvcih0ZXh0KS5hdEVuZCgpOyB9CitUZXh0Qm94UmFuZ2UgdGV4dEJveGVzRm9yKGNv
bnN0IFJlbmRlclRleHQmKTsKKworaW5saW5lIGJvb2wgaGFzVGV4dEJveGVzKGNvbnN0IFJlbmRl
clRleHQmIHRleHQpIHsgcmV0dXJuICFmaXJzdFRleHRCb3hGb3IodGV4dCkuYXRFbmQoKTsgfQog
CiB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>