<?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>185218</bug_id>
          
          <creation_ts>2018-05-02 14:48:03 -0700</creation_ts>
          <short_desc>Strings should not be allocated in a gigacage</short_desc>
          <delta_ts>2018-05-03 18:51:23 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174924</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1419873</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-02 14:48:03 -0700</bug_when>
    <thetext>Caging strings only protects us from string-based read gadgets.  It&apos;s also a slow-down on some benchmarks and a memory use regression.  The benefit/cost isn&apos;t big enough to keep this around so we should go back to allocating strings the normal way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419875</commentid>
    <comment_count>1</comment_count>
      <attachid>339347</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-02 14:49:12 -0700</bug_when>
    <thetext>Created attachment 339347
possible patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420251</commentid>
    <comment_count>2</comment_count>
      <attachid>339437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 12:08:34 -0700</bug_when>
    <thetext>Created attachment 339437
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420334</commentid>
    <comment_count>3</comment_count>
      <attachid>339465</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 14:23:10 -0700</bug_when>
    <thetext>Created attachment 339465
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420353</commentid>
    <comment_count>4</comment_count>
      <attachid>339465</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-03 14:44:45 -0700</bug_when>
    <thetext>Comment on attachment 339465
the patch

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

&gt; Source/bmalloc/bmalloc/Gigacage.h:38
&gt;  #define PRIMITIVE_GIGACAGE_SIZE 0x80000000llu
&gt;  #define JSVALUE_GIGACAGE_SIZE 0x40000000llu

Might be worth expanding one (or both) of these</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420355</commentid>
    <comment_count>5</comment_count>
      <attachid>339470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 14:50:01 -0700</bug_when>
    <thetext>Created attachment 339470
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420479</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 17:38:52 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Comment on attachment 339465 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=339465&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Gigacage.h:38
&gt; &gt;  #define PRIMITIVE_GIGACAGE_SIZE 0x80000000llu
&gt; &gt;  #define JSVALUE_GIGACAGE_SIZE 0x40000000llu
&gt; 
&gt; Might be worth expanding one (or both) of these

Yeah.  Or give them separate runways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420482</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 17:40:41 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/231337/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420513</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-03 18:50:52 -0700</bug_when>
    <thetext>Committed r231344: &lt;https://trac.webkit.org/changeset/231344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420514</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-03 18:51:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/39963637&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339347</attachid>
            <date>2018-05-02 14:49:12 -0700</date>
            <delta_ts>2018-05-03 12:08:34 -0700</delta_ts>
            <desc>possible patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87798</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDM0ICsxNzgsMzAgQEAgdm9pZCBKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWwxNgogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVU
b0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgWyZdICgpIHsKLSAg
ICAgICAgaWYgKGxlbmd0aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKLSAgICAg
ICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0
cmluZyhtX3ZhbHVlKTsKLSAgICAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4
Qml0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGxlbmd0aCgp
ID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKKyAgICAgICAgcmVzb2x2ZVJvcGUoZXhl
Yyk7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1ZSk7CisgICAgICAgIHNl
dElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICAgICAgTENoYXIgYnVmZmVyW21h
eExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKLSAgICAgICAgICAgIHJlc29sdmVSb3BlSW50ZXJu
YWw4KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwg
bGVuZ3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJbbWF4TGVuZ3Ro
Rm9yT25TdGFja1Jlc29sdmVdOwotICAgICAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1
ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwgbGVuZ3Ro
KCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7Ci0g
ICAgICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIgYnVmZmVyW21heExl
bmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDgoYnVm
ZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmluZyhidWZmZXIsIGxlbmd0aCgpKTsK
KyAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgVUNoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAg
ICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7CisgICAgICAgIG1fdmFsdWUgPSBB
dG9taWNTdHJpbmcoYnVmZmVyLCBsZW5ndGgoKSk7CisgICAgICAgIHNldElzOEJpdChtX3ZhbHVl
LmltcGwoKS0+aXM4Qml0KCkpOworICAgIH0KIAotICAgICAgICBjbGVhckZpYmVycygpOworICAg
IGNsZWFyRmliZXJzKCk7CiAKLSAgICAgICAgLy8gSWYgd2UgcmVzb2x2ZWQgYSBzdHJpbmcgdGhh
dCBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgbm90aWZ5IHRoZSBoZWFwIHRoYXQgd2UndmUgZ3Jv
d24uCi0gICAgICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmlt
cGwoKS0+Y29zdCgpKTsKLSAgICB9KCk7Ci0gICAgCi0gICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0
Q2FnZWQoKTsKKyAgICAvLyBJZiB3ZSByZXNvbHZlZCBhIHN0cmluZyB0aGF0IGRpZG4ndCBwcmV2
aW91c2x5IGV4aXN0LCBub3RpZnkgdGhlIGhlYXAgdGhhdCB3ZSd2ZSBncm93bi4KKyAgICBpZiAo
bV92YWx1ZS5pbXBsKCktPmhhc09uZVJlZigpKQorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmltcGwoKS0+Y29zdCgpKTsKIH0KIAog
dm9pZCBKU1JvcGVTdHJpbmc6OmNsZWFyRmliZXJzKCkgY29uc3QKQEAgLTI1MiwzMiArMjQ4LDE3
IEBAIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBKU1JvcGVTdHJpbmc6OnIKIAogdm9pZCBKU1Jv
cGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBbJl0g
KCkgewotICAgICAgICBBU1NFUlQoaXNSb3BlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlz
U3Vic3RyaW5nKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc3Vic3RyaW5nQmFzZSgpLT5pc1Jv
cGUoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gc3Vic3RyaW5nQmFzZSgpLT5tX3ZhbHVlLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7Ci0gICAgICAg
ICAgICBzdWJzdHJpbmdCYXNlKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBMQ2hh
ciogYnVmZmVyOwotICAgICAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5j
b3N0KCkpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZl
Um9wZUludGVybmFsOE5vU3Vic3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgICAgICBjbGVhckZpYmVy
cygpOwotICAgICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgQVNTRVJU
KGlzUm9wZSgpKTsKKyAgICAKKyAgICBpZiAoaXNTdWJzdHJpbmcoKSkgeworICAgICAgICBBU1NF
UlQoIXN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOworICAgICAgICBtX3ZhbHVlID0gc3Vic3Ry
aW5nQmFzZSgpLT5tX3ZhbHVlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgp
LCBsZW5ndGgoKSk7CisgICAgICAgIHN1YnN0cmluZ0Jhc2UoKS5jbGVhcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBMQ2hhciog
YnVmZmVyOwogICAgICAgICBpZiAoYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgoKSwgYnVmZmVyKSkgewogICAgICAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsKICAg
ICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwpAQCAtMjg1LDEzICsyNjYsMjQg
QEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZQogICAgICAgICAgICAg
b3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7Cisg
ICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoYnVmZmVyKTsKICAgICAgICAg
Y2xlYXJGaWJlcnMoKTsKICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgfSgpOwotCi0g
ICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0Q2FnZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBVQ2hhciogYnVmZmVyOworICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpLCBidWZmZXIpKSB7CisgICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNv
c3QoKSk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7CisgICAgY2xl
YXJGaWJlcnMoKTsKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIAogLy8gT3ZlcnZpZXc6IFRo
ZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5nIGlu
IHJvcGUgZm9ybQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHJvdGVjdGVkOgogcHVi
bGljOgogICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgUmVmPFN0cmluZ0ltcGw+
JiYgdmFsdWUpCiAgICAgewotICAgICAgICB2YWx1ZS0+YXNzZXJ0Q2FnZWQoKTsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBzaXplX3QgY29zdCA9
IHZhbHVlLT5jb3N0KCk7CiAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCBXVEZNb3Zl
KHZhbHVlKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoVk0mIHZtLCBSZWY8U3RyaW5nSW1wbD4mJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHZhbHVlLT5hc3NlcnRDYWdlZCgpOwogICAgICAgICBzaXpl
X3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBKU1N0cmluZyogbmV3U3RyaW5n
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0cmlu
Zyh2bSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9u
KHZtLCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsOCArMzMwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6OkpT
VmFsdWU6CiAgICAgICAgICAgICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7
Ci0gICAgICAgIGNhc2UgR2lnYWNhZ2U6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOwpJbmRleDogU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3
ICsyMSw2IEBACiAvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMEYwRjUyNkIxRjQyMUZGODAwNEE0NTJDIC8q
IFN0cmluZ01hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLzsg
fTsKIAkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4
RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwICovOyB9OwogCQkwRjMwQ0I1QTFGQ0RGMTM0
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEY0M0Q4RjExREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFk
LmNwcCAqLzsgfTsKQEAgLTE3OCw4ICsxNzcsNiBAQAogCQkwNzdDRDg2QTFGRDlDRkQyMDA4Mjg1
ODcgLyogTG9nZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzdDRDg2QjFGRDlDRkQzMDA4Mjg1ODcg
LyogTG9nZ2VySGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dl
ckhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFs
bG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ01hbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMEY1MjZBMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxs
b2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nTWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhLZXlUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUsNyArMTkyLDYgQEAKIAkJMEYzMENCNTgxRkNE
RjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJl
bnRQdHJIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYx
MzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NrQWxnb3JpdGhtSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjM0
OEM3RDFGNDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cmluZ1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1
OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDNEOEVG
MURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDUsMTAgKzEyMDEsNyBAQAogCQkJCTkz
M0Q2MzE5MUZDQjZBQjkwMDMyRUNENiAvKiBTdHJpbmdIYXNoZXIuaCAqLywKIAkJCQlBOEE0NzMy
ODE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKLQkJCQkwRjBGNTI2OTFGNDIxRkY4MDA0
QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLywKLQkJCQkwRjBGNTI2QTFGNDIxRkY4MDA0QTQ1
MkMgLyogU3RyaW5nTWFsbG9jLmggKi8sCiAJCQkJQThBNDczMkExNTFBODI1QjAwNDEyM0ZGIC8q
IFN0cmluZ09wZXJhdG9ycy5oICovLAotCQkJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBT
dHJpbmdWZWN0b3IuaCAqLywKIAkJCQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5n
Vmlldy5jcHAgKi8sCiAJCQkJMUE2RUIxREYxODdEMEJEMzAwMzAxMjZGIC8qIFN0cmluZ1ZpZXcu
aCAqLywKIAkJCQlGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi8s
CkBAIC0xNTMzLDcgKzE1MjYsNiBAQAogCQkJCUE1QkExNUZDMTgyNDM1QTYwMEE4MkU2OSAvKiBT
dHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjUxODI0MzQ4MDAwQTgy
RTY5IC8qIFN0cmluZ0ltcGxNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGMzE4MjQz
M0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYwRjUyNkIx
RjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291
cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5PjsKIAotICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFj
aXR5LCBGYXN0TWFsbG9jPiBCdWZmZXI7CisgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5s
aW5lQ2FwYWNpdHk+IEJ1ZmZlcjsKICAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+
IFR5cGVPcGVyYXRpb25zOwogICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+IEl0ZXJhdG9yQmFzZTsKIApJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjMxMjYz
KQorKysgU291cmNlL1dURi93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2
Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGVmYXVsdEhhc2ggeyAKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNs
YXNzIFZhcmlhbnQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSwgc2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBD
cmFzaE9uT3ZlcmZsb3csIHNpemVfdCA9IDE2LCB0eXBlbmFtZSA9IEZhc3RNYWxsb2M+IGNsYXNz
IFZlY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lLCBzaXplX3QgPSAwLCB0eXBlbmFtZSA9IENyYXNo
T25PdmVyZmxvdywgc2l6ZV90ID0gMTY+IGNsYXNzIFZlY3RvcjsKIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlPjo6SGFzaCwgdHlw
ZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJn
PiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxW
YWx1ZUFyZz46Okhhc2gsIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhh
c2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYv
d3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTMgKzQyLDExIEBAIG5hbWVzcGFjZSBH
aWdhY2FnZSB7CiBzdHJ1Y3QgQmFzZVB0cnMgewogICAgIHZvaWQqIHByaW1pdGl2ZTsKICAgICB2
b2lkKiBqc1ZhbHVlOwotICAgIHZvaWQqIHN0cmluZzsKIH07CiAKIGVudW0gS2luZCB7CiAgICAg
UHJpbWl0aXZlLAogICAgIEpTVmFsdWUsCi0gICAgU3RyaW5nCiB9OwogCiBpbmxpbmUgdm9pZCBl
bnN1cmVHaWdhY2FnZSgpIHsgfQpAQCAtNzEsOCArNjksNiBAQCBBTFdBWVNfSU5MSU5FIGNvbnN0
IGNoYXIqIG5hbWUoS2luZCBraW5kCiAgICAgICAgIHJldHVybiAiUHJpbWl0aXZlIjsKICAgICBj
YXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7Ci0gICAgY2FzZSBTdHJpbmc6
Ci0gICAgICAgIHJldHVybiAiU3RyaW5nIjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg1LDggKzgxLDYgQEAgQUxXQVlT
X0lOTElORSB2b2lkKiYgYmFzZVB0cihCYXNlUHRycyYgYgogICAgICAgICByZXR1cm4gYmFzZVB0
cnMucHJpbWl0aXZlOwogICAgIGNhc2UgSlNWYWx1ZToKICAgICAgICAgcmV0dXJuIGJhc2VQdHJz
LmpzVmFsdWU7Ci0gICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgIHJldHVybiBiYXNlUHRycy5zdHJp
bmc7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IGJhc2VQdHJzLnByaW1pdGl2ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBA
IHN0cnVjdCBWZWN0b3JUeXBlT3BlcmF0aW9ucwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBWZWN0
b3JCdWZmZXJCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZWN0b3JCdWZmZXJCYXNl
KTsKIHB1YmxpYzoKQEAgLTI4Nyw3ICsyODcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBDUkFT
SCgpOwogICAgICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBuZXdDYXBhY2l0eSAqIHNpemVv
ZihUKTsKICAgICAgICAgbV9jYXBhY2l0eSA9IHNpemVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwot
ICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxvYyhzaXplVG9B
bGxvY2F0ZSkpOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihmYXN0TWFsbG9j
KHNpemVUb0FsbG9jYXRlKSk7CiAgICAgfQogCiAgICAgYm9vbCB0cnlBbGxvY2F0ZUJ1ZmZlcihz
aXplX3QgbmV3Q2FwYWNpdHkpCkBAIC0yOTcsMTIgKzI5NywxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc2l6ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3
Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0
PFQqPihNYWxsb2M6OnRyeU1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwotICAgICAgICBpZiAoIW5l
d0J1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9jYXBhY2l0eSA9
IHNpemVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwotICAgICAgICBtX2J1ZmZlciA9IG5ld0J1ZmZl
cjsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIFQqIG5ld0J1ZmZlcjsKKyAgICAgICAg
aWYgKHRyeUZhc3RNYWxsb2Moc2l6ZVRvQWxsb2NhdGUpLmdldFZhbHVlKG5ld0J1ZmZlcikpIHsK
KyAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKKyAg
ICAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGJvb2wgc2hv
dWxkUmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpIGNvbnN0CkBAIC0zMTcsNyAr
MzE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgc2l6ZV90IHNp
emVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7CiAgICAgICAgIG1fY2FwYWNp
dHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0
aWNfY2FzdDxUKj4oTWFsbG9jOjpyZWFsbG9jKG1fYnVmZmVyLCBzaXplVG9BbGxvY2F0ZSkpOwor
ICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwg
c2l6ZVRvQWxsb2NhdGUpKTsKICAgICB9CiAKICAgICB2b2lkIGRlYWxsb2NhdGVCdWZmZXIoVCog
YnVmZmVyVG9EZWFsbG9jYXRlKQpAQCAtMzMwLDcgKzMzMSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fY2FwYWNpdHkgPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgTWFsbG9jOjpmcmVlKGJ1
ZmZlclRvRGVhbGxvY2F0ZSk7CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlclRvRGVhbGxvY2F0ZSk7
CiAgICAgfQogCiAgICAgVCogYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAgLTM3MSwx
MyArMzcyLDEzIEBAIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBtX3NpemU7IC8vIE9ubHkgdXNl
ZCBieSB0aGUgVmVjdG9yIHN1YmNsYXNzLCBidXQgcGxhY2VkIGhlcmUgdG8gYXZvaWQgcGFkZGlu
ZyB0aGUgc3RydWN0LgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CiBjbGFzcyBWZWN0b3JCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE1hbGxvYz4KLWNsYXNzIFZlY3RvckJ1ZmZlcjxULCAwLCBNYWxsb2M+IDogcHJp
dmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQsIE1hbGxvYz4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIFZlY3RvckJ1ZmZlcjxULCAwPiA6IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxUPiB7
CiBwcml2YXRlOgotICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyQmFzZTxULCBNYWxsb2M+IEJhc2U7
CisgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQ+IEJhc2U7CiBwdWJsaWM6CiAgICAgVmVj
dG9yQnVmZmVyKCkKICAgICB7CkBAIC0zOTcsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICBk
ZWFsbG9jYXRlQnVmZmVyKGJ1ZmZlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzd2FwKFZl
Y3RvckJ1ZmZlcjxULCAwLCBNYWxsb2M+JiBvdGhlciwgc2l6ZV90LCBzaXplX3QpCisgICAgdm9p
ZCBzd2FwKFZlY3RvckJ1ZmZlcjxULCAwPiYgb3RoZXIsIHNpemVfdCwgc2l6ZV90KQogICAgIHsK
ICAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVyLCBvdGhlci5tX2J1ZmZlcik7CiAgICAgICAgIHN0
ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5KTsKQEAgLTQzMiwxMSArNDMzLDEx
IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgQmFzZTo6bV9jYXBhY2l0eTsKIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotY2xh
c3MgVmVjdG9yQnVmZmVyIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQsIE1hbGxvYz4gewor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorY2xhc3MgVmVjdG9y
QnVmZmVyIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQ+IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShWZWN0b3JCdWZmZXIpOwogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZl
ckJhc2U8VCwgTWFsbG9jPiBCYXNlOworICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyQmFzZTxUPiBC
YXNlOwogcHVibGljOgogICAgIFZlY3RvckJ1ZmZlcigpCiAgICAgICAgIDogQmFzZShpbmxpbmVC
dWZmZXIoKSwgaW5saW5lQ2FwYWNpdHksIDApCkBAIC01OTgsMTEgKzU5OSwxMSBAQCBzdHJ1Y3Qg
VW5zYWZlVmVjdG9yT3ZlcmZsb3cgewogfTsKIAogLy8gVGVtcGxhdGUgZGVmYXVsdCB2YWx1ZXMg
YXJlIGluIEZvcndhcmQuaC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KLWNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGlu
ZUNhcGFjaXR5LCBNYWxsb2M+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Citj
bGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3Rv
ckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgTWFsbG9jPiBCYXNlOworICAgIHR5cGVkZWYgVmVj
dG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOwogICAgIHR5cGVkZWYgVmVjdG9yVHlw
ZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7CiAKIHB1YmxpYzoKQEAgLTY2OSwxMiArNjcw
LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBWZWN0b3IoY29uc3QgVmVjdG9yJik7Ci0gICAg
dGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhh
dmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+
Ci0gICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhl
ck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eSwgT3RoZXJNYWxsb2M+Jik7
CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZs
b3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4KKyAgICBleHBsaWNpdCBW
ZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlv
dXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwogCiAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29u
c3QgVmVjdG9yJik7Ci0gICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1l
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eSwgdHlw
ZW5hbWUgT3RoZXJNYWxsb2M+Ci0gICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQs
IG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFj
aXR5LCBPdGhlck1hbGxvYz4mKTsKKyAgICB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwg
dHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFj
aXR5PgorICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5
LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mKTsKIAogICAg
IFZlY3RvcihWZWN0b3ImJik7CiAgICAgVmVjdG9yJiBvcGVyYXRvcj0oVmVjdG9yJiYpOwpAQCAt
ODY0LDggKzg2NSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLVZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6VmVjdG9yKGNvbnN0IFZl
Y3RvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9yKGNv
bnN0IFZlY3RvciYgb3RoZXIpCiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNp
emUoKSkKIHsKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwpA
QCAtODc0LDkgKzg3NSw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGUKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2lu
KCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHks
IHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBh
Y2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OlZlY3Rvcihjb25zdCBWZWN0b3I8
VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2Fw
YWNpdHksIE90aGVyTWFsbG9jPiYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgordGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZs
b3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBW
ZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5p
bXVtQ2FwYWNpdHk+JiBvdGhlcikKICAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIu
c2l6ZSgpKQogewogICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKG90aGVyLnNpemUoKSk7
CkBAIC04ODUsOCArODg2LDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZQogICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVn
aW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6b3BlcmF0b3I9KGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPiYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6b3Bl
cmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIG90aGVyKQogewogICAgIGlmICgmb3RoZXIgPT0gdGhpcykKICAgICAgICAg
cmV0dXJuICp0aGlzOwpAQCAtOTEwLDkgKzkxMSw5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGUKIAogaW5saW5lIGJvb2wgdHlwZWxlc3NQb2ludGVyc0FyZUVxdWFs
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTxz
aXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6
ZV90IG90aGVyTWluaW11bUNhcGFjaXR5LCB0eXBlbmFtZSBPdGhlck1hbGxvYz4KLVZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3Zl
cmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5LCBPdGhlck1hbGxvYz4mIG90aGVy
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3RlbXBsYXRlPHNpemVfdCBvdGhl
ckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJN
aW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjpvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHks
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCiB7
CiAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIG1hdGNoLCB3ZSBzaG91bGQgY2FsbCB0
aGUgbW9yZSBzcGVjaWZpYwogICAgIC8vIHRlbXBsYXRlLiAgSWYgdGhlIGlubGluZSBjYXBhY2l0
aWVzIGRvbid0IG1hdGNoLCB0aGUgdHdvIG9iamVjdHMKQEAgLTkzNiwyOSArOTM3LDI5IEBAIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
LWlubGluZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OlZlY3RvcihWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9yKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiBvdGhlcikKIHsKICAgICBzd2FwKG90aGVy
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9j
PgotaW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpvcGVyYXRvcj0oVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiYgb3RoZXIpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgb3RoZXIpCiB7
CiAgICAgc3dhcChvdGhlcik7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb250YWlu
cyhjb25zdCBVJiB2YWx1ZSkgY29uc3QKK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y29udGFpbnMoY29uc3QgVSYgdmFsdWUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGZpbmQodmFsdWUpICE9IG5vdEZvdW5kOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNp
emVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHksIE1hbGxvYz46OmZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBj
b25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBj
b25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgaWYgKG1hdGNoZXMoYXQoaSkpKQpAQCAtOTY3LDE4ICs5NjgsMTggQEAgc2l6ZV90IFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsbwogICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1zaXplX3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbmQoY29uc3QgVSYg
dmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkg
ewogICAgICAgICByZXR1cm4gaXRlbSA9PSB2YWx1ZTsKICAgICB9KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1zaXplX3QgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpy
ZXZlcnNlRmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKK3NpemVfdCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXZlcnNlRmluZChjb25z
dCBVJiB2YWx1ZSkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBzaXplKCk7
ICsraSkgewogICAgICAgICBjb25zdCBzaXplX3QgaW5kZXggPSBzaXplKCkgLSBpOwpAQCAtOTg4
LDkgKzk4OSw5IEBAIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KICAg
ICByZXR1cm4gbm90Rm91bmQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZElmTm90Q29udGFpbnMoY29uc3Qg
VSYgdmFsdWUpCitib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46OmFwcGVuZElmTm90Q29udGFpbnMoY29uc3QgVSYgdmFsdWUpCiB7CiAg
ICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTk4LDgg
Kzk5OSw4IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmZpbGwoY29uc3QgVCYgdmFsLCBzaXplX3QgbmV3U2l6
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbGwoY29uc3QgVCYg
dmFsLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBpZiAoc2l6ZSgpID4gbmV3U2l6ZSkKICAgICAg
ICAgc2hyaW5rKG5ld1NpemUpOwpAQCAtMTAxNiwyMiArMTAxNywyMiBAQCB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgot
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHksIE1hbGxvYz46OmFwcGVuZFJhbmdlKEl0ZXJhdG9yIHN0YXJ0LCBJdGVyYXRvciBlbmQpCit2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OmFwcGVuZFJhbmdlKEl0ZXJhdG9yIHN0YXJ0LCBJdGVyYXRvciBlbmQpCiB7CiAgICAgZm9y
IChJdGVyYXRvciBpdCA9IHN0YXJ0OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGFwcGVuZCgq
aXQpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6
ZV90IG5ld01pbkNhcGFjaXR5KQogewogICAgIHJlc2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdN
aW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNh
cGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLVQqIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5PgorVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBw
dHIpCiB7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CiAgICAgICAg
IGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKQEAgLTEwNDIsMTQgKzEwNDMsMTQgQEAg
VCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbgogICAgIHJldHVybiBiZWdp
bigpICsgaW5kZXg7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWlu
Q2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBh
bmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpCiB7CiAgICAgcmV0dXJuIHRyeVJlc2Vy
dmVDYXBhY2l0eShzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8
c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
LWNvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5
LCBjb25zdCBUKiBwdHIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorY29uc3Qg
VCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIp
CiB7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRyID49IGVuZCgpKSB7CiAgICAgICAgIGlm
ICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQpAQCAtMTA2MiwxNiArMTA2Mywx
NiBAQCBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmCiAgICAgcmV0dXJu
IGJlZ2luKCkgKyBpbmRleDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUgVSogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3Qg
bmV3TWluQ2FwYWNpdHksIFUqIHB0cikKK2lubGluZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3Qg
bmV3TWluQ2FwYWNpdHksIFUqIHB0cikKIHsKICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBh
Y2l0eSk7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNpemUoc2l6ZV90
IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVz
aXplKHNpemVfdCBzaXplKQogewogICAgIGlmIChzaXplIDw9IG1fc2l6ZSkgewogICAgICAgICBU
eXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKQEAgLTEwODcs
MTUgKzEwODgsMTUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgog
ICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2l6ZVRvRml0KHNpemVf
dCBzaXplKQogewogICAgIHJlc2VydmVDYXBhY2l0eShzaXplKTsKICAgICByZXNpemUoc2l6ZSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
LXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+OjpzaHJpbmsoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjpzaHJpbmsoc2l6ZV90IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUg
PD0gbV9zaXplKTsKICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUs
IGVuZCgpKTsKQEAgLTExMDMsOCArMTEwNCw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0gKICAgICBtX3NpemUgPSBzaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Z3JvdyhzaXpl
X3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omdyb3coc2l6
ZV90IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPj0gbV9zaXplKTsKICAgICBpZiAoc2l6ZSA+
IGNhcGFjaXR5KCkpCkBAIC0xMTE1LDggKzExMTYsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
Ojphc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojphc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVU
byhzaXplX3Qgc2l6ZSkKIHsKICNpZiBBU0FOX0VOQUJMRUQKICAgICBpZiAoIWJ1ZmZlcigpKQpA
QCAtMTEzMSw4ICsxMTMyLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdgogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxD
YXBhY2l0eShzaXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Citp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+Ojphc2FuU2V0QnVmZmVyU2l6ZVRvRnVsbENhcGFjaXR5KHNpemVfdCBzaXplKQog
ewogI2lmIEFTQU5fRU5BQkxFRAogICAgIGlmICghYnVmZmVyKCkpCkBAIC0xMTQ1LDggKzExNDYs
OCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAjZW5kaWYKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+Ojphc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplX3QgbmV3U2l6
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojphc2FuQnVm
ZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplX3QgbmV3U2l6ZSkKIHsKICNpZiBBU0FOX0VOQUJMRUQK
ICAgICBpZiAoIWJ1ZmZlcigpKQpAQCAtMTE1OSw4ICsxMTYwLDggQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlQ2Fw
YWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAo
bmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3OCw4ICsx
MTc5LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIEJh
c2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeVJlc2VydmVD
YXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQogewogICAg
IGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTEyMDEsOCArMTIwMiw4IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0gKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlh
bENhcGFjaXR5KQogewogICAgIEFTU0VSVCghbV9zaXplKTsKICAgICBBU1NFUlQoY2FwYWNpdHko
KSA9PSBpbmxpbmVDYXBhY2l0eSk7CkBAIC0xMjEwLDggKzEyMTEsOCBAQCBpbmxpbmUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVy
KGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3
Q2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpzaHJpbmtD
YXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5ID49IGNh
cGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNDEsOSArMTI0Miw5IEBAIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZl
clNpemVUbyhzaXplKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90
IGRhdGFTaXplKQordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjphcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQog
ewogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CiAgICAgaWYgKG5ld1Np
emUgPiBjYXBhY2l0eSgpKSB7CkBAIC0xMjU4LDkgKzEyNTksOSBAQCB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1ib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK2Jvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5QXBw
ZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBzaXplX3QgbmV3U2l6
ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewpA
QCAtMTI3OCw5ICsxMjc5LDkgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgog
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChV
JiYgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBp
ZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hh
bmdlVG8obV9zaXplICsgMSk7CkBAIC0xMjkyLDkgKzEyOTMsOSBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAgYXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5k
QXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmNvbnN0cnVjdEFuZEFw
cGVuZChBcmdzJiYuLi4gYXJncykKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsK
ICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CkBAIC0xMzA2
LDkgKzEzMDcsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAg
ICAgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9j
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlDb25zdHJ1Y3RBbmRBcHBlbmQo
QXJncyYmLi4uIGFyZ3MpCitBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5k
KEFyZ3MmJi4uLiBhcmdzKQogewogICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAg
ICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKQEAgLTEzMjAsOSAr
MTMyMSw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWMKICAgICBy
ZXR1cm4gdHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQordm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBl
bmRTbG93Q2FzZShVJiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgp
KTsKIApAQCAtMTMzNSw5ICsxMzM2LDkgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SAogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRB
cHBlbmRTbG93Q2FzZShBcmdzJiYuLi4gYXJncykKK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y29uc3RydWN0QW5kQXBwZW5kU2xv
d0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgp
KTsKIApAQCAtMTM0OSw5ICsxMzUwLDkgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SAogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlDb25zdHJ1Y3RB
bmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4gYXJncykKK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBw
ZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBh
Y2l0eSgpKTsKICAgICAKQEAgLTEzNjgsOSArMTM2OSw5IEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKIC8vIFRoaXMgdmVyc2lvbiBvZiBhcHBlbmQgc2F2ZXMgYSBi
cmFuY2ggaW4gdGhlIGNhc2Ugd2hlcmUgeW91IGtub3cgdGhhdCB0aGUKIC8vIHZlY3RvcidzIGNh
cGFjaXR5IGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIGFwcGVuZCB0byBzdWNjZWVkLgogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJ
TkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUpCitBTFdBWVNfSU5MSU5F
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSgpIDwg
Y2FwYWNpdHkoKSk7CiAKQEAgLTEzODAsMTYgKzEzODEsMTYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhYwogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+
Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJD
YXBhY2l0eT4mIHZhbCkKK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwg
b3RoZXJDYXBhY2l0eT4mIHZhbCkKIHsKICAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXpl
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBVKiBkYXRhLCBz
aXplX3QgZGF0YVNpemUpCit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUqIGRh
dGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsg
ZGF0YVNpemU7CkBAIC0xNDA2LDkgKzE0MDcsOSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KICAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBVJiYgdmFsdWUpCitpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjppbnNlcnQo
c2l6ZV90IHBvc2l0aW9uLCBVJiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ocG9zaXRpb24gPD0gc2l6ZSgpKTsKIApAQCAtMTQyNiwxNSArMTQyNywxNSBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgKyttX3NpemU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6aW5zZXJ0VmVjdG9yKHNpemVfdCBwb3NpdGlv
biwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjppbnNlcnRWZWN0b3Ioc2l6
ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKIHsKICAgICBpbnNlcnQocG9z
aXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1v
dmUoc2l6ZV90IHBvc2l0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24pCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXplKCkpOwogICAgIFQqIHNwb3QgPSBiZWdp
bigpICsgcG9zaXRpb247CkBAIC0xNDQ0LDggKzE0NDUsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgLS1tX3NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
cmVtb3ZlKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uLCBzaXpl
X3QgbGVuZ3RoKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0
aW9uIDw9IHNpemUoKSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9z
aXRpb24gKyBsZW5ndGggPD0gc2l6ZSgpKTsKQEAgLTE0NTcsMTggKzE0NTgsMTggQEAgaW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgIG1fc2l6ZSAtPSBsZW5ndGg7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
aW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1vdmVGaXJzdChjb25zdCBVJiB2YWx1ZSkKK2lubGluZSBi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnJlbW92ZUZpcnN0KGNvbnN0IFUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmVGaXJz
dE1hdGNoaW5nKFsmdmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CiAgICAgICAgIHJldHVybiBj
dXJyZW50ID09IHZhbHVlOwogICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLWlubGluZSBib29sIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
cmVtb3ZlRmlyc3RNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzLCBzaXplX3Qg
c3RhcnRJbmRleCkKK2lubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZUZpcnN0TWF0Y2hpbmcoY29uc3QgTWF0Y2hG
dW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5kZXgpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IHN0YXJ0SW5kZXg7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBpZiAobWF0Y2hlcyhh
dChpKSkpIHsKQEAgLTE0NzksMTggKzE0ODAsMTggQEAgaW5saW5lIGJvb2wgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUgdW5zaWduZWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjpyZW1vdmVBbGwoY29uc3QgVSYgdmFsdWUpCitpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVtb3ZlQWxsKGNv
bnN0IFUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmVBbGxNYXRjaGluZyhbJnZhbHVlXSAo
Y29uc3QgVCYgY3VycmVudCkgewogICAgICAgICByZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsKICAg
ICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1l
IE1hdGNoRnVuY3Rpb24+Ci1pbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1vdmVBbGxNYXRjaGlu
Zyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzLCBzaXplX3Qgc3RhcnRJbmRleCkKK2lubGlu
ZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVz
LCBzaXplX3Qgc3RhcnRJbmRleCkKIHsKICAgICBpdGVyYXRvciBob2xlQmVnaW4gPSBlbmQoKTsK
ICAgICBpdGVyYXRvciBob2xlRW5kID0gZW5kKCk7CkBAIC0xNTE1LDE2ICsxNTE2LDE2IEBAIGlu
bGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHkKICAgICByZXR1cm4gbWF0Y2hD
b3VudDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXZlcnNlKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXZlcnNlKCkKIHsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fc2l6ZSAvIDI7ICsraSkKICAgICAgICAgc3RkOjpzd2FwKGF0KGkpLCBhdCht
X3NpemUgLSAxIC0gaSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxh
dGU8dHlwZW5hbWUgTWFwRnVuY3Rpb24sIHR5cGVuYW1lIFI+Ci1pbmxpbmUgVmVjdG9yPFI+IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6bWFwKE1hcEZ1bmN0aW9uIG1hcEZ1bmN0aW9uKSBjb25zdAoraW5saW5lIFZlY3RvcjxS
PiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjptYXAoTWFwRnVuY3Rpb24gbWFwRnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgVmVjdG9yPFI+IHJl
c3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKCkpOwpAQCAtMTUz
Myw4ICsxNTM0LDggQEAgaW5saW5lIFZlY3RvcjxSPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBNYWxsb2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZWxlYXNlQnVm
ZmVyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgTWFsbG9jUHRy
PFQ+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnJlbGVhc2VCdWZmZXIoKQogewogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHByZXNl
cnZlIGFubm90YXRpb25zIG9uIHRoZSByZXR1cm5lZCBidWZmZXIuCiAgICAgLy8gQVNhbiByZXF1
aXJlcyB0aGF0IGFsbCBhbm5vdGF0aW9ucyBhcmUgcmVtb3ZlZCBiZWZvcmUgZGVhbGxvY2F0aW9u
LApAQCAtMTU0Nyw3ICsxNTQ4LDcgQEAgaW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYQogICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IHdhcyB1c2luZyB0aGUgaW5saW5lIGJ1
ZmZlci4gSW4gdGhhdCBjYXNlLAogICAgICAgICAvLyB3ZSBjcmVhdGUgYSBicmFuZCBuZXcgYnVm
ZmVyIHNvIHRoZSBjYWxsZXIgYWx3YXlzIGdldHMgb25lLgogICAgICAgICBzaXplX3QgYnl0ZXMg
PSBtX3NpemUgKiBzaXplb2YoVCk7Ci0gICAgICAgIGJ1ZmZlciA9IGFkb3B0TWFsbG9jUHRyKHN0
YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxvYyhieXRlcykpKTsKKyAgICAgICAgYnVmZmVyID0g
YWRvcHRNYWxsb2NQdHIoc3RhdGljX2Nhc3Q8VCo+KGZhc3RNYWxsb2MoYnl0ZXMpKSk7CiAgICAg
ICAgIG1lbWNweShidWZmZXIuZ2V0KCksIGRhdGEoKSwgYnl0ZXMpOwogICAgIH0KICAgICBtX3Np
emUgPSAwOwpAQCAtMTU1NSw4ICsxNTU2LDggQEAgaW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8
VCwgaW5saW5lQ2FwYQogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0xNTY0LDE0ICsxNTY1LDE0IEBA
IGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUg
dm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPiYgYSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KK2lubGluZSB2b2lkIHN3YXAoVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYikKIHsKICAgICBhLnN3YXAoYik7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wg
b3BlcmF0b3I9PShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgYikKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+Citib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYSwgY29uc3QgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYikK
IHsKICAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE1NzksOCArMTU4MCw4IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2EKICAgICByZXR1cm4gVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OmNvbXBhcmUoYS5kYXRh
KCksIGIuZGF0YSgpLCBhLnNpemUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHksIE1hbGxvYz4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBiKQogewogICAgIHJldHVy
biAhKGEgPT0gYik7CiB9CkBAIC0xNjA0LDggKzE2MDUsOCBAQCBzaXplX3QgcmVtb3ZlUmVwZWF0
ZWRFbGVtZW50cyhWZWN0b3JUeXBlCiAgICAgcmV0dXJuIG5ld1NpemU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXNpemVfdCByZW1vdmVS
ZXBlYXRlZEVsZW1lbnRzKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgdmVjdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KK3NpemVfdCByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZlY3RvcikKIHsKICAgICBy
ZXR1cm4gcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyh2ZWN0b3IsIFtdIChUJiBhLCBUJiBiKSB7IHJl
dHVybiBhID09IGI7IH0pOwogfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHJpdmF0ZToKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBBdG9taWNTdHJpbmdJbXBscyBjcmVhdGVkIGZyb20gU3Rh
dGljU3RyaW5nSW1wbCB3aWxsIEFTU0VSVAogLy8gaW4gdGhlIGdlbmVyaWMgVmFsdWVDaGVjazxU
Pjo6Y2hlY2tDb25zaXN0ZW5jeQotLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBTdHJp
bmdNYWxsb2MuCisvLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuCiAv
LyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbnkgd2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKIC8v
IHNvIHdlIGlnbm9yZSB0aGUgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGFsbCBBdG9taWNTdHJpbmdJ
bXBscyouCiB0ZW1wbGF0ZTw+IHN0cnVjdApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCShy
ZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdN
YWxsb2MuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcgKzM4LDcgQEAgUmVmPENTdHJp
bmdCdWZmZXI+IENTdHJpbmdCdWZmZXI6OmNyZWF0ZQogCiAgICAgLy8gVGhlICsxIGlzIGZvciB0
aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2Yo
Q1N0cmluZ0J1ZmZlcikgKyBsZW5ndGggKyAxOwotICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1
ZmZlciA9IHN0YXRpY19jYXN0PENTdHJpbmdCdWZmZXIqPihzdHJpbmdNYWxsb2Moc2l6ZSkpOwor
ICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1ZmZlciA9IHN0YXRpY19jYXN0PENTdHJpbmdCdWZm
ZXIqPihmYXN0TWFsbG9jKHNpemUpKTsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVs
bCwgc3RyaW5nQnVmZmVyKSBDU3RyaW5nQnVmZmVyKGxlbmd0aCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9D
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxMiBAQAogI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewogCiAvLyBDU3RyaW5nQnVmZmVyIGlzIHRoZSByZWYtY291bnRlZCBzdG9yYWdlIGNs
YXNzIGZvciB0aGUgY2hhcmFjdGVycyBpbiBhIENTdHJpbmcuCiAvLyBUaGUgZGF0YSBpcyBpbXBs
aWNpdGx5IGFsbG9jYXRlZCAxIGNoYXJhY3RlciBsb25nZXIgdGhhbiBsZW5ndGgoKSwgYXMgaXQg
aXMgemVyby10ZXJtaW5hdGVkLgogY2xhc3MgQ1N0cmluZ0J1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENTdHJpbmdCdWZmZXI+IHsKLSAgICBXVEZfTUFLRV9TVFJJTkdfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CiAg
ICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVmZmVyLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAK
ICNkZWZpbmUgU3RyaW5nQnVmZmVyX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+CiAjaW5jbHVkZSA8bGltaXRzPgogI2lu
Y2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CiAKQEAgLTQyLDEzICs0MSwxMyBAQCBjbGFzcyBTdHJp
bmdCdWZmZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN0cmluZ0J1ZmZlcih1bnNpZ25lZCBs
ZW5ndGgpCiAgICAgICAgIDogbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShtX2xl
bmd0aCA/IHN0YXRpY19jYXN0PENoYXJUeXBlKj4oc3RyaW5nTWFsbG9jKChDaGVja2VkPHNpemVf
dD4obV9sZW5ndGgpICogc2l6ZW9mKENoYXJUeXBlKSkudW5zYWZlR2V0KCkpKSA6IG51bGxwdHIp
CisgICAgICAgICwgbV9kYXRhKG1fbGVuZ3RoID8gc3RhdGljX2Nhc3Q8Q2hhclR5cGUqPihmYXN0
TWFsbG9jKChDaGVja2VkPHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKENoYXJUeXBlKSkudW5z
YWZlR2V0KCkpKSA6IG51bGxwdHIpCiAgICAgewogICAgIH0KIAogICAgIH5TdHJpbmdCdWZmZXIo
KQogICAgIHsKLSAgICAgICAgc3RyaW5nRnJlZShtX2RhdGEpOworICAgICAgICBmYXN0RnJlZSht
X2RhdGEpOwogICAgIH0KIAogICAgIHZvaWQgc2hyaW5rKHVuc2lnbmVkIG5ld0xlbmd0aCkKQEAg
LTYyLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9sZW5ndGgp
IHsKICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgLyBzaXplb2YoVUNoYXIpKQogICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KHN0cmluZ1JlYWxsb2MobV9k
YXRhLCBuZXdMZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CisgICAgICAgICAgICBtX2RhdGEgPSBz
dGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RSZWFsbG9jKG1fZGF0YSwgbmV3TGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSkpOwogICAgICAgICB9CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMjMxMjYzKQor
KysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTEgKzI4LDkgQEAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJTdHJp
bmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0dpZ2Fj
YWdlLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N5bWJvbEltcGwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TeW1ib2xS
ZWdpc3RyeS5oPgpAQCAtMTMxLDcgKzEyOSw3IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkK
ICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7CiAgICAgICAgIC8vIFdlIHVzZSBt
X2RhdGE4LCBidXQgc2luY2UgaXQgaXMgYSB1bmlvbiB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3Mg
ZWl0aGVyIHdheS4KICAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwotICAgICAgICBzdHJpbmdGcmVl
KGNvbnN0X2Nhc3Q8TENoYXIqPihtX2RhdGE4KSk7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8TENoYXIqPihtX2RhdGE4KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE0Myw3
ICsxNDEsNyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB2b2lkIFN0cmluZ0ltcGw6OmRl
c3Ryb3koU3RyaW5nSW1wbCogc3RyaW5nSW1wbCkKIHsKICAgICBzdHJpbmdJbXBsLT5+U3RyaW5n
SW1wbCgpOwotICAgIHN0cmluZ0ZyZWUoc3RyaW5nSW1wbCk7CisgICAgZmFzdEZyZWUoc3RyaW5n
SW1wbCk7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJh
bChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC0xOTAsNyArMTg4
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIAogICAgIC8vIGhl
YXAgYWxsb2NhdGlvbiBmcm9tIHRoaXMgY2FsbC4KICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6
ZW9mKENoYXJhY3RlclR5cGUpKSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBTdHJpbmdJbXBsKiBz
dHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oc3RyaW5nTWFsbG9jKGFsbG9jYXRpb25T
aXplPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpKTsKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBz
dGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0
ZXJUeXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRhID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFy
YWN0ZXJUeXBlPigpOwogICAgIHJldHVybiBjb25zdHJ1Y3RJbnRlcm5hbDxDaGFyYWN0ZXJUeXBl
Pigqc3RyaW5nLCBsZW5ndGgpOwpAQCAtMjE2LDEyICsyMTQsMTIgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIAogICAgICAgICByZXR1cm4gKmVtcHR5KCk7CiAgICAg
fQogCi0gICAgLy8gU2FtZSBhcyBjcmVhdGVVbmluaXRpYWxpemVkKCkgZXhjZXB0IGhlcmUgd2Ug
dXNlIHN0cmluZ1JlYWxsb2MuCisgICAgLy8gU2FtZSBhcyBjcmVhdGVVbmluaXRpYWxpemVkKCkg
ZXhjZXB0IGhlcmUgd2UgdXNlIGZhc3RSZWFsbG9jLgogICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBz
aXplb2YoQ2hhcmFjdGVyVHlwZSkpKQogICAgICAgICBDUkFTSCgpOwogCiAgICAgb3JpZ2luYWxT
dHJpbmctPn5TdHJpbmdJbXBsKCk7Ci0gICAgYXV0byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3Ry
aW5nSW1wbCo+KHN0cmluZ1JlYWxsb2MoJm9yaWdpbmFsU3RyaW5nLmxlYWtSZWYoKSwgYWxsb2Nh
dGlvblNpemU8Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkpOworICAgIGF1dG8qIHN0cmluZyA9IHN0
YXRpY19jYXN0PFN0cmluZ0ltcGwqPihmYXN0UmVhbGxvYygmb3JpZ2luYWxTdHJpbmcubGVha1Jl
ZigpLCBhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRh
ID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFyYWN0ZXJUeXBlPigpOwogICAgIHJldHVybiBjb25z
dHJ1Y3RJbnRlcm5hbDxDaGFyYWN0ZXJUeXBlPigqc3RyaW5nLCBsZW5ndGgpOwpAQCAtMTg4NSwx
NCArMTg4Myw0IEBAIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoY29uc3QgVUNoYXIqIGEKICAg
ICByZXR1cm4gIW1lbWNtcChhLCBiLT5jaGFyYWN0ZXJzMTYoKSwgYi0+bGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpKTsKIH0KIAotdm9pZCBTdHJpbmdJbXBsOjpyZWxlYXNlQXNzZXJ0Q2FnZWQoKSBj
b25zdAotewotICAgIGlmIChpc1N0YXRpYygpKQotICAgICAgICByZXR1cm47Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIUdJR0FDQUdFX0VOQUJMRUQgfHwgR2lnYWNhZ2U6OmlzQ2FnZWQoR2lnYWNhZ2U6
OlN0cmluZywgdGhpcykpOwotICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJPd25l
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFHSUdBQ0FHRV9FTkFCTEVE
IHx8IEdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdlOjpTdHJpbmcsIG1fZGF0YTgpKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNp
b24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9Db252ZXJzaW9uTW9k
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oPgog
CiAjaWYgVVNFKENGKQogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaW5n
UmVmOwpAQCAtMTU3LDcgKzE1Niw3IEBAIHByb3RlY3RlZDoKIC8vIFJpZ2h0IG5vdyB3ZSB1c2Ug
YSBtaXggb2YgYm90aCwgd2hpY2ggbWFrZXMgY29kZSBtb3JlIGNvbmZ1c2luZyBhbmQgaGFzIG5v
IGJlbmVmaXQuCiAKIGNsYXNzIFN0cmluZ0ltcGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7IFdURl9NQUtFX1NUUklOR19B
TExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CiAg
ICAgZnJpZW5kIGNsYXNzIEpTQzo6TExJbnQ6OkRhdGE7CkBAIC0yNTcsNyArMjU2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRv
cHQoU3RyaW5nVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5PiYmKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkb3B0
KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mJik7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJp
bmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXI8VUNoYXI+JiYpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mJik7
CkBAIC00NzAsOSArNDY5LDYgQEAgcHVibGljOgogCiAgICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZl
ck93bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hpcD4o
bV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKTsgfQogICAgIAotICAg
IHZvaWQgYXNzZXJ0Q2FnZWQoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZWxlYXNlQXNzZXJ0Q2FnZWQoKSBjb25zdDsKLQogcHJvdGVjdGVkOgogICAgIH5TdHJpbmdJbXBs
KCk7CiAKQEAgLTUyNiw3ICs1MjIsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBs
KSA9PSBzaXplCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogCiAvLyBTdHJpbmdJbXBscyBjcmVhdGVk
IGZyb20gU3RhdGljU3RyaW5nSW1wbCB3aWxsIEFTU0VSVCBpbiB0aGUgZ2VuZXJpYyBWYWx1ZUNo
ZWNrPFQ+OjpjaGVja0NvbnNpc3RlbmN5Ci0vLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5
IHN0cmluZ01hbGxvYy4gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3Qg
dGhhdCBjYXNlCisvLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuIFdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSB3YXkgdG8gZGV0ZWN0IHRoYXQgY2FzZQogLy8gc28g
d2UgaWdub3JlIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBmb3IgYWxsIFN0cmluZ0ltcGwqLgogdGVt
cGxhdGU8PiBzdHJ1Y3QgVmFsdWVDaGVjazxTdHJpbmdJbXBsKj4gewogICAgIHN0YXRpYyB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koY29uc3QgU3RyaW5nSW1wbCopIHsgfQpAQCAtOTI0LDcgKzkyMCw3
IEBAIEFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICBhdXRvKiBv
d25lclJlcCA9ICgocmVwLmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyBy
ZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVwKTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIGEgYnVm
ZmVyIHRoYXQgY29udGFpbnMgYm90aCB0aGUgU3RyaW5nSW1wbCBzdHJ1Y3QgYXMgd2VsbCBhcyB0
aGUgcG9pbnRlciB0byB0aGUgb3duZXIgc3RyaW5nLgotICAgIGF1dG8qIHN0cmluZ0ltcGwgPSBz
dGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oc3RyaW5nTWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmlu
Z0ltcGwqPigxKSkpOworICAgIGF1dG8qIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMSkpKTsKICAgICBp
ZiAocmVwLmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwg
c3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAubV9kYXRhOCArIG9mZnNldCwgbGVuZ3RoLCAqb3du
ZXJSZXApKTsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkg
U3RyaW5nSW1wbChyZXAubV9kYXRhMTYgKyBvZmZzZXQsIGxlbmd0aCwgKm93bmVyUmVwKSk7CkBA
IC05NDksOCArOTQ1LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlT
XwogICAgICAgICBvdXRwdXQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9Ci0gICAgYXV0byogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KHRyeVN0cmlu
Z01hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKSk7Ci0gICAgaWYg
KCFyZXN1bHQpIHsKKyAgICBTdHJpbmdJbXBsKiByZXN1bHQ7CisgICAgaWYgKCF0cnlGYXN0TWFs
bG9jKGFsbG9jYXRpb25TaXplPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpLmdldFZhbHVlKHJlc3Vs
dCkpIHsKICAgICAgICAgb3V0cHV0ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpAQCAtOTYwLDcgKzk1Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IEFMV0FZU18KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KLWlubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6YWRvcHQoU3RyaW5nVmVj
dG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5PiYmIHZlY3RvcikKK2lubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6YWRv
cHQoVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiYmIHZlY3RvcikKIHsKICAgICBpZiAoc2l6ZV90IHNpemUgPSB2ZWN0b3Iu
c2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVCh2ZWN0b3IuZGF0YSgpKTsKQEAgLTEwNzQsMTIgKzEw
NzAsNiBAQCBpbmxpbmUgVUNoYXIgU3RyaW5nSW1wbDo6YXQodW5zaWduZWQgaSkgCiAgICAgcmV0
dXJuIGlzOEJpdCgpID8gbV9kYXRhOFtpXSA6IG1fZGF0YTE2W2ldOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHJpbmdJbXBsOjphc3NlcnRDYWdlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpCi0gICAgICAgIHJlbGVhc2VBc3NlcnRDYWdlZCgpOwotfQotCiBpbmxpbmUgU3RyaW5n
SW1wbDo6U3RyaW5nSW1wbChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3Jl
bWVudCwgbGVuZ3RoLCBjaGFyYWN0ZXJzLCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5
bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nTWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01h
bGxvYy5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
TWFsbG9jLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlN0cmluZ01hbGxvYy5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgotI2luY2x1
ZGUgPHd0Zi9SYXdQb2ludGVyLmg+Ci0KLSNpZiAhKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0Mp
ICYmIFVTRV9TWVNURU1fTUFMTE9DKQotI2luY2x1ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi0jaWYgZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykg
JiYgVVNFX1NZU1RFTV9NQUxMT0MKLXZvaWQqIHRyeVN0cmluZ01hbGxvYyhzaXplX3Qgc2l6ZSkK
LXsKLSAgICByZXR1cm4gRmFzdE1hbGxvYzo6dHJ5TWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBz
dHJpbmdNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGZhc3RNYWxsb2Moc2l6ZSk7
Ci19Ci0KLXZvaWQqIHN0cmluZ1JlYWxsb2Modm9pZCogcCwgc2l6ZV90IHNpemUpCi17Ci0gICAg
cmV0dXJuIGZhc3RSZWFsbG9jKHAsIHNpemUpOwotfQotCi12b2lkIHN0cmluZ0ZyZWUodm9pZCog
cCkKLXsKLSAgICByZXR1cm4gZmFzdEZyZWUocCk7Ci19Ci0jZWxzZQotdm9pZCogdHJ5U3RyaW5n
TWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1hbGxv
YyhzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2UpOwotfQotCi12b2lkKiBz
dHJpbmdNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWFs
bG9jKHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZSk7Ci19Ci0KLXZvaWQq
IHN0cmluZ1JlYWxsb2Modm9pZCogcCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGJtYWxs
b2M6OmFwaTo6cmVhbGxvYyhwLCBzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6U3RyaW5nR2lnYWNh
Z2UpOwotfQotCi12b2lkIHN0cmluZ0ZyZWUodm9pZCogcCkKLXsKLSAgICBpZiAoIXApCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoVU5MSUtFTFkoIUdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdl
OjpTdHJpbmcsIHApKSkgewotICAgICAgICBkYXRhTG9nKCJUcnlpbmcgdG8gZnJlZSBzdHJpbmcg
dGhhdCBpcyBub3QgY2FnZWQ6ICIsIFJhd1BvaW50ZXIocCksICJcbiIpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBibWFsbG9jOjphcGk6OmZyZWUo
cCwgYm1hbGxvYzo6SGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlKTsKLX0KLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdNYWxsb2Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5oCShyZXZp
c2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5oCShub25l
eGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5U3Ry
aW5nTWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogc3RyaW5nTWFsbG9j
KHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogc3RyaW5nUmVhbGxvYyh2b2lkKiwg
c2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHN0cmluZ0ZyZWUodm9pZCopOwotCi0j
ZGVmaW5lIFdURl9NQUtFX1NUUklOR19BTExPQ0FURUQgXAotcHVibGljOiBcCi0gICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCi0gICAgdm9pZCog
b3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKLSAgICBcCi0g
ICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSBcCi0gICAgeyBcCi0gICAgICAgIHJl
dHVybiA6OldURjo6c3RyaW5nTWFsbG9jKHNpemUpOyBcCi0gICAgfSBcCi0gICAgXAotICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIFwKLSAgICB7IFwKLSAgICAgICAgOjpXVEY6OnN0
cmluZ0ZyZWUocCk7IFwKLSAgICB9IFwKLSAgICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3W10o
c2l6ZV90IHNpemUpIFwKLSAgICB7IFwKLSAgICAgICAgcmV0dXJuIDo6V1RGOjpzdHJpbmdNYWxs
b2Moc2l6ZSk7IFwKLSAgICB9IFwKLSAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2
b2lkKiBwKSBcCi0gICAgeyBcCi0gICAgICAgIDo6V1RGOjpzdHJpbmdGcmVlKHApOyBcCi0gICAg
fSBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgTm90TnVsbFRhZywgdm9pZCogbG9j
YXRpb24pIFwKLSAgICB7IFwKLSAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAotICAgICAgICBy
ZXR1cm4gbG9jYXRpb247IFwKLSAgICB9IFwKLXByaXZhdGU6IFwKLXR5cGVkZWYgaW50IF9fdGhp
c0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KLQotCi1zdHJ1Y3QgU3RyaW5n
TWFsbG9jIHsKLSAgICBzdGF0aWMgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7IHJldHVybiBz
dHJpbmdNYWxsb2Moc2l6ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBz
aXplKSB7IHJldHVybiB0cnlTdHJpbmdNYWxsb2Moc2l6ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCog
cmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gc3RyaW5nUmVhbGxvYyhwLCBz
aXplKTsgfQotICAgIHN0YXRpYyB2b2lkIGZyZWUodm9pZCogcCkgeyBzdHJpbmdGcmVlKHApOyB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpTdHJpbmdNYWxsb2M7Ci11
c2luZyBXVEY6OnN0cmluZ01hbGxvYzsKLXVzaW5nIFdURjo6c3RyaW5nUmVhbGxvYzsKLXVzaW5n
IFdURjo6c3RyaW5nRnJlZTsKLXVzaW5nIFdURjo6dHJ5U3RyaW5nTWFsbG9jOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oCShub25leGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHkgPSAwLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9u
T3ZlcmZsb3csIHNpemVfdCBtaW5DYXBhY2l0eSA9IDE2PiB1c2luZyBTdHJpbmdWZWN0b3IgPSBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIFN0
cmluZ01hbGxvYz47Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlN0cmluZ1Zl
Y3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCShyZXZpc2lvbiAyMzEyNjMpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjAy
LDcgKzIwMiw3IEBAIGlubGluZSBSZWdpc3RlcmVkU3ltYm9sSW1wbCogU3ltYm9sSW1wbDoKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBTeW1ib2xJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3Ry
aW5nSW1wbCB3aWxsIEFTU0VSVAogLy8gaW4gdGhlIGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hl
Y2tDb25zaXN0ZW5jeQotLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBzdHJpbmdNYWxs
b2MuCisvLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuCiAvLyBXZSBk
b24ndCBjdXJyZW50bHkgaGF2ZSBhbnkgd2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKIC8vIHNvIHdl
IGlnbm9yZSB0aGUgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGFsbCBTeW1ib2xJbXBscyouCiB0ZW1w
bGF0ZTw+IHN0cnVjdApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwu
aAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9VbmlxdWVkU3RyaW5n
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAvLyBVbmlxdWVkU3RyaW5nSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRp
Y1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQKIC8vIGluIHRoZSBnZW5lcmljIFZhbHVlQ2hlY2s8VD46
OmNoZWNrQ29uc2lzdGVuY3kKLS8vIGFzIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYnkgc3RyaW5n
TWFsbG9jLgorLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBmYXN0TWFsbG9jLgogLy8g
V2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3QgdGhhdCBjYXNlCiAvLyBz
byB3ZSBpZ25vcmUgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhbGwgVW5pcXVlZFN0cmluZ0lt
cGxzKi4KIHRlbXBsYXRlPD4gc3RydWN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJl
dmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBh
ZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjph
ZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOyB9CiAgICAgc3RhdGljIFN0cmluZyBhZG9wdChTdHJpbmdC
dWZmZXI8VUNoYXI+JiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3Zl
KGJ1ZmZlcikpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBl
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3Ip
IHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodmVjdG9yKSk7IH0KKyAgICBzdGF0
aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3IpIHsgcmV0dXJuIFN0cmluZ0ltcGw6
OmFkb3B0KFdURk1vdmUodmVjdG9yKSk7IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gIW1faW1wbDsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2lt
cGwgfHwgbV9pbXBsLT5pc0VtcHR5KCk7IH0KQEAgLTM2NCw5ICszNjQsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGNsZWFyaW5nIFN0cmluZy1iYXNlZCBjYWNoZXMuCiAg
ICAgdm9pZCBjbGVhckltcGxJZk5vdFNoYXJlZCgpOwogCi0gICAgdm9pZCBhc3NlcnRDYWdlZCgp
IGNvbnN0OwotICAgIHZvaWQgcmVsZWFzZUFzc2VydENhZ2VkKCkgY29uc3Q7Ci0KIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCByZW1vdmVJbnRlcm5h
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIGFwcGVuZEludGVybmFsKENoYXJhY3RlclR5
cGUpOwpAQCAtNTcyLDE4ICs1NjksNiBAQCBpbmxpbmUgdm9pZCBTdHJpbmc6OmNsZWFySW1wbElm
Tm90U2hhcmVkCiAgICAgICAgIG1faW1wbCA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFN0
cmluZzo6YXNzZXJ0Q2FnZWQoKSBjb25zdAotewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+YXNzZXJ0Q2FnZWQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3RyaW5nOjpyZWxlYXNlQXNz
ZXJ0Q2FnZWQoKSBjb25zdAotewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+cmVs
ZWFzZUFzc2VydENhZ2VkKCk7Ci19Ci0KICNpZmRlZiBfX09CSkNfXwogCiBpbmxpbmUgU3RyaW5n
OjpvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5j
cHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMy
Niw3IEBAIHN0YXRpYyBib29sIGRlY29kZUtleShjb25zdCB1aW50OF90KiYgZGEKICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IGxlbmd0aCAqIDIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZm
ZXI7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOwogICAgICAgICBidWZmZXIucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBjaDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0Myw3ICsxOTQzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgc3RyID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihwdHIpLCBsZW5ndGgpOwogICAgICAgICBwdHIgKz0gbGVuZ3RoICogc2l6ZW9mKFVDaGFyKTsK
ICNlbHNlCi0gICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBWZWN0
b3I8VUNoYXI+IGJ1ZmZlcjsKICAgICAgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShsZW5ndGgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgICAgIHVpbnQxNl90IGNoOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAyMzEyNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcgQEAgc3RhdGljIHZvaWQgbm9ybWFs
aXplU3BhY2VzKFN0cmluZyYgdGV4dAogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCB0
ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGNoYXJW
ZWN0b3IodGV4dExlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBjaGFyVmVjdG9yKHRleHRMZW5n
dGgpOwogICAgIFN0cmluZ1ZpZXcodGV4dCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoY2hh
clZlY3Rvci5kYXRhKCkpOwogCiAgICAgY2hhclZlY3RvcltpKytdID0gJyAnOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lv
biAyMzEyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDcgQEAgcHVibGljOgogICAgIFN0cmlu
ZyB0YWtlUmVtYWluaW5nV2hpdGVzcGFjZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1w
dHkoKSk7Ci0gICAgICAgIFN0cmluZ1ZlY3RvcjxMQ2hhciwgOD4gd2hpdGVzcGFjZTsKKyAgICAg
ICAgVmVjdG9yPExDaGFyLCA4PiB3aGl0ZXNwYWNlOwogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBVQ2hhciBjaGFyYWN0ZXIgPSBtX3RleHRbMF07CiAgICAgICAgICAgICBpZiAoaXNIVE1MU3Bh
Y2UoY2hhcmFjdGVyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIGJvb2wgVVJMUGFyc2VyOjpzaG91
bGRDb3B5RmlsZVVSTChDb2RlUG8KICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgq
aXRlcmF0b3IpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlQnl0ZSh1aW50OF90IGJ5
dGUsIFN0cmluZ1ZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRFbmNv
ZGVCeXRlKHVpbnQ4X3QgYnl0ZSwgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZl
ci5hcHBlbmQoJyUnKTsKICAgICBidWZmZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERp
Z2l0KGJ5dGUpKTsKQEAgLTI4MTQsNyArMjgxNCw3IEBAIGF1dG8gVVJMUGFyc2VyOjpwYXJzZVVS
TEVuY29kZWRGb3JtKFN0cmkKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBz
ZXJpYWxpemVVUkxFbmNvZGVkRm9ybShjb25zdCBTdHJpbmcmIGlucHV0LCBTdHJpbmdWZWN0b3I8
TENoYXI+JiBvdXRwdXQpCitzdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNvZGVkRm9ybShjb25z
dCBTdHJpbmcmIGlucHV0LCBWZWN0b3I8TENoYXI+JiBvdXRwdXQpCiB7CiAgICAgYXV0byB1dGY4
ID0gaW5wdXQudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICBjb25zdCBjaGFyKiBkYXRhID0g
dXRmOC5kYXRhKCk7CkBAIC0yODQwLDcgKzI4NDAsNyBAQCBTdHJpbmcgVVJMUGFyc2VyOjpzZXJp
YWxpemUoY29uc3QgVVJMRW5jCiAgICAgaWYgKHR1cGxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+IG91dHB1dDsKKyAgICBWZWN0b3I8
TENoYXI+IG91dHB1dDsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogdHVwbGVzKSB7CiAgICAgICAg
IGlmICghb3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyYnKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMzEyNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90
PiBkZWZhdWx0UG9ydEZvclByb3RvY29sKFN0cmluZ1ZpZXcpOwogCiAgICAgVVJMIG1fdXJsOwot
ICAgIFN0cmluZ1ZlY3RvcjxMQ2hhcj4gbV9hc2NpaUJ1ZmZlcjsKKyAgICBWZWN0b3I8TENoYXI+
IG1fYXNjaWlCdWZmZXI7CiAgICAgYm9vbCBtX3VybElzU3BlY2lhbCB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX3VybElzRmlsZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQZXJjZW50T3JO
b25BU0NJSSB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb3VyQ0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvdXJDQy5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvdXJDQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
c3RkOjpvcHRpb25hbDxGb3VyQ0M+IEZvdXJDQzo6ZnJvbVN0cmluZwogCiBTdHJpbmcgRm91ckND
Ojp0b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5nVmVjdG9yPExDaGFyLCA0PiBkYXRhID0g
eworICAgIFZlY3RvcjxMQ2hhciwgND4gZGF0YSA9IHsKICAgICAgICAgTENoYXIodmFsdWUgPj4g
MjQpLAogICAgICAgICBMQ2hhcigodmFsdWUgPj4gMTYpICYgMHhGRiksCiAgICAgICAgIExDaGFy
KCh2YWx1ZSA+PiA4KSAmIDB4RkYpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMzEy
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ3LDcgKzI3NDcsNyBAQCBHcmFwaGljc0xheWVy
Q0E6OkNsb25lSUQgR3JhcGhpY3NMYXllckNBCiAgICAgY29uc3Qgc2l6ZV90IGJpdHNQZXJVQ2hh
ciA9IHNpemVvZihVQ2hhcikgKiA4OwogICAgIHNpemVfdCB2ZWN0b3JTaXplID0gKGRlcHRoICsg
Yml0c1BlclVDaGFyIC0gMSkgLyBiaXRzUGVyVUNoYXI7CiAgICAgCi0gICAgU3RyaW5nVmVjdG9y
PFVDaGFyPiByZXN1bHQodmVjdG9yU2l6ZSk7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQodmVj
dG9yU2l6ZSk7CiAgICAgcmVzdWx0LmZpbGwoMCk7CiAKICAgICAvLyBDcmVhdGUgYSBzdHJpbmcg
ZnJvbSB0aGUgYml0IHNlcXVlbmNlIHdoaWNoIHdlIGNhbiB1c2UgdG8gaWRlbnRpZnkgdGhlIGNs
b25lLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJ
Q1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIFN0cmluZyBMb2NhbGVJQ1U6
OmRlY2ltYWxTeW1ib2woVU51bWJlckYKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykgfHwg
c3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0
YXR1cykgJiYgc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3Ro
KTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwogICAgIHN0YXR1cyA9
IFVfWkVST19FUlJPUjsKICAgICB1bnVtX2dldFN5bWJvbChtX251bWJlckZvcm1hdCwgc3ltYm9s
LCBidWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxV
UkUoc3RhdHVzKSkKQEAgLTg4LDcgKzg4LDcgQEAgU3RyaW5nIExvY2FsZUlDVTo6ZGVjaW1hbFRl
eHRBdHRyaWJ1dGUoVQogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0g
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBz
dGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOworICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwogICAgIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZShtX251bWJlckZvcm1hdCwgdGFnLCBidWZm
ZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Mo
c3RhdHVzKSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRlRm9ybWF0
UGF0dGVybihjb25zdAogICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF90b1BhdHRlcm4oZGF0ZUZv
cm1hdCwgVFJVRSwgMCwgMCwgJnN0YXR1cyk7CiAgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9P
VkVSRkxPV19FUlJPUiB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgIFZlY3RvcjxVQ2hh
cj4gYnVmZmVyKGxlbmd0aCk7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIHVkYXRf
dG9QYXR0ZXJuKGRhdGVGb3JtYXQsIFRSVUUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1
cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQpAQCAtMTc1LDcgKzE3NSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5nPj4gTG9jYWxlSUMKICAgICAgICAgaW50MzJfdCBsZW5n
dGggPSB1ZGF0X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAs
IDAsICZzdGF0dXMpOwogICAgICAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VS
Uk9SKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFN0cmluZz4+
KCk7Ci0gICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAg
IFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CiAgICAgICAgIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKICAgICAgICAgdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5k
ZXggKyBpLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgICAgICBpZiAoVV9G
QUlMVVJFKHN0YXR1cykpCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIFN0cmluZyBnZXRGb3Jt
YXRGb3JTa2VsZXRvbihjb25zdAogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQz
Ml90IGxlbmd0aCA9IHVkYXRwZ19nZXRCZXN0UGF0dGVybihwYXR0ZXJuR2VuZXJhdG9yLCBza2Vs
ZXRvbiwgc2tlbGV0b25MZW5ndGgsIDAsIDAsICZzdGF0dXMpOwogICAgIGlmIChzdGF0dXMgPT0g
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgJiYgbGVuZ3RoKSB7Ci0gICAgICAgIFN0cmluZ1ZlY3Rv
cjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxl
bmd0aCk7CiAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgdWRhdHBnX2dl
dEJlc3RQYXR0ZXJuKHBhdHRlcm5HZW5lcmF0b3IsIHNrZWxldG9uLCBza2VsZXRvbkxlbmd0aCwg
YnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKICAgICAgICAgaWYgKFVfU1VDQ0VTUyhz
dGF0dXMpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVt
V2luLmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgc3Rh
dGljIFN0cmluZyBnZXRGaW5hbFBhdGhOYW1lKGNvbnN0IFN0cgogICAgIGlmICghaXNIYW5kbGVW
YWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJpbmdWZWN0
b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFY
X1BBVEgpOwogICAgIGlmICg6OkdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaGFuZGxlLCBidWZm
ZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCBWT0xVTUVfTkFNRV9OVCkgPj0gTUFYX1BBVEgpIHsK
ICAgICAgICAgY2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAg
LTI1MCw3ICsyNTAsNyBAQCBib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29u
CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZl
cihNQVhfUEFUSCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwogCiAgICAg
aWYgKHBhdGgubGVuZ3RoKCkgKyAxID4gYnVmZmVyLnNpemUoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwpAQCAtMzQ5LDcgKzM0OSw3IEBAIHN0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCiAK
IHN0YXRpYyBTdHJpbmcgc3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIHsK
LSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CisgICAgVmVjdG9yPFVD
aGFyPiBidWZmZXIoTUFYX1BBVEgpOwogICAgIGlmIChGQUlMRUQoU0hHZXRGb2xkZXJQYXRoVygw
LCBwYXRoSWRlbnRpZmllciB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBidWZmZXIuZGF0YSgp
KSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBidWZmZXIucmVzaXplKHdjc2xlbihi
dWZmZXIuZGF0YSgpKSk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCShyZXZpc2lv
biAyMzEyNjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDI0ICszNiwyMCBAQAogI2lmIEJDUFUoQVJNNjQpCiAjZGVmaW5lIFBSSU1J
VElWRV9HSUdBQ0FHRV9TSVpFIDB4ODAwMDAwMDBsbHUKICNkZWZpbmUgSlNWQUxVRV9HSUdBQ0FH
RV9TSVpFIDB4NDAwMDAwMDBsbHUKLSNkZWZpbmUgU1RSSU5HX0dJR0FDQUdFX1NJWkUgMHg0MDAw
MDAwMGxsdQogI2RlZmluZSBHSUdBQ0FHRV9BTExPQ0FUSU9OX0NBTl9GQUlMIDEKICNlbHNlCiAj
ZGVmaW5lIFBSSU1JVElWRV9HSUdBQ0FHRV9TSVpFIDB4ODAwMDAwMDAwbGx1CiAjZGVmaW5lIEpT
VkFMVUVfR0lHQUNBR0VfU0laRSAweDQwMDAwMDAwMGxsdQotI2RlZmluZSBTVFJJTkdfR0lHQUNB
R0VfU0laRSAweDQwMDAwMDAwMGxsdQogI2RlZmluZSBHSUdBQ0FHRV9BTExPQ0FUSU9OX0NBTl9G
QUlMIDAKICNlbmRpZgogCiBzdGF0aWNfYXNzZXJ0KGJtYWxsb2M6OmlzUG93ZXJPZlR3byhQUklN
SVRJVkVfR0lHQUNBR0VfU0laRSksICIiKTsKIHN0YXRpY19hc3NlcnQoYm1hbGxvYzo6aXNQb3dl
ck9mVHdvKEpTVkFMVUVfR0lHQUNBR0VfU0laRSksICIiKTsKLXN0YXRpY19hc3NlcnQoYm1hbGxv
Yzo6aXNQb3dlck9mVHdvKFNUUklOR19HSUdBQ0FHRV9TSVpFKSwgIiIpOwogCiAjZGVmaW5lIEdJ
R0FDQUdFX1NJWkVfVE9fTUFTSyhzaXplKSAoKHNpemUpIC0gMSkKIAogI2RlZmluZSBQUklNSVRJ
VkVfR0lHQUNBR0VfTUFTSyBHSUdBQ0FHRV9TSVpFX1RPX01BU0soUFJJTUlUSVZFX0dJR0FDQUdF
X1NJWkUpCiAjZGVmaW5lIEpTVkFMVUVfR0lHQUNBR0VfTUFTSyBHSUdBQ0FHRV9TSVpFX1RPX01B
U0soSlNWQUxVRV9HSUdBQ0FHRV9TSVpFKQotI2RlZmluZSBTVFJJTkdfR0lHQUNBR0VfTUFTSyBH
SUdBQ0FHRV9TSVpFX1RPX01BU0soU1RSSU5HX0dJR0FDQUdFX1NJWkUpCiAKICNpZiAoKEJPUyhE
QVJXSU4pIHx8IEJPUyhMSU5VWCkpICYmIFwKICAgICAoQkNQVShYODZfNjQpIHx8IChCQ1BVKEFS
TTY0KSAmJiAhZGVmaW5lZChfX0lMUDMyX18pICYmICghQlBMQVRGT1JNKElPUykgfHwgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMzAwKSkpKQpAQCAtNzgsMTYgKzc0LDE0
IEBAIEJJTkxJTkUgYm9vbCB3YXNFbmFibGVkKCkgeyByZXR1cm4gZ193YXMKIHN0cnVjdCBCYXNl
UHRycyB7CiAgICAgdm9pZCogcHJpbWl0aXZlOwogICAgIHZvaWQqIGpzVmFsdWU7Ci0gICAgdm9p
ZCogc3RyaW5nOwogfTsKIAogZW51bSBLaW5kIHsKICAgICBQcmltaXRpdmUsCiAgICAgSlNWYWx1
ZSwKLSAgICBTdHJpbmcKIH07CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtS2luZHMg
PSAzOworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1LaW5kcyA9IDI7CiAKIEJFWFBPUlQg
dm9pZCBlbnN1cmVHaWdhY2FnZSgpOwogCkBAIC0xMTAsOCArMTA0LDYgQEAgQklOTElORSBjb25z
dCBjaGFyKiBuYW1lKEtpbmQga2luZCkKICAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOwogICAg
IGNhc2UgSlNWYWx1ZToKICAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKLSAgICBjYXNlIFN0cmlu
ZzoKLSAgICAgICAgcmV0dXJuICJTdHJpbmciOwogICAgIH0KICAgICBCQ1JBU0goKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTEyNCw4ICsxMTYsNiBAQCBCSU5MSU5FIHZvaWQqJiBiYXNlUHRy
KEJhc2VQdHJzJiBiYXNlUHRyCiAgICAgICAgIHJldHVybiBiYXNlUHRycy5wcmltaXRpdmU7CiAg
ICAgY2FzZSBKU1ZhbHVlOgogICAgICAgICByZXR1cm4gYmFzZVB0cnMuanNWYWx1ZTsKLSAgICBj
YXNlIFN0cmluZzoKLSAgICAgICAgcmV0dXJuIGJhc2VQdHJzLnN0cmluZzsKICAgICB9CiAgICAg
QkNSQVNIKCk7CiAgICAgcmV0dXJuIGJhc2VQdHJzLnByaW1pdGl2ZTsKQEAgLTE1Myw4ICsxNDMs
NiBAQCBCSU5MSU5FIHNpemVfdCBzaXplKEtpbmQga2luZCkKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4oUFJJTUlUSVZFX0dJR0FDQUdFX1NJWkUpOwogICAgIGNhc2UgSlNWYWx1
ZToKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oSlNWQUxVRV9HSUdBQ0FHRV9T
SVpFKTsKLSAgICBjYXNlIFN0cmluZzoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4oU1RSSU5HX0dJR0FDQUdFX1NJWkUpOwogICAgIH0KICAgICBCQ1JBU0goKTsKICAgICByZXR1
cm4gMDsKQEAgLTE3NSw3ICsxNjMsNiBAQCB2b2lkIGZvckVhY2hLaW5kKGNvbnN0IEZ1bmMmIGZ1
bmMpCiB7CiAgICAgZnVuYyhQcmltaXRpdmUpOwogICAgIGZ1bmMoSlNWYWx1ZSk7Ci0gICAgZnVu
YyhTdHJpbmcpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcEtpbmQuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTAgQEAgbmFtZXNwYWNl
IGJtYWxsb2MgewogZW51bSBjbGFzcyBIZWFwS2luZCB7CiAgICAgUHJpbWFyeSwKICAgICBQcmlt
aXRpdmVHaWdhY2FnZSwKLSAgICBKU1ZhbHVlR2lnYWNhZ2UsCi0gICAgU3RyaW5nR2lnYWNhZ2UK
KyAgICBKU1ZhbHVlR2lnYWNhZ2UKIH07CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVt
SGVhcHMgPSA0Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDM7CiAKIEJJ
TkxJTkUgYm9vbCBpc0dpZ2FjYWdlKEhlYXBLaW5kIGhlYXBLaW5kKQogewpAQCAtNDcsNyArNDYs
NiBAQCBCSU5MSU5FIGJvb2wgaXNHaWdhY2FnZShIZWFwS2luZCBoZWFwS2luCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBjYXNlIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZToKICAgICBj
YXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6Ci0gICAgY2FzZSBIZWFwS2luZDo6U3RyaW5n
R2lnYWNhZ2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBCQ1JBU0goKTsKQEAg
LTY0LDggKzYyLDYgQEAgQklOTElORSBHaWdhY2FnZTo6S2luZCBnaWdhY2FnZUtpbmQoSGVhcAog
ICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsKICAgICBjYXNlIEhlYXBLaW5kOjpK
U1ZhbHVlR2lnYWNhZ2U6CiAgICAgICAgIHJldHVybiBHaWdhY2FnZTo6SlNWYWx1ZTsKLSAgICBj
YXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZToKLSAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpT
dHJpbmc7CiAgICAgfQogICAgIEJDUkFTSCgpOwogICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0
aXZlOwpAQCAtNzgsOCArNzQsNiBAQCBCSU5MSU5FIEhlYXBLaW5kIGhlYXBLaW5kKEdpZ2FjYWdl
OjpLaW5kCiAgICAgICAgIHJldHVybiBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U7CiAgICAg
Y2FzZSBHaWdhY2FnZTo6SlNWYWx1ZToKICAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpKU1ZhbHVl
R2lnYWNhZ2U7Ci0gICAgY2FzZSBHaWdhY2FnZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gSGVh
cEtpbmQ6OlN0cmluZ0dpZ2FjYWdlOwogICAgIH0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4g
SGVhcEtpbmQ6OlByaW1hcnk7CkBAIC05MCw3ICs4NCw2IEBAIEJJTkxJTkUgYm9vbCBpc0FjdGl2
ZUhlYXBLaW5kQWZ0ZXJFbnN1cmkKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIEhlYXBL
aW5kOjpQcmltaXRpdmVHaWdhY2FnZToKICAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNh
Z2U6Ci0gICAgY2FzZSBIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2U6CiAgICAgICAgIGlmIChHaWdh
Y2FnZTo6d2FzRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTEwNiw3ICs5OSw2IEBAIEJJTkxJTkUgSGVhcEtpbmQgbWFwVG9BY3Rp
dmVIZWFwS2luZEFmdGUKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIEhlYXBLaW5kOjpQ
cmltaXRpdmVHaWdhY2FnZToKICAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6Ci0g
ICAgY2FzZSBIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2U6CiAgICAgICAgIGlmIChHaWdhY2FnZTo6
d2FzRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGtpbmQ7CiAgICAgICAgIHJldHVybiBI
ZWFwS2luZDo6UHJpbWFyeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339437</attachid>
            <date>2018-05-03 12:08:34 -0700</date>
            <delta_ts>2018-05-03 14:23:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99596</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQu
Y3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAg
KiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNv
bHZlUm9wZVRvQXRvbWljU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpyZXNvbHZlUm9wZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNy
ZWF0ZUhhc090aGVyT3duZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpT
Qzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorCiAyMDE4LTA1LTAxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHNob3VsZCBiZSBhYmxlIHRvIGNh
Y2hlIGN1c3RvbSBzZXR0ZXIgY2FsbHMgb24gdGhlIHByb3RvdHlwZSBjaGFpbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjMxMjYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExp
bWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJQ
YXJzZUludC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWZWN0b3IuaD4KIAogI2RlZmluZSBTVEFUSUNfQVNTRVJUKGNvbmQpIHN0YXRpY19hc3NlcnQo
Y29uZCwgIkpTQmlnSW50IGFzc3VtZXMgIiAjY29uZCkKIApAQCAtNTU4LDkgKzU1Nyw5IEBAIHVp
bnQ2NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmEKIAogU3RyaW5nIEpTQmlnSW50
Ojp0b1N0cmluZ0dlbmVyaWMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNCaWdJbnQqIHgsIGludCByYWRp
eCkKIHsKLSAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2FnZSBvZiBTdHJpbmdWZWN0b3Ig
aW50byBKU0JpZ0ludDo6dG9TdHJpbmcKKyAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2Fn
ZSBvZiBWZWN0b3IgaW50byBKU0JpZ0ludDo6dG9TdHJpbmcKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjcKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+
IHJlc3VsdFN0cmluZzsKKyAgICBWZWN0b3I8TENoYXI+IHJlc3VsdFN0cmluZzsKIAogICAgIEFT
U0VSVChyYWRpeCA+PSAyICYmIHJhZGl4IDw9IDM2KTsKICAgICBBU1NFUlQoIXgtPmlzWmVybygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJl
dmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDM0ICsxNzgsMzAgQEAgdm9pZCBKU1JvcGVTdHJp
bmc6OnJlc29sdmVSb3BlSW50ZXJuYWwxNgogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJv
cGVUb0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgWyZdICgpIHsK
LSAgICAgICAgaWYgKGxlbmd0aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKLSAg
ICAgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgbV92YWx1ZSA9IEF0b21p
Y1N0cmluZyhtX3ZhbHVlKTsKLSAgICAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+
aXM4Qml0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGxlbmd0
aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKKyAgICAgICAgcmVzb2x2ZVJvcGUo
ZXhlYyk7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1ZSk7CisgICAgICAg
IHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICAgICAgTENoYXIgYnVmZmVy
W21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKLSAgICAgICAgICAgIHJlc29sdmVSb3BlSW50
ZXJuYWw4KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZl
ciwgbGVuZ3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhC
aXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJbbWF4TGVu
Z3RoRm9yT25TdGFja1Jlc29sdmVdOwotICAgICAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2
KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwgbGVu
Z3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7
Ci0gICAgICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIgYnVmZmVyW21h
eExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDgo
YnVmZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmluZyhidWZmZXIsIGxlbmd0aCgp
KTsKKyAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgVUNoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsK
KyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7CisgICAgICAgIG1fdmFsdWUg
PSBBdG9taWNTdHJpbmcoYnVmZmVyLCBsZW5ndGgoKSk7CisgICAgICAgIHNldElzOEJpdChtX3Zh
bHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgIH0KIAotICAgICAgICBjbGVhckZpYmVycygpOwor
ICAgIGNsZWFyRmliZXJzKCk7CiAKLSAgICAgICAgLy8gSWYgd2UgcmVzb2x2ZWQgYSBzdHJpbmcg
dGhhdCBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgbm90aWZ5IHRoZSBoZWFwIHRoYXQgd2UndmUg
Z3Jvd24uCi0gICAgICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVl
LmltcGwoKS0+Y29zdCgpKTsKLSAgICB9KCk7Ci0gICAgCi0gICAgbV92YWx1ZS5yZWxlYXNlQXNz
ZXJ0Q2FnZWQoKTsKKyAgICAvLyBJZiB3ZSByZXNvbHZlZCBhIHN0cmluZyB0aGF0IGRpZG4ndCBw
cmV2aW91c2x5IGV4aXN0LCBub3RpZnkgdGhlIGhlYXAgdGhhdCB3ZSd2ZSBncm93bi4KKyAgICBp
ZiAobV92YWx1ZS5pbXBsKCktPmhhc09uZVJlZigpKQorICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmltcGwoKS0+Y29zdCgpKTsKIH0K
IAogdm9pZCBKU1JvcGVTdHJpbmc6OmNsZWFyRmliZXJzKCkgY29uc3QKQEAgLTI1MiwzMiArMjQ4
LDE3IEBAIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBKU1JvcGVTdHJpbmc6OnIKIAogdm9pZCBK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBb
Jl0gKCkgewotICAgICAgICBBU1NFUlQoaXNSb3BlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KGlzU3Vic3RyaW5nKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc3Vic3RyaW5nQmFzZSgpLT5p
c1JvcGUoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gc3Vic3RyaW5nQmFzZSgpLT5tX3ZhbHVl
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBzdWJzdHJpbmdCYXNlKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBM
Q2hhciogYnVmZmVyOwotICAgICAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBs
LT5jb3N0KCkpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNv
bHZlUm9wZUludGVybmFsOE5vU3Vic3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgICAgICBjbGVhckZp
YmVycygpOwotICAgICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgQVNT
RVJUKGlzUm9wZSgpKTsKKyAgICAKKyAgICBpZiAoaXNTdWJzdHJpbmcoKSkgeworICAgICAgICBB
U1NFUlQoIXN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOworICAgICAgICBtX3ZhbHVlID0gc3Vi
c3RyaW5nQmFzZSgpLT5tX3ZhbHVlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNl
dCgpLCBsZW5ndGgoKSk7CisgICAgICAgIHN1YnN0cmluZ0Jhc2UoKS5jbGVhcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBMQ2hh
ciogYnVmZmVyOwogICAgICAgICBpZiAoYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSwgYnVmZmVyKSkgewogICAgICAgICAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsK
ICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwpAQCAtMjg1LDEzICsyNjYs
MjQgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZQogICAgICAgICAg
ICAgb3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7
CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoYnVmZmVyKTsKICAgICAg
ICAgY2xlYXJGaWJlcnMoKTsKICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgfSgpOwot
Ci0gICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0Q2FnZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBVQ2hhciogYnVmZmVyOworICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpLCBidWZmZXIpKSB7CisgICAg
ICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwt
PmNvc3QoKSk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7CisgICAg
Y2xlYXJGaWJlcnMoKTsKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIAogLy8gT3ZlcnZpZXc6
IFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5n
IGluIHJvcGUgZm9ybQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHJvdGVjdGVkOgog
cHVibGljOgogICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgUmVmPFN0cmluZ0lt
cGw+JiYgdmFsdWUpCiAgICAgewotICAgICAgICB2YWx1ZS0+YXNzZXJ0Q2FnZWQoKTsKICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBzaXplX3QgY29z
dCA9IHZhbHVlLT5jb3N0KCk7CiAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCBXVEZN
b3ZlKHZhbHVlKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0
aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoVk0mIHZtLCBSZWY8U3RyaW5nSW1wbD4m
JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHZhbHVlLT5hc3NlcnRDYWdlZCgpOwogICAgICAgICBz
aXplX3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBKU1N0cmluZyogbmV3U3Ry
aW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0
cmluZyh2bSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0
aW9uKHZtLCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzAsOCArMzMwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6
OkpTVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2U7Ci0gICAgICAgIGNhc2UgR2lnYWNhZ2U6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIzMTI2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTM3IEBACisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0RlcXVlLmg6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvR2lnYWNhZ2UuaDoKKyAgICAg
ICAgKEdpZ2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdlOjpiYXNlUHRyKToKKyAgICAg
ICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlckJhc2U6OmFsbG9j
YXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6dHJ5QWxsb2NhdGVC
dWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXJCYXNlOjpyZWFsbG9jYXRlQnVmZmVy
KToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6Cisg
ICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OmZpbmRNYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNh
cGFjaXR5Pjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6cmV2ZXJz
ZUZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFwcGVuZElmTm90Q29u
dGFpbnMpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmZpbGwpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OmFwcGVuZFJhbmdlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5k
Q2FwYWNpdHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlc2l6ZSk6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6cmVzaXplVG9GaXQpOgorICAgICAgICAoV1RGOjptaW5DYXBh
Y2l0eT46OnNocmluayk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6Z3Jvdyk6CisgICAg
ICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8pOgorICAg
ICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkp
OgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAg
ICAoV1RGOjptaW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
Om1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6c2hyaW5rQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46
OmFwcGVuZCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5QXBwZW5kKToKKyAgICAg
ICAgKFdURjo6bWluQ2FwYWNpdHk+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZCk6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46
OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
Ojp0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFj
aXR5Pjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjphcHBl
bmRWZWN0b3IpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46Omluc2VydCk6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVjdG9yKToKKyAgICAgICAgKFdURjo6bWluQ2Fw
YWNpdHk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlbW92ZUZpcnN0
KToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKToKKyAg
ICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVBbGwpOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
OjpyZXZlcnNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjptYXAgY29uc3QpOgorICAg
ICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV1RGOjpt
aW5DYXBhY2l0eT46OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV1RGOjpyZW1vdmVSZXBlYXRlZEVsZW1lbnRzKToKKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y29udGFpbnMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kTWF0Y2hpbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmV2ZXJzZUZpbmQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpNYWxsb2M+OjphcHBlbmRJZk5vdENvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6ZmlsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46
OmFwcGVuZFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6ZXhwYW5kQ2Fw
YWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0
eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZVRvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Z3Jv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5TZXRJbml0aWFsQnVmZmVy
U2l6ZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXNhblNldEJ1ZmZlclNp
emVUb0Z1bGxDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6
cmVzZXJ2ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5UmVz
ZXJ2ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnNocmlua0Nh
cGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBwZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5QXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6TWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxs
b2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ok1hbGxvYz46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6dW5jaGVja2VkQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6YXBwZW5kVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6aW5zZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5zZXJ0VmVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlRmlyc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYWxsb2M+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6cmVtb3ZlQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVt
b3ZlQWxsTWF0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpyZXZlcnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6bWFwIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVsZWFzZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNw
cDoKKyAgICAgICAgKFdURjo6Q1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6Cisg
ICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWZmZXI6OlN0cmluZ0J1ZmZlcik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1ZmZlcjo6flN0cmluZ0J1ZmZlcik6CisgICAgICAgIChXVEY6OlN0
cmluZ0J1ZmZlcjo6cmVzaXplKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZEludGVybmFsTm9uRW1wdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWxlYXNlQXNz
ZXJ0Q2FnZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
Ojphc3NlcnRDYWdlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
TWFsbG9jLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdNYWxsb2MuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWZWN0b3IuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQvVW5pcXVl
ZFN0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAg
KFdURjo6U3RyaW5nOjphZG9wdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6YXNzZXJ0Q2FnZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmc6OnJlbGVhc2VBc3NlcnRDYWdl
ZCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTgtMDUtMDIgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIEZvbGxvdy11cCBidWlsZCBmaXggZm9yIHIyMzEyMjMK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTBGMEY1MjZC
MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0
cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9i
YWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsK
IAkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNE
OEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CkBAIC0xNzgsOCArMTc3LDYgQEAKIAkJMDc3
Q0Q4NkExRkQ5Q0ZEMjAwODI4NTg3IC8qIExvZ2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2dnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc3Q0Q4
NkIxRkQ5Q0ZEMzAwODI4NTg3IC8qIExvZ2dlckhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2dnZXJIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRjUyNjkxRjQyMUZGODAw
NEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdNYWxs
b2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGNTI2QTFGNDIxRkY4MDA0
QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ01hbGxvYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyog
TG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxn
b3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTYwMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVF
M0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
ZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1LDcgKzE5Miw2
IEBACiAJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFz
aFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBDQjU5MUZDREYxMzMw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29yaXRobUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1ZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZC
NiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXV0b21hdGljVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA1LDEw
ICsxMjAxLDcgQEAKIAkJCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVy
LmggKi8sCiAJCQkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwICov
LAogCQkJCUE4QTQ3MzI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmggKi8sCi0JCQkJ
MEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8sCi0JCQkJMEYw
RjUyNkExRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5oICovLAogCQkJCUE4QTQ3MzJB
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKLQkJCQkwRjM0OEM3RDFG
NDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8sCiAJCQkJOTNGMTk5M0QxOUQ3OTU4
RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAogCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMw
MTI2RiAvKiBTdHJpbmdWaWV3LmggKi8sCiAJCQkJRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8q
IFN5bWJvbEltcGwuY3BwICovLApAQCAtMTUzMyw3ICsxNTI2LDYgQEAKIAkJCQlBNUJBMTVGQzE4
MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJpbmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAv
KiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYxNjkwMEQw
RDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT47CiAKLSAgICB0eXBlZGVmIFZlY3RvckJ1
ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgRmFzdE1hbGxvYz4gQnVmZmVyOworICAgIHR5cGVkZWYg
VmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCdWZmZXI7CiAgICAgdHlwZWRlZiBWZWN0
b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsKICAgICB0eXBlZGVmIERlcXVlSXRl
cmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvckJhc2U7CiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1
bHRIYXNoIHsgCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBWYXJpYW50OwotdGVtcGxhdGU8dHlwZW5hbWUsIHNpemVf
dCA9IDAsIHR5cGVuYW1lID0gQ3Jhc2hPbk92ZXJmbG93LCBzaXplX3QgPSAxNiwgdHlwZW5hbWUg
PSBGYXN0TWFsbG9jPiBjbGFzcyBWZWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSwgc2l6ZV90ID0g
MCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCA9IDE2PiBjbGFzcyBWZWN0b3I7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFz
aDxWYWx1ZT46Okhhc2gsIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZT4+IGNsYXNzIEhhc2hD
b3VudGVkU2V0OwogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5QXJnPjo6SGFzaCwgdHlwZW5hbWUg
PSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PiBj
bGFzcyBIYXNoTWFwOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgRGVmYXVsdEhhc2g8VmFsdWVBcmc+OjpIYXNoLCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8
VmFsdWVBcmc+PiBjbGFzcyBIYXNoU2V0OwpJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMzEy
NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEzICs0
MiwxMSBAQCBuYW1lc3BhY2UgR2lnYWNhZ2Ugewogc3RydWN0IEJhc2VQdHJzIHsKICAgICB2b2lk
KiBwcmltaXRpdmU7CiAgICAgdm9pZCoganNWYWx1ZTsKLSAgICB2b2lkKiBzdHJpbmc7CiB9Owog
CiBlbnVtIEtpbmQgewogICAgIFByaW1pdGl2ZSwKICAgICBKU1ZhbHVlLAotICAgIFN0cmluZwog
fTsKIAogaW5saW5lIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKSB7IH0KQEAgLTcxLDggKzY5LDYgQEAg
QUxXQVlTX0lOTElORSBjb25zdCBjaGFyKiBuYW1lKEtpbmQga2luZAogICAgICAgICByZXR1cm4g
IlByaW1pdGl2ZSI7CiAgICAgY2FzZSBKU1ZhbHVlOgogICAgICAgICByZXR1cm4gIkpTVmFsdWUi
OwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gIlN0cmluZyI7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC04
NSw4ICs4MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZComIGJhc2VQdHIoQmFzZVB0cnMmIGIKICAg
ICAgICAgcmV0dXJuIGJhc2VQdHJzLnByaW1pdGl2ZTsKICAgICBjYXNlIEpTVmFsdWU6CiAgICAg
ICAgIHJldHVybiBiYXNlUHRycy5qc1ZhbHVlOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICBy
ZXR1cm4gYmFzZVB0cnMuc3RyaW5nOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBiYXNlUHRycy5wcmltaXRpdmU7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2
aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3Niw3ICsyNzYsNyBAQCBzdHJ1Y3QgVmVjdG9yVHlwZU9wZXJhdGlvbnMKICAgICB9CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogY2xhc3MgVmVjdG9yQnVmZmVyQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVmVjdG9yQnVmZmVyQmFzZSk7CiBwdWJsaWM6CkBAIC0yODcsNyArMjg3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgc2l6ZV90IHNpemVUb0FsbG9jYXRlID0g
bmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxv
Y2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFs
bG9jOjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNf
Y2FzdDxUKj4oZmFzdE1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwogICAgIH0KIAogICAgIGJvb2wg
dHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQpAQCAtMjk3LDEyICsyOTcsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHNpemVfdCBz
aXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpOwotICAgICAgICBUKiBuZXdC
dWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjp0cnlNYWxsb2Moc2l6ZVRvQWxsb2NhdGUp
KTsKLSAgICAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAg
bV9idWZmZXIgPSBuZXdCdWZmZXI7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBUKiBu
ZXdCdWZmZXI7CisgICAgICAgIGlmICh0cnlGYXN0TWFsbG9jKHNpemVUb0FsbG9jYXRlKS5nZXRW
YWx1ZShuZXdCdWZmZXIpKSB7CisgICAgICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2Nh
dGUgLyBzaXplb2YoVCk7CisgICAgICAgICAgICBtX2J1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICBib29sIHNob3VsZFJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5
KSBjb25zdApAQCAtMzE3LDcgKzMxOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIENSQVNIKCk7
CiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQp
OwogICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCk7Ci0gICAg
ICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxvYzo6cmVhbGxvYyhtX2J1ZmZlciwg
c2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oZmFz
dFJlYWxsb2MobV9idWZmZXIsIHNpemVUb0FsbG9jYXRlKSk7CiAgICAgfQogCiAgICAgdm9pZCBk
ZWFsbG9jYXRlQnVmZmVyKFQqIGJ1ZmZlclRvRGVhbGxvY2F0ZSkKQEAgLTMzMCw3ICszMzEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gMDsKICAgICAgICAgfQogCi0gICAg
ICAgIE1hbGxvYzo6ZnJlZShidWZmZXJUb0RlYWxsb2NhdGUpOworICAgICAgICBmYXN0RnJlZShi
dWZmZXJUb0RlYWxsb2NhdGUpOwogICAgIH0KIAogICAgIFQqIGJ1ZmZlcigpIHsgcmV0dXJuIG1f
YnVmZmVyOyB9CkBAIC0zNzEsMTMgKzM3MiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQg
bV9zaXplOyAvLyBPbmx5IHVzZWQgYnkgdGhlIFZlY3RvciBzdWJjbGFzcywgYnV0IHBsYWNlZCBo
ZXJlIHRvIGF2b2lkIHBhZGRpbmcgdGhlIHN0cnVjdC4KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogY2xhc3MgVmVjdG9yQnVmZmVyOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNYWxsb2M+Ci1jbGFzcyBWZWN0b3JCdWZmZXI8
VCwgMCwgTWFsbG9jPiA6IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxULCBNYWxsb2M+IHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBWZWN0b3JCdWZmZXI8VCwgMD4gOiBwcml2YXRlIFZl
Y3RvckJ1ZmZlckJhc2U8VD4gewogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlckJh
c2U8VCwgTWFsbG9jPiBCYXNlOworICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyQmFzZTxUPiBCYXNl
OwogcHVibGljOgogICAgIFZlY3RvckJ1ZmZlcigpCiAgICAgewpAQCAtMzk3LDcgKzM5OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXIoKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXI8VCwgMCwgTWFsbG9jPiYgb3RoZXIsIHNpemVf
dCwgc2l6ZV90KQorICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXI8VCwgMD4mIG90aGVyLCBzaXpl
X3QsIHNpemVfdCkKICAgICB7CiAgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlciwgb3RoZXIubV9i
dWZmZXIpOwogICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7
CkBAIC00MzIsMTEgKzQzMywxMSBAQCBwcml2YXRlOgogICAgIHVzaW5nIEJhc2U6Om1fY2FwYWNp
dHk7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE1hbGxvYz4KLWNsYXNzIFZlY3RvckJ1ZmZlciA6IHByaXZhdGUgVmVjdG9yQnVmZmVy
QmFzZTxULCBNYWxsb2M+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KK2NsYXNzIFZlY3RvckJ1ZmZlciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxUPiB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVjdG9yQnVmZmVyKTsKIHByaXZhdGU6Ci0gICAg
dHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQsIE1hbGxvYz4gQmFzZTsKKyAgICB0eXBlZGVmIFZl
Y3RvckJ1ZmZlckJhc2U8VD4gQmFzZTsKIHB1YmxpYzoKICAgICBWZWN0b3JCdWZmZXIoKQogICAg
ICAgICA6IEJhc2UoaW5saW5lQnVmZmVyKCksIGlubGluZUNhcGFjaXR5LCAwKQpAQCAtNTk4LDEx
ICs1OTksMTEgQEAgc3RydWN0IFVuc2FmZVZlY3Rvck92ZXJmbG93IHsKIH07CiAKIC8vIFRlbXBs
YXRlIGRlZmF1bHQgdmFsdWVzIGFyZSBpbiBGb3J3YXJkLmguCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1jbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZl
Y3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgTWFsbG9jPiB7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgorY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwg
aW5saW5lQ2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6
Ci0gICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHksIE1hbGxvYz4gQmFz
ZTsKKyAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKICAg
ICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOwogCiBwdWJs
aWM6CkBAIC02NjksMTIgKzY3MCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yKGNv
bnN0IFZlY3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFt
ZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIHR5
cGVuYW1lIE90aGVyTWFsbG9jPgotICAgIGV4cGxpY2l0IFZlY3Rvcihjb25zdCBWZWN0b3I8VCwg
b3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNp
dHksIE90aGVyTWFsbG9jPiYpOworICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0
eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNp
dHk+CisgICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBv
dGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mKTsKIAogICAgIFZl
Y3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBvdGhl
ckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJN
aW5pbXVtQ2FwYWNpdHksIHR5cGVuYW1lIE90aGVyTWFsbG9jPgotICAgIFZlY3RvciYgb3BlcmF0
b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3Vy
LCBvdGhlck1pbmltdW1DYXBhY2l0eSwgT3RoZXJNYWxsb2M+Jik7CisgICAgdGVtcGxhdGU8c2l6
ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVf
dCBvdGhlck1pbmltdW1DYXBhY2l0eT4KKyAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0
b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVt
Q2FwYWNpdHk+Jik7CiAKICAgICBWZWN0b3IoVmVjdG9yJiYpOwogICAgIFZlY3RvciYgb3BlcmF0
b3I9KFZlY3RvciYmKTsKQEAgLTg2NCw4ICs4NjUsOCBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1WZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxv
Yz46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQogICAgIDogQmFzZShvdGhlci5j
YXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXpl
VG8ob3RoZXIuc2l6ZSgpKTsKQEAgLTg3NCw5ICs4NzUsOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlCiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxp
emVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXRlbXBsYXRlPHNp
emVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXpl
X3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIHR5cGVuYW1lIE90aGVyTWFsbG9jPgotVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpW
ZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlv
dXIsIG90aGVyTWluaW11bUNhcGFjaXR5LCBPdGhlck1hbGxvYz4mIG90aGVyKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3RlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0
eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNp
dHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dC
ZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgOiBCYXNlKG90aGVy
LmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNp
emVUbyhvdGhlci5zaXplKCkpOwpAQCAtODg1LDggKzg4Niw4IEBAIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBvdGhlcikKIHsKICAgICBpZiAoJm90aGVy
ID09IHRoaXMpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTkxMCw5ICs5MTEsOSBAQCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlCiAKIGlubGluZSBib29sIHR5cGVs
ZXNzUG9pbnRlcnNBcmVFcXVhbChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKSB7IHJldHVy
biBhID09IGI7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3Zl
cmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eSwgdHlwZW5hbWUgT3Ro
ZXJNYWxsb2M+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhl
ckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eSwg
T3RoZXJNYWxsb2M+JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit0
ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2
aW91ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFjaXR5PgorVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3Rv
cjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1D
YXBhY2l0eT4mIG90aGVyKQogewogICAgIC8vIElmIHRoZSBpbmxpbmUgY2FwYWNpdGllcyBtYXRj
aCwgd2Ugc2hvdWxkIGNhbGwgdGhlIG1vcmUgc3BlY2lmaWMKICAgICAvLyB0ZW1wbGF0ZS4gIElm
IHRoZSBpbmxpbmUgY2FwYWNpdGllcyBkb24ndCBtYXRjaCwgdGhlIHR3byBvYmplY3RzCkBAIC05
MzYsMjkgKzkzNywyOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpWZWN0b3IoVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiYgb3RoZXIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3RvcihWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgb3RoZXIp
CiB7CiAgICAgc3dhcChvdGhlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6b3BlcmF0b3I9KFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPiYmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpv
cGVyYXRvcj0oVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5PiYmIG90aGVyKQogewogICAgIHN3YXAob3RoZXIpOwogICAgIHJldHVybiAqdGhpczsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1i
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6Y29udGFpbnMoY29uc3QgVSYgdmFsdWUpIGNvbnN0Citib29sIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmNvbnRhaW5z
KGNvbnN0IFUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBmaW5kKHZhbHVlKSAhPSBub3RG
b3VuZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1l
IE1hdGNoRnVuY3Rpb24+Ci1zaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpmaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hG
dW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKK3NpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpmaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hG
dW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtYXRjaGVzKGF0KGkpKSkKQEAgLTk2NywxOCArOTY4
LDE4IEBAIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KICAgICByZXR1
cm4gbm90Rm91bmQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKK3Np
emVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBmaW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIGl0ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0gPT0gdmFsdWU7CiAgICAg
fSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
Pgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6cmV2ZXJzZUZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0CitzaXpl
X3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6cmV2ZXJzZUZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDE7IGkgPD0gc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qgc2l6ZV90IGluZGV4ID0g
c2l6ZSgpIC0gaTsKQEAgLTk4OCw5ICs5ODksOSBAQCBzaXplX3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvCiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmRJ
Zk5vdENvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKQorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRJZk5vdENvbnRhaW5zKGNv
bnN0IFUmIHZhbHVlKQogewogICAgIGlmIChjb250YWlucyh2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTk5OCw4ICs5OTksOCBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dICiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpmaWxsKGNvbnN0IFQm
IHZhbCwgc2l6ZV90IG5ld1NpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjpmaWxsKGNvbnN0IFQmIHZhbCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgaWYgKHNpemUo
KSA+IG5ld1NpemUpCiAgICAgICAgIHNocmluayhuZXdTaXplKTsKQEAgLTEwMTYsMjIgKzEwMTcs
MjIgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIG1fc2l6
ZSA9IG5ld1NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBJdGVyYXRvcj4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmRSYW5nZShJdGVyYXRvciBzdGFy
dCwgSXRlcmF0b3IgZW5kKQordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRSYW5nZShJdGVyYXRvciBzdGFydCwgSXRlcmF0
b3IgZW5kKQogewogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzdGFydDsgaXQgIT0gZW5kOyArK2l0
KQogICAgICAgICBhcHBlbmQoKml0KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVf
dCBuZXdNaW5DYXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKIHsKICAgICByZXNlcnZlQ2Fw
YWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVf
dD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1UKiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK1QqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBu
ZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogewogICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+
PSBlbmQoKSkgewogICAgICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7CkBAIC0x
MDQyLDE0ICsxMDQzLDE0IEBAIFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW4KICAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5RXhwYW5kQ2Fw
YWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQogewog
ICAgIHJldHVybiB0cnlSZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0
ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2Fw
YWNpdHkoKSAvIDQgKyAxKSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci1jb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUV4cGFuZENhcGFjaXR5KHNp
emVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KK2NvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBh
Y2l0eSwgY29uc3QgVCogcHRyKQogewogICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBl
bmQoKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KSkK
QEAgLTEwNjIsMTYgKzEwNjMsMTYgQEAgY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZgogICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIFUqIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhw
YW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBVKiBwdHIpCitpbmxpbmUgVSogVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6ZXhw
YW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBVKiBwdHIpCiB7CiAgICAgZXhwYW5k
Q2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6cmVzaXplKHNpemVfdCBzaXplKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46OnJlc2l6ZShzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBt
X3NpemUpIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXpl
LCBlbmQoKSk7CkBAIC0xMDg3LDE1ICsxMDg4LDE1IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3YKICAgICBtX3NpemUgPSBzaXplOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzaXpl
VG9GaXQoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpyZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSkKIHsKICAgICByZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7
CiAgICAgcmVzaXplKHNpemUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6c2hyaW5rKHNpemVfdCBzaXplKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6c2hyaW5rKHNpemVfdCBzaXplKQog
ewogICAgIEFTU0VSVChzaXplIDw9IG1fc2l6ZSk7CiAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3Ry
dWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CkBAIC0xMTAzLDggKzExMDQsOCBAQCB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gc2l6ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46Omdyb3coc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+Ojpncm93KHNpemVfdCBzaXplKQogewogICAgIEFTU0VSVChzaXplID49IG1fc2l6
ZSk7CiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQpAQCAtMTExNSw4ICsxMTE2LDggQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIG1fc2l6ZSA9IHNpemU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
LWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZV90IHNp
emUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhblNl
dEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZV90IHNpemUpCiB7CiAjaWYgQVNBTl9FTkFCTEVECiAg
ICAgaWYgKCFidWZmZXIoKSkKQEAgLTExMzEsOCArMTEzMiw4IEBAIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFzYW5T
ZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBh
Y2l0eShzaXplX3Qgc2l6ZSkKIHsKICNpZiBBU0FOX0VOQUJMRUQKICAgICBpZiAoIWJ1ZmZlcigp
KQpAQCAtMTE0NSw4ICsxMTQ2LDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdgogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5
cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXNhbkJ1ZmZlclNpemVXaWxsQ2hh
bmdlVG8oc2l6ZV90IG5ld1NpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZV90IG5ld1NpemUpCiB7
CiAjaWYgQVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIoKSkKQEAgLTExNTksOCArMTE2MCw4
IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2Fw
YWNpdHkpCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExNzgsOCArMTE3OSw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0gKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBu
ZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMjAxLDggKzEyMDIsOCBAQCBib29sIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQoIW1fc2l6ZSk7CiAg
ICAgQVNTRVJUKGNhcGFjaXR5KCkgPT0gaW5saW5lQ2FwYWNpdHkpOwpAQCAtMTIxMCw4ICsxMjEx
LDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgICAgICBC
YXNlOjphbGxvY2F0ZUJ1ZmZlcihpbml0aWFsQ2FwYWNpdHkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6c2hyaW5r
Q2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6c2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQogewogICAgIGlm
IChuZXdDYXBhY2l0eSA+PSBjYXBhY2l0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjQxLDkg
KzEyNDIsOSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAg
YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kKGNv
bnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEs
IHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFT
aXplOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewpAQCAtMTI1OCw5ICsxMjU5LDkg
QEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIG1fc2l6ZSA9
IG5ld1NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0
YVNpemUpCitib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCiB7
CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAgICBpZiAobmV3U2l6
ZSA+IGNhcGFjaXR5KCkpIHsKQEAgLTEyNzgsOSArMTI3OSw5IEBAIGJvb2wgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
LCBNYWxsb2M+OjphcHBlbmQoVSYmIHZhbHVlKQorQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFwcGVuZChV
JiYgdmFsdWUpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFz
YW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwpAQCAtMTI5Miw5ICsxMjkzLDkg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhYwogICAgIGFwcGVuZFNs
b3dDYXNlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLUFMV0FZU19JTkxJTkUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46OmNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykKK0FMV0FZU19JTkxJTkUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7CiAgICAgaWYgKHNpemUo
KSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1f
c2l6ZSArIDEpOwpAQCAtMTMwNiw5ICsxMzA3LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhYwogICAgIGNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5
Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorQUxXQVlTX0lOTElORSBib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRy
eUNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykKIHsKICAgICBpZiAoc2l6ZSgpICE9
IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXpl
ICsgMSk7CkBAIC0xMzIwLDkgKzEzMjEsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgVmVjdG9yPFQs
IGlubGluZUNhcGFjCiAgICAgcmV0dXJuIHRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFNsb3dDYXNlKFUm
JiB2YWx1ZSkKK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZhbHVlKQogewogICAgIEFTU0VSVChz
aXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKQEAgLTEzMzUsOSArMTMzNiw5IEBAIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICArK21fc2l6ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci12b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCit2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmNv
bnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBhcmdzKQogewogICAgIEFTU0VSVChz
aXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKQEAgLTEzNDksOSArMTM1MCw5IEBAIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICArK21fc2l6ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1ib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFs
bG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCitib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBhcmdzKQogewogICAgIEFT
U0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAgICAgCkBAIC0xMzY4LDkgKzEzNjksOSBAQCBi
b29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAvLyBUaGlzIHZlcnNpb24g
b2YgYXBwZW5kIHNhdmVzIGEgYnJhbmNoIGluIHRoZSBjYXNlIHdoZXJlIHlvdSBrbm93IHRoYXQg
dGhlCiAvLyB2ZWN0b3IncyBjYXBhY2l0eSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBhcHBlbmQg
dG8gc3VjY2VlZC4KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp1bmNoZWNrZWRBcHBlbmQoVSYmIHZh
bHVlKQorQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKHNpemUoKSA8IGNhcGFjaXR5KCkpOwogCkBAIC0xMzgwLDE2ICsxMzgxLDE2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWMKICAgICArK21fc2l6ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNp
emVfdCBvdGhlckNhcGFjaXR5PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmRWZWN0b3IoY29u
c3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2YWwpCitpbmxpbmUgdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRWZWN0
b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2YWwpCiB7CiAgICAgYXBwZW5kKHZh
bC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4K
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlv
biwgY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQordm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZV90IHBv
c2l0aW9uLCBjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCiB7CiAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0gc2l6ZSgpKTsKICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwpAQCAtMTQwNiw5ICsxNDA3LDkgQEAgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIG1fc2l6ZSA9IG5ld1NpemU7
CiB9CiAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmIHZhbHVlKQor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmIHZhbHVlKQogewogICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAKQEAg
LTE0MjYsMTUgKzE0MjcsMTUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdgogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46Omluc2VydFZl
Y3RvcihzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYgdmFsKQoraW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6aW5zZXJ0VmVjdG9yKHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwp
CiB7CiAgICAgaW5zZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGlu
ZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgpKTsK
ICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwpAQCAtMTQ0NCw4ICsxNDQ1LDggQEAg
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgIC0tbV9zaXplOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1p
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OnJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVtb3ZlKHNp
emVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uICsgbGVuZ3RoIDw9IHNpemUoKSk7CkBAIC0xNDU3LDE4
ICsxNDU4LDE4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICAg
ICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlRmlyc3QoY29uc3Qg
VSYgdmFsdWUpCitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdChjb25zdCBVJiB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gcmVtb3ZlRmlyc3RNYXRjaGluZyhbJnZhbHVlXSAoY29uc3QgVCYgY3VycmVudCkg
ewogICAgICAgICByZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsKICAgICB9KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1p
bmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OnJlbW92ZUZpcnN0TWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlv
biYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5kZXgpCitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdE1h
dGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMsIHNpemVfdCBzdGFydEluZGV4KQog
ewogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKG1hdGNoZXMoYXQoaSkpKSB7CkBAIC0xNDc5LDE4ICsxNDgwLDE4IEBAIGlubGlu
ZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5s
aW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlQWxsKGNvbnN0IFUmIHZhbHVlKQoraW5saW5lIHVu
c2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OnJlbW92ZUFsbChjb25zdCBVJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVtb3ZlQWxs
TWF0Y2hpbmcoWyZ2YWx1ZV0gKGNvbnN0IFQmIGN1cnJlbnQpIHsKICAgICAgICAgcmV0dXJuIGN1
cnJlbnQgPT0gdmFsdWU7CiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotaW5saW5lIHVuc2lnbmVkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6cmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90
IHN0YXJ0SW5kZXgpCitpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgTWF0
Y2hGdW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5kZXgpCiB7CiAgICAgaXRlcmF0b3Ig
aG9sZUJlZ2luID0gZW5kKCk7CiAgICAgaXRlcmF0b3IgaG9sZUVuZCA9IGVuZCgpOwpAQCAtMTUx
NSwxNiArMTUxNiwxNiBAQCBpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
CiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmV2ZXJzZSgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmV2ZXJzZSgpCiB7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemUgLyAyOyArK2kpCiAgICAgICAgIHN0
ZDo6c3dhcChhdChpKSwgYXQobV9zaXplIC0gMSAtIGkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hcEZ1bmN0aW9uLCB0eXBlbmFtZSBSPgot
aW5saW5lIFZlY3RvcjxSPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46Om1hcChNYXBGdW5jdGlvbiBtYXBGdW5jdGlvbikgY29u
c3QKK2lubGluZSBWZWN0b3I8Uj4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6bWFwKE1hcEZ1bmN0aW9uIG1hcEZ1bmN0aW9uKSBjb25zdAog
ewogICAgIFZlY3RvcjxSPiByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2l6ZSgpKTsKQEAgLTE1MzMsOCArMTUzNCw4IEBAIGlubGluZSBWZWN0b3I8Uj4gVmVjdG9y
PFQsIGlubGluZUNhcGFjaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgTWFsbG9jUHRyPFQ+
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6cmVsZWFzZUJ1ZmZlcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgoraW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZWxlYXNlQnVmZmVyKCkKIHsKICAgICAvLyBGSVhNRTog
RmluZCBhIHdheSB0byBwcmVzZXJ2ZSBhbm5vdGF0aW9ucyBvbiB0aGUgcmV0dXJuZWQgYnVmZmVy
LgogICAgIC8vIEFTYW4gcmVxdWlyZXMgdGhhdCBhbGwgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQg
YmVmb3JlIGRlYWxsb2NhdGlvbiwKQEAgLTE1NDcsNyArMTU0OCw3IEBAIGlubGluZSBNYWxsb2NQ
dHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGEKICAgICAgICAgLy8gdGhhdCBtZWFucyBpdCB3YXMg
dXNpbmcgdGhlIGlubGluZSBidWZmZXIuIEluIHRoYXQgY2FzZSwKICAgICAgICAgLy8gd2UgY3Jl
YXRlIGEgYnJhbmQgbmV3IGJ1ZmZlciBzbyB0aGUgY2FsbGVyIGFsd2F5cyBnZXRzIG9uZS4KICAg
ICAgICAgc2l6ZV90IGJ5dGVzID0gbV9zaXplICogc2l6ZW9mKFQpOwotICAgICAgICBidWZmZXIg
PSBhZG9wdE1hbGxvY1B0cihzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjptYWxsb2MoYnl0ZXMpKSk7
CisgICAgICAgIGJ1ZmZlciA9IGFkb3B0TWFsbG9jUHRyKHN0YXRpY19jYXN0PFQqPihmYXN0TWFs
bG9jKGJ5dGVzKSkpOwogICAgICAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBkYXRhKCksIGJ5dGVz
KTsKICAgICB9CiAgICAgbV9zaXplID0gMDsKQEAgLTE1NTUsOCArMTU1Niw4IEBAIGlubGluZSBN
YWxsb2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGEKICAgICByZXR1cm4gYnVmZmVyOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxp
bmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmNoZWNrQ29uc2lzdGVuY3koKQogewogI2lmICFBU1NF
UlRfRElTQUJMRUQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQpAQCAt
MTU2NCwxNCArMTU2NSwxNCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgotaW5saW5lIHZvaWQgc3dhcChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIGEsIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgYikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBzd2FwKFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIGEsIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIGIpCiB7CiAg
ICAgYS5zd2FwKGIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBl
bmFtZSBNYWxsb2M+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBhLCBjb25zdCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxv
Yz4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTc5LDggKzE1ODAsOCBAQCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhCiAgICAgcmV0dXJuIFZlY3RvclR5cGVPcGVyYXRpb25z
PFQ+Ojpjb21wYXJlKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgYSwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBiKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYSwgY29u
c3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpAQCAtMTYwNCw4ICsxNjA1LDggQEAg
c2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZQogICAgIHJldHVybiBuZXdT
aXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci1zaXplX3QgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIHZlY3RvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitzaXplX3QgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50
cyhWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
JiB2ZWN0b3IpCiB7CiAgICAgcmV0dXJuIHJlbW92ZVJlcGVhdGVkRWxlbWVudHModmVjdG9yLCBb
XSAoVCYgYSwgVCYgYikgeyByZXR1cm4gYSA9PSBiOyB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEw
NCw3IEBAIHByaXZhdGU6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogLy8gQXRvbWljU3RyaW5nSW1w
bHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQKIC8vIGluIHRoZSBn
ZW5lcmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kKLS8vIGFzIHRoZXkgYXJlIG5v
dCBhbGxvY2F0ZWQgYnkgU3RyaW5nTWFsbG9jLgorLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRl
ZCBieSBmYXN0TWFsbG9jLgogLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdheSB0byBk
ZXRlY3QgdGhhdCBjYXNlCiAvLyBzbyB3ZSBpZ25vcmUgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIGZv
ciBhbGwgQXRvbWljU3RyaW5nSW1wbHMqLgogdGVtcGxhdGU8PiBzdHJ1Y3QKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4
dC9DU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVk
ZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOSw3
ICszOCw3IEBAIFJlZjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5nQnVmZmVyOjpjcmVhdGUKIAogICAg
IC8vIFRoZSArMSBpcyBmb3IgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgogICAgIHNp
emVfdCBzaXplID0gc2l6ZW9mKENTdHJpbmdCdWZmZXIpICsgbGVuZ3RoICsgMTsKLSAgICBDU3Ry
aW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBzdGF0aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4oc3Ry
aW5nTWFsbG9jKHNpemUpKTsKKyAgICBDU3RyaW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBzdGF0
aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4oZmFzdE1hbGxvYyhzaXplKSk7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0J1ZmZlcikgQ1N0cmluZ0J1ZmZlcihsZW5ndGgp
KTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCArMzAs
MTIgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01h
bGxvYy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gQ1N0cmluZ0J1ZmZlciBpcyB0aGUgcmVm
LWNvdW50ZWQgc3RvcmFnZSBjbGFzcyBmb3IgdGhlIGNoYXJhY3RlcnMgaW4gYSBDU3RyaW5nLgog
Ly8gVGhlIGRhdGEgaXMgaW1wbGljaXRseSBhbGxvY2F0ZWQgMSBjaGFyYWN0ZXIgbG9uZ2VyIHRo
YW4gbGVuZ3RoKCksIGFzIGl0IGlzIHplcm8tdGVybWluYXRlZC4KIGNsYXNzIENTdHJpbmdCdWZm
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDU3RyaW5nQnVmZmVyPiB7Ci0gICAgV1RGX01BS0VfU1RS
SU5HX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBkYXRhKCkgeyByZXR1cm4g
bXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oCShyZXZpc2lvbiAyMzEy
NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIFN0cmluZ0J1ZmZlcl9oCiAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgogCkBAIC00MiwxMyAr
NDEsMTMgQEAgY2xhc3MgU3RyaW5nQnVmZmVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTdHJp
bmdCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQogICAgICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKLSAg
ICAgICAgLCBtX2RhdGEobV9sZW5ndGggPyBzdGF0aWNfY2FzdDxDaGFyVHlwZSo+KHN0cmluZ01h
bGxvYygoQ2hlY2tlZDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihDaGFyVHlwZSkpLnVuc2Fm
ZUdldCgpKSkgOiBudWxscHRyKQorICAgICAgICAsIG1fZGF0YShtX2xlbmd0aCA/IHN0YXRpY19j
YXN0PENoYXJUeXBlKj4oZmFzdE1hbGxvYygoQ2hlY2tlZDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNp
emVvZihDaGFyVHlwZSkpLnVuc2FmZUdldCgpKSkgOiBudWxscHRyKQogICAgIHsKICAgICB9CiAK
ICAgICB+U3RyaW5nQnVmZmVyKCkKICAgICB7Ci0gICAgICAgIHN0cmluZ0ZyZWUobV9kYXRhKTsK
KyAgICAgICAgZmFzdEZyZWUobV9kYXRhKTsKICAgICB9CiAKICAgICB2b2lkIHNocmluayh1bnNp
Z25lZCBuZXdMZW5ndGgpCkBAIC02Miw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5l
d0xlbmd0aCA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAobmV3TGVuZ3RoID4gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkKICAgICAgICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihzdHJpbmdSZWFsbG9jKG1fZGF0YSwgbmV3TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpOworICAg
ICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhtX2RhdGEs
IG5ld0xlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICAgICAgfQogICAgICAgICBtX2xlbmd0
aCA9IG5ld0xlbmd0aDsKICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJ
KHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw5IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgot
I2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TeW1ib2xJbXBsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuaD4KQEAgLTEzMSw3ICsxMjksNyBAQCBTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJPd25lZCkgewog
ICAgICAgICAvLyBXZSB1c2UgbV9kYXRhOCwgYnV0IHNpbmNlIGl0IGlzIGEgdW5pb24gd2l0aCBt
X2RhdGExNiB0aGlzIHdvcmtzIGVpdGhlciB3YXkuCiAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsK
LSAgICAgICAgc3RyaW5nRnJlZShjb25zdF9jYXN0PExDaGFyKj4obV9kYXRhOCkpOworICAgICAg
ICBmYXN0RnJlZShjb25zdF9jYXN0PExDaGFyKj4obV9kYXRhOCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xNDMsNyArMTQxLDcgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQog
dm9pZCBTdHJpbmdJbXBsOjpkZXN0cm95KFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwpCiB7CiAgICAg
c3RyaW5nSW1wbC0+flN0cmluZ0ltcGwoKTsKLSAgICBzdHJpbmdGcmVlKHN0cmluZ0ltcGwpOwor
ICAgIGZhc3RGcmVlKHN0cmluZ0ltcGwpOwogfQogCiBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6Y3JlYXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQpAQCAtMTkwLDcgKzE4OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGlubGluZSAKICAgICAvLyBoZWFwIGFsbG9jYXRpb24gZnJvbSB0aGlzIGNhbGwuCiAgICAgaWYg
KGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9m
KFN0cmluZ0ltcGwpKSAvIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCiAgICAgICAgIENSQVNIKCk7
Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KHN0cmlu
Z01hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKSk7CisgICAgU3Ry
aW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxs
b2NhdGlvblNpemU8Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkpOwogCiAgICAgZGF0YSA9IHN0cmlu
Zy0+dGFpbFBvaW50ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKICAgICByZXR1cm4gY29uc3RydWN0SW50
ZXJuYWw8Q2hhcmFjdGVyVHlwZT4oKnN0cmluZywgbGVuZ3RoKTsKQEAgLTIxNiwxMiArMjE0LDEy
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSAKICAgICAgICAgcmV0
dXJuICplbXB0eSgpOwogICAgIH0KIAotICAgIC8vIFNhbWUgYXMgY3JlYXRlVW5pbml0aWFsaXpl
ZCgpIGV4Y2VwdCBoZXJlIHdlIHVzZSBzdHJpbmdSZWFsbG9jLgorICAgIC8vIFNhbWUgYXMgY3Jl
YXRlVW5pbml0aWFsaXplZCgpIGV4Y2VwdCBoZXJlIHdlIHVzZSBmYXN0UmVhbGxvYy4KICAgICBp
ZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXpl
b2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKICAgICAgICAgQ1JBU0go
KTsKIAogICAgIG9yaWdpbmFsU3RyaW5nLT5+U3RyaW5nSW1wbCgpOwotICAgIGF1dG8qIHN0cmlu
ZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihzdHJpbmdSZWFsbG9jKCZvcmlnaW5hbFN0cmlu
Zy5sZWFrUmVmKCksIGFsbG9jYXRpb25TaXplPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpKTsKKyAg
ICBhdXRvKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdFJlYWxsb2MoJm9y
aWdpbmFsU3RyaW5nLmxlYWtSZWYoKSwgYWxsb2NhdGlvblNpemU8Q2hhcmFjdGVyVHlwZT4obGVu
Z3RoKSkpOwogCiAgICAgZGF0YSA9IHN0cmluZy0+dGFpbFBvaW50ZXI8Q2hhcmFjdGVyVHlwZT4o
KTsKICAgICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhcmFjdGVyVHlwZT4oKnN0cmluZywg
bGVuZ3RoKTsKQEAgLTE4ODUsMTQgKzE4ODMsNCBAQCBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5
KGNvbnN0IFVDaGFyKiBhCiAgICAgcmV0dXJuICFtZW1jbXAoYSwgYi0+Y2hhcmFjdGVyczE2KCks
IGItPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiB9CiAKLXZvaWQgU3RyaW5nSW1wbDo6cmVs
ZWFzZUFzc2VydENhZ2VkKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTdGF0aWMoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFHSUdBQ0FHRV9FTkFCTEVEIHx8IEdpZ2FjYWdl
Ojppc0NhZ2VkKEdpZ2FjYWdlOjpTdHJpbmcsIHRoaXMpKTsKLSAgICBpZiAoYnVmZmVyT3duZXJz
aGlwKCkgIT0gQnVmZmVyT3duZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VS
VCghR0lHQUNBR0VfRU5BQkxFRCB8fCBHaWdhY2FnZTo6aXNDYWdlZChHaWdhY2FnZTo6U3RyaW5n
LCBtX2RhdGE4KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ29udmVyc2lvbk1vZGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb21tb24u
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWZWN0b3IuaD4KIAogI2lmIFVTRShDRikKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9f
Q0ZTdHJpbmcgKiBDRlN0cmluZ1JlZjsKQEAgLTE1Nyw3ICsxNTYsNyBAQCBwcm90ZWN0ZWQ6CiAv
LyBSaWdodCBub3cgd2UgdXNlIGEgbWl4IG9mIGJvdGgsIHdoaWNoIG1ha2VzIGNvZGUgbW9yZSBj
b25mdXNpbmcgYW5kIGhhcyBubyBiZW5lZml0LgogCiBjbGFzcyBTdHJpbmdJbXBsIDogcHJpdmF0
ZSBTdHJpbmdJbXBsU2hhcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0ltcGwp
OyBXVEZfTUFLRV9TVFJJTkdfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogICAgIGZyaWVuZCBjbGFzcyBB
dG9taWNTdHJpbmdJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBKU0M6OkxMSW50OjpEYXRhOwpAQCAt
MjU3LDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2RhdGE4KTsgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLSAgICBzdGF0aWMg
UmVmPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJik7CisgICAgc3RhdGljIFJl
ZjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYpOwogCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYmKTsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChTdHJp
bmdCdWZmZXI8TENoYXI+JiYpOwpAQCAtNDcwLDkgKzQ2OSw2IEBAIHB1YmxpYzoKIAogICAgIEJ1
ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxCdWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza0J1ZmZlck93bmVy
c2hpcCk7IH0KICAgICAKLSAgICB2b2lkIGFzc2VydENhZ2VkKCkgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVsZWFzZUFzc2VydENhZ2VkKCkgY29uc3Q7Ci0KIHByb3RlY3Rl
ZDoKICAgICB+U3RyaW5nSW1wbCgpOwogCkBAIC01MjYsNyArNTIyLDcgQEAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoU3RyaW5nSW1wbCkgPT0gc2l6ZQogI2lmICFBU1NFUlRfRElTQUJMRUQKIAogLy8g
U3RyaW5nSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQgaW4g
dGhlIGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hlY2tDb25zaXN0ZW5jeQotLy8gYXMgdGhleSBh
cmUgbm90IGFsbG9jYXRlZCBieSBzdHJpbmdNYWxsb2MuIFdlIGRvbid0IGN1cnJlbnRseSBoYXZl
IGFueSB3YXkgdG8gZGV0ZWN0IHRoYXQgY2FzZQorLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRl
ZCBieSBmYXN0TWFsbG9jLiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbnkgd2F5IHRvIGRldGVj
dCB0aGF0IGNhc2UKIC8vIHNvIHdlIGlnbm9yZSB0aGUgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGFs
bCBTdHJpbmdJbXBsKi4KIHRlbXBsYXRlPD4gc3RydWN0IFZhbHVlQ2hlY2s8U3RyaW5nSW1wbCo+
IHsKICAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFN0cmluZ0ltcGwqKSB7
IH0KQEAgLTkyNCw3ICs5MjAsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsCiAgICAgYXV0byogb3duZXJSZXAgPSAoKHJlcC5idWZmZXJPd25lcnNoaXAoKSA9PSBC
dWZmZXJTdWJzdHJpbmcpID8gcmVwLnN1YnN0cmluZ0J1ZmZlcigpIDogJnJlcCk7CiAKICAgICAv
LyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGJvdGggdGhlIFN0cmluZ0ltcGwg
c3RydWN0IGFzIHdlbGwgYXMgdGhlIHBvaW50ZXIgdG8gdGhlIG93bmVyIHN0cmluZy4KLSAgICBh
dXRvKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KHN0cmluZ01hbGxvYyhh
bGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMSkpKTsKKyAgICBhdXRvKiBzdHJpbmdJbXBsID0g
c3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8U3RyaW5n
SW1wbCo+KDEpKSk7CiAgICAgaWYgKHJlcC5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLm1fZGF0YTggKyBv
ZmZzZXQsIGxlbmd0aCwgKm93bmVyUmVwKSk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5v
dE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLm1fZGF0YTE2ICsgb2Zmc2V0LCBsZW5n
dGgsICpvd25lclJlcCkpOwpAQCAtOTQ5LDggKzk0NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IEFMV0FZU18KICAgICAgICAgb3V0cHV0ID0gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGF1dG8qIHJlc3VsdCA9IHN0YXRpY19jYXN0PFN0
cmluZ0ltcGwqPih0cnlTdHJpbmdNYWxsb2MoYWxsb2NhdGlvblNpemU8Q2hhcmFjdGVyVHlwZT4o
bGVuZ3RoKSkpOwotICAgIGlmICghcmVzdWx0KSB7CisgICAgU3RyaW5nSW1wbCogcmVzdWx0Owor
ICAgIGlmICghdHJ5RmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBlPihsZW5n
dGgpKS5nZXRWYWx1ZShyZXN1bHQpKSB7CiAgICAgICAgIG91dHB1dCA9IG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTk2MCw3ICs5NTYsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1pbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3IpCitpbmxpbmUgUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmFkb3B0KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3IpCiB7CiAgICAgaWYgKHNp
emVfdCBzaXplID0gdmVjdG9yLnNpemUoKSkgewogICAgICAgICBBU1NFUlQodmVjdG9yLmRhdGEo
KSk7CkBAIC0xMDc0LDEyICsxMDcwLDYgQEAgaW5saW5lIFVDaGFyIFN0cmluZ0ltcGw6OmF0KHVu
c2lnbmVkIGkpIAogICAgIHJldHVybiBpczhCaXQoKSA/IG1fZGF0YThbaV0gOiBtX2RhdGExNltp
XTsKIH0KIAotaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6YXNzZXJ0Q2FnZWQoKSBjb25zdAotewot
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICByZWxlYXNlQXNzZXJ0Q2FnZWQoKTsK
LX0KLQogaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIDogU3RyaW5nSW1wbFNo
YXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgc19oYXNoRmxhZzhC
aXRCdWZmZXIgfCBTdHJpbmdTeW1ib2wgfCBCdWZmZXJTdWJzdHJpbmcpCiB7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdNYWxsb2MuY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw4OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHJpbmdNYWxsb2MuaCIKLQotI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYv
R2lnYWNhZ2UuaD4KLSNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgotCi0jaWYgIShkZWZpbmVk
KFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykKLSNpbmNsdWRlIDxibWFs
bG9jL2JtYWxsb2MuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmIGRlZmluZWQo
VVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DCi12b2lkKiB0cnlTdHJpbmdN
YWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIEZhc3RNYWxsb2M6OnRyeU1hbGxvYyhz
aXplKTsKLX0KLQotdm9pZCogc3RyaW5nTWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHJldHVy
biBmYXN0TWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBzdHJpbmdSZWFsbG9jKHZvaWQqIHAsIHNp
emVfdCBzaXplKQotewotICAgIHJldHVybiBmYXN0UmVhbGxvYyhwLCBzaXplKTsKLX0KLQotdm9p
ZCBzdHJpbmdGcmVlKHZvaWQqIHApCi17Ci0gICAgcmV0dXJuIGZhc3RGcmVlKHApOwotfQotI2Vs
c2UKLXZvaWQqIHRyeVN0cmluZ01hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gYm1h
bGxvYzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OlN0cmluZ0dpZ2Fj
YWdlKTsKLX0KLQotdm9pZCogc3RyaW5nTWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHJldHVy
biBibWFsbG9jOjphcGk6Om1hbGxvYyhzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6U3RyaW5nR2ln
YWNhZ2UpOwotfQotCi12b2lkKiBzdHJpbmdSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBzaXplKQot
ewotICAgIHJldHVybiBibWFsbG9jOjphcGk6OnJlYWxsb2MocCwgc2l6ZSwgYm1hbGxvYzo6SGVh
cEtpbmQ6OlN0cmluZ0dpZ2FjYWdlKTsKLX0KLQotdm9pZCBzdHJpbmdGcmVlKHZvaWQqIHApCi17
Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFVOTElLRUxZKCFHaWdhY2Fn
ZTo6aXNDYWdlZChHaWdhY2FnZTo6U3RyaW5nLCBwKSkpIHsKLSAgICAgICAgZGF0YUxvZygiVHJ5
aW5nIHRvIGZyZWUgc3RyaW5nIHRoYXQgaXMgbm90IGNhZ2VkOiAiLCBSYXdQb2ludGVyKHApLCAi
XG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
Ym1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZSk7
Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nTWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdNYWxsb2MuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdNYWxsb2MuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeVN0cmluZ01hbGxvYyhzaXplX3QpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHN0cmluZ01hbGxvYyhzaXplX3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHN0
cmluZ1JlYWxsb2Modm9pZCosIHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdHJp
bmdGcmVlKHZvaWQqKTsKLQotI2RlZmluZSBXVEZfTUFLRV9TVFJJTkdfQUxMT0NBVEVEIFwKLXB1
YmxpYzogXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJu
IHA7IH0gXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1
cm4gcDsgfSBcCi0gICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgXAot
ICAgIHsgXAotICAgICAgICByZXR1cm4gOjpXVEY6OnN0cmluZ01hbGxvYyhzaXplKTsgXAotICAg
IH0gXAotICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSBcCi0gICAgeyBc
Ci0gICAgICAgIDo6V1RGOjpzdHJpbmdGcmVlKHApOyBcCi0gICAgfSBcCi0gICAgXAotICAgIHZv
aWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplKSBcCi0gICAgeyBcCi0gICAgICAgIHJldHVy
biA6OldURjo6c3RyaW5nTWFsbG9jKHNpemUpOyBcCi0gICAgfSBcCi0gICAgXAotICAgIHZvaWQg
b3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgXAotICAgIHsgXAotICAgICAgICA6OldURjo6c3Ry
aW5nRnJlZShwKTsgXAotICAgIH0gXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5v
dE51bGxUYWcsIHZvaWQqIGxvY2F0aW9uKSBcCi0gICAgeyBcCi0gICAgICAgIEFTU0VSVChsb2Nh
dGlvbik7IFwKLSAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCi0gICAgfSBcCi1wcml2YXRlOiBc
Ci10eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3Jv
Ci0KLQotc3RydWN0IFN0cmluZ01hbGxvYyB7Ci0gICAgc3RhdGljIHZvaWQqIG1hbGxvYyhzaXpl
X3Qgc2l6ZSkgeyByZXR1cm4gc3RyaW5nTWFsbG9jKHNpemUpOyB9Ci0gICAgc3RhdGljIHZvaWQq
IHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkgeyByZXR1cm4gdHJ5U3RyaW5nTWFsbG9jKHNpemUpOyB9
Ci0gICAgc3RhdGljIHZvaWQqIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IHNpemUpIHsgcmV0dXJu
IHN0cmluZ1JlYWxsb2MocCwgc2l6ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBmcmVlKHZvaWQqIHAp
IHsgc3RyaW5nRnJlZShwKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6U3RyaW5nTWFsbG9jOwotdXNpbmcgV1RGOjpzdHJpbmdNYWxsb2M7Ci11c2luZyBXVEY6OnN0
cmluZ1JlYWxsb2M7Ci11c2luZyBXVEY6OnN0cmluZ0ZyZWU7Ci11c2luZyBXVEY6OnRyeVN0cmlu
Z01hbGxvYzsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWZWN0b3IuaAkocmV2aXNpb24gMjMx
MjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWZWN0b3IuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMCwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93LCBzaXplX3QgbWluQ2FwYWNpdHkgPSAxNj4gdXNp
bmcgU3RyaW5nVmVjdG9yID0gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBTdHJpbmdNYWxsb2M+OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
dXNpbmcgV1RGOjpTdHJpbmdWZWN0b3I7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJv
bEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBpbmxpbmUgUmVnaXN0ZXJlZFN5bWJvbElt
cGwqIFN5bWJvbEltcGw6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogLy8gU3ltYm9sSW1wbHMgY3Jl
YXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQKIC8vIGluIHRoZSBnZW5lcmlj
IFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kKLS8vIGFzIHRoZXkgYXJlIG5vdCBhbGxv
Y2F0ZWQgYnkgc3RyaW5nTWFsbG9jLgorLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBm
YXN0TWFsbG9jLgogLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3Qg
dGhhdCBjYXNlCiAvLyBzbyB3ZSBpZ25vcmUgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhbGwg
U3ltYm9sSW1wbHMqLgogdGVtcGxhdGU8PiBzdHJ1Y3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvVW5pcXVlZFN0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1VuaXF1ZWRTdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBA
QCBwcm90ZWN0ZWQ6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogLy8gVW5pcXVlZFN0cmluZ0ltcGxz
IGNyZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJbXBsIHdpbGwgQVNTRVJUCiAvLyBpbiB0aGUgZ2Vu
ZXJpYyBWYWx1ZUNoZWNrPFQ+OjpjaGVja0NvbnNpc3RlbmN5Ci0vLyBhcyB0aGV5IGFyZSBub3Qg
YWxsb2NhdGVkIGJ5IHN0cmluZ01hbGxvYy4KKy8vIGFzIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQg
YnkgZmFzdE1hbGxvYy4KIC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSB3YXkgdG8gZGV0
ZWN0IHRoYXQgY2FzZQogLy8gc28gd2UgaWdub3JlIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBmb3Ig
YWxsIFVuaXF1ZWRTdHJpbmdJbXBscyouCiB0ZW1wbGF0ZTw+IHN0cnVjdApJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVyPExDaGFyPiYmIGJ1ZmZlcikgeyBy
ZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsgfQogICAgIHN0YXRpYyBT
dHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYmIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5n
SW1wbDo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci0gICAgc3RhdGljIFN0cmluZyBhZG9wdChTdHJpbmdW
ZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+JiYgdmVjdG9yKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHZl
Y3RvcikpOyB9CisgICAgc3RhdGljIFN0cmluZyBhZG9wdChWZWN0b3I8Q2hhcmFjdGVyVHlwZSwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgdmVjdG9yKSB7
IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHZlY3RvcikpOyB9CiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0KICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXNFbXB0eSgpOyB9CkBAIC0zNjQsOSAr
MzY0LDYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBjbGVhcmluZyBTdHJp
bmctYmFzZWQgY2FjaGVzLgogICAgIHZvaWQgY2xlYXJJbXBsSWZOb3RTaGFyZWQoKTsKIAotICAg
IHZvaWQgYXNzZXJ0Q2FnZWQoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2VBc3NlcnRDYWdlZCgp
IGNvbnN0OwotCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgcmVtb3ZlSW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2lnbmVkLCB1bnNp
Z25lZCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBhcHBlbmRJ
bnRlcm5hbChDaGFyYWN0ZXJUeXBlKTsKQEAgLTU3MiwxOCArNTY5LDYgQEAgaW5saW5lIHZvaWQg
U3RyaW5nOjpjbGVhckltcGxJZk5vdFNoYXJlZAogICAgICAgICBtX2ltcGwgPSBudWxscHRyOwog
fQogCi1pbmxpbmUgdm9pZCBTdHJpbmc6OmFzc2VydENhZ2VkKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9pbXBsKQotICAgICAgICBtX2ltcGwtPmFzc2VydENhZ2VkKCk7Ci19Ci0KLWlubGluZSB2b2lk
IFN0cmluZzo6cmVsZWFzZUFzc2VydENhZ2VkKCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICBtX2ltcGwtPnJlbGVhc2VBc3NlcnRDYWdlZCgpOwotfQotCiAjaWZkZWYgX19PQkpD
X18KIAogaW5saW5lIFN0cmluZzo6b3BlcmF0b3IgTlNTdHJpbmcgKigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0wNS0wMyAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZ3Mgc2hvdWxkIG5vdCBiZSBhbGxvY2F0
ZWQgaW4gYSBnaWdhY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVjb2RlS2V5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRTdHJpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTcGFjZXMpOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OnRha2VSZW1haW5pbmdXaGl0
ZXNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplVVJM
RW5jb2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvdXJDQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3VyQ0M6OnRvU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpSZXBsaWNhU3RhdGU6OmNsb25lSUQg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsZUlDVTo6ZGVjaW1hbFN5bWJvbCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbGVJQ1U6OmRlY2ltYWxUZXh0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERh
dGVGb3JtYXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUlDVTo6Y3JlYXRlTGFi
ZWxWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Rm9ybWF0Rm9yU2tlbGV0b24pOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVTeXN0ZW06OmdldEZpbmFsUGF0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5
c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVT
eXN0ZW06OnN0b3JhZ2VEaXJlY3RvcnkpOgorCiAyMDE4LTA1LTAyICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgTmV0d29ya0xvYWRDaGVja2VyIGZvciBu
YXZpZ2F0aW9uIGxvYWRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAy
MzEyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
aWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCBzdGF0aWMg
Ym9vbCBkZWNvZGVLZXkoY29uc3QgdWludDhfdComIGRhCiAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oZW5kIC0gZGF0YSkgPCBsZW5ndGggKiAyKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBW
ZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKICAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGVuZ3RoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewogICAgICAgICAgICAgdWludDE2X3QgY2g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIzMTI2
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDMsNyArMTk0Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHN0ciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocHRyKSwgbGVuZ3Ro
KTsKICAgICAgICAgcHRyICs9IGxlbmd0aCAqIHNpemVvZihVQ2hhcik7CiAjZWxzZQotICAgICAg
ICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZm
ZXI7CiAgICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZf
dCBjaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlcyhTdHJp
bmcmIHRleHQKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRl
eHQubGVuZ3RoKCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBjaGFyVmVjdG9yKHRleHRMZW5n
dGgpOworICAgIFZlY3RvcjxVQ2hhcj4gY2hhclZlY3Rvcih0ZXh0TGVuZ3RoKTsKICAgICBTdHJp
bmdWaWV3KHRleHQpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGNoYXJWZWN0b3IuZGF0YSgp
KTsKIAogICAgIGNoYXJWZWN0b3JbaSsrXSA9ICcgJzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFrZVJlbWFpbmlu
Z1doaXRlc3BhY2UoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotICAgICAg
ICBTdHJpbmdWZWN0b3I8TENoYXIsIDg+IHdoaXRlc3BhY2U7CisgICAgICAgIFZlY3RvcjxMQ2hh
ciwgOD4gd2hpdGVzcGFjZTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgVUNoYXIgY2hhcmFj
dGVyID0gbV90ZXh0WzBdOwogICAgICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKGNoYXJhY3Rlcikp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIzMTI2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzOCw3ICs1MzgsNyBAQCBib29sIFVSTFBhcnNlcjo6c2hvdWxkQ29weUZpbGVVUkwo
Q29kZVBvCiAgICAgcmV0dXJuICFpc1NsYXNoUXVlc3Rpb25Pckhhc2goKml0ZXJhdG9yKTsKIH0K
IAotc3RhdGljIHZvaWQgcGVyY2VudEVuY29kZUJ5dGUodWludDhfdCBieXRlLCBTdHJpbmdWZWN0
b3I8TENoYXI+JiBidWZmZXIpCitzdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlQnl0ZSh1aW50OF90
IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAgICBidWZmZXIuYXBwZW5kKCclJyk7
CiAgICAgYnVmZmVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChieXRlKSk7CkBA
IC0yODE0LDcgKzI4MTQsNyBAQCBhdXRvIFVSTFBhcnNlcjo6cGFyc2VVUkxFbmNvZGVkRm9ybShT
dHJpCiAgICAgcmV0dXJuIG91dHB1dDsKIH0KIAotc3RhdGljIHZvaWQgc2VyaWFsaXplVVJMRW5j
b2RlZEZvcm0oY29uc3QgU3RyaW5nJiBpbnB1dCwgU3RyaW5nVmVjdG9yPExDaGFyPiYgb3V0cHV0
KQorc3RhdGljIHZvaWQgc2VyaWFsaXplVVJMRW5jb2RlZEZvcm0oY29uc3QgU3RyaW5nJiBpbnB1
dCwgVmVjdG9yPExDaGFyPiYgb3V0cHV0KQogewogICAgIGF1dG8gdXRmOCA9IGlucHV0LnV0Zjgo
U3RyaWN0Q29udmVyc2lvbik7CiAgICAgY29uc3QgY2hhciogZGF0YSA9IHV0ZjguZGF0YSgpOwpA
QCAtMjg0MCw3ICsyODQwLDcgQEAgU3RyaW5nIFVSTFBhcnNlcjo6c2VyaWFsaXplKGNvbnN0IFVS
TEVuYwogICAgIGlmICh0dXBsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgU3RyaW5nVmVjdG9yPExDaGFyPiBvdXRwdXQ7CisgICAgVmVjdG9yPExDaGFyPiBvdXRwdXQ7
CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IHR1cGxlcykgewogICAgICAgICBpZiAoIW91dHB1dC5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcmJyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gZGVmYXVsdFBvcnRG
b3JQcm90b2NvbChTdHJpbmdWaWV3KTsKIAogICAgIFVSTCBtX3VybDsKLSAgICBTdHJpbmdWZWN0
b3I8TENoYXI+IG1fYXNjaWlCdWZmZXI7CisgICAgVmVjdG9yPExDaGFyPiBtX2FzY2lpQnVmZmVy
OwogICAgIGJvb2wgbV91cmxJc1NwZWNpYWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV91cmxJc0Zp
bGUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9ob3N0SGFzUGVyY2VudE9yTm9uQVNDSUkgeyBmYWxz
ZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm91ckNDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0MuY3Bw
CShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b3VyQ0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHN0ZDo6b3B0aW9uYWw8
Rm91ckNDPiBGb3VyQ0M6OmZyb21TdHJpbmcKIAogU3RyaW5nIEZvdXJDQzo6dG9TdHJpbmcoKSBj
b25zdAogewotICAgIFN0cmluZ1ZlY3RvcjxMQ2hhciwgND4gZGF0YSA9IHsKKyAgICBWZWN0b3I8
TENoYXIsIDQ+IGRhdGEgPSB7CiAgICAgICAgIExDaGFyKHZhbHVlID4+IDI0KSwKICAgICAgICAg
TENoYXIoKHZhbHVlID4+IDE2KSAmIDB4RkYpLAogICAgICAgICBMQ2hhcigodmFsdWUgPj4gOCkg
JiAweEZGKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAgR3JhcGhpY3NMYXllckNBOjpDbG9uZUlEIEdy
YXBoaWNzTGF5ZXJDQQogICAgIGNvbnN0IHNpemVfdCBiaXRzUGVyVUNoYXIgPSBzaXplb2YoVUNo
YXIpICogODsKICAgICBzaXplX3QgdmVjdG9yU2l6ZSA9IChkZXB0aCArIGJpdHNQZXJVQ2hhciAt
IDEpIC8gYml0c1BlclVDaGFyOwogICAgIAotICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gcmVzdWx0
KHZlY3RvclNpemUpOworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0KHZlY3RvclNpemUpOwogICAg
IHJlc3VsdC5maWxsKDApOwogCiAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIGZyb20gdGhlIGJpdCBz
ZXF1ZW5jZSB3aGljaCB3ZSBjYW4gdXNlIHRvIGlkZW50aWZ5IHRoZSBjbG9uZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAJKHJldmlzaW9uIDIzMTI2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBTdHJpbmcgTG9jYWxlSUNVOjpkZWNpbWFsU3ltYm9s
KFVOdW1iZXJGCiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpIHx8IHN0YXR1cyA9PSBVX0JV
RkZFUl9PVkVSRkxPV19FUlJPUik7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1
cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CisgICAgVmVjdG9y
PFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CiAgICAgdW51bV9nZXRTeW1ib2wobV9udW1iZXJGb3JtYXQsIHN5bWJvbCwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyTGVuZ3RoLCAmc3RhdHVzKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCkBA
IC04OCw3ICs4OCw3IEBAIFN0cmluZyBMb2NhbGVJQ1U6OmRlY2ltYWxUZXh0QXR0cmlidXRlKFUK
ICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykgfHwgc3RhdHVzID09IFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IFVfQlVG
RkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgU3RyaW5n
VmVjdG9yPFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1
ZmZlcihidWZmZXJMZW5ndGgpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICB1bnVt
X2dldFRleHRBdHRyaWJ1dGUobV9udW1iZXJGb3JtYXQsIHRhZywgYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyTGVuZ3RoLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwpAQCAt
MTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0ZUZvcm1hdFBhdHRlcm4oY29uc3QK
ICAgICBpbnQzMl90IGxlbmd0aCA9IHVkYXRfdG9QYXR0ZXJuKGRhdGVGb3JtYXQsIFRSVUUsIDAs
IDAsICZzdGF0dXMpOwogICAgIGlmIChzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ig
fHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgU3RyaW5nVmVj
dG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5n
dGgpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICB1ZGF0X3RvUGF0dGVybihkYXRl
Rm9ybWF0LCBUUlVFLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgIGlmIChV
X0ZBSUxVUkUoc3RhdHVzKSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPFN0cmluZz4+IExvY2FsZUlDCiAgICAgICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF9nZXRT
eW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCAwLCAwLCAmc3RhdHVzKTsK
ICAgICAgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgICAgICBT
dHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBWZWN0b3I8VUNoYXI+
IGJ1ZmZlcihsZW5ndGgpOwogICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAg
IHVkYXRfZ2V0U3ltYm9scyhkYXRlRm9ybWF0LCB0eXBlLCBzdGFydEluZGV4ICsgaSwgYnVmZmVy
LmRhdGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KQpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0Rm9ybWF0Rm9yU2tlbGV0b24o
Y29uc3QKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50MzJfdCBsZW5ndGggPSB1
ZGF0cGdfZ2V0QmVzdFBhdHRlcm4ocGF0dGVybkdlbmVyYXRvciwgc2tlbGV0b24sIHNrZWxldG9u
TGVuZ3RoLCAwLCAwLCAmc3RhdHVzKTsKICAgICBpZiAoc3RhdHVzID09IFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SICYmIGxlbmd0aCkgewotICAgICAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZl
cihsZW5ndGgpOworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOwogICAgICAg
ICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgIHVkYXRwZ19nZXRCZXN0UGF0dGVybihw
YXR0ZXJuR2VuZXJhdG9yLCBza2VsZXRvbiwgc2tlbGV0b25MZW5ndGgsIGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCwgJnN0YXR1cyk7CiAgICAgICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0
RmluYWxQYXRoTmFtZShjb25zdCBTdHIKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZm
ZXIoTUFYX1BBVEgpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKICAgICBp
ZiAoOjpHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSwgVk9MVU1FX05BTUVfTlQpID49IE1BWF9QQVRIKSB7CiAgICAgICAgIGNsb3Nl
RmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNTAsNyArMjUwLDcg
QEAgYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbgogCiBTdHJpbmcgcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBj
b21wb25lbnQpCiB7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwor
ICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKIAogICAgIGlmIChwYXRoLmxlbmd0
aCgpICsgMSA+IGJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTM0
OSw3ICszNDksNyBAQCBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogCiBzdGF0aWMgU3RyaW5n
IHN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCiB7Ci0gICAgU3RyaW5nVmVj
dG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1B
WF9QQVRIKTsKICAgICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVyUGF0aFcoMCwgcGF0aElkZW50aWZp
ZXIgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYnVmZmVyLmRhdGEoKSkpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAgICAgYnVmZmVyLnJlc2l6ZSh3Y3NsZW4oYnVmZmVyLmRhdGEoKSkp
OwpJbmRleDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMzE4KQorKysgU291cmNlL2JtYWxsb2MvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTgtMDUtMDMgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJpbmdzIHNob3VsZCBub3Qg
YmUgYWxsb2NhdGVkIGluIGEgZ2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NTIxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBzdHJpbmcgZ2lnYWNh
Z2UuCisgICAgICAgIAorICAgICAgICBQdXR0aW5nIHN0cmluZ3MgaW4gYSBnaWdhY2FnZSBwcmV2
ZW50cyByZWFkIGdhZGdldHMuIFRoZSBvdGhlciB0aGluZ3MgdGhhdCBnZXQgdG8gYmUgaW4gZ2ln
YWNhZ2VzCisgICAgICAgIGFyZSB0aGVyZSB0byBwcmV2ZW50IHJlYWQtd3JpdGUgZ2FkZ2V0cy4K
KyAgICAgICAgCisgICAgICAgIEFsc28sIHB1dHRpbmcgc3RyaW5ncyBpbiBhIGdpZ2FjYWdlIHNl
ZW1zIHRvIGhhdmUgYmVlbiBhIGJpZ2dlciByZWdyZXNzaW9uIHRoYW4gcHV0dGluZyBvdGhlcgor
ICAgICAgICB0aGluZ3MgaW4gZ2lnYWNhZ2VzLgorICAgICAgICAKKyAgICAgICAgVGhlcmVmb3Jl
LCB0byBtYXhpbWl6ZSB0aGUgYmVuZWZpdC9jb3N0IHJhdGlvIG9mIGdpZ2FjYWdlcywgd2Ugc2hv
dWxkIGV2aWN0IHN0cmluZ3MgZnJvbSB0aGVtLiBJZgorICAgICAgICB3ZSB3YW50IHRvIHRocm93
IGF3YXkgcGVyZiBmb3Igc2VjdXJpdHksIHRoZXJlIGFyZSBtb3JlIGJlbmVmaWNpYWwgdGhpbmdz
IHRvIHNhY3JpZmljZS4KKworICAgICAgICAqIGJtYWxsb2MvR2lnYWNhZ2UuaDoKKyAgICAgICAg
KEdpZ2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdlOjpiYXNlUHRyKToKKyAgICAgICAg
KEdpZ2FjYWdlOjpzaXplKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmb3JFYWNoS2luZCk6CisgICAg
ICAgICogYm1hbGxvYy9IZWFwS2luZC5oOgorICAgICAgICAoYm1hbGxvYzo6aXNHaWdhY2FnZSk6
CisgICAgICAgIChibWFsbG9jOjpnaWdhY2FnZUtpbmQpOgorICAgICAgICAoYm1hbGxvYzo6aGVh
cEtpbmQpOgorICAgICAgICAoYm1hbGxvYzo6aXNBY3RpdmVIZWFwS2luZEFmdGVyRW5zdXJpbmdH
aWdhY2FnZSk6CisgICAgICAgIChibWFsbG9jOjptYXBUb0FjdGl2ZUhlYXBLaW5kQWZ0ZXJFbnN1
cmluZ0dpZ2FjYWdlKToKKwogMjAxOC0wNC0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBVc2UgV29yZExvY2sgaW5zdGVhZCBvZiBzdGQ6Om11dGV4
IGZvciBUaHJlYWRpbmcKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHJldmlzaW9u
IDIzMTI2MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMjQgKzM2LDIwIEBACiAjaWYgQkNQVShBUk02NCkKICNkZWZpbmUgUFJJTUlU
SVZFX0dJR0FDQUdFX1NJWkUgMHg4MDAwMDAwMGxsdQogI2RlZmluZSBKU1ZBTFVFX0dJR0FDQUdF
X1NJWkUgMHg0MDAwMDAwMGxsdQotI2RlZmluZSBTVFJJTkdfR0lHQUNBR0VfU0laRSAweDQwMDAw
MDAwbGx1CiAjZGVmaW5lIEdJR0FDQUdFX0FMTE9DQVRJT05fQ0FOX0ZBSUwgMQogI2Vsc2UKICNk
ZWZpbmUgUFJJTUlUSVZFX0dJR0FDQUdFX1NJWkUgMHg4MDAwMDAwMDBsbHUKICNkZWZpbmUgSlNW
QUxVRV9HSUdBQ0FHRV9TSVpFIDB4NDAwMDAwMDAwbGx1Ci0jZGVmaW5lIFNUUklOR19HSUdBQ0FH
RV9TSVpFIDB4NDAwMDAwMDAwbGx1CiAjZGVmaW5lIEdJR0FDQUdFX0FMTE9DQVRJT05fQ0FOX0ZB
SUwgMAogI2VuZGlmCiAKIHN0YXRpY19hc3NlcnQoYm1hbGxvYzo6aXNQb3dlck9mVHdvKFBSSU1J
VElWRV9HSUdBQ0FHRV9TSVpFKSwgIiIpOwogc3RhdGljX2Fzc2VydChibWFsbG9jOjppc1Bvd2Vy
T2ZUd28oSlNWQUxVRV9HSUdBQ0FHRV9TSVpFKSwgIiIpOwotc3RhdGljX2Fzc2VydChibWFsbG9j
Ojppc1Bvd2VyT2ZUd28oU1RSSU5HX0dJR0FDQUdFX1NJWkUpLCAiIik7CiAKICNkZWZpbmUgR0lH
QUNBR0VfU0laRV9UT19NQVNLKHNpemUpICgoc2l6ZSkgLSAxKQogCiAjZGVmaW5lIFBSSU1JVElW
RV9HSUdBQ0FHRV9NQVNLIEdJR0FDQUdFX1NJWkVfVE9fTUFTSyhQUklNSVRJVkVfR0lHQUNBR0Vf
U0laRSkKICNkZWZpbmUgSlNWQUxVRV9HSUdBQ0FHRV9NQVNLIEdJR0FDQUdFX1NJWkVfVE9fTUFT
SyhKU1ZBTFVFX0dJR0FDQUdFX1NJWkUpCi0jZGVmaW5lIFNUUklOR19HSUdBQ0FHRV9NQVNLIEdJ
R0FDQUdFX1NJWkVfVE9fTUFTSyhTVFJJTkdfR0lHQUNBR0VfU0laRSkKIAogI2lmICgoQk9TKERB
UldJTikgfHwgQk9TKExJTlVYKSkgJiYgXAogICAgIChCQ1BVKFg4Nl82NCkgfHwgKEJDUFUoQVJN
NjQpICYmICFkZWZpbmVkKF9fSUxQMzJfXykgJiYgKCFCUExBVEZPUk0oSU9TKSB8fCBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDApKSkpCkBAIC03OCwxNiArNzQsMTQg
QEAgQklOTElORSBib29sIHdhc0VuYWJsZWQoKSB7IHJldHVybiBnX3dhcwogc3RydWN0IEJhc2VQ
dHJzIHsKICAgICB2b2lkKiBwcmltaXRpdmU7CiAgICAgdm9pZCoganNWYWx1ZTsKLSAgICB2b2lk
KiBzdHJpbmc7CiB9OwogCiBlbnVtIEtpbmQgewogICAgIFByaW1pdGl2ZSwKICAgICBKU1ZhbHVl
LAotICAgIFN0cmluZwogfTsKIAotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1LaW5kcyA9
IDM7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUtpbmRzID0gMjsKIAogQkVYUE9SVCB2
b2lkIGVuc3VyZUdpZ2FjYWdlKCk7CiAKQEAgLTExMCw4ICsxMDQsNiBAQCBCSU5MSU5FIGNvbnN0
IGNoYXIqIG5hbWUoS2luZCBraW5kKQogICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CiAgICAg
Y2FzZSBKU1ZhbHVlOgogICAgICAgICByZXR1cm4gIkpTVmFsdWUiOwotICAgIGNhc2UgU3RyaW5n
OgotICAgICAgICByZXR1cm4gIlN0cmluZyI7CiAgICAgfQogICAgIEJDUkFTSCgpOwogICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTI0LDggKzExNiw2IEBAIEJJTkxJTkUgdm9pZComIGJhc2VQdHIo
QmFzZVB0cnMmIGJhc2VQdHIKICAgICAgICAgcmV0dXJuIGJhc2VQdHJzLnByaW1pdGl2ZTsKICAg
ICBjYXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiBiYXNlUHRycy5qc1ZhbHVlOwotICAgIGNh
c2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gYmFzZVB0cnMuc3RyaW5nOwogICAgIH0KICAgICBC
Q1JBU0goKTsKICAgICByZXR1cm4gYmFzZVB0cnMucHJpbWl0aXZlOwpAQCAtMTUzLDggKzE0Myw2
IEBAIEJJTkxJTkUgc2l6ZV90IHNpemUoS2luZCBraW5kKQogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihQUklNSVRJVkVfR0lHQUNBR0VfU0laRSk7CiAgICAgY2FzZSBKU1ZhbHVl
OgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZBTFVFX0dJR0FDQUdFX1NJ
WkUpOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihTVFJJTkdfR0lHQUNBR0VfU0laRSk7CiAgICAgfQogICAgIEJDUkFTSCgpOwogICAgIHJldHVy
biAwOwpAQCAtMTc1LDcgKzE2Myw2IEBAIHZvaWQgZm9yRWFjaEtpbmQoY29uc3QgRnVuYyYgZnVu
YykKIHsKICAgICBmdW5jKFByaW1pdGl2ZSk7CiAgICAgZnVuYyhKU1ZhbHVlKTsKLSAgICBmdW5j
KFN0cmluZyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwS2luZC5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0hlYXBLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMCBAQCBuYW1lc3BhY2Ug
Ym1hbGxvYyB7CiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsKICAgICBQcmltYXJ5LAogICAgIFByaW1p
dGl2ZUdpZ2FjYWdlLAotICAgIEpTVmFsdWVHaWdhY2FnZSwKLSAgICBTdHJpbmdHaWdhY2FnZQor
ICAgIEpTVmFsdWVHaWdhY2FnZQogfTsKIAotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1I
ZWFwcyA9IDQ7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUhlYXBzID0gMzsKIAogQklO
TElORSBib29sIGlzR2lnYWNhZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCiB7CkBAIC00Nyw3ICs0Niw2
IEBAIEJJTkxJTkUgYm9vbCBpc0dpZ2FjYWdlKEhlYXBLaW5kIGhlYXBLaW4KICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOgogICAgIGNh
c2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKLSAgICBjYXNlIEhlYXBLaW5kOjpTdHJpbmdH
aWdhY2FnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEJDUkFTSCgpOwpAQCAt
NjQsOCArNjIsNiBAQCBCSU5MSU5FIEdpZ2FjYWdlOjpLaW5kIGdpZ2FjYWdlS2luZChIZWFwCiAg
ICAgICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOwogICAgIGNhc2UgSGVhcEtpbmQ6OkpT
VmFsdWVHaWdhY2FnZToKICAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpKU1ZhbHVlOwotICAgIGNh
c2UgSGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlOgotICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OlN0
cmluZzsKICAgICB9CiAgICAgQkNSQVNIKCk7CiAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRp
dmU7CkBAIC03OCw4ICs3NCw2IEBAIEJJTkxJTkUgSGVhcEtpbmQgaGVhcEtpbmQoR2lnYWNhZ2U6
OktpbmQKICAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZTsKICAgICBj
YXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgogICAgICAgICByZXR1cm4gSGVhcEtpbmQ6OkpTVmFsdWVH
aWdhY2FnZTsKLSAgICBjYXNlIEdpZ2FjYWdlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBIZWFw
S2luZDo6U3RyaW5nR2lnYWNhZ2U7CiAgICAgfQogICAgIEJDUkFTSCgpOwogICAgIHJldHVybiBI
ZWFwS2luZDo6UHJpbWFyeTsKQEAgLTkwLDcgKzg0LDYgQEAgQklOTElORSBib29sIGlzQWN0aXZl
SGVhcEtpbmRBZnRlckVuc3VyaQogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgSGVhcEtp
bmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOgogICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2Fn
ZToKLSAgICBjYXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZToKICAgICAgICAgaWYgKEdpZ2Fj
YWdlOjp3YXNFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTA2LDcgKzk5LDYgQEAgQklOTElORSBIZWFwS2luZCBtYXBUb0FjdGl2
ZUhlYXBLaW5kQWZ0ZQogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgSGVhcEtpbmQ6OlBy
aW1pdGl2ZUdpZ2FjYWdlOgogICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKLSAg
ICBjYXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZToKICAgICAgICAgaWYgKEdpZ2FjYWdlOjp3
YXNFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4ga2luZDsKICAgICAgICAgcmV0dXJuIEhl
YXBLaW5kOjpQcmltYXJ5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339465</attachid>
            <date>2018-05-03 14:23:10 -0700</date>
            <delta_ts>2018-05-03 14:50:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100244</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQu
Y3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAg
KiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNv
bHZlUm9wZVRvQXRvbWljU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpyZXNvbHZlUm9wZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNy
ZWF0ZUhhc090aGVyT3duZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpT
Qzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorCiAyMDE4LTA1LTAxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHNob3VsZCBiZSBhYmxlIHRvIGNh
Y2hlIGN1c3RvbSBzZXR0ZXIgY2FsbHMgb24gdGhlIHByb3RvdHlwZSBjaGFpbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjMxMjYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExp
bWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJQ
YXJzZUludC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWZWN0b3IuaD4KIAogI2RlZmluZSBTVEFUSUNfQVNTRVJUKGNvbmQpIHN0YXRpY19hc3NlcnQo
Y29uZCwgIkpTQmlnSW50IGFzc3VtZXMgIiAjY29uZCkKIApAQCAtNTU4LDkgKzU1Nyw5IEBAIHVp
bnQ2NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmEKIAogU3RyaW5nIEpTQmlnSW50
Ojp0b1N0cmluZ0dlbmVyaWMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNCaWdJbnQqIHgsIGludCByYWRp
eCkKIHsKLSAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2FnZSBvZiBTdHJpbmdWZWN0b3Ig
aW50byBKU0JpZ0ludDo6dG9TdHJpbmcKKyAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2Fn
ZSBvZiBWZWN0b3IgaW50byBKU0JpZ0ludDo6dG9TdHJpbmcKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjcKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+
IHJlc3VsdFN0cmluZzsKKyAgICBWZWN0b3I8TENoYXI+IHJlc3VsdFN0cmluZzsKIAogICAgIEFT
U0VSVChyYWRpeCA+PSAyICYmIHJhZGl4IDw9IDM2KTsKICAgICBBU1NFUlQoIXgtPmlzWmVybygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJl
dmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDM0ICsxNzgsMzAgQEAgdm9pZCBKU1JvcGVTdHJp
bmc6OnJlc29sdmVSb3BlSW50ZXJuYWwxNgogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJv
cGVUb0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgWyZdICgpIHsK
LSAgICAgICAgaWYgKGxlbmd0aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKLSAg
ICAgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgbV92YWx1ZSA9IEF0b21p
Y1N0cmluZyhtX3ZhbHVlKTsKLSAgICAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+
aXM4Qml0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGxlbmd0
aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKKyAgICAgICAgcmVzb2x2ZVJvcGUo
ZXhlYyk7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1ZSk7CisgICAgICAg
IHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICAgICAgTENoYXIgYnVmZmVy
W21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKLSAgICAgICAgICAgIHJlc29sdmVSb3BlSW50
ZXJuYWw4KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZl
ciwgbGVuZ3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhC
aXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJbbWF4TGVu
Z3RoRm9yT25TdGFja1Jlc29sdmVdOwotICAgICAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2
KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwgbGVu
Z3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7
Ci0gICAgICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIgYnVmZmVyW21h
eExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDgo
YnVmZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmluZyhidWZmZXIsIGxlbmd0aCgp
KTsKKyAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgVUNoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsK
KyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7CisgICAgICAgIG1fdmFsdWUg
PSBBdG9taWNTdHJpbmcoYnVmZmVyLCBsZW5ndGgoKSk7CisgICAgICAgIHNldElzOEJpdChtX3Zh
bHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgIH0KIAotICAgICAgICBjbGVhckZpYmVycygpOwor
ICAgIGNsZWFyRmliZXJzKCk7CiAKLSAgICAgICAgLy8gSWYgd2UgcmVzb2x2ZWQgYSBzdHJpbmcg
dGhhdCBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgbm90aWZ5IHRoZSBoZWFwIHRoYXQgd2UndmUg
Z3Jvd24uCi0gICAgICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVl
LmltcGwoKS0+Y29zdCgpKTsKLSAgICB9KCk7Ci0gICAgCi0gICAgbV92YWx1ZS5yZWxlYXNlQXNz
ZXJ0Q2FnZWQoKTsKKyAgICAvLyBJZiB3ZSByZXNvbHZlZCBhIHN0cmluZyB0aGF0IGRpZG4ndCBw
cmV2aW91c2x5IGV4aXN0LCBub3RpZnkgdGhlIGhlYXAgdGhhdCB3ZSd2ZSBncm93bi4KKyAgICBp
ZiAobV92YWx1ZS5pbXBsKCktPmhhc09uZVJlZigpKQorICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmltcGwoKS0+Y29zdCgpKTsKIH0K
IAogdm9pZCBKU1JvcGVTdHJpbmc6OmNsZWFyRmliZXJzKCkgY29uc3QKQEAgLTI1MiwzMiArMjQ4
LDE3IEBAIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBKU1JvcGVTdHJpbmc6OnIKIAogdm9pZCBK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBb
Jl0gKCkgewotICAgICAgICBBU1NFUlQoaXNSb3BlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KGlzU3Vic3RyaW5nKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc3Vic3RyaW5nQmFzZSgpLT5p
c1JvcGUoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gc3Vic3RyaW5nQmFzZSgpLT5tX3ZhbHVl
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBzdWJzdHJpbmdCYXNlKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBM
Q2hhciogYnVmZmVyOwotICAgICAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBs
LT5jb3N0KCkpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNv
bHZlUm9wZUludGVybmFsOE5vU3Vic3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgICAgICBjbGVhckZp
YmVycygpOwotICAgICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgQVNT
RVJUKGlzUm9wZSgpKTsKKyAgICAKKyAgICBpZiAoaXNTdWJzdHJpbmcoKSkgeworICAgICAgICBB
U1NFUlQoIXN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOworICAgICAgICBtX3ZhbHVlID0gc3Vi
c3RyaW5nQmFzZSgpLT5tX3ZhbHVlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNl
dCgpLCBsZW5ndGgoKSk7CisgICAgICAgIHN1YnN0cmluZ0Jhc2UoKS5jbGVhcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBMQ2hh
ciogYnVmZmVyOwogICAgICAgICBpZiAoYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSwgYnVmZmVyKSkgewogICAgICAgICAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsK
ICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwpAQCAtMjg1LDEzICsyNjYs
MjQgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZQogICAgICAgICAg
ICAgb3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7
CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoYnVmZmVyKTsKICAgICAg
ICAgY2xlYXJGaWJlcnMoKTsKICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgfSgpOwot
Ci0gICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0Q2FnZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBVQ2hhciogYnVmZmVyOworICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpLCBidWZmZXIpKSB7CisgICAg
ICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwt
PmNvc3QoKSk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7CisgICAg
Y2xlYXJGaWJlcnMoKTsKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIAogLy8gT3ZlcnZpZXc6
IFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5n
IGluIHJvcGUgZm9ybQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHJvdGVjdGVkOgog
cHVibGljOgogICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgUmVmPFN0cmluZ0lt
cGw+JiYgdmFsdWUpCiAgICAgewotICAgICAgICB2YWx1ZS0+YXNzZXJ0Q2FnZWQoKTsKICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBzaXplX3QgY29z
dCA9IHZhbHVlLT5jb3N0KCk7CiAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCBXVEZN
b3ZlKHZhbHVlKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0
aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoVk0mIHZtLCBSZWY8U3RyaW5nSW1wbD4m
JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHZhbHVlLT5hc3NlcnRDYWdlZCgpOwogICAgICAgICBz
aXplX3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBKU1N0cmluZyogbmV3U3Ry
aW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0
cmluZyh2bSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0
aW9uKHZtLCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzAsOCArMzMwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6
OkpTVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2U7Ci0gICAgICAgIGNhc2UgR2lnYWNhZ2U6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIzMTI2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTM3IEBACisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0RlcXVlLmg6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvR2lnYWNhZ2UuaDoKKyAgICAg
ICAgKEdpZ2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdlOjpiYXNlUHRyKToKKyAgICAg
ICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlckJhc2U6OmFsbG9j
YXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6dHJ5QWxsb2NhdGVC
dWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXJCYXNlOjpyZWFsbG9jYXRlQnVmZmVy
KToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6Cisg
ICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OmZpbmRNYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNh
cGFjaXR5Pjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6cmV2ZXJz
ZUZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFwcGVuZElmTm90Q29u
dGFpbnMpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmZpbGwpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OmFwcGVuZFJhbmdlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
OjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5k
Q2FwYWNpdHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlc2l6ZSk6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6cmVzaXplVG9GaXQpOgorICAgICAgICAoV1RGOjptaW5DYXBh
Y2l0eT46OnNocmluayk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6Z3Jvdyk6CisgICAg
ICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8pOgorICAg
ICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkp
OgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAg
ICAoV1RGOjptaW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
Om1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6c2hyaW5rQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46
OmFwcGVuZCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5QXBwZW5kKToKKyAgICAg
ICAgKFdURjo6bWluQ2FwYWNpdHk+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZCk6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46
OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
Ojp0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFj
aXR5Pjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjphcHBl
bmRWZWN0b3IpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46Omluc2VydCk6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVjdG9yKToKKyAgICAgICAgKFdURjo6bWluQ2Fw
YWNpdHk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlbW92ZUZpcnN0
KToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKToKKyAg
ICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVBbGwpOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
OjpyZXZlcnNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjptYXAgY29uc3QpOgorICAg
ICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV1RGOjpt
aW5DYXBhY2l0eT46OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV1RGOjpyZW1vdmVSZXBlYXRlZEVsZW1lbnRzKToKKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y29udGFpbnMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kTWF0Y2hpbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmV2ZXJzZUZpbmQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpNYWxsb2M+OjphcHBlbmRJZk5vdENvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6ZmlsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46
OmFwcGVuZFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6ZXhwYW5kQ2Fw
YWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0
eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZVRvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Z3Jv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5TZXRJbml0aWFsQnVmZmVy
U2l6ZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXNhblNldEJ1ZmZlclNp
emVUb0Z1bGxDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6
cmVzZXJ2ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5UmVz
ZXJ2ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnNocmlua0Nh
cGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBwZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5QXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6TWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6YXBwZW5kU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxs
b2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ok1hbGxvYz46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6dW5jaGVja2VkQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6YXBwZW5kVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6aW5zZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5zZXJ0VmVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlRmlyc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYWxsb2M+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6cmVtb3ZlQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVt
b3ZlQWxsTWF0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpyZXZlcnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6bWFwIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVsZWFzZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNw
cDoKKyAgICAgICAgKFdURjo6Q1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6Cisg
ICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWZmZXI6OlN0cmluZ0J1ZmZlcik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1ZmZlcjo6flN0cmluZ0J1ZmZlcik6CisgICAgICAgIChXVEY6OlN0
cmluZ0J1ZmZlcjo6cmVzaXplKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZEludGVybmFsTm9uRW1wdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWxlYXNlQXNz
ZXJ0Q2FnZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
Ojphc3NlcnRDYWdlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
TWFsbG9jLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdNYWxsb2MuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWZWN0b3IuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQvVW5pcXVl
ZFN0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAg
KFdURjo6U3RyaW5nOjphZG9wdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6YXNzZXJ0Q2FnZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmc6OnJlbGVhc2VBc3NlcnRDYWdl
ZCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTgtMDUtMDIgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIEZvbGxvdy11cCBidWlsZCBmaXggZm9yIHIyMzEyMjMK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTBGMEY1MjZC
MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0
cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9i
YWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsK
IAkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNE
OEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CkBAIC0xNzgsOCArMTc3LDYgQEAKIAkJMDc3
Q0Q4NkExRkQ5Q0ZEMjAwODI4NTg3IC8qIExvZ2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2dnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc3Q0Q4
NkIxRkQ5Q0ZEMzAwODI4NTg3IC8qIExvZ2dlckhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2dnZXJIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRjUyNjkxRjQyMUZGODAw
NEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdNYWxs
b2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGNTI2QTFGNDIxRkY4MDA0
QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ01hbGxvYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyog
TG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxn
b3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTYwMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVF
M0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
ZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1LDcgKzE5Miw2
IEBACiAJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFz
aFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBDQjU5MUZDREYxMzMw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29yaXRobUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1ZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZC
NiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXV0b21hdGljVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA1LDEw
ICsxMjAxLDcgQEAKIAkJCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVy
LmggKi8sCiAJCQkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwICov
LAogCQkJCUE4QTQ3MzI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmggKi8sCi0JCQkJ
MEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8sCi0JCQkJMEYw
RjUyNkExRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5oICovLAogCQkJCUE4QTQ3MzJB
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKLQkJCQkwRjM0OEM3RDFG
NDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8sCiAJCQkJOTNGMTk5M0QxOUQ3OTU4
RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAogCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMw
MTI2RiAvKiBTdHJpbmdWaWV3LmggKi8sCiAJCQkJRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8q
IFN5bWJvbEltcGwuY3BwICovLApAQCAtMTUzMyw3ICsxNTI2LDYgQEAKIAkJCQlBNUJBMTVGQzE4
MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJpbmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAv
KiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYxNjkwMEQw
RDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNiBAQCBzZXQoV1RGX1BVQkxJQ19IRUFE
RVJTCiAgICAgdGV4dC9TdHJpbmdIYXNoLmgKICAgICB0ZXh0L1N0cmluZ0hhc2hlci5oCiAgICAg
dGV4dC9TdHJpbmdJbXBsLmgKLSAgICB0ZXh0L1N0cmluZ01hbGxvYy5oCiAgICAgdGV4dC9TdHJp
bmdPcGVyYXRvcnMuaAogICAgIHRleHQvU3RyaW5nVmVjdG9yLmgKICAgICB0ZXh0L1N0cmluZ1Zp
ZXcuaApAQCAtNDE1LDcgKzQxNCw2IEBAIHNldChXVEZfU09VUkNFUwogICAgIHRleHQvU3RyaW5n
QnVpbGRlci5jcHAKICAgICB0ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcAogICAgIHRleHQvU3Ry
aW5nSW1wbC5jcHAKLSAgICB0ZXh0L1N0cmluZ01hbGxvYy5jcHAKICAgICB0ZXh0L1N0cmluZ1Zp
ZXcuY3BwCiAgICAgdGV4dC9TeW1ib2xJbXBsLmNwcAogICAgIHRleHQvU3ltYm9sUmVnaXN0cnku
Y3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT47CiAK
LSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgRmFzdE1hbGxvYz4g
QnVmZmVyOworICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCdWZm
ZXI7CiAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsK
ICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRv
ckJhc2U7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoIHsgCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IEhhc2hUcmFpdHM7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBWYXJpYW50OwotdGVt
cGxhdGU8dHlwZW5hbWUsIHNpemVfdCA9IDAsIHR5cGVuYW1lID0gQ3Jhc2hPbk92ZXJmbG93LCBz
aXplX3QgPSAxNiwgdHlwZW5hbWUgPSBGYXN0TWFsbG9jPiBjbGFzcyBWZWN0b3I7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSwgc2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVf
dCA9IDE2PiBjbGFzcyBWZWN0b3I7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZT46Okhhc2gsIHR5cGVuYW1lID0gSGFzaFRyYWl0
czxWYWx1ZT4+IGNsYXNzIEhhc2hDb3VudGVkU2V0OwogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5
QXJnPjo6SGFzaCwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PiBjbGFzcyBIYXNoTWFwOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8VmFsdWVBcmc+OjpIYXNoLCB0
eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PiBjbGFzcyBIYXNoU2V0OwpJbmRleDogU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdh
Y2FnZS5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQyLDEzICs0MiwxMSBAQCBuYW1lc3BhY2UgR2lnYWNhZ2Ugewogc3RydWN0
IEJhc2VQdHJzIHsKICAgICB2b2lkKiBwcmltaXRpdmU7CiAgICAgdm9pZCoganNWYWx1ZTsKLSAg
ICB2b2lkKiBzdHJpbmc7CiB9OwogCiBlbnVtIEtpbmQgewogICAgIFByaW1pdGl2ZSwKICAgICBK
U1ZhbHVlLAotICAgIFN0cmluZwogfTsKIAogaW5saW5lIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKSB7
IH0KQEAgLTcxLDggKzY5LDYgQEAgQUxXQVlTX0lOTElORSBjb25zdCBjaGFyKiBuYW1lKEtpbmQg
a2luZAogICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CiAgICAgY2FzZSBKU1ZhbHVlOgogICAg
ICAgICByZXR1cm4gIkpTVmFsdWUiOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4g
IlN0cmluZyI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC04NSw4ICs4MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZComIGJh
c2VQdHIoQmFzZVB0cnMmIGIKICAgICAgICAgcmV0dXJuIGJhc2VQdHJzLnByaW1pdGl2ZTsKICAg
ICBjYXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiBiYXNlUHRycy5qc1ZhbHVlOwotICAgIGNh
c2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gYmFzZVB0cnMuc3RyaW5nOwogICAgIH0KICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBiYXNlUHRycy5wcmltaXRp
dmU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvVmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdHJ1Y3QgVmVjdG9yVHlw
ZU9wZXJhdGlvbnMKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBN
YWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgVmVjdG9yQnVmZmVyQmFzZSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVjdG9yQnVmZmVyQmFzZSk7CiBwdWJsaWM6CkBAIC0y
ODcsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgc2l6
ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7CiAgICAgICAgIG1f
Y2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIg
PSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjptYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAg
ICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oZmFzdE1hbGxvYyhzaXplVG9BbGxvY2F0ZSkp
OwogICAgIH0KIAogICAgIGJvb2wgdHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5
KQpAQCAtMjk3LDEyICsyOTcsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6ZW9m
KFQpOwotICAgICAgICBUKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjp0cnlN
YWxsb2Moc2l6ZVRvQWxsb2NhdGUpKTsKLSAgICAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAv
IHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBUKiBuZXdCdWZmZXI7CisgICAgICAgIGlmICh0cnlGYXN0TWFsbG9j
KHNpemVUb0FsbG9jYXRlKS5nZXRWYWx1ZShuZXdCdWZmZXIpKSB7CisgICAgICAgICAgICBtX2Nh
cGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCk7CisgICAgICAgICAgICBtX2J1ZmZl
ciA9IG5ld0J1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFJlYWxsb2NhdGVCdWZm
ZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSBjb25zdApAQCAtMzE3LDcgKzMxOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5l
d0NhcGFjaXR5ICogc2l6ZW9mKFQpOwogICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2Nh
dGUgLyBzaXplb2YoVCk7Ci0gICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KE1hbGxv
Yzo6cmVhbGxvYyhtX2J1ZmZlciwgc2l6ZVRvQWxsb2NhdGUpKTsKKyAgICAgICAgbV9idWZmZXIg
PSBzdGF0aWNfY2FzdDxUKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIHNpemVUb0FsbG9jYXRlKSk7
CiAgICAgfQogCiAgICAgdm9pZCBkZWFsbG9jYXRlQnVmZmVyKFQqIGJ1ZmZlclRvRGVhbGxvY2F0
ZSkKQEAgLTMzMCw3ICszMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NhcGFjaXR5ID0g
MDsKICAgICAgICAgfQogCi0gICAgICAgIE1hbGxvYzo6ZnJlZShidWZmZXJUb0RlYWxsb2NhdGUp
OworICAgICAgICBmYXN0RnJlZShidWZmZXJUb0RlYWxsb2NhdGUpOwogICAgIH0KIAogICAgIFQq
IGJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC0zNzEsMTMgKzM3MiwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9zaXplOyAvLyBPbmx5IHVzZWQgYnkgdGhlIFZlY3RvciBz
dWJjbGFzcywgYnV0IHBsYWNlZCBoZXJlIHRvIGF2b2lkIHBhZGRpbmcgdGhlIHN0cnVjdC4KIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogY2xh
c3MgVmVjdG9yQnVmZmVyOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNYWxsb2M+
Ci1jbGFzcyBWZWN0b3JCdWZmZXI8VCwgMCwgTWFsbG9jPiA6IHByaXZhdGUgVmVjdG9yQnVmZmVy
QmFzZTxULCBNYWxsb2M+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBWZWN0b3JCdWZm
ZXI8VCwgMD4gOiBwcml2YXRlIFZlY3RvckJ1ZmZlckJhc2U8VD4gewogcHJpdmF0ZToKLSAgICB0
eXBlZGVmIFZlY3RvckJ1ZmZlckJhc2U8VCwgTWFsbG9jPiBCYXNlOworICAgIHR5cGVkZWYgVmVj
dG9yQnVmZmVyQmFzZTxUPiBCYXNlOwogcHVibGljOgogICAgIFZlY3RvckJ1ZmZlcigpCiAgICAg
ewpAQCAtMzk3LDcgKzM5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgZGVhbGxvY2F0ZUJ1ZmZlcihi
dWZmZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXI8VCwgMCwg
TWFsbG9jPiYgb3RoZXIsIHNpemVfdCwgc2l6ZV90KQorICAgIHZvaWQgc3dhcChWZWN0b3JCdWZm
ZXI8VCwgMD4mIG90aGVyLCBzaXplX3QsIHNpemVfdCkKICAgICB7CiAgICAgICAgIHN0ZDo6c3dh
cChtX2J1ZmZlciwgb3RoZXIubV9idWZmZXIpOwogICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0
eSwgb3RoZXIubV9jYXBhY2l0eSk7CkBAIC00MzIsMTEgKzQzMywxMSBAQCBwcml2YXRlOgogICAg
IHVzaW5nIEJhc2U6Om1fY2FwYWNpdHk7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWNsYXNzIFZlY3RvckJ1ZmZlciA6
IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxULCBNYWxsb2M+IHsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK2NsYXNzIFZlY3RvckJ1ZmZlciA6IHByaXZhdGUg
VmVjdG9yQnVmZmVyQmFzZTxUPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVjdG9yQnVm
ZmVyKTsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQsIE1hbGxvYz4g
QmFzZTsKKyAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlckJhc2U8VD4gQmFzZTsKIHB1YmxpYzoKICAg
ICBWZWN0b3JCdWZmZXIoKQogICAgICAgICA6IEJhc2UoaW5saW5lQnVmZmVyKCksIGlubGluZUNh
cGFjaXR5LCAwKQpAQCAtNTk4LDExICs1OTksMTEgQEAgc3RydWN0IFVuc2FmZVZlY3Rvck92ZXJm
bG93IHsKIH07CiAKIC8vIFRlbXBsYXRlIGRlZmF1bHQgdmFsdWVzIGFyZSBpbiBGb3J3YXJkLmgu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1jbGFz
cyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgTWFsbG9j
PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorY2xhc3MgVmVjdG9yIDogcHJp
dmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5saW5l
Q2FwYWNpdHksIE1hbGxvYz4gQmFzZTsKKyAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxp
bmVDYXBhY2l0eT4gQmFzZTsKICAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5
cGVPcGVyYXRpb25zOwogCiBwdWJsaWM6CkBAIC02NjksMTIgKzY3MCwxMiBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgVmVjdG9yKGNvbnN0IFZlY3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBv
dGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3Ro
ZXJNaW5pbXVtQ2FwYWNpdHksIHR5cGVuYW1lIE90aGVyTWFsbG9jPgotICAgIGV4cGxpY2l0IFZl
Y3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91
ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIE90aGVyTWFsbG9jPiYpOworICAgIHRlbXBsYXRlPHNp
emVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXpl
X3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+CisgICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZlY3Rv
cjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1D
YXBhY2l0eT4mKTsKIAogICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpOwotICAg
IHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVo
YXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIHR5cGVuYW1lIE90aGVyTWFsbG9j
PgotICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBv
dGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eSwgT3RoZXJNYWxsb2M+
Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3Zl
cmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4KKyAgICBWZWN0b3Im
IG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0Jl
aGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+Jik7CiAKICAgICBWZWN0b3IoVmVjdG9yJiYp
OwogICAgIFZlY3RvciYgb3BlcmF0b3I9KFZlY3RvciYmKTsKQEAgLTg2NCw4ICs4NjUsOCBAQCBw
cml2YXRlOgogI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVy
KQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgYXNh
blNldEluaXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKQEAgLTg3NCw5ICs4NzUsOSBA
QCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlCiAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwg
YmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KLXRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92
ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIHR5cGVuYW1lIE90
aGVyTWFsbG9jPgotVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHks
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5LCBPdGhlck1hbGxv
Yz4mIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3RlbXBsYXRlPHNp
emVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXpl
X3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2Fw
YWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3Ro
ZXIpCiAgICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBh
c2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwpAQCAtODg1LDggKzg4Niw4
IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKICAgICAgICAgVHlw
ZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgp
LCBiZWdpbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgotVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIG90aGVy
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBvdGhl
cikKIHsKICAgICBpZiAoJm90aGVyID09IHRoaXMpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAg
LTkxMCw5ICs5MTEsOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
CiAKIGlubGluZSBib29sIHR5cGVsZXNzUG9pbnRlcnNBcmVFcXVhbChjb25zdCB2b2lkKiBhLCBj
b25zdCB2b2lkKiBiKSB7IHJldHVybiBhID09IGI7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNp
dHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1D
YXBhY2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6b3BlcmF0b3I9
KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBv
dGhlck1pbmltdW1DYXBhY2l0eSwgT3RoZXJNYWxsb2M+JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+Cit0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5h
bWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFjaXR5Pgor
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVo
YXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mIG90aGVyKQogewogICAgIC8vIElmIHRoZSBp
bmxpbmUgY2FwYWNpdGllcyBtYXRjaCwgd2Ugc2hvdWxkIGNhbGwgdGhlIG1vcmUgc3BlY2lmaWMK
ICAgICAvLyB0ZW1wbGF0ZS4gIElmIHRoZSBpbmxpbmUgY2FwYWNpdGllcyBkb24ndCBtYXRjaCwg
dGhlIHR3byBvYmplY3RzCkBAIC05MzYsMjkgKzkzNywyOSBAQCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpW
ZWN0b3IoVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+JiYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OlZlY3RvcihWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHk+JiYgb3RoZXIpCiB7CiAgICAgc3dhcChvdGhlcik7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4m
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6b3BlcmF0b3I9KFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KK2lubGluZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpvcGVyYXRvcj0oVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYmIG90aGVyKQogewogICAgIHN3YXAob3RoZXIp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29udGFpbnMoY29uc3QgVSYgdmFsdWUp
IGNvbnN0Citib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmNvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVy
biBmaW5kKHZhbHVlKSAhPSBub3RGb3VuZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1zaXplX3QgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpmaW5k
TWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKK3NpemVfdCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpmaW5k
TWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtYXRjaGVzKGF0
KGkpKSkKQEAgLTk2NywxOCArOTY4LDE4IEBAIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG8KICAgICByZXR1cm4gbm90Rm91bmQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZmluZChjb25z
dCBVJiB2YWx1ZSkgY29uc3QKK3NpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAogewog
ICAgIHJldHVybiBmaW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsKICAgICAgICAgcmV0dXJu
IGl0ZW0gPT0gdmFsdWU7CiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmV2ZXJzZUZpbmQoY29uc3Qg
VSYgdmFsdWUpIGNvbnN0CitzaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmV2ZXJzZUZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPD0gc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
Y29uc3Qgc2l6ZV90IGluZGV4ID0gc2l6ZSgpIC0gaTsKQEAgLTk4OCw5ICs5ODksOSBAQCBzaXpl
X3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvCiAgICAgcmV0dXJuIG5vdEZvdW5k
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+OjphcHBlbmRJZk5vdENvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKQorYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojph
cHBlbmRJZk5vdENvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKQogewogICAgIGlmIChjb250YWlucyh2
YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk5OCw4ICs5OTksOCBAQCBib29sIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpmaWxsKGNvbnN0IFQmIHZhbCwgc2l6ZV90IG5ld1NpemUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpmaWxsKGNvbnN0IFQmIHZhbCwgc2l6ZV90IG5ld1Np
emUpCiB7CiAgICAgaWYgKHNpemUoKSA+IG5ld1NpemUpCiAgICAgICAgIHNocmluayhuZXdTaXpl
KTsKQEAgLTEwMTYsMjIgKzEwMTcsMjIgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SAogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KLXZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBl
bmRSYW5nZShJdGVyYXRvciBzdGFydCwgSXRlcmF0b3IgZW5kKQordm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRSYW5nZShJ
dGVyYXRvciBzdGFydCwgSXRlcmF0b3IgZW5kKQogewogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBz
dGFydDsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBhcHBlbmQoKml0KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0
eSkKIHsKICAgICByZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6
bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNpdHkpLCBjYXBhY2l0eSgpICsgY2FwYWNp
dHkoKSAvIDQgKyAxKSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci1UKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5D
YXBhY2l0eSwgVCogcHRyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK1QqIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmV4
cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCogcHRyKQogewogICAgIGlmIChw
dHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgewogICAgICAgICBleHBhbmRDYXBhY2l0eShu
ZXdNaW5DYXBhY2l0eSk7CkBAIC0xMDQyLDE0ICsxMDQzLDE0IEBAIFQqIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW4KICAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90
IG5ld01pbkNhcGFjaXR5KQogewogICAgIHJldHVybiB0cnlSZXNlcnZlQ2FwYWNpdHkoc3RkOjpt
YXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4obWluQ2FwYWNp
dHkpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1jb25zdCBUKiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2NvbnN0IFQqIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUV4cGFuZENhcGFj
aXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQogewogICAgIGlmIChwdHIg
PCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFj
aXR5KG5ld01pbkNhcGFjaXR5KSkKQEAgLTEwNjIsMTYgKzEwNjMsMTYgQEAgY29uc3QgVCogVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZgogICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
aW5saW5lIFUqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBV
KiBwdHIpCitpbmxpbmUgVSogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBV
KiBwdHIpCiB7CiAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgIHJldHVy
biBwdHI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1h
bGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzaXplKHNpemVfdCBzaXplKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2l6ZShzaXplX3Qgc2l6ZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBtX3NpemUpIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRl
c3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CkBAIC0xMDg3LDE1ICsxMDg4LDE1IEBAIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICAgICBtX3NpemUgPSBzaXpl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6cmVzaXplVG9GaXQoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSkKIHsKICAgICBy
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CiAgICAgcmVzaXplKHNpemUpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6c2hy
aW5rKHNpemVfdCBzaXplKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
c2hyaW5rKHNpemVfdCBzaXplKQogewogICAgIEFTU0VSVChzaXplIDw9IG1fc2l6ZSk7CiAgICAg
VHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CkBAIC0xMTAz
LDggKzExMDQsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAg
ICAgbV9zaXplID0gc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46Omdyb3coc2l6ZV90IHNpemUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpncm93KHNpemVfdCBzaXplKQogewogICAg
IEFTU0VSVChzaXplID49IG1fc2l6ZSk7CiAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQpAQCAt
MTExNSw4ICsxMTE2LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SAogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXNhblNldEluaXRpYWxC
dWZmZXJTaXplVG8oc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZV90IHNpemUpCiB7
CiAjaWYgQVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIoKSkKQEAgLTExMzEsOCArMTEzMiw4
IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxp
bmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OmFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoc2l6ZV90IHNp
emUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhblNl
dEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eShzaXplX3Qgc2l6ZSkKIHsKICNpZiBBU0FOX0VOQUJM
RUQKICAgICBpZiAoIWJ1ZmZlcigpKQpAQCAtMTE0NSw4ICsxMTQ2LDggQEAgaW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZV90IG5ld1NpemUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdl
VG8oc2l6ZV90IG5ld1NpemUpCiB7CiAjaWYgQVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIo
KSkKQEAgLTExNTksOCArMTE2MCw4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3YKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdD
YXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2VydmVD
YXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNh
cGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNzgsOCArMTE3OSw4IEBAIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICBCYXNlOjpkZWFsbG9jYXRlQnVm
ZmVyKG9sZEJ1ZmZlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5
cGVuYW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5l
d0NhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2Jvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5UmVz
ZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkg
PD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjAxLDggKzEyMDIsOCBA
QCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5p
dGlhbENhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSkKIHsKICAg
ICBBU1NFUlQoIW1fc2l6ZSk7CiAgICAgQVNTRVJUKGNhcGFjaXR5KCkgPT0gaW5saW5lQ2FwYWNp
dHkpOwpAQCAtMTIxMCw4ICsxMjExLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdgogICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihpbml0aWFsQ2FwYWNpdHkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6c2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6c2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5l
d0NhcGFjaXR5KQogewogICAgIGlmIChuZXdDYXBhY2l0eSA+PSBjYXBhY2l0eSgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMjQxLDkgKzEyNDIsOSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dICiAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3ZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBzaXplX3QgbmV3
U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkg
ewpAQCAtMTI1OCw5ICsxMjU5LDkgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SAogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnRyeUFwcGVuZChjb25z
dCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCitib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRh
LCBzaXplX3QgZGF0YVNpemUpCiB7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRh
U2l6ZTsKICAgICBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKQEAgLTEyNzgsOSArMTI3OSw5
IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjphcHBlbmQoVSYmIHZhbHVlKQorQUxXQVlT
X0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmFwcGVuZChVJiYgdmFsdWUpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBh
Y2l0eSgpKSB7CiAgICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEp
OwpAQCAtMTI5Miw5ICsxMjkzLDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhYwogICAgIGFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
LUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4g
YXJncykKK0FMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFy
Z3MpCiB7CiAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAgICAgICAgIGFzYW5CdWZm
ZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwpAQCAtMTMwNiw5ICsxMzA3LDkgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhYwogICAgIGNvbnN0cnVjdEFuZEFw
cGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lO
TElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQor
QUxXQVlTX0lOTElORSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykK
IHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNp
emVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CkBAIC0xMzIwLDkgKzEzMjEsOSBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAgcmV0dXJuIHRyeUNvbnN0cnVj
dEFuZEFwcGVuZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxv
Yz46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kU2xvd0Nhc2UoVSYmIHZh
bHVlKQogewogICAgIEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKQEAgLTEzMzUsOSAr
MTMzNiw5IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICAr
K21fc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJn
cyYmLi4uIGFyZ3MpCit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT46OmNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3MmJi4uLiBh
cmdzKQogewogICAgIEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAKQEAgLTEzNDksOSAr
MTM1MCw5IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICAr
K21fc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uo
QXJncyYmLi4uIGFyZ3MpCitib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKEFyZ3Mm
Ji4uLiBhcmdzKQogewogICAgIEFTU0VSVChzaXplKCkgPT0gY2FwYWNpdHkoKSk7CiAgICAgCkBA
IC0xMzY4LDkgKzEzNjksOSBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dICiAvLyBUaGlzIHZlcnNpb24gb2YgYXBwZW5kIHNhdmVzIGEgYnJhbmNoIGluIHRoZSBjYXNl
IHdoZXJlIHlvdSBrbm93IHRoYXQgdGhlCiAvLyB2ZWN0b3IncyBjYXBhY2l0eSBpcyBsYXJnZSBl
bm91Z2ggZm9yIHRoZSBhcHBlbmQgdG8gc3VjY2VlZC4KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp1
bmNoZWNrZWRBcHBlbmQoVSYmIHZhbHVlKQorQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnVuY2hlY2tlZEFw
cGVuZChVJiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNpemUoKSA8IGNhcGFjaXR5KCkpOwogCkBA
IC0xMzgwLDE2ICsxMzgxLDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWMKICAgICArK21fc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PgotaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+OjphcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2YWwpCitp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjphcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNpdHk+JiB2
YWwpCiB7CiAgICAgYXBwZW5kKHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQor
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNp
emUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0g
c2l6ZSgpKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwpAQCAtMTQw
Niw5ICsxNDA3LDkgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAog
ICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgog
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6aW5zZXJ0KHNpemVfdCBw
b3NpdGlvbiwgVSYmIHZhbHVlKQoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwg
VSYmIHZhbHVlKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0
aW9uIDw9IHNpemUoKSk7CiAKQEAgLTE0MjYsMTUgKzE0MjcsMTUgQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+Ci1pbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHksIE1hbGxvYz46Omluc2VydFZlY3RvcihzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxV
LCBjPiYgdmFsKQoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVjdG9yKHNpemVfdCBwb3NpdGlvbiwgY29u
c3QgVmVjdG9yPFUsIGM+JiB2YWwpCiB7CiAgICAgaW5zZXJ0KHBvc2l0aW9uLCB2YWwuYmVnaW4o
KSwgdmFsLnNpemUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5
cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlv
bikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmUo
c2l6ZV90IHBvc2l0aW9uKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KHBvc2l0aW9uIDwgc2l6ZSgpKTsKICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwpA
QCAtMTQ0NCw4ICsxNDQ1LDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdgogICAgIC0tbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlbW92ZShzaXplX3QgcG9z
aXRpb24sIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uICsgbGVuZ3RoIDw9
IHNpemUoKSk7CkBAIC0xNDU3LDE4ICsxNDU4LDE4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3YKICAgICBtX3NpemUgLT0gbGVuZ3RoOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6cmVtb3ZlRmlyc3QoY29uc3QgVSYgdmFsdWUpCitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdChj
b25zdCBVJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVtb3ZlRmlyc3RNYXRjaGluZyhbJnZhbHVl
XSAoY29uc3QgVCYgY3VycmVudCkgewogICAgICAgICByZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsK
ICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVu
YW1lIE1hdGNoRnVuY3Rpb24+Ci1pbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJlbW92ZUZpcnN0TWF0Y2hp
bmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5kZXgpCitpbmxp
bmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHk+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMs
IHNpemVfdCBzdGFydEluZGV4KQogewogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBp
IDwgc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1hdGNoZXMoYXQoaSkpKSB7CkBAIC0xNDc5
LDE4ICsxNDgwLDE4IEBAIGlubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHks
IHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlQWxsKGNvbnN0
IFUmIHZhbHVlKQoraW5saW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZUFsbChjb25zdCBVJiB2YWx1ZSkKIHsK
ICAgICByZXR1cm4gcmVtb3ZlQWxsTWF0Y2hpbmcoWyZ2YWx1ZV0gKGNvbnN0IFQmIGN1cnJlbnQp
IHsKICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0gdmFsdWU7CiAgICAgfSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgot
aW5saW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5j
dGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5kZXgpCitpbmxpbmUgdW5zaWduZWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVtb3Zl
QWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0SW5k
ZXgpCiB7CiAgICAgaXRlcmF0b3IgaG9sZUJlZ2luID0gZW5kKCk7CiAgICAgaXRlcmF0b3IgaG9s
ZUVuZCA9IGVuZCgpOwpAQCAtMTUxNSwxNiArMTUxNiwxNiBAQCBpbmxpbmUgdW5zaWduZWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5CiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6cmV2ZXJzZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6cmV2ZXJzZSgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemUg
LyAyOyArK2kpCiAgICAgICAgIHN0ZDo6c3dhcChhdChpKSwgYXQobV9zaXplIC0gMSAtIGkpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hcEZ1
bmN0aW9uLCB0eXBlbmFtZSBSPgotaW5saW5lIFZlY3RvcjxSPiBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46Om1hcChNYXBGdW5j
dGlvbiBtYXBGdW5jdGlvbikgY29uc3QKK2lubGluZSBWZWN0b3I8Uj4gVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6bWFwKE1hcEZ1bmN0aW9u
IG1hcEZ1bmN0aW9uKSBjb25zdAogewogICAgIFZlY3RvcjxSPiByZXN1bHQ7CiAgICAgcmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSgpKTsKQEAgLTE1MzMsOCArMTUzNCw4IEBAIGlu
bGluZSBWZWN0b3I8Uj4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXQKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
Ci1pbmxpbmUgTWFsbG9jUHRyPFQ+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVsZWFzZUJ1ZmZlcigpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZWxlYXNlQnVmZmVy
KCkKIHsKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBwcmVzZXJ2ZSBhbm5vdGF0aW9ucyBv
biB0aGUgcmV0dXJuZWQgYnVmZmVyLgogICAgIC8vIEFTYW4gcmVxdWlyZXMgdGhhdCBhbGwgYW5u
b3RhdGlvbnMgYXJlIHJlbW92ZWQgYmVmb3JlIGRlYWxsb2NhdGlvbiwKQEAgLTE1NDcsNyArMTU0
OCw3IEBAIGlubGluZSBNYWxsb2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGEKICAgICAgICAg
Ly8gdGhhdCBtZWFucyBpdCB3YXMgdXNpbmcgdGhlIGlubGluZSBidWZmZXIuIEluIHRoYXQgY2Fz
ZSwKICAgICAgICAgLy8gd2UgY3JlYXRlIGEgYnJhbmQgbmV3IGJ1ZmZlciBzbyB0aGUgY2FsbGVy
IGFsd2F5cyBnZXRzIG9uZS4KICAgICAgICAgc2l6ZV90IGJ5dGVzID0gbV9zaXplICogc2l6ZW9m
KFQpOwotICAgICAgICBidWZmZXIgPSBhZG9wdE1hbGxvY1B0cihzdGF0aWNfY2FzdDxUKj4oTWFs
bG9jOjptYWxsb2MoYnl0ZXMpKSk7CisgICAgICAgIGJ1ZmZlciA9IGFkb3B0TWFsbG9jUHRyKHN0
YXRpY19jYXN0PFQqPihmYXN0TWFsbG9jKGJ5dGVzKSkpOwogICAgICAgICBtZW1jcHkoYnVmZmVy
LmdldCgpLCBkYXRhKCksIGJ5dGVzKTsKICAgICB9CiAgICAgbV9zaXplID0gMDsKQEAgLTE1NTUs
OCArMTU1Niw4IEBAIGlubGluZSBNYWxsb2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGEKICAg
ICByZXR1cm4gYnVmZmVyOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmNoZWNrQ29uc2lz
dGVuY3koKQogewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKQpAQCAtMTU2NCwxNCArMTU2NSwxNCBAQCBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgc3dhcChWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4m
IGEsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUg
dm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT4mIGEsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIGIpCiB7CiAgICAgYS5zd2FwKGIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6
ZSgpICE9IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTc5LDggKzE1ODAs
OCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhCiAgICAgcmV0dXJu
IFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojpjb21wYXJlKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5z
aXplKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBN
YWxsb2M+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgYSwgY29uc3QgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiYgYSwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpA
QCAtMTYwNCw4ICsxNjA1LDggQEAgc2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9y
VHlwZQogICAgIHJldHVybiBuZXdTaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1zaXplX3QgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz4mIHZlY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitzaXplX3Qg
cmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7CiAgICAgcmV0dXJuIHJlbW92ZVJlcGVh
dGVkRWxlbWVudHModmVjdG9yLCBbXSAoVCYgYSwgVCYgYikgeyByZXR1cm4gYSA9PSBiOyB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAy
MzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogLy8gQXRvbWljU3RyaW5nSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2ls
bCBBU1NFUlQKIC8vIGluIHRoZSBnZW5lcmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVu
Y3kKLS8vIGFzIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYnkgU3RyaW5nTWFsbG9jLgorLy8gYXMg
dGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBmYXN0TWFsbG9jLgogLy8gV2UgZG9uJ3QgY3VycmVu
dGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3QgdGhhdCBjYXNlCiAvLyBzbyB3ZSBpZ25vcmUgdGhl
IGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhbGwgQXRvbWljU3RyaW5nSW1wbHMqLgogdGVtcGxhdGU8
PiBzdHJ1Y3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAkocmV2aXNpb24gMjMxMjYzKQor
KysgU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+CiAKIG5hbWVz
cGFjZSBXVEYgewogCkBAIC0zOSw3ICszOCw3IEBAIFJlZjxDU3RyaW5nQnVmZmVyPiBDU3RyaW5n
QnVmZmVyOjpjcmVhdGUKIAogICAgIC8vIFRoZSArMSBpcyBmb3IgdGhlIHRlcm1pbmF0aW5nIG51
bGwgY2hhcmFjdGVyLgogICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKENTdHJpbmdCdWZmZXIpICsg
bGVuZ3RoICsgMTsKLSAgICBDU3RyaW5nQnVmZmVyKiBzdHJpbmdCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxDU3RyaW5nQnVmZmVyKj4oc3RyaW5nTWFsbG9jKHNpemUpKTsKKyAgICBDU3RyaW5nQnVmZmVy
KiBzdHJpbmdCdWZmZXIgPSBzdGF0aWNfY2FzdDxDU3RyaW5nQnVmZmVyKj4oZmFzdE1hbGxvYyhz
aXplKSk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0J1ZmZlcikg
Q1N0cmluZ0J1ZmZlcihsZW5ndGgpKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9D
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHJl
dmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxNCArMzAsMTIgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gQ1N0
cmluZ0J1ZmZlciBpcyB0aGUgcmVmLWNvdW50ZWQgc3RvcmFnZSBjbGFzcyBmb3IgdGhlIGNoYXJh
Y3RlcnMgaW4gYSBDU3RyaW5nLgogLy8gVGhlIGRhdGEgaXMgaW1wbGljaXRseSBhbGxvY2F0ZWQg
MSBjaGFyYWN0ZXIgbG9uZ2VyIHRoYW4gbGVuZ3RoKCksIGFzIGl0IGlzIHplcm8tdGVybWluYXRl
ZC4KIGNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDU3RyaW5nQnVmZmVy
PiB7Ci0gICAgV1RGX01BS0VfU1RSSU5HX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBjb25zdCBj
aGFyKiBkYXRhKCkgeyByZXR1cm4gbXV0YWJsZURhdGEoKTsgfQogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIFN0cmluZ0J1
ZmZlcl9oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ01hbGxvYy5oPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx1bmljb2RlL3V0
eXBlcy5oPgogCkBAIC00MiwxMyArNDEsMTMgQEAgY2xhc3MgU3RyaW5nQnVmZmVyIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBTdHJpbmdCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQogICAgICAgICA6
IG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGEobV9sZW5ndGggPyBzdGF0aWNfY2Fz
dDxDaGFyVHlwZSo+KHN0cmluZ01hbGxvYygoQ2hlY2tlZDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNp
emVvZihDaGFyVHlwZSkpLnVuc2FmZUdldCgpKSkgOiBudWxscHRyKQorICAgICAgICAsIG1fZGF0
YShtX2xlbmd0aCA/IHN0YXRpY19jYXN0PENoYXJUeXBlKj4oZmFzdE1hbGxvYygoQ2hlY2tlZDxz
aXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihDaGFyVHlwZSkpLnVuc2FmZUdldCgpKSkgOiBudWxs
cHRyKQogICAgIHsKICAgICB9CiAKICAgICB+U3RyaW5nQnVmZmVyKCkKICAgICB7Ci0gICAgICAg
IHN0cmluZ0ZyZWUobV9kYXRhKTsKKyAgICAgICAgZmFzdEZyZWUobV9kYXRhKTsKICAgICB9CiAK
ICAgICB2b2lkIHNocmluayh1bnNpZ25lZCBuZXdMZW5ndGgpCkBAIC02Miw3ICs2MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBp
ZiAobmV3TGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6
ZW9mKFVDaGFyKSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgbV9kYXRh
ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihzdHJpbmdSZWFsbG9jKG1fZGF0YSwgbmV3TGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSkpOworICAgICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihmYXN0UmVhbGxvYyhtX2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICAg
ICAgfQogICAgICAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw5IEBACiAj
aW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
eW1ib2xJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuaD4KQEAgLTEz
MSw3ICsxMjksNyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgaWYgKG93bmVyc2hp
cCA9PSBCdWZmZXJPd25lZCkgewogICAgICAgICAvLyBXZSB1c2UgbV9kYXRhOCwgYnV0IHNpbmNl
IGl0IGlzIGEgdW5pb24gd2l0aCBtX2RhdGExNiB0aGlzIHdvcmtzIGVpdGhlciB3YXkuCiAgICAg
ICAgIEFTU0VSVChtX2RhdGE4KTsKLSAgICAgICAgc3RyaW5nRnJlZShjb25zdF9jYXN0PExDaGFy
Kj4obV9kYXRhOCkpOworICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PExDaGFyKj4obV9kYXRh
OCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDMsNyArMTQxLDcgQEAgU3RyaW5n
SW1wbDo6flN0cmluZ0ltcGwoKQogdm9pZCBTdHJpbmdJbXBsOjpkZXN0cm95KFN0cmluZ0ltcGwq
IHN0cmluZ0ltcGwpCiB7CiAgICAgc3RyaW5nSW1wbC0+flN0cmluZ0ltcGwoKTsKLSAgICBzdHJp
bmdGcmVlKHN0cmluZ0ltcGwpOworICAgIGZhc3RGcmVlKHN0cmluZ0ltcGwpOwogfQogCiBSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQpAQCAtMTkwLDcgKzE4OCw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSAKICAgICAvLyBoZWFwIGFsbG9jYXRpb24gZnJv
bSB0aGlzIGNhbGwuCiAgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihDaGFyYWN0ZXJUeXBl
KSkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wbCo+KHN0cmluZ01hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBl
PihsZW5ndGgpKSk7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkp
OwogCiAgICAgZGF0YSA9IHN0cmluZy0+dGFpbFBvaW50ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKICAg
ICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhcmFjdGVyVHlwZT4oKnN0cmluZywgbGVuZ3Ro
KTsKQEAgLTIxNiwxMiArMjE0LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGlubGluZSAKICAgICAgICAgcmV0dXJuICplbXB0eSgpOwogICAgIH0KIAotICAgIC8vIFNhbWUg
YXMgY3JlYXRlVW5pbml0aWFsaXplZCgpIGV4Y2VwdCBoZXJlIHdlIHVzZSBzdHJpbmdSZWFsbG9j
LgorICAgIC8vIFNhbWUgYXMgY3JlYXRlVW5pbml0aWFsaXplZCgpIGV4Y2VwdCBoZXJlIHdlIHVz
ZSBmYXN0UmVhbGxvYy4KICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKENoYXJhY3RlclR5
cGUpKSkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIG9yaWdpbmFsU3RyaW5nLT5+U3RyaW5nSW1w
bCgpOwotICAgIGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihzdHJpbmdS
ZWFsbG9jKCZvcmlnaW5hbFN0cmluZy5sZWFrUmVmKCksIGFsbG9jYXRpb25TaXplPENoYXJhY3Rl
clR5cGU+KGxlbmd0aCkpKTsKKyAgICBhdXRvKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXBsKj4oZmFzdFJlYWxsb2MoJm9yaWdpbmFsU3RyaW5nLmxlYWtSZWYoKSwgYWxsb2NhdGlvblNp
emU8Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkpOwogCiAgICAgZGF0YSA9IHN0cmluZy0+dGFpbFBv
aW50ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKICAgICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hh
cmFjdGVyVHlwZT4oKnN0cmluZywgbGVuZ3RoKTsKQEAgLTE4ODUsMTQgKzE4ODMsNCBAQCBib29s
IGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFVDaGFyKiBhCiAgICAgcmV0dXJuICFtZW1jbXAo
YSwgYi0+Y2hhcmFjdGVyczE2KCksIGItPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiB9CiAK
LXZvaWQgU3RyaW5nSW1wbDo6cmVsZWFzZUFzc2VydENhZ2VkKCkgY29uc3QKLXsKLSAgICBpZiAo
aXNTdGF0aWMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFHSUdBQ0FH
RV9FTkFCTEVEIHx8IEdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdlOjpTdHJpbmcsIHRoaXMpKTsK
LSAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyT3duZWQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBSRUxFQVNFX0FTU0VSVCghR0lHQUNBR0VfRU5BQkxFRCB8fCBHaWdhY2FnZTo6aXND
YWdlZChHaWdhY2FnZTo6U3RyaW5nLCBtX2RhdGE4KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ29udmVyc2lvbk1vZGUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb21tb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWZWN0b3IuaD4KIAogI2lmIFVTRShDRikKIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0cmluZ1JlZjsKQEAgLTE1Nyw3ICsx
NTYsNyBAQCBwcm90ZWN0ZWQ6CiAvLyBSaWdodCBub3cgd2UgdXNlIGEgbWl4IG9mIGJvdGgsIHdo
aWNoIG1ha2VzIGNvZGUgbW9yZSBjb25mdXNpbmcgYW5kIGhhcyBubyBiZW5lZml0LgogCiBjbGFz
cyBTdHJpbmdJbXBsIDogcHJpdmF0ZSBTdHJpbmdJbXBsU2hhcGUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9TVFJJTkdfQUxMT0NBVEVEOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IAogICAgIGZyaWVuZCBjbGFzcyBBdG9taWNTdHJpbmdJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBK
U0M6OkxMSW50OjpEYXRhOwpAQCAtMjU3LDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBs
LCBtX2RhdGE4KTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KLSAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ1ZlY3RvcjxD
aGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT4mJik7CisgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8Q2hhcmFjdGVy
VHlwZSwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYpOwog
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRvcHQoU3Ry
aW5nQnVmZmVyPFVDaGFyPiYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxT
dHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYpOwpAQCAtNDcwLDkgKzQ2OSw2
IEBAIHB1YmxpYzoKIAogICAgIEJ1ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYg
c19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCk7IH0KICAgICAKLSAgICB2b2lkIGFzc2VydENhZ2Vk
KCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVsZWFzZUFzc2VydENhZ2Vk
KCkgY29uc3Q7Ci0KIHByb3RlY3RlZDoKICAgICB+U3RyaW5nSW1wbCgpOwogCkBAIC01MjYsNyAr
NTIyLDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5nSW1wbCkgPT0gc2l6ZQogI2lmICFB
U1NFUlRfRElTQUJMRUQKIAogLy8gU3RyaW5nSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmlu
Z0ltcGwgd2lsbCBBU1NFUlQgaW4gdGhlIGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hlY2tDb25z
aXN0ZW5jeQotLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBzdHJpbmdNYWxsb2MuIFdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSB3YXkgdG8gZGV0ZWN0IHRoYXQgY2FzZQorLy8gYXMg
dGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBmYXN0TWFsbG9jLiBXZSBkb24ndCBjdXJyZW50bHkg
aGF2ZSBhbnkgd2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKIC8vIHNvIHdlIGlnbm9yZSB0aGUgY29u
c2lzdGVuY3kgY2hlY2sgZm9yIGFsbCBTdHJpbmdJbXBsKi4KIHRlbXBsYXRlPD4gc3RydWN0IFZh
bHVlQ2hlY2s8U3RyaW5nSW1wbCo+IHsKICAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KGNvbnN0IFN0cmluZ0ltcGwqKSB7IH0KQEAgLTkyNCw3ICs5MjAsNyBAQCBBTFdBWVNfSU5MSU5F
IFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgYXV0byogb3duZXJSZXAgPSAoKHJlcC5i
dWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLnN1YnN0cmluZ0J1ZmZl
cigpIDogJnJlcCk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5z
IGJvdGggdGhlIFN0cmluZ0ltcGwgc3RydWN0IGFzIHdlbGwgYXMgdGhlIHBvaW50ZXIgdG8gdGhl
IG93bmVyIHN0cmluZy4KLSAgICBhdXRvKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KHN0cmluZ01hbGxvYyhhbGxvY2F0aW9uU2l6ZTxTdHJpbmdJbXBsKj4oMSkpKTsKKyAg
ICBhdXRvKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2Mo
YWxsb2NhdGlvblNpemU8U3RyaW5nSW1wbCo+KDEpKSk7CiAgICAgaWYgKHJlcC5pczhCaXQoKSkK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmlu
Z0ltcGwocmVwLm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwgKm93bmVyUmVwKSk7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLm1f
ZGF0YTE2ICsgb2Zmc2V0LCBsZW5ndGgsICpvd25lclJlcCkpOwpAQCAtOTQ5LDggKzk0NSw4IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU18KICAgICAgICAgb3V0cHV0
ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGF1dG8qIHJl
c3VsdCA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPih0cnlTdHJpbmdNYWxsb2MoYWxsb2NhdGlv
blNpemU8Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkpOwotICAgIGlmICghcmVzdWx0KSB7CisgICAg
U3RyaW5nSW1wbCogcmVzdWx0OworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6
ZTxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKS5nZXRWYWx1ZShyZXN1bHQpKSB7CiAgICAgICAgIG91
dHB1dCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTk2MCw3
ICs5NTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1pbmxpbmUgUmVm
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBl
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3Ip
CitpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFZlY3RvcjxDaGFyYWN0
ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2
ZWN0b3IpCiB7CiAgICAgaWYgKHNpemVfdCBzaXplID0gdmVjdG9yLnNpemUoKSkgewogICAgICAg
ICBBU1NFUlQodmVjdG9yLmRhdGEoKSk7CkBAIC0xMDc0LDEyICsxMDcwLDYgQEAgaW5saW5lIFVD
aGFyIFN0cmluZ0ltcGw6OmF0KHVuc2lnbmVkIGkpIAogICAgIHJldHVybiBpczhCaXQoKSA/IG1f
ZGF0YThbaV0gOiBtX2RhdGExNltpXTsKIH0KIAotaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6YXNz
ZXJ0Q2FnZWQoKSBjb25zdAotewotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICBy
ZWxlYXNlQXNzZXJ0Q2FnZWQoKTsKLX0KLQogaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwo
Q3JlYXRlU3ltYm9sVGFnLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hh
cmFjdGVycywgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdTeW1ib2wgfCBCdWZmZXJTdWJz
dHJpbmcpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdNYWxsb2MuY3BwCShyZXZpc2lv
biAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHJpbmdNYWxs
b2MuaCIKLQotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLSNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KLSNpbmNsdWRlIDx3dGYvUmF3UG9pbnRl
ci5oPgotCi0jaWYgIShkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01B
TExPQykKLSNpbmNsdWRlIDxibWFsbG9jL2JtYWxsb2MuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotI2lmIGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFM
TE9DCi12b2lkKiB0cnlTdHJpbmdNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIEZh
c3RNYWxsb2M6OnRyeU1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCogc3RyaW5nTWFsbG9jKHNpemVf
dCBzaXplKQotewotICAgIHJldHVybiBmYXN0TWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBzdHJp
bmdSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBmYXN0UmVhbGxv
YyhwLCBzaXplKTsKLX0KLQotdm9pZCBzdHJpbmdGcmVlKHZvaWQqIHApCi17Ci0gICAgcmV0dXJu
IGZhc3RGcmVlKHApOwotfQotI2Vsc2UKLXZvaWQqIHRyeVN0cmluZ01hbGxvYyhzaXplX3Qgc2l6
ZSkKLXsKLSAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxvYzo6
SGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlKTsKLX0KLQotdm9pZCogc3RyaW5nTWFsbG9jKHNpemVf
dCBzaXplKQotewotICAgIHJldHVybiBibWFsbG9jOjphcGk6Om1hbGxvYyhzaXplLCBibWFsbG9j
OjpIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2UpOwotfQotCi12b2lkKiBzdHJpbmdSZWFsbG9jKHZv
aWQqIHAsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBibWFsbG9jOjphcGk6OnJlYWxsb2Mo
cCwgc2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlKTsKLX0KLQotdm9pZCBz
dHJpbmdGcmVlKHZvaWQqIHApCi17Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKFVOTElLRUxZKCFHaWdhY2FnZTo6aXNDYWdlZChHaWdhY2FnZTo6U3RyaW5nLCBwKSkpIHsK
LSAgICAgICAgZGF0YUxvZygiVHJ5aW5nIHRvIGZyZWUgc3RyaW5nIHRoYXQgaXMgbm90IGNhZ2Vk
OiAiLCBSYXdQb2ludGVyKHApLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBL
aW5kOjpTdHJpbmdHaWdhY2FnZSk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nTWFsbG9jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdNYWxsb2MuaAkocmV2aXNpb24gMjMxMjYzKQorKysg
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdNYWxsb2MuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDgz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeVN0cmluZ01hbGxvYyhzaXplX3Qp
OwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHN0cmluZ01hbGxvYyhzaXplX3QpOwotV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHN0cmluZ1JlYWxsb2Modm9pZCosIHNpemVfdCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzdHJpbmdGcmVlKHZvaWQqKTsKLQotI2RlZmluZSBXVEZfTUFLRV9T
VFJJTkdfQUxMT0NBVEVEIFwKLXB1YmxpYzogXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXpl
X3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNp
emVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCi0gICAgXAotICAgIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3Qgc2l6ZSkgXAotICAgIHsgXAotICAgICAgICByZXR1cm4gOjpXVEY6OnN0cmlu
Z01hbGxvYyhzaXplKTsgXAotICAgIH0gXAotICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkKiBwKSBcCi0gICAgeyBcCi0gICAgICAgIDo6V1RGOjpzdHJpbmdGcmVlKHApOyBcCi0g
ICAgfSBcCi0gICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplKSBcCi0g
ICAgeyBcCi0gICAgICAgIHJldHVybiA6OldURjo6c3RyaW5nTWFsbG9jKHNpemUpOyBcCi0gICAg
fSBcCi0gICAgXAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgXAotICAgIHsg
XAotICAgICAgICA6OldURjo6c3RyaW5nRnJlZShwKTsgXAotICAgIH0gXAotICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxUYWcsIHZvaWQqIGxvY2F0aW9uKSBcCi0gICAgeyBc
Ci0gICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwKLSAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBc
Ci0gICAgfSBcCi1wcml2YXRlOiBcCi10eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNl
bWljb2xvbkFmdGVyVGhpc01hY3JvCi0KLQotc3RydWN0IFN0cmluZ01hbGxvYyB7Ci0gICAgc3Rh
dGljIHZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkgeyByZXR1cm4gc3RyaW5nTWFsbG9jKHNpemUp
OyB9Ci0gICAgc3RhdGljIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkgeyByZXR1cm4gdHJ5
U3RyaW5nTWFsbG9jKHNpemUpOyB9Ci0gICAgc3RhdGljIHZvaWQqIHJlYWxsb2Modm9pZCogcCwg
c2l6ZV90IHNpemUpIHsgcmV0dXJuIHN0cmluZ1JlYWxsb2MocCwgc2l6ZSk7IH0KLSAgICBzdGF0
aWMgdm9pZCBmcmVlKHZvaWQqIHApIHsgc3RyaW5nRnJlZShwKTsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6U3RyaW5nTWFsbG9jOwotdXNpbmcgV1RGOjpzdHJpbmdN
YWxsb2M7Ci11c2luZyBXVEY6OnN0cmluZ1JlYWxsb2M7Ci11c2luZyBXVEY6OnN0cmluZ0ZyZWU7
Ci11c2luZyBXVEY6OnRyeVN0cmluZ01hbGxvYzsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdW
ZWN0b3IuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdW
ZWN0b3IuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
ID0gMCwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93LCBzaXplX3Qg
bWluQ2FwYWNpdHkgPSAxNj4gdXNpbmcgU3RyaW5nVmVjdG9yID0gVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBTdHJpbmdNYWxsb2M+OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpTdHJpbmdWZWN0b3I7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N5bWJvbEltcGwuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYv
dGV4dC9TeW1ib2xJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBpbmxp
bmUgUmVnaXN0ZXJlZFN5bWJvbEltcGwqIFN5bWJvbEltcGw6CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogLy8gU3ltYm9sSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NF
UlQKIC8vIGluIHRoZSBnZW5lcmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kKLS8v
IGFzIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYnkgc3RyaW5nTWFsbG9jLgorLy8gYXMgdGhleSBh
cmUgbm90IGFsbG9jYXRlZCBieSBmYXN0TWFsbG9jLgogLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhh
dmUgYW55IHdheSB0byBkZXRlY3QgdGhhdCBjYXNlCiAvLyBzbyB3ZSBpZ25vcmUgdGhlIGNvbnNp
c3RlbmN5IGNoZWNrIGZvciBhbGwgU3ltYm9sSW1wbHMqLgogdGVtcGxhdGU8PiBzdHJ1Y3QKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIzMTI2
MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
Ly8gVW5pcXVlZFN0cmluZ0ltcGxzIGNyZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJbXBsIHdpbGwg
QVNTRVJUCiAvLyBpbiB0aGUgZ2VuZXJpYyBWYWx1ZUNoZWNrPFQ+OjpjaGVja0NvbnNpc3RlbmN5
Ci0vLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IHN0cmluZ01hbGxvYy4KKy8vIGFzIHRo
ZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYnkgZmFzdE1hbGxvYy4KIC8vIFdlIGRvbid0IGN1cnJlbnRs
eSBoYXZlIGFueSB3YXkgdG8gZGV0ZWN0IHRoYXQgY2FzZQogLy8gc28gd2UgaWdub3JlIHRoZSBj
b25zaXN0ZW5jeSBjaGVjayBmb3IgYWxsIFVuaXF1ZWRTdHJpbmdJbXBscyouCiB0ZW1wbGF0ZTw+
IHN0cnVjdApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAyMzEyNjMpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
NyArMTQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVy
PExDaGFyPiYmIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShidWZm
ZXIpKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYmIGJ1
ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsgfQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IFN0cmluZyBhZG9wdChTdHJpbmdWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgdmVjdG9yKSB7IHJldHVybiBTdHJpbmdJ
bXBsOjphZG9wdChXVEZNb3ZlKHZlY3RvcikpOyB9CisgICAgc3RhdGljIFN0cmluZyBhZG9wdChW
ZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+JiYgdmVjdG9yKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHZl
Y3RvcikpOyB9CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0K
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsIHx8IG1faW1wbC0+aXNF
bXB0eSgpOyB9CkBAIC0zNjQsOSArMzY0LDYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgaXMgdXNl
ZnVsIGZvciBjbGVhcmluZyBTdHJpbmctYmFzZWQgY2FjaGVzLgogICAgIHZvaWQgY2xlYXJJbXBs
SWZOb3RTaGFyZWQoKTsKIAotICAgIHZvaWQgYXNzZXJ0Q2FnZWQoKSBjb25zdDsKLSAgICB2b2lk
IHJlbGVhc2VBc3NlcnRDYWdlZCgpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVtb3ZlSW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVy
VHlwZSosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gdm9pZCBhcHBlbmRJbnRlcm5hbChDaGFyYWN0ZXJUeXBlKTsKQEAgLTU3MiwxOCAr
NTY5LDYgQEAgaW5saW5lIHZvaWQgU3RyaW5nOjpjbGVhckltcGxJZk5vdFNoYXJlZAogICAgICAg
ICBtX2ltcGwgPSBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBTdHJpbmc6OmFzc2VydENhZ2Vk
KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmFzc2VydENhZ2Vk
KCk7Ci19Ci0KLWlubGluZSB2b2lkIFN0cmluZzo6cmVsZWFzZUFzc2VydENhZ2VkKCkgY29uc3QK
LXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnJlbGVhc2VBc3NlcnRDYWdlZCgp
OwotfQotCiAjaWZkZWYgX19PQkpDX18KIAogaW5saW5lIFN0cmluZzo6b3BlcmF0b3IgTlNTdHJp
bmcgKigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0w
NS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZ3Mg
c2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgaW4gYSBnaWdhY2FnZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3
IGJlaGF2aW9yLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlh
bGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlS2V5KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVT
cGFjZXMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
ZXI6OnRha2VSZW1haW5pbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2VyaWFsaXplVVJMRW5jb2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VVJM
UGFyc2VyOjpzZXJpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvdXJDQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b3VyQ0M6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpS
ZXBsaWNhU3RhdGU6OmNsb25lSUQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUlDVTo6ZGVjaW1hbFN5bWJvbCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6OmRlY2ltYWxUZXh0QXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldERhdGVGb3JtYXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsZUlDVTo6Y3JlYXRlTGFiZWxWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Rm9y
bWF0Rm9yU2tlbGV0b24pOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW06OmdldEZpbmFsUGF0aE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW06OnN0b3JhZ2VEaXJlY3RvcnkpOgorCiAyMDE4LTA1
LTAyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgTmV0
d29ya0xvYWRDaGVja2VyIGZvciBuYXZpZ2F0aW9uIGxvYWRzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
Niw3ICszMjYsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVLZXkoY29uc3QgdWludDhfdComIGRhCiAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZW5kIC0gZGF0YSkgPCBsZW5ndGggKiAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hh
cj4gYnVmZmVyOworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKICAgICAgICAgYnVmZmVy
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdWludDE2X3QgY2g7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDMsNyArMTk0Myw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHN0ciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IFVDaGFyKj4ocHRyKSwgbGVuZ3RoKTsKICAgICAgICAgcHRyICs9IGxlbmd0aCAqIHNpemVvZihV
Q2hhcik7CiAjZWxzZQotICAgICAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICAg
ICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CiAgICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICB1aW50MTZfdCBjaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHN0YXRpYyB2b2lk
IG5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcmIHRleHQKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5z
aWduZWQgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFy
PiBjaGFyVmVjdG9yKHRleHRMZW5ndGgpOworICAgIFZlY3RvcjxVQ2hhcj4gY2hhclZlY3Rvcih0
ZXh0TGVuZ3RoKTsKICAgICBTdHJpbmdWaWV3KHRleHQpLmdldENoYXJhY3RlcnNXaXRoVXBjb252
ZXJ0KGNoYXJWZWN0b3IuZGF0YSgpKTsKIAogICAgIGNoYXJWZWN0b3JbaSsrXSA9ICcgJzsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgdGFrZVJlbWFpbmluZ1doaXRlc3BhY2UoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFpc0VtcHR5KCkpOwotICAgICAgICBTdHJpbmdWZWN0b3I8TENoYXIsIDg+IHdoaXRlc3BhY2U7
CisgICAgICAgIFZlY3RvcjxMQ2hhciwgOD4gd2hpdGVzcGFjZTsKICAgICAgICAgZG8gewogICAg
ICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV90ZXh0WzBdOwogICAgICAgICAgICAgaWYgKGlz
SFRNTFNwYWNlKGNoYXJhY3RlcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNl
ci5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw3ICs1MzgsNyBAQCBib29sIFVSTFBhcnNl
cjo6c2hvdWxkQ29weUZpbGVVUkwoQ29kZVBvCiAgICAgcmV0dXJuICFpc1NsYXNoUXVlc3Rpb25P
ckhhc2goKml0ZXJhdG9yKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyY2VudEVuY29kZUJ5dGUodWlu
dDhfdCBieXRlLCBTdHJpbmdWZWN0b3I8TENoYXI+JiBidWZmZXIpCitzdGF0aWMgdm9pZCBwZXJj
ZW50RW5jb2RlQnl0ZSh1aW50OF90IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAg
ICBidWZmZXIuYXBwZW5kKCclJyk7CiAgICAgYnVmZmVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVND
SUlIZXhEaWdpdChieXRlKSk7CkBAIC0yODE0LDcgKzI4MTQsNyBAQCBhdXRvIFVSTFBhcnNlcjo6
cGFyc2VVUkxFbmNvZGVkRm9ybShTdHJpCiAgICAgcmV0dXJuIG91dHB1dDsKIH0KIAotc3RhdGlj
IHZvaWQgc2VyaWFsaXplVVJMRW5jb2RlZEZvcm0oY29uc3QgU3RyaW5nJiBpbnB1dCwgU3RyaW5n
VmVjdG9yPExDaGFyPiYgb3V0cHV0KQorc3RhdGljIHZvaWQgc2VyaWFsaXplVVJMRW5jb2RlZEZv
cm0oY29uc3QgU3RyaW5nJiBpbnB1dCwgVmVjdG9yPExDaGFyPiYgb3V0cHV0KQogewogICAgIGF1
dG8gdXRmOCA9IGlucHV0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgY29uc3QgY2hhciog
ZGF0YSA9IHV0ZjguZGF0YSgpOwpAQCAtMjg0MCw3ICsyODQwLDcgQEAgU3RyaW5nIFVSTFBhcnNl
cjo6c2VyaWFsaXplKGNvbnN0IFVSTEVuYwogICAgIGlmICh0dXBsZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgU3RyaW5nVmVjdG9yPExDaGFyPiBvdXRwdXQ7CisgICAg
VmVjdG9yPExDaGFyPiBvdXRwdXQ7CiAgICAgZm9yIChhdXRvJiB0dXBsZSA6IHR1cGxlcykgewog
ICAgICAgICBpZiAoIW91dHB1dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCcmJyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjMx
MjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgc3RkOjpvcHRpb25hbDx1
aW50MTZfdD4gZGVmYXVsdFBvcnRGb3JQcm90b2NvbChTdHJpbmdWaWV3KTsKIAogICAgIFVSTCBt
X3VybDsKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+IG1fYXNjaWlCdWZmZXI7CisgICAgVmVjdG9y
PExDaGFyPiBtX2FzY2lpQnVmZmVyOwogICAgIGJvb2wgbV91cmxJc1NwZWNpYWwgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV91cmxJc0ZpbGUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9ob3N0SGFzUGVy
Y2VudE9yTm9uQVNDSUkgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm91ckNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb3VyQ0MuY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm91ckNDPiBGb3VyQ0M6OmZyb21TdHJpbmcKIAogU3RyaW5n
IEZvdXJDQzo6dG9TdHJpbmcoKSBjb25zdAogewotICAgIFN0cmluZ1ZlY3RvcjxMQ2hhciwgND4g
ZGF0YSA9IHsKKyAgICBWZWN0b3I8TENoYXIsIDQ+IGRhdGEgPSB7CiAgICAgICAgIExDaGFyKHZh
bHVlID4+IDI0KSwKICAgICAgICAgTENoYXIoKHZhbHVlID4+IDE2KSAmIDB4RkYpLAogICAgICAg
ICBMQ2hhcigodmFsdWUgPj4gOCkgJiAweEZGKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkocmV2aXNp
b24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAgR3JhcGhp
Y3NMYXllckNBOjpDbG9uZUlEIEdyYXBoaWNzTGF5ZXJDQQogICAgIGNvbnN0IHNpemVfdCBiaXRz
UGVyVUNoYXIgPSBzaXplb2YoVUNoYXIpICogODsKICAgICBzaXplX3QgdmVjdG9yU2l6ZSA9IChk
ZXB0aCArIGJpdHNQZXJVQ2hhciAtIDEpIC8gYml0c1BlclVDaGFyOwogICAgIAotICAgIFN0cmlu
Z1ZlY3RvcjxVQ2hhcj4gcmVzdWx0KHZlY3RvclNpemUpOworICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0KHZlY3RvclNpemUpOwogICAgIHJlc3VsdC5maWxsKDApOwogCiAgICAgLy8gQ3JlYXRlIGEg
c3RyaW5nIGZyb20gdGhlIGJpdCBzZXF1ZW5jZSB3aGljaCB3ZSBjYW4gdXNlIHRvIGlkZW50aWZ5
IHRoZSBjbG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNV
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlD
VS5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxlSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBTdHJpbmcgTG9j
YWxlSUNVOjpkZWNpbWFsU3ltYm9sKFVOdW1iZXJGCiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0
dXMpIHx8IHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CiAgICAgaWYgKFVfRkFJ
TFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyKGJ1ZmZl
ckxlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKICAgICBz
dGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgdW51bV9nZXRTeW1ib2wobV9udW1iZXJGb3JtYXQs
IHN5bWJvbCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCAmc3RhdHVzKTsKICAgICBpZiAo
VV9GQUlMVVJFKHN0YXR1cykpCkBAIC04OCw3ICs4OCw3IEBAIFN0cmluZyBMb2NhbGVJQ1U6OmRl
Y2ltYWxUZXh0QXR0cmlidXRlKFUKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykgfHwgc3Rh
dHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykgJiYgc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsK
KyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwogICAgIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKICAgICB1bnVtX2dldFRleHRBdHRyaWJ1dGUobV9udW1iZXJGb3JtYXQsIHRh
ZywgYnVmZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9T
VUNDRVNTKHN0YXR1cykpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0
ZUZvcm1hdFBhdHRlcm4oY29uc3QKICAgICBpbnQzMl90IGxlbmd0aCA9IHVkYXRfdG9QYXR0ZXJu
KGRhdGVGb3JtYXQsIFRSVUUsIDAsIDAsICZzdGF0dXMpOwogICAgIGlmIChzdGF0dXMgIT0gVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1IgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICBWZWN0
b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOwogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAg
ICB1ZGF0X3RvUGF0dGVybihkYXRlRm9ybWF0LCBUUlVFLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgs
ICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKQEAgLTE3NSw3ICsxNzUsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IExvY2FsZUlDCiAgICAgICAgIGludDMy
X3QgbGVuZ3RoID0gdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXgg
KyBpLCAwLCAwLCAmc3RhdHVzKTsKICAgICAgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUikKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxT
dHJpbmc+PigpOwotICAgICAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOwor
ICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOwogICAgICAgICBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CiAgICAgICAgIHVkYXRfZ2V0U3ltYm9scyhkYXRlRm9ybWF0LCB0eXBlLCBz
dGFydEluZGV4ICsgaSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKICAgICAgICAg
aWYgKFVfRkFJTFVSRShzdGF0dXMpKQpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBTdHJpbmcg
Z2V0Rm9ybWF0Rm9yU2tlbGV0b24oY29uc3QKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAg
ICAgaW50MzJfdCBsZW5ndGggPSB1ZGF0cGdfZ2V0QmVzdFBhdHRlcm4ocGF0dGVybkdlbmVyYXRv
ciwgc2tlbGV0b24sIHNrZWxldG9uTGVuZ3RoLCAwLCAwLCAmc3RhdHVzKTsKICAgICBpZiAoc3Rh
dHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SICYmIGxlbmd0aCkgewotICAgICAgICBTdHJp
bmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1
ZmZlcihsZW5ndGgpOwogICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgIHVk
YXRwZ19nZXRCZXN0UGF0dGVybihwYXR0ZXJuR2VuZXJhdG9yLCBza2VsZXRvbiwgc2tlbGV0b25M
ZW5ndGgsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7CiAgICAgICAgIGlmIChVX1NV
Q0NFU1Moc3RhdHVzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmls
ZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3
IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RmluYWxQYXRoTmFtZShjb25zdCBTdHIKICAgICBpZiAoIWlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3Ry
aW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVm
ZmVyKE1BWF9QQVRIKTsKICAgICBpZiAoOjpHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhhbmRs
ZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgVk9MVU1FX05BTUVfTlQpID49IE1BWF9Q
QVRIKSB7CiAgICAgICAgIGNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CkBAIC0yNTAsNyArMjUwLDcgQEAgYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBh
dGgsIGNvbgogCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFy
PiBidWZmZXIoTUFYX1BBVEgpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsK
IAogICAgIGlmIChwYXRoLmxlbmd0aCgpICsgMSA+IGJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKQEAgLTM0OSw3ICszNDksNyBAQCBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5h
bWUoKQogCiBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VEaXJlY3RvcnkoRFdPUkQgcGF0aElkZW50aWZp
ZXIpCiB7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOworICAgIFZl
Y3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKICAgICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVy
UGF0aFcoMCwgcGF0aElkZW50aWZpZXIgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYnVmZmVy
LmRhdGEoKSkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgYnVmZmVyLnJlc2l6ZSh3
Y3NsZW4oYnVmZmVyLmRhdGEoKSkpOwpJbmRleDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMzE4KQor
KysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTgtMDUtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBTdHJpbmdzIHNob3VsZCBub3QgYmUgYWxsb2NhdGVkIGluIGEgZ2lnYWNhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxOAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyByZW1v
dmVzIHRoZSBzdHJpbmcgZ2lnYWNhZ2UuCisgICAgICAgIAorICAgICAgICBQdXR0aW5nIHN0cmlu
Z3MgaW4gYSBnaWdhY2FnZSBwcmV2ZW50cyByZWFkIGdhZGdldHMuIFRoZSBvdGhlciB0aGluZ3Mg
dGhhdCBnZXQgdG8gYmUgaW4gZ2lnYWNhZ2VzCisgICAgICAgIGFyZSB0aGVyZSB0byBwcmV2ZW50
IHJlYWQtd3JpdGUgZ2FkZ2V0cy4KKyAgICAgICAgCisgICAgICAgIEFsc28sIHB1dHRpbmcgc3Ry
aW5ncyBpbiBhIGdpZ2FjYWdlIHNlZW1zIHRvIGhhdmUgYmVlbiBhIGJpZ2dlciByZWdyZXNzaW9u
IHRoYW4gcHV0dGluZyBvdGhlcgorICAgICAgICB0aGluZ3MgaW4gZ2lnYWNhZ2VzLgorICAgICAg
ICAKKyAgICAgICAgVGhlcmVmb3JlLCB0byBtYXhpbWl6ZSB0aGUgYmVuZWZpdC9jb3N0IHJhdGlv
IG9mIGdpZ2FjYWdlcywgd2Ugc2hvdWxkIGV2aWN0IHN0cmluZ3MgZnJvbSB0aGVtLiBJZgorICAg
ICAgICB3ZSB3YW50IHRvIHRocm93IGF3YXkgcGVyZiBmb3Igc2VjdXJpdHksIHRoZXJlIGFyZSBt
b3JlIGJlbmVmaWNpYWwgdGhpbmdzIHRvIHNhY3JpZmljZS4KKworICAgICAgICAqIGJtYWxsb2Mv
R2lnYWNhZ2UuaDoKKyAgICAgICAgKEdpZ2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdl
OjpiYXNlUHRyKToKKyAgICAgICAgKEdpZ2FjYWdlOjpzaXplKToKKyAgICAgICAgKEdpZ2FjYWdl
Ojpmb3JFYWNoS2luZCk6CisgICAgICAgICogYm1hbGxvYy9IZWFwS2luZC5oOgorICAgICAgICAo
Ym1hbGxvYzo6aXNHaWdhY2FnZSk6CisgICAgICAgIChibWFsbG9jOjpnaWdhY2FnZUtpbmQpOgor
ICAgICAgICAoYm1hbGxvYzo6aGVhcEtpbmQpOgorICAgICAgICAoYm1hbGxvYzo6aXNBY3RpdmVI
ZWFwS2luZEFmdGVyRW5zdXJpbmdHaWdhY2FnZSk6CisgICAgICAgIChibWFsbG9jOjptYXBUb0Fj
dGl2ZUhlYXBLaW5kQWZ0ZXJFbnN1cmluZ0dpZ2FjYWdlKToKKwogMjAxOC0wNC0zMCAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVc2UgV29yZExvY2sg
aW5zdGVhZCBvZiBzdGQ6Om11dGV4IGZvciBUaHJlYWRpbmcKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
R2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjQgKzM2LDIwIEBACiAjaWYgQkNQVShB
Uk02NCkKICNkZWZpbmUgUFJJTUlUSVZFX0dJR0FDQUdFX1NJWkUgMHg4MDAwMDAwMGxsdQogI2Rl
ZmluZSBKU1ZBTFVFX0dJR0FDQUdFX1NJWkUgMHg0MDAwMDAwMGxsdQotI2RlZmluZSBTVFJJTkdf
R0lHQUNBR0VfU0laRSAweDQwMDAwMDAwbGx1CiAjZGVmaW5lIEdJR0FDQUdFX0FMTE9DQVRJT05f
Q0FOX0ZBSUwgMQogI2Vsc2UKICNkZWZpbmUgUFJJTUlUSVZFX0dJR0FDQUdFX1NJWkUgMHg4MDAw
MDAwMDBsbHUKICNkZWZpbmUgSlNWQUxVRV9HSUdBQ0FHRV9TSVpFIDB4NDAwMDAwMDAwbGx1Ci0j
ZGVmaW5lIFNUUklOR19HSUdBQ0FHRV9TSVpFIDB4NDAwMDAwMDAwbGx1CiAjZGVmaW5lIEdJR0FD
QUdFX0FMTE9DQVRJT05fQ0FOX0ZBSUwgMAogI2VuZGlmCiAKIHN0YXRpY19hc3NlcnQoYm1hbGxv
Yzo6aXNQb3dlck9mVHdvKFBSSU1JVElWRV9HSUdBQ0FHRV9TSVpFKSwgIiIpOwogc3RhdGljX2Fz
c2VydChibWFsbG9jOjppc1Bvd2VyT2ZUd28oSlNWQUxVRV9HSUdBQ0FHRV9TSVpFKSwgIiIpOwot
c3RhdGljX2Fzc2VydChibWFsbG9jOjppc1Bvd2VyT2ZUd28oU1RSSU5HX0dJR0FDQUdFX1NJWkUp
LCAiIik7CiAKICNkZWZpbmUgR0lHQUNBR0VfU0laRV9UT19NQVNLKHNpemUpICgoc2l6ZSkgLSAx
KQogCiAjZGVmaW5lIFBSSU1JVElWRV9HSUdBQ0FHRV9NQVNLIEdJR0FDQUdFX1NJWkVfVE9fTUFT
SyhQUklNSVRJVkVfR0lHQUNBR0VfU0laRSkKICNkZWZpbmUgSlNWQUxVRV9HSUdBQ0FHRV9NQVNL
IEdJR0FDQUdFX1NJWkVfVE9fTUFTSyhKU1ZBTFVFX0dJR0FDQUdFX1NJWkUpCi0jZGVmaW5lIFNU
UklOR19HSUdBQ0FHRV9NQVNLIEdJR0FDQUdFX1NJWkVfVE9fTUFTSyhTVFJJTkdfR0lHQUNBR0Vf
U0laRSkKIAogI2lmICgoQk9TKERBUldJTikgfHwgQk9TKExJTlVYKSkgJiYgXAogICAgIChCQ1BV
KFg4Nl82NCkgfHwgKEJDUFUoQVJNNjQpICYmICFkZWZpbmVkKF9fSUxQMzJfXykgJiYgKCFCUExB
VEZPUk0oSU9TKSB8fCBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAp
KSkpCkBAIC03OCwxNiArNzQsMTQgQEAgQklOTElORSBib29sIHdhc0VuYWJsZWQoKSB7IHJldHVy
biBnX3dhcwogc3RydWN0IEJhc2VQdHJzIHsKICAgICB2b2lkKiBwcmltaXRpdmU7CiAgICAgdm9p
ZCoganNWYWx1ZTsKLSAgICB2b2lkKiBzdHJpbmc7CiB9OwogCiBlbnVtIEtpbmQgewogICAgIFBy
aW1pdGl2ZSwKICAgICBKU1ZhbHVlLAotICAgIFN0cmluZwogfTsKIAotc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1LaW5kcyA9IDM7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUtp
bmRzID0gMjsKIAogQkVYUE9SVCB2b2lkIGVuc3VyZUdpZ2FjYWdlKCk7CiAKQEAgLTExMCw4ICsx
MDQsNiBAQCBCSU5MSU5FIGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQogICAgICAgICByZXR1
cm4gIlByaW1pdGl2ZSI7CiAgICAgY2FzZSBKU1ZhbHVlOgogICAgICAgICByZXR1cm4gIkpTVmFs
dWUiOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gIlN0cmluZyI7CiAgICAgfQog
ICAgIEJDUkFTSCgpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI0LDggKzExNiw2IEBAIEJJ
TkxJTkUgdm9pZComIGJhc2VQdHIoQmFzZVB0cnMmIGJhc2VQdHIKICAgICAgICAgcmV0dXJuIGJh
c2VQdHJzLnByaW1pdGl2ZTsKICAgICBjYXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiBiYXNl
UHRycy5qc1ZhbHVlOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1cm4gYmFzZVB0cnMu
c3RyaW5nOwogICAgIH0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4gYmFzZVB0cnMucHJpbWl0
aXZlOwpAQCAtMTUzLDggKzE0Myw2IEBAIEJJTkxJTkUgc2l6ZV90IHNpemUoS2luZCBraW5kKQog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQUklNSVRJVkVfR0lHQUNBR0VfU0la
RSk7CiAgICAgY2FzZSBKU1ZhbHVlOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihKU1ZBTFVFX0dJR0FDQUdFX1NJWkUpOwotICAgIGNhc2UgU3RyaW5nOgotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihTVFJJTkdfR0lHQUNBR0VfU0laRSk7CiAgICAgfQogICAg
IEJDUkFTSCgpOwogICAgIHJldHVybiAwOwpAQCAtMTc1LDcgKzE2Myw2IEBAIHZvaWQgZm9yRWFj
aEtpbmQoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmdW5jKFByaW1pdGl2ZSk7CiAgICAgZnVu
YyhKU1ZhbHVlKTsKLSAgICBmdW5jKFN0cmluZyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEx
ICszNCwxMCBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsKICAg
ICBQcmltYXJ5LAogICAgIFByaW1pdGl2ZUdpZ2FjYWdlLAotICAgIEpTVmFsdWVHaWdhY2FnZSwK
LSAgICBTdHJpbmdHaWdhY2FnZQorICAgIEpTVmFsdWVHaWdhY2FnZQogfTsKIAotc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDQ7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG51bUhlYXBzID0gMzsKIAogQklOTElORSBib29sIGlzR2lnYWNhZ2UoSGVhcEtpbmQgaGVhcEtp
bmQpCiB7CkBAIC00Nyw3ICs0Niw2IEBAIEJJTkxJTkUgYm9vbCBpc0dpZ2FjYWdlKEhlYXBLaW5k
IGhlYXBLaW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1p
dGl2ZUdpZ2FjYWdlOgogICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKLSAgICBj
YXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIEJDUkFTSCgpOwpAQCAtNjQsOCArNjIsNiBAQCBCSU5MSU5FIEdpZ2FjYWdlOjpLaW5k
IGdpZ2FjYWdlS2luZChIZWFwCiAgICAgICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOwog
ICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKICAgICAgICAgcmV0dXJuIEdpZ2Fj
YWdlOjpKU1ZhbHVlOwotICAgIGNhc2UgSGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlOgotICAgICAg
ICByZXR1cm4gR2lnYWNhZ2U6OlN0cmluZzsKICAgICB9CiAgICAgQkNSQVNIKCk7CiAgICAgcmV0
dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CkBAIC03OCw4ICs3NCw2IEBAIEJJTkxJTkUgSGVhcEtp
bmQgaGVhcEtpbmQoR2lnYWNhZ2U6OktpbmQKICAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmlt
aXRpdmVHaWdhY2FnZTsKICAgICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgogICAgICAgICByZXR1
cm4gSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZTsKLSAgICBjYXNlIEdpZ2FjYWdlOjpTdHJpbmc6
Ci0gICAgICAgIHJldHVybiBIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2U7CiAgICAgfQogICAgIEJD
UkFTSCgpOwogICAgIHJldHVybiBIZWFwS2luZDo6UHJpbWFyeTsKQEAgLTkwLDcgKzg0LDYgQEAg
QklOTElORSBib29sIGlzQWN0aXZlSGVhcEtpbmRBZnRlckVuc3VyaQogICAgIHN3aXRjaCAoa2lu
ZCkgewogICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOgogICAgIGNhc2UgSGVh
cEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKLSAgICBjYXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2Fn
ZToKICAgICAgICAgaWYgKEdpZ2FjYWdlOjp3YXNFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2LDcgKzk5LDYgQEAgQklOTElO
RSBIZWFwS2luZCBtYXBUb0FjdGl2ZUhlYXBLaW5kQWZ0ZQogICAgIHN3aXRjaCAoa2luZCkgewog
ICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOgogICAgIGNhc2UgSGVhcEtpbmQ6
OkpTVmFsdWVHaWdhY2FnZToKLSAgICBjYXNlIEhlYXBLaW5kOjpTdHJpbmdHaWdhY2FnZToKICAg
ICAgICAgaWYgKEdpZ2FjYWdlOjp3YXNFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4ga2lu
ZDsKICAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltYXJ5Owo=
</data>
<flag name="review"
          id="357710"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339470</attachid>
            <date>2018-05-03 14:50:01 -0700</date>
            <delta_ts>2018-05-03 14:50:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100282</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3Bw
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZVRvQXRvbWljU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0
ZUhhc090aGVyT3duZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6
Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorCiAyMDE4LTA1LTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHNob3VsZCBiZSBhYmxlIHRvIGNhY2hl
IGN1c3RvbSBzZXR0ZXIgY2FsbHMgb24gdGhlIHByb3RvdHlwZSBjaGFpbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjMxMjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExpbWEg
PHRpY2Fpb2xpbWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJQYXJz
ZUludC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
ZWN0b3IuaD4KIAogI2RlZmluZSBTVEFUSUNfQVNTRVJUKGNvbmQpIHN0YXRpY19hc3NlcnQoY29u
ZCwgIkpTQmlnSW50IGFzc3VtZXMgIiAjY29uZCkKIApAQCAtNTU4LDkgKzU1Nyw5IEBAIHVpbnQ2
NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmEKIAogU3RyaW5nIEpTQmlnSW50Ojp0
b1N0cmluZ0dlbmVyaWMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNCaWdJbnQqIHgsIGludCByYWRpeCkK
IHsKLSAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2FnZSBvZiBTdHJpbmdWZWN0b3IgaW50
byBKU0JpZ0ludDo6dG9TdHJpbmcKKyAgICAvLyBGSVhNRTogW0pTQ10gUmV2aXNpdCB1c2FnZSBv
ZiBWZWN0b3IgaW50byBKU0JpZ0ludDo6dG9TdHJpbmcKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjcKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+IHJl
c3VsdFN0cmluZzsKKyAgICBWZWN0b3I8TENoYXI+IHJlc3VsdFN0cmluZzsKIAogICAgIEFTU0VS
VChyYWRpeCA+PSAyICYmIHJhZGl4IDw9IDM2KTsKICAgICBBU1NFUlQoIXgtPmlzWmVybygpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDM0ICsxNzgsMzAgQEAgdm9pZCBKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWwxNgogCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVU
b0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgWyZdICgpIHsKLSAg
ICAgICAgaWYgKGxlbmd0aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKLSAgICAg
ICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOwotICAgICAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0
cmluZyhtX3ZhbHVlKTsKLSAgICAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4
Qml0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGxlbmd0aCgp
ID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKKyAgICAgICAgcmVzb2x2ZVJvcGUoZXhl
Yyk7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1ZSk7CisgICAgICAgIHNl
dElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICAgICAgTENoYXIgYnVmZmVyW21h
eExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKLSAgICAgICAgICAgIHJlc29sdmVSb3BlSW50ZXJu
YWw4KGJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwg
bGVuZ3RoKCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJbbWF4TGVuZ3Ro
Rm9yT25TdGFja1Jlc29sdmVdOwotICAgICAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1
ZmZlcik7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKGJ1ZmZlciwgbGVuZ3Ro
KCkpOwotICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7Ci0g
ICAgICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIgYnVmZmVyW21heExl
bmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDgoYnVm
ZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmluZyhidWZmZXIsIGxlbmd0aCgpKTsK
KyAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgVUNoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAg
ICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7CisgICAgICAgIG1fdmFsdWUgPSBB
dG9taWNTdHJpbmcoYnVmZmVyLCBsZW5ndGgoKSk7CisgICAgICAgIHNldElzOEJpdChtX3ZhbHVl
LmltcGwoKS0+aXM4Qml0KCkpOworICAgIH0KIAotICAgICAgICBjbGVhckZpYmVycygpOworICAg
IGNsZWFyRmliZXJzKCk7CiAKLSAgICAgICAgLy8gSWYgd2UgcmVzb2x2ZWQgYSBzdHJpbmcgdGhh
dCBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgbm90aWZ5IHRoZSBoZWFwIHRoYXQgd2UndmUgZ3Jv
d24uCi0gICAgICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmlt
cGwoKS0+Y29zdCgpKTsKLSAgICB9KCk7Ci0gICAgCi0gICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0
Q2FnZWQoKTsKKyAgICAvLyBJZiB3ZSByZXNvbHZlZCBhIHN0cmluZyB0aGF0IGRpZG4ndCBwcmV2
aW91c2x5IGV4aXN0LCBub3RpZnkgdGhlIGhlYXAgdGhhdCB3ZSd2ZSBncm93bi4KKyAgICBpZiAo
bV92YWx1ZS5pbXBsKCktPmhhc09uZVJlZigpKQorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX3ZhbHVlLmltcGwoKS0+Y29zdCgpKTsKIH0KIAog
dm9pZCBKU1JvcGVTdHJpbmc6OmNsZWFyRmliZXJzKCkgY29uc3QKQEAgLTI1MiwzMiArMjQ4LDE3
IEBAIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBKU1JvcGVTdHJpbmc6OnIKIAogdm9pZCBKU1Jv
cGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBbJl0g
KCkgewotICAgICAgICBBU1NFUlQoaXNSb3BlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlz
U3Vic3RyaW5nKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc3Vic3RyaW5nQmFzZSgpLT5pc1Jv
cGUoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gc3Vic3RyaW5nQmFzZSgpLT5tX3ZhbHVlLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7Ci0gICAgICAg
ICAgICBzdWJzdHJpbmdCYXNlKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBMQ2hh
ciogYnVmZmVyOwotICAgICAgICAgICAgaWYgKGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5j
b3N0KCkpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZl
Um9wZUludGVybmFsOE5vU3Vic3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgICAgICBjbGVhckZpYmVy
cygpOwotICAgICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgQVNTRVJU
KGlzUm9wZSgpKTsKKyAgICAKKyAgICBpZiAoaXNTdWJzdHJpbmcoKSkgeworICAgICAgICBBU1NF
UlQoIXN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOworICAgICAgICBtX3ZhbHVlID0gc3Vic3Ry
aW5nQmFzZSgpLT5tX3ZhbHVlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN1YnN0cmluZ09mZnNldCgp
LCBsZW5ndGgoKSk7CisgICAgICAgIHN1YnN0cmluZ0Jhc2UoKS5jbGVhcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBMQ2hhciog
YnVmZmVyOwogICAgICAgICBpZiAoYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgoKSwgYnVmZmVyKSkgewogICAgICAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsKICAg
ICAgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOwpAQCAtMjg1LDEzICsyNjYsMjQg
QEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZQogICAgICAgICAgICAg
b3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7Cisg
ICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoYnVmZmVyKTsKICAgICAgICAg
Y2xlYXJGaWJlcnMoKTsKICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7Ci0gICAgfSgpOwotCi0g
ICAgbV92YWx1ZS5yZWxlYXNlQXNzZXJ0Q2FnZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBVQ2hhciogYnVmZmVyOworICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpLCBidWZmZXIpKSB7CisgICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNv
c3QoKSk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKG5ld0ltcGwpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKGJ1ZmZlcik7CisgICAgY2xl
YXJGaWJlcnMoKTsKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIAogLy8gT3ZlcnZpZXc6IFRo
ZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5nIGlu
IHJvcGUgZm9ybQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHJvdGVjdGVkOgogcHVi
bGljOgogICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgUmVmPFN0cmluZ0ltcGw+
JiYgdmFsdWUpCiAgICAgewotICAgICAgICB2YWx1ZS0+YXNzZXJ0Q2FnZWQoKTsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBzaXplX3QgY29zdCA9
IHZhbHVlLT5jb3N0KCk7CiAgICAgICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCBXVEZNb3Zl
KHZhbHVlKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoVk0mIHZtLCBSZWY8U3RyaW5nSW1wbD4mJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHZhbHVlLT5hc3NlcnRDYWdlZCgpOwogICAgICAgICBzaXpl
X3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwogICAgICAgICBKU1N0cmluZyogbmV3U3RyaW5n
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0cmlu
Zyh2bSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9u
KHZtLCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAyMzEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsOCArMzMwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6OkpT
VmFsdWU6CiAgICAgICAgICAgICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7
Ci0gICAgICAgIGNhc2UgR2lnYWNhZ2U6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOwpJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIz
MTI2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTM3IEBACisyMDE4LTA1LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgU3RyaW5ncyBzaG91bGQgbm90IGJlIGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKyAgICAgICAgCisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvR2lnYWNhZ2UuaDoKKyAgICAgICAgKEdp
Z2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdlOjpiYXNlUHRyKToKKyAgICAgICAgKiB3
dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlckJhc2U6OmFsbG9jYXRlQnVm
ZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIp
OgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXJCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKToKKyAg
ICAgICAgKFdURjo6VmVjdG9yQnVmZmVyQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAg
IChXVEY6Om1pbkNhcGFjaXR5Pjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OmZpbmRNYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5
Pjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6cmV2ZXJzZUZpbmQg
Y29uc3QpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFwcGVuZElmTm90Q29udGFpbnMp
OgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmZpbGwpOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OmFwcGVuZFJhbmdlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpleHBh
bmRDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNp
dHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlc2l6ZSk6CisgICAgICAgIChXVEY6
Om1pbkNhcGFjaXR5Pjo6cmVzaXplVG9GaXQpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46
OnNocmluayk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6Z3Jvdyk6CisgICAgICAgIChX
VEY6Om1pbkNhcGFjaXR5Pjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8pOgorICAgICAgICAo
V1RGOjptaW5DYXBhY2l0eT46OmFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkpOgorICAg
ICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKToKKyAg
ICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RG
OjptaW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1pbkNh
cGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFj
aXR5Pjo6c2hyaW5rQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmFwcGVu
ZCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6dHJ5QXBwZW5kKToKKyAgICAgICAgKFdU
Rjo6bWluQ2FwYWNpdHk+Ojpjb25zdHJ1Y3RBbmRBcHBlbmQpOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZCk6CisgICAgICAgIChXVEY6Om1pbkNhcGFj
aXR5Pjo6YXBwZW5kU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OmNvbnN0
cnVjdEFuZEFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+Ojp0cnlD
b25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6Om1pbkNhcGFjaXR5Pjo6
dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjphcHBlbmRWZWN0
b3IpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46Omluc2VydCk6CisgICAgICAgIChXVEY6
Om1pbkNhcGFjaXR5Pjo6aW5zZXJ0VmVjdG9yKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+
OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnJlbW92ZUZpcnN0KToKKyAg
ICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKToKKyAgICAgICAg
KFdURjo6bWluQ2FwYWNpdHk+OjpyZW1vdmVBbGwpOgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0
eT46OnJlbW92ZUFsbE1hdGNoaW5nKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjpyZXZl
cnNlKToKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+OjptYXAgY29uc3QpOgorICAgICAgICAo
V1RGOjptaW5DYXBhY2l0eT46OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV1RGOjptaW5DYXBh
Y2l0eT46OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V1RGOjpyZW1vdmVSZXBlYXRlZEVsZW1lbnRzKToKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6VmVj
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y29udGFpbnMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kTWF0Y2hpbmcgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6cmV2ZXJzZUZpbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpNYWxsb2M+OjphcHBlbmRJZk5vdENvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6ZmlsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFwcGVu
ZFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojp0cnlFeHBhbmRDYXBhY2l0eSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hbGxvYz46OnJlc2l6ZVRvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6Z3Jvdyk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRv
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1
bGxDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OmFzYW5CdWZmZXJT
aXplV2lsbENoYW5nZVRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVzZXJ2
ZUNhcGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5UmVzZXJ2ZUNh
cGFjaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnNocmlua0NhcGFjaXR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6YXBwZW5kKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6TWFsbG9jPjo6dHJ5QXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
TWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6YXBwZW5kU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+Ojpj
b25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxv
Yz46OnRyeUNvbnN0cnVjdEFuZEFwcGVuZFNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFsbG9jPjo6dW5jaGVja2VkQXBwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFs
bG9jPjo6YXBwZW5kVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5z
ZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6aW5zZXJ0VmVjdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6TWFsbG9jPjo6cmVtb3ZlRmlyc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxs
b2M+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6cmVtb3ZlQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6cmVtb3ZlQWxs
TWF0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpyZXZlcnNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jPjo6bWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFsbG9jPjo6cmVsZWFzZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ok1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdURjo6Q1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAg
ICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdCdWZmZXI6OlN0cmluZ0J1ZmZlcik6CisgICAgICAgIChX
VEY6OlN0cmluZ0J1ZmZlcjo6flN0cmluZ0J1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1
ZmZlcjo6cmVzaXplKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpkZXN0cm95KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZEludGVybmFsTm9uRW1wdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWFsbG9j
YXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWxlYXNlQXNzZXJ0Q2Fn
ZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjphc3Nl
cnRDYWdlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nTWFsbG9j
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdNYWxsb2MuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWZWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQvVW5pcXVlZFN0cmlu
Z0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6
U3RyaW5nOjphZG9wdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6YXNzZXJ0Q2FnZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmc6OnJlbGVhc2VBc3NlcnRDYWdlZCBjb25z
dCk6IERlbGV0ZWQuCisKIDIwMTgtMDUtMDIgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIEZvbGxvdy11cCBidWlsZCBmaXggZm9yIHIyMzEyMjMKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMxMjYz
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjEsNyArMjEsNiBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTBGMEY1MjZCMUY0MjFG
RjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01h
bGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJz
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKIAkJMEYz
MENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURC
NUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1
dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CkBAIC0xNzgsOCArMTc3LDYgQEAKIAkJMDc3Q0Q4NkEx
RkQ5Q0ZEMjAwODI4NTg3IC8qIExvZ2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMb2dnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc3Q0Q4NkIxRkQ5
Q0ZEMzAwODI4NTg3IC8qIExvZ2dlckhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2dnZXJIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
RDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJD
IC8qIFN0cmluZ01hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdNYWxsb2MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGNTI2QTFGNDIxRkY4MDA0QTQ1MkMg
LyogU3RyaW5nTWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ01hbGxvYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0Fs
Z29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGht
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUz
RiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyog
SW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1LDcgKzE5Miw2IEBACiAJ
CTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMy
MyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25jdXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29yaXRobUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1ZlY3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBB
dXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21h
dGljVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA1LDEwICsxMjAx
LDcgQEAKIAkJCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVyLmggKi8s
CiAJCQkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwICovLAogCQkJ
CUE4QTQ3MzI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmggKi8sCi0JCQkJMEYwRjUy
NjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8sCi0JCQkJMEYwRjUyNkEx
RjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5oICovLAogCQkJCUE4QTQ3MzJBMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKLQkJCQkwRjM0OEM3RDFGNDdBQTlE
MDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8sCiAJCQkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIz
OTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAogCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMwMTI2RiAv
KiBTdHJpbmdWaWV3LmggKi8sCiAJCQkJRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJv
bEltcGwuY3BwICovLApAQCAtMTUzMyw3ICsxNTI2LDYgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2
MDBBODJFNjkgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1
MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJpbmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJp
bmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYxNjkwMEQwRDZBMSAv
KiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTI5Niw5ICsyOTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAg
ICAgdGV4dC9TdHJpbmdIYXNoLmgKICAgICB0ZXh0L1N0cmluZ0hhc2hlci5oCiAgICAgdGV4dC9T
dHJpbmdJbXBsLmgKLSAgICB0ZXh0L1N0cmluZ01hbGxvYy5oCiAgICAgdGV4dC9TdHJpbmdPcGVy
YXRvcnMuaAotICAgIHRleHQvU3RyaW5nVmVjdG9yLmgKICAgICB0ZXh0L1N0cmluZ1ZpZXcuaAog
ICAgIHRleHQvU3ltYm9sSW1wbC5oCiAgICAgdGV4dC9TeW1ib2xSZWdpc3RyeS5oCkBAIC00MTUs
NyArNDEzLDYgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAog
ICAgIHRleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCiAgICAgdGV4dC9TdHJpbmdJbXBsLmNwcAot
ICAgIHRleHQvU3RyaW5nTWFsbG9jLmNwcAogICAgIHRleHQvU3RyaW5nVmlldy5jcHAKICAgICB0
ZXh0L1N5bWJvbEltcGwuY3BwCiAgICAgdGV4dC9TeW1ib2xSZWdpc3RyeS5jcHAKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUu
aAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PjsKIAotICAgIHR5cGVkZWYg
VmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5LCBGYXN0TWFsbG9jPiBCdWZmZXI7CisgICAg
dHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHk+IEJ1ZmZlcjsKICAgICB0eXBl
ZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOwogICAgIHR5cGVkZWYg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJhdG9yQmFzZTsKIApJbmRl
eDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZvcndhcmQuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgRGVmYXVsdEhhc2ggeyAKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
IAogdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIFZhcmlhbnQ7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSwgc2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCA9IDE2LCB0
eXBlbmFtZSA9IEZhc3RNYWxsb2M+IGNsYXNzIFZlY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lLCBz
aXplX3QgPSAwLCB0eXBlbmFtZSA9IENyYXNoT25PdmVyZmxvdywgc2l6ZV90ID0gMTY+IGNsYXNz
IFZlY3RvcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSA9IHR5cGVuYW1lIERl
ZmF1bHRIYXNoPFZhbHVlPjo6SGFzaCwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlPj4gY2xh
c3MgSGFzaENvdW50ZWRTZXQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLCB0
eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBl
ZEFyZz4+IGNsYXNzIEhhc2hNYXA7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46Okhhc2gsIHR5cGVuYW1lID0gSGFz
aFRyYWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9H
aWdhY2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDIsMTMgKzQyLDExIEBAIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiBzdHJ1Y3QgQmFzZVB0cnMgewog
ICAgIHZvaWQqIHByaW1pdGl2ZTsKICAgICB2b2lkKiBqc1ZhbHVlOwotICAgIHZvaWQqIHN0cmlu
ZzsKIH07CiAKIGVudW0gS2luZCB7CiAgICAgUHJpbWl0aXZlLAogICAgIEpTVmFsdWUsCi0gICAg
U3RyaW5nCiB9OwogCiBpbmxpbmUgdm9pZCBlbnN1cmVHaWdhY2FnZSgpIHsgfQpAQCAtNzEsOCAr
NjksNiBAQCBBTFdBWVNfSU5MSU5FIGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kCiAgICAgICAg
IHJldHVybiAiUHJpbWl0aXZlIjsKICAgICBjYXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiAi
SlNWYWx1ZSI7Ci0gICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgIHJldHVybiAiU3RyaW5nIjsKICAg
ICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTg1LDggKzgxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkKiYgYmFzZVB0cihCYXNlUHRy
cyYgYgogICAgICAgICByZXR1cm4gYmFzZVB0cnMucHJpbWl0aXZlOwogICAgIGNhc2UgSlNWYWx1
ZToKICAgICAgICAgcmV0dXJuIGJhc2VQdHJzLmpzVmFsdWU7Ci0gICAgY2FzZSBTdHJpbmc6Ci0g
ICAgICAgIHJldHVybiBiYXNlUHRycy5zdHJpbmc7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGJhc2VQdHJzLnByaW1pdGl2ZTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIHN0cnVjdCBWZWN0b3JUeXBlT3BlcmF0aW9ucwog
ICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBWZWN0b3JCdWZmZXJCYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShWZWN0b3JCdWZmZXJCYXNlKTsKIHB1YmxpYzoKQEAgLTI4Nyw3ICsyODcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICBzaXplX3Qgc2l6ZVRvQWxs
b2NhdGUgPSBuZXdDYXBhY2l0eSAqIHNpemVvZihUKTsKICAgICAgICAgbV9jYXBhY2l0eSA9IHNp
emVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwotICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0
PFQqPihNYWxsb2M6Om1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOworICAgICAgICBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PFQqPihmYXN0TWFsbG9jKHNpemVUb0FsbG9jYXRlKSk7CiAgICAgfQogCiAg
ICAgYm9vbCB0cnlBbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCkBAIC0yOTcsMTIg
KzI5NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
c2l6ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAg
IFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihNYWxsb2M6OnRyeU1hbGxvYyhzaXplVG9B
bGxvY2F0ZSkpOwotICAgICAgICBpZiAoIW5ld0J1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgbV9jYXBhY2l0eSA9IHNpemVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpOwot
ICAgICAgICBtX2J1ZmZlciA9IG5ld0J1ZmZlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIFQqIG5ld0J1ZmZlcjsKKyAgICAgICAgaWYgKHRyeUZhc3RNYWxsb2Moc2l6ZVRvQWxsb2Nh
dGUpLmdldFZhbHVlKG5ld0J1ZmZlcikpIHsKKyAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXpl
VG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKKyAgICAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVy
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3
Q2FwYWNpdHkpIGNvbnN0CkBAIC0zMTcsNyArMzE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgc2l6ZV90IHNpemVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBz
aXplb2YoVCk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihU
KTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oTWFsbG9jOjpyZWFsbG9jKG1f
YnVmZmVyLCBzaXplVG9BbGxvY2F0ZSkpOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0
PFQqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgc2l6ZVRvQWxsb2NhdGUpKTsKICAgICB9CiAKICAg
ICB2b2lkIGRlYWxsb2NhdGVCdWZmZXIoVCogYnVmZmVyVG9EZWFsbG9jYXRlKQpAQCAtMzMwLDcg
KzMzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSAwOwogICAgICAgICB9
CiAKLSAgICAgICAgTWFsbG9jOjpmcmVlKGJ1ZmZlclRvRGVhbGxvY2F0ZSk7CisgICAgICAgIGZh
c3RGcmVlKGJ1ZmZlclRvRGVhbGxvY2F0ZSk7CiAgICAgfQogCiAgICAgVCogYnVmZmVyKCkgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KQEAgLTM3MSwxMyArMzcyLDEzIEBAIHByb3RlY3RlZDoKICAgICB1
bnNpZ25lZCBtX3NpemU7IC8vIE9ubHkgdXNlZCBieSB0aGUgVmVjdG9yIHN1YmNsYXNzLCBidXQg
cGxhY2VkIGhlcmUgdG8gYXZvaWQgcGFkZGluZyB0aGUgc3RydWN0LgogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiBjbGFzcyBWZWN0b3JCdWZm
ZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1hbGxvYz4KLWNsYXNzIFZlY3Rv
ckJ1ZmZlcjxULCAwLCBNYWxsb2M+IDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQsIE1hbGxv
Yz4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFZlY3RvckJ1ZmZlcjxULCAwPiA6IHBy
aXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxUPiB7CiBwcml2YXRlOgotICAgIHR5cGVkZWYgVmVjdG9y
QnVmZmVyQmFzZTxULCBNYWxsb2M+IEJhc2U7CisgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNl
PFQ+IEJhc2U7CiBwdWJsaWM6CiAgICAgVmVjdG9yQnVmZmVyKCkKICAgICB7CkBAIC0zOTcsNyAr
Mzk4LDcgQEAgcHVibGljOgogICAgICAgICBkZWFsbG9jYXRlQnVmZmVyKGJ1ZmZlcigpKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzd2FwKFZlY3RvckJ1ZmZlcjxULCAwLCBNYWxsb2M+JiBvdGhl
ciwgc2l6ZV90LCBzaXplX3QpCisgICAgdm9pZCBzd2FwKFZlY3RvckJ1ZmZlcjxULCAwPiYgb3Ro
ZXIsIHNpemVfdCwgc2l6ZV90KQogICAgIHsKICAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVyLCBv
dGhlci5tX2J1ZmZlcik7CiAgICAgICAgIHN0ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2Nh
cGFjaXR5KTsKQEAgLTQzMiwxMSArNDMzLDExIEBAIHByaXZhdGU6CiAgICAgdXNpbmcgQmFzZTo6
bV9jYXBhY2l0eTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotY2xhc3MgVmVjdG9yQnVmZmVyIDogcHJpdmF0ZSBWZWN0
b3JCdWZmZXJCYXNlPFQsIE1hbGxvYz4gewordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgorY2xhc3MgVmVjdG9yQnVmZmVyIDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJC
YXNlPFQ+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZWN0b3JCdWZmZXIpOwogcHJpdmF0
ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlckJhc2U8VCwgTWFsbG9jPiBCYXNlOworICAgIHR5
cGVkZWYgVmVjdG9yQnVmZmVyQmFzZTxUPiBCYXNlOwogcHVibGljOgogICAgIFZlY3RvckJ1ZmZl
cigpCiAgICAgICAgIDogQmFzZShpbmxpbmVCdWZmZXIoKSwgaW5saW5lQ2FwYWNpdHksIDApCkBA
IC01OTgsMTEgKzU5OSwxMSBAQCBzdHJ1Y3QgVW5zYWZlVmVjdG9yT3ZlcmZsb3cgewogfTsKIAog
Ly8gVGVtcGxhdGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGluIEZvcndhcmQuaC4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWNsYXNzIFZlY3RvciA6IHBy
aXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5LCBNYWxsb2M+IHsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1
ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eSwgTWFs
bG9jPiBCYXNlOworICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBC
YXNlOwogICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7
CiAKIHB1YmxpYzoKQEAgLTY2OSwxMiArNjcwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBW
ZWN0b3IoY29uc3QgVmVjdG9yJik7Ci0gICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHks
IHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBh
Y2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+Ci0gICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZl
Y3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmlt
dW1DYXBhY2l0eSwgT3RoZXJNYWxsb2M+Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2Fw
YWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmlt
dW1DYXBhY2l0eT4KKyAgICBleHBsaWNpdCBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2Fw
YWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwog
CiAgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJik7Ci0gICAgdGVtcGxhdGU8c2l6
ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVf
dCBvdGhlck1pbmltdW1DYXBhY2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+Ci0gICAgVmVjdG9y
JiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dC
ZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5LCBPdGhlck1hbGxvYz4mKTsKKyAgICB0ZW1w
bGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91
ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFjaXR5PgorICAgIFZlY3RvciYgb3BlcmF0b3I9KGNv
bnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhl
ck1pbmltdW1DYXBhY2l0eT4mKTsKIAogICAgIFZlY3RvcihWZWN0b3ImJik7CiAgICAgVmVjdG9y
JiBvcGVyYXRvcj0oVmVjdG9yJiYpOwpAQCAtODY0LDggKzg2NSw4IEBAIHByaXZhdGU6CiAjZW5k
aWYKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KLVZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgorVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCiAgICAgOiBCYXNl
KG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBhc2FuU2V0SW5pdGlhbEJ1
ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwpAQCAtODc0LDkgKzg3NSw5IEBAIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVu
aW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdGVt
cGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlv
dXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eSwgdHlwZW5hbWUgT3RoZXJNYWxsb2M+Ci1W
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxv
d0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHksIE90aGVyTWFsbG9jPiYgb3RoZXIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgordGVtcGxhdGU8c2l6ZV90IG90aGVyQ2Fw
YWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmlt
dW1DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJP
dmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+JiBvdGhlcikKICAgICA6IEJh
c2Uob3RoZXIuY2FwYWNpdHkoKSwgb3RoZXIuc2l6ZSgpKQogewogICAgIGFzYW5TZXRJbml0aWFs
QnVmZmVyU2l6ZVRvKG90aGVyLnNpemUoKSk7CkBAIC04ODUsOCArODg2LDggQEAgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZQogICAgICAgICBUeXBlT3BlcmF0aW9uczo6
dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1W
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1h
bGxvYz4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgb3RoZXIpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIG90aGVyKQogewogICAgIGlm
ICgmb3RoZXIgPT0gdGhpcykKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtOTEwLDkgKzkxMSw5
IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGUKIAogaW5saW5lIGJv
b2wgdHlwZWxlc3NQb2ludGVyc0FyZUVxdWFsKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci10ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUg
b3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFjaXR5LCB0eXBl
bmFtZSBPdGhlck1hbGxvYz4KLVZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgVmVjdG9y
PFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNh
cGFjaXR5LCBPdGhlck1hbGxvYz4mIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KK3RlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJm
bG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpvcGVyYXRvcj0oY29u
c3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVy
TWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCiB7CiAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBhY2l0
aWVzIG1hdGNoLCB3ZSBzaG91bGQgY2FsbCB0aGUgbW9yZSBzcGVjaWZpYwogICAgIC8vIHRlbXBs
YXRlLiAgSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIGRvbid0IG1hdGNoLCB0aGUgdHdvIG9iamVj
dHMKQEAgLTkzNiwyOSArOTM3LDI5IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGUKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OlZlY3RvcihWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4m
JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9y
KFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4m
JiBvdGhlcikKIHsKICAgICBzd2FwKG90aGVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpvcGVy
YXRvcj0oVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+JiYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46Om9wZXJhdG9yPShWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+JiYgb3RoZXIpCiB7CiAgICAgc3dhcChvdGhlcik7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBN
YWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+Ojpjb250YWlucyhjb25zdCBVJiB2YWx1ZSkgY29uc3QKK2Jvb2wg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
Y29udGFpbnMoY29uc3QgVSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZpbmQodmFsdWUp
ICE9IG5vdEZvdW5kOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBl
bmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8
dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmZpbmRNYXRjaGluZyhjb25z
dCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbmRNYXRjaGluZyhjb25z
dCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1hdGNoZXMoYXQoaSkpKQpAQCAtOTY3
LDE4ICs5NjgsMTggQEAgc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsbwog
ICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci1zaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBj
b25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZp
bmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gaXRlbSA9PSB2YWx1
ZTsKICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5h
bWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci1zaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXZlcnNlRmluZChjb25zdCBVJiB2YWx1ZSkgY29u
c3QKK3NpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpyZXZlcnNlRmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8PSBzaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBzaXplX3Qg
aW5kZXggPSBzaXplKCkgLSBpOwpAQCAtOTg4LDkgKzk4OSw5IEBAIHNpemVfdCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KICAgICByZXR1cm4gbm90Rm91bmQ7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotYm9vbCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OmFwcGVuZElmTm90Q29udGFpbnMoY29uc3QgVSYgdmFsdWUpCitib29sIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFwcGVuZElmTm90Q29u
dGFpbnMoY29uc3QgVSYgdmFsdWUpCiB7CiAgICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTk4LDggKzk5OSw4IEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmZpbGwo
Y29uc3QgVCYgdmFsLCBzaXplX3QgbmV3U2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmZpbGwoY29uc3QgVCYgdmFsLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBp
ZiAoc2l6ZSgpID4gbmV3U2l6ZSkKICAgICAgICAgc2hyaW5rKG5ld1NpemUpOwpAQCAtMTAxNiwy
MiArMTAxNywyMiBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAg
ICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFJhbmdlKEl0ZXJh
dG9yIHN0YXJ0LCBJdGVyYXRvciBlbmQpCit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFwcGVuZFJhbmdlKEl0ZXJhdG9yIHN0YXJ0
LCBJdGVyYXRvciBlbmQpCiB7CiAgICAgZm9yIChJdGVyYXRvciBpdCA9IHN0YXJ0OyBpdCAhPSBl
bmQ7ICsraXQpCiAgICAgICAgIGFwcGVuZCgqaXQpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQogewogICAgIHJl
c2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nh
c3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEp
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KLVQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBw
dHIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorVCogVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHko
c2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKiBwdHIpCiB7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkg
fHwgcHRyID49IGVuZCgpKSB7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5
KTsKQEAgLTEwNDIsMTQgKzEwNDMsMTQgQEAgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbgogICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojp0cnlF
eHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNp
dHkpCiB7CiAgICAgcmV0dXJuIHRyeVJlc2VydmVDYXBhY2l0eShzdGQ6Om1heChuZXdNaW5DYXBh
Y2l0eSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5
KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWNvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5RXhwYW5kQ2Fw
YWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgorY29uc3QgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5l
d01pbkNhcGFjaXR5LCBjb25zdCBUKiBwdHIpCiB7CiAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwg
cHRyID49IGVuZCgpKSB7CiAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpKQpAQCAtMTA2MiwxNiArMTA2MywxNiBAQCBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmCiAgICAgcmV0dXJuIGJlZ2luKCkgKyBpbmRleDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUgVSogVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqIHB0cikKK2lubGlu
ZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFUqIHB0cikKIHsKICAg
ICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+OjpyZXNpemUoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzaXplKHNpemVfdCBzaXplKQogewogICAgIGlmIChz
aXplIDw9IG1fc2l6ZSkgewogICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4o
KSArIHNpemUsIGVuZCgpKTsKQEAgLTEwODcsMTUgKzEwODgsMTUgQEAgaW5saW5lIHZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgIG1fc2l6ZSA9IHNpemU7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjpyZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46OnJlc2l6ZVRvRml0KHNpemVfdCBzaXplKQogewogICAgIHJlc2VydmVDYXBhY2l0
eShzaXplKTsKICAgICByZXNpemUoc2l6ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpzaHJpbmsoc2l6ZV90IHNp
emUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpzaHJpbmsoc2l6ZV90
IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKICAgICBUeXBlT3BlcmF0aW9u
czo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKQEAgLTExMDMsOCArMTEwNCw4IEBA
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICBtX3NpemUgPSBz
aXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6Z3JvdyhzaXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHk+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT46Omdyb3coc2l6ZV90IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUg
Pj0gbV9zaXplKTsKICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCkBAIC0xMTE1LDggKzExMTYs
OCBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXpl
ID0gc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojphc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhz
aXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
Ojphc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplX3Qgc2l6ZSkKIHsKICNpZiBBU0FOX0VO
QUJMRUQKICAgICBpZiAoIWJ1ZmZlcigpKQpAQCAtMTEzMSw4ICsxMTMyLDggQEAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9j
Pjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eShzaXplX3Qgc2l6ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojphc2FuU2V0QnVmZmVyU2l6ZVRv
RnVsbENhcGFjaXR5KHNpemVfdCBzaXplKQogewogI2lmIEFTQU5fRU5BQkxFRAogICAgIGlmICgh
YnVmZmVyKCkpCkBAIC0xMTQ1LDggKzExNDYsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojphc2FuQnVmZmVyU2l6
ZVdpbGxDaGFuZ2VUbyhzaXplX3QgbmV3U2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+Ojphc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXplX3QgbmV3
U2l6ZSkKIHsKICNpZiBBU0FOX0VOQUJMRUQKICAgICBpZiAoIWJ1ZmZlcigpKQpAQCAtMTE1OSw4
ICsxMTYwLDggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogI2Vu
ZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+OjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVf
dCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTE3OCw4ICsxMTc5LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVy
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9j
PgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHksIE1hbGxvYz46OnRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlSZXNlcnZlQ2FwYWNpdHko
c2l6ZV90IG5ld0NhcGFjaXR5KQogewogICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMDEsOCArMTIwMiw4IEBAIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
LCBNYWxsb2M+OjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQogewogICAgIEFTU0VSVCghbV9z
aXplKTsKICAgICBBU1NFUlQoY2FwYWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7CkBAIC0xMjEw
LDggKzEyMTEsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAg
ICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLXZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjpzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7
CiAgICAgaWYgKG5ld0NhcGFjaXR5ID49IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTEyNDEsOSArMTI0Miw5IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0gKICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplKCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLXZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+Ojph
cHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQordm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmQoY29uc3Qg
VSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQogewogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXpl
ICsgZGF0YVNpemU7CiAgICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7CkBAIC0xMjU4LDkg
KzEyNTksOSBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAg
bV9zaXplID0gbmV3U2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNp
emVfdCBkYXRhU2l6ZSkKK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSkKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlm
IChuZXdTaXplID4gY2FwYWNpdHkoKSkgewpAQCAtMTI3OCw5ICsxMjc5LDkgQEAgYm9vbCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLUFMV0FZU19J
TkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZChVJiYgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAg
ICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7CkBAIC0xMjkyLDkg
KzEyOTMsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAg
YXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotQUxXQVlTX0lOTElO
RSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eSwgTWFsbG9jPjo6Y29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorQUxXQVlT
X0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmNvbnN0cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4gYXJncykKIHsKICAgICBp
ZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hh
bmdlVG8obV9zaXplICsgMSk7CkBAIC0xMzA2LDkgKzEzMDcsOSBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjCiAgICAgY29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2Uo
c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBh
Y2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxs
b2M+Ojp0cnlDb25zdHJ1Y3RBbmRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCitBTFdBWVNfSU5MSU5F
IGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQogewogICAgIGlmIChz
aXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VU
byhtX3NpemUgKyAxKTsKQEAgLTEzMjAsOSArMTMyMSw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWMKICAgICByZXR1cm4gdHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xv
d0Nhc2Uoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBt
aW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6YXBwZW5kU2xv
d0Nhc2UoVSYmIHZhbHVlKQordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRTbG93Q2FzZShVJiYgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKIApAQCAtMTMzNSw5ICsxMzM2LDkgQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgICsrbV9zaXplOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
LXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+Ojpjb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4gYXJncykK
K3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6Y29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7CiAgICAg
QVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKIApAQCAtMTM0OSw5ICsxMzUwLDkgQEAgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgICsrbV9zaXplOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
LWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5LCBNYWxsb2M+Ojp0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4gYXJn
cykKK2Jvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJncyYmLi4uIGFyZ3MpCiB7
CiAgICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKICAgICAKQEAgLTEzNjgsOSArMTM2
OSw5IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIC8vIFRoaXMg
dmVyc2lvbiBvZiBhcHBlbmQgc2F2ZXMgYSBicmFuY2ggaW4gdGhlIGNhc2Ugd2hlcmUgeW91IGtu
b3cgdGhhdCB0aGUKIC8vIHZlY3RvcidzIGNhcGFjaXR5IGlzIGxhcmdlIGVub3VnaCBmb3IgdGhl
IGFwcGVuZCB0byBzdWNjZWVkLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLUFMV0FZU19JTkxJTkUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnVuY2hlY2tlZEFwcGVu
ZChVJiYgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1
ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNpdHkoKSk7CiAKQEAgLTEzODAsMTYgKzEz
ODEsMTYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhYwogICAgICsr
bV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBN
YWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5h
bWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmFwcGVuZFZl
Y3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mIHZhbCkKK2lubGluZSB2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFw
cGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mIHZhbCkKIHsKICAgICBh
cHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjppbnNlcnQoc2l6ZV90
IHBvc2l0aW9uLCBjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omluc2VydChz
aXplX3QgcG9zaXRpb24sIGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAg
IHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CkBAIC0xNDA2LDkgKzE0MDcsOSBA
QCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0g
bmV3U2l6ZTsKIH0KICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1l
IE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBVJiYg
dmFsdWUpCitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBVJiYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPD0gc2l6ZSgp
KTsKIApAQCAtMTQyNiwxNSArMTQyNywxNSBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92CiAgICAgKyttX3NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgYz4KLWlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
aW5zZXJ0VmVjdG9yKHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCitp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjppbnNlcnRWZWN0b3Ioc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwg
Yz4mIHZhbCkKIHsKICAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9j
PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRp
b24pCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBz
aXplKCkpOwogICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CkBAIC0xNDQ0LDggKzE0
NDUsOCBAQCBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgLS1t
X3NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1h
bGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90
IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpy
ZW1vdmUoc2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7CiAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gKyBsZW5ndGggPD0gc2l6ZSgpKTsKQEAg
LTE0NTcsMTggKzE0NTgsMTggQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdgogICAgIG1fc2l6ZSAtPSBsZW5ndGg7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1vdmVGaXJz
dChjb25zdCBVJiB2YWx1ZSkKK2lubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZUZpcnN0KGNvbnN0IFUmIHZhbHVl
KQogewogICAgIHJldHVybiByZW1vdmVGaXJzdE1hdGNoaW5nKFsmdmFsdWVdIChjb25zdCBUJiBj
dXJyZW50KSB7CiAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHZhbHVlOwogICAgIH0pOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5j
dGlvbj4KLWlubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmVtb3ZlRmlyc3RNYXRjaGluZyhjb25zdCBNYXRj
aEZ1bmN0aW9uJiBtYXRjaGVzLCBzaXplX3Qgc3RhcnRJbmRleCkKK2lubGluZSBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92
ZUZpcnN0TWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcywgc2l6ZV90IHN0YXJ0
SW5kZXgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBzaXplKCk7ICsr
aSkgewogICAgICAgICBpZiAobWF0Y2hlcyhhdChpKSkpIHsKQEAgLTE0NzksMTggKzE0ODAsMTgg
QEAgaW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFs
bG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci1pbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZW1vdmVBbGwoY29uc3QgVSYgdmFsdWUpCitp
bmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5Pjo6cmVtb3ZlQWxsKGNvbnN0IFUmIHZhbHVlKQogewogICAgIHJldHVybiBy
ZW1vdmVBbGxNYXRjaGluZyhbJnZhbHVlXSAoY29uc3QgVCYgY3VycmVudCkgewogICAgICAgICBy
ZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsKICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1pbmxpbmUgdW5zaWdu
ZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
LCBNYWxsb2M+OjpyZW1vdmVBbGxNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVz
LCBzaXplX3Qgc3RhcnRJbmRleCkKK2lubGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyhj
b25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzLCBzaXplX3Qgc3RhcnRJbmRleCkKIHsKICAgICBp
dGVyYXRvciBob2xlQmVnaW4gPSBlbmQoKTsKICAgICBpdGVyYXRvciBob2xlRW5kID0gZW5kKCk7
CkBAIC0xNTE1LDE2ICsxNTE2LDE2IEBAIGlubGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHkKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpyZXZl
cnNlKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXZl
cnNlKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZSAvIDI7ICsraSkKICAg
ICAgICAgc3RkOjpzd2FwKGF0KGkpLCBhdChtX3NpemUgLSAxIC0gaSkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgTWFwRnVuY3Rpb24sIHR5cGVu
YW1lIFI+Ci1pbmxpbmUgVmVjdG9yPFI+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6bWFwKE1hcEZ1bmN0aW9uIG1hcEZ1bmN0
aW9uKSBjb25zdAoraW5saW5lIFZlY3RvcjxSPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjptYXAoTWFwRnVuY3Rpb24gbWFwRnVuY3Rpb24p
IGNvbnN0CiB7CiAgICAgVmVjdG9yPFI+IHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzaXplKCkpOwpAQCAtMTUzMyw4ICsxNTM0LDggQEAgaW5saW5lIFZlY3RvcjxS
PiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSBNYWxs
b2NQdHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5LCBNYWxsb2M+OjpyZWxlYXNlQnVmZmVyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
Q2FwYWNpdHk+CitpbmxpbmUgTWFsbG9jUHRyPFQ+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbGVhc2VCdWZmZXIoKQogewogICAgIC8v
IEZJWE1FOiBGaW5kIGEgd2F5IHRvIHByZXNlcnZlIGFubm90YXRpb25zIG9uIHRoZSByZXR1cm5l
ZCBidWZmZXIuCiAgICAgLy8gQVNhbiByZXF1aXJlcyB0aGF0IGFsbCBhbm5vdGF0aW9ucyBhcmUg
cmVtb3ZlZCBiZWZvcmUgZGVhbGxvY2F0aW9uLApAQCAtMTU0Nyw3ICsxNTQ4LDcgQEAgaW5saW5l
IE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5saW5lQ2FwYQogICAgICAgICAvLyB0aGF0IG1lYW5z
IGl0IHdhcyB1c2luZyB0aGUgaW5saW5lIGJ1ZmZlci4gSW4gdGhhdCBjYXNlLAogICAgICAgICAv
LyB3ZSBjcmVhdGUgYSBicmFuZCBuZXcgYnVmZmVyIHNvIHRoZSBjYWxsZXIgYWx3YXlzIGdldHMg
b25lLgogICAgICAgICBzaXplX3QgYnl0ZXMgPSBtX3NpemUgKiBzaXplb2YoVCk7Ci0gICAgICAg
IGJ1ZmZlciA9IGFkb3B0TWFsbG9jUHRyKHN0YXRpY19jYXN0PFQqPihNYWxsb2M6Om1hbGxvYyhi
eXRlcykpKTsKKyAgICAgICAgYnVmZmVyID0gYWRvcHRNYWxsb2NQdHIoc3RhdGljX2Nhc3Q8VCo+
KGZhc3RNYWxsb2MoYnl0ZXMpKSk7CiAgICAgICAgIG1lbWNweShidWZmZXIuZ2V0KCksIGRhdGEo
KSwgYnl0ZXMpOwogICAgIH0KICAgICBtX3NpemUgPSAwOwpAQCAtMTU1NSw4ICsxNTU2LDggQEAg
aW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5saW5lQ2FwYQogICAgIHJldHVybiBidWZm
ZXI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxv
Yz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSgpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyAr
K2kpCkBAIC0xNTY0LDE0ICsxNTY1LDE0IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3YKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
LCB0eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgYSwgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBi
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIHN3YXAoVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYSwg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYg
YikKIHsKICAgICBhLnN3YXAoYik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHksIHR5cGVuYW1lIE1hbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIGEsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Citib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIs
IG1pbkNhcGFjaXR5PiYgYSwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgYikKIHsKICAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXpl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NzksOCArMTU4MCw4IEBAIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2EKICAgICByZXR1cm4gVmVjdG9yVHlwZU9w
ZXJhdGlvbnM8VD46OmNvbXBhcmUoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz4mIGIpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CkBAIC0xNjA0LDggKzE2
MDUsOCBAQCBzaXplX3QgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhWZWN0b3JUeXBlCiAgICAgcmV0
dXJuIG5ld1NpemU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVu
YW1lIE1hbGxvYz4KLXNpemVfdCByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPiYgdmVjdG9y
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3NpemVfdCByZW1vdmVSZXBlYXRl
ZEVsZW1lbnRzKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT4mIHZlY3RvcikKIHsKICAgICByZXR1cm4gcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyh2
ZWN0b3IsIFtdIChUJiBhLCBUJiBiKSB7IHJldHVybiBhID09IGI7IH0pOwogfQpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBBdG9taWNT
dHJpbmdJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3RyaW5nSW1wbCB3aWxsIEFTU0VSVAogLy8g
aW4gdGhlIGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hlY2tDb25zaXN0ZW5jeQotLy8gYXMgdGhl
eSBhcmUgbm90IGFsbG9jYXRlZCBieSBTdHJpbmdNYWxsb2MuCisvLyBhcyB0aGV5IGFyZSBub3Qg
YWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuCiAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbnkg
d2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKIC8vIHNvIHdlIGlnbm9yZSB0aGUgY29uc2lzdGVuY3kg
Y2hlY2sgZm9yIGFsbCBBdG9taWNTdHJpbmdJbXBscyouCiB0ZW1wbGF0ZTw+IHN0cnVjdApJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0NTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTM5LDcgKzM4LDcgQEAgUmVmPENTdHJpbmdCdWZmZXI+IENTdHJpbmdCdWZmZXI6OmNyZWF0
ZQogCiAgICAgLy8gVGhlICsxIGlzIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIu
CiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoQ1N0cmluZ0J1ZmZlcikgKyBsZW5ndGggKyAxOwot
ICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1ZmZlciA9IHN0YXRpY19jYXN0PENTdHJpbmdCdWZm
ZXIqPihzdHJpbmdNYWxsb2Moc2l6ZSkpOworICAgIENTdHJpbmdCdWZmZXIqIHN0cmluZ0J1ZmZl
ciA9IHN0YXRpY19jYXN0PENTdHJpbmdCdWZmZXIqPihmYXN0TWFsbG9jKHNpemUpKTsKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc3RyaW5nQnVmZmVyKSBDU3RyaW5nQnVmZmVy
KGxlbmd0aCkpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMjMxMjYz
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDE0ICszMCwxMiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiAvLyBDU3RyaW5nQnVmZmVyIGlz
IHRoZSByZWYtY291bnRlZCBzdG9yYWdlIGNsYXNzIGZvciB0aGUgY2hhcmFjdGVycyBpbiBhIENT
dHJpbmcuCiAvLyBUaGUgZGF0YSBpcyBpbXBsaWNpdGx5IGFsbG9jYXRlZCAxIGNoYXJhY3RlciBs
b25nZXIgdGhhbiBsZW5ndGgoKSwgYXMgaXQgaXMgemVyby10ZXJtaW5hdGVkLgogY2xhc3MgQ1N0
cmluZ0J1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+IHsKLSAgICBXVEZf
TUFLRV9TVFJJTkdfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGNvbnN0IGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtdXRhYmxlRGF0YSgpOyB9CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgU3RyaW5nQnVmZmVyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9j
Lmg+CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CiAKQEAg
LTQyLDEzICs0MSwxMyBAQCBjbGFzcyBTdHJpbmdCdWZmZXIgewogcHVibGljOgogICAgIGV4cGxp
Y2l0IFN0cmluZ0J1ZmZlcih1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIDogbV9sZW5ndGgobGVu
Z3RoKQotICAgICAgICAsIG1fZGF0YShtX2xlbmd0aCA/IHN0YXRpY19jYXN0PENoYXJUeXBlKj4o
c3RyaW5nTWFsbG9jKChDaGVja2VkPHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKENoYXJUeXBl
KSkudW5zYWZlR2V0KCkpKSA6IG51bGxwdHIpCisgICAgICAgICwgbV9kYXRhKG1fbGVuZ3RoID8g
c3RhdGljX2Nhc3Q8Q2hhclR5cGUqPihmYXN0TWFsbG9jKChDaGVja2VkPHNpemVfdD4obV9sZW5n
dGgpICogc2l6ZW9mKENoYXJUeXBlKSkudW5zYWZlR2V0KCkpKSA6IG51bGxwdHIpCiAgICAgewog
ICAgIH0KIAogICAgIH5TdHJpbmdCdWZmZXIoKQogICAgIHsKLSAgICAgICAgc3RyaW5nRnJlZSht
X2RhdGEpOworICAgICAgICBmYXN0RnJlZShtX2RhdGEpOwogICAgIH0KIAogICAgIHZvaWQgc2hy
aW5rKHVuc2lnbmVkIG5ld0xlbmd0aCkKQEAgLTYyLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAg
ICBpZiAobmV3TGVuZ3RoID4gbV9sZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChuZXdMZW5ndGgg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVUNoYXIpKQog
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBtX2RhdGEgPSBzdGF0aWNfY2Fz
dDxVQ2hhcio+KHN0cmluZ1JlYWxsb2MobV9kYXRhLCBuZXdMZW5ndGggKiBzaXplb2YoVUNoYXIp
KSk7CisgICAgICAgICAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RSZWFsbG9j
KG1fZGF0YSwgbmV3TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpOwogICAgICAgICB9CiAgICAgICAg
IG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDkgQEAKICNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCi0jaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJ
RC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N5bWJvbEltcGwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TeW1ib2xSZWdpc3RyeS5oPgpAQCAtMTMxLDcgKzEyOSw3IEBA
IFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93
bmVkKSB7CiAgICAgICAgIC8vIFdlIHVzZSBtX2RhdGE4LCBidXQgc2luY2UgaXQgaXMgYSB1bmlv
biB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3MgZWl0aGVyIHdheS4KICAgICAgICAgQVNTRVJUKG1f
ZGF0YTgpOwotICAgICAgICBzdHJpbmdGcmVlKGNvbnN0X2Nhc3Q8TENoYXIqPihtX2RhdGE4KSk7
CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8TENoYXIqPihtX2RhdGE4KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE0Myw3ICsxNDEsNyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5n
SW1wbCgpCiB2b2lkIFN0cmluZ0ltcGw6OmRlc3Ryb3koU3RyaW5nSW1wbCogc3RyaW5nSW1wbCkK
IHsKICAgICBzdHJpbmdJbXBsLT5+U3RyaW5nSW1wbCgpOwotICAgIHN0cmluZ0ZyZWUoc3RyaW5n
SW1wbCk7CisgICAgZmFzdEZyZWUoc3RyaW5nSW1wbCk7CiB9CiAKIFJlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCkBAIC0xOTAsNyArMTg4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gaW5saW5lIAogICAgIC8vIGhlYXAgYWxsb2NhdGlvbiBmcm9tIHRoaXMgY2FsbC4K
ICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
LSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKICAgICAgICAg
Q1JBU0goKTsKLSAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oc3RyaW5nTWFsbG9jKGFsbG9jYXRpb25TaXplPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpKTsK
KyAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1h
bGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRh
ID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFyYWN0ZXJUeXBlPigpOwogICAgIHJldHVybiBjb25z
dHJ1Y3RJbnRlcm5hbDxDaGFyYWN0ZXJUeXBlPigqc3RyaW5nLCBsZW5ndGgpOwpAQCAtMjE2LDEy
ICsyMTQsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIAogICAg
ICAgICByZXR1cm4gKmVtcHR5KCk7CiAgICAgfQogCi0gICAgLy8gU2FtZSBhcyBjcmVhdGVVbmlu
aXRpYWxpemVkKCkgZXhjZXB0IGhlcmUgd2UgdXNlIHN0cmluZ1JlYWxsb2MuCisgICAgLy8gU2Ft
ZSBhcyBjcmVhdGVVbmluaXRpYWxpemVkKCkgZXhjZXB0IGhlcmUgd2UgdXNlIGZhc3RSZWFsbG9j
LgogICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQogICAgICAg
ICBDUkFTSCgpOwogCiAgICAgb3JpZ2luYWxTdHJpbmctPn5TdHJpbmdJbXBsKCk7Ci0gICAgYXV0
byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KHN0cmluZ1JlYWxsb2MoJm9yaWdp
bmFsU3RyaW5nLmxlYWtSZWYoKSwgYWxsb2NhdGlvblNpemU8Q2hhcmFjdGVyVHlwZT4obGVuZ3Ro
KSkpOworICAgIGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihmYXN0UmVh
bGxvYygmb3JpZ2luYWxTdHJpbmcubGVha1JlZigpLCBhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0ZXJU
eXBlPihsZW5ndGgpKSk7CiAKICAgICBkYXRhID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFyYWN0
ZXJUeXBlPigpOwogICAgIHJldHVybiBjb25zdHJ1Y3RJbnRlcm5hbDxDaGFyYWN0ZXJUeXBlPigq
c3RyaW5nLCBsZW5ndGgpOwpAQCAtMTg4NSwxNCArMTg4Myw0IEBAIGJvb2wgZXF1YWxJZ25vcmlu
Z051bGxpdHkoY29uc3QgVUNoYXIqIGEKICAgICByZXR1cm4gIW1lbWNtcChhLCBiLT5jaGFyYWN0
ZXJzMTYoKSwgYi0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKIH0KIAotdm9pZCBTdHJpbmdJ
bXBsOjpyZWxlYXNlQXNzZXJ0Q2FnZWQoKSBjb25zdAotewotICAgIGlmIChpc1N0YXRpYygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUdJR0FDQUdFX0VOQUJMRUQgfHwg
R2lnYWNhZ2U6OmlzQ2FnZWQoR2lnYWNhZ2U6OlN0cmluZywgdGhpcykpOwotICAgIGlmIChidWZm
ZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJPd25lZCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFHSUdBQ0FHRV9FTkFCTEVEIHx8IEdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdl
OjpTdHJpbmcsIG1fZGF0YTgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9Db252ZXJzaW9uTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbW1vbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oPgogCiAjaWYgVVNFKENGKQogdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaW5nUmVmOwpAQCAtMTU3LDcgKzE1Niw3IEBAIHByb3Rl
Y3RlZDoKIC8vIFJpZ2h0IG5vdyB3ZSB1c2UgYSBtaXggb2YgYm90aCwgd2hpY2ggbWFrZXMgY29k
ZSBtb3JlIGNvbmZ1c2luZyBhbmQgaGFzIG5vIGJlbmVmaXQuCiAKIGNsYXNzIFN0cmluZ0ltcGwg
OiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Ry
aW5nSW1wbCk7IFdURl9NQUtFX1NUUklOR19BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3RyaW5nSW1wbCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5k
IGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CiAgICAgZnJpZW5kIGNsYXNzIEpTQzo6TExJbnQ6OkRh
dGE7CkBAIC0yNTcsNyArMjU2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRh
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotICAg
IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5nVmVjdG9yPENoYXJhY3RlclR5cGUs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYmKTsKKyAgICBz
dGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkb3B0KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJik7CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXI8VUNo
YXI+JiYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFk
b3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mJik7CkBAIC00NzAsOSArNDY5LDYgQEAgcHVibGljOgog
CiAgICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZlck93bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hpcD4obV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hNYXNrQnVm
ZmVyT3duZXJzaGlwKTsgfQogICAgIAotICAgIHZvaWQgYXNzZXJ0Q2FnZWQoKSBjb25zdDsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWxlYXNlQXNzZXJ0Q2FnZWQoKSBjb25zdDsKLQog
cHJvdGVjdGVkOgogICAgIH5TdHJpbmdJbXBsKCk7CiAKQEAgLTUyNiw3ICs1MjIsNyBAQCBzdGF0
aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBsKSA9PSBzaXplCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogCiAvLyBTdHJpbmdJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3RyaW5nSW1wbCB3aWxsIEFT
U0VSVCBpbiB0aGUgZ2VuZXJpYyBWYWx1ZUNoZWNrPFQ+OjpjaGVja0NvbnNpc3RlbmN5Ci0vLyBh
cyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IHN0cmluZ01hbGxvYy4gV2UgZG9uJ3QgY3VycmVu
dGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3QgdGhhdCBjYXNlCisvLyBhcyB0aGV5IGFyZSBub3Qg
YWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSB3YXkg
dG8gZGV0ZWN0IHRoYXQgY2FzZQogLy8gc28gd2UgaWdub3JlIHRoZSBjb25zaXN0ZW5jeSBjaGVj
ayBmb3IgYWxsIFN0cmluZ0ltcGwqLgogdGVtcGxhdGU8PiBzdHJ1Y3QgVmFsdWVDaGVjazxTdHJp
bmdJbXBsKj4gewogICAgIHN0YXRpYyB2b2lkIGNoZWNrQ29uc2lzdGVuY3koY29uc3QgU3RyaW5n
SW1wbCopIHsgfQpAQCAtOTI0LDcgKzkyMCw3IEBAIEFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGwKICAgICBhdXRvKiBvd25lclJlcCA9ICgocmVwLmJ1ZmZlck93bmVyc2hp
cCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVwKTsK
IAogICAgIC8vIFdlIGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgY29udGFpbnMgYm90aCB0aGUgU3Ry
aW5nSW1wbCBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUgcG9pbnRlciB0byB0aGUgb3duZXIgc3RyaW5n
LgotICAgIGF1dG8qIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oc3RyaW5n
TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmluZ0ltcGwqPigxKSkpOworICAgIGF1dG8qIHN0cmlu
Z0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6
ZTxTdHJpbmdJbXBsKj4oMSkpKTsKICAgICBpZiAocmVwLmlzOEJpdCgpKQogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAubV9k
YXRhOCArIG9mZnNldCwgbGVuZ3RoLCAqb3duZXJSZXApKTsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyAoTm90TnVsbCwgc3RyaW5nSW1wbCkgU3RyaW5nSW1wbChyZXAubV9kYXRhMTYgKyBvZmZz
ZXQsIGxlbmd0aCwgKm93bmVyUmVwKSk7CkBAIC05NDksOCArOTQ1LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTXwogICAgICAgICBvdXRwdXQgPSBudWxscHRyOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgYXV0byogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8U3RyaW5nSW1wbCo+KHRyeVN0cmluZ01hbGxvYyhhbGxvY2F0aW9uU2l6ZTxDaGFyYWN0
ZXJUeXBlPihsZW5ndGgpKSk7Ci0gICAgaWYgKCFyZXN1bHQpIHsKKyAgICBTdHJpbmdJbXBsKiBy
ZXN1bHQ7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPENoYXJhY3RlclR5
cGU+KGxlbmd0aCkpLmdldFZhbHVlKHJlc3VsdCkpIHsKICAgICAgICAgb3V0cHV0ID0gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtOTYwLDcgKzk1Niw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU18KIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWlubGluZSBSZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6YWRvcHQoU3RyaW5nVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYmIHZlY3RvcikKK2lubGluZSBSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6YWRvcHQoVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYmIHZlY3RvcikKIHsKICAg
ICBpZiAoc2l6ZV90IHNpemUgPSB2ZWN0b3Iuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVCh2ZWN0
b3IuZGF0YSgpKTsKQEAgLTEwNzQsMTIgKzEwNzAsNiBAQCBpbmxpbmUgVUNoYXIgU3RyaW5nSW1w
bDo6YXQodW5zaWduZWQgaSkgCiAgICAgcmV0dXJuIGlzOEJpdCgpID8gbV9kYXRhOFtpXSA6IG1f
ZGF0YTE2W2ldOwogfQogCi1pbmxpbmUgdm9pZCBTdHJpbmdJbXBsOjphc3NlcnRDYWdlZCgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCi0gICAgICAgIHJlbGVhc2VBc3NlcnRD
YWdlZCgpOwotfQotCiBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChDcmVhdGVTeW1ib2xU
YWcsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgOiBTdHJp
bmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVuZ3RoLCBjaGFyYWN0ZXJzLCBzX2hh
c2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKIHsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nTWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ01hbGxvYy5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nTWFsbG9jLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0cmluZ01hbGxvYy5oIgotCi0jaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9HaWdhY2FnZS5oPgotI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+Ci0KLSNpZiAh
KGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DKQotI2luY2x1
ZGUgPGJtYWxsb2MvYm1hbGxvYy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi0jaWYg
ZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MKLXZvaWQqIHRy
eVN0cmluZ01hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRmFzdE1hbGxvYzo6dHJ5
TWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBzdHJpbmdNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0g
ICAgcmV0dXJuIGZhc3RNYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQqIHN0cmluZ1JlYWxsb2Modm9p
ZCogcCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGZhc3RSZWFsbG9jKHAsIHNpemUpOwot
fQotCi12b2lkIHN0cmluZ0ZyZWUodm9pZCogcCkKLXsKLSAgICByZXR1cm4gZmFzdEZyZWUocCk7
Ci19Ci0jZWxzZQotdm9pZCogdHJ5U3RyaW5nTWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHJl
dHVybiBibWFsbG9jOjphcGk6OnRyeU1hbGxvYyhzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6U3Ry
aW5nR2lnYWNhZ2UpOwotfQotCi12b2lkKiBzdHJpbmdNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0g
ICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6bWFsbG9jKHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpT
dHJpbmdHaWdhY2FnZSk7Ci19Ci0KLXZvaWQqIHN0cmluZ1JlYWxsb2Modm9pZCogcCwgc2l6ZV90
IHNpemUpCi17Ci0gICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6cmVhbGxvYyhwLCBzaXplLCBibWFs
bG9jOjpIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2UpOwotfQotCi12b2lkIHN0cmluZ0ZyZWUodm9p
ZCogcCkKLXsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoVU5MSUtFTFko
IUdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdlOjpTdHJpbmcsIHApKSkgewotICAgICAgICBkYXRh
TG9nKCJUcnlpbmcgdG8gZnJlZSBzdHJpbmcgdGhhdCBpcyBub3QgY2FnZWQ6ICIsIFJhd1BvaW50
ZXIocCksICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLSAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6OlN0cmluZ0dp
Z2FjYWdlKTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ01hbGxvYy5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ01hbGxvYy5oCShub25leGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1XVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5U3RyaW5nTWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCogc3RyaW5nTWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCogc3RyaW5nUmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHN0cmluZ0ZyZWUodm9pZCopOwotCi0jZGVmaW5lIFdURl9NQUtFX1NUUklOR19BTExPQ0FU
RUQgXAotcHVibGljOiBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkg
eyByZXR1cm4gcDsgfSBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBw
KSB7IHJldHVybiBwOyB9IFwKLSAgICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz
aXplKSBcCi0gICAgeyBcCi0gICAgICAgIHJldHVybiA6OldURjo6c3RyaW5nTWFsbG9jKHNpemUp
OyBcCi0gICAgfSBcCi0gICAgXAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIFwK
LSAgICB7IFwKLSAgICAgICAgOjpXVEY6OnN0cmluZ0ZyZWUocCk7IFwKLSAgICB9IFwKLSAgICBc
Ci0gICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUpIFwKLSAgICB7IFwKLSAgICAg
ICAgcmV0dXJuIDo6V1RGOjpzdHJpbmdNYWxsb2Moc2l6ZSk7IFwKLSAgICB9IFwKLSAgICBcCi0g
ICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwKSBcCi0gICAgeyBcCi0gICAgICAgIDo6
V1RGOjpzdHJpbmdGcmVlKHApOyBcCi0gICAgfSBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgTm90TnVsbFRhZywgdm9pZCogbG9jYXRpb24pIFwKLSAgICB7IFwKLSAgICAgICAgQVNT
RVJUKGxvY2F0aW9uKTsgXAotICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKLSAgICB9IFwKLXBy
aXZhdGU6IFwKLXR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm8KLQotCi1zdHJ1Y3QgU3RyaW5nTWFsbG9jIHsKLSAgICBzdGF0aWMgdm9pZCogbWFs
bG9jKHNpemVfdCBzaXplKSB7IHJldHVybiBzdHJpbmdNYWxsb2Moc2l6ZSk7IH0KLSAgICBzdGF0
aWMgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKSB7IHJldHVybiB0cnlTdHJpbmdNYWxsb2Mo
c2l6ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCogcmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkg
eyByZXR1cm4gc3RyaW5nUmVhbGxvYyhwLCBzaXplKTsgfQotICAgIHN0YXRpYyB2b2lkIGZyZWUo
dm9pZCogcCkgeyBzdHJpbmdGcmVlKHApOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
dXNpbmcgV1RGOjpTdHJpbmdNYWxsb2M7Ci11c2luZyBXVEY6OnN0cmluZ01hbGxvYzsKLXVzaW5n
IFdURjo6c3RyaW5nUmVhbGxvYzsKLXVzaW5nIFdURjo6c3RyaW5nRnJlZTsKLXVzaW5nIFdURjo6
dHJ5U3RyaW5nTWFsbG9jOwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oCShyZXZp
c2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oCShub25l
eGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCBtaW5DYXBhY2l0eSA9
IDE2PiB1c2luZyBTdHJpbmdWZWN0b3IgPSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHksIFN0cmluZ01hbGxvYz47Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCi11c2luZyBXVEY6OlN0cmluZ1ZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvU3ltYm9sSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9s
SW1wbC5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBAIGlubGluZSBSZWdpc3RlcmVk
U3ltYm9sSW1wbCogU3ltYm9sSW1wbDoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBTeW1ib2xJ
bXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3RyaW5nSW1wbCB3aWxsIEFTU0VSVAogLy8gaW4gdGhl
IGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hlY2tDb25zaXN0ZW5jeQotLy8gYXMgdGhleSBhcmUg
bm90IGFsbG9jYXRlZCBieSBzdHJpbmdNYWxsb2MuCisvLyBhcyB0aGV5IGFyZSBub3QgYWxsb2Nh
dGVkIGJ5IGZhc3RNYWxsb2MuCiAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbnkgd2F5IHRv
IGRldGVjdCB0aGF0IGNhc2UKIC8vIHNvIHdlIGlnbm9yZSB0aGUgY29uc2lzdGVuY3kgY2hlY2sg
Zm9yIGFsbCBTeW1ib2xJbXBscyouCiB0ZW1wbGF0ZTw+IHN0cnVjdApJbmRleDogU291cmNlL1dU
Ri93dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaAkocmV2aXNpb24gMjMxMjYzKQorKysgU291cmNl
L1dURi93dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIHByb3RlY3RlZDoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBVbmlxdWVkU3Ry
aW5nSW1wbHMgY3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQKIC8vIGlu
IHRoZSBnZW5lcmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kKLS8vIGFzIHRoZXkg
YXJlIG5vdCBhbGxvY2F0ZWQgYnkgc3RyaW5nTWFsbG9jLgorLy8gYXMgdGhleSBhcmUgbm90IGFs
bG9jYXRlZCBieSBmYXN0TWFsbG9jLgogLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdh
eSB0byBkZXRlY3QgdGhhdCBjYXNlCiAvLyBzbyB3ZSBpZ25vcmUgdGhlIGNvbnNpc3RlbmN5IGNo
ZWNrIGZvciBhbGwgVW5pcXVlZFN0cmluZ0ltcGxzKi4KIHRlbXBsYXRlPD4gc3RydWN0CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBhZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYgYnVm
ZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOyB9CiAgICAg
c3RhdGljIFN0cmluZyBhZG9wdChTdHJpbmdCdWZmZXI8VUNoYXI+JiYgYnVmZmVyKSB7IHJldHVy
biBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0
KFN0cmluZ1ZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4mJiB2ZWN0b3IpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdU
Rk1vdmUodmVjdG9yKSk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxDaGFyYWN0
ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2
ZWN0b3IpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodmVjdG9yKSk7IH0KIAog
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbDsgfQogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pc0VtcHR5KCk7IH0KQEAg
LTM2NCw5ICszNjQsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGNsZWFy
aW5nIFN0cmluZy1iYXNlZCBjYWNoZXMuCiAgICAgdm9pZCBjbGVhckltcGxJZk5vdFNoYXJlZCgp
OwogCi0gICAgdm9pZCBhc3NlcnRDYWdlZCgpIGNvbnN0OwotICAgIHZvaWQgcmVsZWFzZUFzc2Vy
dENhZ2VkKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gdm9pZCByZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWdu
ZWQsIHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lk
IGFwcGVuZEludGVybmFsKENoYXJhY3RlclR5cGUpOwpAQCAtNTcyLDE4ICs1NjksNiBAQCBpbmxp
bmUgdm9pZCBTdHJpbmc6OmNsZWFySW1wbElmTm90U2hhcmVkCiAgICAgICAgIG1faW1wbCA9IG51
bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFN0cmluZzo6YXNzZXJ0Q2FnZWQoKSBjb25zdAotewot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+YXNzZXJ0Q2FnZWQoKTsKLX0KLQotaW5s
aW5lIHZvaWQgU3RyaW5nOjpyZWxlYXNlQXNzZXJ0Q2FnZWQoKSBjb25zdAotewotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+cmVsZWFzZUFzc2VydENhZ2VkKCk7Ci19Ci0KICNpZmRl
ZiBfX09CSkNfXwogCiBpbmxpbmUgU3RyaW5nOjpvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE4LTA1LTAzICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgU3RyaW5ncyBzaG91bGQgbm90IGJl
IGFsbG9jYXRlZCBpbiBhIGdpZ2FjYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODUyMTgKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0
aS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgYmVoYXZpb3IuCisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkZWNvZGVLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXpl
cjo6cmVhZFN0cmluZyk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVNwYWNlcyk6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFpbmlu
Z1doaXRlc3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwZXJjZW50RW5jb2RlQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVVUkxFbmNvZGVkRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnNlcmlhbGl6
ZSk6CisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm91ckNDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvdXJDQzo6dG9TdHJpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OlJlcGxpY2FTdGF0ZTo6Y2xv
bmVJRCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxlSUNVOjpkZWNpbWFsU3ltYm9sKToKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsZUlDVTo6ZGVjaW1hbFRleHRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0RGF0ZUZvcm1hdFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlSUNVOjpjcmVh
dGVMYWJlbFZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRGb3JtYXRGb3JTa2VsZXRvbik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVN5c3RlbTo6Z2V0RmluYWxQYXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVN5c3RlbTo6c3RvcmFnZURpcmVjdG9yeSk6CisKIDIwMTgtMDUtMDIgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBOZXR3b3JrTG9hZENoZWNrZXIg
Zm9yIG5hdmlnYXRpb24gbG9hZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAJKHJldmlz
aW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0
YXRpYyBib29sIGRlY29kZUtleShjb25zdCB1aW50OF90KiYgZGEKICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IGxlbmd0aCAqIDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAg
ICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOwogICAgICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBjaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0Myw3ICsxOTQzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgc3RyID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihwdHIpLCBs
ZW5ndGgpOwogICAgICAgICBwdHIgKz0gbGVuZ3RoICogc2l6ZW9mKFVDaGFyKTsKICNlbHNlCi0g
ICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBWZWN0b3I8VUNoYXI+
IGJ1ZmZlcjsKICAgICAgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIHVp
bnQxNl90IGNoOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcgQEAgc3RhdGljIHZvaWQgbm9ybWFsaXplU3BhY2Vz
KFN0cmluZyYgdGV4dAogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3Ro
ID0gdGV4dC5sZW5ndGgoKTsKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGNoYXJWZWN0b3IodGV4
dExlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBjaGFyVmVjdG9yKHRleHRMZW5ndGgpOwogICAg
IFN0cmluZ1ZpZXcodGV4dCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoY2hhclZlY3Rvci5k
YXRhKCkpOwogCiAgICAgY2hhclZlY3RvcltpKytdID0gJyAnOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMzEyNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDcgQEAgcHVibGljOgogICAgIFN0cmluZyB0YWtlUmVt
YWluaW5nV2hpdGVzcGFjZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7Ci0g
ICAgICAgIFN0cmluZ1ZlY3RvcjxMQ2hhciwgOD4gd2hpdGVzcGFjZTsKKyAgICAgICAgVmVjdG9y
PExDaGFyLCA4PiB3aGl0ZXNwYWNlOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBVQ2hhciBj
aGFyYWN0ZXIgPSBtX3RleHRbMF07CiAgICAgICAgICAgICBpZiAoaXNIVE1MU3BhY2UoY2hhcmFj
dGVyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIGJvb2wgVVJMUGFyc2VyOjpzaG91bGRDb3B5Rmls
ZVVSTChDb2RlUG8KICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgqaXRlcmF0b3Ip
OwogfQogCi1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlQnl0ZSh1aW50OF90IGJ5dGUsIFN0cmlu
Z1ZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRFbmNvZGVCeXRlKHVp
bnQ4X3QgYnl0ZSwgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQo
JyUnKTsKICAgICBidWZmZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUp
KTsKQEAgLTI4MTQsNyArMjgxNCw3IEBAIGF1dG8gVVJMUGFyc2VyOjpwYXJzZVVSTEVuY29kZWRG
b3JtKFN0cmkKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVV
UkxFbmNvZGVkRm9ybShjb25zdCBTdHJpbmcmIGlucHV0LCBTdHJpbmdWZWN0b3I8TENoYXI+JiBv
dXRwdXQpCitzdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNvZGVkRm9ybShjb25zdCBTdHJpbmcm
IGlucHV0LCBWZWN0b3I8TENoYXI+JiBvdXRwdXQpCiB7CiAgICAgYXV0byB1dGY4ID0gaW5wdXQu
dXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICBjb25zdCBjaGFyKiBkYXRhID0gdXRmOC5kYXRh
KCk7CkBAIC0yODQwLDcgKzI4NDAsNyBAQCBTdHJpbmcgVVJMUGFyc2VyOjpzZXJpYWxpemUoY29u
c3QgVVJMRW5jCiAgICAgaWYgKHR1cGxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBTdHJpbmdWZWN0b3I8TENoYXI+IG91dHB1dDsKKyAgICBWZWN0b3I8TENoYXI+IG91
dHB1dDsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogdHVwbGVzKSB7CiAgICAgICAgIGlmICghb3V0
cHV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyYnKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMzEyNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBkZWZhdWx0
UG9ydEZvclByb3RvY29sKFN0cmluZ1ZpZXcpOwogCiAgICAgVVJMIG1fdXJsOwotICAgIFN0cmlu
Z1ZlY3RvcjxMQ2hhcj4gbV9hc2NpaUJ1ZmZlcjsKKyAgICBWZWN0b3I8TENoYXI+IG1fYXNjaWlC
dWZmZXI7CiAgICAgYm9vbCBtX3VybElzU3BlY2lhbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Vy
bElzRmlsZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQZXJjZW50T3JOb25BU0NJSSB7
IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvdXJD
Qy5jcHAJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvdXJDQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc3RkOjpvcHRp
b25hbDxGb3VyQ0M+IEZvdXJDQzo6ZnJvbVN0cmluZwogCiBTdHJpbmcgRm91ckNDOjp0b1N0cmlu
ZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5nVmVjdG9yPExDaGFyLCA0PiBkYXRhID0geworICAgIFZl
Y3RvcjxMQ2hhciwgND4gZGF0YSA9IHsKICAgICAgICAgTENoYXIodmFsdWUgPj4gMjQpLAogICAg
ICAgICBMQ2hhcigodmFsdWUgPj4gMTYpICYgMHhGRiksCiAgICAgICAgIExDaGFyKCh2YWx1ZSA+
PiA4KSAmIDB4RkYpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMzEyNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQ3LDcgKzI3NDcsNyBAQCBHcmFwaGljc0xheWVyQ0E6OkNsb25l
SUQgR3JhcGhpY3NMYXllckNBCiAgICAgY29uc3Qgc2l6ZV90IGJpdHNQZXJVQ2hhciA9IHNpemVv
ZihVQ2hhcikgKiA4OwogICAgIHNpemVfdCB2ZWN0b3JTaXplID0gKGRlcHRoICsgYml0c1BlclVD
aGFyIC0gMSkgLyBiaXRzUGVyVUNoYXI7CiAgICAgCi0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBy
ZXN1bHQodmVjdG9yU2l6ZSk7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQodmVjdG9yU2l6ZSk7
CiAgICAgcmVzdWx0LmZpbGwoMCk7CiAKICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgZnJvbSB0aGUg
Yml0IHNlcXVlbmNlIHdoaWNoIHdlIGNhbiB1c2UgdG8gaWRlbnRpZnkgdGhlIGNsb25lLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAkocmV2aXNpb24g
MjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIFN0cmluZyBMb2NhbGVJQ1U6OmRlY2ltYWxT
eW1ib2woVU51bWJlckYKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykgfHwgc3RhdHVzID09
IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykgJiYg
c3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgU3RyaW5nVmVjdG9yPFVDaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKKyAgICBW
ZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwogICAgIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKICAgICB1bnVtX2dldFN5bWJvbChtX251bWJlckZvcm1hdCwgc3ltYm9sLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkKQEAgLTg4LDcgKzg4LDcgQEAgU3RyaW5nIExvY2FsZUlDVTo6ZGVjaW1hbFRleHRBdHRyaWJ1
dGUoVQogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9CVUZGRVJf
T1ZFUkZMT1dfRVJST1IpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0g
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBT
dHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOworICAgIFZlY3RvcjxVQ2hh
cj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAg
IHVudW1fZ2V0VGV4dEF0dHJpYnV0ZShtX251bWJlckZvcm1hdCwgdGFnLCBidWZmZXIuZGF0YSgp
LCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7
CkBAIC0xNTMsNyArMTUzLDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRlRm9ybWF0UGF0dGVybihj
b25zdAogICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF90b1BhdHRlcm4oZGF0ZUZvcm1hdCwgVFJV
RSwgMCwgMCwgJnN0YXR1cyk7CiAgICAgaWYgKHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19F
UlJPUiB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBTdHJp
bmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVy
KGxlbmd0aCk7CiAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIHVkYXRfdG9QYXR0ZXJu
KGRhdGVGb3JtYXQsIFRSVUUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7CiAgICAg
aWYgKFVfRkFJTFVSRShzdGF0dXMpKQpAQCAtMTc1LDcgKzE3NSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8U3RyaW5nPj4gTG9jYWxlSUMKICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1ZGF0
X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZzdGF0
dXMpOwogICAgICAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAg
ICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CisgICAgICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyKGxlbmd0aCk7CiAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAg
ICAgICAgdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCBi
dWZmZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKHN0
YXR1cykpCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIFN0cmluZyBnZXRGb3JtYXRGb3JTa2Vs
ZXRvbihjb25zdAogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQzMl90IGxlbmd0
aCA9IHVkYXRwZ19nZXRCZXN0UGF0dGVybihwYXR0ZXJuR2VuZXJhdG9yLCBza2VsZXRvbiwgc2tl
bGV0b25MZW5ndGgsIDAsIDAsICZzdGF0dXMpOwogICAgIGlmIChzdGF0dXMgPT0gVV9CVUZGRVJf
T1ZFUkZMT1dfRVJST1IgJiYgbGVuZ3RoKSB7Ci0gICAgICAgIFN0cmluZ1ZlY3RvcjxVQ2hhcj4g
YnVmZmVyKGxlbmd0aCk7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CiAg
ICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgdWRhdHBnX2dldEJlc3RQYXR0
ZXJuKHBhdHRlcm5HZW5lcmF0b3IsIHNrZWxldG9uLCBza2VsZXRvbkxlbmd0aCwgYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoLCAmc3RhdHVzKTsKICAgICAgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAko
cmV2aXNpb24gMjMxMjYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIFN0cmlu
ZyBnZXRGaW5hbFBhdGhOYW1lKGNvbnN0IFN0cgogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5k
bGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+
IGJ1ZmZlcihNQVhfUEFUSCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwog
ICAgIGlmICg6OkdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaGFuZGxlLCBidWZmZXIuZGF0YSgp
LCBidWZmZXIuc2l6ZSgpLCBWT0xVTUVfTkFNRV9OVCkgPj0gTUFYX1BBVEgpIHsKICAgICAgICAg
Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTI1MCw3ICsy
NTAsNyBAQCBib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uCiAKIFN0cmlu
ZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbXBvbmVudCkKIHsKLSAgICBTdHJpbmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFU
SCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIoTUFYX1BBVEgpOwogCiAgICAgaWYgKHBhdGgu
bGVuZ3RoKCkgKyAxID4gYnVmZmVyLnNpemUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpA
QCAtMzQ5LDcgKzM0OSw3IEBAIHN0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCiAKIHN0YXRpYyBT
dHJpbmcgc3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKIHsKLSAgICBTdHJp
bmdWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CisgICAgVmVjdG9yPFVDaGFyPiBidWZm
ZXIoTUFYX1BBVEgpOwogICAgIGlmIChGQUlMRUQoU0hHZXRGb2xkZXJQYXRoVygwLCBwYXRoSWRl
bnRpZmllciB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBidWZmZXIuZGF0YSgpKSkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBidWZmZXIucmVzaXplKHdjc2xlbihidWZmZXIuZGF0
YSgpKSk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEzMTgpCisrKyBTb3VyY2UvYm1hbGxv
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxOC0wNS0wMyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZ3Mgc2hvdWxk
IG5vdCBiZSBhbGxvY2F0ZWQgaW4gYSBnaWdhY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Fh
bSBCYXJhdGkuCisgICAgICAgIAorICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIHN0cmluZyBnaWdh
Y2FnZS4KKyAgICAgICAgCisgICAgICAgIFB1dHRpbmcgc3RyaW5ncyBpbiBhIGdpZ2FjYWdlIHBy
ZXZlbnRzIHJlYWQgZ2FkZ2V0cy4gVGhlIG90aGVyIHRoaW5ncyB0aGF0IGdldCB0byBiZSBpbiBn
aWdhY2FnZXMKKyAgICAgICAgYXJlIHRoZXJlIHRvIHByZXZlbnQgcmVhZC13cml0ZSBnYWRnZXRz
LgorICAgICAgICAKKyAgICAgICAgQWxzbywgcHV0dGluZyBzdHJpbmdzIGluIGEgZ2lnYWNhZ2Ug
c2VlbXMgdG8gaGF2ZSBiZWVuIGEgYmlnZ2VyIHJlZ3Jlc3Npb24gdGhhbiBwdXR0aW5nIG90aGVy
CisgICAgICAgIHRoaW5ncyBpbiBnaWdhY2FnZXMuCisgICAgICAgIAorICAgICAgICBUaGVyZWZv
cmUsIHRvIG1heGltaXplIHRoZSBiZW5lZml0L2Nvc3QgcmF0aW8gb2YgZ2lnYWNhZ2VzLCB3ZSBz
aG91bGQgZXZpY3Qgc3RyaW5ncyBmcm9tIHRoZW0uIElmCisgICAgICAgIHdlIHdhbnQgdG8gdGhy
b3cgYXdheSBwZXJmIGZvciBzZWN1cml0eSwgdGhlcmUgYXJlIG1vcmUgYmVuZWZpY2lhbCB0aGlu
Z3MgdG8gc2FjcmlmaWNlLgorCisgICAgICAgICogYm1hbGxvYy9HaWdhY2FnZS5oOgorICAgICAg
ICAoR2lnYWNhZ2U6Om5hbWUpOgorICAgICAgICAoR2lnYWNhZ2U6OmJhc2VQdHIpOgorICAgICAg
ICAoR2lnYWNhZ2U6OnNpemUpOgorICAgICAgICAoR2lnYWNhZ2U6OmZvckVhY2hLaW5kKToKKyAg
ICAgICAgKiBibWFsbG9jL0hlYXBLaW5kLmg6CisgICAgICAgIChibWFsbG9jOjppc0dpZ2FjYWdl
KToKKyAgICAgICAgKGJtYWxsb2M6OmdpZ2FjYWdlS2luZCk6CisgICAgICAgIChibWFsbG9jOjpo
ZWFwS2luZCk6CisgICAgICAgIChibWFsbG9jOjppc0FjdGl2ZUhlYXBLaW5kQWZ0ZXJFbnN1cmlu
Z0dpZ2FjYWdlKToKKyAgICAgICAgKGJtYWxsb2M6Om1hcFRvQWN0aXZlSGVhcEtpbmRBZnRlckVu
c3VyaW5nR2lnYWNhZ2UpOgorCiAyMDE4LTA0LTMwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVzZSBXb3JkTG9jayBpbnN0ZWFkIG9mIHN0ZDo6bXV0
ZXggZm9yIFRocmVhZGluZwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkocmV2aXNp
b24gMjMxMjYzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwyNCArMzYsMjAgQEAKICNpZiBCQ1BVKEFSTTY0KQogI2RlZmluZSBQUklN
SVRJVkVfR0lHQUNBR0VfU0laRSAweDgwMDAwMDAwbGx1CiAjZGVmaW5lIEpTVkFMVUVfR0lHQUNB
R0VfU0laRSAweDQwMDAwMDAwbGx1Ci0jZGVmaW5lIFNUUklOR19HSUdBQ0FHRV9TSVpFIDB4NDAw
MDAwMDBsbHUKICNkZWZpbmUgR0lHQUNBR0VfQUxMT0NBVElPTl9DQU5fRkFJTCAxCiAjZWxzZQog
I2RlZmluZSBQUklNSVRJVkVfR0lHQUNBR0VfU0laRSAweDgwMDAwMDAwMGxsdQogI2RlZmluZSBK
U1ZBTFVFX0dJR0FDQUdFX1NJWkUgMHg0MDAwMDAwMDBsbHUKLSNkZWZpbmUgU1RSSU5HX0dJR0FD
QUdFX1NJWkUgMHg0MDAwMDAwMDBsbHUKICNkZWZpbmUgR0lHQUNBR0VfQUxMT0NBVElPTl9DQU5f
RkFJTCAwCiAjZW5kaWYKIAogc3RhdGljX2Fzc2VydChibWFsbG9jOjppc1Bvd2VyT2ZUd28oUFJJ
TUlUSVZFX0dJR0FDQUdFX1NJWkUpLCAiIik7CiBzdGF0aWNfYXNzZXJ0KGJtYWxsb2M6OmlzUG93
ZXJPZlR3byhKU1ZBTFVFX0dJR0FDQUdFX1NJWkUpLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KGJtYWxs
b2M6OmlzUG93ZXJPZlR3byhTVFJJTkdfR0lHQUNBR0VfU0laRSksICIiKTsKIAogI2RlZmluZSBH
SUdBQ0FHRV9TSVpFX1RPX01BU0soc2l6ZSkgKChzaXplKSAtIDEpCiAKICNkZWZpbmUgUFJJTUlU
SVZFX0dJR0FDQUdFX01BU0sgR0lHQUNBR0VfU0laRV9UT19NQVNLKFBSSU1JVElWRV9HSUdBQ0FH
RV9TSVpFKQogI2RlZmluZSBKU1ZBTFVFX0dJR0FDQUdFX01BU0sgR0lHQUNBR0VfU0laRV9UT19N
QVNLKEpTVkFMVUVfR0lHQUNBR0VfU0laRSkKLSNkZWZpbmUgU1RSSU5HX0dJR0FDQUdFX01BU0sg
R0lHQUNBR0VfU0laRV9UT19NQVNLKFNUUklOR19HSUdBQ0FHRV9TSVpFKQogCiAjaWYgKChCT1Mo
REFSV0lOKSB8fCBCT1MoTElOVVgpKSAmJiBcCiAgICAgKEJDUFUoWDg2XzY0KSB8fCAoQkNQVShB
Uk02NCkgJiYgIWRlZmluZWQoX19JTFAzMl9fKSAmJiAoIUJQTEFURk9STShJT1MpIHx8IF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMwMCkpKSkKQEAgLTc4LDE2ICs3NCwx
NCBAQCBCSU5MSU5FIGJvb2wgd2FzRW5hYmxlZCgpIHsgcmV0dXJuIGdfd2FzCiBzdHJ1Y3QgQmFz
ZVB0cnMgewogICAgIHZvaWQqIHByaW1pdGl2ZTsKICAgICB2b2lkKiBqc1ZhbHVlOwotICAgIHZv
aWQqIHN0cmluZzsKIH07CiAKIGVudW0gS2luZCB7CiAgICAgUHJpbWl0aXZlLAogICAgIEpTVmFs
dWUsCi0gICAgU3RyaW5nCiB9OwogCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUtpbmRz
ID0gMzsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtS2luZHMgPSAyOwogCiBCRVhQT1JU
IHZvaWQgZW5zdXJlR2lnYWNhZ2UoKTsKIApAQCAtMTEwLDggKzEwNCw2IEBAIEJJTkxJTkUgY29u
c3QgY2hhciogbmFtZShLaW5kIGtpbmQpCiAgICAgICAgIHJldHVybiAiUHJpbWl0aXZlIjsKICAg
ICBjYXNlIEpTVmFsdWU6CiAgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7Ci0gICAgY2FzZSBTdHJp
bmc6Ci0gICAgICAgIHJldHVybiAiU3RyaW5nIjsKICAgICB9CiAgICAgQkNSQVNIKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xMjQsOCArMTE2LDYgQEAgQklOTElORSB2b2lkKiYgYmFzZVB0
cihCYXNlUHRycyYgYmFzZVB0cgogICAgICAgICByZXR1cm4gYmFzZVB0cnMucHJpbWl0aXZlOwog
ICAgIGNhc2UgSlNWYWx1ZToKICAgICAgICAgcmV0dXJuIGJhc2VQdHJzLmpzVmFsdWU7Ci0gICAg
Y2FzZSBTdHJpbmc6Ci0gICAgICAgIHJldHVybiBiYXNlUHRycy5zdHJpbmc7CiAgICAgfQogICAg
IEJDUkFTSCgpOwogICAgIHJldHVybiBiYXNlUHRycy5wcmltaXRpdmU7CkBAIC0xNTMsOCArMTQz
LDYgQEAgQklOTElORSBzaXplX3Qgc2l6ZShLaW5kIGtpbmQpCiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3Q+KFBSSU1JVElWRV9HSUdBQ0FHRV9TSVpFKTsKICAgICBjYXNlIEpTVmFs
dWU6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVkFMVUVfR0lHQUNBR0Vf
U0laRSk7Ci0gICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFNUUklOR19HSUdBQ0FHRV9TSVpFKTsKICAgICB9CiAgICAgQkNSQVNIKCk7CiAgICAgcmV0
dXJuIDA7CkBAIC0xNzUsNyArMTYzLDYgQEAgdm9pZCBmb3JFYWNoS2luZChjb25zdCBGdW5jJiBm
dW5jKQogewogICAgIGZ1bmMoUHJpbWl0aXZlKTsKICAgICBmdW5jKEpTVmFsdWUpOwotICAgIGZ1
bmMoU3RyaW5nKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0hlYXBLaW5kLmgJKHJldmlzaW9uIDIzMTI2MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEwIEBAIG5hbWVzcGFj
ZSBibWFsbG9jIHsKIGVudW0gY2xhc3MgSGVhcEtpbmQgewogICAgIFByaW1hcnksCiAgICAgUHJp
bWl0aXZlR2lnYWNhZ2UsCi0gICAgSlNWYWx1ZUdpZ2FjYWdlLAotICAgIFN0cmluZ0dpZ2FjYWdl
CisgICAgSlNWYWx1ZUdpZ2FjYWdlCiB9OwogCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51
bUhlYXBzID0gNDsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtSGVhcHMgPSAzOwogCiBC
SU5MSU5FIGJvb2wgaXNHaWdhY2FnZShIZWFwS2luZCBoZWFwS2luZCkKIHsKQEAgLTQ3LDcgKzQ2
LDYgQEAgQklOTElORSBib29sIGlzR2lnYWNhZ2UoSGVhcEtpbmQgaGVhcEtpbgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CiAgICAg
Y2FzZSBIZWFwS2luZDo6SlNWYWx1ZUdpZ2FjYWdlOgotICAgIGNhc2UgSGVhcEtpbmQ6OlN0cmlu
Z0dpZ2FjYWdlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQkNSQVNIKCk7CkBA
IC02NCw4ICs2Miw2IEBAIEJJTkxJTkUgR2lnYWNhZ2U6OktpbmQgZ2lnYWNhZ2VLaW5kKEhlYXAK
ICAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CiAgICAgY2FzZSBIZWFwS2luZDo6
SlNWYWx1ZUdpZ2FjYWdlOgogICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OkpTVmFsdWU7Ci0gICAg
Y2FzZSBIZWFwS2luZDo6U3RyaW5nR2lnYWNhZ2U6Ci0gICAgICAgIHJldHVybiBHaWdhY2FnZTo6
U3RyaW5nOwogICAgIH0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4gR2lnYWNhZ2U6OlByaW1p
dGl2ZTsKQEAgLTc4LDggKzc0LDYgQEAgQklOTElORSBIZWFwS2luZCBoZWFwS2luZChHaWdhY2Fn
ZTo6S2luZAogICAgICAgICByZXR1cm4gSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOwogICAg
IGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CiAgICAgICAgIHJldHVybiBIZWFwS2luZDo6SlNWYWx1
ZUdpZ2FjYWdlOwotICAgIGNhc2UgR2lnYWNhZ2U6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIEhl
YXBLaW5kOjpTdHJpbmdHaWdhY2FnZTsKICAgICB9CiAgICAgQkNSQVNIKCk7CiAgICAgcmV0dXJu
IEhlYXBLaW5kOjpQcmltYXJ5OwpAQCAtOTAsNyArODQsNiBAQCBCSU5MSU5FIGJvb2wgaXNBY3Rp
dmVIZWFwS2luZEFmdGVyRW5zdXJpCiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBIZWFw
S2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CiAgICAgY2FzZSBIZWFwS2luZDo6SlNWYWx1ZUdpZ2Fj
YWdlOgotICAgIGNhc2UgSGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlOgogICAgICAgICBpZiAoR2ln
YWNhZ2U6Ondhc0VuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMDYsNyArOTksNiBAQCBCSU5MSU5FIEhlYXBLaW5kIG1hcFRvQWN0
aXZlSGVhcEtpbmRBZnRlCiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBIZWFwS2luZDo6
UHJpbWl0aXZlR2lnYWNhZ2U6CiAgICAgY2FzZSBIZWFwS2luZDo6SlNWYWx1ZUdpZ2FjYWdlOgot
ICAgIGNhc2UgSGVhcEtpbmQ6OlN0cmluZ0dpZ2FjYWdlOgogICAgICAgICBpZiAoR2lnYWNhZ2U6
Ondhc0VuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBraW5kOwogICAgICAgICByZXR1cm4g
SGVhcEtpbmQ6OlByaW1hcnk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>