<?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>136129</bug_id>
          
          <creation_ts>2014-08-21 11:57:41 -0700</creation_ts>
          <short_desc>more WEBCORE_EXPORT macro fun!</short_desc>
          <delta_ts>2014-09-01 16:25:12 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030527</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-21 11:57:41 -0700</bug_when>
    <thetext>I&apos;m slowly but surely taking over WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030528</commentid>
    <comment_count>1</comment_count>
      <attachid>236932</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-21 12:12:54 -0700</bug_when>
    <thetext>Created attachment 236932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030535</commentid>
    <comment_count>2</comment_count>
      <attachid>236932</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-21 12:50:23 -0700</bug_when>
    <thetext>Comment on attachment 236932
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030536</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-21 12:51:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/172831</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030648</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-21 20:30:35 -0700</bug_when>
    <thetext>Rolled this out because it broke the windows build pretty badly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030649</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-21 20:30:50 -0700</bug_when>
    <thetext>See http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/63450/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032546</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-09-01 16:25:12 -0700</bug_when>
    <thetext>Re-committed to http://trac.webkit.org/changeset/172862</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236932</attachid>
            <date>2014-08-21 12:12:54 -0700</date>
            <delta_ts>2014-08-21 12:50:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136129-20140821121246.patch</filename>
            <type>text/plain</type>
            <size>299796</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTA4LTIxICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9yZSBXRUJDT1JFX0VYUE9SVCBt
YWNyb3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzYxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHd0Zi9FeHBvcnRNYWNyb3MuaDoKKyAgICAgICAgUmVtb3ZlZCBXVEZfVEVTVElORyB3aGljaCBp
c24ndCB1c2VkLgorCiAyMDE0LTA4LTIwICBBa29zIEtpc3MgIDxha2lzc0BpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgRW5hYmxlIEFSTTY0IGRpc2Fzc2VtYmxlciBvbiBFRkwKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0V4cG9ydE1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0V4cG9ydE1hY3Jvcy5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV1RGL3d0Zi9FeHBv
cnRNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDI0ICsxMDUsNiBAQAogCiAjZW5kaWYg
Ly8gVVNFKEVYUE9SVF9NQUNST1MpCiAKLS8vIFdURl9URVNUSU5HIChhbmQgV0VCQ09SRV9URVNU
SU5HIGluIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmgpIGlzIHVzZWQgZm9yCi0vLyBleHBvcnRpbmcg
c3ltYm9scyB3aGljaCBhcmUgcmVmZXJyZWQgZnJvbSBXZWJDb3JlVGVzdFN1cHBvcnQgbGlicmFy
eS4KLS8vIFNpbmNlIHRoZSBzZXQgb2YgQVBJcyBpcyBjb21tb24gYmV0d2VlbiBwb3J0cywKLS8v
IGl0IGlzIHJhdGhlciB3b3J0aCBhbm5vdGF0aW5nIGluc2lkZSB0aGUgY29kZSB0aGFuIG1haW50
YWluaW5nIHBvcnQgc3BlY2lmaWMgZXhwb3J0IGxpc3RzLgotI2lmIFVTRShFWFBPUlRfTUFDUk9T
X0ZPUl9URVNUSU5HKQotCi0jaWYgZGVmaW5lZChXVEZfSVNfTElOS0VEX0lOX1NBTUVfQklOQVJZ
KQotI2RlZmluZSBXVEZfVEVTVElORyBXVEZfRVhQT1JUX0RFQ0xBUkFUSU9OCi0jZWxzZQotI2Rl
ZmluZSBXVEZfVEVTVElORyBXVEZfSU1QT1JUX0RFQ0xBUkFUSU9OCi0jZW5kaWYKLQotI2Vsc2Ug
Ly8gVVNFKEVYUE9SVF9NQUNST1NfRk9SX1RFU1RJTkcpCi0KLSNkZWZpbmUgV1RGX1RFU1RJTkcK
LQotI2VuZGlmIC8vIFVTRShFWFBPUlRfTUFDUk9TX0ZPUl9URVNUSU5HKQotCiAjaWYgZGVmaW5l
ZChXVEZfSVNfTElOS0VEX0lOX1NBTUVfQklOQVJZKQogI2RlZmluZSBXVEZfRVhQT1JUX1BSSVZB
VEUgV1RGX0VYUE9SVAogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NyBA
QAorMjAxNC0wOC0yMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIE1vcmUgV0VCQ09SRV9FWFBPUlQgbWFjcm9zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MTI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmg6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5RGF0YS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlRGF0YS5oOgorICAgICAgICAq
IE1vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaDoKKyAgICAgICAgKiBNb2R1bGVz
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5oOgorICAgICAgICAqIGJyaWRnZS9JZGVudGlmaWVyUmVwLmg6
CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5oOgorICAgICAgICAqIGRvbS9FeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuaDoKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAg
ICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICogZG9tL01vdXNlUmVsYXRlZEV2ZW50
Lmg6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0Vk
aXRhYmxlU3R5bGUpOgorICAgICAgICAqIGRvbS9Ob2RlVHJhdmVyc2FsLmg6CisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb24pOgor
ICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnN0YXJ0Q29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzdGFydE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6ZW5kQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjplbmRPZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDYXJldENvbnRyb2xsZXI6OmNsZWFyKToKKyAgICAgICAgKiBoaXN0
b3J5L0hpc3RvcnlJdGVtLmg6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuaDoKKyAgICAg
ICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmg6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxP
cHRHcm91cEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSW1hZ2VEb2N1bWVudC5oOgorICAgICAgICAqIGh0bWwvUGx1Z2luRG9jdW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvSW5zZXJ0aW9uUG9pbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xp
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkUmVxdWVzdC5oOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oOgorICAgICAgICAqIGxvYWRl
ci9IaXN0b3J5Q29udHJvbGxlci5oOgorICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5o
OgorICAgICAgICAqIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmg6CisgICAgICAgICogbG9hZGVy
L05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1Byb2dyZXNz
VHJhY2tlci5oOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
aDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvaWNvbi9JY29uQ29udHJvbGxlci5oOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRh
YmFzZS5oOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaDoKKyAgICAg
ICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oOgorICAgICAgICBSZXBsYWNl
ZCBXRUJDT1JFX1RFU1RJTkcgd2l0aCBXRUJDT1JFX0VYUE9SVC4KKyAgICAgICAgKiBwYWdlL0Zy
YW1lVHJlZS5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9Q
YWdlLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZS5oOgorICAgICAgICAqIHBhZ2UvUGFn
ZUdyb3VwLmg6CisgICAgICAgICogcGFnZS9QYWdlVGhyb3R0bGVyLmg6CisgICAgICAgICogcGFn
ZS9QcmludENvbnRleHQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25z
dHJhaW50cy5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgICogcGxhdGZvcm0v
R2FtZXBhZFByb3ZpZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAg
ICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oOgorICAgICAgICAqIHBsYXRmb3JtL01lbW9y
eVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oOgorICAgICAgICBSZW1vdmVk
IFdFQkNPUkVfVEVTVElORywgd2hpY2ggSSdtIHJlcGxhY2luZyB3aXRoIFdFQkNPUkVfRVhQT1JU
LgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAq
IHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpemVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9u
TWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEdseXBocy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UG9pbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0xheW91dFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXll
ckZsdXNoU2NoZWR1bGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJQ
b29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Q
bGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvRmxv
YXRpbmdQb2ludEVudmlyb25tZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0hJREdhbWVw
YWRQcm92aWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2Vu
dGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9Qcm90ZWN0aW9uU3BhY2VCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2Nv
YS9Qcm90ZWN0aW9uU3BhY2VDb2NvYS5oOgorICAgICAgICAoV2ViQ29yZTo6UHJvdGVjdGlvblNw
YWNlOjplbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2suaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9yLmg6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmg6CisgICAgICAgICog
cGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RMb2NhdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICBBZGRlZCBtb3JlIFdF
QkNPUkVfRVhQT1JUIG1hY3Jvcywgd2hpY2ggZG9uJ3QgZG8gYW55dGhpbmcgeWV0LgorCiAyMDE0
LTA4LTIxICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gV2Via2l0V2ViUHJvY2VzcyBjcmFzaGluZyBuYXZpZ2F0aW5nIGF3
YXkgZnJvbSBvZ2cgdmlkZW8gZWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaAkocmV2aXNpb24gMTcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwyMiArNTIsMjIgQEAgY2xhc3MgR2VvbG9jYXRpb24gOiBwdWJsaWMgU2NyaXB0
V3JhcHBhYgogewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPEdlb2xvY2F0aW9uPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIH5HZW9sb2NhdGlvbigpOworICAgIFdF
QkNPUkVfRVhQT1JUIH5HZW9sb2NhdGlvbigpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZp
cnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHJlc3VtZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Np
b24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNz
aW9uKCk7CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0OwotICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZy
YW1lKiBmcmFtZSgpIGNvbnN0OwogCiAgICAgdm9pZCBnZXRDdXJyZW50UG9zaXRpb24oUGFzc1Jl
ZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4pOwogICAgIGludCB3YXRjaFBvc2l0aW9uKFBh
c3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKICAgICB2b2lkIGNsZWFyV2F0Y2go
aW50IHdhdGNoSUQpOwogCi0gICAgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7CiAgICAgYm9vbCBpc0FsbG93ZWQoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24gPT0gWWVzOyB9CiAKICAgICB2b2lkIHBv
c2l0aW9uQ2hhbmdlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oR2VvbG9jYXRpb24qKTsKICAgICB2b2lkIGNhbmNlbFBl
cm1pc3Npb25SZXF1ZXN0KEdlb2xvY2F0aW9uKik7CiAKLSAgICB2b2lkIHBvc2l0aW9uQ2hhbmdl
ZChHZW9sb2NhdGlvblBvc2l0aW9uKik7Ci0gICAgdm9pZCBlcnJvck9jY3VycmVkKEdlb2xvY2F0
aW9uRXJyb3IqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBvc2l0aW9uQ2hhbmdlZChHZW9s
b2NhdGlvblBvc2l0aW9uKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlcnJvck9jY3VycmVk
KEdlb2xvY2F0aW9uRXJyb3IqKTsKIAogICAgIEdlb2xvY2F0aW9uUG9zaXRpb24qIGxhc3RQb3Np
dGlvbigpOwogCiAgICAgR2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50OyB9CiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBz
dGF0aWMgR2VvbG9jYXRpb25Db250cm9sbGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEdlb2xvY2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20o
cGFnZSwgc3VwcGxlbWVudE5hbWUoKSkpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaAko
cmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
KiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOwotICAgIH5JREJEYXRhYmFzZUJhY2tlbmQoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqLCBJREJTZXJ2ZXJDb25uZWN0aW9uJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgfklEQkRhdGFiYXNlQmFja2VuZCgpOwogCiAgICAgSURCU2VydmVyQ29u
bmVjdGlvbiYgc2VydmVyQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5n
ZXQoKTsgfQogCkBAIC03MSw4ICs3MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZEluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3
TWF4SW5kZXhJZCk7CiAgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCk7CiAKLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFz
ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb3Bl
bkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CiAKICAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmQKICAgICB2b2lkIGNyZWF0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRh
ZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlTWV0YWRhdGEuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHN0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhIHsKICAgICB0eXBlZGVm
IEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3RvcmVNYXA7
CiAgICAgT2JqZWN0U3RvcmVNYXAgb2JqZWN0U3RvcmVzOwogCi0gICAgSURCRGF0YWJhc2VNZXRh
ZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJREJEYXRhYmFz
ZU1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgJKHJl
dmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkoYXJyYXksIHNpemVFc3RpbWF0ZSkpOwogICAgIH0KIAot
ICAgIH5JREJLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+SURCS2V5KCk7CiAKICAgICAvLyBJ
biBvcmRlciBvZiB0aGUgbGVhc3QgdG8gdGhlIGhpZ2hlc3QgcHJlY2VkZW50IGluIHRlcm1zIG9m
IHNvcnQgb3JkZXIuCiAgICAgZW51bSBUeXBlIHsKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6
CiAgICAgfTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgp
IGNvbnN0OwogCiAgICAgY29uc3QgS2V5QXJyYXkmIGFycmF5KCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCShyZXZp
c2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IElEQktleURhdGEg
ewogICAgIHsKICAgICB9CiAKLSAgICBJREJLZXlEYXRhKGNvbnN0IElEQktleSopOworICAgIFdF
QkNPUkVfRVhQT1JUIElEQktleURhdGEoY29uc3QgSURCS2V5Kik7CiAKICAgICBzdGF0aWMgSURC
S2V5RGF0YSBtaW5pbXVtKCkKICAgICB7CkBAIC02MSwyNiArNjEsMjYgQEAgc3RydWN0IElEQktl
eURhdGEgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8
SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBh
c3NSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleSgpIGNvbnN0OwogCiAgICAgSURCS2V5
RGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgZW5jb2RlKEtleWVkRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShLZXllZERlY29kZXImLCBJREJLZXlE
YXRhJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVjb2RlciYs
IElEQktleURhdGEmKTsKIAogICAgIC8vIGNvbXBhcmUoKSBoYXMgdGhlIHNhbWUgc2VtYW50aWNz
IGFzIHN0cmNtcCgpLgogICAgIC8vICAgLSBSZXR1cm5zIG5lZ2F0aXZlIGlmIHRoaXMgSURCS2V5
RGF0YSBpcyBsZXNzIHRoYW4gb3RoZXIuCiAgICAgLy8gICAtIFJldHVybnMgcG9zaXRpdmUgaWYg
dGhpcyBJREJLZXlEYXRhIGlzIGdyZWF0ZXIgdGhhbiBvdGhlci4KICAgICAvLyAgIC0gUmV0dXJu
cyB6ZXJvIGlmIHRoaXMgSURCS2V5RGF0YSBpcyBlcXVhbCB0byBvdGhlci4KLSAgICBpbnQgY29t
cGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGNvbXBhcmUoY29uc3QgSURCS2V5RGF0YSYgb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRBcnJheVZhbHVlKGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYpOwogICAgIHZvaWQgc2V0U3Ry
aW5nVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXREYXRlVmFsdWUoZG91YmxlKTsK
LSAgICB2b2lkIHNldE51bWJlclZhbHVlKGRvdWJsZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXROdW1iZXJWYWx1ZShkb3VibGUpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBs
b2dnaW5nU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGxvZ2dpbmdT
dHJpbmcoKSBjb25zdDsKICNlbmRpZgogCiAgICAgSURCS2V5OjpUeXBlIHR5cGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZpc2lv
biAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgdm9pZCBJREJQYXJzZUtleVBhdGgo
Y29uc3QgU3RyaW5nJiwgVmVjdAogY2xhc3MgSURCS2V5UGF0aCB7CiBwdWJsaWM6CiAgICAgSURC
S2V5UGF0aCgpIDogbV90eXBlKE51bGxUeXBlKSB7IH0KLSAgICBleHBsaWNpdCBJREJLZXlQYXRo
KGNvbnN0IFN0cmluZyYpOwotICAgIGV4cGxpY2l0IElEQktleVBhdGgoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFycmF5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJLZXlQYXRoKGNv
bnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IElEQktleVBhdGgoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFycmF5KTsKIAogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIE51
bGxUeXBlID0gMCwKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogCiAgICAgSURCS2V5UGF0aCBp
c29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgZW5jb2RlKEtleWVkRW5jb2RlciYpIGNv
bnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShLZXllZERlY29kZXImLCBJREJLZXlQYXRoJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVjb2RlciYsIElEQktl
eVBhdGgmKTsKIAogcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGJvdW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBsb3dlciwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHVwcGVyLCBib29sIGxvd2VyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIGJvdW5kKGNvbnRleHQsIGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuLCBmYWxzZSwgZWMpOyB9
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgbG93ZXIsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB1cHBlciwgYm9vbCBsb3dlck9wZW4sIGJvb2wgdXBwZXJP
cGVuLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBib29sIGlzT25seUtleSgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNPbmx5S2V5KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
SURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4g
dXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJCb3VuZFR5cGUgdXBwZXJUeXBl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVJhbmdlRGF0YS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlSYW5nZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcs
OSBAQCBzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhIHsKIAogICAgIElEQktleVJhbmdlRGF0YSBpc29s
YXRlZENvcHkoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1heWJlQ3Jl
YXRlSURCS2V5UmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBtYXliZUNyZWF0ZUlEQktleVJhbmdlKCkgY29uc3Q7CiAKLSAgICBib29sIGlz
RXhhY3RseU9uZUtleSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFeGFjdGx5
T25lS2V5KCkgY29uc3Q7CiAKICAgICBib29sIGlzTnVsbDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAkocmV2aXNp
b24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlm
aWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiBjbGFzcyBOb3RpZmljYXRpb24gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOb3RpZmljYXRpb24+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJn
ZXRXaXRoSW5saW5lRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgTm90aWZpY2F0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgTm90aWZpY2F0aW9uKCk7
CiAjaWYgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogICAgIHN0YXRpYyBQYXNzUmVmPE5v
dGlmaWNhdGlvbj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgYm9k
eSwgY29uc3QgU3RyaW5nJiBpY29uVVJJLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0
aW9uQ29kZSYsIFBhc3NSZWZQdHI8Tm90aWZpY2F0aW9uQ2VudGVyPiBwcm92aWRlcik7CiAjZW5k
aWYKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPE5vdGlmaWNh
dGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIHRpdGxl
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zKTsKICNlbmRpZgogICAgIAotICAgIHZpcnR1YWwg
fk5vdGlmaWNhdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfk5vdGlmaWNhdGlv
bigpOwogCiAgICAgdm9pZCBzaG93KCk7CiAjaWYgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05T
KQpAQCAtMTExLDEwICsxMTEsMTAgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY2xvc2UpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
Y2xpY2spOwogICAgIAotICAgIHZvaWQgZGlzcGF0Y2hDbGlja0V2ZW50KCk7Ci0gICAgdm9pZCBk
aXNwYXRjaENsb3NlRXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAg
IHZvaWQgZGlzcGF0Y2hTaG93RXZlbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3Bh
dGNoQ2xpY2tFdmVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hDbG9zZUV2
ZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoU2hvd0V2ZW50KCk7CiAKICAgICB1c2luZyBS
ZWZDb3VudGVkPE5vdGlmaWNhdGlvbj46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPE5vdGlm
aWNhdGlvbj46OmRlcmVmOwpAQCAtMTI4LDExICsxMjgsMTEgQEAgcHVibGljOgogICAgIC8vIERl
cHJlY2F0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBOb3RpZmljYXRpb25DZW50ZXIuCiAgICAgdm9p
ZCBkZXRhY2hQcmVzZW50ZXIoKSB7IH0KIAotICAgIHZvaWQgZmluYWxpemUoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbmFsaXplKCk7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
ICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgcGVybWlzc2lvblN0cmluZyhOb3RpZmljYXRp
b25DbGllbnQ6OlBlcm1pc3Npb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBT
dHJpbmcgcGVybWlzc2lvblN0cmluZyhOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24pOwog
ICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjaz4gPSAwKTsKICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Db250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIE5vdGlmaWNhdGlv
bkNvbnRyb2xsZXIqIGZyb20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm90aWZp
Y2F0aW9uQ29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVu
dE5hbWUoKSkpOyB9Ci0gICAgc3RhdGljIE5vdGlmaWNhdGlvbkNsaWVudCogY2xpZW50RnJvbShQ
YWdlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5vdGlmaWNhdGlvbkNsaWVudCogY2xp
ZW50RnJvbShQYWdlKik7CiAKICAgICBOb3RpZmljYXRpb25DbGllbnQqIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZyaWVuZCBHQ0NvbnRyb2xsZXImIGdjQ29udHJv
bGxlcigpOwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lkIGdhcmJhZ2VDb2xsZWN0U29vbigp
OwotICAgICAgICB2b2lkIGdhcmJhZ2VDb2xsZWN0Tm93KCk7IC8vIEl0J3MgYmV0dGVyIHRvIGNh
bGwgZ2FyYmFnZUNvbGxlY3RTb29uLCB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24g
bm90IHRvLgorICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdhcmJhZ2VDb2xsZWN0U29vbigp
OworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdhcmJhZ2VDb2xsZWN0Tm93KCk7IC8vIEl0
J3MgYmV0dGVyIHRvIGNhbGwgZ2FyYmFnZUNvbGxlY3RTb29uLCB1bmxlc3MgeW91IGhhdmUgYSBz
cGVjaWZpYyByZWFzb24gbm90IHRvLgogCi0gICAgICAgIHZvaWQgZ2FyYmFnZUNvbGxlY3RPbkFs
dGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpOyAvLyBVc2VkIGZv
ciBzdHJlc3MgdGVzdGluZy4KLSAgICAgICAgdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgp
OwotICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVk
KGJvb2wpOwotICAgICAgICB2b2lkIGRpc2NhcmRBbGxDb21waWxlZENvZGUoKTsKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVi
dWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSk7IC8vIFVzZWQgZm9yIHN0cmVzcyB0ZXN0aW5nLgor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7Cisg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JU
aW1lckVuYWJsZWQoYm9vbCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzY2FyZEFs
bENvbXBpbGVkQ29kZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgR0NDb250cm9sbGVyKCk7
IC8vIFVzZSBnY0NvbnRyb2xsZXIoKSBpbnN0ZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvSWRlbnRpZmllclJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9J
ZGVudGlmaWVyUmVwLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9JZGVudGlmaWVyUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJZGVudGlmaWVyUmVwIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSWRlbnRpZmllclJlcCogZ2V0KGludCk7
Ci0gICAgc3RhdGljIElkZW50aWZpZXJSZXAqIGdldChjb25zdCBjaGFyKik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIElkZW50aWZpZXJSZXAqIGdldChpbnQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBJZGVudGlmaWVyUmVwKiBnZXQoY29uc3QgY2hhciopOwogCi0gICAgc3RhdGlj
IGJvb2wgaXNWYWxpZChJZGVudGlmaWVyUmVwKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgaXNWYWxpZChJZGVudGlmaWVyUmVwKik7CiAgICAgCiAgICAgYm9vbCBpc1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpbmc7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnRpZXMuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJpdmF0
ZToKIAogY2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzIDogcHVibGljIFN0eWxlUHJvcGVy
dGllcyB7CiBwdWJsaWM6Ci0gICAgfkltbXV0YWJsZVN0eWxlUHJvcGVydGllcygpOworICAgIFdF
QkNPUkVfRVhQT1JUIH5JbW11dGFibGVTdHlsZVByb3BlcnRpZXMoKTsKICAgICBzdGF0aWMgUGFz
c1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSog
cHJvcGVydGllcywgdW5zaWduZWQgY291bnQsIENTU1BhcnNlck1vZGUpOwogCiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTaXplOyB9CkBAIC0xODYs
NyArMTg2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IGNyZWF0ZShDU1NQYXJzZXJNb2RlID0gQ1NTUXVpcmtzTW9kZSk7CiAgICAgc3RhdGlj
IFBhc3NSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3JlYXRlKGNvbnN0IENTU1Byb3BlcnR5
KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICB+TXV0YWJsZVN0eWxlUHJvcGVy
dGllcygpOworICAgIFdFQkNPUkVfRVhQT1JUIH5NdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKCk7CiAK
ICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVZl
Y3Rvci5zaXplKCk7IH0KIApAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyKCk7CiAgICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNs
YXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAKLSAgICBD
U1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bigpOwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFy
YXRpb24oU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCk7CiAKICAgICBpbnQgZmluZFByb3Bl
cnR5SW5kZXgoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDggKzY4LDggQEAgY2xhc3MgSWdub3JhYmxlRXhjZXB0aW9uQ29kZSA6IHB1YmxpYyBF
eAogCiBjbGFzcyBOb0V4Y2VwdGlvbkFzc2VydGlvbkNoZWNrZXIgOiBwdWJsaWMgRXhjZXB0aW9u
Q29kZVBsYWNlaG9sZGVyIHsKIHB1YmxpYzoKLSAgICBOb0V4Y2VwdGlvbkFzc2VydGlvbkNoZWNr
ZXIoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOwotICAgIH5Ob0V4Y2VwdGlvbkFzc2VydGlv
bkNoZWNrZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBOb0V4Y2VwdGlvbkFzc2VydGlvbkNoZWNr
ZXIoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Ob0V4
Y2VwdGlvbkFzc2VydGlvbkNoZWNrZXIoKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
RXhjZXB0aW9uQ29kZSBkZWZhdWx0RXhjZXB0aW9uQ29kZSA9IDB4YWFhYWFhYWE7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4ICsxMDMs
OCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBLZXlib2FyZEV2ZW50KCk7Ci0g
ICAgS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmLCBBYnN0cmFjdFZp
ZXcqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBLZXlib2FyZEV2ZW50KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmLCBBYnN0cmFj
dFZpZXcqKTsKICAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEtl
eWJvYXJkRXZlbnRJbml0Jik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50PiBtX2tleUV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCShyZXZpc2lv
biAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNb3VzZUV2ZW50KTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb3VzZUV2ZW50
PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBj
YW5jZWxhYmxlLCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8TW91c2VFdmVudD4gY3JlYXRlKGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwg
ZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAogICAgICAgICBpbnQg
ZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBwYWdlWCwgaW50IHBhZ2VZLAog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgICAgIGludCBtb3ZlbWVudFgsIGludCBtb3Zl
bWVudFksCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBjdHJsS2V5LCBi
b29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCB1bnNpZ25lZCBzaG9ydCBi
dXR0b24sCiAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TW91c2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgZG91YmxlIHRpbWVz
dGFtcCwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBQYXNzUmVmUHRyPE1vdXNlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwKICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGlu
dCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NL
KQogICAgICAgICBpbnQgbW92ZW1lbnRYLCBpbnQgbW92ZW1lbnRZLApAQCAtNjksNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRL
ZXksIGJvb2wgbWV0YUtleSwgdW5zaWduZWQgc2hvcnQgYnV0dG9uLAogICAgICAgICBQYXNzUmVm
UHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlcj4s
IGJvb2wgaXNTaW11bGF0ZWQgPSBmYWxzZSk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb3Vz
ZUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgaW50IGRldGFpbCwgUGFz
c1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UGFzc1JlZlB0cjxNb3VzZUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
aW50IGRldGFpbCwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1vdXNlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgY29uc3QgTW91c2VFdmVudEluaXQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L01vdXNlUmVsYXRlZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlUmVsYXRlZEV2ZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZVJlbGF0ZWRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRMb2NhdGlvbjsgfQogICAgICAgICBpbnQgbGF5
ZXJYKCkgb3ZlcnJpZGU7CiAgICAgICAgIGludCBsYXllclkoKSBvdmVycmlkZTsKLSAgICAgICAg
aW50IG9mZnNldFgoKTsKLSAgICAgICAgaW50IG9mZnNldFkoKTsKKyAgICAgICAgV0VCQ09SRV9F
WFBPUlQgaW50IG9mZnNldFgoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgaW50IG9mZnNldFko
KTsKICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTaW11bGF0
ZWQ7IH0KICAgICAgICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdCBvdmVycmlkZTsKICAgICAg
ICAgdmlydHVhbCBpbnQgcGFnZVkoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAko
cmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDggKzE1Miw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGlzU3Vw
cG9ydGVkKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHN0YXJ0SWdub3JpbmdMZWFrcygpOwotICAgIHN0YXRpYyB2b2lkIHN0
b3BJZ25vcmluZ0xlYWtzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc3RhcnRJ
Z25vcmluZ0xlYWtzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc3RvcElnbm9y
aW5nTGVha3MoKTsKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKQEAgLTE5
MywxMiArMTkzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBzaG91bGQgYWxsIGFjdHVhbGx5
IHJldHVybiBhIG5vZGUsIGJ1dCB0aGlzIGlzIG9ubHkgaW1wb3J0YW50IGZvciBsYW5ndWFnZSBi
aW5kaW5ncywKICAgICAvLyB3aGljaCB3aWxsIGFscmVhZHkga25vdyBhbmQgaG9sZCBhIHJlZiBv
biB0aGUgcmlnaHQgbm9kZSB0byByZXR1cm4uIFJldHVybmluZyBib29sIGFsbG93cwogICAgIC8v
IHRoZXNlIG1ldGhvZHMgdG8gYmUgbW9yZSBlZmZpY2llbnQgc2luY2UgdGhleSBkb24ndCBuZWVk
IHRvIHJldHVybiBhIHJlZgotICAgIGJvb2wgaW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
cmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHJlcGxhY2VDaGlsZChQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IGJvb2wgcmVtb3ZlQ2hpbGQoTm9kZSogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29s
IGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHJlbW92ZUNoaWxkKE5vZGUqIGNoaWxkLCBFeGNlcHRp
b25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhcHBlbmRDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHJlbW92ZShFeGNl
cHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoRXhjZXB0aW9uQ29k
ZSYpOwogICAgIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZpcnN0Q2hpbGQo
KTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKSA9
IDA7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0OwpA
QCAtMjE0LDggKzIxNCw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJ
KGNvbnN0IFN0cmluZyYgcHJlZml4KSBjb25zdDsKICAgICBTdHJpbmcgbG9va3VwTmFtZXNwYWNl
UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBFbGVtZW50KiBv
cmlnaW5hbEVsZW1lbnQpIGNvbnN0OwogICAgIAotICAgIFN0cmluZyB0ZXh0Q29udGVudChib29s
IGNvbnZlcnRCUnNUb05ld2xpbmVzID0gZmFsc2UpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dENv
bnRlbnQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyB0ZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNUb05ld2xpbmVzID0gZmFsc2UpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dENvbnRlbnQoY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIAogICAgIE5vZGUqIGxhc3REZXNjZW5kYW50KCkgY29u
c3Q7CiAgICAgTm9kZSogZmlyc3REZXNjZW5kYW50KCkgY29uc3Q7CkBAIC0yNzAsNyArMjcwLDcg
QEAgcHVibGljOgogICAgIEVsZW1lbnQqIHNoYWRvd0hvc3QoKSBjb25zdDsKICAgICAvLyBJZiB0
aGlzIG5vZGUgaXMgaW4gYSBzaGFkb3cgdHJlZSwgcmV0dXJucyBpdHMgc2hhZG93IGhvc3QuIE90
aGVyd2lzZSwgcmV0dXJucyB0aGlzLgogICAgIC8vIERlcHJlY2F0ZWQuIFNob3VsZCB1c2Ugc2hh
ZG93SG9zdCgpIGFuZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLgotICAgIE5vZGUqIGRlcHJlY2F0
ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBk
ZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogY29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdDsKICAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkg
Y29uc3Q7CiAKQEAgLTMwMSw3ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNh
bkNvbnRhaW5SYW5nZUVuZFBvaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGJv
b2wgaXNSb290RWRpdGFibGVFbGVtZW50KCkgY29uc3Q7Ci0gICAgRWxlbWVudCogcm9vdEVkaXRh
YmxlRWxlbWVudCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0
YWJsZUVsZW1lbnQoKSBjb25zdDsKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KEVk
aXRhYmxlVHlwZSkgY29uc3Q7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRo
aXMgZWxlbWVudCdzIGNsb3NlIHRhZyBpcyByZWFjaGVkLApAQCAtMzMxLDcgKzMzMSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldENoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgc2V0RmxhZyhDaGls
ZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQogICAgIHZvaWQgY2xlYXJDaGlsZE5lZWRzU3R5bGVS
ZWNhbGMoKSB7IGNsZWFyRmxhZyhDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQogCi0gICAg
dm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlID0gRnVs
bFN0eWxlQ2hhbmdlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5lZWRzU3R5bGVSZWNh
bGMoU3R5bGVDaGFuZ2VUeXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKICAgICB2b2lkIGNsZWFyTmVl
ZHNTdHlsZVJlY2FsYygpIHsgbV9ub2RlRmxhZ3MgJj0gflN0eWxlQ2hhbmdlTWFzazsgfQogCiAg
ICAgdm9pZCBzZXRJc0xpbmsoYm9vbCBmKSB7IHNldEZsYWcoZiwgSXNMaW5rRmxhZyk7IH0KQEAg
LTM0OCwxMiArMzQ4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgVXNlclNlbGVjdEFsbERvZXNOb3RB
ZmZlY3RFZGl0YWJpbGl0eSwKICAgICAgICAgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFi
bGUKICAgICB9OwotICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoVXNlclNlbGVjdEFsbFRyZWF0
bWVudCA9IFVzZXJTZWxlY3RBbGxEb2VzTm90QWZmZWN0RWRpdGFiaWxpdHkpOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUoVXNlclNlbGVjdEFsbFRyZWF0bWVudCA9
IFVzZXJTZWxlY3RBbGxEb2VzTm90QWZmZWN0RWRpdGFiaWxpdHkpOwogICAgIGJvb2wgaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKTsKIAotICAgIHZvaWQgaW5zcGVjdCgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaW5zcGVjdCgpOwogCi0gICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKEVkaXRh
YmxlVHlwZSBlZGl0YWJsZVR5cGUgPSBDb250ZW50SXNFZGl0YWJsZSwgVXNlclNlbGVjdEFsbFRy
ZWF0bWVudCB0cmVhdG1lbnQgPSBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZSkgY29u
c3QKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGVUeXBl
IGVkaXRhYmxlVHlwZSA9IENvbnRlbnRJc0VkaXRhYmxlLCBVc2VyU2VsZWN0QWxsVHJlYXRtZW50
IHRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSBjb25zdAogICAg
IHsKICAgICAgICAgc3dpdGNoIChlZGl0YWJsZVR5cGUpIHsKICAgICAgICAgY2FzZSBDb250ZW50
SXNFZGl0YWJsZToKQEAgLTM3OSwxNCArMzc5LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwogICAgIEludFJlY3QgcGl4ZWxTbmFwcGVk
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5n
Qm94KCkpOyB9Ci0gICAgTGF5b3V0UmVjdCByZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFJlY3QgcmVuZGVyUmVjdChib29sKiBpc1JlcGxhY2Vk
KTsKICAgICBJbnRSZWN0IHBpeGVsU25hcHBlZFJlbmRlclJlY3QoYm9vbCogaXNSZXBsYWNlZCkg
eyByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdChyZW5kZXJSZWN0KGlzUmVwbGFjZWQpKTsgfQog
Ci0gICAgdW5zaWduZWQgbm9kZUluZGV4KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgbm9kZUluZGV4KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBET00gb3duZXJE
b2N1bWVudCBhdHRyaWJ1dGUuIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgZXhjZXB0
IGluIHRoZSBjYXNlCiAgICAgLy8gb2YgYSBEb2N1bWVudCBub2RlLgotICAgIERvY3VtZW50KiBv
d25lckRvY3VtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQqIG93bmVy
RG9jdW1lbnQoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29jaWF0
ZWQgd2l0aCB0aGlzIG5vZGUuCiAgICAgLy8gQSBEb2N1bWVudCBub2RlIHJldHVybnMgaXRzZWxm
LgpAQCAtNDIwLDcgKzQyMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGJvb2wg
aXNEZXNjZW5kYW50T2YoY29uc3QgTm9kZSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNEZXNjZW5kYW50T2YoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgaXNEZXNjZW5k
YW50T3JTaGFkb3dEZXNjZW5kYW50T2YoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNJbmNsdWRpbmdTaGFk
b3dET00oY29uc3QgTm9kZSopIGNvbnN0OwpAQCAtNTEwLDcgKzUxMCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsKICAgICB2aXJ0
dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlV2hlZWxFdmVudHMoKTsKIAotICAgIHVuc2lnbmVk
IHNob3J0IGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKE5vZGUqKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB1bnNpZ25lZCBzaG9ydCBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlKik7CiAKICAgICB2
aXJ0dWFsIE5vZGUqIHRvTm9kZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSFRNTElucHV0RWxl
bWVudCogdG9JbnB1dEVsZW1lbnQoKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCB1bnJlZ2lzdGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKik7CiAgICAgdm9pZCBub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxs
RGV0YWNoKCk7CiAKLSAgICB2b2lkIHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mKSBjb25z
dDsKIAogICAgIHVuc2lnbmVkIGNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSBjb25zdDsKICAgICB2
b2lkIGluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50ID0gMSk7
CkBAIC02NzcsMTIgKzY3NywxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTk9QU0VVRE87
CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVkTGFzdFJlZigpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlZExhc3RSZWYoKTsKICAgICBib29sIGhhc1RyZWVTaGFyZWRQYXJlbnQoKSBj
b25zdCB7IHJldHVybiAhIXBhcmVudE5vZGUoKTsgfQogCiAgICAgZW51bSBFZGl0YWJsZUxldmVs
IHsgRWRpdGFibGUsIFJpY2hseUVkaXRhYmxlIH07CiAgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxl
KEVkaXRhYmxlTGV2ZWwsIFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgPSBVc2VyU2VsZWN0QWxsSXNB
bHdheXNOb25FZGl0YWJsZSkgY29uc3Q7Ci0gICAgYm9vbCBpc0VkaXRhYmxlVG9BY2Nlc3NpYmls
aXR5KEVkaXRhYmxlTGV2ZWwpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFZGl0
YWJsZVRvQWNjZXNzaWJpbGl0eShFZGl0YWJsZUxldmVsKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZl
cnNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJ
KHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDkgQEAgTm9kZSogbmV4dEluY2x1ZGluZ1BzZXVk
b1NraXBwaW5nQ2hpbGRyZQogCiBuYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CiAKLU5vZGUqIG5l
eHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSopOwotTm9kZSogbmV4dEFuY2VzdG9yU2libGlu
Zyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7Ci1Ob2RlKiBkZWVwTGFzdENo
aWxkKE5vZGUqKTsKK1dFQkNPUkVfRVhQT1JUIE5vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29u
c3QgTm9kZSopOworV0VCQ09SRV9FWFBPUlQgTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25z
dCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CitXRUJDT1JFX0VYUE9SVCBOb2RlKiBk
ZWVwTGFzdENoaWxkKE5vZGUqKTsKIAogdGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgogaW5saW5l
IE5vZGUqIHRyYXZlcnNlTmV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4sCiAgICAgfTsKIAotICAgIFBvc2l0aW9uKCkKKyAg
ICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbigpCiAgICAgICAgIDogbV9vZmZzZXQoMCkKICAgICAg
ICAgLCBtX2FuY2hvclR5cGUoUG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQogICAgICAgICAsIG1f
aXNMZWdhY3lFZGl0aW5nUG9zaXRpb24oZmFsc2UpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBpbnQgbV9vZmZzZXQ7CiAgICAgfTsKLSAgICBQb3NpdGlvbihQYXNzUmVmUHRy
PE5vZGU+IGFuY2hvck5vZGUsIExlZ2FjeUVkaXRpbmdPZmZzZXQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9kZSwgTGVnYWN5RWRpdGluZ09m
ZnNldCk7CiAKICAgICAvLyBGb3IgY3JlYXRpbmcgYmVmb3JlL2FmdGVyIHBvc2l0aW9uczoKICAg
ICBQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIEFuY2hvclR5cGUpOwpAQCAt
ODgsNyArODgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGb3IgY3JlYXRpbmcgb2Zmc2V0IHBvc2l0
aW9uczoKICAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgZXZlbnR1YWxseSBn
byBhd2F5LiBTZWUgYnVnIDYzMDQwLgotICAgIFBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5j
aG9yTm9kZSwgaW50IG9mZnNldCwgQW5jaG9yVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgUG9z
aXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBpbnQgb2Zmc2V0LCBBbmNob3JUeXBl
KTsKIAogICAgIEFuY2hvclR5cGUgYW5jaG9yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEFuY2hvclR5cGU+KG1fYW5jaG9yVHlwZSk7IH0KIApAQCAtOTYsMTEgKzk2LDExIEBAIHB1
YmxpYzoKIAogICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgRE9NIGNvbXBsaWFudCB2YWx1ZXMuICBF
ZGl0aW5nIHBvc2l0aW9ucyBsaWtlIFtpbWcsIDBdIChha2EgW2ltZywgYmVmb3JlXSkKICAgICAv
LyB3aWxsIHJldHVybiBpbWctPnBhcmVudE5vZGUoKSBhbmQgaW1nLT5ub2RlSW5kZXgoKSBmcm9t
IHRoZXNlIGZ1bmN0aW9ucy4KLSAgICBOb2RlKiBjb250YWluZXJOb2RlKCkgY29uc3Q7IC8vIE5V
TEwgZm9yIGEgYmVmb3JlL2FmdGVyIHBvc2l0aW9uIGFuY2hvcmVkIHRvIGEgbm9kZSB3aXRoIG5v
IHBhcmVudAorICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGNvbnRhaW5lck5vZGUoKSBjb25zdDsg
Ly8gbnVsbCBmb3IgYSBiZWZvcmUvYWZ0ZXIgcG9zaXRpb24gYW5jaG9yZWQgdG8gYSBub2RlIHdp
dGggbm8gcGFyZW50CiAgICAgVGV4dCogY29udGFpbmVyVGV4dCgpIGNvbnN0OwogCiAgICAgaW50
IGNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSBjb25zdDsgIC8vIE8obikgZm9yIGJlZm9y
ZS9hZnRlci1hbmNob3JlZCBwb3NpdGlvbnMsIE8oMSkgZm9yIHBhcmVudC1hbmNob3JlZCBwb3Np
dGlvbnMKLSAgICBQb3NpdGlvbiBwYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSBjb25zdDsgLy8g
Q29udmVuaWVuY2UgbWV0aG9kIGZvciBET00gcG9zaXRpb25zIHRoYXQgYWxzbyBmaXhlcyB1cCBz
b21lIHBvc2l0aW9ucyBmb3IgZWRpdGluZworICAgIFdFQkNPUkVfRVhQT1JUIFBvc2l0aW9uIHBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNvbnN0OyAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9y
IERPTSBwb3NpdGlvbnMgdGhhdCBhbHNvIGZpeGVzIHVwIHNvbWUgcG9zaXRpb25zIGZvciBlZGl0
aW5nCiAKICAgICAvLyBJbmxpbmUgTygxKSBhY2Nlc3MgZm9yIFBvc2l0aW9ucyB3aGljaCBjYWxs
ZXJzIGtub3cgdG8gYmUgcGFyZW50LWFuY2hvcmVkCiAgICAgaW50IG9mZnNldEluQ29udGFpbmVy
Tm9kZSgpIGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogICAgIC8vIE1vdmUgdXAg
b3IgZG93biB0aGUgRE9NIGJ5IG9uZSBwb3NpdGlvbi4KICAgICAvLyBPZmZzZXRzIGFyZSBjb21w
dXRlZCB1c2luZyByZW5kZXIgdGV4dCBmb3Igbm9kZXMgdGhhdCBoYXZlIHJlbmRlcmVycyAtIGJ1
dCBub3RlIHRoYXQgZXZlbiB3aGVuCiAgICAgLy8gdXNpbmcgY29tcG9zZWQgY2hhcmFjdGVycywg
dGhlIHJlc3VsdCBtYXkgYmUgaW5zaWRlIGEgc2luZ2xlIHVzZXItdmlzaWJsZSBjaGFyYWN0ZXIg
aWYgYSBsaWdhdHVyZSBpcyBmb3JtZWQuCi0gICAgUG9zaXRpb24gcHJldmlvdXMoUG9zaXRpb25N
b3ZlVHlwZSA9IENvZGVQb2ludCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUG9zaXRpb24g
cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSA9IENvZGVQb2ludCkgY29uc3Q7CiAgICAgUG9zaXRp
b24gbmV4dChQb3NpdGlvbk1vdmVUeXBlID0gQ29kZVBvaW50KSBjb25zdDsKICAgICBzdGF0aWMg
aW50IHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KGNvbnN0IE5vZGUqLCBpbnQgY3VycmVudCk7CiAg
ICAgc3RhdGljIGludCB1bmNoZWNrZWRQcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24o
Y29uc3QgTm9kZSosIGludCBjdXJyZW50KTsKQEAgLTE3MCwxMiArMTcwLDEyIEBAIHB1YmxpYzoK
IAogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIG5vbi1tZW1iZXIgZnVuY3Rpb25zIGFuZCBwdXQg
dGhlbSBzb21ld2hlcmUgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LgogICAgIC8vIFRoZXNlIGFy
ZW4ndCByZWFsbHkgYmFzaWMgInBvc2l0aW9uIiBvcGVyYXRpb25zLiBNb3JlIGhpZ2ggbGV2ZWwg
ZWRpdGluZyBoZWxwZXIgZnVuY3Rpb25zLgotICAgIFBvc2l0aW9uIGxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNl
ID0gZmFsc2UpIGNvbnN0OwotICAgIFBvc2l0aW9uIHRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
KEVBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA9IGZhbHNl
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiBsZWFkaW5nV2hpdGVzcGFjZVBv
c2l0aW9uKEVBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA9
IGZhbHNlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiB0cmFpbGluZ1doaXRl
c3BhY2VQb3NpdGlvbihFQWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRl
c3BhY2UgPSBmYWxzZSkgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhlc2UgcmV0dXJuIHVzZWZ1bCB2
aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9ucy4KLSAgICBQb3NpdGlvbiB1cHN0cmVhbShFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29u
c3Q7Ci0gICAgUG9zaXRpb24gZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UG9zaXRpb24gdXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBvc2l0aW9uIGRv
d25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNDYW5kaWRhdGUoKSBjb25zdDsKICAg
ICBib29sIGlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBjb25zdDsKQEAgLTIwOSw3ICsyMDksNyBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAKIHByaXZhdGU6Ci0gICAgaW50IG9mZnNldEZvclBvc2l0aW9u
QWZ0ZXJBbmNob3IoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb25BZnRlckFuY2hvcigpIGNvbnN0OwogICAgIAogICAgIFBvc2l0aW9uIHByZXZpb3VzQ2hh
cmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKICAgICBQb3NpdGlvbiBuZXh0Q2hhcmFj
dGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lv
biAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNDMgKzUyLDQzIEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIAogY2xhc3MgUmFuZ2Ug
OiBwdWJsaWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiBjcmVhdGUoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5n
ZT4gY3JlYXRlKERvY3VtZW50JiwgUGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW50
IHN0YXJ0T2Zmc2V0LCBQYXNzUmVmUHRyPE5vZGU+IGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNl
dCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0
IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5n
ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYsIFBhc3NSZWZQ
dHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUGFzc1JlZlB0cjxOb2Rl
PiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBQb3NpdGlvbiYsIGNv
bnN0IFBvc2l0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8UmFu
Z2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcgdGhpcyBhIHN0YXRpYyBub24tbWVtYmVyLCBu
b24tZnJpZW5kIGZ1bmN0aW9uLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGUo
RG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlKERv
Y3VtZW50JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CiAjZW5kaWYKLSAgICB+UmFuZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+UmFuZ2UoKTsKIAog
ICAgIERvY3VtZW50JiBvd25lckRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxE
b2N1bWVudCY+KG1fb3duZXJEb2N1bWVudC5nZXQoKSk7IH0KIAotICAgIE5vZGUqIHN0YXJ0Q29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKTsgfQotICAgIGludCBz
dGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQub2Zmc2V0KCk7IH0KLSAgICBOb2Rl
KiBlbmRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX2VuZC5jb250YWluZXIoKTsgfQotICAg
IGludCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIE5vZGUqIHN0YXJ0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dC5jb250YWluZXIoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGludCBzdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnQub2Zmc2V0KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBOb2Rl
KiBlbmRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX2VuZC5jb250YWluZXIoKTsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIGludCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5vZmZz
ZXQoKTsgfQogCiAgICAgTm9kZSogc3RhcnRDb250YWluZXIoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIGludCBzdGFydE9mZnNldChFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgTm9kZSog
ZW5kQ29udGFpbmVyKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBpbnQgZW5kT2Zmc2V0KEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBib29sIGNvbGxhcHNlZChFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb2xsYXBzZWQoRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0
b3JDb250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgdm9p
ZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICB2b2lkIHNldEVuZChQYXNzUmVm
UHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKLSAgICB2b2lkIGNvbGxhcHNlKGJvb2wgdG9TdGFydCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhcnQoUGFz
c1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmID0gQVNT
RVJUX05PX0VYQ0VQVElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRFbmQoUGFzc1Jl
ZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJU
X05PX0VYQ0VQVElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRv
U3RhcnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJ
blJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBz
aG9ydCBjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9B
RlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwogICAgIENvbXBhcmVS
ZXN1bHRzIGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
ICAgICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRf
VE9fRU5ELCBFTkRfVE9fU1RBUlQgfTsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMo
Q29tcGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBh
cmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owog
ICAgIHN0YXRpYyBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwg
aW50IG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIGludCBvZmZzZXRCLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBSYW5nZUJv
dW5kYXJ5UG9pbnQmIGJvdW5kYXJ5QSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eUIsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIGJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25zdDsK
ICAgICBib29sIGludGVyc2VjdHNOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGV4dHJhY3RDb250ZW50cyhFeGNlcHRpb25Db2RlJik7CkBAIC05
NywyOCArOTcsMjggQEAgcHVibGljOgogICAgIFN0cmluZyB0b1N0cmluZyhFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CiAKICAgICBTdHJpbmcgdG9IVE1MKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHRleHQo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OwogCiAgICAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29u
c3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGRldGFjaChFeGNl
cHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gY2xvbmVSYW5nZShFeGNlcHRpb25D
b2RlJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gY2xvbmVS
YW5nZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKLSAgICB2b2lkIHNldFN0YXJ0QWZ0ZXIoTm9k
ZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgdm9pZCBzZXRF
bmRCZWZvcmUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0g
ICAgdm9pZCBzZXRFbmRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKLSAgICB2b2lkIHNlbGVjdE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNT
RVJUX05PX0VYQ0VQVElPTik7Ci0gICAgdm9pZCBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXJ0QWZ0ZXIoTm9k
ZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRFbmRCZWZvcmUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05P
X0VYQ0VQVElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRFbmRBZnRlcihOb2RlKiwg
RXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNlbGVjdE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSos
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxO
b2RlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXJ0QmVmb3JlKE5v
ZGUqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBQb3NpdGlvbiBzdGFydFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC50b1Bvc2l0aW9uKCk7IH0KICAgICBjb25zdCBQb3Np
dGlvbiBlbmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQot
ICAgIHZvaWQgc2V0U3RhcnQoY29uc3QgUG9zaXRpb24mLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VS
VF9OT19FWENFUFRJT04pOwotICAgIHZvaWQgc2V0RW5kKGNvbnN0IFBvc2l0aW9uJiwgRXhjZXB0
aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZChjb25zdCBQb3NpdGlvbiYs
IEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAKLSAgICBOb2RlKiBmaXJz
dE5vZGUoKSBjb25zdDsKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBO
b2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKIAogICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qo
KSBjb25zdDsKIApAQCAtMTMwLDE0ICsxMzAsMTQgQEAgcHVibGljOgogCiAgICAgLy8gTm90IHRy
YW5zZm9ybS1mcmllbmRseQogICAgIHZvaWQgdGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGJv
b2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiA9IDAp
IGNvbnN0OwotICAgIEludFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBJbnRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3Q7CiAKICAgICAvLyBUcmFuc2Zvcm0tZnJp
ZW5kbHkKLSAgICB2b2lkIHRleHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdXNlU2Vs
ZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiA9IDApIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qID0gMCkg
Y29uc3Q7CiAgICAgdm9pZCBnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
KSBjb25zdDsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4m
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mKTsKICNlbmRpZgogCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2Vk
KENvbnRhaW5lck5vZGUmKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
b3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAj
ZW5kaWYKIAotICAgIGJvb2wgY29udGFpbnMoY29uc3QgUmFuZ2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFJhbmdlJikgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgUmFuZ2UoRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bi5pc05vdE51bGwoKTsgfQogICAgIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXRQb3NpdGlv
bigpIHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICB2b2lkIHNldENhcmV0UG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgdm9pZCBjbGVhcigpIHsgc2V0Q2FyZXRQb3NpdGlv
bihWaXNpYmxlUG9zaXRpb24oKSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCkg
eyBzZXRDYXJldFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbigpKTsgfQogCiAgICAgdm9pZCBub2Rl
V2lsbEJlUmVtb3ZlZChOb2RlKik7CiAKQEAgLTEzMSwyMSArMTMxLDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSB8ICh1c2VyVHJpZ2dl
cmVkID8gKFJldmVhbFNlbGVjdGlvbiB8IEZpcmVTZWxlY3RFdmVudCkgOiAwKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSAwKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSBudWxscHRyKTsKIAotICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpIGNvbnN0OwogICAgICAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBSYW5nZSopOwogICAg
IHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90
VXNlclRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJ
Zk5lZWRlZCk7Ci0gICAgdm9pZCBtb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwog
ICAgIHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBFVXNlclRyaWdnZXJl
ZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwg
Y29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdn
ZXJlZCk7CiAgICAgdm9pZCBtb3ZlV2l0aG91dFZhbGlkYXRpb25Ubyhjb25zdCBQb3NpdGlvbiYs
IGNvbnN0IFBvc2l0aW9uJiwgYm9vbCBzZWxlY3Rpb25IYXNEaXJlY3Rpb24sIGJvb2wgc2hvdWxk
U2V0Rm9jdXMpOwogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IGRlZmF1bHRTZXRTZWxlY3Rp
b25PcHRpb25zKCksIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZO
ZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBib29s
IHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpOwot
ICAgIHZvaWQgc2VsZWN0QWxsKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFNldFNlbGVjdGlvbk9wdGlvbnMgPSBkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JP
blNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmlu
aXR5LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFs
bCgpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHByZXBhcmVGb3JEZXN0cnVjdGlvbigp
OwogCkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb250YWlucyhjb25z
dCBMYXlvdXRQb2ludCYpOwogCi0gICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24sIFNlbGVjdGlv
bkRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5LCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmln
Z2VyZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCBTZWxl
Y3Rpb25EaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2Vy
VHJpZ2dlcmVkKTsKICAgICBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHsgRGlyZWN0aW9uVXAsIERp
cmVjdGlvbkRvd24gfTsKICAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgdW5zaWduZWQgdmVy
dGljYWxEaXN0YW5jZSwgVmVydGljYWxEaXJlY3Rpb24sIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNl
clRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5l
ZWRlZCk7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBj
YXJldFJlbmRlcmVyV2l0aG91dFVwZGF0aW5nTGF5b3V0KCkgY29uc3Q7CiAKICAgICAvLyBCb3Vu
ZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKLSAg
ICBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRS
ZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICB2b2lkIHNldENhcmV0UmVjdE5lZWRzVXBk
YXRlKCkgeyBDYXJldEJhc2U6OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7IH0KIAogICAgIHZv
aWQgd2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24sIFNlbGVjdGlvbkRpcmVjdGlvbik7CkBAIC0x
OTgsMTMgKzE5OCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NhcmV0QmxpbmtpbmdTdXNwZW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZDsgfQogCiAgICAg
Ly8gRm9jdXMKLSAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRGb2N1c2VkKGJvb2wpOwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1
cm4gbV9mb2N1c2VkOyB9Ci0gICAgYm9vbCBpc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0OwogICAgIHZv
aWQgcGFnZUFjdGl2YXRpb25DaGFuZ2VkKCk7CiAKICAgICAvLyBQYWludGluZy4KLSAgICB2b2lk
IHVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUFwcGVh
cmFuY2UoKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTIxMywyNiArMjEzLDI2IEBA
IHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKElPUykKIHB1YmxpYzoKLSAgICB2b2lkIGV4cGFuZFNl
bGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIFBhc3NSZWZQ
dHI8UmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0Owot
ICAgIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7
Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCk7Ci0gICAgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0
U2VsZWN0aW9uKCk7Ci0gICAgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rp
b24oaW50IGFtb3VudCkgY29uc3Q7Ci0gICAgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxl
Y3Rpb24oKSBjb25zdDsKLSAgICBVQ2hhciBjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkg
Y29uc3Q7Ci0gICAgaW50IHdvcmRPZmZzZXRJblJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7Ci0g
ICAgYm9vbCBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwotICAg
IGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7Ci0gICAgYm9vbCBzZWxlY3Rp
b25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKLSAgICBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0
KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxl
Y3Rpb24oaW50IGFtb3VudCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VCeUV4
dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7Ci0gICAgdm9pZCBzZWxl
Y3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2Rl
Kik7Ci0gICAgdm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhw
YW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZX
b3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIg
Y2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24oKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0
aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IHdvcmRPZmZzZXRJblJhbmdlKGNv
bnN0IFJhbmdlKikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzcGFjZUZvbGxvd3NX
b3JkSW5SYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
c2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VCeUV4dGVu
ZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoLCBOb2RlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRTZWxl
Y3Rpb24oKTsKICAgICB2b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MgPSB0cnVl
KTsKLSAgICB2b2lkIHNldENhcmV0Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMgVmlz
aWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhcmV0Q29s
b3IoY29uc3QgQ29sb3ImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmlzaWJsZVNlbGVj
dGlvbiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKICAgICB2b2lkIHNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQg
c3VwcHJlc3NTY3JvbGxpbmcoKSB7ICsrbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50OyB9CiAgICAg
dm9pZCByZXN0b3JlU2Nyb2xsaW5nKCkKQEAgLTI1MiwxOCArMjUyLDE4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBFbmRQb2ludHNBZGp1c3RtZW50TW9kZSA9IERvTm90QWRq
c3V0RW5kcG9pbnRzKTsKIAogICAgIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUoKSBjb25zdDsK
LSAgICBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNvcHlUeXBpbmdTdHlsZSgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gY29weVR5cGluZ1N0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQ
YXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwogICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwog
Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50
ID0gdHJ1ZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHNlbGVjdGlvbkJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2b2lk
IGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rhbmds
ZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25zdDsKIAotICAgIEhUTUxGb3JtRWxlbWVudCogY3Vy
cmVudEZvcm0oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRm9ybUVsZW1lbnQqIGN1
cnJlbnRGb3JtKCkgY29uc3Q7CiAKLSAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3Jv
bGxBbGlnbm1lbnQmID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZl
YWxFeHRlbnRPcHRpb24gPSBEb05vdFJldmVhbEV4dGVudCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b25Gcm9tTm9uZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV2ZWFsU2VsZWN0aW9uKGNv
bnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVk
ZWQsIFJldmVhbEV4dGVudE9wdGlvbiA9IERvTm90UmV2ZWFsRXh0ZW50KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CiAKICAgICBib29sIHNob3VsZFNo
b3dCbG9ja0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOyB9
CiAgICAgdm9pZCBzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDU2ICs3Niw1
NiBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpc3RvcnlJdGVtKHVy
bCwgdGFyZ2V0LCBwYXJlbnQsIHRpdGxlKSk7CiAgICAgfQogICAgIAotICAgIH5IaXN0b3J5SXRl
bSgpOworICAgIFdFQkNPUkVfRVhQT1JUIH5IaXN0b3J5SXRlbSgpOwogCi0gICAgUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4gY29weSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQ
dHI8SGlzdG9yeUl0ZW0+IGNvcHkoKSBjb25zdDsKIAogICAgIC8vIFJlc2V0cyB0aGUgSGlzdG9y
eUl0ZW0gdG8gaXRzIGluaXRpYWwgc3RhdGUsIGFzIHJldHVybmVkIGJ5IGNyZWF0ZSgpLgogICAg
IHZvaWQgcmVzZXQoKTsKICAgICAKLSAgICBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMU3RyaW5n
KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcoKSBjb25zdDsKLSAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFVSTFN0cmluZygpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgU3RyaW5n
JiB0aXRsZSgpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNJblBhZ2VDYWNoZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkUGFnZS5nZXQoKTsgfQotICAgIGJvb2wgaGFzQ2FjaGVkUGFnZUV4cGly
ZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0NhY2hlZFBhZ2VFeHBpcmVk
KCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEFsdGVybmF0ZVRpdGxlKGNvbnN0IFN0cmluZyYgYWx0
ZXJuYXRlVGl0bGUpOwotICAgIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRlVGl0bGUoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFsdGVybmF0ZVRpdGxlKGNvbnN0IFN0cmluZyYp
OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRlVGl0bGUoKSBjb25z
dDsKICAgICAKICAgICBjb25zdCBTdHJpbmcmIHBhcmVudCgpIGNvbnN0OwotICAgIFVSTCB1cmwo
KSBjb25zdDsKLSAgICBVUkwgb3JpZ2luYWxVUkwoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcm
IHJlZmVycmVyKCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXQoKSBjb25zdDsKLSAg
ICBib29sIGlzVGFyZ2V0SXRlbSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFVSTCB1cmwo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwgb3JpZ2luYWxVUkwoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgY29uc3QgU3RyaW5nJiB0YXJnZXQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGlzVGFyZ2V0SXRlbSgpIGNvbnN0OwogICAgIAotICAgIEZvcm1EYXRhKiBmb3Jt
RGF0YSgpOwotICAgIFN0cmluZyBmb3JtQ29udGVudFR5cGUoKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBGb3JtRGF0YSogZm9ybURhdGEoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
Zm9ybUNvbnRlbnRUeXBlKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBsYXN0VmlzaXRXYXNGYWls
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRXYXNGYWlsdXJlOyB9CiAKLSAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjcm9sbFBvaW50
KGNvbnN0IEludFBvaW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvaW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxQb2lu
dChjb25zdCBJbnRQb2ludCYpOwogICAgIHZvaWQgY2xlYXJTY3JvbGxQb2ludCgpOwogICAgIAot
ICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0UGFnZVNjYWxl
RmFjdG9yKGZsb2F0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvcihmbG9h
dCk7CiAgICAgCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvY3VtZW50U3RhdGUoKSBjb25z
dDsKLSAgICB2b2lkIHNldERvY3VtZW50U3RhdGUoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9jdW1lbnRTdGF0ZSgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RG9jdW1lbnRTdGF0ZShjb25zdCBWZWN0
b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgY2xlYXJEb2N1bWVudFN0YXRlKCk7CiAKICAgICB2b2lk
IHNldFVSTChjb25zdCBVUkwmKTsKLSAgICB2b2lkIHNldFVSTFN0cmluZyhjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHNldE9yaWdpbmFsVVJMU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgc2V0UmVmZXJyZXIoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRUYXJnZXQoY29uc3Qg
U3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVUkxTdHJpbmcoY29uc3QgU3Ry
aW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPcmlnaW5hbFVSTFN0cmluZyhjb25z
dCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZmVycmVyKGNvbnN0IFN0
cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYp
OwogICAgIHZvaWQgc2V0UGFyZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0VGl0bGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRJc1RhcmdldEl0ZW0oYm9vbCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldElzVGFyZ2V0SXRlbShib29sKTsKICAgICAKLSAgICB2b2lkIHNldFN0YXRl
T2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3QpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGVPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+KTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVP
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlT2JqZWN0OyB9CiAKICAgICB2b2lkIHNldEl0
ZW1TZXF1ZW5jZU51bWJlcihsb25nIGxvbmcgbnVtYmVyKSB7IG1faXRlbVNlcXVlbmNlTnVtYmVy
ID0gbnVtYmVyOyB9CkBAIC0xMzUsMzggKzEzNSwzOCBAQCBwdWJsaWM6IAogICAgIGxvbmcgbG9u
ZyBkb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFNlcXVl
bmNlTnVtYmVyOyB9CiAKICAgICB2b2lkIHNldEZvcm1JbmZvRnJvbVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBzZXRGb3JtRGF0YShQYXNzUmVmUHRyPEZvcm1EYXRh
Pik7Ci0gICAgdm9pZCBzZXRGb3JtQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRGb3JtRGF0YShQYXNzUmVmUHRyPEZvcm1EYXRhPik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb3JtQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB2b2lkIHNldExhc3RWaXNpdFdhc0ZhaWx1cmUoYm9vbCB3YXNGYWlsdXJlKSB7IG1fbGFz
dFZpc2l0V2FzRmFpbHVyZSA9IHdhc0ZhaWx1cmU7IH0KIAotICAgIHZvaWQgYWRkQ2hpbGRJdGVt
KFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENo
aWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPik7CiAgICAgdm9pZCBzZXRDaGlsZEl0ZW0o
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOwotICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0ZW1XaXRo
VGFyZ2V0KGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEhpc3RvcnlJ
dGVtKiBjaGlsZEl0ZW1XaXRoVGFyZ2V0KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIEhpc3Rv
cnlJdGVtKiBjaGlsZEl0ZW1XaXRoRG9jdW1lbnRTZXF1ZW5jZU51bWJlcihsb25nIGxvbmcgbnVt
YmVyKSBjb25zdDsKLSAgICBIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSgpOwotICAgIGNvbnN0IEhp
c3RvcnlJdGVtVmVjdG9yJiBjaGlsZHJlbigpIGNvbnN0OwotICAgIGJvb2wgaGFzQ2hpbGRyZW4o
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZHJlbigpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2
b2lkIGNsZWFyQ2hpbGRyZW4oKTsKICAgICBib29sIGlzQW5jZXN0b3JPZihjb25zdCBIaXN0b3J5
SXRlbSopIGNvbnN0OwogICAgIAogICAgIGJvb2wgc2hvdWxkRG9TYW1lRG9jdW1lbnROYXZpZ2F0
aW9uVG8oSGlzdG9yeUl0ZW0qIG90aGVySXRlbSkgY29uc3Q7CiAgICAgYm9vbCBoYXNTYW1lRnJh
bWVzKEhpc3RvcnlJdGVtKiBvdGhlckl0ZW0pIGNvbnN0OwogCi0gICAgdm9pZCBhZGRSZWRpcmVj
dFVSTChjb25zdCBTdHJpbmcmKTsKLSAgICBWZWN0b3I8U3RyaW5nPiogcmVkaXJlY3RVUkxzKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRSZWRpcmVjdFVSTHMoc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxT
dHJpbmc+Pik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRSZWRpcmVjdFVSTChjb25zdCBT
dHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiogcmVkaXJlY3RVUkxz
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZWRpcmVjdFVSTHMoc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxTdHJpbmc+Pik7CiAKICAgICBib29sIGlzQ3VycmVudERvY3VtZW50
KERvY3VtZW50KikgY29uc3Q7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWQgdmll
d1N0YXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWaWV3U3RhdGUoaWQpOworICAgIFdFQkNPUkVf
RVhQT1JUIGlkIHZpZXdTdGF0ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Vmlld1N0YXRlKGlkKTsKICAgICAKICAgICAvLyBUcmFuc2llbnQgcHJvcGVydGllcyBtYXkgYmUg
b2YgYW55IE9iakMgdHlwZS4gIFRoZXkgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc3RvcmUg
c3RhdGUgcGVyIGJhY2svZm9yd2FyZCBsaXN0IGVudHJ5LgogICAgIC8vIFRoZSBwcm9wZXJ0aWVz
IHdpbGwgbm90IGJlIHBlcnNpc3RlZDsgd2hlbiB0aGUgaGlzdG9yeSBpdGVtIGlzIHJlbW92ZWQs
IHRoZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbG9zdC4KLSAgICBpZCBnZXRUcmFuc2llbnRQcm9wZXJ0
eShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2b2lkIHNldFRyYW5zaWVudFByb3BlcnR5KGNv
bnN0IFN0cmluZyYsIGlkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBpZCBnZXRUcmFuc2llbnRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRy
YW5zaWVudFByb3BlcnR5KGNvbnN0IFN0cmluZyYsIGlkKTsKICNlbmRpZgogCiAjaWZuZGVmIE5E
RUJVRwpAQCAtMjA2LDEwICsyMDYsMTAgQEAgcHVibGljOiAKICNlbmRpZgogCiBwcml2YXRlOgot
ICAgIEhpc3RvcnlJdGVtKCk7Ci0gICAgSGlzdG9yeUl0ZW0oY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwotICAgIEhpc3RvcnlJdGVtKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0ZVRp
dGxlKTsKLSAgICBIaXN0b3J5SXRlbShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFyZW50LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBIaXN0b3J5SXRlbSgpOworICAgIFdFQkNPUkVfRVhQT1JUIEhpc3RvcnlJ
dGVtKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBIaXN0b3J5SXRlbShjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGVUaXRsZSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgSGlzdG9yeUl0ZW0oY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUs
IGNvbnN0IFN0cmluZyYgcGFyZW50LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAogICAgIGV4cGxp
Y2l0IEhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVtJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9QYWdlQ2FjaGUuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9QYWdlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTggKzQ1LDE4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSopIGNv
bnN0OwogCi0gICAgICAgIHZvaWQgc2V0Q2FwYWNpdHkoaW50KTsgLy8gbnVtYmVyIG9mIHBhZ2Vz
IHRvIGNhY2hlCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FwYWNpdHkoaW50KTsg
Ly8gbnVtYmVyIG9mIHBhZ2VzIHRvIGNhY2hlCiAgICAgICAgIGludCBjYXBhY2l0eSgpIHsgcmV0
dXJuIG1fY2FwYWNpdHk7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+LCBQYWdlJik7IC8vIFBydW5lcyBpZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVk
LgotICAgICAgICB2b2lkIHJlbW92ZShIaXN0b3J5SXRlbSopOworICAgICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZShIaXN0b3J5SXRlbSopOwogICAgICAgICBDYWNoZWRQYWdlKiBnZXQo
SGlzdG9yeUl0ZW0qIGl0ZW0pOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4g
dGFrZShIaXN0b3J5SXRlbSopOwogCiAgICAgICAgIGludCBwYWdlQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KLSAgICAgICAgaW50IGZyYW1lQ291bnQoKSBjb25zdDsKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgaW50IGZyYW1lQ291bnQoKSBjb25zdDsKIAotICAgICAgICB2b2lkIG1h
cmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIG1hcmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpOwogCiAgICAgICAgIC8v
IFdpbGwgbWFyayBhbGwgY2FjaGVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFn
ZSBhcyBuZWVkaW5nIHN0eWxlIHJlY2FsYy4KICAgICAgICAgdm9pZCBtYXJrUGFnZXNGb3JGdWxs
U3R5bGVSZWNhbGMoUGFnZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
c3RvcmVDb250cm9sU3RhdGVGb3IoSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSYpOwog
ICAgIHZvaWQgcmVzdG9yZUNvbnRyb2xTdGF0ZUluKEhUTUxGb3JtRWxlbWVudCYpOwogCi0gICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGdldFJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN0YXRlVmVjdG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gZ2V0UmVmZXJlbmNlZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3Rh
dGVWZWN0b3IpOwogCiBwcml2YXRlOgogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU+LCA2ND4gRm9ybUVsZW1lbnRMaXN0SGFzaFNl
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjaGls
ZHJlbigpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdCBvdmVycmlkZSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDE3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEwICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRBdXRvY29t
cGxldGUoKSBjb25zdDsKIAogI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJ
VEFMSVpFKQotICAgIGJvb2wgYXV0b2NvcnJlY3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGF1dG9jb3JyZWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBdXRvY29ycmVjdChib29s
KTsKIAotICAgIFdlYkF1dG9jYXBpdGFsaXplVHlwZSBhdXRvY2FwaXRhbGl6ZVR5cGUoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJBdXRvY2FwaXRhbGl6ZVR5cGUgYXV0b2NhcGl0YWxp
emVUeXBlKCkgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvY2FwaXRhbGl6ZSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0QXV0b2NhcGl0YWxpemUoY29uc3QgQXRvbWljU3RyaW5nJik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1l
bnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVP
d25lckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAK
ICAgICBGcmFtZSogY29udGVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50RnJhbWU7
IH0KICAgICBET01XaW5kb3cqIGNvbnRlbnRXaW5kb3coKSBjb25zdDsKLSAgICBEb2N1bWVudCog
Y29udGVudERvY3VtZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQqIGNv
bnRlbnREb2N1bWVudCgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDb250ZW50RnJhbWUoRnJhbWUq
KTsKICAgICB2b2lkIGNsZWFyQ29udGVudEZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudCgp
IG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBdXRv
Y29tcGxldGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJv
b2wgc2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBGb3IgVmFs
aWRpdHlTdGF0ZQogICAgIHZpcnR1YWwgYm9vbCBoYXNCYWRJbnB1dCgpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtMTA4LDEwICsxMDgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNUZXh0QnV0dG9uKCkg
Y29uc3Q7CiAKICAgICBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKLSAgICBib29sIGlzVGV4
dEZpZWxkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0OwogICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4o
KSBjb25zdDsKLSAgICBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NoZWNrYm94
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OwogCkBAIC0xMjMsMjEg
KzEyMywyMSBAQCBwdWJsaWM6CiAgICAgLy8gYmUgdXNpbmcgYSBkaWZmZXJlbnQgb25lLiBNYW55
IGlucHV0IGVsZW1lbnRzIGJlaGF2ZSBsaWtlIHRleHQgZmllbGRzLCBhbmQgaW4gYWRkaXRpb24K
ICAgICAvLyBhbnkgdW5rbm93biBpbnB1dCB0eXBlIGlzIHRyZWF0ZWQgYXMgdGV4dC4gQ29uc2lk
ZXIsIGZvciBleGFtcGxlLCBpc1RleHRGaWVsZCBvcgogICAgIC8vIGlzVGV4dEZpZWxkICYmICFp
c1Bhc3N3b3JkRmllbGQuCi0gICAgYm9vbCBpc1RleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGlzVGV4dCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc0VtYWlsRmllbGQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW1haWxGaWVsZCgpIGNvbnN0OwogICAgIGJv
b2wgaXNGaWxlVXBsb2FkKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc051bWJlckZpZWxkKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc051bWJlckZpZWxkKCkgY29uc3Q7CiAgICAgYm9vbCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0
OwotICAgIGJvb2wgaXNUZWxlcGhvbmVGaWVsZCgpIGNvbnN0OwotICAgIGJvb2wgaXNVUkxGaWVs
ZCgpIGNvbnN0OwotICAgIGJvb2wgaXNEYXRlRmllbGQoKSBjb25zdDsKLSAgICBib29sIGlzRGF0
ZVRpbWVGaWVsZCgpIGNvbnN0OwotICAgIGJvb2wgaXNEYXRlVGltZUxvY2FsRmllbGQoKSBjb25z
dDsKLSAgICBib29sIGlzTW9udGhGaWVsZCgpIGNvbnN0OwotICAgIGJvb2wgaXNUaW1lRmllbGQo
KSBjb25zdDsKLSAgICBib29sIGlzV2Vla0ZpZWxkKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc1RlbGVwaG9uZUZpZWxkKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc1VSTEZpZWxkKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RhdGVGaWVs
ZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEYXRlVGltZUZpZWxkKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RhdGVUaW1lTG9jYWxGaWVsZCgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNNb250aEZpZWxkKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc1RpbWVGaWVsZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaXNXZWVrRmllbGQoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBEYXRl
Q29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0OwpAQCAtMTcxLDggKzE3MSw4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiwgVGV4dEZpZWxkRXZl
bnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCk7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBT
dHJpbmcmLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KTsKLSAgICB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgPSBEaXNw
YXRjaE5vRXZlbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNv
bnN0IFN0cmluZyYpOwogICAgIC8vIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyB3b3Vs
ZCBiZSBhIHZhbGlkIHZhbHVlLgogICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCB0aGlzIGZvciB0
eXBlcyB3aXRoIG5vIHN0cmluZyB2YWx1ZSBzdWNoIGFzIENIRUNLQk9YIGFuZCBSQURJTy4KICAg
ICBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKQEAgLTE4NSwxMyArMTg1
LDEzIEBAIHB1YmxpYzoKICAgICAvLyBUaGUgdmFsdWUgd2hpY2ggaXMgZHJhd24gYnkgYSByZW5k
ZXJlci4KICAgICBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEVk
aXRpbmdWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVk
aXRpbmdWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNv
bnN0OwogICAgIHZvaWQgc2V0VmFsdWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25Db2RlJik7CiAK
LSAgICBkb3VibGUgdmFsdWVBc051bWJlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWVBc051
bWJlcihkb3VibGUsIEV4Y2VwdGlvbkNvZGUmLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yID0gRGlz
cGF0Y2hOb0V2ZW50KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgdmFsdWVBc051bWJlcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmFsdWVBc051bWJlcihkb3VibGUs
IEV4Y2VwdGlvbkNvZGUmLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50
KTsKIAogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7CiAKQEAgLTIzNyw3ICsy
MzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCiAgICAgYm9vbCBp
c0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b2ZpbGxlZDsgfQotICAgIHZvaWQg
c2V0QXV0b2ZpbGxlZChib29sID0gdHJ1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRB
dXRvZmlsbGVkKGJvb2wgPSB0cnVlKTsKIAogICAgIEZpbGVMaXN0KiBmaWxlcygpOwogICAgIHZv
aWQgc2V0RmlsZXMoUGFzc1JlZlB0cjxGaWxlTGlzdD4pOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHB1
YmxpYzoKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQogICAgIC8vIEZvciB0ZXN0IHB1
cnBvc2VzLgotICAgIHZvaWQgc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcihjb25zdCBDb2xvciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcihjb25z
dCBDb2xvciYpOwogI2VuZGlmCiAKICAgICBTdHJpbmcgZGVmYXVsdFRvb2xUaXAoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzQXVk
aW8oKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgcmV3aW5kKGRvdWJsZSB0aW1lRGVsdGEp
OwotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5Ub1JlYWx0aW1lKCkgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJldHVyblRvUmVhbHRpbWUoKSBvdmVycmlkZTsKIAog
ICAgIC8vIEV2ZW50dWFsbHkgb3ZlcmxvYWRlZCBpbiBIVE1MVmlkZW9FbGVtZW50CiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9OwpAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgZG9lc0hhdmVBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiwgQXRvbWljU3RyaW5nKiB2
YWx1ZSA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGxhdGZvcm1NZWRpYSBwbGF0
Zm9ybU1lZGlhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1NZWRpYSBwbGF0
Zm9ybU1lZGlhKCkgY29uc3Q7CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0OwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KFBsYXRmb3JtTGF5ZXIqKTsKQEAgLTE2NywyNiArMTY3LDI2IEBAIHB1YmxpYzoKICAgICBib29s
IHNlZWtpbmcoKSBjb25zdDsKIAogLy8gcGxheWJhY2sgc3RhdGUKLSAgICB2aXJ0dWFsIGRvdWJs
ZSBjdXJyZW50VGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHNldEN1cnJlbnRUaW1lKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEN1
cnJlbnRUaW1lKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIHBhdXNlZCgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRQbGF5YmFja1JhdGUo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFBsYXliYWNrUmF0
ZShkb3VibGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIHBsYXliYWNrUmF0ZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgZG91YmxlIHBsYXliYWNr
UmF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1JhdGUo
ZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOwogICAgIGJv
b2wgd2Via2l0UHJlc2VydmVzUGl0Y2goKSBjb25zdDsKICAgICB2b2lkIHNldFdlYmtpdFByZXNl
cnZlc1BpdGNoKGJvb2wpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBwbGF5
ZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gc2Vla2Fi
bGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGVuZGVkKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBlbmRlZCgpIGNvbnN0OwogICAgIGJvb2wgYXV0b3BsYXkoKSBjb25zdDsK
ICAgICBib29sIGxvb3AoKSBjb25zdDsgICAgCiAgICAgdm9pZCBzZXRMb29wKGJvb2wgYik7Ci0g
ICAgdmlydHVhbCB2b2lkIHBsYXkoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2Uo
KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGxheSgpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wpIG92ZXJyaWRlOwogICAg
IHZvaWQgZmFzdFNlZWsoZG91YmxlKTsKICAgICBkb3VibGUgbWluRmFzdFJldmVyc2VSYXRlKCkg
Y29uc3Q7CkBAIC0yMzUsMjAgKzIzNSwyMCBAQCBwdWJsaWM6CiAvLyBjb250cm9scwogICAgIGJv
b2wgY29udHJvbHMoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRyb2xzKGJvb2wpOwotICAgIHZp
cnR1YWwgZG91YmxlIHZvbHVtZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgZG91YmxlIHZvbHVtZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWb2x1bWUoZG91YmxlLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIG11dGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE11dGVk
KGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBtdXRlZCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRNdXRl
ZChib29sKSBvdmVycmlkZTsKIAotICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luU2NydWJiaW5n
KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjcnViYmlu
ZygpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmcoU2NhbkRpcmVj
dGlvbikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7
CiAgICAgZG91YmxlIG5leHRTY2FuUmF0ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGNhblBsYXko
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgY2FuUGxh
eSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZG91YmxlIHBlcmNlbnRMb2FkZWQoKSBjb25zdDsK
IApAQCAtMzc3LDEwICszNzcsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuICFtX3BsYXllciB8fCBtX3BsYXllci0+aGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4oKTsgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxzY3Jl
ZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgaXNG
dWxsc2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCB0b2dnbGVGdWxsc2NyZWVuU3Rh
dGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxz
Y3JlZW4oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUoKSBjb25zdCBv
dmVycmlkZTsKQEAgLTM5NCw5ICszOTQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBy
aXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBNZWRpYSBj
YWNoZSBtYW5hZ2VtZW50LgotICAgIHN0YXRpYyB2b2lkIGdldFNpdGVzSW5NZWRpYUNhY2hlKFZl
Y3RvcjxTdHJpbmc+Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJNZWRpYUNhY2hlKCk7Ci0gICAg
c3RhdGljIHZvaWQgY2xlYXJNZWRpYUNhY2hlRm9yU2l0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBnZXRTaXRlc0luTWVkaWFDYWNoZShWZWN0b3I8U3Ry
aW5nPiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGNsZWFyTWVkaWFDYWNoZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGNsZWFyTWVkaWFDYWNoZUZvclNpdGUo
Y29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIHZvaWQgcmVzZXRNZWRpYUVuZ2luZXMoKTsKIAog
ICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5aW5nOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKSBjb25zdCBvdmVycmlkZTsKICAgICBIVE1MU2VsZWN0RWxlbWVudCog
b3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7CiAgICAgCi0gICAgU3RyaW5nIGdyb3VwTGFiZWxU
ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdyb3VwTGFiZWxUZXh0KCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTE9wdEdyb3VwRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25F
bGVtZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3Ry
dWN0b3IoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdmFsdWUs
CiAgICAgICAgYm9vbCBkZWZhdWx0U2VsZWN0ZWQsIGJvb2wgc2VsZWN0ZWQsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGludCBpbmRleCgpIGNvbnN0OwpAQCAt
NDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAotICAgIGJvb2wgc2VsZWN0ZWQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGVkKCk7CiAgICAgdm9pZCBzZXRTZWxlY3RlZChib29s
KTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGdl
dEluc3RhbmNlKCk7CiAKLSAgICBXaWRnZXQqIHBsdWdpbldpZGdldCgpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIFdpZGdldCogcGx1Z2luV2lkZ2V0KCkgY29uc3Q7CiAKICAgICBlbnVtIERp
c3BsYXlTdGF0ZSB7CiAgICAgICAgIFdhaXRpbmdGb3JTbmFwc2hvdCwKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogICAgIEpTQzo6SlNPYmplY3QqIHNjcmlwdE9iamVjdEZvclBsdWdpblJlcGxh
Y2VtZW50KCk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBOUE9iamVj
dCogZ2V0TlBPYmplY3QoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBOUE9iamVjdCogZ2V0TlBPYmpl
Y3QoKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0NhcHR1cmluZ01vdXNlRXZlbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NhcHR1cmluZ01vdXNlRXZlbnRzOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDEzICs3MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1c2VyRGlkQ2xpY2tTbmFw
c2hvdChQYXNzUmVmUHRyPE1vdXNlRXZlbnQ+LCBib29sIGZvcndhcmRFdmVudCk7CiAgICAgdm9p
ZCBjaGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgSW1hZ2UqIHNuYXBzaG90SW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90SW1hZ2UuZ2V0KCk7IH0KLSAgICB2b2lkIHJlc3RhcnRTbmFw
c2hvdHRlZFBsdWdJbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdGFydFNuYXBzaG90
dGVkUGx1Z0luKCk7CiAKICAgICAvLyBQbHVnLWluIFVSTCBtaWdodCBub3QgYmUgdGhlIHNhbWUg
YXMgdXJsKCkgd2l0aCBvdmVycmlkaW5nIHBhcmFtZXRlcnMuCiAgICAgdm9pZCBzdWJmcmFtZUxv
YWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgVVJMJiBwbHVnSW5VUkwpOwogICAgIHZvaWQgc3Vi
ZnJhbWVMb2FkZXJEaWRDcmVhdGVQbHVnSW4oY29uc3QgV2lkZ2V0Kik7CiAKLSAgICB2b2lkIHNl
dElzUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oYm9vbCk7CiAgICAgYm9vbCBwYXJ0T2ZT
bmFwc2hvdE92ZXJsYXkoTm9kZSopOwogCiAgICAgYm9vbCBuZWVkc0NoZWNrRm9yU2l6ZUNoYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2U7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTAgKzQwLDEwIEBAIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxG
b3IKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MU2VsZWN0RWxlbWVudD4gY3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxlbWVudCopOwog
Ci0gICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQg
c2VsZWN0ZWRJbmRleCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQpOwog
Ci0gICAgdm9pZCBvcHRpb25TZWxlY3RlZEJ5VXNlcihpbnQgaW5kZXgsIGJvb2wgZGlzcGF0Y2hD
aGFuZ2VFdmVudCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2UpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgb3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW50IGluZGV4LCBib29sIGRp
c3BhdGNoQ2hhbmdlRXZlbnQsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA9IGZhbHNlKTsK
IAogICAgIC8vIEZvciBWYWxpZGl0eVN0YXRlCiAgICAgdmlydHVhbCBTdHJpbmcgdmFsaWRhdGlv
bk1lc3NhZ2UoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVtb3ZlQnlJbmRleChpbnQpOwogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25FbGVt
ZW50Kik7CiAKLSAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwog
CiAgICAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMoKTsKQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZVNlbGVjdGVkSXRlbXMoKTsK
ICAgICB2b2lkIHVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKTsKIAotICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZE1vdXNlRXZlbnRzKSBvdmVycmlk
ZTsKICAgICB2b2lkIGFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgoaW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJKHJldmlzaW9uIDE3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGhlYWRlcnMoKSBjb25z
dDsKICAgICBTdHJpbmcgc2NvcGUoKSBjb25zdDsKIAotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
KiBjZWxsQWJvdmUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIVE1MVGFibGVDZWxsRWxl
bWVudCogY2VsbEFib3ZlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDggKzQwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBzaG91bGRXcmFwVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fd3JhcCAhPSBOb1dyYXA7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgU3Ry
aW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0
IFN0cmluZyYpOwogICAgIGludCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKS5s
ZW5ndGgoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwog
CiAgICAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQg
aW5kZXgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25TdGFy
dCgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbGVjdGlvbkRpcmVjdGlvbigpIGNvbnN0OwpAQCAtODAsNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQqIGlubmVyVGV4
dEVsZW1lbnQoKSBjb25zdCA9IDA7CiAKICAgICB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoYm9vbCBz
aG91bGRGaXJlU2VsZWN0RXZlbnQpOwotICAgIGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSBj
b25zdDsKICAgICB2b2lkIHNldElubmVyVGV4dFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIFN0
cmluZyBpbm5lclRleHRWYWx1ZSgpIGNvbnN0OwogCkBAIC04OCw4ICs4OCw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChjb25zdCBT
dHJpbmcmIHRleHQpIHsgbV90ZXh0QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50ID0gdGV4
dDsgfQogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2b2lkIGhpZGVQbGFjZWhvbGRlcigpOwotICAg
IHZvaWQgc2hvd1BsYWNlaG9sZGVySWZOZWNlc3NhcnkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGhpZGVQbGFjZWhvbGRlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2hvd1BsYWNl
aG9sZGVySWZOZWNlc3NhcnkoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDgg
KzM5LDggQEAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBIVAogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBib29sKTsKIAotICAgIHVuc2lnbmVkIHZpZGVvV2lk
dGgoKSBjb25zdDsKLSAgICB1bnNpZ25lZCB2aWRlb0hlaWdodCgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHVuc2lnbmVkIHZpZGVvV2lkdGgoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB1bnNpZ25lZCB2aWRlb0hlaWdodCgpIGNvbnN0OwogICAgIAogICAgIC8vIEZ1bGxzY3JlZW4K
ICAgICB2b2lkIHdlYmtpdEVudGVyRnVsbHNjcmVlbihFeGNlcHRpb25Db2RlJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRG9jdW1lbnQo
ZnJhbWUsIHVybCkpOwogICAgIH0KIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVu
dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bWVudCgpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVEdXJpbmdQYXJzaW5nKCk7CiAgICAgdm9p
ZCBmaW5pc2hlZFBhcnNpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50
LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldFBsdWdpbkVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4pOwogCi0gICAg
V2lkZ2V0KiBwbHVnaW5XaWRnZXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBXaWRnZXQqIHBsdWdp
bldpZGdldCgpOwogICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50KCkgeyByZXR1
cm4gbV9wbHVnaW5FbGVtZW50LmdldCgpOyB9CiAKICAgICB2b2lkIGRldGFjaEZyb21QbHVnaW5F
bGVtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9mb3Jtcy9GaWxlSWNvbkxvYWRl
ci5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Zvcm1zL0ZpbGVJ
Y29uTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAg
IGV4cGxpY2l0IEZpbGVJY29uTG9hZGVyKEZpbGVJY29uTG9hZGVyQ2xpZW50Jik7CiAKICAgICB2
b2lkIGludmFsaWRhdGUoKTsKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKFBhc3NSZWZQdHI8SWNv
bj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbm90aWZ5RmluaXNoZWQoUGFzc1JlZlB0cjxJ
Y29uPik7CiAKIHByaXZhdGU6CiAgICAgRmlsZUljb25Mb2FkZXJDbGllbnQqIG1fY2xpZW50OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCShyZXZp
c2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0Rpc3RyaWJ1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGlzdHJpYnV0aW9uOyB9CiAgICAg
dm9pZCBzZXRIYXNEaXN0cmlidXRpb24oKSB7IG1faGFzRGlzdHJpYnV0aW9uID0gdHJ1ZTsgfQog
ICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24oKSB7IG1faGFzRGlzdHJpYnV0aW9uID0gZmFsc2U7
IH0KLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBNYXRjaFR5cGUgbWF0Y2hUeXBlRm9yKE5v
ZGUqKSBjb25zdCB7IHJldHVybiBBbHdheXNNYXRjaGVzOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSmF2YVNj
cmlwdERpYWxvZyhib29sLCBjb25zdCBTdHJpbmcqKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
c3RhdGljIGJvb2wgZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZShQYWdlKiBmcm9udGVu
ZFBhZ2UsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZShQYWdlKiBmcm9udGVuZFBhZ2Us
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIxICs4MSwyMSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAgICAgUGFnZSYgaW5zcGVjdGVkUGFnZSgpIGNvbnN0
OwogCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBjbG9zZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2hvdygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKIAotICAg
IHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Pik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+KTsK
ICAgICBib29sIGhhc0luc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3Q7CiAgICAgdm9pZCBk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQmKTsKIAot
ICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIGJvb2wgaGFzRnJvbnRlbmQoKSBjb25zdCB7
IHJldHVybiAhIW1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgYm9vbCBoYXNMb2Nh
bEZyb250ZW5kKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNSZW1vdGVGcm9udGVuZCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6Okluc3BlY3Rv
ckRpc2Nvbm5lY3RSZWFzb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29ubmVjdEZyb250
ZW5kKEluc3BlY3Rvcjo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpJbnNwZWN0b3JEaXNjb25u
ZWN0UmVhc29uKTsKICAgICB2b2lkIHNldFByb2Nlc3NJZChsb25nKTsKIAogI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQpAQCAtMTAzLDIxICsxMDMsMjEgQEAgcHVibGljOgogI2VuZGlmCiAK
ICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwotICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKLSAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqLCBJbnNw
ZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiwgSW5zcGVjdG9yT3ZlcmxheTo6
Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CiAgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAg
Tm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEluZGljYXRpbmco
Ym9vbCk7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxp
Z2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNVbmRlclRlc3QoYm9vbCBpc1VuZGVy
VGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0KLSAgICB2b2lkIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNjcmlwdCk7
CiAKLSAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJvZmls
ZXJFbmFibGVkKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcHJvZmlsZXJFbmFibGVk
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQcm9maWxlckVuYWJsZWQoYm9v
bCk7CiAKICAgICB2b2lkIHJlc3VtZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgJKHJldmlzaW9u
IDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE4ICs1NSwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgIH07CiAKLSAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBQYWdlKiwgc3RkOjp1bmlxdWVfcHRyPFNldHRpbmdz
Pik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpOworICAgIFdF
QkNPUkVfRVhQT1JUIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoSW5zcGVjdG9yQ29udHJv
bGxlciosIFBhZ2UqLCBzdGQ6OnVuaXF1ZV9wdHI8U2V0dGluZ3M+KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRv
d1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuU2F2ZSgpICBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIG92ZXJy
aWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGUgeyB9CkBAIC03NCwzOSArNzQsMzkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hXaW5kb3coRG9ja1NpZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoV2luZG93KCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgY2FuQXR0YWNoV2luZG93KCk7Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUo
Ym9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldERvY2tpbmdVbmF2YWlsYWJsZShib29sKTsKIAotICAgIHN0
YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHBy
ZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOwotICAgIHN0YXRpYyB1
bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgcHJlZmVycmVk
V2lkdGgsIHVuc2lnbmVkIHRvdGFsV2luZG93V2lkdGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHBy
ZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgcHJlZmVycmVkV2lkdGgsIHVuc2lnbmVkIHRvdGFsV2luZG93V2lkdGgpOwogCiAgICAg
Ly8gRGlyZWN0IEZyb250ZW5kIEFQSQotICAgIGJvb2wgaXNEZWJ1Z2dpbmdFbmFibGVkKCk7Ci0g
ICAgdm9pZCBzZXREZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNEZWJ1Z2dpbmdFbmFibGVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREZWJ1
Z2dpbmdFbmFibGVkKGJvb2wpOwogCi0gICAgYm9vbCBpc1RpbWVsaW5lUHJvZmlsaW5nRW5hYmxl
ZCgpOwotICAgIHZvaWQgc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sKTsKIAotICAg
IGJvb2wgaXNQcm9maWxpbmdKYXZhU2NyaXB0KCk7Ci0gICAgdm9pZCBzdGFydFByb2ZpbGluZ0ph
dmFTY3JpcHQoKTsKLSAgICB2b2lkIHN0b3BQcm9maWxpbmdKYXZhU2NyaXB0KCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc1Byb2ZpbGluZ0phdmFTY3JpcHQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0YXJ0UHJvZmlsaW5nSmF2YVNjcmlwdCgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc3RvcFByb2ZpbGluZ0phdmFTY3JpcHQoKTsKIAotICAgIHZvaWQgc2hvd0NvbnNvbGUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNob3dDb25zb2xlKCk7CiAKLSAgICB2b2lkIHNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShGcmFtZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKEZyYW1lKik7CiAKLSAgICB2b2lkIHNob3dSZXNvdXJj
ZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNob3dSZXNvdXJjZXMoKTsKIAotICAgIHZv
aWQgc2V0QXR0YWNoZWRXaW5kb3coRG9ja1NpZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0QXR0YWNoZWRXaW5kb3coRG9ja1NpZGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpID0gMDsKLSAgICB2b2lkIHJlc3Rv
cmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9y
ZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBldmFsdWF0ZUFz
Qm9vbGVhbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAkocmV2aXNpb24g
MTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7
CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyosIEZyYW1lKik7CiAKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSopOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShQ
YWdlKik7CiAgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JGcmFtZShGcmFtZSopOwogICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAg
c3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVu
dChEb2N1bWVudCopOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgcmVuZGVyTGF5ZXJEZXN0cm95ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBS
ZW5kZXJMYXllciopOwogICAgIHN0YXRpYyB2b2lkIHBzZXVkb0VsZW1lbnREZXN0cm95ZWRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQc2V1ZG9FbGVtZW50Kik7CiAKLSAgICBzdGF0aWMgaW50
IHNfZnJvbnRlbmRDb3VudGVyOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpbnQgc19mcm9u
dGVuZENvdW50ZXI7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZFJlcXVlc3QuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIEZyYW1lTG9hZFJlcXVlc3QoRnJhbWUqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgPSBTdWJzdGl0dXRlRGF0
YSgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUxvYWRSZXF1ZXN0KEZyYW1lKiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmID0gU3Vic3RpdHV0ZURhdGEo
KSk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVz
dC5pc0VtcHR5KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJl
dmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBGcmFtZUxvYWRlcihG
cmFtZSYsIEZyYW1lTG9hZGVyQ2xpZW50Jik7CiAgICAgfkZyYW1lTG9hZGVyKCk7CiAKLSAgICB2
b2lkIGluaXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluaXQoKTsKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgdm9pZCBpbml0Rm9yU3ludGhlc2l6ZWREb2N1bWVudChjb25zdCBVUkwmKTsK
ICNlbmRpZgpAQCAtMTA2LDE0ICsxMDYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0dXBGb3JS
ZXBsYWNlKCk7CiAKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgd2hpY2gg
c3RhcnQgbG9hZHMuIFdlIGhhdmUgdG9vIG1hbnkuCi0gICAgdm9pZCBsb2FkVVJMSW50b0NoaWxk
RnJhbWUoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGcmFtZSopOwotICAgIHZv
aWQgbG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgTG9ja0hpc3Rvcnks
IExvY2tCYWNrRm9yd2FyZExpc3QsICAvLyBDYWxsZWQgYnkgc3VibWl0Rm9ybSwgY2FsbHMgbG9h
ZFBvc3RSZXF1ZXN0IGFuZCBsb2FkVVJMLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbG9hZFVS
TEludG9DaGlsZEZyYW1lKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUq
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYsIExvY2tIaXN0b3J5LCBMb2NrQmFja0ZvcndhcmRMaXN0LCAvLyBDYWxsZWQg
Ynkgc3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RSZXF1ZXN0IGFuZCBsb2FkVVJMLgogICAgICAg
ICBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBTaG91bGRTZW5kUmVm
ZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCk7CiAKLSAgICB2b2lkIGxvYWQoY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbG9hZChjb25z
dCBGcmFtZUxvYWRSZXF1ZXN0Jik7CiAKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpIHx8IEVOQUJM
RShNSFRNTCkKLSAgICB2b2lkIGxvYWRBcmNoaXZlKFBhc3NSZWZQdHI8QXJjaGl2ZT4pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgbG9hZEFyY2hpdmUoUGFzc1JlZlB0cjxBcmNoaXZlPik7CiAj
ZW5kaWYKICAgICB1bnNpZ25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xp
Y3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRh
KTsKIApAQCAtMTIyLDggKzEyMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVybFNlbGVjdGVkKGNv
bnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50PiwgTG9ja0hp
c3RvcnksIExvY2tCYWNrRm9yd2FyZExpc3QsIFNob3VsZFNlbmRSZWZlcnJlcik7CiAgICAgdm9p
ZCBzdWJtaXRGb3JtKFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+KTsKIAotICAgIHZvaWQgcmVs
b2FkKGJvb2wgZW5kVG9FbmRSZWxvYWQgPSBmYWxzZSk7Ci0gICAgdm9pZCByZWxvYWRXaXRoT3Zl
cnJpZGVFbmNvZGluZyhjb25zdCBTdHJpbmcmIG92ZXJyaWRlRW5jb2RpbmcpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVsb2FkKGJvb2wgZW5kVG9FbmRSZWxvYWQgPSBmYWxzZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJp
bmcmIG92ZXJyaWRlRW5jb2RpbmcpOwogCiAgICAgdm9pZCBvcGVuKENhY2hlZEZyYW1lQmFzZSYp
OwogICAgIHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKQEAgLTEz
NSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGFsbCBmdW5j
dGlvbnMgd2hpY2ggc3RvcCBsb2Fkcy4gV2UgaGF2ZSB0b28gbWFueS4KICAgICB2b2lkIHN0b3BB
bGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5ID0gU2hvdWxkQ2xlYXJQcm92aXNp
b25hbEl0ZW0pOwotICAgIHZvaWQgc3RvcEZvclVzZXJDYW5jZWwoYm9vbCBkZWZlckNoZWNrTG9h
ZENvbXBsZXRlID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RvcEZvclVzZXJD
YW5jZWwoYm9vbCBkZWZlckNoZWNrTG9hZENvbXBsZXRlID0gZmFsc2UpOwogICAgIHZvaWQgc3Rv
cCgpOwogICAgIHZvaWQgc3RvcExvYWRpbmcoVW5sb2FkRXZlbnRQb2xpY3kpOwogICAgIGJvb2wg
Y2xvc2VVUkwoKTsKQEAgLTE0NCwxNCArMTQ0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
KERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMgPSB0cnVl
LCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cyA9IHRydWUsIGJvb2wgY2xlYXJGcmFtZVZpZXcgPSB0
cnVlKTsKIAogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBmcmFtZUhhc0xv
YWRlZCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZnJhbWVIYXNMb2FkZWQoKSBj
b25zdDsKIAotICAgIGludCBudW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNl
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgbnVtUGVuZGluZ09yTG9hZGluZ1JlcXVl
c3RzKGJvb2wgcmVjdXJzZSkgY29uc3Q7CiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7Ci0g
ICAgU3RyaW5nIG91dGdvaW5nUmVmZXJyZXIoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgb3V0Z29pbmdSZWZlcnJlcigpIGNvbnN0OwogICAgIFN0cmluZyBvdXRnb2luZ09yaWdp
bigpIGNvbnN0OwogCi0gICAgRG9jdW1lbnRMb2FkZXIqIGFjdGl2ZURvY3VtZW50TG9hZGVyKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnRMb2FkZXIqIGFjdGl2ZURvY3VtZW50
TG9hZGVyKCkgY29uc3Q7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKCkgY29u
c3QgeyByZXR1cm4gbV9kb2N1bWVudExvYWRlci5nZXQoKTsgfQogICAgIERvY3VtZW50TG9hZGVy
KiBwb2xpY3lEb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5RG9jdW1lbnRM
b2FkZXIuZ2V0KCk7IH0KICAgICBEb2N1bWVudExvYWRlciogcHJvdmlzaW9uYWxEb2N1bWVudExv
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci5nZXQoKTsg
fQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaGFuZGxlRmFsbGJhY2tD
b250ZW50KCk7CiAKLSAgICBSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlRXJyb3IgY2Fu
Y2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CiAKICAgICBib29sIGlz
SG9zdGVkQnlPYmplY3RFbGVtZW50KCkgY29uc3Q7CiAKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIHNob3VsZFRyZWF0VVJMQXNTcmNkb2NEb2N1bWVudChjb25zdCBVUkwm
KSBjb25zdDsKIAotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKCkgY29uc3Q7CiAKICAgICBDYWNoZVBv
bGljeSBzdWJyZXNvdXJjZUNhY2hlUG9saWN5KCkgY29uc3Q7CiAKQEAgLTE5Miw3ICsxOTIsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB0ZWxsQ2xpZW50QWJvdXRQYXN0TWVtb3J5Q2FjaGVMb2Fkcygp
OwogCiAgICAgdm9pZCBjaGVja0xvYWRDb21wbGV0ZSgpOwotICAgIHZvaWQgZGV0YWNoRnJvbVBh
cmVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpOwogICAg
IHZvaWQgZGV0YWNoVmlld3NBbmREb2N1bWVudExvYWRlcigpOwogCiAgICAgdm9pZCBhZGRFeHRy
YUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwpAQCAtMjI1LDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGNoZWNrSWZGb3JtQWN0aW9uQWxsb3dlZEJ5Q1NQ
KGNvbnN0IFVSTCYpIGNvbnN0OwogCiAgICAgRnJhbWUqIG9wZW5lcigpOwotICAgIHZvaWQgc2V0
T3BlbmVyKEZyYW1lKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRPcGVuZXIoRnJhbWUq
KTsKIAogICAgIHZvaWQgcmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwog
CkBAIC0yMzksNyArMjM5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNoZWRQYXJzaW5nKCk7
CiAgICAgdm9pZCBjaGVja0NvbXBsZXRlZCgpOwogCi0gICAgYm9vbCBpc0NvbXBsZXRlKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CiAKICAgICB2
b2lkIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogCkBAIC0yNDgsNyArMjQ4LDcgQEAgcHVibGlj
OgogCiAgICAgRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUmIHN0YXRlTWFjaGluZSgpIHsgcmV0dXJu
IG1fc3RhdGVNYWNoaW5lOyB9CiAKLSAgICBGcmFtZSogZmluZEZyYW1lRm9yTmF2aWdhdGlvbihj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IDApOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lKiBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50ID0gMCk7CiAKICAgICB2
b2lkIGFwcGx5VXNlckFnZW50KFJlc291cmNlUmVxdWVzdCYpOwogCkBAIC0yNjQsNyArMjY0LDcg
QEAgcHVibGljOgogICAgIC8vIGludHJvZHVjZSBhIHByb3BlciBjYWxsYmFjayB0eXBlIGZvciB0
aGlzIGZ1bmN0aW9uLCB3ZSBzaG91bGQgbWFrZSBpdCBwcml2YXRlIGFnYWluLgogICAgIHZvaWQg
Y29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSgpOwogCi0gICAgdm9pZCBzZXRPcmlnaW5h
bFVSTEZvckRvd25sb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE9yaWdpbmFsVVJMRm9yRG93bmxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVz
dCYpOwogCiAgICAgYm9vbCBzdXBwcmVzc09wZW5lckluTmV3RnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFtZTsgfQogCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBxdWlja1JlZGlyZWN0Q29taW5nKCkgY29uc3QgeyByZXR1cm4gbV9x
dWlja1JlZGlyZWN0Q29taW5nOyB9CiAKLSAgICBib29sIHNob3VsZENsb3NlKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzaG91bGRDbG9zZSgpOwogICAgIAogICAgIHZvaWQgc3RhcnRlZCgp
OwogCkBAIC0yODQsNyArMjg0LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgUGFnZURpc21pc3Nh
bFR5cGUgcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4g
bV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQ7IH0KIAotICAgIE5ldHdvcmtpbmdD
b250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE5l
dHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBs
b2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7CiAKQEAgLTM0Miw3ICszNDIsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKTsKIAotICAgIHZvaWQgdXJs
U2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIFBhc3NSZWZQdHI8RXZlbnQ+LCBMb2Nr
SGlzdG9yeSwgTG9ja0JhY2tGb3J3YXJkTGlzdCwgU2hvdWxkU2VuZFJlZmVycmVyLCBTaG91bGRS
ZXBsYWNlRG9jdW1lbnRJZkphdmFTY3JpcHRVUkwsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVS
TCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0JiwgUGFzc1JlZlB0cjxFdmVudD4sIExvY2tIaXN0b3J5LCBMb2NrQmFja0ZvcndhcmRM
aXN0LCBTaG91bGRTZW5kUmVmZXJyZXIsIFNob3VsZFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlw
dFVSTCwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKTsKIAogICAgIHZvaWQgbG9hZFdpdGhE
b2N1bWVudExvYWRlcihEb2N1bWVudExvYWRlciosIEZyYW1lTG9hZFR5cGUsIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKTsgLy8gQ2FsbHMgY29udGlu
dWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5CiAgICAgdm9pZCBsb2FkKERvY3VtZW50TG9hZGVy
Kik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FsbHMgbG9hZFdpdGhEb2N1bWVudExvYWRlciAgIApAQCAtMzU5LDcgKzM1OSw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RGcm9tRGVsZWdhdGUoUmVzb3VyY2VSZXF1ZXN0
JiwgdW5zaWduZWQgbG9uZyYgaWRlbnRpZmllciwgUmVzb3VyY2VFcnJvciYpOwogCi0gICAgdm9p
ZCBkZXRhY2hDaGlsZHJlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGV0YWNoQ2hpbGRy
ZW4oKTsKICAgICB2b2lkIGNsb3NlQW5kUmVtb3ZlQ2hpbGQoRnJhbWUqKTsKIAogICAgIHZvaWQg
bG9hZEluU2FtZURvY3VtZW50KGNvbnN0IFVSTCYsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzdGF0ZU9iamVjdCwgYm9vbCBpc05ld05hdmlnYXRpb24pOwpAQCAtNDA3LDcgKzQw
Nyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcXVpY2tSZWRpcmVjdENvbWluZzsKICAgICBi
b29sIG1fc2VudFJlZGlyZWN0Tm90aWZpY2F0aW9uOwotICAgIGJvb2wgbV9pblN0b3BBbGxMb2Fk
ZXJzOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgbV9pblN0b3BBbGxMb2FkZXJzOwogCiAgICAg
U3RyaW5nIG1fb3V0Z29pbmdSZWZlcnJlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxMSArNTEsMTEgQEAgcHVibGljOgogICAgICAgICBGaXJzdExheW91dERvbmUK
ICAgICB9OwogCi0gICAgYm9vbCBjb21taXR0aW5nRmlyc3RSZWFsTG9hZCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tbWl0dGluZ0ZpcnN0UmVhbExvYWQoKSBjb25zdDsKICAg
ICBib29sIGNvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCgpIGNvbnN0OwogICAgIGJvb2wg
Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNEaXNwbGF5
aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSBjb25zdDsKLSAgICBib29sIGZpcnN0TGF5b3V0RG9u
ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmlyc3RMYXlvdXREb25lKCkgY29u
c3Q7CiAgICAgdm9pZCBhZHZhbmNlVG8oU3RhdGUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxMiArNTQsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlU2Nyb2xsUG9zaXRp
b25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKTsKICAgICB2b2lkIGNsZWFyU2Nyb2xs
UG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFu
ZFZpZXdTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZVNjcm9sbFBvc2l0
aW9uQW5kVmlld1N0YXRlKCk7CiAKICAgICB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJkTGlzdEZvckZy
YWdtZW50U2Nyb2xsKCk7CiAKICAgICB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgdm9p
ZCBzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKICAgICB2b2lkIHJlc3RvcmVEb2N1bWVudFN0
YXRlKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKTsKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VycmVudEl0ZW0oSGlzdG9yeUl0
ZW0qKTsKICAgICB2b2lkIHNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYpOwogICAgIGJvb2wgY3VycmVudEl0ZW1TaG91bGRCZVJlcGxhY2VkKCkgY29uc3Q7Ci0g
ICAgdm9pZCByZXBsYWNlQ3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlcGxhY2VDdXJyZW50SXRlbShIaXN0b3J5SXRlbSopOwogCiAgICAgSGlzdG9y
eUl0ZW0qIHByZXZpb3VzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNJdGVtLmdldCgp
OyB9CiAgICAgdm9pZCBjbGVhclByZXZpb3VzSXRlbSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0xvYWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0xvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTEg
QEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogY2xhc3MgTG9hZGVyU3RyYXRlZ3kgewogcHVi
bGljOgotICAgIHZpcnR1YWwgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlc291cmNlTG9hZFNjaGVkdWxl
ciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENy
ZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENy
ZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhKTsKIAotICAgIHZpcnR1YWwgQmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVn
aXN0cnkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRl
QmxvYlJlZ2lzdHJ5KCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Mb2FkZXJTdHJhdGVn
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmgJKHJldmlz
aW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE5hdmln
YXRpb25BY3Rpb24oKTsKLSAgICAgICAgZXhwbGljaXQgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKLSAgICAgICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBOYXZpZ2F0aW9uVHlwZSk7Ci0gICAgICAgIE5hdmlnYXRpb25BY3Rpb24oY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWVMb2FkVHlwZSwgYm9vbCBpc0Zvcm1TdWJtaXNzaW9u
KTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgTmF2aWdhdGlvbkFjdGlvbigpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCBleHBsaWNpdCBOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25UeXBlKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQg
TmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZUxvYWRUeXBlLCBi
b29sIGlzRm9ybVN1Ym1pc3Npb24pOwogICAgICAgICBOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25UeXBlLCBQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAg
ICAgIE5hdmlnYXRpb25BY3Rpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWVMb2FkVHlw
ZSwgYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBQYXNzUmVmUHRyPEV2ZW50Pik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5o
CShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDEwIEBAIHByb3Rl
Y3RlZDoKIAogY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIgZmluYWwgOiBwdWJsaWMg
UmVzb3VyY2VMb2FkZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBjcmVhdGUoRnJh
bWUqLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOwogICAgIHZpcnR1YWwgfk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKCk7CiAKLSAg
ICBib29sIGlzRG9uZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEb25lKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Byb2dyZXNzVHJhY2tlci5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY3JlYXRlVW5pcXVlSWRlbnRp
ZmllcigpOwogCi0gICAgZG91YmxlIGVzdGltYXRlZFByb2dyZXNzKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgZG91YmxlIGVzdGltYXRlZFByb2dyZXNzKCkgY29uc3Q7CiAKICAgICB2b2lk
IHByb2dyZXNzU3RhcnRlZChGcmFtZSYpOwogICAgIHZvaWQgcHJvZ3Jlc3NDb21wbGV0ZWQoRnJh
bWUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTggKzQwLDE4IEBAIGNsYXNzIFJhbmdlOwogCiBjbGFzcyBMZWdhY3lXZWJBcmNoaXZlIDogcHVi
bGljIEFyY2hpdmUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IGNyZWF0ZSgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+
IGNyZWF0ZShTaGFyZWRCdWZmZXIqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lXZWJB
cmNoaXZlPiBjcmVhdGUoY29uc3QgVVJMJiwgU2hhcmVkQnVmZmVyKik7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiBtYWluUmVzb3VyY2UsIFZlY3RvcjxSZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4gc3VicmVz
b3VyY2VzLCBWZWN0b3I8UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+PiBzdWJmcmFtZUFyY2hpdmVz
KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoTm9kZSos
IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoRnJhbWUmKT4gZnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoRnJhbWUqKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGVGcm9tU2VsZWN0aW9u
KEZyYW1lKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRl
KFJhbmdlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5V2Vi
QXJjaGl2ZT4gY3JlYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gY3JlYXRlKFNoYXJlZEJ1ZmZlciopOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShjb25zdCBVUkwm
LCBTaGFyZWRCdWZmZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxM
ZWdhY3lXZWJBcmNoaXZlPiBjcmVhdGUoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5S
ZXNvdXJjZSwgVmVjdG9yPFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+PiBzdWJyZXNvdXJjZXMsIFZl
Y3RvcjxSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4+IHN1YmZyYW1lQXJjaGl2ZXMpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShO
b2RlKiwgc3RkOjpmdW5jdGlvbjxib29sKEZyYW1lJik+IGZyYW1lRmlsdGVyID0gbnVsbHB0cik7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
Y3JlYXRlKEZyYW1lKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gY3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSopOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNyZWF0ZShSYW5nZSop
OwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IHJhd0RhdGFSZXByZXNlbnRhdGlvbigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJldGFpblB0cjxDRkRhdGFSZWY+IHJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogCiBwcml2
YXRlOgogICAgIExlZ2FjeVdlYkFyY2hpdmUoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDgg
KzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAgVHlwZVN0YXRpc3RpYyBmb250czsKICAgICB9Owog
Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yVVJMKGNvbnN0IFVSTCYpOwotICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZUZvclVSTChjb25zdCBVUkwmLCBTZXNzaW9uSUQpOworICAg
IFdFQkNPUkVfRVhQT1JUIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclVSTChjb25zdCBVUkwm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VGb3JVUkwoY29u
c3QgVVJMJiwgU2Vzc2lvbklEKTsKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VGb3JSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7CiAKICAgICBib29sIGFkZChD
YWNoZWRSZXNvdXJjZSopOwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAgcHVibGljOgogICAgIC8vICAt
IG1pbkRlYWRCeXRlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgZGVhZCByZXNv
dXJjZXMgc2hvdWxkIGNvbnN1bWUgd2hlbiB0aGUgY2FjaGUgaXMgdW5kZXIgcHJlc3N1cmUuCiAg
ICAgLy8gIC0gbWF4RGVhZEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBk
ZWFkIHJlc291cmNlcyBzaG91bGQgY29uc3VtZSB3aGVuIHRoZSBjYWNoZSBpcyBub3QgdW5kZXIg
cHJlc3N1cmUuCiAgICAgLy8gIC0gdG90YWxCeXRlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5
dGVzIHRoYXQgdGhlIGNhY2hlIHNob3VsZCBjb25zdW1lIG92ZXJhbGwuCi0gICAgdm9pZCBzZXRD
YXBhY2l0aWVzKHVuc2lnbmVkIG1pbkRlYWRCeXRlcywgdW5zaWduZWQgbWF4RGVhZEJ5dGVzLCB1
bnNpZ25lZCB0b3RhbEJ5dGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhcGFjaXRp
ZXModW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhEZWFkQnl0ZXMsIHVuc2lnbmVk
IHRvdGFsQnl0ZXMpOwogCiAgICAgLy8gVHVybiB0aGUgY2FjaGUgb24gYW5kIG9mZi4gIERpc2Fi
bGluZyB0aGUgY2FjaGUgd2lsbCByZW1vdmUgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBjYWNoZS4g
IFRoZXkgbWF5CiAgICAgLy8gc3RpbGwgbGl2ZSBvbiBpZiB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5
IHNvbWUgV2ViIHBhZ2UgdGhvdWdoLgotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXNhYmxlZChib29sKTsKICAgICBib29sIGRpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQogCi0gICAgdm9pZCBldmljdFJlc291cmNl
cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZpY3RSZXNvdXJjZXMoKTsKICAgICAKICAg
ICB2b2lkIHNldFBydW5lRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wcnVuZUVuYWJsZWQgPSBl
bmFibGVkOyB9CiAgICAgdm9pZCBwcnVuZSgpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSopOwog
CiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCi0gICAgdm9pZCBmbHVzaENhY2hlZEltYWdl
c1RvRGlzaygpOyAvLyBGbHVzaCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgc3RpbGwgcmVm
ZXJlbmNlZCBieSB3ZWIgcGFnZXMuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmbHVzaENhY2hl
ZEltYWdlc1RvRGlzaygpOyAvLyBGbHVzaCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgc3Rp
bGwgcmVmZXJlbmNlZCBieSB3ZWIgcGFnZXMuCiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZVVybEZyb21DYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIFNlc3Npb25JRCk7CkBAIC0xNjcsMTMgKzE2NywxMyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgcmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIC8vIEZ1bmN0aW9uIHRv
IGNvbGxlY3QgY2FjaGUgc3RhdGlzdGljcyBmb3IgdGhlIGNhY2hlcyB3aW5kb3cgaW4gdGhlIFNh
ZmFyaSBEZWJ1ZyBtZW51LgotICAgIFN0YXRpc3RpY3MgZ2V0U3RhdGlzdGljcygpOworICAgIFdF
QkNPUkVfRVhQT1JUIFN0YXRpc3RpY3MgZ2V0U3RhdGlzdGljcygpOwogICAgIAogICAgIHZvaWQg
cmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSopOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IFNlY3VyaXR5T3JpZ2luU2V0OwotICAgIHZvaWQgcmVt
b3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiopOwotICAgIHZvaWQgZ2V0T3Jp
Z2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2lu
U2V0JiBvcmlnaW5zKTsKIAogICAgIHVuc2lnbmVkIG1pbkRlYWRDYXBhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWluRGVhZENhcGFjaXR5OyB9CiAgICAgdW5zaWduZWQgbWF4RGVhZENhcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhEZWFkQ2FwYWNpdHk7IH0KQEAgLTE4NCwxNCArMTg0LDE0
IEBAIHB1YmxpYzoKICNpZiBVU0UoQ0cpCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgVVNFKENH
KSBvbmNlIHdlIGVpdGhlciBtYWtlIE5hdGl2ZUltYWdlUHRyIGEgc21hcnQgcG9pbnRlciBvbiBh
bGwgcGxhdGZvcm1zIG9yCiAgICAgLy8gcmVtb3ZlIHRoZSB1c2FnZSBvZiBDRlJldGFpbigpIGlu
IE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoKSBzbyBhcyB0byBtYWtlIHRoZSBjb2RlIHBs
YXRmb3JtLWluZGVwZW5kZW50LgotICAgIGJvb2wgYWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdl
UHRyLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKTsKLSAgICB2b2lk
IHJlbW92ZUltYWdlRnJvbUNhY2hlKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0
aXRpb24pOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUlt
YWdlUHRyLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUltYWdlRnJvbUNhY2hlKGNvbnN0IFVSTCYsIGNvbnN0
IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24pOwogI2VuZGlmCiAKICAgICAvLyBwcnVuZURlYWQqKCkg
LSBGbHVzaCBkZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgbm90IHJlZmVy
ZW5jZWQgYnkgV2ViIHBhZ2VzLgogICAgIC8vIHBydW5lTGl2ZSooKSAtIEZsdXNoIGRlY29kZWQg
ZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4KLSAgICB2
b2lkIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBBdXRvbWF0aWNhbGx5IGRlY2lkZSBob3cgbXVj
aCB0byBwcnVuZS4KLSAgICB2b2lkIHBydW5lTGl2ZVJlc291cmNlcyhib29sIHNob3VsZERlc3Ry
b3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXMoKTsgLy8gQXV0b21hdGljYWxseSBkZWNpZGUg
aG93IG11Y2ggdG8gcHJ1bmUuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNv
dXJjZXMoYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID0g
ZmFsc2UpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9QZXJjZW50
YWdlKGZsb2F0IHBydW5lUGVyY2VudGFnZSk7IC8vIFBydW5lIHRvICUgY3VycmVudCBzaXplCkBA
IC0yMTMsNyArMjEzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZXZpY3QoQ2FjaGVkUmVzb3Vy
Y2UqKTsKIAotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlTWFwJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2VNYXAmKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVSZXF1
ZXN0RnJvbUNhY2hlSW1wbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU2Vzc2lvbklEKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVSZXF1ZXN0RnJvbVNl
c3Npb25DYWNoZXNJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKICAgICBzdGF0aWMgdm9pZCBjcm9zc1RocmVhZFJlbW92ZVJlcXVlc3RGcm9tQ2Fj
aGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlc3REYXRhPiwgU2Vzc2lvbklEKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgSWNvbkNvbnRyb2xsZXIoRnJhbWUmKTsKICAg
ICB+SWNvbkNvbnRyb2xsZXIoKTsKIAotICAgIFVSTCB1cmwoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBVUkwgdXJsKCk7CiAgICAgSWNvblVSTHMgdXJsc0ZvclR5cGVzKGludCBpY29uVHlwZXNNYXNr
KTsKICAgICBJY29uVVJMIGljb25VUkwoSWNvblR5cGUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAkocmV2aXNpb24gMTcyODMwKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDQ2ICs2Nyw0NiBAQCBjbGFzcyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNv
bkRhCiAgICAgCiAvLyAqKiogTWFpbiBUaHJlYWQgT25seSAqKioKIHB1YmxpYzoKLSAgICBJY29u
RGF0YWJhc2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJY29uRGF0YWJhc2UoKTsKICAgICB+SWNv
bkRhdGFiYXNlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KEljb25EYXRhYmFzZUNs
aWVudCopIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDbGll
bnQoSWNvbkRhdGFiYXNlQ2xpZW50Kikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgb3Bl
bihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBib29sIG9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bG9zZSgpIG92ZXJyaWRlOwogICAgICAgICAgICAgCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFs
bEljb25zKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92
ZUFsbEljb25zKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHJlYWRJY29uRm9yUGFnZVVSTEZyb21E
aXNrKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBJbWFnZSogZGVmYXVsdEljb24oY29u
c3QgSW50U2l6ZSYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2Uq
IGRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYg
cGFnZVVSTCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJldGFp
bkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCByZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEljb25EYXRhRm9ySWNv
blVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEljb25VUkxGb3JQYWdlVVJM
KGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgSW1hZ2UqIHN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJiwgY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgSW1hZ2UqIHN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3Qg
SW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGFzc05hdGl2ZUltYWdlUHRyIHN5bmNo
cm9ub3VzTmF0aXZlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWws
IGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBzeW5jaHJvbm91
c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgU3RyaW5nIHN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN5bmNocm9ub3VzSWNvbkRhdGFL
bm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJY29u
TG9hZERlY2lzaW9uIHN5bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJp
bmcmLCBEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgSWNvbkxvYWREZWNpc2lvbiBzeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoY29u
c3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbmFibGVkKGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXRFbmFibGVkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJs
ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGJvb2wgZmxhZykgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKSBvdmVycmlkZTsKICAg
ICBib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHZv
aWQgZGVsYXlEYXRhYmFzZUNsZWFudXAoKTsKLSAgICBzdGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNl
Q2xlYW51cCgpOwotICAgIHN0YXRpYyB2b2lkIGNoZWNrSW50ZWdyaXR5QmVmb3JlT3BlbmluZygp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZUNsZWFudXAoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5p
bmcoKTsKIAogICAgIC8vIFN1cHBvcnQgZm9yIFdlYkNvcmVTdGF0aXN0aWNzIGluIFdlYktpdAot
ICAgIHZpcnR1YWwgc2l6ZV90IHBhZ2VVUkxNYXBwaW5nQ291bnQoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHNpemVfdCByZXRhaW5lZFBhZ2VVUkxDb3VudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgc2l6ZV90IGljb25SZWNvcmRDb3VudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgc2l6ZV90
IGljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBzaXplX3QgcGFnZVVSTE1hcHBpbmdDb3VudCgpIG92ZXJyaWRlOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgc2l6ZV90IHJldGFpbmVkUGFnZVVSTENvdW50KCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBzaXplX3QgaWNvblJlY29yZENvdW50KCkgb3Zl
cnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBzaXplX3QgaWNvblJlY29yZENvdW50
V2l0aERhdGEoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgSWNvbkRhdGFiYXNl
QmFzZSYgaWNvbkRhdGFiYXNlKCk7CkBAIC0xMzAsMTUgKzEzMCwxNSBAQCBwcml2YXRlOgogCiAv
LyAqKiogQW55IFRocmVhZCAqKioKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgc3Rh
dGljIFN0cmluZyBkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgYm9vbCBpc09wZW4oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IFN0cmluZyBkYXRhYmFzZVBhdGgoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCk7CiAKIHByaXZhdGU6CiAgICAgUGFzc1Jl
ZlB0cjxJY29uUmVjb3JkPiBnZXRPckNyZWF0ZUljb25SZWNvcmQoY29uc3QgU3RyaW5nJiBpY29u
VVJMKTsKICAgICBQYWdlVVJMUmVjb3JkKiBnZXRPckNyZWF0ZVBhZ2VVUkxSZWNvcmQoY29uc3Qg
U3RyaW5nJiBwYWdlVVJMKTsKICAgICAKLSAgICBib29sIG1faXNFbmFibGVkOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgbV9pc0VuYWJsZWQ7CiAgICAgYm9vbCBtX3ByaXZhdGVCcm93c2luZ0Vu
YWJsZWQ7CiAKICAgICBtdXRhYmxlIE11dGV4IG1fc3luY0xvY2s7CkBAIC0xNzgsNyArMTc4LDcg
QEAgcHJpdmF0ZToKIAogLy8gKioqIFN5bmMgVGhyZWFkIE9ubHkgKioqCiBwdWJsaWM6Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHkoKSBjb25zdDsK
IAogcHJpdmF0ZTogICAgCiAgICAgc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlU3luY1RocmVhZFN0
YXJ0KHZvaWQgKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlQmFzZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBTeW5jaHJvbm91cyBjYWxscyB1c2VkIGludGVybmFsbHkgYnkg
V2ViQ29yZS4KICAgICAvLyBVc2FnZSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYXN5bmNocm9ub3Vz
IGNhbGxzLgotICAgIHZpcnR1YWwgU3RyaW5nIHN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBTdHJpbmcgc3luY2hy
b25vdXNJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wg
c3luY2hyb25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgSWNvbkxvYWREZWNpc2lvbiBzeW5jaHJvbm91c0xvYWRE
ZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKSB7IHJldHVy
biBJY29uTG9hZE5vOyB9CiAgICAgdmlydHVhbCBJbWFnZSogc3luY2hyb25vdXNJY29uRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsgfQpAQCAtMjAw
LDcgKzIwMCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wVGhyZWFk
QWN0aXZpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgb3Bl
bihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIG9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3Rvcnks
IGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxJY29ucygpIHsgfQogCkBAIC0yMDgsNyArMjA4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoSWNvbkRhdGFiYXNlQ2xpZW50
KikgeyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZGF0YWJhc2VQYXRoKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBTdHJpbmcgZGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNyArNTIsNyBAQCBjbGFzcyBGb2N1c05hdmlnYXRpb25TY29wZSB7CiBwdWJsaWM6
CiAgICAgQ29udGFpbmVyTm9kZSogcm9vdE5vZGUoKSBjb25zdDsKICAgICBFbGVtZW50KiBvd25l
cigpIGNvbnN0OwotICAgIHN0YXRpYyBGb2N1c05hdmlnYXRpb25TY29wZSBmb2N1c05hdmlnYXRp
b25TY29wZU9mKE5vZGUqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRm9jdXNOYXZpZ2F0
aW9uU2NvcGUgZm9jdXNOYXZpZ2F0aW9uU2NvcGVPZihOb2RlKik7CiAgICAgc3RhdGljIEZvY3Vz
TmF2aWdhdGlvblNjb3BlIGZvY3VzTmF2aWdhdGlvblNjb3BlT3duZWRCeVNoYWRvd0hvc3QoTm9k
ZSopOwogICAgIHN0YXRpYyBGb2N1c05hdmlnYXRpb25TY29wZSBmb2N1c05hdmlnYXRpb25TY29w
ZU93bmVkQnlJRnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50Kik7CiAKQEAgLTY2LDI4ICs2Niwy
OCBAQCBjbGFzcyBGb2N1c0NvbnRyb2xsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IEZvY3Vz
Q29udHJvbGxlcihQYWdlJiwgVmlld1N0YXRlOjpGbGFncyk7CiAKLSAgICB2b2lkIHNldEZvY3Vz
ZWRGcmFtZShQYXNzUmVmUHRyPEZyYW1lPik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
b2N1c2VkRnJhbWUoUGFzc1JlZlB0cjxGcmFtZT4pOwogICAgIEZyYW1lKiBmb2N1c2VkRnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZvY3VzZWRGcmFtZS5nZXQoKTsgfQotICAgIEZyYW1lJiBmb2N1
c2VkT3JNYWluRnJhbWUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSYgZm9jdXNl
ZE9yTWFpbkZyYW1lKCkgY29uc3Q7CiAKLSAgICBib29sIHNldEluaXRpYWxGb2N1cyhGb2N1c0Rp
cmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0SW5p
dGlhbEZvY3VzKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZh
bmNlRm9jdXMoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1
cyA9IGZhbHNlKTsKIAotICAgIGJvb2wgc2V0Rm9jdXNlZEVsZW1lbnQoRWxlbWVudCosIFBhc3NS
ZWZQdHI8RnJhbWU+LCBGb2N1c0RpcmVjdGlvbiA9IEZvY3VzRGlyZWN0aW9uTm9uZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRGb2N1c2VkRWxlbWVudChFbGVtZW50KiwgUGFzc1JlZlB0
cjxGcmFtZT4sIEZvY3VzRGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rpb25Ob25lKTsKIAogICAgIHZv
aWQgc2V0Vmlld1N0YXRlKFZpZXdTdGF0ZTo6RmxhZ3MpOwogCi0gICAgdm9pZCBzZXRBY3RpdmUo
Ym9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAgICAgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1N0YXRlICYgVmlld1N0YXRlOjpXaW5k
b3dJc0FjdGl2ZTsgfQogCi0gICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlld1N0YXRlICYgVmlld1N0YXRlOjpJc0ZvY3VzZWQ7IH0KIAogICAgIGJv
b2wgY29udGVudElzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1N0YXRlICYgVmlld1N0
YXRlOjpJc1Zpc2libGU7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW4gV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbS4KLSAgICBFbGVtZW50KiBuZXh0Rm9jdXNhYmxlRWxl
bWVudChGb2N1c05hdmlnYXRpb25TY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsK
LSAgICBFbGVtZW50KiBwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQoRm9jdXNOYXZpZ2F0aW9uU2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgRWxl
bWVudCogbmV4dEZvY3VzYWJsZUVsZW1lbnQoRm9jdXNOYXZpZ2F0aW9uU2NvcGUsIE5vZGUqIHN0
YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcHJldmlv
dXNGb2N1c2FibGVFbGVtZW50KEZvY3VzTmF2aWdhdGlvblNjb3BlLCBOb2RlKiBzdGFydCwgS2V5
Ym9hcmRFdmVudCopOwogCiAgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudE5lZWRzUmVwYWludCgp
OwogICAgIGRvdWJsZSB0aW1lU2luY2VGb2N1c1dhc1NldCgpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZyYW1lPiB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlKFBhZ2UqLCBIVE1M
RnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlKFBhZ2UqLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOwogCiAgICAgICAgIHZvaWQgaW5pdCgp
OwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgLy8gQ3JlYXRlcyA8aHRtbD48Ym9keSBzdHls
ZT0iLi4uIj48L2JvZHk+PC9odG1sPiBkb2luZyBtaW5pbWFsIGFtb3VudCBvZiB3b3JrLgotICAg
ICAgICB2b2lkIGluaXRXaXRoU2ltcGxlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUs
IGNvbnN0IFVSTCYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluaXRXaXRoU2ltcGxl
SFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUsIGNvbnN0IFVSTCYpOwogI2VuZGlmCi0g
ICAgICAgIHZvaWQgc2V0VmlldyhQYXNzUmVmUHRyPEZyYW1lVmlldz4pOwotICAgICAgICB2b2lk
IGNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYsIGNvbnN0IENvbG9yJiwgYm9vbCwKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWV3KFBhc3NSZWZQdHI8RnJhbWVWaWV3Pik7CisgICAg
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3JlYXRlVmlldyhjb25zdCBJbnRTaXplJiwgY29uc3Qg
Q29sb3ImLCBib29sLAogICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgZml4ZWRMYXlvdXRTaXpl
ID0gSW50U2l6ZSgpLCBjb25zdCBJbnRSZWN0JiBmaXhlZFZpc2libGVDb250ZW50UmVjdCA9IElu
dFJlY3QoKSwKICAgICAgICAgICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQgPSBmYWxzZSwgU2Nyb2xs
YmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIGJvb2wgaG9yaXpvbnRhbExvY2sgPSBmYWxzZSwKICAg
ICAgICAgICAgIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvLCBib29sIHZlcnRpY2FsTG9j
ayA9IGZhbHNlKTsKIAotICAgICAgICB2aXJ0dWFsIH5GcmFtZSgpOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5GcmFtZSgpOwogCiAgICAgICAgIHZvaWQgYWRkRGVzdHJ1Y3Rpb25P
YnNlcnZlcihGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIqKTsKICAgICAgICAgdm9pZCByZW1vdmVE
ZXN0cnVjdGlvbk9ic2VydmVyKEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciopOwpAQCAtMTU1LDc5
ICsxNTUsNzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBbmltYXRpb25Db250cm9s
bGVyJiBhbmltYXRpb24oKSBjb25zdDsKICAgICAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0
KCk7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJWaWV3KiBjb250ZW50UmVuZGVyZXIoKSBjb25z
dDsgLy8gUm9vdCBvZiB0aGUgcmVuZGVyIHRyZWUgZm9yIHRoZSBkb2N1bWVudCBjb250YWluZWQg
aW4gdGhpcyBmcmFtZS4KLSAgICAgICAgUmVuZGVyV2lkZ2V0KiBvd25lclJlbmRlcmVyKCkgY29u
c3Q7IC8vIFJlbmRlcmVyIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoaXMgZnJhbWUu
CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlclZpZXcqIGNvbnRlbnRSZW5kZXJlcigpIGNv
bnN0OyAvLyBSb290IG9mIHRoZSByZW5kZXIgdHJlZSBmb3IgdGhlIGRvY3VtZW50IGNvbnRhaW5l
ZCBpbiB0aGlzIGZyYW1lLgorICAgICAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJXaWRnZXQqIG93
bmVyUmVuZGVyZXIoKSBjb25zdDsgLy8gUmVuZGVyZXIgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29u
dGFpbnMgdGhpcyBmcmFtZS4KIAogICAgIC8vID09PT09PT09IEFsbCBwdWJsaWMgZnVuY3Rpb25z
IGJlbG93IHRoaXMgcG9pbnQgYXJlIGNhbmRpZGF0ZXMgdG8gbW92ZSBvdXQgb2YgRnJhbWUgaW50
byBhbm90aGVyIGNsYXNzLiA9PT09PT09PQogCiAgICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlw
dHMoVXNlclNjcmlwdEluamVjdGlvblRpbWUpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIGxh
eWVyVHJlZUFzVGV4dChMYXllclRyZWVGbGFncyA9IDApIGNvbnN0OwotICAgICAgICBTdHJpbmcg
dHJhY2tlZFJlcGFpbnRSZWN0c0FzVGV4dCgpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KExheWVyVHJlZUZsYWdzID0gMCkgY29uc3Q7CisgICAg
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0cmFja2VkUmVwYWludFJlY3RzQXNUZXh0KCkgY29u
c3Q7CiAKLSAgICAgICAgc3RhdGljIEZyYW1lKiBmcmFtZUZvcldpZGdldChjb25zdCBXaWRnZXQq
KTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZyYW1lKiBmcmFtZUZvcldpZGdldChj
b25zdCBXaWRnZXQqKTsKIAogICAgICAgICBTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJl
dHVybiAqbV9zZXR0aW5nczsgfQogCiAgICAgICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmlu
dGluZywgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBvcmlnaW5h
bFBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8sIEFkanVzdFZpZXdTaXplT3JOb3Qp
OwogICAgICAgICBib29sIHNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgY29uc3Q7Ci0gICAgICAg
IEZsb2F0U2l6ZSByZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oY29uc3QgRmxvYXRTaXplJiBv
cmlnaW5hbFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgZXhwZWN0ZWRTaXplKTsKKyAgICAgICAgV0VC
Q09SRV9FWFBPUlQgRmxvYXRTaXplIHJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhjb25zdCBG
bG9hdFNpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBleHBlY3RlZFNpemUpOwog
CiAgICAgICAgIHZvaWQgc2V0RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4pOwogCi0gICAg
ICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IoZmxvYXQgZmFjdG9yKTsKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRQYWdlWm9vbUZhY3RvcihmbG9hdCk7CiAgICAgICAgIGZsb2F0IHBh
Z2Vab29tRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlWm9vbUZhY3RvcjsgfQotICAgICAg
ICB2b2lkIHNldFRleHRab29tRmFjdG9yKGZsb2F0IGZhY3Rvcik7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0VGV4dFpvb21GYWN0b3IoZmxvYXQpOwogICAgICAgICBmbG9hdCB0ZXh0
Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21GYWN0b3I7IH0KLSAgICAgICAg
dm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9h
dCB0ZXh0Wm9vbUZhY3Rvcik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGFnZUFu
ZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0
b3IpOwogCiAgICAgICAgIC8vIFNjYWxlIGZhY3RvciBvZiB0aGlzIGZyYW1lIHdpdGggcmVzcGVj
dCB0byB0aGUgY29udGFpbmVyLgotICAgICAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29u
c3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IoKSBjb25z
dDsKIAogICAgICAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgICAgICBjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgdmlld3Bv
cnRBcmd1bWVudHMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRWaWV3cG9ydEFyZ3VtZW50cyhj
b25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJik7CiAKLSAgICAgICAg
Tm9kZSogZGVlcGVzdE5vZGVBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9j
YXRpb24pOwotICAgICAgICBOb2RlKiBub2RlUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMoY29uc3Qg
RmxvYXRQb2ludCYgdmlld3BvcnRMb2NhdGlvbiwgRmxvYXRQb2ludCYgYWRqdXN0ZWRWaWV3cG9y
dExvY2F0aW9uKTsKLSAgICAgICAgTm9kZSogbm9kZVJlc3BvbmRpbmdUb1Njcm9sbFdoZWVsRXZl
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHZpZXdwb3J0TG9jYXRpb24pOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCBOb2RlKiBkZWVwZXN0Tm9kZUF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmll
d3BvcnRMb2NhdGlvbik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIG5vZGVSZXNwb25k
aW5nVG9DbGlja0V2ZW50cyhjb25zdCBGbG9hdFBvaW50JiB2aWV3cG9ydExvY2F0aW9uLCBGbG9h
dFBvaW50JiBhZGp1c3RlZFZpZXdwb3J0TG9jYXRpb24pOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBOb2RlKiBub2RlUmVzcG9uZGluZ1RvU2Nyb2xsV2hlZWxFdmVudHMoY29uc3QgRmxvYXRQb2lu
dCYgdmlld3BvcnRMb2NhdGlvbik7CiAKICAgICAgICAgaW50IGluZGV4Q291bnRPZldvcmRQcmVj
ZWRpbmdTZWxlY3Rpb24oTlNTdHJpbmcqIHdvcmQpIGNvbnN0OwotICAgICAgICBOU0FycmF5KiB3
b3Jkc0luQ3VycmVudFBhcmFncmFwaCgpIGNvbnN0OwotICAgICAgICBDR1JlY3QgcmVuZGVyUmVj
dEZvclBvaW50KENHUG9pbnQsIGJvb2wqIGlzUmVwbGFjZWQsIGZsb2F0KiBmb250U2l6ZSkgY29u
c3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIE5TQXJyYXkqIHdvcmRzSW5DdXJyZW50UGFyYWdy
YXBoKCkgY29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIENHUmVjdCByZW5kZXJSZWN0Rm9y
UG9pbnQoQ0dQb2ludCwgYm9vbCogaXNSZXBsYWNlZCwgZmxvYXQqIGZvbnRTaXplKSBjb25zdDsK
IAotICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKGJvb2wg
PSB0cnVlKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25DaGFuZ2VD
YWxsYmFja3NEaXNhYmxlZChib29sID0gdHJ1ZSk7CiAgICAgICAgIGJvb2wgc2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSBjb25zdDsKIAogICAgICAgICBlbnVtIFZpZXdwb3J0T2Zm
c2V0Q2hhbmdlVHlwZSB7IEluY3JlbWVudGFsU2Nyb2xsT2Zmc2V0LCBDb21wbGV0ZWRTY3JvbGxP
ZmZzZXQgfTsKLSAgICAgICAgdm9pZCB2aWV3cG9ydE9mZnNldENoYW5nZWQoVmlld3BvcnRPZmZz
ZXRDaGFuZ2VUeXBlKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aWV3cG9ydE9mZnNl
dENoYW5nZWQoVmlld3BvcnRPZmZzZXRDaGFuZ2VUeXBlKTsKICAgICAgICAgYm9vbCBjb250YWlu
c1RpbGVkQmFja2luZ0xheWVycygpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgb3ZlcmZsb3dTY3Jv
bGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50JiwgTm9kZSosIGJvb2wgaXNV
c2VyU2Nyb2xsKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvdmVyZmxvd1Njcm9sbFBv
c2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQmLCBOb2RlKiwgYm9vbCBpc1VzZXJT
Y3JvbGwpOwogCi0gICAgICAgIHZvaWQgcmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKTsK
KyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lv
bigpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQogICAgICAgICAv
LyBPcmllbnRhdGlvbiBpcyB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uIGluIGRlZ3JlZXMuIFNv
bWUgZXhhbXBsZXMgYXJlOgogICAgICAgICAvLyAgMCBpcyBzdHJhaWdodCB1cDsgLTkwIGlzIHdo
ZW4gdGhlIGRldmljZSBpcyByb3RhdGVkIDkwIGNsb2Nrd2lzZTsKICAgICAgICAgLy8gIDkwIGlz
IHdoZW4gcm90YXRlZCBjb3VudGVyIGNsb2Nrd2lzZS4KLSAgICAgICAgdm9pZCBvcmllbnRhdGlv
bkNoYW5nZWQoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvcmllbnRhdGlvbkNoYW5n
ZWQoKTsKICAgICAgICAgaW50IG9yaWVudGF0aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgICAg
ICB2b2lkIGNsZWFyVGltZXJzKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyVGltZXJzKEZy
YW1lVmlldyosIERvY3VtZW50Kik7CiAKLSAgICAgICAgU3RyaW5nIGRpc3BsYXlTdHJpbmdNb2Rp
ZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0cmluZyYp
IGNvbnN0OwogCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJh
bWVQb2ludCk7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9p
bnQmIHdpbmRvd1BvaW50KTsKLSAgICAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2lu
dChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFBh
c3NSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQp
OwogCi0gICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoY29uc3QgSlNDOjpZ
YXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiBy
ZXN1bHREaXN0YW5jZUZyb21TdGFydE9mQ2VsbCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbiYsIEhUTUxUYWJsZUNlbGxFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZUZy
b21TdGFydE9mQ2VsbCk7CiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVt
ZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqLCBzaXplX3QqIHJlc3Vs
dERpc3RhbmNlLCBib29sKiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKICAgICAgICAgU3RyaW5nIG1h
dGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxl
bWVudCopOwogCkBAIC0yMzUsMjcgKzIzNSwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIFNjcm9sbCB0aGUgc2VsZWN0aW9uIGluIGFuIG92ZXJmbG93IGxheWVyIG9uIGlPUy4K
ICAgICAgICAgdm9pZCBzY3JvbGxPdmVyZmxvd0xheWVyKFJlbmRlckxheWVyKiAsIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBleHBvc2VSZWN0KTsKIAotICAgICAg
ICBpbnQgcHJlZmVycmVkSGVpZ2h0KCkgY29uc3Q7Ci0gICAgICAgIGludCBpbm5lckxpbmVIZWln
aHQoRE9NTm9kZSopIGNvbnN0OwotICAgICAgICB2b2lkIHVwZGF0ZUxheW91dCgpIGNvbnN0Owot
ICAgICAgICBOU1JlY3QgY2FyZXRSZWN0KCkgY29uc3Q7Ci0gICAgICAgIE5TUmVjdCByZWN0Rm9y
U2Nyb2xsVG9WaXNpYmxlKCkgY29uc3Q7Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBmb3JtRWxl
bWVudHNDaGFyYWN0ZXJDb3VudCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFRpbWVyc1BhdXNl
ZChib29sKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHByZWZlcnJlZEhlaWdodCgpIGNv
bnN0OworICAgICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgaW5uZXJMaW5lSGVpZ2h0KERPTU5vZGUq
KSBjb25zdDsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVMYXlvdXQoKSBjb25z
dDsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgTlNSZWN0IGNhcmV0UmVjdCgpIGNvbnN0OworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBOU1JlY3QgcmVjdEZvclNjcm9sbFRvVmlzaWJsZSgpIGNvbnN0
OworICAgICAgICBXRUJDT1JFX0VYUE9SVCBET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUF0
U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQg
Zm9ybUVsZW1lbnRzQ2hhcmFjdGVyQ291bnQoKSBjb25zdDsKKyAgICAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRUaW1lcnNQYXVzZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgdGltZXJzUGF1c2Vk
KCkgY29uc3QgeyByZXR1cm4gbV90aW1lcnNQYXVzZWRDb3VudDsgfQotICAgICAgICB2b2lkIGRp
c3BhdGNoUGFnZUhpZGVFdmVudEJlZm9yZVBhdXNlKCk7Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2hQ
YWdlU2hvd0V2ZW50QmVmb3JlUmVzdW1lKCk7Ci0gICAgICAgIHZvaWQgc2V0UmFuZ2VkU2VsZWN0
aW9uQmFzZVRvQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICB2b2lkIHNldFJhbmdlZFNlbGVj
dGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCgpOwotICAgICAgICB2b2lkIHNldFJhbmdl
ZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25FbmQoKTsKLSAgICAgICAgdm9pZCBjbGVh
clJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQoKTsKLSAgICAgICAgdm9pZCBzZXRSYW5nZWRT
ZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKTsKLSAgICAgICAg
dm9pZCBzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hQYWdlSGlkZUV2ZW50QmVm
b3JlUGF1c2UoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaFBhZ2VTaG93
RXZlbnRCZWZvcmVSZXN1bWUoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSYW5n
ZWRTZWxlY3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uKCk7CisgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCk7
CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3Vy
cmVudFNlbGVjdGlvbkVuZCgpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmFu
Z2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnRUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCgp
OworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJhbmdlZFNlbGVjdGlvbkluaXRpYWxF
eHRlbnRUb0N1cnJlbnRTZWxlY3Rpb25FbmQoKTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBy
YW5nZWRTZWxlY3Rpb25CYXNlKCkgY29uc3Q7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gcmFu
Z2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0OwotICAgICAgICB2b2lkIHJlY3Vyc2l2
ZVNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKGJvb2wpOwotICAgICAgICBOU0FycmF5KiBpbnRl
cnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBWaXNpYmxlU2VsZWN0aW9uIHJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQoKSBjb25zdDsK
KyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNl
RW5hYmxlZChib29sKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgTlNBcnJheSogaW50ZXJwcmV0
YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdDsKICNlbmRpZgogICAgICAgICB2b2lkIHN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwogICAgICAgICB2b2lkIHJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDE2ICszNCwxNiBAQCBjbGFzcyBGcmFtZTsKIAogY2xhc3MgRnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX1RFU1RJTkcgZXhwbGljaXQgRnJh
bWVEZXN0cnVjdGlvbk9ic2VydmVyKEZyYW1lKik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGlj
aXQgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKEZyYW1lKik7CiAKLSAgICBXRUJDT1JFX1RFU1RJ
TkcgdmlydHVhbCB2b2lkIGZyYW1lRGVzdHJveWVkKCk7Ci0gICAgV0VCQ09SRV9URVNUSU5HIHZp
cnR1YWwgdm9pZCB3aWxsRGV0YWNoUGFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBmcmFtZURlc3Ryb3llZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCB3
aWxsRGV0YWNoUGFnZSgpOwogCiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9URVNUSU5HIHZpcnR1YWwgfkZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlcigpOwotICAgIFdFQkNPUkVfVEVTVElORyB2b2lkIG9ic2VydmVG
cmFtZShGcmFtZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZyYW1lRGVzdHJ1Y3Rp
b25PYnNlcnZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb2JzZXJ2ZUZyYW1lKEZyYW1l
Kik7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVl
LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVuaXF1ZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX3VuaXF1ZU5hbWU7IH0KLSAgICAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwotICAgICAgICB2b2lkIGNsZWFyTmFtZSgpOwotICAgICAgICBGcmFtZSogcGFyZW50KCkg
Y29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhck5hbWUoKTsKKyAgICAg
ICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIHBhcmVudCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dFBhcmVudChGcmFtZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CiAgICAgICAgIAog
ICAgICAgICBGcmFtZSogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHRTaWJsaW5n
LmdldCgpOyB9CkBAIC01NSwyNCArNTUsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBGcmFtZSogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZC5nZXQoKTsg
fQogICAgICAgICBGcmFtZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hpbGQ7
IH0KIAotICAgICAgICBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IEZyYW1lKiBhbmNlc3Rvcikg
Y29uc3Q7Ci0gICAgICAgIEZyYW1lKiB0cmF2ZXJzZU5leHQoY29uc3QgRnJhbWUqIHN0YXlXaXRo
aW4gPSAwKSBjb25zdDsKLSAgICAgICAgRnJhbWUqIHRyYXZlcnNlTmV4dFdpdGhXcmFwKGJvb2wp
IGNvbnN0OwotICAgICAgICBGcmFtZSogdHJhdmVyc2VQcmV2aW91c1dpdGhXcmFwKGJvb2wpIGNv
bnN0OworICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IEZy
YW1lKiBhbmNlc3RvcikgY29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lKiB0cmF2
ZXJzZU5leHQoY29uc3QgRnJhbWUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKKyAgICAgICAgV0VC
Q09SRV9FWFBPUlQgRnJhbWUqIHRyYXZlcnNlTmV4dFdpdGhXcmFwKGJvb2wpIGNvbnN0OworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSogdHJhdmVyc2VQcmV2aW91c1dpdGhXcmFwKGJvb2wp
IGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPEZy
YW1lPik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kQ2hpbGQoUGFzc1JlZlB0
cjxGcmFtZT4pOwogICAgICAgICBib29sIHRyYW5zZmVyQ2hpbGQoUGFzc1JlZlB0cjxGcmFtZT4p
OwogICAgICAgICB2b2lkIGRldGFjaEZyb21QYXJlbnQoKSB7IG1fcGFyZW50ID0gMDsgfQogICAg
ICAgICB2b2lkIHJlbW92ZUNoaWxkKEZyYW1lKik7CiAKICAgICAgICAgRnJhbWUqIGNoaWxkKHVu
c2lnbmVkIGluZGV4KSBjb25zdDsKICAgICAgICAgRnJhbWUqIGNoaWxkKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgICAgIEZyYW1lKiBmaW5kKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNoaWxkQ291bnQoKSBjb25zdDsKKyAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIGZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdDsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY2hpbGRDb3VudCgpIGNv
bnN0OwogCiAgICAgICAgIEF0b21pY1N0cmluZyB1bmlxdWVDaGlsZE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiByZXF1ZXN0ZWROYW1lKSBjb25zdDsKIAotICAgICAgICBGcmFtZSYgdG9wKCkgY29u
c3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lJiB0b3AoKSBjb25zdDsKIAogICAgICAg
ICBGcmFtZSogc2NvcGVkQ2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgICAgICBGcmFt
ZSogc2NvcGVkQ2hpbGQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDE0IEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyVmlldzsKICAgICBmcmllbmQgY2xhc3MgSW50ZXJu
YWxzOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVWaWV3PiBjcmVhdGUoRnJhbWUmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZVZpZXc+IGNyZWF0ZShG
cmFtZSYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lVmlldz4gY3JlYXRlKEZyYW1lJiwg
Y29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpOwogCiAgICAgdmlydHVhbCB+RnJhbWVWaWV3KCk7
CiAKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBvdmVycmlkZTsK
ICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIAogICAgIEZyYW1lJiBmcmFtZSgpIGNv
bnN0IHsgcmV0dXJuICptX2ZyYW1lOyB9CiAKLSAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3KCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyVmlldyogcmVuZGVyVmlldygpIGNvbnN0
OwogCiAgICAgaW50IG1hcEZyb21MYXlvdXRUb0NTU1VuaXRzKExheW91dFVuaXQpIGNvbnN0Owog
ICAgIExheW91dFVuaXQgbWFwRnJvbUNTU1RvTGF5b3V0VW5pdHMoaW50KSBjb25zdDsKQEAgLTkz
LDggKzkzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFyZ2luV2lkdGgoTGF5b3V0VW5pdCk7
CiAgICAgdm9pZCBzZXRNYXJnaW5IZWlnaHQoTGF5b3V0VW5pdCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2FuSGF2ZVNjcm9sbGJhcnMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVD
YW5IYXZlU2Nyb2xsYmFycygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRD
YW5IYXZlU2Nyb2xsYmFycyhib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHVwZGF0ZUNhbkhhdmVTY3JvbGxiYXJzKCk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pIG92ZXJyaWRlOwog
CkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1NpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBsYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUgPSB0cnVlKTsKLSAgICBib29sIGRpZEZpcnN0TGF5b3V0KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBkaWRGaXJzdExheW91dCgpIGNvbnN0OwogICAgIHZvaWQg
bGF5b3V0VGltZXJGaXJlZChUaW1lcjxGcmFtZVZpZXc+Jik7CiAgICAgdm9pZCBzY2hlZHVsZVJl
bGF5b3V0KCk7CiAgICAgdm9pZCBzY2hlZHVsZVJlbGF5b3V0T2ZTdWJ0cmVlKFJlbmRlckVsZW1l
bnQmKTsKQEAgLTExNSwzMSArMTE1LDMxIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTGF5b3V0
Um9vdCgpIHsgbV9sYXlvdXRSb290ID0gbnVsbHB0cjsgfQogICAgIGludCBsYXlvdXRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Q291bnQ7IH0KIAotICAgIGJvb2wgbmVlZHNMYXlvdXQo
KSBjb25zdDsKLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBuZWVkc0xheW91dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVl
ZHNMYXlvdXQoKTsKICAgICB2b2lkIHNldFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzTmVlZExh
eW91dCgpOwogCiAgICAgYm9vbCBuZWVkc0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9u
ZWVkc0Z1bGxSZXBhaW50OyB9CiAKLSAgICBib29sIHJlbmRlcmVkQ2hhcmFjdGVyc0V4Y2VlZCh1
bnNpZ25lZCB0aHJlc2hvbGQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVuZGVyZWRDaGFy
YWN0ZXJzRXhjZWVkKHVuc2lnbmVkIHRocmVzaG9sZCk7CiAKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgYm9vbCB1c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlQ3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3Q7IH0KICAgICBJbnRSZWN0IGN1c3Rv
bUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21GaXhlZFBv
c2l0aW9uTGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91
dFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VzdG9t
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGJvb2wgdXBkYXRl
Rml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKTsKIAogICAgIEludFNpemUgY3VzdG9tU2l6ZUZvclJl
c2l6ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21TaXplRm9yUmVzaXplRXZlbnQ7IH0K
LSAgICB2b2lkIHNldEN1c3RvbVNpemVGb3JSZXNpemVFdmVudChJbnRTaXplKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEN1c3RvbVNpemVGb3JSZXNpemVFdmVudChJbnRTaXplKTsKIAot
ICAgIHZvaWQgc2V0U2Nyb2xsVmVsb2NpdHkoZG91YmxlIGhvcml6b250YWxWZWxvY2l0eSwgZG91
YmxlIHZlcnRpY2FsVmVsb2NpdHksIGRvdWJsZSBzY2FsZUNoYW5nZVJhdGUsIGRvdWJsZSB0aW1l
c3RhbXApOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsVmVsb2NpdHkoZG91Ymxl
IGhvcml6b250YWxWZWxvY2l0eSwgZG91YmxlIHZlcnRpY2FsVmVsb2NpdHksIGRvdWJsZSBzY2Fs
ZUNoYW5nZVJhdGUsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgIEZsb2F0UmVjdCBjb21wdXRlQ292
ZXJhZ2VSZWN0KGRvdWJsZSBob3Jpem9udGFsTWFyZ2luLCBkb3VibGUgdmVydGljYWxNYXJnaW4p
IGNvbnN0OwogI2Vsc2UKICAgICBib29sIHVzZUN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQotICAgIHZvaWQgc2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhkb3Vi
bGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0FuaW1hdGlvblN0YXJ0
VGltZSk7CiAjZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclN0
eWxlQ2hhbmdlKCk7CkBAIC0xNTMsMTAgKzE1MywxMCBAQCBwdWJsaWM6CiAgICAgLy8gY29udGVu
dCByZW5kZXJlZCB2aWEgdGhlIG5vcm1hbCBwYWludGluZyBwYXRoLgogICAgIHZvaWQgc2V0TmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogCi0gICAgR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllckZvclBsYXRmb3JtV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0KTsKLSAgICB2b2lk
IHNjaGVkdWxlTGF5ZXJGbHVzaEFsbG93aW5nVGhyb3R0bGluZygpOworICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXJGb3JQbGF0Zm9ybVdpZGdldChQbGF0Zm9y
bVdpZGdldCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hBbGxv
d2luZ1Rocm90dGxpbmcoKTsKIAotICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBJbiB0aGUgZnV0
dXJlIHdoZW4gYW55IFNjcm9sbGFibGVBcmVhIGNhbiBoYXZlIGEgbm9kZSBpbiB0aCBTY3JvbGxp
bmdUcmVlLCB0aGlzIHNob3VsZAogICAgIC8vIGJlY29tZSBhIHZpcnR1YWwgZnVuY3Rpb24gb24g
U2Nyb2xsYWJsZUFyZWEuCkBAIC0xNjYsMTYgKzE2NiwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0OwogICAgIGJvb2wgaGFzQ29tcG9zaXRlZENvbnRl
bnRJbmNsdWRpbmdEZXNjZW5kYW50cygpIGNvbnN0OwogICAgIGJvb2wgaGFzQ29tcG9zaXRpbmdB
bmNlc3RvcigpIGNvbnN0OwotICAgIHZvaWQgZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICBi
b29sIGlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXIoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVudGVyQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0VuY2xvc2VkSW5Db21wb3NpdGluZ0xheWVyKCkgY29uc3Q7CiAKICAgICAvLyBPbmx5IHVz
ZWQgd2l0aCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgYnV0IG91dHNpZGUgdGhlICNpZmRlZiB0
byBtYWtlIGxpbmthZ2UgZWFzaWVyLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmx1c2gg
d2FzIGNvbXBsZXRlZC4KLSAgICBib29sIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1
YmZyYW1lcygpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmx1c2hDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiBhIHBhaW50
IHdpdGggdGhlIFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMgZmxhZyBzZXQg
Z2l2ZXMKICAgICAvLyBhIGZhaXRoZnVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50Lgot
ICAgIGJvb2wgaXNTb2Z0d2FyZVJlbmRlcmFibGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzU29mdHdhcmVSZW5kZXJhYmxlKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZE1vdmVP
bnNjcmVlbigpOwogICAgIHZvaWQgd2lsbE1vdmVPZmZzY3JlZW4oKTsKQEAgLTE4OSwxNCArMTg5
LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIGJvb2wgaXNUcmFuc3Bh
cmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHJhbnNwYXJlbnQoYm9vbCBpc1RyYW5zcGFyZW50
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzVHJhbnNwYXJlbnQoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFRyYW5zcGFyZW50KGJvb2wgaXNUcmFuc3BhcmVudCk7CiAg
ICAgCiAgICAgLy8gVHJ1ZSBpZiB0aGUgRnJhbWVWaWV3IGlzIG5vdCB0cmFuc3BhcmVudCwgYW5k
IHRoZSBiYXNlIGJhY2tncm91bmQgY29sb3IgaXMgb3BhcXVlLgogICAgIGJvb2wgaGFzT3BhcXVl
QmFja2dyb3VuZCgpIGNvbnN0OwogCi0gICAgQ29sb3IgYmFzZUJhY2tncm91bmRDb2xvcigpIGNv
bnN0OwotICAgIHZvaWQgc2V0QmFzZUJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAg
IFdFQkNPUkVfRVhQT1JUIENvbG9yIGJhc2VCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsK
ICAgICB2b2lkIHVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb25zdCBDb2xvciYsIGJvb2wp
OwogCiAgICAgZW51bSBFeHRlbmRlZEJhY2tncm91bmRNb2RlRmxhZ3MgewpAQCAtMjE1LDE2ICsy
MTUsMTYgQEAgcHVibGljOgogICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBh
aW50aW5nKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29sKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKGJvb2wp
OwogICAgIGJvb2wgc2hvdWxkVXBkYXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkanVzdFZpZXdT
aXplKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGp1c3RWaWV3U2l6ZSgpOwogICAgIAot
ICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyhJbnRTaXplKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMo
SW50U2l6ZSk7CiAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCkg
Y29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGJvb2wgY2xp
cFRvQ29udGVudHMgPSB0cnVlKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRSZWN0IHdpbmRvd0Ns
aXBSZWN0Rm9yRnJhbWVPd25lcihjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBib29sIGNs
aXBUb0xheWVyQ29udGVudHMpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3Qgd2lu
ZG93Q2xpcFJlY3RGb3JGcmFtZU93bmVyKGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGJv
b2wgY2xpcFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEludFJlY3Qgd2lu
ZG93UmVzaXplclJlY3QoKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMjMzLDE0ICsyMzMsMTQgQEAg
cHVibGljOgogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5k
aWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYVBsYXRmb3JtV2lkZ2V0
KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIG5ld1Bvc2l0aW9u
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFBv
c2l0aW9uQ2hhbmdlZFZpYVBsYXRmb3JtV2lkZ2V0KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIG5ld1Bvc2l0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsaW5nKCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBJbnRQb2ludCYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3Np
dGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UG9p
bnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIGRlbGF5ZWRTY3JvbGxFdmVudFRpbWVyRmlyZWQoVGltZXI8RnJhbWVW
aWV3PiYpOwogCiAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB2aXNpYmxlQ29udGVudFJl
Y3QoKSBpbiB0aGF0IGl0IGlnbm9yZXMgbmVnYXRpdmUgKG9yIG92ZXJseSBwb3NpdGl2ZSkKQEAg
LTI0OCw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UmVjdCB2aWV3cG9ydENvbnN0cmFp
bmVkVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgbWVkaWFUeXBlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRNZWRpYVR5cGUoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRNZWRpYVR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhZGp1
c3RNZWRpYVR5cGVGb3JQcmludGluZyhib29sIHByaW50aW5nKTsKIAogICAgIHZvaWQgc2V0Q2Fu
bm90QmxpdFRvV2luZG93KCk7CkBAIC0yNzgsMzMgKzI3OCwzMyBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlc2UgbGF5ZXJzIGFyZSBwb3NpdGlvbmVkIGRpZmZlcmVudGx5IHdoZW4gdGhlcmUgaXMgYSB0
b3BDb250ZW50SW5zZXQsIGEgaGVhZGVyLCBvciBhIGZvb3Rlci4gVGhlc2UgdmFsdWUgbmVlZCB0
byBiZSBjb21wdXRlZAogICAgIC8vIG9uIGJvdGggdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgc2Ny
b2xsaW5nIHRocmVhZC4KICAgICBzdGF0aWMgZmxvYXQgeVBvc2l0aW9uRm9ySW5zZXRDbGlwTGF5
ZXIoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGZsb2F0IHRvcENvbnRlbnRJbnNl
dCk7Ci0gICAgc3RhdGljIGZsb2F0IHlQb3NpdGlvbkZvclJvb3RDb250ZW50TGF5ZXIoY29uc3Qg
RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGZsb2F0IHRvcENvbnRlbnRJbnNldCwgZmxvYXQg
aGVhZGVySGVpZ2h0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgeVBvc2l0aW9u
Rm9yUm9vdENvbnRlbnRMYXllcihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgZmxv
YXQgdG9wQ29udGVudEluc2V0LCBmbG9hdCBoZWFkZXJIZWlnaHQpOwogICAgIHN0YXRpYyBmbG9h
dCB5UG9zaXRpb25Gb3JIZWFkZXJMYXllcihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgZmxvYXQgdG9wQ29udGVudEluc2V0KTsKICAgICBzdGF0aWMgZmxvYXQgeVBvc2l0aW9uRm9y
Rm9vdGVyTGF5ZXIoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGZsb2F0IHRvcENv
bnRlbnRJbnNldCwgZmxvYXQgdG90YWxDb250ZW50c0hlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0
KTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBMYXlvdXRSZWN0IHZpZXdwb3J0Q29uc3RyYWlu
ZWRPYmplY3RzUmVjdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFJlY3Qgdmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdHNSZWN0KCkgY29uc3Q7CiAgICAgLy8gU3RhdGljIGZ1bmN0
aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBzdGF0aWMgTGF5b3V0
UmVjdCByZWN0Rm9yVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QgTGF5b3V0UmVjdCYg
dmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBMYXlvdXRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSwg
ZmxvYXQgZnJhbWVTY2FsZUZhY3RvciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVU
b0ZyYW1lLCBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBMYXlvdXRSZWN0IHJlY3RGb3JWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyhj
b25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IExheW91dFNpemUmIHRv
dGFsQ29udGVudHNTaXplLCBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yLCBib29sIGZpeGVkRWxlbWVu
dHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUsIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyk7
CiAjZW5kaWYKICAgICAKICAgICBib29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJh
bWUoKSBjb25zdDsKIAotICAgIHZvaWQgZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9y
YXJpbHlGb3JJbnRlcmFjdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzYWJsZUxh
eWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogICAgIGJvb2wg
c3BlY3VsYXRpdmVUaWxpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhdGl2ZVRp
bGluZ0VuYWJsZWQ7IH0KICAgICB2b2lkIGxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQoKTsK
IAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIHVwZGF0ZUFubm90YXRl
ZFJlZ2lvbnMoKTsKICNlbmRpZgotICAgIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVDb250cm9sVGludHMoKTsKIAogICAgIHZvaWQgcmVz
dG9yZVNjcm9sbGJhcigpOwogCiAgICAgdm9pZCBwb3N0TGF5b3V0VGltZXJGaXJlZChUaW1lcjxG
cmFtZVZpZXc+Jik7CiAKLSAgICBib29sIHdhc1Njcm9sbGVkQnlVc2VyKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRXYXNTY3JvbGxlZEJ5VXNlcihib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHdhc1Njcm9sbGVkQnlVc2VyKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRX
YXNTY3JvbGxlZEJ5VXNlcihib29sKTsKIAogICAgIGJvb2wgc2FmZVRvUHJvcGFnYXRlU2Nyb2xs
VG9QYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3NhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50
OyB9CiAgICAgdm9pZCBzZXRTYWZlVG9Qcm9wYWdhdGVTY3JvbGxUb1BhcmVudChib29sIGlzU2Fm
ZSkgeyBtX3NhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50ID0gaXNTYWZlOyB9CkBAIC0zMTIs
NyArMzEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShS
ZW5kZXJFbWJlZGRlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlRW1iZWRkZWRPYmplY3RUb1Vw
ZGF0ZShSZW5kZXJFbWJlZGRlZE9iamVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwogCiAgICAgc3Ry
dWN0IFBhaW50aW5nU3RhdGUgewogICAgICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3I7
CkBAIC0zMjksMzkgKzMyOSwzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsUGFpbnRDb250ZW50
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIFBhaW50aW5nU3Rh
dGUmKTsKICAgICB2b2lkIGRpZFBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0LCBQYWludGluZ1N0YXRlJik7CiAKLSAgICB2b2lkIHNldFBhaW50
QmVoYXZpb3IoUGFpbnRCZWhhdmlvcik7Ci0gICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9y
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQYWludEJlaGF2aW9yKFBhaW50
QmVoYXZpb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
cigpIGNvbnN0OwogICAgIGJvb2wgaXNQYWludGluZygpIGNvbnN0OwogICAgIGJvb2wgaGFzRXZl
clBhaW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KICAgICB2b2lkIHNl
dExhc3RQYWludFRpbWUoZG91YmxlIGxhc3RQYWludFRpbWUpIHsgbV9sYXN0UGFpbnRUaW1lID0g
bGFzdFBhaW50VGltZTsgfQotICAgIHZvaWQgc2V0Tm9kZVRvRHJhdyhOb2RlKik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXROb2RlVG9EcmF3KE5vZGUqKTsKIAogICAgIGVudW0gU2VsZWN0
aW9uSW5TbmFwc2hvdCB7IEluY2x1ZGVTZWxlY3Rpb24sIEV4Y2x1ZGVTZWxlY3Rpb24gfTsKICAg
ICBlbnVtIENvb3JkaW5hdGVTcGFjZUZvclNuYXBzaG90IHsgRG9jdW1lbnRDb29yZGluYXRlcywg
Vmlld0Nvb3JkaW5hdGVzIH07Ci0gICAgdm9pZCBwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBTZWxlY3Rpb25JblNuYXBz
aG90IHNob3VsZFBhaW50U2VsZWN0aW9uLCBDb29yZGluYXRlU3BhY2VGb3JTbmFwc2hvdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBTZWxlY3Rpb25JblNuYXBzaG90IHNo
b3VsZFBhaW50U2VsZWN0aW9uLCBDb29yZGluYXRlU3BhY2VGb3JTbmFwc2hvdCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRPdmVyaGFuZ0FyZWFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmIGhvcml6b250YWxPdmVyaGFuZ0FyZWEsIGNvbnN0IEludFJlY3QmIHZlcnRpY2FsT3Zl
cmhhbmdBcmVhLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiBjb3JuZXJSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXIo
R3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwog
Ci0gICAgQ29sb3IgZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBkb2N1bWVudEJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogCiAgICAgYm9v
bCBpc0luQ2hpbGRGcmFtZVdpdGhGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAogICAgIHN0YXRp
YyBkb3VibGUgY3VycmVudFBhaW50VGltZVN0YW1wKCkgeyByZXR1cm4gc0N1cnJlbnRQYWludFRp
bWVTdGFtcDsgfSAvLyByZXR1cm5zIDAgaWYgbm90IHBhaW50aW5nCiAgICAgCi0gICAgdm9pZCB1
cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiAKICAgICB2
b2lkIGluY3JlbWVudFZpc3VhbGx5Tm9uRW1wdHlDaGFyYWN0ZXJDb3VudCh1bnNpZ25lZCk7CiAg
ICAgdm9pZCBpbmNyZW1lbnRWaXN1YWxseU5vbkVtcHR5UGl4ZWxDb3VudChjb25zdCBJbnRTaXpl
Jik7CiAgICAgdm9pZCB1cGRhdGVJc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKICAgICBib29sIGlzVmlz
dWFsbHlOb25FbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXN1YWxseU5vbkVtcHR5OyB9Ci0g
ICAgdm9pZCBlbmFibGVBdXRvU2l6ZU1vZGUoYm9vbCBlbmFibGUsIGNvbnN0IEludFNpemUmIG1p
blNpemUsIGNvbnN0IEludFNpemUmIG1heFNpemUpOwotICAgIHZvaWQgc2V0QXV0b1NpemVGaXhl
ZE1pbmltdW1IZWlnaHQoaW50IGZpeGVkTWluaW11bUhlaWdodCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBlbmFibGVBdXRvU2l6ZU1vZGUoYm9vbCBlbmFibGUsIGNvbnN0IEludFNpemUmIG1p
blNpemUsIGNvbnN0IEludFNpemUmIG1heFNpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0QXV0b1NpemVGaXhlZE1pbmltdW1IZWlnaHQoaW50KTsKICAgICBJbnRTaXplIGF1dG9TaXpp
bmdJbnRyaW5zaWNDb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b1NpemVDb250ZW50
U2l6ZTsgfQogCi0gICAgdm9pZCBmb3JjZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNl
KTsKLSAgICB2b2lkIGZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBh
Z2VTaXplLCBjb25zdCBGbG9hdFNpemUmIG9yaWdpbmFsUGFnZVNpemUsIGZsb2F0IG1heGltdW1T
aHJpbmtGYWN0b3IsIEFkanVzdFZpZXdTaXplT3JOb3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZm9yY2VMYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmb3JjZUxheW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbFBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hy
aW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1l
dGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtpdC4g
IFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQogICAgIC8vIHNvbWUgZW5jbG9zaW5n
IHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUgdGhl
IHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKQEAgLTM3OSwxOCArMzc5LDE4IEBAIHB1
YmxpYzoKICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IHNvbHZlIHRoZSBnZW5lcmFsIHByb2JsZW0g
b2YgaG93IG90aGVyIEFwcEtpdCB2aWV3cyBjb3VsZCBvcHQgaW4gdG8gdGhlIGJldHRlciBtb2Rl
bC4KICAgICAvLwogICAgIC8vIE5PIE9USEVSIFBMQVRGT1JNIEJFU0lERVMgTUFDIFNIT1VMRCBV
U0UgVEhJUyBNRVRIT0QuCi0gICAgdm9pZCBhZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9h
dCogbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9t
TGltaXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRqdXN0UGFnZUhlaWdodERlcHJlY2F0
ZWQoZmxvYXQqIG5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0
IGJvdHRvbUxpbWl0KTsKIAogICAgIGJvb2wgc2Nyb2xsVG9GcmFnbWVudChjb25zdCBVUkwmKTsK
ICAgICBib29sIHNjcm9sbFRvQW5jaG9yKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgbWFpbnRh
aW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKE5vZGUqKTsKLSAgICB2b2lkIHNjcm9sbEVsZW1lbnRU
b1JlY3QoRWxlbWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCosIGNvbnN0IEludFJlY3QmKTsKIAogICAgIC8v
IE1ldGhvZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIGNvb3JkaW5h
dGUgc3BhY2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgotICAgIEludFJlY3QgY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgUmVuZGVyRWxlbWVudCosIGNv
bnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1JlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
UmVuZGVyRWxlbWVudCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjb252ZXJ0
RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhjb25zdCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgY29udmVydEZyb21D
b250YWluaW5nVmlld1RvUmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCosIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRQb2ludCBjb252ZXJ0RnJvbVJlbmRl
cmVyVG9Db250YWluaW5nVmlldyhjb25zdCBSZW5kZXJFbGVtZW50KiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9SZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKIAogICAgIGJvb2wgaXNGcmFtZVZpZXdTY3JvbGxDb3JuZXIoUmVuZGVyU2Nyb2xsYmFy
UGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbENvcm5lciA9PSBzY3Jv
bGxDb3JuZXI7IH0KIApAQCAtNDExLDE3ICs0MTEsMTcgQEAgcHVibGljOgogCiAgICAgUmVuZGVy
Qm94KiBlbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHNldFRyYWNr
c1JlcGFpbnRzKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VHJhY2tzUmVwYWlu
dHMoYm9vbCk7CiAgICAgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBjb25zdCB7IHJldHVybiBt
X2lzVHJhY2tpbmdSZXBhaW50czsgfQotICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludHMoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0VHJhY2tlZFJlcGFpbnRzKCk7CiAgICAgY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRyYWNrZWRSZXBhaW50UmVjdHMoKSBjb25zdCB7IHJldHVy
biBtX3RyYWNrZWRSZXBhaW50UmVjdHM7IH0KICAgICBTdHJpbmcgdHJhY2tlZFJlcGFpbnRSZWN0
c0FzVGV4dCgpIGNvbnN0OwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj4g
U2Nyb2xsYWJsZUFyZWFTZXQ7CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzY3JvbGxhYmxl
IGFyZWEgaGFzIGp1c3QgYmVlbiBuZXdseSBhZGRlZC4KLSAgICBib29sIGFkZFNjcm9sbGFibGVB
cmVhKFNjcm9sbGFibGVBcmVhKik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhZGRTY3JvbGxh
YmxlQXJlYShTY3JvbGxhYmxlQXJlYSopOwogICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2Ny
b2xsYWJsZSBhcmVhIGhhcyBqdXN0IGJlZW4gcmVtb3ZlZC4KLSAgICBib29sIHJlbW92ZVNjcm9s
bGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZW1v
dmVTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSopOwogICAgIGJvb2wgY29udGFpbnNTY3Jv
bGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSopIGNvbnN0OwogICAgIGNvbnN0IFNjcm9sbGFibGVB
cmVhU2V0KiBzY3JvbGxhYmxlQXJlYXMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVh
cy5nZXQoKTsgfQogCkBAIC00MzIsNyArNDMyLDcgQEAgcHVibGljOgogICAgIC8vIHdlIG5lZWQg
dGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byBkbyB0aGUgc2Nyb2xsIG91cnNlbHZlcy4KICAgICBi
b29sIHdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKLSAgICB2b2lkIHNl
dFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwog
CiAgICAgLy8gUGFnZSBhbmQgRnJhbWVWaWV3IGJvdGggc3RvcmUgYSBQYWdpbmF0aW9uIHZhbHVl
LiBQYWdlOjpwYWdpbmF0aW9uKCkgaXMgc2V0IG9ubHkgYnkgQVBJLAogICAgIC8vIGFuZCBGcmFt
ZVZpZXc6OnBhZ2luYXRpb24oKSBpcyBzZXQgb25seSBieSBDU1MuIFBhZ2U6OnBhZ2luYXRpb24o
KSB3aWxsIGFmZmVjdCBhbGwKQEAgLTQ1NiwyMCArNDU2LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VU
ZXN0aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgR3JhcGhpY3NMYXllciogc2V0V2FudHNMYXllckZvclRvcE92ZXJIYW5nQXJlYShib29sKSBj
b25zdDsKLSAgICBHcmFwaGljc0xheWVyKiBzZXRXYW50c0xheWVyRm9yQm90dG9tT3ZlckhhbmdB
cmVhKGJvb2wpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzTGF5ZXIqIHNldFdh
bnRzTGF5ZXJGb3JUb3BPdmVySGFuZ0FyZWEoYm9vbCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NMYXllciogc2V0V2FudHNMYXllckZvckJvdHRvbU92ZXJIYW5nQXJlYShib29s
KSBjb25zdDsKICNlbmRpZgogCiAgICAgdmlydHVhbCBpbnQgaGVhZGVySGVpZ2h0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9oZWFkZXJIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhlYWRlckhl
aWdodChpbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGVhZGVySGVpZ2h0KGludCk7
CiAgICAgdmlydHVhbCBpbnQgZm9vdGVySGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9mb290ZXJIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEZvb3RlckhlaWdodChpbnQpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Rm9vdGVySGVpZ2h0KGludCk7CiAKLSAgICB2aXJ0dWFsIGZs
b2F0IHRvcENvbnRlbnRJbnNldChUb3BDb250ZW50SW5zZXRUeXBlID0gVG9wQ29udGVudEluc2V0
VHlwZTo6V2ViQ29yZUNvbnRlbnRJbnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBmbG9hdCB0b3BDb250ZW50SW5zZXQoVG9wQ29udGVudEluc2V0VHlwZSA9
IFRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVDb250ZW50SW5zZXQpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZvaWQgdG9wQ29udGVudEluc2V0RGlkQ2hhbmdlKGZsb2F0IG5ld1RvcENvbnRlbnRJ
bnNldCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGFkZFBhaW50UGVuZGluZ01pbGVzdG9uZXMoTGF5b3V0TWlsZXN0
b25lcyk7CiAgICAgdm9pZCBmaXJlUGFpbnRSZWxhdGVkTWlsZXN0b25lc0lmTmVlZGVkKCk7CkBA
IC00NzcsOSArNDc3LDkgQEAgcHVibGljOgogICAgIExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25l
c1BlbmRpbmdQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlsZXN0b25lc1BlbmRpbmdQYWludDsg
fQogCiAgICAgYm9vbCB2aXN1YWxVcGRhdGVzQWxsb3dlZEJ5Q2xpZW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZEJ5Q2xpZW50OyB9Ci0gICAgdm9pZCBzZXRWaXN1YWxV
cGRhdGVzQWxsb3dlZEJ5Q2xpZW50KGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VmlzdWFsVXBkYXRlc0FsbG93ZWRCeUNsaWVudChib29sKTsKIAotICAgIHZvaWQgc2V0U2Nyb2xs
UGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvcik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoU2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsK
IAogICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBzY3JvbGxCZWhhdmlvckZvckZp
eGVkRWxlbWVudHMoKSBjb25zdDsKIApAQCAtNDkzLDcgKzQ5Myw3IEBAIHB1YmxpYzoKICAgICAv
LyBvZiB0aGUgdmlldyBpcyBhY3R1YWxseSBleHBvc2VkIG9uIHNjcmVlbiAodGFraW5nIGludG8g
YWNjb3VudAogICAgIC8vIGNsaXBwaW5nIGJ5IG90aGVyIFVJIGVsZW1lbnRzKSwgd2hlcmVhcyB2
aXNpYmxlQ29udGVudFJlY3QgaXMKICAgICAvLyBpbnRlcm5hbCB0byBXZWJDb3JlIGFuZCBkb2Vz
bid0IHJlc3BlY3QgdGhvc2UgdGhpbmdzLgotICAgIHZvaWQgc2V0RXhwb3NlZFJlY3QoRmxvYXRS
ZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEV4cG9zZWRSZWN0KEZsb2F0UmVjdCk7
CiAgICAgRmxvYXRSZWN0IGV4cG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9leHBvc2VkUmVj
dDsgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKQEAgLTU0MywxNCArNTQzLDE0IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRh
bE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpOwogCi0gICAgdm9pZCBwYWludENvbnRy
b2xUaW50cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRDb250cm9sVGludHMoKTsK
IAogICAgIHZvaWQgZm9yY2VMYXlvdXRQYXJlbnRWaWV3SWZOZWVkZWQoKTsKICAgICB2b2lkIHBl
cmZvcm1Qb3N0TGF5b3V0VGFza3MoKTsKICAgICB2b2lkIGF1dG9TaXplSWZFbmFibGVkKCk7CiAK
ICAgICB2b2lkIHVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nKCk7Ci0gICAgdm9pZCBhZGp1c3RU
aWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRqdXN0VGls
ZWRCYWNraW5nQ292ZXJhZ2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29udGVudFJl
Y3RhbmdsZShjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRzUmVzaXplZCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDE3Mjgz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
MTYgKzExNiwxNiBAQCBjbGFzcyBQYWdlIDogcHVibGljIFN1cHBsZW1lbnRhYmxlPFBhZ2U+CiAg
ICAgZnJpZW5kIGNsYXNzIFBhZ2VUaHJvdHRsZXI7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCB1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7
Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoSGlzdG9yeUl0
ZW0qKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCB1cGRhdGVTdHlsZUZvckFsbFBh
Z2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgY2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoSGlzdG9yeUl0ZW0qKTsK
IAogICAgIC8vIEl0IGlzIHVwIHRvIHRoZSBwbGF0Zm9ybSB0byBlbnN1cmUgdGhhdCBub24tbnVs
bCBjbGllbnRzIGFyZSBwcm92aWRlZCB3aGVyZSByZXF1aXJlZC4KICAgICAvLyBGSVhNRTogUmVu
YW1lIHRoaXMgdG8gUGFnZUNvbmZpZ3VyYXRpb24gYW5kIG1vdmUgaXQgdG8gaXRzIG93biBjbGFz
cy4KICAgICBzdHJ1Y3QgUGFnZUNsaWVudHMgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQYWdlQ2xpZW50cyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgUGFnZUNsaWVudHMoKTsKLSAgICAgICAgflBhZ2VDbGllbnRzKCk7CisgICAgICAgIFdF
QkNPUkVfRVhQT1JUIFBhZ2VDbGllbnRzKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIH5QYWdl
Q2xpZW50cygpOwogCiAgICAgICAgIEFsdGVybmF0aXZlVGV4dENsaWVudCogYWx0ZXJuYXRpdmVU
ZXh0Q2xpZW50OwogICAgICAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudDsKQEAgLTE0NSwy
MSArMTQ1LDIxIEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFZpc2l0ZWRMaW5rU3RvcmU+IHZp
c2l0ZWRMaW5rU3RvcmU7CiAgICAgfTsKIAotICAgIGV4cGxpY2l0IFBhZ2UoUGFnZUNsaWVudHMm
KTsKLSAgICB+UGFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFBhZ2UoUGFnZUNs
aWVudHMmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+UGFnZSgpOwogCi0gICAgdWludDY0X3QgcmVu
ZGVyVHJlZVNpemUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCByZW5kZXJU
cmVlU2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMoKTsKIAogICAgIFJlbmRlclRoZW1lJiB0aGVtZSgpIGNvbnN0IHsgcmV0dXJuICptX3RoZW1l
OyB9CiAKLSAgICBWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cygpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIFZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzKCkg
Y29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZCk7Ci0g
ICAgUGx1Z2luRGF0YSYgcGx1Z2luRGF0YSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBs
dWdpbkRhdGEmIHBsdWdpbkRhdGEoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0Q2FuU3RhcnRNZWRp
YShib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhblN0YXJ0TWVkaWEoYm9vbCk7
CiAgICAgYm9vbCBjYW5TdGFydE1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9jYW5TdGFydE1lZGlh
OyB9CiAKICAgICBFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRpdG9yQ2xpZW50OyB9CkBAIC0xNzEsMTAgKzE3MSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVuZWRCeURPTSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BlbmVkQnlET00oKTsKIAotICAgIHZv
aWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAKLSAgICB2
b2lkIHNldEdyb3VwTmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBTdHJpbmcmIGdyb3Vw
TmFtZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0R3JvdXBOYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKCkg
Y29uc3Q7CiAKICAgICBQYWdlR3JvdXAmIGdyb3VwKCk7CiAgICAgUGFnZUdyb3VwKiBncm91cFB0
cigpIHsgcmV0dXJuIG1fZ3JvdXA7IH0gLy8gY2FuIHJldHVybiAwCkBAIC0xODQsOCArMTg0LDgg
QEAgcHVibGljOgogICAgIGludCBzdWJmcmFtZUNvdW50KCkgY29uc3QgeyBjaGVja1N1YmZyYW1l
Q291bnRDb25zaXN0ZW5jeSgpOyByZXR1cm4gbV9zdWJmcmFtZUNvdW50OyB9CiAKICNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBib29sIHJlbW90ZUluc3BlY3Rpb25BbGxvd2VkKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRSZW1vdGVJbnNwZWN0aW9uQWxsb3dlZChib29sKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHJlbW90ZUluc3BlY3Rpb25BbGxvd2VkKCkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZW1vdGVJbnNwZWN0aW9uQWxsb3dlZChib29sKTsKICAg
ICB2b2lkIHJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCkgY29uc3Q7CiAjZW5k
aWYKIApAQCAtMjEyLDkgKzIxMiw5IEBAIHB1YmxpYzoKIAogICAgIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcigpOwogCi0gICAgU3RyaW5nIHNjcm9sbGluZ1N0YXRl
VHJlZUFzVGV4dCgpOwotICAgIFN0cmluZyBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnNBc1Rl
eHQoKTsKLSAgICBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBub25GYXN0U2Nyb2xsYWJsZVJl
Y3RzKGNvbnN0IEZyYW1lKik7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNjcm9sbGluZ1N0
YXRlVHJlZUFzVGV4dCgpOworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzeW5jaHJvbm91c1Nj
cm9sbGluZ1JlYXNvbnNBc1RleHQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPENs
aWVudFJlY3RMaXN0PiBub25GYXN0U2Nyb2xsYWJsZVJlY3RzKGNvbnN0IEZyYW1lKik7CiAKICAg
ICBTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiAqbV9zZXR0aW5nczsgfQogICAg
IFByb2dyZXNzVHJhY2tlciYgcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiAqbV9wcm9ncmVzczsg
fQpAQCAtMjMyLDIwICsyMzIsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyBWaWV3TW9kZSBzdHJp
bmdUb1ZpZXdNb2RlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgVmlld01vZGUgdmlld01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdNb2RlOyB9Ci0gICAgdm9pZCBzZXRWaWV3TW9kZShWaWV3TW9k
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWV3TW9kZShWaWV3TW9kZSk7CiAjZW5k
aWYgLy8gRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCiAKICAgICB2b2lkIHNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGIpIHsgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMgPSBiOyB9CiAgICAgYm9vbCB0YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoKSBjb25zdCB7
IHJldHVybiBtX3RhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czsgfQogCi0gICAgYm9vbCBmaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwogCi0gICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRp
b25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5n
KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOwogCi0gICAgdW5zaWduZWQgY291
bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0
Y2hDb3VudCk7Ci0gICAgdW5zaWduZWQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhpZ2hsaWdodCwgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYs
IEZpbmRPcHRpb25zLCBib29sIHNob3VsZEhpZ2hsaWdodCwgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCk7CiAKLSAgICB2b2lkIHVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB1bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCiAgICAgLy8gZmluZCBhbGwgdGhlIFJh
bmdlcyBmb3IgdGhlIG1hdGNoaW5nIHRleHQuCiAgICAgLy8gVXBvbiByZXR1cm4sIGluZGV4Rm9y
U2VsZWN0aW9uIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CkBAIC0yNTMsMzkgKzI1Mywz
OSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0
aGUgdXNlciBzZWxlY3Rpb24KICAgICAvLyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRo
ZXJlIGlzIG5vIG1hdGNoaW5nIHRleHQgYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLgogICAgIGVu
dW0geyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uID0gLTEgfTsKLSAgICB2b2lkIGZpbmRTdHJp
bmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50
LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgaW50IG1heENvdW50LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mLCBpbnQm
IGluZGV4Rm9yU2VsZWN0aW9uKTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIGFkZFNj
aGVkdWxlUGFpcihQYXNzUmVmUHRyPFNjaGVkdWxlUGFpcj4pOwotICAgIHZvaWQgcmVtb3ZlU2No
ZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1bGVQYWlyPik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRTY2hlZHVsZVBhaXIoUGFzc1JlZlB0cjxTY2hlZHVsZVBhaXI+KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlbW92ZVNjaGVkdWxlUGFpcihQYXNzUmVmUHRyPFNjaGVkdWxlUGFp
cj4pOwogICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIHsg
cmV0dXJuIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLmdldCgpOyB9CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2NoZWR1bGVQYWlySGFzaFNldD4gbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnM7CiAjZW5k
aWYKIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAgICBib29sIGRlZmVyc0xvYWRpbmcoKSBj
b25zdCB7IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7IH0KIAotICAgIHZvaWQgY2xlYXJVbmRvUmVk
b09wZXJhdGlvbnMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CiAKLSAgICBib29sIGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGUo
Ym9vbCA9IHRydWUpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW5Mb3dRdWFsaXR5SW1hZ2VJ
bnRlcnBvbGF0aW9uTW9kZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW5M
b3dRdWFsaXR5SW1hZ2VJbnRlcnBvbGF0aW9uTW9kZShib29sID0gdHJ1ZSk7CiAKICAgICBmbG9h
dCBtZWRpYVZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFWb2x1bWU7IH0KLSAgICB2b2lk
IHNldE1lZGlhVm9sdW1lKGZsb2F0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlh
Vm9sdW1lKGZsb2F0KTsKIAotICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
LCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIGluU3RhYmxlU3RhdGUgPSB0cnVlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSwgY29u
c3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCBpblN0YWJsZVN0YXRlID0gdHJ1ZSk7CiAgICAgZmxv
YXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0K
IAotICAgIHZvaWQgc2V0Wm9vbWVkT3V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFpvb21lZE91dFBhZ2VTY2FsZUZhY3RvcihmbG9hdCk7CiAgICAg
ZmxvYXQgem9vbWVkT3V0UGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV96b29tZWRP
dXRQYWdlU2NhbGVGYWN0b3I7IH0KIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQotICAgIHZvaWQgc2V0RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpOwogCiAgICAgZmxvYXQgdG9wQ29udGVudEluc2V0KCkgY29uc3QgeyByZXR1
cm4gbV90b3BDb250ZW50SW5zZXQ7IH0KLSAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9h
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwog
ICAgIAogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAgIGZsb2F0IHRleHRBdXRv
c2l6aW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RleHRBdXRvc2l6aW5nV2lkdGg7IH0KQEAg
LTI5MywxMyArMjkzLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIGJvb2wgc2hvdWxk
U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc1Nj
cm9sbGJhckFuaW1hdGlvbnM7IH0KLSAgICB2b2lkIHNldFNob3VsZFN1cHByZXNzU2Nyb2xsYmFy
QW5pbWF0aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTaG91bGRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVzc0Fu
aW1hdGlvbnMpOwogICAgIHZvaWQgbG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4oYm9v
bCBsb2NrT3ZlcmxheVNjcm9sbGJhcnMpOwogICAgIAotICAgIHZvaWQgc2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkpOwogICAgIFNjcm9s
bEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8U2Nyb2xsRWxhc3RpY2l0eT4obV92ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOyB9
CiAKLSAgICB2b2lkIHNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNp
dHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoU2Nyb2xsRWxhc3RpY2l0eSk7CiAgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbEVsYXN0aWNp
dHk+KG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOyB9CiAgICAgCiAgICAgLy8gUGFnZSBh
bmQgRnJhbWVWaWV3IGJvdGggc3RvcmUgYSBQYWdpbmF0aW9uIHZhbHVlLiBQYWdlOjpwYWdpbmF0
aW9uKCkgaXMgc2V0IG9ubHkgYnkgQVBJLApAQCAtMzA3LDE4ICszMDcsMTggQEAgcHVibGljOgog
ICAgIC8vIEZyYW1lVmlld3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGJ1dCBGcmFtZVZpZXc6OnBhZ2lu
YXRpb24oKSBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQKICAgICAvLyBGcmFtZVZpZXcuCiAgICAg
Y29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnaW5hdGlv
bjsgfQotICAgIHZvaWQgc2V0UGFnaW5hdGlvbihjb25zdCBQYWdpbmF0aW9uJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRQYWdpbmF0aW9uKGNvbnN0IFBhZ2luYXRpb24mKTsKIAotICAg
IHVuc2lnbmVkIHBhZ2VDb3VudCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVk
IHBhZ2VDb3VudCgpIGNvbnN0OwogCiAgICAgLy8gTm90aWZpY2F0aW9ucyB3aGVuIHRoZSBQYWdl
IHN0YXJ0cyBhbmQgc3RvcHMgYmVpbmcgcHJlc2VudGVkIHZpYSBhIG5hdGl2ZSB3aW5kb3cuCi0g
ICAgdm9pZCBzZXRWaWV3U3RhdGUoVmlld1N0YXRlOjpGbGFncyk7Ci0gICAgdm9pZCBzZXRJc1Zp
c2libGUoYm9vbCk7Ci0gICAgdm9pZCBzZXRJc1ByZXJlbmRlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0Vmlld1N0YXRlKFZpZXdTdGF0ZTo6RmxhZ3MpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0SXNWaXNpYmxlKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SXNQcmVyZW5kZXIoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmll
d1N0YXRlICYgVmlld1N0YXRlOjpJc1Zpc2libGU7IH0KIAogICAgIC8vIE5vdGlmaWNhdGlvbiB0
aGF0IHRoaXMgUGFnZSB3YXMgbW92ZWQgaW50byBvciBvdXQgb2YgYSBuYXRpdmUgd2luZG93Lgot
ICAgIHZvaWQgc2V0SXNJbldpbmRvdyhib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dElzSW5XaW5kb3coYm9vbCk7CiAgICAgYm9vbCBpc0luV2luZG93KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3U3RhdGUgJiBWaWV3U3RhdGU6OklzSW5XaW5kb3c7IH0KIAogICAgIHZvaWQgc2V0SXND
bG9zaW5nKCkgeyBtX2lzQ2xvc2luZyA9IHRydWU7IH0KQEAgLTMyNyw4ICszMjcsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGRWaWV3U3RhdGVDaGFuZ2VPYnNlcnZlcihWaWV3U3RhdGVDaGFuZ2VP
YnNlcnZlciYpOwogICAgIHZvaWQgcmVtb3ZlVmlld1N0YXRlQ2hhbmdlT2JzZXJ2ZXIoVmlld1N0
YXRlQ2hhbmdlT2JzZXJ2ZXImKTsKIAotICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9u
cygpOwotICAgIHZvaWQgcmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXN1bWVTY3JpcHRlZEFuaW1hdGlvbnMoKTsKICAgICBib29sIHNjcmlwdGVkQW5p
bWF0aW9uc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRpb25zU3Vz
cGVuZGVkOyB9CiAKICAgICB2b2lkIHVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCk7CkBA
IC0zNDIsOCArMzQyLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlz
aXRlZExpbmtzKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwot
ICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2gpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCk7CiAKICAgICBTdG9y
YWdlTmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlID0gdHJ1ZSk7
CiAgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
KTsKQEAgLTM1MSw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDdXN0b21IVE1MVG9r
ZW5pemVyVGltZURlbGF5KCkgY29uc3Q7CiAgICAgZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJU
aW1lRGVsYXkoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0Vu
YWJsZWQoYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZW1vcnlDYWNoZUNsaWVu
dENhbGxzRW5hYmxlZChib29sKTsKICAgICBib29sIGFyZU1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxl
ZDsgfQogCiAgICAgLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2Yg
ZnJhbWVzIGluIGEgcGFnZS4KQEAgLTM2MywyMiArMzYzLDIyIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEVkaXRhYmxlKGJvb2wgaXNFZGl0YWJsZSkgeyBtX2lzRWRpdGFibGUgPSBpc0VkaXRhYmxl
OyB9CiAgICAgYm9vbCBpc0VkaXRhYmxlKCkgeyByZXR1cm4gbV9pc0VkaXRhYmxlOyB9CiAKLSAg
ICBQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSgpIGNvbnN0OwotICAgIHZvaWQg
cmVzdW1lQW5pbWF0aW5nSW1hZ2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFnZVZpc2liaWxp
dHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlc3VtZUFuaW1hdGluZ0ltYWdlcygpOwogCi0gICAgdm9pZCBhZGRMYXlvdXRNaWxlc3RvbmVz
KExheW91dE1pbGVzdG9uZXMpOwotICAgIHZvaWQgcmVtb3ZlTGF5b3V0TWlsZXN0b25lcyhMYXlv
dXRNaWxlc3RvbmVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZExheW91dE1pbGVzdG9u
ZXMoTGF5b3V0TWlsZXN0b25lcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVMYXlv
dXRNaWxlc3RvbmVzKExheW91dE1pbGVzdG9uZXMpOwogICAgIExheW91dE1pbGVzdG9uZXMgcmVx
dWVzdGVkTGF5b3V0TWlsZXN0b25lcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkTGF5b3V0
TWlsZXN0b25lczsgfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIHZvaWQgYWRk
SGVhZGVyV2l0aEhlaWdodChpbnQpOwotICAgIHZvaWQgYWRkRm9vdGVyV2l0aEhlaWdodChpbnQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkSGVhZGVyV2l0aEhlaWdodChpbnQpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkRm9vdGVyV2l0aEhlaWdodChpbnQpOwogI2VuZGlmCiAK
ICAgICBpbnQgaGVhZGVySGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJIZWlnaHQ7IH0K
ICAgICBpbnQgZm9vdGVySGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb290ZXJIZWlnaHQ7IH0K
IAotICAgIENvbG9yIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNvbnN0Owog
CiAgICAgYm9vbCBpc0NvdW50aW5nUmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzKCkgY29uc3Q7CiAg
ICAgdm9pZCBzdGFydENvdW50aW5nUmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzKCk7CkBAIC0zODYs
OCArMzg2LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3Qo
UmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYgb2JqZWN0UGFpbnRSZWN0KTsKICAgICB2
b2lkIGFkZFJlbGV2YW50VW5wYWludGVkT2JqZWN0KFJlbmRlck9iamVjdCosIGNvbnN0IExheW91
dFJlY3QmIG9iamVjdFBhaW50UmVjdCk7CiAKLSAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBzZXRJ
c1BhaW50aW5nKGJvb2wgcGFpbnRpbmcpIHsgbV9pc1BhaW50aW5nID0gcGFpbnRpbmc7IH0KICAg
ICBib29sIGlzUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUGFpbnRpbmc7IH0KQEAgLTM5
Niw3ICszOTYsNyBAQCBwdWJsaWM6CiAgICAgQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBhbHRlcm5h
dGl2ZVRleHRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2FsdGVybmF0aXZlVGV4dENsaWVudDsg
fQogCiAgICAgYm9vbCBoYXNTZWVuUGx1Z2luKGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUpIGNv
bnN0OwotICAgIGJvb2wgaGFzU2VlbkFueVBsdWdpbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzU2VlbkFueVBsdWdpbigpIGNvbnN0OwogICAgIHZvaWQgc2F3UGx1Z2luKGNv
bnN0IFN0cmluZyYgc2VydmljZVR5cGUpOwogICAgIHZvaWQgcmVzZXRTZWVuUGx1Z2lucygpOwog
CkBAIC00MDYsNyArNDA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTZWVuTWVkaWFFbmdp
bmVzKCk7CiAKICAgICBQYWdlVGhyb3R0bGVyKiBwYWdlVGhyb3R0bGVyKCkgeyByZXR1cm4gbV9w
YWdlVGhyb3R0bGVyLmdldCgpOyB9Ci0gICAgdm9pZCBjcmVhdGVQYWdlVGhyb3R0bGVyKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjcmVhdGVQYWdlVGhyb3R0bGVyKCk7CiAKICAgICBQYWdl
Q29uc29sZSYgY29uc29sZSgpIHsgcmV0dXJuICptX2NvbnNvbGU7IH0KIApAQCAtNDI3LDEzICs0
MjcsMTMgQEAgcHVibGljOgogCiAgICAgVmlzaXRlZExpbmtTdG9yZSYgdmlzaXRlZExpbmtTdG9y
ZSgpOwogCi0gICAgU2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vz
c2lvbklEKFNlc3Npb25JRCk7Ci0gICAgdm9pZCBlbmFibGVMZWdhY3lQcml2YXRlQnJvd3Npbmco
Ym9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXNzaW9u
SUQgc2Vzc2lvbklEKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZXNzaW9u
SUQoU2Vzc2lvbklEKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuYWJsZUxlZ2FjeVByaXZh
dGVCcm93c2luZyhib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIGJvb2wgdXNlc0Vw
aGVtZXJhbFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgp
OyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0R3JvdXAoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGluaXRHcm91cCgpOwogCiAgICAgdm9pZCBzZXRJc0luV2luZG93SW50ZXJuYWwoYm9v
bCk7CiAgICAgdm9pZCBzZXRJc1Zpc2libGVJbnRlcm5hbChib29sKTsKQEAgLTQ4Miw3ICs0ODIs
NyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgY29uc3Qgc3RkOjp1
bmlxdWVfcHRyPFBvaW50ZXJMb2NrQ29udHJvbGxlcj4gbV9wb2ludGVyTG9ja0NvbnRyb2xsZXI7
CiAjZW5kaWYKLSAgICBSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5nQ29v
cmRpbmF0b3I7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9y
PiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yOwogCiAgICAgY29uc3QgUmVmUHRyPFNldHRpbmdzPiBt
X3NldHRpbmdzOwogICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxQcm9ncmVzc1RyYWNrZXI+IG1f
cHJvZ3Jlc3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZS5oCShyZXZpc2lvbiAxNzI4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFBhZ2VDb25zb2xlKFBhZ2Um
KTsKICAgICB2aXJ0dWFsIH5QYWdlQ29uc29sZSgpOwogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxk
UHJpbnRFeGNlcHRpb25zKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkUHJpbnRFeGNlcHRp
b25zKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFByaW50RXhj
ZXB0aW9ucygpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFByaW50
RXhjZXB0aW9ucyhib29sKTsKIAogICAgIHN0YXRpYyB2b2lkIG11dGUoKTsKICAgICBzdGF0aWMg
dm9pZCB1bm11dGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkocmV2aXNpb24gMTcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTUgKzU3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZXhwbGljaXQg
UGFnZUdyb3VwKFBhZ2UmKTsKICAgICAgICAgflBhZ2VHcm91cCgpOwogCi0gICAgICAgIHN0YXRp
YyBQYWdlR3JvdXAqIHBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSk7CisgICAgICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYWdlR3JvdXAqIHBhZ2VHcm91cChjb25zdCBTdHJpbmcm
IGdyb3VwTmFtZSk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsK
KyAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsK
IAogICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJpdHlP
cmlnaW4qKTsKLSAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJh
c2VzKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGNsb3NlSWRsZUxvY2Fs
U3RvcmFnZURhdGFiYXNlcygpOwogICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIgdGhh
dCB0cmlnZ2VycyBhIFN0b3JhZ2VBcmVhIHN5bmMuCi0gICAgICAgIHN0YXRpYyB2b2lkIHN5bmNM
b2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc3luY0xv
Y2FsU3RvcmFnZSgpOwogCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZXM7IH0KIApAQCAtNzQsMTYgKzc0LDE2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVkTGlua1N0b3JlKCk7
CiAKLSAgICAgICAgYm9vbCBpc0xpbmtWaXNpdGVkKExpbmtIYXNoKTsKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc0xpbmtWaXNpdGVkKExpbmtIYXNoKTsKIAogICAgICAgICB2b2lkIGFk
ZFZpc2l0ZWRMaW5rKGNvbnN0IFVSTCYpOwogICAgICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKGNv
bnN0IFVDaGFyKiwgc2l6ZV90KTsKLSAgICAgICAgdm9pZCBhZGRWaXNpdGVkTGlua0hhc2goTGlu
a0hhc2gpOwotICAgICAgICB2b2lkIHJlbW92ZVZpc2l0ZWRMaW5rKGNvbnN0IFVSTCYpOworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFZpc2l0ZWRMaW5rSGFzaChMaW5rSGFzaCk7Cisg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVmlzaXRlZExpbmsoY29uc3QgVVJMJik7
CiAgICAgICAgIHZvaWQgcmVtb3ZlVmlzaXRlZExpbmtzKCk7CiAKLSAgICAgICAgc3RhdGljIHZv
aWQgc2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3MoYm9vbCk7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhib29sKTsKKyAgICAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgcmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CiAKICAgICAgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTkzLDIzICs5MywyMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RvcmFnZU5hbWVzcGFjZSogdHJhbnNpZW50
TG9jYWxTdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiB0b3BPcmlnaW4pOwogCi0gICAgICAgIHZvaWQg
YWRkVXNlclNjcmlwdFRvV29ybGQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3aGl0ZWxpc3QsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBibGFja2xpc3QsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lLCBVc2VyQ29u
dGVudEluamVjdGVkRnJhbWVzKTsKLSAgICAgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldFRvV29y
bGQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFVSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB3aGl0ZWxpc3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibGFj
a2xpc3QsIFVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMsIFVzZXJTdHlsZUxldmVsID0gVXNlclN0
eWxlVXNlckxldmVsLCBVc2VyU3R5bGVJbmplY3Rpb25UaW1lID0gSW5qZWN0SW5FeGlzdGluZ0Rv
Y3VtZW50cyk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29ybGQoRE9N
V3JhcHBlcldvcmxkJiwgY29uc3QgVVJMJik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlw
dEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVUkwmKTsKLSAgICAgICAgdm9pZCBy
ZW1vdmVVc2VyU2NyaXB0c0Zyb21Xb3JsZChET01XcmFwcGVyV29ybGQmKTsKLSAgICAgICAgdm9p
ZCByZW1vdmVVc2VyU3R5bGVTaGVldHNGcm9tV29ybGQoRE9NV3JhcHBlcldvcmxkJik7Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRVc2VyU2NyaXB0VG9Xb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHdoaXRlbGlzdCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGJsYWNrbGlzdCwgVXNlclNjcmlwdEluamVjdGlvblRpbWUsIFVz
ZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZFVzZXJTdHlsZVNoZWV0VG9Xb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHdoaXRlbGlzdCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsYWNrbGlzdCwgVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcywgVXNl
clN0eWxlTGV2ZWwgPSBVc2VyU3R5bGVVc2VyTGV2ZWwsIFVzZXJTdHlsZUluamVjdGlvblRpbWUg
PSBJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBV
UkwmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyU2NyaXB0RnJvbVdv
cmxkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVSTCYpOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZVVzZXJTY3JpcHRzRnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCYpOworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0c0Zyb21Xb3JsZChE
T01XcmFwcGVyV29ybGQmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxV
c2VyQ29udGVudCgpOwogCiAgICAgICAgIEdyb3VwU2V0dGluZ3MmIGdyb3VwU2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiAqbV9ncm91cFNldHRpbmdzOyB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi0gICAgICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICAgICAg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlcyogY2FwdGlvblByZWZlcmVuY2VzKCk7CiAjZW5kaWYKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoTGlua0hhc2gpOworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFZpc2l0ZWRMaW5rKExpbmtIYXNoKTsKIAogICAg
ICAgICBTdHJpbmcgbV9uYW1lOwogICAgICAgICBIYXNoU2V0PFBhZ2UqPiBtX3BhZ2VzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlVGhyb3R0bGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlVGhyb3R0bGVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVRocm90dGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVIeXN0ZXJlc2lzKCk7CiAKICAgICBm
cmllbmQgY2xhc3MgSHlzdGVyZXNpc0FjdGl2aXR5PFBhZ2VUaHJvdHRsZXI+OwotICAgIHZvaWQg
c3RhcnRlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRlZCgpOwogICAgIHZvaWQg
c3RvcHBlZCgpOwogCiAgICAgUGFnZSYgbV9wYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QcmludENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50
Q29udGV4dC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIGNsYXNzIEludFJlY3Q7
CiAKIGNsYXNzIFByaW50Q29udGV4dCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUHJpbnRDb250
ZXh0KEZyYW1lKik7Ci0gICAgflByaW50Q29udGV4dCgpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4
cGxpY2l0IFByaW50Q29udGV4dChGcmFtZSopOworICAgIFdFQkNPUkVfRVhQT1JUIH5QcmludENv
bnRleHQoKTsKIAogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0K
IApAQCAtNDQsNDAgKzQ0LDQwIEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0
aGF0IENTUyBwYWdlIGJyZWFrcyB3b24ndCBiZSBvbiBwYWdlIGJvdW5kYXJ5IGlmIHRoZSBzaXpl
IGlzIGRpZmZlcmVudCB0aGFuIHdoYXQgd2FzIHBhc3NlZCB0byBiZWdpbigpLiBUaGF0J3MgcHJv
YmFibHkgbm90IGFsd2F5cyBkZXNpcmFibGUuCiAgICAgLy8gRklYTUU6IEhlYWRlciBhbmQgZm9v
dGVyIGhlaWdodCBzaG91bGQgYmUgYXBwbGllZCBiZWZvcmUgbGF5b3V0LCBub3QgYWZ0ZXIuCiAg
ICAgLy8gRklYTUU6IFRoZSBwcmludFJlY3QgYXJndW1lbnQgaXMgb25seSB1c2VkIHRvIGRldGVy
bWluZSBwYWdlIGFzcGVjdCByYXRpbywgaXQgd291bGQgYmUgYmV0dGVyIHRvIHBhc3MgYSBGbG9h
dFNpemUgd2l0aCBwYWdlIGRpbWVuc2lvbnMgaW5zdGVhZC4KLSAgICB2b2lkIGNvbXB1dGVQYWdl
UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxv
YXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVp
Z2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRpbGluZyA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJlY3QsIGZs
b2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0
b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRpbGluZyA9IGZh
bHNlKTsKIAogICAgIC8vIERlcHJlY2F0ZWQuIFBhZ2Ugc2l6ZSBjb21wdXRhdGlvbiBpcyBhbHJl
YWR5IGluIHRoaXMgY2xhc3MsIGNsaWVudHMgc2hvdWxkbid0IGJlIGNvcHlpbmcgaXQuCi0gICAg
dm9pZCBjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHBh
Z2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAogICAgIC8vIFRo
ZXNlIGFyZSBvbmx5IHZhbGlkIGFmdGVyIHBhZ2UgcmVjdHMgYXJlIGNvbXB1dGVkLgogICAgIHNp
emVfdCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSZWN0cy5zaXplKCk7IH0KICAg
ICBjb25zdCBJbnRSZWN0JiBwYWdlUmVjdChzaXplX3QgcGFnZU51bWJlcikgY29uc3QgeyByZXR1
cm4gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07IH0KICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHBhZ2VSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJlY3RzOyB9CiAKLSAgICBmbG9hdCBj
b21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgRmxvYXRTaXplJiBhdmFpbGFibGVQYXBl
clNpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGNvbXB1dGVBdXRvbWF0aWNTY2FsZUZh
Y3Rvcihjb25zdCBGbG9hdFNpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSk7CiAKICAgICAvLyBFbnRl
ciBwcmludCBtb2RlLCB1cGRhdGluZyBsYXlvdXQgZm9yIG5ldyBwYWdlIHNpemUuCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFwcGx5IG5ldyBw
cmludCBvcHRpb25zIHdpdGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9kZS4KLSAgICB2b2lk
IGJlZ2luKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQgPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGJlZ2luKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQgPSAwKTsKIAogICAgIC8vIEZJ
WE1FOiBlbGltaW5hdGUgd2lkdGggYXJndW1lbnQuCi0gICAgdm9pZCBzcG9vbFBhZ2UoR3JhcGhp
Y3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVtYmVyLCBmbG9hdCB3aWR0aCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVt
YmVyLCBmbG9hdCB3aWR0aCk7CiAKLSAgICB2b2lkIHNwb29sUmVjdChHcmFwaGljc0NvbnRleHQm
IGN0eCwgY29uc3QgSW50UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Bvb2xSZWN0
KEdyYXBoaWNzQ29udGV4dCYgY3R4LCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAvLyBSZXR1cm4g
dG8gc2NyZWVuIG1vZGUuCi0gICAgdm9pZCBlbmQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGVuZCgpOwogCiAgICAgLy8gVXNlZCBieSBsYXlvdXQgdGVzdHMuCi0gICAgc3RhdGljIGludCBw
YWdlTnVtYmVyRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUlu
UGl4ZWxzKTsgLy8gUmV0dXJucyAtMSBpZiBwYWdlIGlzbid0IGZvdW5kLgotICAgIHN0YXRpYyBT
dHJpbmcgcGFnZVByb3BlcnR5KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1l
LCBpbnQgcGFnZU51bWJlcik7Ci0gICAgc3RhdGljIGJvb2wgaXNQYWdlQm94VmlzaWJsZShGcmFt
ZSogZnJhbWUsIGludCBwYWdlTnVtYmVyKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhZ2VTaXplQW5k
TWFyZ2luc0luUGl4ZWxzKEZyYW1lKiBmcmFtZSwgaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90
dG9tLCBpbnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIGludCBudW1iZXJPZlBhZ2VzKEZyYW1l
KiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgaW50IHBhZ2VOdW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqLCBjb25zdCBGbG9hdFNp
emUmIHBhZ2VTaXplSW5QaXhlbHMpOyAvLyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQu
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwYWdlUHJvcGVydHkoRnJhbWUqLCBj
b25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKEZyYW1lKiwgaW50IHBhZ2VOdW1iZXIp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMoRnJhbWUqLCBpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
bWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5M
ZWZ0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgaW50IG51bWJlck9mUGFnZXMoRnJhbWUq
LCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMpOwogICAgIC8vIERyYXcgYWxsIHBh
Z2VzIGludG8gYSBncmFwaGljcyBjb250ZXh0IHdpdGggbGluZXMgd2hpY2ggbWVhbiBwYWdlIGJv
dW5kYXJpZXMuCiAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgZ3JhcGhpY3MgY29udGV4dCBzaG91
bGQgYmUKICAgICAvLyAocGFnZVNpemVJblBpeGVscy5oZWlnaHQoKSArIDEpICogbnVtYmVyLW9m
LXBhZ2VzIC0gMQotICAgIHN0YXRpYyB2b2lkIHNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyhG
cmFtZSosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVs
cyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc3Bvb2xBbGxQYWdlc1dpdGhCb3Vu
ZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6
ZUluUGl4ZWxzKTsKIAogcHJvdGVjdGVkOgogICAgIEZyYW1lKiBtX2ZyYW1lOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3RyYWludHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50
cy5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdDb25zdHJhaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX2xheWVyUG9zaXRpb25BdExhc3RMYXlvdXQob3RoZXIubV9sYXll
clBvc2l0aW9uQXRMYXN0TGF5b3V0KQogICAgIHsgfQogICAgIAotICAgIEZsb2F0UG9pbnQgbGF5
ZXJQb3NpdGlvbkZvclZpZXdwb3J0UmVjdChjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0UmVjdCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uRm9yVmll
d3BvcnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlld3BvcnRSZWN0KSBjb25zdDsKIAogICAgIGNv
bnN0IEZsb2F0UmVjdCYgdmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQ7IH0KICAgICB2b2lkIHNldFZpZXdwb3J0UmVjdEF0
TGFzdExheW91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV92aWV3cG9ydFJlY3RBdExhc3RM
YXlvdXQgPSByZWN0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MSw4ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXByZXNlbnRzUGxhdGZvcm1M
YXllcklEKCkgY29uc3QgeyByZXR1cm4gbV9yZXByZXNlbnRhdGlvbiA9PSBQbGF0Zm9ybUxheWVy
SURSZXByZXNlbnRhdGlvbjsgfQogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHJldGFpblBsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwotICAgIHZvaWQgcmVsZWFzZVBsYXRmb3JtTGF5ZXIo
UGxhdGZvcm1MYXllciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV0YWluUGxhdGZvcm1M
YXllcihQbGF0Zm9ybUxheWVyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWxlYXNlUGxh
dGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKik7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIG1fZ3JhcGhpY3NMYXllcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVDaG9vc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZUNob29zZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTYgKzc4LDE2IEBAIHB1YmxpYzoK
IGNsYXNzIEZpbGVDaG9vc2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY3JlYXRlKEZpbGVDaG9v
c2VyQ2xpZW50KiwgY29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYpOwotICAgIH5GaWxlQ2hvb3Nl
cigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5GaWxlQ2hvb3NlcigpOwogCiAgICAgdm9pZCBpbnZh
bGlkYXRlKCk7CiAKLSAgICB2b2lkIGNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAg
ICB2b2lkIGNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMp
OwogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBhbG1v
c3QgaWRlbnRpY2FsIHRvIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpLiBXZSBzaG91bGQgbWVy
Z2UgdGhpcwogICAgIC8vIGZ1bmN0aW9uIHdpdGggRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkg
YW5kIGhlbmNlIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KLSAgICB2b2lkIGNob29z
ZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlTdHJpbmcsIEljb24qKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNob29zZU1lZGlh
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlT
dHJpbmcsIEljb24qKTsKICNlbmRpZiAgICAKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJv
YmFibHkganVzdCBwYXNzIGZpbGUgcGF0aHMgdGhhdCBjb3VsZCBiZSB2aXJ0dWFsIHBhdGhzIHdp
dGggcHJvcGVyIGRpc3BsYXkgbmFtZXMgcmF0aGVyIHRoYW4gcGFzc2luZyBzdHJ1Y3RzLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmgJKHJldmlzaW9uIDE3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIEdhbWVwYWRQcm92aWRlciB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+R2FtZXBhZFByb3ZpZGVyKCkgeyB9CiAKLSAgICBzdGF0aWMgR2Ft
ZXBhZFByb3ZpZGVyJiBzaGFyZWQoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRQcm92aWRl
cihHYW1lcGFkUHJvdmlkZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFBy
b3ZpZGVyJiBzaGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaGFy
ZWRQcm92aWRlcihHYW1lcGFkUHJvdmlkZXImKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydE1v
bml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgTGVuZ3RoKGZsb2F0IHZhbHVlLCBMZW5ndGhUeXBlLCBib29sIGhhc1F1aXJr
ID0gZmFsc2UpOwogICAgIExlbmd0aChkb3VibGUgdmFsdWUsIExlbmd0aFR5cGUsIGJvb2wgaGFz
UXVpcmsgPSBmYWxzZSk7CiAKLSAgICBleHBsaWNpdCBMZW5ndGgoUGFzc1JlZjxDYWxjdWxhdGlv
blZhbHVlPik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTGVuZ3RoKFBhc3NSZWY8Q2Fs
Y3VsYXRpb25WYWx1ZT4pOwogCiAgICAgTGVuZ3RoKGNvbnN0IExlbmd0aCYpOwogICAgIExlbmd0
aChMZW5ndGgmJik7CkBAIC0xMTcsOCArMTE3LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzQ2Fs
Y3VsYXRlZEVxdWFsKGNvbnN0IExlbmd0aCYpIGNvbnN0OwogICAgIExlbmd0aCBibGVuZE1peGVk
VHlwZXMoY29uc3QgTGVuZ3RoJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0OwogCi0gICAg
dm9pZCByZWYoKSBjb25zdDsKLSAgICB2b2lkIGRlcmVmKCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZWYoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlcmVmKCkg
Y29uc3Q7CiAgICAgCiAgICAgdW5pb24gewogICAgICAgICBpbnQgbV9pbnRWYWx1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgTUlNRVR5cGVSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyBnZXRNSU1F
VHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFN0cmluZyBnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcm
IGV4dGVuc2lvbik7CiAKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0RXh0ZW5zaW9uc0Zv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgc3RhdGljIFN0cmluZyBnZXRQcmVm
ZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgZ2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBzdGF0aWMgU3RyaW5nIGdldE1lZGlhTUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOwogICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBnZXRNZWRpYU1JTUVUeXBlc0ZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbik7CiAKQEAgLTQ2LDExICs0NiwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgYSBtaW1lIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBpbmxpbmUgYXMg
YW4KICAgICAvLyBpbWFnZSAoZS5nLiwgPGltZz4gdGFncykuCi0gICAgc3RhdGljIGJvb2wgaXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBz
dWl0YWJsZSBmb3IgYmVpbmcgbG9hZGVkIGFzIGFuIGltYWdlCiAgICAgLy8gZG9jdW1lbnQgaW4g
YSBmcmFtZS4KLSAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBpc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3Ig
YmVpbmcgZW5jb2RlZC4KICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKQEAgLTYxLDM5ICs2MSwzOSBAQCBw
dWJsaWM6CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBub24taW1hZ2UgbWltZSB0eXBlIGlz
IHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgYXMgYQogICAgIC8vIGRvY3VtZW50IGluIGEgZnJh
bWUuICBJbmNsdWRlcyBzdXBwb3J0ZWQgSmF2YVNjcmlwdCBNSU1FIHR5cGVzLgotICAgIHN0YXRp
YyBib29sIGlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZE5vbkltYWdlTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYg
YSBtaW1lIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCB1c2luZyA8dmlkZW8+IGFu
ZCA8YXVkaW8+Ci0gICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRNZWRpYU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOyAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N1
cHBvcnRlZE1lZGlhTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhlIG1pbWUgdHlwZSBpcyBub3Qgc3VpdGFibGUgZm9yIGJlaW5nIGxv
YWRlZCBhcyBhIHRleHQKICAgICAvLyBkb2N1bWVudCBpbiBhIGZyYW1lLiBPbmx5IHZhbGlkIGZv
ciBtaW1lIHR5cGVzIGJlZ2luaW5nIHdpdGggInRleHQvIi4KICAgICBzdGF0aWMgYm9vbCBpc1Vu
c3VwcG9ydGVkVGV4dE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIGEgbWltZSB0eXBlIGlzIGEgdmFsaWQgSmF2YSBhcHBsZXQgbWltZSB0
eXBlCi0gICAgc3RhdGljIGJvb2wgaXNKYXZhQXBwbGV0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaXNKYXZhQXBwbGV0TUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYg
YSBtaW1lIHR5cGUgaXMgYSBwbHVnaW4gaW1wbGVtZW50ZWQgYnkgdGhlCiAgICAgLy8gYnJvd3Nl
ciAoZS5nLiBhIFF0IFBsdWdpbikuCiAgICAgc3RhdGljIGJvb2wgaXNBcHBsaWNhdGlvblBsdWdp
bk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIGEgbWltZSB0eXBlIGlzIG9uZSBvZiB0aGUgY29tbW9uIFBERi9QUyB0eXBlcy4KLSAgICBz
dGF0aWMgYm9vbCBpc1BERk9yUG9zdFNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzUERGT3JQb3N0U2NyaXB0TUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgc3RhdGljIGJvb2wgaXNQREZNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBh
IG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcgc2hvd24gaW5zaWRlIGEgcGFnZS4KICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSgpLCBp
c1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoKSwgaXNTdXBwb3J0ZWRNZWRpYU1JTUVUeXBlKCkg
cmV0dXJucyB0cnVlCiAgICAgLy8gb3IgaWYgZ2l2ZW4gbWltZSB0eXBlIGJlZ2lucyB3aXRoICJ0
ZXh0LyIgYW5kIGlzVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGUoKSByZXR1cm5zIGZhbHNlLgotICAg
IHN0YXRpYyBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CiAKLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBnZXRTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBIYXNoU2V0PFN0cmlu
Zz4mIGdldFN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKCk7CiAgICAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nPiYgZ2V0U3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlcygpOwogICAgIHN0YXRpYyBI
YXNoU2V0PFN0cmluZz4mIGdldFN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcoKTsK
LSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBnZXRTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBl
cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGdldFN1cHBv
cnRlZE5vbkltYWdlTUlNRVR5cGVzKCk7CiAgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgZ2V0
U3VwcG9ydGVkTWVkaWFNSU1FVHlwZXMoKTsKLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBn
ZXRQREZNSU1FVHlwZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSGFzaFNldDxTdHJp
bmc+JiBnZXRQREZNSU1FVHlwZXMoKTsKICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBnZXRQ
REZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7Ci0gICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYg
Z2V0VW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nPiYgZ2V0VW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKCk7CiAKICAgICBz
dGF0aWMgU3RyaW5nIGdldE5vcm1hbGl6ZWRNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
aAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJl
c3N1cmVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgTWVt
b3J5UHJlc3N1cmVIYW5kbGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgTWVtb3J5UHJlc3N1cmVI
YW5kbGVyJiBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKIAotICAgIHZvaWQgaW5zdGFsbCgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zdGFsbCgpOwogCiAgICAgdm9pZCBzZXRMb3dNZW1v
cnlIYW5kbGVyKExvd01lbW9yeUhhbmRsZXIgaGFuZGxlcikKICAgICB7CkBAIC02NCwxMCArNjQs
MTAgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBDYW4gd2Ug
c2hhcmUgbW9yZSBvZiB0aGlzIHdpdGggT3BlblNvdXJjZT8KLSAgICB2b2lkIGluc3RhbGxNZW1v
cnlSZWxlYXNlQmxvY2sodm9pZCAoXnJlbGVhc2VNZW1vcnlCbG9jaykoKSwgYm9vbCBjbGVhclBy
ZXNzdXJlT25NZW1vcnlSZWxlYXNlID0gdHJ1ZSk7Ci0gICAgdm9pZCBzZXRSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKE1lbW9yeVByZXNzdXJlUmVhc29uKTsKLSAgICB2b2lkIGNsZWFyTWVtb3J5UHJl
c3N1cmUoKTsKLSAgICBib29sIHNob3VsZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc3RhbGxNZW1vcnlSZWxlYXNlQmxvY2sodm9pZCAoXnJl
bGVhc2VNZW1vcnlCbG9jaykoKSwgYm9vbCBjbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlID0g
dHJ1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZWNlaXZlZE1lbW9yeVByZXNzdXJl
KE1lbW9yeVByZXNzdXJlUmVhc29uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyTWVt
b3J5UHJlc3N1cmUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZFdhaXRGb3JNZW1v
cnlDbGVhck1lc3NhZ2UoKTsKICAgICB2b2lkIHJlc3BvbmRUb01lbW9yeVByZXNzdXJlSWZOZWVk
ZWQoKTsKICNlbmRpZgogCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IGJvb2wgc19sb2dnaW5nRW5hYmxlZDsKICAgICB9OwogCi0gICAgc3RhdGljIHZvaWQgcmVsZWFz
ZU1lbW9yeShib29sIGNyaXRpY2FsKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBy
ZWxlYXNlTWVtb3J5KGJvb2wgY3JpdGljYWwpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IHJlbGVhc2VOb25jcml0aWNhbE1lbW9yeSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4IEBAIGVudW0gU2hvdWxk
U2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVQKIAogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250
ZW50IHsKICNpZiAhKFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pKQotICAgIFBhc3RlYm9hcmRXZWJDb250ZW50KCk7Ci0gICAgflBhc3RlYm9hcmRXZWJDb250
ZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZFdlYkNvbnRlbnQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB+UGFzdGVib2FyZFdlYkNvbnRlbnQoKTsKICAgICBib29sIGNhblNtYXJ0
Q29weU9yRGVsZXRlOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFJbldlYkFyY2hpdmVG
b3JtYXQ7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGREZvcm1hdDsKQEAgLTg5
LDggKzg5LDggQEAgc3RydWN0IFBhc3RlYm9hcmRVUkwgewogfTsKIAogc3RydWN0IFBhc3RlYm9h
cmRJbWFnZSB7Ci0gICAgUGFzdGVib2FyZEltYWdlKCk7Ci0gICAgflBhc3RlYm9hcmRJbWFnZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIH5QYXN0ZWJvYXJkSW1hZ2UoKTsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwogI2lmICEo
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpCiAgICAgUGFz
dGVib2FyZFVSTCB1cmw7CkBAIC0xMjksNyArMTI5LDcgQEAgY2xhc3MgUGFzdGVib2FyZCB7CiBw
dWJsaWM6CiAgICAgflBhc3RlYm9hcmQoKTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3Rl
Ym9hcmQ+IGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZVByaXZhdGUoKTsgLy8gVGVtcG9yYXJ5
IHBhc3RlYm9hcmQuIENhbiBwdXQgZGF0YSBvbiB0aGlzIGFuZCB0aGVuIHdyaXRlIHRvIGFub3Ro
ZXIgcGFzdGVib2FyZCB3aXRoIHdyaXRlUGFzdGVib2FyZC4KIAogICAgIGJvb2wgaGFzRGF0YSgp
OwpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JpdGVNYXJrdXAoY29u
c3QgU3RyaW5nJiBtYXJrdXApOwogICAgIGVudW0gU21hcnRSZXBsYWNlT3B0aW9uIHsgQ2FuU21h
cnRSZXBsYWNlLCBDYW5ub3RTbWFydFJlcGxhY2UgfTsKLSAgICB2b2lkIHdyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlvbik7IC8vIEZJWE1FOiBUd28gc2VwYXJh
dGUgZnVuY3Rpb25zIHdvdWxkIGJlIGNsZWFyZXIgdGhhbiBvbmUgZnVuY3Rpb24gd2l0aCBhbiBh
cmd1bWVudC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0
cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlvbik7IC8vIEZJWE1FOiBUd28gc2VwYXJhdGUgZnVuY3Rp
b25zIHdvdWxkIGJlIGNsZWFyZXIgdGhhbiBvbmUgZnVuY3Rpb24gd2l0aCBhbiBhcmd1bWVudC4K
ICAgICB2b2lkIHdyaXRlUGFzdGVib2FyZChjb25zdCBQYXN0ZWJvYXJkJiBzb3VyY2VQYXN0ZWJv
YXJkKTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDE4ICs2OSw0IEBACiAKICNlbmRpZiAvLyBVU0UoRVhQT1JUX01BQ1JPUykK
IAotI2lmIFVTRShFWFBPUlRfTUFDUk9TX0ZPUl9URVNUSU5HKQotCi0jaWYgZGVmaW5lZChXRUJD
T1JFX0lTX0xJTktFRF9JTl9TQU1FX0JJTkFSWSkKLSNkZWZpbmUgV0VCQ09SRV9URVNUSU5HIFdU
Rl9FWFBPUlRfREVDTEFSQVRJT04KLSNlbHNlCi0jZGVmaW5lIFdFQkNPUkVfVEVTVElORyBXVEZf
SU1QT1JUX0RFQ0xBUkFUSU9OCi0jZW5kaWYKLQotI2Vsc2UgLy8gVVNFKEVYUE9SVF9NQUNST1Nf
Rk9SX1RFU1RJTkcpCi0KLSNkZWZpbmUgV0VCQ09SRV9URVNUSU5HCi0KLSNlbmRpZiAvLyBVU0Uo
RVhQT1JUX01BQ1JPU19GT1JfVEVTVElORykKLQogI2VuZGlmIC8vIFBsYXRmb3JtRXhwb3J0TWFj
cm9zX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRpYmlsaXR5
TW9kZSA9IGZhbHNlKTsgLy8gT25seSB1c2VkIG9uIHBsYXRmb3JtcyB0aGF0IG5lZWQgaXQsIGku
ZS4gdGhvc2UgdGhhdCBnZW5lcmF0ZSBLZXlEb3duIGV2ZW50cy4KKyAgICAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSwgYm9vbCBiYWNrd2FyZENv
bXBhdGliaWxpdHlNb2RlID0gZmFsc2UpOyAvLyBPbmx5IHVzZWQgb24gcGxhdGZvcm1zIHRoYXQg
bmVlZCBpdCwgaS5lLiB0aG9zZSB0aGF0IGdlbmVyYXRlIEtleURvd24gZXZlbnRzLgogCiAgICAg
ICAgIC8vIFRleHQgYXMgYXMgZ2VuZXJhdGVkIGJ5IHByb2Nlc3NpbmcgYSB2aXJ0dWFsIGtleSBj
b2RlIHdpdGggYSBrZXlib2FyZCBsYXlvdXQKICAgICAgICAgLy8gKGluIG1vc3QgY2FzZXMsIGp1
c3QgYSBjaGFyYWN0ZXIgY29kZSwgYnV0IHRoZSBsYXlvdXQgY2FuIGVtaXQgc2V2ZXJhbApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJKHJldmlz
aW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwzNiArNTAsMzYgQEAgc3RydWN0IFBhc3RlYm9hcmRX
ZWJDb250ZW50OwogY2xhc3MgUGxhdGZvcm1QYXN0ZWJvYXJkIHsKIHB1YmxpYzoKICAgICAvLyBG
SVhNRTogcHJvYmFibHkgd2UgZG9uJ3QgbmVlZCBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBw
YXN0ZWJvYXJkIG5hbWUgZm9yIGlPUy4KLSAgICBleHBsaWNpdCBQbGF0Zm9ybVBhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGlj
aXQgUGxhdGZvcm1QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogI2lm
IFBMQVRGT1JNKElPUykKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBQbGF0Zm9ybVBhc3RlYm9hcmQoKTsKICNlbmRpZgotICAgIHN0YXRpYyBTdHJpbmcgdW5p
cXVlTmFtZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5pcXVlTmFtZSgp
OwogICAgIAotICAgIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKTsKLSAgICBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlKTsKLSAgICB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4m
IHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgU3RyaW5nIHN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgbG9uZyBjaGFu
Z2VDb3VudCgpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yKCk7Ci0gICAgVVJMIHVybCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgbG9u
ZyBjaGFuZ2VDb3VudCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIHVybCgpOwogCiAgICAgLy8gVGFrZSBvd25lcnNoaXAg
b2YgdGhlIHBhc3RlYm9hcmQsIGFuZCByZXR1cm4gbmV3IGNoYW5nZSBjb3VudC4KLSAgICBsb25n
IGFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwotICAgIGxv
bmcgc2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcyk7CisgICAg
V0VCQ09SRV9FWFBPUlQgbG9uZyBhZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIHNldFR5cGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxs
IHJldHVybiAwIGlmIHBhc3RlYm9hcmQgb3duZXJzaGlwIGhhcyBiZWVuIHRha2VuIGZyb20gdXMu
Ci0gICAgbG9uZyBjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQpOwotICAgIGxvbmcg
c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUpOwotICAgIGxvbmcgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKLSAg
ICBsb25nIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSk7Ci0gICAgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYp
OwotICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJik7Ci0gICAgdm9pZCB3cml0
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmKTsKLSAgICBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlcihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUpOwotICAgIFN0cmluZyByZWFkU3RyaW5nKGludCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgVVJMIHJlYWRVUkwoaW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKLSAgICBpbnQgY291bnQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBsb25nIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgbG9uZyBzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgbG9u
ZyBzZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIFdFQkNPUkVfRVhQT1JUIGxvbmcgc2V0
U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250
ZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1h
Z2UmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiByZWFkQnVmZmVyKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlYWRTdHJpbmcoaW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwg
cmVhZFVSTChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIGludCBjb3VudCgpOwogCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9p
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpc1ZvaWNlLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hT
eW50aGVzaXNWb2ljZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdm9pY2VVUkksIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBpc0Rl
ZmF1bHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2lzVm9pY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wg
aXNEZWZhdWx0KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiBjcmVhdGUoKTsKIAogICAgIGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBjb25zdCB7
IHJldHVybiBtX3ZvaWNlVVJJOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDExICs2NiwxMSBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2l6ZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXIoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckNsaWVudCopOworICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplckNsaWVudCopOwogCiAgICAgLy8gRklYTUU6IFdlIGhhdmUgbXVsdGlwbGUg
dmlydHVhbCBmdW5jdGlvbnMganVzdCBzbyB3ZSBjYW4gc3VwcG9ydCBhIG1vY2sgZm9yIHRlc3Rp
bmcuCiAgICAgLy8gU2VlbXMgd2FzdGVmdWwuIFdvdWxkIGJlIG5pY2UgdG8gZmluZCBhIGJldHRl
ciB3YXkuCi0gICAgdmlydHVhbCB+UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKTsKICAgICAK
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+PiYg
dm9pY2VMaXN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNwZWFrKFBhc3NSZWZQdHI8UGxh
dGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHJldmlzaW9uIDE3
MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTggKzQyLDE4IEBAIGNsYXNzIFJlbW90ZUNvbW1h
bmRMaXN0ZW5lcjsKIAogY2xhc3MgTWVkaWFTZXNzaW9uTWFuYWdlciA6IHByaXZhdGUgUmVtb3Rl
Q29tbWFuZExpc3RlbmVyQ2xpZW50LCBwcml2YXRlIFN5c3RlbVNsZWVwTGlzdGVuZXI6OkNsaWVu
dCwgcHJpdmF0ZSBBdWRpb0hhcmR3YXJlTGlzdGVuZXI6OkNsaWVudCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIE1lZGlhU2Vzc2lvbk1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgTWVkaWFTZXNzaW9uTWFuYWdlciYgc2hhcmVkTWFuYWdlcigpOwogICAg
IHZpcnR1YWwgfk1lZGlhU2Vzc2lvbk1hbmFnZXIoKSB7IH0KIAogICAgIGJvb2wgaGFzKE1lZGlh
U2Vzc2lvbjo6TWVkaWFUeXBlKSBjb25zdDsKICAgICBpbnQgY291bnQoTWVkaWFTZXNzaW9uOjpN
ZWRpYVR5cGUpIGNvbnN0OwogICAgIGJvb2wgYWN0aXZlQXVkaW9TZXNzaW9uUmVxdWlyZWQoKSBj
b25zdDsKIAotICAgIHZvaWQgYmVnaW5JbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpJbnRlcnJ1
cHRpb25UeXBlKTsKLSAgICB2b2lkIGVuZEludGVycnVwdGlvbihNZWRpYVNlc3Npb246OkVuZElu
dGVycnVwdGlvbkZsYWdzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luSW50ZXJydXB0
aW9uKE1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0aW9uVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpFbmRJbnRlcnJ1cHRpb25GbGFncyk7
CiAKLSAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpIGNvbnN0OwotICAg
IHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpIGNv
bnN0OwogICAgIHZvaWQgd2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVDaGFuZ2VkKCk7CiAKICAgICBl
bnVtIFNlc3Npb25SZXN0cmljdGlvbkZsYWdzIHsKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgog
ICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBTZXNzaW9uUmVzdHJpY3Rpb25zOwogICAgIAot
ICAgIHZvaWQgYWRkUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUsIFNlc3Npb25S
ZXN0cmljdGlvbnMpOwotICAgIHZvaWQgcmVtb3ZlUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpN
ZWRpYVR5cGUsIFNlc3Npb25SZXN0cmljdGlvbnMpOwotICAgIFNlc3Npb25SZXN0cmljdGlvbnMg
cmVzdHJpY3Rpb25zKE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFkZFJlc3RyaWN0aW9uKE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlLCBTZXNzaW9uUmVz
dHJpY3Rpb25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlc3RyaWN0aW9uKE1l
ZGlhU2Vzc2lvbjo6TWVkaWFUeXBlLCBTZXNzaW9uUmVzdHJpY3Rpb25zKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTZXNzaW9uUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9ucyhNZWRpYVNlc3Npb246Ok1l
ZGlhVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0UmVzdHJpY3Rpb25zKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKE1lZGlhU2Vzc2lvbiYpOwpAQCAt
OTgsNyArOTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2Vzc2lvblN0YXRlKCk7CiAK
ICAgICAvLyBSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKE1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENv
bW1hbmRUeXBlKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKE1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENv
bW1hbmRUeXBlKSBvdmVycmlkZTsKIAogICAgIC8vIEF1ZGlvSGFyZHdhcmVMaXN0ZW5lckNsaWVu
dAogICAgIHZpcnR1YWwgdm9pZCBhdWRpb0hhcmR3YXJlRGlkQmVjb21lQWN0aXZlKCkgb3ZlcnJp
ZGUgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgY2xhc3Mg
RmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCgpIDogbV94KDApLCBtX3koMCkg
eyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsg
fQotICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBG
bG9hdFBvaW50KGNvbnN0IEludFBvaW50Jik7CiAgICAgZXhwbGljaXQgRmxvYXRQb2ludChjb25z
dCBGbG9hdFNpemUmIHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgp
KSB7IH0KIAogICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50
KCk7IH0KQEAgLTEzMiwxMyArMTMyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBVU0UoQ0cp
Ci0gICAgRmxvYXRQb2ludChjb25zdCBDR1BvaW50Jik7Ci0gICAgb3BlcmF0b3IgQ0dQb2ludCgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQoY29uc3QgQ0dQb2ludCYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykKLSAgICBGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmKTsKLSAgICBvcGVy
YXRvciBOU1BvaW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludChjb25z
dCBOU1BvaW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0
OwogI2VuZGlmCiAKICAgICBGbG9hdFBvaW50IG1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRRdWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNSAr
NzgsMTUgQEAgcHVibGljOgogICAgIC8vIHRoYXQgaXMsIGlmIHR3byBlZGdlcyBhcmUgcGFyYWxs
ZWwgdG8gdGhlIHgtYXhpcyBhbmQgdGhlIG90aGVyIHR3bwogICAgIC8vIGFyZSBwYXJhbGxlbCB0
byB0aGUgeS1heGlzLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZQogICAgIC8vIGNv
cnJlc3BvbmRpbmcgRmxvYXRSZWN0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBib3VuZGluZ0JveCgp
LgotICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0OwogCiAgICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZ2l2
ZW4gcG9pbnQgaXMgaW5zaWRlLCBvciBvbiBhbiBlZGdlIG9yIGNvcm5lciBvZiB0aGlzIHF1YWQu
Ci0gICAgYm9vbCBjb250YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OwogCiAgICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZm91ciBjb3JuZXJzIG9mIG90aGVyIGFyZSBp
bnNpZGUsIG9yIGNvaW5jaWRlbnQgd2l0aCB0aGUgc2lkZXMgb2YgdGhpcyBxdWFkLgogICAgIC8v
IE5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIGNvbnZleCBxdWFkcywgYnV0IHRoYXQgaW5j
bHVkZXMgYWxsIHF1YWRzIHRoYXQgb3JpZ2luYXRlCiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCBy
ZWN0cy4KLSAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25z
dDsKIAogICAgIC8vIFRlc3RzIHdoZXRoZXIgYW55IHBhcnQgb2YgdGhlIHJlY3RhbmdsZSBpbnRl
cnNlY3RzIHdpdGggdGhpcyBxdWFkLgogICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3IgY29udmV4
IHF1YWRzLgpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG1fcDEueSgpICsgbV9wMi55KCkgKyBtX3AzLnkoKSArIG1fcDQueSgpKSAvIDQuMCk7
CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBlbmNs
b3NpbmdCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChib3VuZGluZ0JveCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShz
aXplKSB7IH0KICAgICBGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCkKICAgICAgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpLCBtX3Np
emUoRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KLSAgICBGbG9hdFJlY3QoY29uc3QgSW50
UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7CiAK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKQEAgLTEyNywxMiArMTI3LDEyIEBAIHB1
YmxpYzoKICAgICBGbG9hdFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRmxv
YXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkp
OyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CiAgICAgRmxvYXRQb2ludCBtYXhYTWF4WUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lk
dGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBi
b3R0b21SaWdodAogCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgQ29udGFpbnNNb2RlID0gSW5zaWRlT3JPblN0cm9r
ZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0
UmVjdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgRmxv
YXRSZWN0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiwgQ29udGFpbnNNb2RlID0gSW5zaWRlT3JPblN0cm9rZSkgY29uc3Q7CiAKLSAg
ICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlKGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgRmxvYXRSZWN0
Jik7CiAgICAgdm9pZCB1bml0ZUV2ZW5JZkVtcHR5KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZv
aWQgdW5pdGVJZk5vblplcm8oY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBleHRlbmQoY29u
c3QgRmxvYXRQb2ludCYpOwpAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
dm9pZCBpbmZsYXRlKGZsb2F0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAg
dm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9Ci0gICAgdm9pZCBzY2FsZShmbG9h
dCBzeCwgZmxvYXQgc3kpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoZmxvYXQgc3gs
IGZsb2F0IHN5KTsKIAogICAgIEZsb2F0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNw
b3NlZFNpemUoKSk7IH0KIApAQCAtMTY1LDEzICsxNjUsMTMgQEAgcHVibGljOgogICAgIHZvaWQg
Zml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBj
b25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMpOwogCiAjaWYgVVNFKENH
KQotICAgIEZsb2F0UmVjdChjb25zdCBDR1JlY3QmKTsKLSAgICBvcGVyYXRvciBDR1JlY3QoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QoY29uc3QgQ0dSZWN0Jik7CisgICAg
V0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVU
UllfVFlQRVMpCi0gICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwotICAgIG9wZXJhdG9yIE5T
UmVjdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdChjb25zdCBOU1JlY3Qm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgog
CiAjaWYgVVNFKENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IGNsYXNzIEZsb2F0U2l6ZSB7CiBwdWJsaWM6CiAgICAgRmxvYXRTaXplKCkgOiBtX3dpZHRoKDAp
LCBtX2hlaWdodCgwKSB7IH0KICAgICBGbG9hdFNpemUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KLSAgICBGbG9hdFNpemUo
Y29uc3QgSW50U2l6ZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZShjb25zdCBJbnRT
aXplJik7CiAKICAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lk
dGgsIGRvdWJsZSBoZWlnaHQpOwogCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KIAogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8PSAw
OyB9Ci0gICAgYm9vbCBpc1plcm8oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
WmVybygpIGNvbnN0OwogICAgIGJvb2wgaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpIGNvbnN0Owog
CiAgICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIC8gbV9oZWln
aHQ7IH0KQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICBtX2hlaWdodCA8IG90
aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCi0gICAg
ZmxvYXQgZGlhZ29uYWxMZW5ndGgoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBk
aWFnb25hbExlbmd0aCgpIGNvbnN0OwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdo
dCAqIG1faGVpZ2h0OwpAQCAtMTA5LDEyICsxMDksMTIgQEAgcHVibGljOgogICAgIH0KIAogI2lm
IFVTRShDRykKLSAgICBleHBsaWNpdCBGbG9hdFNpemUoY29uc3QgQ0dTaXplJik7IC8vIGRvbid0
IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Ci0gICAgb3BlcmF0b3IgQ0dTaXpl
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IENH
U2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAg
IFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQotICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgV0VCQ09SRV9FWFBP
UlQgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6ZSAmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1NpemUoKSBjb25zdDsK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShy
ZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDEwIEBAIEdseXBoVG9QYXRoVHJhbnNs
YXRvcjo6R2x5cGhVbmRlcmxpbmVUeXAKIAogY2xhc3MgRm9udCB7CiBwdWJsaWM6Ci0gICAgRm9u
dCgpOwotICAgIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2lu
ZywgZmxvYXQgd29yZFNwYWNpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNw
YWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9u
bHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250
LgotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9u
dFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdN
b2RlID0gQXV0b1Ntb290aGluZyk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhp
cyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCkBA
IC0xMjAsOSArMTIwLDkgQEAgcHVibGljOgogICAgIH5Gb250KCk7CiAKICAgICBGb250KGNvbnN0
IEZvbnQmKTsKLSAgICBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7CiAKLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogCiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbjsgfQpAQCAtMTMzLDEzICsxMzMsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPikgY29uc3Q7CiAKICAgICBlbnVt
IEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNl
RmFsbGJhY2tJZkZvbnROb3RSZWFkeSB9OwotICAgIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZv
bnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhh
c2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
IGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRS
ZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAKLSAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5
cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25z
dCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7
CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0Kiwg
ZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwpAQCAtMjA0LDggKzIw
NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYg
aXNBZnRlckV4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhp
bmcoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOwogCiAgICAg
ZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBoT3Zl
cmZsb3cgfTsKICAgICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CkBA
IC0yNTQsMTEgKzI1NCwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIFVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBz
dGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgc2V0Q29kZVBhdGgoQ29kZVBhdGgpOwogICAgIHN0YXRpYyBDb2RlUGF0aCBjb2Rl
UGF0aCgpOwogICAgIHN0YXRpYyBDb2RlUGF0aCBzX2NvZGVQYXRoOwogCi0gICAgc3RhdGljIHZv
aWQgc2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXMoVHlwZXNldHRpbmdGZWF0dXJlcyk7CiAgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMg
ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50OF90
IHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDE4ICsxMzQsMTggQEAgcHVibGljOgogICAgIHZvaWQgZ2V0VHJhaXRzSW5GYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpOwogCiAgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNo
b3VsZFJldGFpbiA9IFJldGFpbik7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAK
ICAgICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVu
dChGb250U2VsZWN0b3IqKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IGdlbmVyYXRpb24oKTsKLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUo
KTsKIAotICAgIHNpemVfdCBmb250RGF0YUNvdW50KCk7Ci0gICAgc2l6ZV90IGluYWN0aXZlRm9u
dERhdGFDb3VudCgpOwotICAgIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCA9
IElOVF9NQVgpOworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBmb250RGF0YUNvdW50KCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0aXZlRm9udERhdGFDb3VudCgpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCA9IElOVF9N
QVgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmLCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1p
bHlOYW1lKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKTsKICAgICB9CiAKLSAgICB2b2lkIHB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkKCk7CisgICAgdm9pZCBXRUJDT1JFX0VYUE9SVCBwdXJnZUluYWN0
aXZlRm9udERhdGFJZk5lZWRlZCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3Vs
ZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCiAgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CkBAIC0xOTAs
NyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1p
bGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICNlbmRpZgogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7CisgICAgV0VCQ09SRV9FWFBP
UlQgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7CiAKICAgICAvLyBEb24ndCBw
dXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVByZXZlbnRDb3VudDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJ
KHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRHbHlwaHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEzIEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5U2ltcGxlRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7CiAgICAgY29uc3QgRm9udERhdGEqIHByaW1hcnlGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSBjb25zdCB7IHJldHVybiByZWFs
aXplRm9udERhdGFBdChkZXNjcmlwdGlvbiwgMCk7IH0KLSAgICBjb25zdCBGb250RGF0YSogcmVh
bGl6ZUZvbnREYXRhQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQgaW5kZXgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnREYXRhKiByZWFsaXplRm9udERhdGFB
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgRm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogICAgIEZvbnRH
bHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCi0gICAgdm9pZCByZWxlYXNlRm9udERh
dGEoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbGVhc2VGb250RGF0YSgpOwogICAgIAog
ICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxGb250RGF0YT4sIDE+IG1fcmVhbGl6ZWRGb250RGF0
YTsKICAgICBtdXRhYmxlIEdseXBoUGFnZXMgbV9wYWdlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9u
IDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDEwIEBAIHB1YmxpYzoKIAogI2lm
IE9TKERBUldJTikKICNpZiBVU0UoQVBQS0lUKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250
KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhldGlj
Qm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwKKyAgICBXRUJDT1JF
X0VYUE9SVCBGb250UGxhdGZvcm1EYXRhKE5TRm9udCosIGZsb2F0IHNpemUsIGJvb2wgaXNQcmlu
dGVyRm9udCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0
aWNPYmxpcXVlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBGb250T3JpZW50YXRpb24g
PSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKICNlbHNlCi0g
ICAgRm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVy
Rm9udCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNP
YmxpcXVlID0gZmFsc2UsCisgICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShDVEZv
bnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNlLCBib29sIHN5bnRo
ZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsCiAgICAgICAg
ICAgICAgICAgICAgICBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gUmVndWxhcldpZHRoKTsKICNlbmRpZgogCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGlj
OgogICAgIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRo
ZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmll
bnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOwog
I2VuZGlmCiAKLSAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIH5G
b250UGxhdGZvcm1EYXRhKCk7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgSEZPTlQgaGZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmdldCgpIDogMDsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2VUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBUaGUgc3lzdGVtIGZhbGxiYWNrIGZvbnQgaGFzIHNwZWNpYWwgcnVsZXMg
KHNlZSBhYm92ZSkuCiAgICAgYm9vbCBpc1N5c3RlbUZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9pc1N5c3RlbUZhbGxiYWNrOyB9CiAKLSAgICBzdGF0aWMgc2l6ZV90IHRyZWVHbHlwaFBhZ2VD
b3VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzaXplX3QgdHJlZUdseXBoUGFnZUNv
dW50KCk7CiAgICAgc2l6ZV90IHBhZ2VDb3VudCgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAx
NzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NSwxMCArNjUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwg
cDEsIHIxLCBhc3BlY3RSYXRpbykpOwogICAgICAgICB9Ci0gICAgICAgIH5HcmFkaWVudCgpOwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB+R3JhZGllbnQoKTsKIAogICAgICAgICBzdHJ1Y3QgQ29s
b3JTdG9wOwotICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChjb25zdCBDb2xvclN0b3AmKTsKKyAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7
CiAgICAgICAgIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYpOwogCiAgICAg
ICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKQEAgLTE2NSw3ICsxNjUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEdyYWRpZW50KGNvbnN0
IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBw
MSk7CiAgICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CiAKICAgICAg
ICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMyArMjI4LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogI2lmICFQTEFURk9STShJ
T1MpCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqKTsKICNlbHNlCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCosIGJvb2wgc2hvdWxkVXNlQ29udGV4dENvbG9ycyA9IHRydWUpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBi
b29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMgPSB0cnVlKTsKICNlbmRpZgotICAgICAgICB+R3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHQo
KTsKIAotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkg
Y29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3Mo
KSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwpAQCAtMjQy
LDcgKzI0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTdHJva2VT
dHlsZShTdHJva2VTdHlsZSk7CiAgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yKCkgY29uc3Q7CiAg
ICAgICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZSgpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsK
IAogICAgICAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPik7CiAg
ICAgICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdDsKQEAgLTI1NCwyMSArMjU0LDIx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVs
ZSk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICBDb2xvclNwYWNl
IGZpbGxDb2xvclNwYWNlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Rmls
bENvbG9yKGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAKICAgICAgICAgdm9pZCBzZXRGaWxs
UGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKICAgICAgICAgUGF0dGVybiogZmlsbFBhdHRl
cm4oKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldEZpbGxHcmFkaWVudChQYXNzUmVmUHRyPEdy
YWRpZW50Pik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFBh
c3NSZWZQdHI8R3JhZGllbnQ+KTsKICAgICAgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNv
bnN0OwogCiAgICAgICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCk7CiAg
ICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdDsKIAotICAgICAgICB2
b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CiAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFz
KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKICAg
ICAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0OwogCiAgICAgICAgIC8vIE5vcm1h
bGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMg
dGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4KQEAgLTI4MywyMCArMjgzLDIwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAg
ICAgICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCi0gICAgICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24gPSBE
ZWZhdWx0SW1hZ2VPcmllbnRhdGlvbik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24g
PSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbik7CiAKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9v
dGhpbmcgKExDRCBhbnRpYWxpYXNpbmcpLiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUu
CiAgICAgICAgIHZvaWQgc2V0QWxsb3dzRm9udFNtb290aGluZyhib29sKTsKICAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKKyAgICAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpOwogICAgICAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KGJvb2wpOwogI2VuZGlmCiAgICAgICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQo
KSBjb25zdDsKIAotICAgICAgICB2b2lkIHNhdmUoKTsKLSAgICAgICAgdm9pZCByZXN0b3JlKCk7
CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOworICAgICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlc3RvcmUoKTsKIAogICAgICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2ls
bCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgICAgICAvLyBGSVhNRTogLi4uZXhj
ZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwpA
QCAtMzE2LDI0ICszMTYsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAg
IHZvaWQgZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCosIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gZmFsc2UpOwogCi0gICAgICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKTsKICAgICAgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKIAogICAg
ICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAg
ICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKICAgICAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwogICAg
ICAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwogICAgICAg
ICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNl
KTsKIAotICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICAg
ICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7Cisg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBsaW5lV2lkdGgpOwogCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JT
cGFjZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IEltYWdlUGFpbnRpbmdPcHRpb25zKCkpOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSBJbWFnZVBhaW50aW5nT3B0
aW9ucygpKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSBJ
bWFnZVBhaW50aW5nT3B0aW9ucygpKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBD
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0gSW1hZ2VQYWludGluZ09wdGlv
bnMoKSk7CiAKQEAgLTM0NiwxMSArMzQ2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSBJbWFn
ZVBhaW50aW5nT3B0aW9ucygpKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqLCBDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0gSW1hZ2VQYWlu
dGluZ09wdGlvbnMoKSk7CiAKLSAgICAgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICAg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0
OwogCi0gICAgICAgIHZvaWQgY2xpcChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNv
bnN0IEludFJlY3QmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0Jik7CiAKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAt
MzY2LDcgKzM2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKElPUykK
ICAgICAgICAgYm9vbCBlbW9qaURyYXdpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZvaWQgc2V0RW1v
amlEcmF3aW5nRW5hYmxlZChib29sKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRF
bW9qaURyYXdpbmdFbmFibGVkKGJvb2wpOwogI2VuZGlmCiAgICAgICAgIAogI2lmICFQTEFURk9S
TShJT1MpCkBAIC0zNzksNyArMzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
biA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAjZWxzZQotICAgICAgICBmbG9h
dCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAtMSk7CisgICAgICAg
IFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50IGxl
bmd0aCA9IC0xKTsKICNlbmRpZgogICAgICAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CiAgICAgICAg
ICAgICBSb3VuZEFsbFNpZGVzLApAQCAtMzg4LDcgKzM4OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcyk7CiAKICAgICAgICAgRmxvYXRSZWN0IGNv
bXB1dGVMaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpOwotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxz
ZSk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlKTsKICAgICAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cyA9IGZhbHNlKTsKICAgICAgICAgZW51bSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7CiAjaWYg
UExBVEZPUk0oSU9TKQpAQCAtNDAyLDI0ICs0MDIsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBzdGF0aWMgdm9pZCB1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOwogICAg
ICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CiAKLSAgICAgICAgYm9vbCBwYWlu
dGluZ0Rpc2FibGVkKCkgY29uc3Q7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGFpbnRp
bmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQoYm9v
bCk7CiAKLSAgICAgICAgYm9vbCB1cGRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0OworICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgc2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCk7CiAKLSAgICAgICAgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgICAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgICAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lM
YXllcigpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3Q7Ci0gICAgICAg
IHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9y
JiwgQ29sb3JTcGFjZSk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAg
ICAgICAgIC8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBh
bmQgLXdlYmtpdC1ib3gtc2hhZG93LgogICAgICAgICAvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0
bWVudCBvZiByYWRpaSA+IDhweC4KICAgICAgICAgdm9pZCBzZXRMZWdhY3lTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAogICAg
ICAgICBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJiwgQ29sb3JTcGFj
ZSYpIGNvbnN0OwotICAgICAgICB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xlYXJTaGFkb3coKTsKIAogICAgICAgICBib29sIGhhc0JsdXJyZWRTaGFk
b3coKSBjb25zdDsKICNpZiBVU0UoQ0FJUk8pCkBAIC00MzksMTQgKzQzOSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7CiAKLSAgICAgICAg
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZU5vcm1hbCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3Jt
YWwpOwogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25z
dDsKICAgICAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0OwogCiAgICAg
ICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCk7CiAgICAgICAgIGJvb2wgZHJhd0x1
bWluYW5jZU1hc2soKSBjb25zdDsKIAotICAgICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gUlVMRV9FVkVOT0REKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlw
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFJVTEVfRVZFTk9ERCk7CiAKICAgICAgICAgLy8gVGhp
cyBjbGlwIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MK
ICAgICAgICAgLy8gaW1wbGVtZW50YXRpb25zIHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2Fu
dmFzIGRpZmZlcmVudGx5IHNpbmNlCkBAIC00NTQsMTAgKzQ1NCwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgY2FudmFzQ2xpcChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBS
VUxFX0VWRU5PREQpOwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwogCi0gICAg
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CiAgICAgICAgIHZvaWQgcm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKTsKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Ci0gICAg
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKIAogICAgICAgICB2b2lkIHNl
dFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgSW50UmVjdCYpOwogCkBAIC00ODAsNyArNDgw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBw
bGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRoZSBj
b250ZXh0IGNhcGFibGUgb2YKICAgICAgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250
ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgICAgICB2b2lkIGFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpOwogICAgICAgICB2b2lkIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCk7CiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gMTcyODMw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsOSArMjI2LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgR3JhcGhp
Y3NMYXllciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NMYXllcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NMYXllcj4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiwgR3JhcGhpY3NMYXll
ckNsaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NMYXllcj4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiwgR3JhcGhpY3NMYXllckNs
aWVudCYpOwogICAgIAotICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0xheWVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpIHsgfQogCkBAIC0yNDksMTcgKzI0OSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Y29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlsZCBsaXN0IGNoYW5n
ZWQuCi0gICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29u
c3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwogCiAgICAgLy8gQWRkIGNoaWxkIGxheWVycy4g
SWYgdGhlIGNoaWxkIGlzIGFscmVhZHkgcGFyZW50ZWQsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9t
IGl0cyBvbGQgcGFyZW50LgotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50
IGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZyk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
QmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOwotICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBo
aWNzTGF5ZXIqIG5ld0NoaWxkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCBpbmRleCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciosIEdyYXBoaWNz
TGF5ZXIqIHNpYmxpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENo
aWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCk7CiAKLSAgICB2b2lkIHJlbW92ZUFsbENoaWxk
cmVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKIAogICAgIC8vIFRoZSBwYXJlbnQoKSBvZiBh
IG1hc2tMYXllciBpcyBzZXQgdG8gdGhlIGxheWVyIGJlaW5nIG1hc2tlZC4KICAgICBHcmFwaGlj
c0xheWVyKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllcjsgfQpAQCAtMjY5
LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFza0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pc01hc2tMYXllcjsgfQogICAgIAogICAgIC8vIFRoZSBnaXZlbiBsYXllciB3aWxsIHJl
cGxpY2F0ZSB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW47IHRoZSByZXBsaWNhIHJlbmRlcnMg
YmVoaW5kIHRoaXMgbGF5ZXIuCi0gICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVy
KEdyYXBoaWNzTGF5ZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0UmVw
bGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIC8vIFdoZXRoZXIgdGhpcyBsYXll
ciBpcyBiZWluZyByZXBsaWNhdGVkIGJ5IGFub3RoZXIgbGF5ZXIuCiAgICAgYm9vbCBpc1JlcGxp
Y2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllcjsgfQogICAgIC8vIFRoZSBsYXll
ciB0aGF0IHJlcGxpY2F0ZXMgdGhpcyBsYXllciAoaWYgYW55KS4KQEAgLTMwMSw3ICszMDEsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgbGF5ZXIuCiAgICAgY29uc3QgRmxv
YXRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7CiAKICAgICAvLyBUaGUgYm91bmRPcmlnaW4g
YWZmZWN0cyB0aGUgb2Zmc2V0IGF0IHdoaWNoIGNvbnRlbnQgaXMgcmVuZGVyZWQsIGFuZCBzdWJs
YXllcnMgYXJlIHBvc2l0aW9uZWQuCiAgICAgY29uc3QgRmxvYXRQb2ludCYgYm91bmRzT3JpZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHNPcmlnaW47IH0KQEAgLTMzNSw3ICszMzUsNyBAQCBw
dWJsaWM6CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgY292ZXJzIHRoZSBlbnRpcmUgbGF5ZXIuIFVz
ZSBzZXRDb250ZW50c1RvU29saWRDb2xvcigpIGlmIHRoZSBjb2xvciBzaG91bGQKICAgICAvLyBv
bmx5IGNvdmVyIHRoZSBjb250ZW50c1JlY3QuCiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKIAogICAgIC8v
IG9wYXF1ZSBtZWFucyB0aGF0IHdlIGtub3cgdGhlIGxheWVyIGNvbnRlbnRzIGhhdmUgbm8gYWxw
aGEKICAgICBib29sIGNvbnRlbnRzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c09w
YXF1ZTsgfQpAQCAtMzk5LDggKzM5OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGlt
ZU9mZnNldCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYgLyphbmltYXRpb25OYW1lKi8pIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmRB
bmltYXRpb25zKGRvdWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9u
cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhk
b3VibGUgdGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKICAgICAKICAgICAvLyBMYXllciBjb250ZW50cwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KQEAgLTQ1NCwxMCArNDU0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIC8vIHotcG9zaXRpb24gaXMgdGhlIHotZXF1aXZhbGVudCBvZiBwb3NpdGlvbigp
LiBJdCdzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgZmxv
YXQgelBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV96UG9zaXRpb247IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0WlBvc2l0aW9uKGZsb2F0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgc2V0WlBvc2l0aW9uKGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaXN0cmlidXRlT3Bh
Y2l0eShmbG9hdCk7Ci0gICAgdmlydHVhbCBmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxv
YXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgZmxvYXQgYWNjdW11bGF0ZWRPcGFjaXR5
KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgYm9vbCBoYXNGbGF0dGVuZWRQZXJz
cGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFwcmVzZXJ2ZXMzRCgpICYmIG1fY2hp
bGRyZW5UcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKTsgfQpAQCAtNDcxLDcgKzQ3MSw3IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50LmRldmljZVNjYWxlRmFjdG9yKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWQoKSB7IH0KLSAgICB2b2lkIG5vdGVEZXZpY2VPclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRh
bnRzKCk7CiAKICAgICAvLyBTb21lIGNvbXBvc2l0aW5nIHN5c3RlbXMgbWF5IGRvIGludGVybmFs
IGJhdGNoaW5nIHRvIHN5bmNocm9uaXplIGNvbXBvc2l0aW5nIHVwZGF0ZXMKICAgICAvLyB3aXRo
IHVwZGF0ZXMgZHJhd24gaW50byB0aGUgd2luZG93LiBUaGVzZSBtZXRob2RzIGZsdXNoIGludGVy
bmFsIGJhdGNoZWQgc3RhdGUgb24gdGhpcyBsYXllcgpAQCAtNDg4LDcgKzQ4OCw3IEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KExheWVyVHJlZUFzVGV4dEJlaGF2aW9yID0g
TGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3JOb3JtYWwpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIGFu
IGVzdGltYXRlIG9mIHRoZSBiYWNraW5nIHN0b3JlIG1lbW9yeSBjb3N0IChpbiBieXRlcykuIE1h
eSBiZSBpbmNvcnJlY3QgZm9yIHRpbGVkIGxheWVycy4KLSAgICB2aXJ0dWFsIGRvdWJsZSBiYWNr
aW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgZG91YmxlIGJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgY29uc3Q7CiAKICAgICBib29s
IHVzaW5nVGlsZWRCYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ1RpbGVkQmFja2luZzsg
fQogICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25zdCB7IHJldHVy
biAwOyB9CkBAIC01MjQsNyArNTI0LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCBmcm9tIGRlcml2ZWQgY2xhc3MgZGVzdHJ1Y3RvcnMuIFNob3VsZCBj
YWxsIHdpbGxCZURlc3Ryb3llZCgpIG9uIHN1cGVyLgotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVE
ZXN0cm95ZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJv
eWVkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgLy8gVGhpcyBtZXRob2QgaXMg
dXNlZCBieSBwbGF0Zm9ybSBHcmFwaGljc0xheWVyIGNsYXNzZXMgdG8gY2xlYXIgdGhlIGZpbHRl
cnMKQEAgLTU1MSwxMiArNTUxLDEyIEBAIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyKiBy
ZXBsaWNhdGVkTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2F0ZWRMYXllcjsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpIHsg
bV9yZXBsaWNhdGVkTGF5ZXIgPSBsYXllcjsgfQogCi0gICAgZXhwbGljaXQgR3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Jik7CiAKICAgICB2b2lkIGR1bXBQcm9wZXJ0
aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBMYXllclRyZWVBc1RleHRCZWhhdmlvcikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGR1bXBBZGRpdGlvbmFsUHJvcGVydGllcyhUZXh0U3RyZWFt
JiwgaW50IC8qaW5kZW50Ki8sIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yKSBjb25zdCB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImLCBmbG9hdCYgd2lkdGgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBnZXREZWJ1Z0JvcmRlcklu
Zm8oQ29sb3ImLCBmbG9hdCYgd2lkdGgpIGNvbnN0OwogCiAgICAgR3JhcGhpY3NMYXllckNsaWVu
dCYgbV9jbGllbnQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ljb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JY29uLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBA
QCBjbGFzcyBJbnRSZWN0OwogICAgIAogY2xhc3MgSWNvbiA6IHB1YmxpYyBSZWZDb3VudGVkPElj
b24+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY29uPiBjcmVhdGVJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFBhc3NSZWZQdHI8SWNvbj4gY3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMpOwogCi0gICAgfkljb24oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB+SWNvbigpOwogCiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CiAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayBmb3Igbm9uLWlPUyBwb3J0cyBhbmQgcmVtb3Zl
IHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IGNy
ZWF0ZUljb25Gb3JJbWFnZShOYXRpdmVJbWFnZVB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFBhc3NSZWZQdHI8SWNvbj4gY3JlYXRlSWNvbkZvckltYWdlKE5hdGl2ZUltYWdlUHRyKTsK
ICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5JbWFnZSgpOwogICAgIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdl
PiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogPSAwKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFn
ZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0
cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSBpbWFnZSBjb250
YWlucyBvbmx5IHJlc291cmNlcyBmcm9tIGl0cyBvd24gc2VjdXJpdHkgb3JpZ2luLgogICAgIHZp
cnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJl
dHVybiBzaXplKCkuaXNFbXB0eSgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVy
U2l6ZShjb25zdCBGbG9hdFNpemUmKSB7IH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBGbG9hdFNpemUgb3JpZ2luYWxTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgp
OyB9CiAjZW5kaWYKIAotICAgIGJvb2wgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0
RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwogICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIC8qYWxsRGF0YVJlY2VpdmVkKi8p
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfSAvLyBudWxsIHN0cmluZyBpZiB1bmtu
b3duCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE1ICs4NywxNSBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCBoYXNBbHBoYSk7CiAKLSAgICB+
SW1hZ2VCdWZmZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKIAogICAg
IC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQogICAgIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsg
fQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFNj
YWxlQmVoYXZpb3IgPSBTY2FsZWQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwg
U2NhbGVCZWhhdmlvciA9IFNjYWxlZCkgY29uc3Q7CiAgICAgLy8gR2l2ZSBoaW50cyBvbiB0aGUg
ZmFzdGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmUgaWYgaXQg
c3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yCiAgICAgLy8gb3IgcmV0
dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9lc24ndC4gIAogICAgIHN0YXRpYyBCYWNraW5n
U3RvcmVDb3B5IGZhc3RDb3B5SW1hZ2VNb2RlKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0
ZToKIAogICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRv
IHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKICAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdo
ZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwg
Ym9vbCYgc3VjY2Vzcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
LCBib29sJiBzdWNjZXNzKTsKIH07CiAKICNpZiBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCwxNCArMTA0LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBVU0UoQ0cpCi0gICAg
ZXhwbGljaXQgSW50UG9pbnQoY29uc3QgQ0dQb2ludCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxp
Y2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJbnRQb2ludChjb25zdCBDR1BvaW50Jik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgV0VCQ09SRV9FWFBP
UlQgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9T
KQogI2lmIE9TKERBUldJTikgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NH
R0VPTUVUUllfVFlQRVMpCi0gICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgTlNQb2ludCYpOyAv
LyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgIG9wZXJhdG9y
IE5TUG9pbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJbnRQb2ludChj
b25zdCBOU1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxv
c3N5CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlm
CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3
Myw4IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoeCwgeSkpLCBtX3NpemUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CiAKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQot
ICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlz
IGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBz
aW5jZSBpdCdzIGxvc3N5CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSW50UmVjdChjb25z
dCBMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxv
c3N5CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpA
QCAtMTM3LDggKzEzNyw4IEBAIHB1YmxpYzoKICAgICBJbnRQb2ludCBtaW5YTWF4WUNvcm5lcigp
IGNvbnN0IHsgcmV0dXJuIEludFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSAr
IG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKICAgICBJbnRQb2lu
dCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KG1fbG9jYXRpb24ueCgp
ICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAv
LyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKICAgICAKLSAgICBib29sIGludGVyc2VjdHMoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UmVjdCYpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBJbnRSZWN0JikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAKICAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5
IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KICAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5n
IGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBv
ZiAocHgscHkpLgpAQCAtMTQ2LDggKzE0Niw4IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4g
cHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQog
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBj
b250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAotICAgIHZvaWQgaW50ZXJzZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludGVyc2VjdChjb25zdCBJbnRSZWN0Jik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB1bml0ZShjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCB1bml0ZUlmTm9uWmVy
byhjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2b2lkIGluZmxhdGVYKGludCBkeCkKQEAgLTE2MSw3
ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdo
dCgpICsgZHkgKyBkeSk7CiAgICAgfQogICAgIHZvaWQgaW5mbGF0ZShpbnQgZCkgeyBpbmZsYXRl
WChkKTsgaW5mbGF0ZVkoZCk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKICAgICBJbnRTaXplIGRpZmZlcmVuY2VU
b1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50
KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CkBAIC0xODcsMTEgKzE4NywxMSBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogI2lmIFVTRShDRykKLSAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykKLSAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgogCiAgICAgdm9pZCBkdW1w
KFdURjo6UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcg
KzYyLDcgQEAgY2xhc3MgSW50U2l6ZSB7CiBwdWJsaWM6CiAgICAgSW50U2l6ZSgpIDogbV93aWR0
aCgwKSwgbV9oZWlnaHQoMCkgeyB9CiAgICAgSW50U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
IDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9Ci0gICAgZXhwbGljaXQgSW50
U2l6ZShjb25zdCBGbG9hdFNpemUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNl
IGl0J3MgbG9zc3kKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJbnRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQog
ICAgIAogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBpbnQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KQEAgLTEzNywxMyArMTM3LDEzIEBA
IHB1YmxpYzoKICAgICB9CiAKICNpZiBVU0UoQ0cpCi0gICAgZXhwbGljaXQgSW50U2l6ZShjb25z
dCBDR1NpemUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kK
LSAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBJbnRTaXplKGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2lu
Y2UgaXQncyBsb3NzeQorICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKQotICAgIGV4cGxpY2l0IEludFNpemUoY29uc3Qg
TlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQot
ICAgIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IEludFNpemUoY29uc3QgTlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2lu
Y2UgaXQncyBsb3NzeQorICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIExheW91dFJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2xvY2F0aW9u
KGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQogICAgIExheW91dFJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUo
KSkgeyB9Ci0KLSAgICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBk
b24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIAorICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0
IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIExheW91
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIExheW91
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtMTM0LDcgKzEzNCw3IEBA
IHB1YmxpYzoKICAgICBMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJu
IExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKICAgICAK
ICAgICBib29sIGludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgY29udGFpbnMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjaGVj
a3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vu
c2UuCiAgICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBh
IDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KQEAgLTE0Myw3ICsx
NDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAg
ICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGUoY29u
c3QgTGF5b3V0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgTGF5
b3V0UmVjdCYpOwogICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgTGF5b3V0UmVjdCYpOwog
CiAgICAgdm9pZCBpbmZsYXRlWChMYXlvdXRVbml0IGR4KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5
KTsKICAgICB9CiAgICAgdm9pZCBpbmZsYXRlKExheW91dFVuaXQgZCkgeyBpbmZsYXRlWChkKTsg
aW5mbGF0ZVkoZCk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAgICAgdm9pZCBzY2FsZShmbG9hdCB4U2NhbGUsIGZs
b2F0IHlTY2FsZSk7CiAKICAgICBMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJh
bnNwb3NlZFNpemUoKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcg
KzY0MCw3IEBAIHR5cGVkZWYgdm9pZCAoKk1lZGlhRW5naW5lUmVnaXN0ZXIpKE1lZGkKIAogY2xh
c3MgTWVkaWFQbGF5ZXJGYWN0b3J5U3VwcG9ydCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
Y2FsbFJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3Rlcik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgY2FsbFJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3Rlcik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDExICs4NCwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgUGF0aCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgUGF0aCgpOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBQYXRoKCk7CiAjaWYgVVNFKENHKQogICAgICAgICBQYXRoKFJldGFpblB0cjxDR011dGFibGVQ
YXRoUmVmPik7CiAjZW5kaWYKLSAgICAgICAgflBhdGgoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBP
UlQgflBhdGgoKTsKIAogICAgICAgICBQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgUGF0aCYg
b3BlcmF0b3I9KGNvbnN0IFBhdGgmKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICBQcmVmZXJCZXppZXJSb3VuZGVkUmVjdAogICAgICAgICB9Owog
Ci0gICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRTaXplJiByb3VuZGluZ1JhZGlpLCBSb3VuZGVkUmVjdFN0cmF0ZWd5ID0gUHJlZmVyTmF0aXZl
Um91bmRlZFJlY3QpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSwgUm91bmRl
ZFJlY3RTdHJhdGVneSA9IFByZWZlck5hdGl2ZVJvdW5kZWRSZWN0KTsKICAgICAgICAgdm9pZCBh
ZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgUm91bmRlZFJlY3RTdHJhdGVn
eSA9IFByZWZlck5hdGl2ZVJvdW5kZWRSZWN0KTsKICAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVj
dChjb25zdCBSb3VuZGVkUmVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZWdpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZWdpb24uaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMwICszNSwzMCBA
QCBjbGFzcyBSZWdpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6
Ci0gICAgUmVnaW9uKCk7Ci0gICAgUmVnaW9uKGNvbnN0IEludFJlY3QmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWdpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oY29uc3QgSW50UmVj
dCYpOwogCiAgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQog
ICAgIGJvb2wgaXNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5pc1JlY3QoKTsgfQogCi0g
ICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPEludFJlY3Q+IHJlY3RzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHVuaXRlKGNvbnN0IFJlZ2lv
biYpOwotICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYpOwotICAgIHZvaWQgc3VidHJh
Y3QoY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bml0ZShjb25zdCBS
ZWdpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludGVyc2VjdChjb25zdCBSZWdpb24m
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYpOwogCiAg
ICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBxdWVyeSByZWdpb24gaXMgYSBzdWJzZXQgb2YgdGhpcyByZWdpb24uCi0gICAgYm9v
bCBjb250YWlucyhjb25zdCBSZWdpb24mKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGNvbnRhaW5zKGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCiAgICAgYm9vbCBjb250YWlucyhjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBy
ZWdpb24gaW50ZXJzZWN0cyBhbnkgcGFydCBvZiB0aGlzIHJlZ2lvbi4KICAgICBib29sIGludGVy
c2VjdHMoY29uc3QgUmVnaW9uJikgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCB0b3RhbEFyZWEoKSBjb25zdDsKIAog
ICAgIHVuc2lnbmVkIGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5ncmlkU2l6ZSgp
OyB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTaGFwZVNlZ21l
bnRzKGNvbnN0IFZlY3RvcjxpbnQ+JiBzZWdtZW50cykgeyBtX3NoYXBlLnNldFNlZ21lbnRzKHNl
Z21lbnRzKTsgfQogICAgIHZvaWQgc2V0U2hhcGVTcGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNw
YW5zKSB7IG1fc2hhcGUuc2V0U3BhbnMoc3BhbnMpOyB9Ci0gICAgdm9pZCB1cGRhdGVCb3VuZHNG
cm9tU2hhcGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFw
ZSgpOwogCiBwcml2YXRlOgogCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
c3RhdGljIFNoYXBlIGludGVyc2VjdFNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBT
aGFwZSYgc2hhcGUyKTsKICAgICAgICAgc3RhdGljIFNoYXBlIHN1YnRyYWN0U2hhcGVzKGNvbnN0
IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIpOwogCi0gICAgICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEludFNpemUmKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFu
c2xhdGUoY29uc3QgSW50U2l6ZSYpOwogICAgICAgICB2b2lkIHN3YXAoU2hhcGUmKTsKIAogICAg
ICAgICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29u
c3QgU2hhcGUmIHNoYXBlMik7CiAgICAgICAgIAotICAgICAgICBib29sIGlzVmFsaWQoKSBjb25z
dDsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICAg
ICAgLy8gRm9yIGVuY29kaW5nL2RlY29kaW5nIG9ubHkuCiAgICAgICAgIGNvbnN0IFZlY3Rvcjxp
bnQsIDMyPiYgc2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDk2ICs1NSw5
NiBAQCBwdWJsaWM6CiAgICAgLy8gdG8ga2VlcCB0aGUgb3ZlcmFsbCB0aWxlIGNvc3QgbG93Lgog
ICAgIHN0YXRpYyBjb25zdCBpbnQga1RpbGVkTGF5ZXJUaWxlU2l6ZSA9IDUxMjsKIAotICAgIGV4
cGxpY2l0IEdyYXBoaWNzTGF5ZXJDQShHcmFwaGljc0xheWVyQ2xpZW50Jik7Ci0gICAgdmlydHVh
bCB+R3JhcGhpY3NMYXllckNBKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgR3JhcGhp
Y3NMYXllckNBKEdyYXBoaWNzTGF5ZXJDbGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5HcmFwaGljc0xheWVyQ0EoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCkg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVySUQgcHJpbWFyeUxheWVy
SUQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFBsYXRmb3Jt
TGF5ZXJJRCBwcmltYXJ5TGF5ZXJJRCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5TGF5ZXIoKTsgfQogCi0gICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNv
bnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNp
YmxpbmcpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBu
ZXdDaGlsZCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIHNldENo
aWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopIG92ZXJyaWRl
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhp
Y3NMYXllciosIGludCBpbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxp
bmcpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJl
bG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKSBvdmVycmlkZTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIq
IG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UmVwbGljYXRlZExheWVyKEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKSBv
dmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZExh
eWVyKEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRE
cmF3c0NvbnRlbnQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VmlzaWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNE
cmF3aW5nKGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZXRQcmVzZXJ2ZXMzRChib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIG92ZXJyaWRlOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhi
b29sKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBvdmVycmlk
ZTsKIAogICAgIC8vIHJldHVybiB0cnVlIGlmIHdlIHN0YXJ0ZWQgYW4gYW5pbWF0aW9uCi0gICAg
dmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSBvdmVycmlkZTsKIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmLCBTaG91bGRDbGlwVG9MYXll
ciA9IENsaXBUb0xheWVyKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c0NsaXBwaW5nUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxv
YXRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFNob3VsZENs
aXBUb0xheWVyID0gQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIG92ZXJyaWRlOworICAgIAorICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzQ2xpcHBpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIAorICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlv
bnMoKSBvdmVycmlkZTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUs
IGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYXVz
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0
KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKikgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEo
UGxhdGZvcm1MYXllciopIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXJGb3JNZWRpYSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllckZv
ck1lZGlhKCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXll
ciopIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29s
IHVzZXNDb250ZW50c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZW50c0xh
eWVyUHVycG9zZSAhPSBOb0NvbnRlbnRzTGF5ZXI7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
aG93UmVwYWludENvdW50ZXIoYm9vbCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcihib29sKSBvdmVycmlkZTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9y
JiwgZmxvYXQgYm9yZGVyV2lkdGgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpIG92ZXJyaWRlOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xv
ciYsIGZsb2F0IGJvcmRlcldpZHRoKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXN0b21BcHBlYXJhbmNlKEN1c3RvbUFwcGVhcmFuY2UpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXN0b21CZWhhdmlvcihDdXN0b21CZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEN1c3RvbUFwcGVhcmFuY2UoQ3VzdG9tQXBwZWFy
YW5jZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEN1c3Rv
bUJlaGF2aW9yKEN1c3RvbUJlaGF2aW9yKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNldCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7IH0KIApAQCAtMTU4LDUw
ICsxNTgsNTAgQEAgcHVibGljOgogICAgIH07CiAgICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFu
Z2VzKGNvbnN0IENvbW1pdFN0YXRlJiwgY29uc3QgVHJhbnNmb3JtU3RhdGUmLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNl
ID0gRmxvYXRQb2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSBmYWxzZSk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZsdXNo
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHZpc2libGVSZWN0Q2hhbmdlUmVxdWly
ZXNGbHVzaChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KSBjb25zdCBvdmVycmlkZTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgdmlzaWJsZVJlY3RDaGFuZ2VSZXF1aXJlc0Zs
dXNoKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25z
dCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5SW50
ZXJuYWwoZmxvYXQpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZXRPcGFjaXR5SW50ZXJuYWwoZmxvYXQpIG92ZXJyaWRlOwogICAgIAotICAgIGJvb2wgYW5pbWF0
aW9uQ2FuQmVBY2NlbGVyYXRlZChjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1h
dGlvbiopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYW5pbWF0aW9uQ2FuQmVBY2Nl
bGVyYXRlZChjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiopIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0dyYXBoaWNzTGF5ZXJDQSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0
cm95ZWQoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgd2lsbEJl
RGVzdHJveWVkKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQgb3Zl
cnJpZGVzCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckxheW91dFN1YmxheWVyc09m
TGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCBib29sIHBs
YXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZU
aW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY29udGVudHNPcmllbnRhdGlvbigpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVy
KiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKSBvdmVycmlkZTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50
cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNs
aXApIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdC
b3JkZXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsg
fQotICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxh
dGZvcm1DQUxheWVyKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQbGF0Zm9ybUNBTGF5ZXIq
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1l
bnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGUgeyByZXR1cm4gaW5jcmVt
ZW50UmVwYWludENvdW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09wYXF1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZHJhd3NDb250ZW50KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGxh
dGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpIG92ZXJy
aWRlIHsgcmV0dXJuIGxheWVyRGlkRGlzcGxheShsYXllcik7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzU2NhbGVN
dWx0aXBsaWVyRm9yTmV3VGlsZXMoUGxhdGZvcm1DQUxheWVyKikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3VsZEFnZ3Jlc3NpdmVseVJldGFpblRp
bGVzKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJTaG91bGRUZW1wb3JhcmlseVJldGFpblRpbGVDb2hvcnRzKFBsYXRmb3Jt
Q0FMYXllciopIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUNBTGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzKCkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBmbG9hdCBwbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgZmxv
YXQgcGxhdGZvcm1DQUxheWVyQ29udGVudHNTY2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyhQbGF0
Zm9ybUNBTGF5ZXIqKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvdWxkQWdncmVzc2l2ZWx5UmV0YWluVGlsZXMoUGxhdGZv
cm1DQUxheWVyKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBi
b29sIHBsYXRmb3JtQ0FMYXllclNob3VsZFRlbXBvcmFyaWx5UmV0YWluVGlsZUNvaG9ydHMoUGxh
dGZvcm1DQUxheWVyKikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21t
aXR0aW5nQ2hhbmdlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNDb21taXR0aW5nQ2hh
bmdlczsgfQogCi0gICAgdmlydHVhbCBkb3VibGUgYmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGRvdWJsZSBiYWNr
aW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBi
b29sIHNob3VsZFJlcGFpbnRPblNpemVDaGFuZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwYWludE9uU2l6ZUNoYW5nZSgpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBsYXllckRpZERpc3BsYXkoUGxhdGZvcm1DQUxheWVyKik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsYXllckRpZERpc3BsYXkoUGxhdGZvcm1DQUxheWVy
Kik7CiAgICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogICAgIAogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKQEAgLTI3MiwxMCArMjcyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1
cENvbnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKik7CiAgICAgUGxhdGZvcm1DQUxheWVyKiBj
b250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNhdGVkQnlM
YXllcihHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVi
dWdCb3JkZXJJbmZvKENvbG9yJiwgZmxvYXQmIHdpZHRoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcEFkZGl0aW9uYWxQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50LCBMYXllclRyZWVBc1RleHRCZWhhdmlvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGdldERlYnVnQm9yZGVySW5mbyhDb2xvciYsIGZsb2F0JiB3
aWR0aCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGR1
bXBBZGRpdGlvbmFsUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgTGF5ZXJUcmVl
QXNUZXh0QmVoYXZpb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjb21wdXRlUGl4ZWxB
bGlnbm1lbnQoZmxvYXQgY29udGVudHNTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZSwKICAgICAgICAgRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0UG9pbnQz
RCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KSBjb25zdDsKQEAgLTI5
MSw3ICsyOTEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCByZWN1cnNpdmVWaXNpYmxlUmVjdENo
YW5nZVJlcXVpcmVzRmx1c2goY29uc3QgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBjYW5UaHJvdHRsZUxheWVyRmx1c2goKSBjb25zdCBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgY2FuVGhyb3R0bGVMYXllckZsdXNoKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICAvLyBVc2VkIHRvIHRyYWNrIHRoZSBwYXRoIGRvd24gdGhlIHRyZWUg
Zm9yIHJlcGxpY2EgbGF5ZXJzLgogICAgIHN0cnVjdCBSZXBsaWNhU3RhdGUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJGbHVzaFNjaGVkdWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1
c2hTY2hlZHVsZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvTGF5ZXJGbHVzaFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxOSArMzUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTGF5ZXJGbHVzaFNjaGVk
dWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGbHVzaFNjaGVkdWxlcik7CiBw
dWJsaWM6Ci0gICAgTGF5ZXJGbHVzaFNjaGVkdWxlcihMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50
Kik7Ci0gICAgdmlydHVhbCB+TGF5ZXJGbHVzaFNjaGVkdWxlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIExheWVyRmx1c2hTY2hlZHVsZXIoTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCopOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkxheWVyRmx1c2hTY2hlZHVsZXIoKTsKIAotICAgIHZv
aWQgc2NoZWR1bGUoKTsKLSAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNjaGVkdWxlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc3VzcGVuZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7
CiAKICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsg
fQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdmlydHVhbCB2b2lkIGxheWVyRmx1c2hDYWxs
YmFjaygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBsYXllckZsdXNoQ2FsbGJh
Y2soKTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvTGF5ZXJQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJQb29sLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyUG9vbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExheWVyUG9vbCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJQb29sKTsKIHB1YmxpYzoKLSAgICBMYXll
clBvb2woKTsKLSAgICB+TGF5ZXJQb29sKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgTGF5ZXJQb29s
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkxheWVyUG9vbCgpOwogCiAgICAgc3RhdGljIEhhc2hT
ZXQ8TGF5ZXJQb29sKj4mIGFsbExheWVyUG9vbHMoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMu
aAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDEzIEBA
IGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKIAogY2xhc3MgUGxhdGZvcm1DQUZpbHRlcnMgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIHNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0gICAgc3RhdGljIHZvaWQgc2V0QmxlbmRpbmdGaWx0
ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiwgY29uc3QgQmxlbmRNb2RlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dEJsZW5kaW5nRmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciosIGNvbnN0IEJsZW5kTW9kZSk7
CiAgICAgc3RhdGljIGludCBudW1BbmltYXRlZEZpbHRlclByb3BlcnRpZXMoRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlKTsKICAgICBzdGF0aWMgY29uc3QgY2hhciogYW5pbWF0ZWRGaWx0
ZXJQcm9wZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCBpbnQgaW50ZXJu
YWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRp
YyBSZXRhaW5QdHI8TlNWYWx1ZT4gZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24oY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxOU1ZhbHVlPiBmaWx0ZXJWYWx1ZUZvck9wZXJhdGlv
bihjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4
KTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX0NBX0ZJTFRFUlMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZp
c2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIAogICAg
IEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllcklEOyB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBwYXNzZXMgdGhlIGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9y
bUxheWVyIGJlY2F1c2UgUGxhdGZvcm1MYXllcgogICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50
bHkgZm9yIE9iaiBDIGFuZCBDKysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1
YWdlcy4KLSAgICBzdGF0aWMgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIodm9pZCog
cGxhdGZvcm1MYXllcik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtQ0FMYXll
ciogcGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpOwogCiAgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci5nZXQo
KTsgfQogCkBAIC0yNDQsMTQgKzI0NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIC8vIEZ1
bmN0aW9ucyBhbGxvd3MgdXMgdG8gc2hhcmUgaW1wbGVtZW50YXRpb24gYWNyb3NzIFdlYlRpbGVk
TGF5ZXIgYW5kIFdlYkxheWVyCiAgICAgc3RhdGljIFJlcGFpbnRSZWN0TGlzdCBjb2xsZWN0UmVj
dHNUb1BhaW50KENHQ29udGV4dFJlZiwgUGxhdGZvcm1DQUxheWVyKik7Ci0gICAgc3RhdGljIHZv
aWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBQbGF0Zm9ybUNBTGF5ZXIqLCBSZXBh
aW50UmVjdExpc3QmIGRpcnR5UmVjdHMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiwgUGxhdGZvcm1DQUxheWVyKiwgUmVwYWlu
dFJlY3RMaXN0JiBkaXJ0eVJlY3RzKTsKICAgICBzdGF0aWMgdm9pZCBkcmF3UmVwYWludEluZGlj
YXRvcihDR0NvbnRleHRSZWYsIFBsYXRmb3JtQ0FMYXllciosIGludCByZXBhaW50Q291bnQsIENH
Q29sb3JSZWYgY3VzdG9tQmFja2dyb3VuZENvbG9yKTsKICAgICBzdGF0aWMgQ0dSZWN0IGZyYW1l
Rm9yTGF5ZXIoY29uc3QgUGxhdGZvcm1MYXllciopOwogCiAgICAgdm9pZCBtb3ZlVG9MYXllclBv
b2woKTsKIAogcHJvdGVjdGVkOgotICAgIFBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtQ0FM
YXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpOwogCiAgICAgdmly
dHVhbCBMYXllclBvb2wmIGxheWVyUG9vbCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBzZXRIYXNFeHBsaWNpdEJlZ2luVGltZShDQUFuaW1hdGlv
bgogY2xhc3MgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYyBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNB
QW5pbWF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGUoUGxhdGZvcm1B
bmltYXRpb25SZWYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+IGNyZWF0ZShQbGF0Zm9ybUFuaW1hdGlvblJlZik7CiAKICAgICB2aXJ0
dWFsIH5QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMg
YW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5
ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOwogCi0gICAgc3RhdGljIExheWVyVHlwZSBsYXll
clR5cGVGb3JQbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgTGF5ZXJUeXBlIGxheWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXll
ciopOwogCiAgICAgflBsYXRmb3JtQ0FMYXllck1hYygpOwogCkBAIC04OCw3ICs4OCw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRIaWRkZW4oYm9vbCkgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wpIG92ZXJyaWRlOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCkgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNEb3VibGVTaWRlZCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREb3VibGVTaWRlZChib29sKSBvdmVycmlkZTsKQEAgLTExOSw3
ICsxMTksNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdmlydHVh
bCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOwotICAg
IHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0
ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVy
c0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSU9TdXJmYWNlUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTQgQEAg
Y2xhc3MgSU9TdXJmYWNlUG9vbCB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPElP
U3VyZmFjZVBvb2w+OwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIElPU3VyZmFjZVBvb2wmIHNoYXJl
ZFBvb2woKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSU9TdXJmYWNlUG9vbCYgc2hhcmVk
UG9vbCgpOwogCiAgICAgUGFzc1JlZlB0cjxJT1N1cmZhY2U+IHRha2VTdXJmYWNlKEludFNpemUg
c2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKTsKLSAgICB2b2lkIGFkZFN1cmZhY2UoSU9TdXJm
YWNlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRTdXJmYWNlKElPU3VyZmFjZSopOwog
CiAgICAgdm9pZCBkaXNjYXJkQWxsU3VyZmFjZXMoKTsKIAotICAgIHZvaWQgc2V0UG9vbFNpemUo
c2l6ZV90KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBvb2xTaXplKHNpemVfdCk7CiAK
ICAgICB2b2lkIHNob3dQb29sU3RhdGlzdGljcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAkocmV2aXNpb24gMTcy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIyICszNywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElPU3VyZmFjZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPElPU3VyZmFjZT4g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElPU3VyZmFjZT4gY3JlYXRlKEludFNp
emUsIENvbG9yU3BhY2UpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElPU3VyZmFjZT4gY3JlYXRl
RnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90LCBDb2xvclNwYWNlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUGFzc1JlZlB0cjxJT1N1cmZhY2U+IGNyZWF0ZShJbnRTaXplLCBDb2xvclNwYWNl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxJT1N1cmZhY2U+IGNyZWF0
ZUZyb21NYWNoUG9ydChtYWNoX3BvcnRfdCwgQ29sb3JTcGFjZSk7CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENvbG9yU3Bh
Y2UpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENH
SW1hZ2VSZWYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPElPU3VyZmFj
ZT4gY3JlYXRlRnJvbUltYWdlKENHSW1hZ2VSZWYpOwogCiAgICAgc3RhdGljIEludFNpemUgbWF4
aW11bVNpemUoKTsKIAotICAgIG1hY2hfcG9ydF90IGNyZWF0ZU1hY2hQb3J0KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgbWFjaF9wb3J0X3QgY3JlYXRlTWFjaFBvcnQoKSBjb25zdDsKIAog
ICAgIC8vIEFueSBpbWFnZXMgY3JlYXRlZCBmcm9tIGEgc3VyZmFjZSBuZWVkIHRvIGJlIHJlbGVh
c2VkIGJlZm9yZSByZWxlYXNpbmcKICAgICAvLyB0aGUgc3VyZmFjZSwgb3IgYW4gZXhwZW5zaXZl
IEdQVSByZWFkYmFjayBjYW4gcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVh
dGVJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVh
dGVJbWFnZSgpOwogCiAgICAgSU9TdXJmYWNlUmVmIHN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBt
X3N1cmZhY2UuZ2V0KCk7IH0KLSAgICBHcmFwaGljc0NvbnRleHQmIGVuc3VyZUdyYXBoaWNzQ29u
dGV4dCgpOwotICAgIENHQ29udGV4dFJlZiBlbnN1cmVQbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIENHQ29udGV4dFJlZiBlbnN1cmVQbGF0Zm9ybUNvbnRleHQoKTsK
IAogICAgIGVudW0gY2xhc3MgU3VyZmFjZVN0YXRlIHsKICAgICAgICAgVmFsaWQsCkBAIC02Niwx
NyArNjYsMTcgQEAgcHVibGljOgogICAgIGJvb2wgaXNWb2xhdGlsZSgpIGNvbnN0OwogCiAgICAg
Ly8gc2V0SXNWb2xhdGlsZSBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gaU9TIGFuZCBPUyAxMC45IGFu
ZCBhYm92ZS4KLSAgICBTdXJmYWNlU3RhdGUgc2V0SXNWb2xhdGlsZShib29sKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBTdXJmYWNlU3RhdGUgc2V0SXNWb2xhdGlsZShib29sKTsKIAogICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHNpemVfdCB0b3RhbEJ5dGVz
KCkgY29uc3QgeyByZXR1cm4gbV90b3RhbEJ5dGVzOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CiAKLSAgICBib29sIGlzSW5Vc2Uo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzSW5Vc2UoKSBjb25zdDsKIAogICAg
IC8vIFRoZSBncmFwaGljcyBjb250ZXh0IGNhY2hlZCBvbiB0aGUgc3VyZmFjZSBjb3VudHMgYXMg
YSAidXNlciIsIHNvIHRvIGdldAogICAgIC8vIGFuIGFjY3VyYXRlIHJlc3VsdCBmcm9tIGlzSW5V
c2UoKSwgaXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQuCi0gICAgdm9pZCByZWxlYXNlR3JhcGhpY3ND
b250ZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0
KCk7CiAKIHByaXZhdGU6CiAgICAgSU9TdXJmYWNlKEludFNpemUsIENvbG9yU3BhY2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAgdHlwZWRlZiBJbnRSZWN0RXh0ZW50IEZpbHRlck91
dHNldHM7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBGaWx0ZXJPcGVyYXRpb25zKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRmlsdGVyT3BlcmF0aW9ucygpOwogICAgIEZpbHRlck9wZXJhdGlvbnMoY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3RoZXIpIHsgKnRoaXMgPSBvdGhlcjsgfQogICAgIAotICAgIEZpbHRlck9w
ZXJhdGlvbnMmIG9wZXJhdG9yPShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKTsKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
IGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHJldmlzaW9uIDE3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0IDogcHVibGljIE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhcik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2lu
ZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAKICAgICB2b2lkIHJlcGFpbnQoKTsKICAgICB2b2lk
IGxvYWRTdGF0ZUNoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9M
ZWdhY3lUaWxlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTGVnYWN5VGlsZUNhY2hlLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDgg
KzEyNiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkKTsKLSAgICBzdGF0
aWMgdm9pZCBkcmFpbkxheWVyUG9vbCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBkcmFpbkxheWVyUG9vbCgpOwogCiAgICAgLy8gTG9nZ2luZwogICAgIHZvaWQgZHVt
cFRpbGVzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVu
dEZhY3RvcnlJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9y
bUV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoV2ViRXZlbnQgKik7Ci0gICAgc3RhdGljIFBsYXRmb3Jt
V2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoV2ViRXZlbnQgKik7Ci0gICAgc3Rh
dGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBjcmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoV2Vi
RXZlbnQgKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoV2ViRXZlbnQgKik7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFBsYXRmb3JtV2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoV2ViRXZl
bnQgKik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBj
cmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoV2ViRXZlbnQgKik7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICBzdGF0aWMgUGxhdGZvcm1Ub3VjaEV2ZW50IGNyZWF0ZVBsYXRmb3JtVG91
Y2hFdmVudChXZWJFdmVudCAqKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0
aW5nUG9pbnRFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTEgQEAg
Y2xhc3MgRmxvYXRpbmdQb2ludEVudmlyb25tZW50IHsKIHB1YmxpYzoKICAgICBGbG9hdGluZ1Bv
aW50RW52aXJvbm1lbnQoKTsKIAotICAgIHZvaWQgZW5hYmxlRGVub3JtYWxTdXBwb3J0KCk7Ci0g
ICAgdm9pZCBzYXZlTWFpblRocmVhZEVudmlyb25tZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBlbmFibGVEZW5vcm1hbFN1cHBvcnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNh
dmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKICAgICB2b2lkIHByb3BhZ2F0ZU1haW5UaHJlYWRF
bnZpcm9ubWVudCgpOwogCi0gICAgc3RhdGljIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgc2hh
cmVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dCYgc2hhcmVkKCk7CiAKIHByaXZhdGU6CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBISURHYW1lcGFkUHJvdmlkZXIgOiBwdWJsaWMg
R2FtZXBhCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSElER2FtZXBhZFByb3ZpZGVyKTsKICAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPjsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBzaGFyZWQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBzaGFyZWQoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJD
bGllbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3Ry
ZWFtQ2VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrTWVkaWFTdHJlYW1DZW50ZXIuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1vY2tNZWRpYVN0
cmVhbUNlbnRlciBmaW5hbCA6IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNb2NrTWVkaWFTdHJlYW1DZW50ZXIoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCByZWdpc3Rlck1vY2tNZWRpYVN0cmVhbUNlbnRlcigpOwog
CiAgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
YXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0
cmFpbnRzKTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBh
dWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3Ry
YWludHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTMgKzE5MywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIE11bHRpcGFydEZvcm1EYXRhIC8vIGZvciBtdWx0aXBhcnQvZm9ybS1kYXRhCiAgICAg
fTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IHZvaWQqLCBzaXplX3QpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUo
Y29uc3QgQ1N0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUo
Y29uc3QgVmVjdG9yPGNoYXI+Jik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNy
ZWF0ZShjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1R5
cGUgPSBGb3JtVVJMRW5jb2RlZCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNy
ZWF0ZU11bHRpUGFydChjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBE
b2N1bWVudCopOwotICAgIH5Gb3JtRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Gb3JtRGF0
YSgpOwogCiAgICAgLy8gRklYTUU6IEJvdGggdGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gYSBkZWVw
IGNvcHkgb2YgbV9lbGVtZW50cywgYnV0IGRpZmZlciBpbiBoYW5kbGluZyBvZiBvdGhlciBkYXRh
IG1lbWJlcnMuCiAgICAgLy8gSG93IG11Y2ggb2YgdGhhdCBpcyBpbnRlbnRpb25hbD8gV2UgbmVl
ZCBiZXR0ZXIgbmFtZXMgdGhhdCBleHBsYWluIHRoZSBkaWZmZXJlbmNlLgpAQCAtMjExLDEwICsy
MTEsMTAgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFw
cGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsKICAgICB2b2lkIGFwcGVu
ZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBm
YWxzZSk7Ci0gICAgdm9pZCBhcHBlbmRGaWxlUmFuZ2UoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
bG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKLSAgICB2b2lkIGFw
cGVuZEJsb2IoY29uc3QgVVJMJiBibG9iVVJMKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hv
dWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5k
QmxvYihjb25zdCBVUkwmIGJsb2JVUkwpOwogICAgIGNoYXIqIGV4cGFuZERhdGFTdG9yZShzaXpl
X3QpOwogCiAgICAgdm9pZCBmbGF0dGVuKFZlY3RvcjxjaGFyPiYpIGNvbnN0OyAvLyBvbWl0cyBm
aWxlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSFRUUEhlYWRlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIGNs
YXNzIEhUVFBIZWFkZXJNYXAgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcFR5cGU6OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCi0gICAgSFRUUEhlYWRlck1hcCgpOwotICAg
IH5IVFRQSGVhZGVyTWFwKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgSFRUUEhlYWRlck1hcCgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIH5IVFRQSGVhZGVyTWFwKCk7CiAKICAgICAvLyBHZXRzIGEgY29w
eSBvZiB0aGUgZGF0YSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhbm90aGVyIHRocmVhZC4KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gY29weURhdGEo
KSBjb25zdDsKQEAgLTU5LDE1ICs1OSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkg
eyBtX2hlYWRlcnMuY2xlYXIoKTsgfQogCi0gICAgU3RyaW5nIGdldChjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OwotICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdldChjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAotICAgIFN0cmluZyBnZXQoSFRUUEhlYWRlck5hbWUp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXQoSFRUUEhlYWRlck5hbWUpIGNv
bnN0OwogICAgIHZvaWQgc2V0KEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
ICAgICBib29sIGNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lKSBjb25zdDsKICAgICBjb25zdF9pdGVy
YXRvciBmaW5kKEhUVFBIZWFkZXJOYW1lKSBjb25zdDsKLSAgICBib29sIHJlbW92ZShIVFRQSGVh
ZGVyTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZW1vdmUoSFRUUEhlYWRlck5hbWUp
OwogCiAgICAgLy8gSW5zdGVhZCBvZiBwYXNzaW5nIGEgc3RyaW5nIGxpdGVyYWwgdG8gYW55IG9m
IHRoZXNlIGZ1bmN0aW9ucywganVzdCB1c2UgYSBIVFRQSGVhZGVyTmFtZSBpbnN0ZWFkLgogICAg
IHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+IFN0cmluZyBnZXQoY29uc3QgY2hhciAoJilbbGVuZ3Ro
XSkgY29uc3QgPSBkZWxldGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHJldmlzaW9uIDE3MjgzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxMCBAQCBjbGFzcyBTb3VwTmV0d29ya1Nl
c3Npb247CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHN0YXRpYyBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
ckJhc2UgPSBTdHJpbmcoKSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IGNyZWF0ZVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSA9IFN0cmluZygp
KTsKIAotICAgIHN0YXRpYyB2b2lkIHN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CiAK
ICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKFNPVVApCiAgICAg
Ym9vbCBpc1ByaXZhdGVCcm93c2luZ1Nlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2lzUHJpdmF0
ZTsgfQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPik7CiAgICAgLy8gTWF5IGJlIG51bGws
IGluIHdoaWNoIGNhc2UgYSBGb3VuZGF0aW9uIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuCiAgICAg
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3BsYXRm
b3JtU2Vzc2lvbi5nZXQoKTsgfQotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKICNlbGlmIFVTRShT
T1VQKQogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdv
cmtTZXNzaW9uPik7CiAgICAgfk5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VCYXNl
LmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UHJvdGVjdGlvblNwYWNlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMiArNjAsMTIgQEAg
Y2xhc3MgUHJvdGVjdGlvblNwYWNlQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNIYXNoVGFibGVEZWxldGVkVmFsdWU7
IH0KICAgICAKLSAgICBjb25zdCBTdHJpbmcmIGhvc3QoKSBjb25zdDsKLSAgICBpbnQgcG9ydCgp
IGNvbnN0OwotICAgIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZSgpIGNvbnN0
OwotICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZyYgcmVhbG0oKSBj
b25zdDsKLSAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNh
dGlvblNjaGVtZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0cmluZyYgaG9z
dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGludCBwb3J0KCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlKCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgY29uc3QgU3RyaW5nJiByZWFsbSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBy
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lKCkg
Y29uc3Q7CiAgICAgCiAgICAgYm9vbCByZWNlaXZlc0NyZWRlbnRpYWxTZWN1cmVseSgpIGNvbnN0
OwogCkBAIC03NCw4ICs3NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgYSwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBiKTsKIAogcHJv
dGVjdGVkOgotICAgIFByb3RlY3Rpb25TcGFjZUJhc2UoKTsKLSAgICBQcm90ZWN0aW9uU3BhY2VC
YXNlKGNvbnN0IFN0cmluZyYgaG9zdCwgaW50IHBvcnQsIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5
cGUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQcm90ZWN0aW9uU3BhY2VCYXNlKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgUHJvdGVjdGlvblNwYWNlQmFzZShjb25zdCBTdHJpbmcmIGhvc3QsIGludCBw
b3J0LCBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSk7CiAKICAgICAvLyBIYXNoIHRhYmxlIGRl
bGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgY29waWVk
IG9yIGRlc3Ryb3llZC4KICAgICBQcm90ZWN0aW9uU3BhY2VCYXNlKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBtX2lzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKHRydWUpIHsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9Qcm90ZWN0aW9uU3BhY2VD
b2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvUHJvdGVjdGlvblNwYWNlQ29jb2EuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9Qcm90ZWN0aW9uU3BhY2VDb2NvYS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCwyNCArNTAsMjQgQEAgcHVibGljOgogI2lmIFVTRShDRk5FVFdPUksp
CiAgICAgZXhwbGljaXQgUHJvdGVjdGlvblNwYWNlKENGVVJMUHJvdGVjdGlvblNwYWNlUmVmKTsK
ICNlbmRpZgotICAgIGV4cGxpY2l0IFByb3RlY3Rpb25TcGFjZShOU1VSTFByb3RlY3Rpb25TcGFj
ZSAqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBQcm90ZWN0aW9uU3BhY2UoTlNVUkxQ
cm90ZWN0aW9uU3BhY2UgKik7CiAKICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUNvbXBhcmUoY29u
c3QgUHJvdGVjdGlvblNwYWNlJiBhLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIGIpOwogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAK
LSAgICBib29sIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBt
X25zU3BhY2UgJiYgZW5jb2RpbmdSZXF1aXJlc1BsYXRmb3JtRGF0YShtX25zU3BhY2UuZ2V0KCkp
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBlbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9uc1NwYWNlICYmIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURh
dGEobV9uc1NwYWNlLmdldCgpKTsgfQogI2VuZGlmCiAKLSAgICBib29sIHJlY2VpdmVzQ3JlZGVu
dGlhbFNlY3VyZWx5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZWNlaXZlc0Ny
ZWRlbnRpYWxTZWN1cmVseSgpIGNvbnN0OwogCiAjaWYgVVNFKENGTkVUV09SSykKICAgICBDRlVS
TFByb3RlY3Rpb25TcGFjZVJlZiBjZlNwYWNlKCkgY29uc3Q7CiAjZW5kaWYKLSAgICBOU1VSTFBy
b3RlY3Rpb25TcGFjZSAqbnNTcGFjZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE5TVVJM
UHJvdGVjdGlvblNwYWNlICpuc1NwYWNlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICBz
dGF0aWMgYm9vbCBlbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKE5TVVJMUHJvdGVjdGlvblNw
YWNlICopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGVuY29kaW5nUmVxdWlyZXNQ
bGF0Zm9ybURhdGEoTlNVUkxQcm90ZWN0aW9uU3BhY2UgKik7CiAjZW5kaWYKIAogICAgIG11dGFi
bGUgUmV0YWluUHRyPE5TVVJMUHJvdGVjdGlvblNwYWNlPiBtX25zU3BhY2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaAkocmV2aXNp
b24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tM
b29rLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDI1ICs4NiwyNSBAQCBwdWJsaWM6CiAjaWYgVVNF
KENGTkVUV09SSykKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4g
Y3JlYXRlKFJlc291cmNlSGFuZGxlKiwgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlKiwgQ0ZVUkxSZXNwb25zZVJlZik7CiAjZW5kaWYKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNlTG9hZGVyKiwg
TlNVUkxSZXNwb25zZSAqKTsKLSAgICB+UXVpY2tMb29rSGFuZGxlKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0ZShSZXNv
dXJjZUxvYWRlciosIE5TVVJMUmVzcG9uc2UgKik7CisgICAgV0VCQ09SRV9FWFBPUlQgflF1aWNr
TG9va0hhbmRsZSgpOwogCi0gICAgYm9vbCBkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYp
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVm
KTsKICAgICBib29sIGRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZik7Ci0gICAgYm9vbCBkaWRGaW5p
c2hMb2FkaW5nKCk7Ci0gICAgdm9pZCBkaWRGYWlsKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRGYWlsKCk7
CiAKLSAgICBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
TlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSgpOwogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgQ0ZV
UkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKCk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0Q2xpZW50
KFBhc3NSZWZQdHI8UXVpY2tMb29rSGFuZGxlQ2xpZW50PiBjbGllbnQpIHsgbV9jbGllbnQgPSBj
bGllbnQ7IH0KIAotICAgIFN0cmluZyBwcmV2aWV3RmlsZU5hbWUoKSBjb25zdDsKLSAgICBTdHJp
bmcgcHJldmlld1VUSSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwcmV2aWV3
RmlsZU5hbWUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcHJldmlld1VUSSgp
IGNvbnN0OwogICAgIE5TVVJMICpmaXJzdFJlcXVlc3RVUkwoKSBjb25zdCB7IHJldHVybiBtX2Zp
cnN0UmVxdWVzdFVSTC5nZXQoKTsgfQotICAgIE5TVVJMICpwcmV2aWV3UmVxdWVzdFVSTCgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE5TVVJMICpwcmV2aWV3UmVxdWVzdFVSTCgpIGNvbnN0
OwogICAgIFFMUHJldmlld0NvbnZlcnRlciAqY29udmVydGVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b252ZXJ0ZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE3MjgzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw4IEBAIHByaXZhdGU6CiBjbGFzcyBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTsKIHB1YmxpYzoKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcpOwotICAgIH5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvcihTdHJpbmdWaWV3KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+Tm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcigpOwogCiAgICAgb3BlcmF0b3IgVGV4dEJyZWFrSXRlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAg
ICBPbmx5QXBwbGljYXRpb25QbHVnaW5zCiAgICAgfTsKIAotICAgIGJvb2wgc3VwcG9ydHNNaW1l
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0OwogICAgIFN0cmlu
ZyBwbHVnaW5OYW1lRm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CiAg
ICAgU3RyaW5nIHBsdWdpbkZpbGVGb3JNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBj
b25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwx
MiArNDEsMTIgQEAgY2xhc3MgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlciB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiB2b2lkIE1haW5UaHJlYWRGdW5jdGlvbih2b2lkKik7CiAKLSAgICBzdGF0aWMg
UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlciYgc2NoZWR1bGVyKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXImIHNjaGVkdWxlcigpOwogCi0gICAg
dm9pZCBzY2hlZHVsZUNhbGwoTlBQLCBNYWluVGhyZWFkRnVuY3Rpb24qLCB2b2lkKiB1c2VyRGF0
YSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2hlZHVsZUNhbGwoTlBQLCBNYWluVGhyZWFk
RnVuY3Rpb24qLCB2b2lkKiB1c2VyRGF0YSk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyUGx1Z2luKE5Q
UCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUGx1Z2luKE5QUCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZWdpc3RlclBsdWdpbihOUFApOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5yZWdp
c3RlclBsdWdpbihOUFApOwogCiBwcml2YXRlOgogICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgJ
KHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBTY3JvbGxiYXI7
CiBjbGFzcyBIaXRUZXN0TG9jYXRpb24gewogcHVibGljOgogCi0gICAgSGl0VGVzdExvY2F0aW9u
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgSGl0VGVzdExvY2F0aW9uKCk7CiAgICAgSGl0VGVzdExv
Y2F0aW9uKGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKTsKICAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UXVhZCYpOwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFrZSBhIGNv
cHkgdGhlIEhpdFRlc3RMb2NhdGlvbiBpbiBhIG5ldyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4g
b2Zmc2V0IHRvIGludGVybmFsIHBvaW50IGFuZCBhcmVhLgogICAgIEhpdFRlc3RMb2NhdGlvbihj
b25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQpOwogICAgIEhp
dFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKLSAgICB+SGl0VGVzdExvY2F0
aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkhpdFRlc3RMb2NhdGlvbigpOwogICAgIEhpdFRl
c3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpOwogCiAgICAgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDsgfQpAQCAtNjYs
OCArNjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlY3RCYXNlZFRlc3QoKSBjb25zdCB7IHJl
dHVybiBtX2lzUmVjdEJhc2VkOyB9CiAgICAgYm9vbCBpc1JlY3RpbGluZWFyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1JlY3RpbGluZWFyOyB9CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRpbmdCb3g7IH0KLQotICAgIHN0YXRpYyBJbnRSZWN0IHJlY3RGb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJp
Z2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRSZWN0IHJlY3RGb3JQb2ludChj
b25zdCBMYXlvdXRQb2ludCYsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFk
ZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwogICAg
IGludCB0b3BQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gcm91bmRlZFBvaW50KCkueSgpIC0gbV9i
b3VuZGluZ0JveC55KCk7IH0KICAgICBpbnQgcmlnaHRQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZGluZ0JveC5tYXhYKCkgLSByb3VuZGVkUG9pbnQoKS54KCkgLSAxOyB9CiAgICAgaW50
IGJvdHRvbVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94Lm1heFkoKSAtIHJv
dW5kZWRQb2ludCgpLnkoKSAtIDE7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1
YmxpYzoKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwg
dW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0
b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZyk7CiAgICAgZXhwbGljaXQgSGl0VGVzdFJl
c3VsdChjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhp
dFRlc3RSZXN1bHQmKTsKLSAgICB+SGl0VGVzdFJlc3VsdCgpOworICAgIFdFQkNPUkVfRVhQT1JU
IH5IaXRUZXN0UmVzdWx0KCk7CiAgICAgSGl0VGVzdFJlc3VsdCYgb3BlcmF0b3I9KGNvbnN0IEhp
dFRlc3RSZXN1bHQmKTsKIAogICAgIE5vZGUqIGlubmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5uZXJOb2RlLmdldCgpOyB9Ci0gICAgRWxlbWVudCogaW5uZXJFbGVtZW50KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogaW5uZXJFbGVtZW50KCkgY29uc3Q7CiAgICAgTm9k
ZSogaW5uZXJOb25TaGFyZWROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5v
ZGUuZ2V0KCk7IH0KLSAgICBFbGVtZW50KiBpbm5lck5vblNoYXJlZEVsZW1lbnQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBpbm5lck5vblNoYXJlZEVsZW1lbnQoKSBjb25z
dDsKICAgICBFbGVtZW50KiBVUkxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbm5lclVSTEVs
ZW1lbnQuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYmFyLmdldCgpOyB9CiAgICAgYm9vbCBpc092ZXJXaWRnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2lzT3ZlcldpZGdldDsgfQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlIGhpdC10ZXN0ZWQgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBpbm5lck5vZGUg
ZnJhbWUsIHRoZSBmcmFtZSBjb250YWluaW5nIGlubmVyTm9kZS4KICAgICBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbklubmVyTm9kZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludEluSW5u
ZXJOb2RlRnJhbWU7IH0KICAgICBJbnRQb2ludCByb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gcm91bmRlZEludFBvaW50KHBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
KTsgfQotICAgIEZyYW1lKiBpbm5lck5vZGVGcmFtZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIEZyYW1lKiBpbm5lck5vZGVGcmFtZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIGhpdC10ZXN0
ZWQgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBpbm5lciBub2RlLgogICAgIGNvbnN0
IExheW91dFBvaW50JiBsb2NhbFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFBvaW50OyB9
CkBAIC05MiwyNyArOTIsMjcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsYmFyKFNjcm9s
bGJhciopOwogICAgIHZvaWQgc2V0SXNPdmVyV2lkZ2V0KGJvb2wgYikgeyBtX2lzT3ZlcldpZGdl
dCA9IGI7IH0KIAotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSgpIGNvbnN0OwotICAgIGJvb2wgaXNT
ZWxlY3RlZCgpIGNvbnN0OwotICAgIFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlv
biYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lKiB0YXJnZXRGcmFtZSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYpIGNvbnN0Owog
ICAgIFN0cmluZyByZXBsYWNlZFN0cmluZygpIGNvbnN0OwotICAgIFN0cmluZyB0aXRsZShUZXh0
RGlyZWN0aW9uJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRpdGxlKFRleHRE
aXJlY3Rpb24mKSBjb25zdDsKICAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVuY2F0ZWQoVGV4dERp
cmVjdGlvbiYpIGNvbnN0OwotICAgIFN0cmluZyBhbHREaXNwbGF5U3RyaW5nKCkgY29uc3Q7Ci0g
ICAgU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZygpIGNvbnN0OwotICAgIEltYWdlKiBpbWFnZSgp
IGNvbnN0OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KCkgY29uc3Q7Ci0gICAgVVJMIGFic29sdXRl
SW1hZ2VVUkwoKSBjb25zdDsKLSAgICBVUkwgYWJzb2x1dGVQREZVUkwoKSBjb25zdDsKLSAgICBV
UkwgYWJzb2x1dGVNZWRpYVVSTCgpIGNvbnN0OwotICAgIFVSTCBhYnNvbHV0ZUxpbmtVUkwoKSBj
b25zdDsKLSAgICBTdHJpbmcgdGV4dENvbnRlbnQoKSBjb25zdDsKLSAgICBib29sIGlzTGl2ZUxp
bmsoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgYWx0RGlzcGxheVN0cmluZygp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0aXRsZURpc3BsYXlTdHJpbmcoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZSogaW1hZ2UoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IFVSTCBhYnNvbHV0ZUltYWdlVVJMKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIGFi
c29sdXRlUERGVVJMKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIGFic29sdXRlTWVk
aWFVUkwoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBVUkwgYWJzb2x1dGVMaW5rVVJMKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHRDb250ZW50KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc092
ZXJMaW5rKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICB2b2lk
IHRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5KCkgY29uc3Q7CiAgICAgdm9pZCB0b2dnbGVNZWRp
YUxvb3BQbGF5YmFjaygpIGNvbnN0OwotICAgIGJvb2wgbWVkaWFJc0luRnVsbHNjcmVlbigpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgbWVkaWFJc0luRnVsbHNjcmVlbigpIGNvbnN0
OwogICAgIHZvaWQgdG9nZ2xlTWVkaWFGdWxsc2NyZWVuU3RhdGUoKSBjb25zdDsKICAgICB2b2lk
IGVudGVyRnVsbHNjcmVlbkZvclZpZGVvKCkgY29uc3Q7CiAgICAgYm9vbCBtZWRpYUNvbnRyb2xz
RW5hYmxlZCgpIGNvbnN0OwpAQCAtMTIwLDggKzEyMCw4IEBAIHB1YmxpYzoKICAgICBib29sIG1l
ZGlhUGxheWluZygpIGNvbnN0OwogICAgIGJvb2wgbWVkaWFTdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdDsKICAgICB2b2lkIHRvZ2dsZU1lZGlhUGxheVN0YXRlKCkgY29uc3Q7Ci0gICAgYm9vbCBt
ZWRpYUhhc0F1ZGlvKCkgY29uc3Q7Ci0gICAgYm9vbCBtZWRpYUlzVmlkZW8oKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIG1lZGlhSGFzQXVkaW8oKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIG1lZGlhSXNWaWRlbygpIGNvbnN0OwogICAgIGJvb2wgbWVkaWFNdXRlZCgp
IGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlTWVkaWFNdXRlU3RhdGUoKSBjb25zdDsKIApAQCAtMTM0
LDcgKzEzNCw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgaXMg
MCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1fcmVjdEJhc2VkVGVzdFJl
c3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCiAgICAgLy8gc2Vuc2UgYmVjYXVzZSB0aGUgTm9k
ZVNldCBpcyBzZWxkb20gbmVjZXNzYXJ5LCBhbmQgaXQncyBzb21ld2hhdCBleHBlbnNpdmUgdG8g
YWxsb2NhdGUgYW5kIGluaXRpYWxpemUuIFRoaXMgbWV0aG9kIGRvZXMKICAgICAvLyB0aGUgc2Ft
ZSB0aGluZyBhcyBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLCBidXQgaGVyZSB0aGUgcmV0
dXJuIHZhbHVlIGlzIGNvbnN0LgotICAgIGNvbnN0IE5vZGVTZXQmIHJlY3RCYXNlZFRlc3RSZXN1
bHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBOb2RlU2V0JiByZWN0QmFzZWRU
ZXN0UmVzdWx0KCkgY29uc3Q7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5h
dGl2ZXMoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAko
cmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaXNMaW5lQnJlYWso
KTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBk
eSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGFkanVzdFBvc2l0aW9uKGZsb2F0
IGR4LCBmbG9hdCBkeSk7CiAgICAgdm9pZCBhZGp1c3RMb2dpY2FsUG9zaXRpb24oZmxvYXQgZGVs
dGFMb2dpY2FsTGVmdCwgZmxvYXQgZGVsdGFMb2dpY2FsVG9wKQogICAgIHsKICAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbCgpKQpAQCAtMjEyLDExICsyMTIsMTEgQEAgcHVibGljOgogICAgIEZsb2F0
UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBG
bG9hdFJlY3QobV90b3BMZWZ0LngoKSwgbV90b3BMZWZ0LnkoKSwgbV9sb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQoKSkgOiBGbG9hdFJlY3QobV90b3BMZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwg
bV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KICAgICBGbG9hdFJlY3QgZnJhbWVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KHRvcExlZnQoKSwgc2l6ZSgpKTsgfQogCi0g
ICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBl
KSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgbGluZUhlaWdodCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
IGJhc2VsaW5lVHlwZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBMYXlvdXRV
bml0IGxpbmVIZWlnaHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7CiAKICAgICB1
bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmJpZGlF
bWJlZGRpbmdMZXZlbCgpOyB9CiAgICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBs
ZXZlbCkgeyBtX2JpdGZpZWxkcy5zZXRCaWRpRW1iZWRkaW5nTGV2ZWwobGV2ZWwpOyB9CkBAIC0y
MzAsMTMgKzIzMCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9iaXRmaWVsZHMuZGlydHkoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBtYXJrRGlydHkoYm9v
bCBkaXJ0eSA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0RGlydHkoZGlydHkpOyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZGlydHlMaW5lQm94ZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZGlydHlMaW5lQm94ZXMoKTsKICAgICAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tF
ZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGlu
dCBlbGxpcHNpc1dpZHRoKSBjb25zdDsKICAgICAvLyB2aXNpYmxlTGVmdEVkZ2UsIHZpc2libGVS
aWdodEVkZ2UgYXJlIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICB2aXJ0
dWFsIGZsb2F0IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGZsb2F0IHZpc2libGVMZWZ0RWRn
ZSwgZmxvYXQgdmlzaWJsZVJpZ2h0RWRnZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgZmxvYXQgJnRy
dW5jYXRlZFdpZHRoLCBib29sJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBmbG9hdCBw
bGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBmbG9hdCB2aXNpYmxlTGVmdEVkZ2UsIGZsb2F0IHZp
c2libGVSaWdodEVkZ2UsIGZsb2F0IGVsbGlwc2lzV2lkdGgsIGZsb2F0ICZ0cnVuY2F0ZWRXaWR0
aCwgYm9vbCYpOwogCiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FC
TEVECiAgICAgdm9pZCBzZXRIYXNCYWRQYXJlbnQoKTsK
</data>
<flag name="review"
          id="261631"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>