<?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>6450</bug_id>
          
          <creation_ts>2006-01-09 06:58:13 -0800</creation_ts>
          <short_desc>rename KHTMLPart to Frame (and KWQKHTMLPart to MacFrame for now)</short_desc>
          <delta_ts>2006-01-09 17:36:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28047</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-09 06:58:13 -0800</bug_when>
    <thetext>As proposed, I renamed KHTMLPart to Frame. For now, I named the KQW-specific subclass MacFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28048</commentid>
    <comment_count>1</comment_count>
      <attachid>5569</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-09 06:59:56 -0800</bug_when>
    <thetext>Created attachment 5569
patch to do the rename</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28049</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-09 07:01:07 -0800</bug_when>
    <thetext>I did this change by repeatedly applying Xcode&apos;s project-wide search and replace in various ways until it 
built (and using svn move to effect the file renamings).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28058</commentid>
    <comment_count>3</comment_count>
      <attachid>5569</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-09 09:01:08 -0800</bug_when>
    <thetext>Comment on attachment 5569
patch to do the rename

Lets do it! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28081</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-09 17:36:55 -0800</bug_when>
    <thetext>This has been landed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5569</attachid>
            <date>2006-01-09 06:59:56 -0800</date>
            <delta_ts>2006-01-09 09:01:08 -0800</delta_ts>
            <desc>patch to do the rename</desc>
            <filename>part-rename.patch.txt</filename>
            <type>text/plain</type>
            <size>862276</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvRnJhbWUuaAkocmV2aXNp
b24gMTE5NDYpCisrKyBraHRtbC9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBAIGNsYXNzIEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb247CiBjbGFzcyBLSlNQcm94eUltcGw7
CiBjbGFzcyBLSFRNTFZpZXc7CiBjbGFzcyBLSFRNTFNldHRpbmdzOwotY2xhc3MgS0phdmFBcHBs
ZXRDb250ZXh0OwogCiBuYW1lc3BhY2UgRE9NCiB7CkBAIC0xMDIsNDcgKzEwMSw3IEBAIG5hbWVz
cGFjZSBLUGFydHMKICAgY2xhc3MgUGFydE1hbmFnZXI7CiB9OwogCi0vKioKLSAqIFRoaXMgY2xh
c3MgaXMga2h0bWwncyBtYWluIGNsYXNzLiBJdCBmZWF0dXJlcyBhbiBhbG1vc3QgY29tcGxldGUK
LSAqIHdlYiBicm93c2VyLCBhbmQgaHRtbCByZW5kZXJlci4KLSAqCi0gKiBUaGUgZWFzaWVzdCB3
YXkgdG8gdXNlIHRoaXMgY2xhc3MgKGlmIHlvdSBqdXN0IHdhbnQgdG8gZGlzcGxheSBhbiBIVE1M
Ci0gKiBwYWdlIGF0IHNvbWUgVVJMKSBpcyB0aGUgZm9sbG93aW5nOgotICoKLSAqIDxwcmU+Ci0g
KiBLVVJMIHVybCA9ICJodHRwOi8vd3d3LmtkZS5vcmciOwotICogS0hUTUxQYXJ0ICp3ID0gbmV3
IEtIVE1MUGFydCgpOwotICogdy0+b3BlblVSTCh1cmwpOwotICogdy0+dmlldygpLT5yZXNpemUo
NTAwLCA0MDApOwotICogdy0+c2hvdygpOwotICogPC9wcmU+Ci0gKgotICogQnkgZGVmYXVsdCBK
YXZhIGFuZCBKYXZhU2NyaXB0IHN1cHBvcnQgYXJlIGRpc2FibGVkLiBZb3UgY2FuIGVuYWJsZSB0
aGVtIGJ5Ci0gKiB1c2luZyB0aGUgQHJlZiBzZXRKYXZhRW5hYmxlZCgpIGFuZCBAcmVmIHNldEpT
Y3JpcHRFbmFibGVkKCkgbWV0aG9kcy4KLSAqCi0gKiBTb21lIGFwcHMgd2FudCB0byB3cml0ZSB0
aGVpciBIVE1MIGNvZGUgZGlyZWN0bHkgaW50byB0aGUgd2lkZ2V0IGluc3RlYWQgb2YKLSAqIGl0
IG9wZW5pbmcgYW4gdXJsLiBZb3UgY2FuIGFsc28gZG8gdGhhdCBpbiB0aGUgZm9sbG93aW5nIHdh
eToKLSAqCi0gKiA8cHJlPgotICogUVN0cmluZyBteUhUTUxDb2RlID0gLi4uOwotICogS0hUTUxQ
YXJ0ICp3ID0gbmV3IEtIVE1MUGFydCgpOwotICogdy0+YmVnaW4oKTsKLSAqIHctPndyaXRlKG15
SFRNTENvZGUpOwotICogLi4uCi0gKiB3LT5lbmQoKTsKLSAqIDwvcHJlPgotICoKLSAqIFlvdSBj
YW4gZG8gYXMgbWFueSBjYWxscyB0byB3cml0ZSBhcyB5b3Ugd2FudC4gQnV0IHRoZXJlIGFyZSB0
d28KLSAqIEByZWYgd3JpdGUoKSBtZXRob2RzLCBvbmUgYWNjZXB0aW5nIGEgQHJlZiBRU3RyaW5n
IG9uZSBhY2NlcHRpbmcgYQotICogQHAgY2hhciBAcCAqIGFyZ3VtZW50LiBZb3Ugc2hvdWxkIHVz
ZSBvbmUgb3IgdGhlIG90aGVyCi0gKiAoYnV0IG5vdCBib3RoKSBzaW5jZSB0aGUgbWV0aG9kIHVz
aW5nCi0gKiB0aGUgQHAgY2hhciBAcCAqIGFyZ3VtZW50IGRvZXMgYW4gYWRkaXRpb25hbCBkZWNv
ZGluZyBzdGVwIHRvIGNvbnZlcnQgdGhlCi0gKiB3cml0dGVuIGRhdGEgdG8gVW5pY29kZS4KLSAq
Ci0gKiBAc2hvcnQgSFRNTCBCcm93c2VyIFdpZGdldAotICogQGF1dGhvciBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQotICogKi8KLWNsYXNzIEtIVE1MUGFydCA6IHB1YmxpYyBLUGFydHM6OlJl
YWRPbmx5UGFydAorY2xhc3MgRnJhbWUgOiBwdWJsaWMgS1BhcnRzOjpSZWFkT25seVBhcnQKIHsK
ICAgUV9PQkpFQ1QKICAgZnJpZW5kIGNsYXNzIEtIVE1MVmlldzsKQEAgLTE4MiwyNSArMTQxLDEz
IEBAIGNsYXNzIEtIVE1MUGFydCA6IHB1YmxpYyBLUGFydHM6OlJlYWRPbmwKIHB1YmxpYzoKICAg
ZW51bSB7IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gSU5UX01JTiB9OwogCi0g
IC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEtIVE1MUGFydC4KLSAgICoKLSAgICogS0hUTUwg
YmFzaWNhbGx5IGNvbnNpc3RzIG9mIHR3byBvYmplY3RzOiBUaGUgS0hUTUxQYXJ0IGl0c2VsZiwK
LSAgICogaG9sZGluZyB0aGUgZG9jdW1lbnQgZGF0YSAoRE9NIGRvY3VtZW50KSwgYW5kIHRoZSBA
cmVmIEtIVE1MVmlldywKLSAgICogZGVyaXZlZCBmcm9tIEByZWYgUVNjcm9sbFZpZXcsIGluIHdo
aWNoIHRoZSBkb2N1bWVudCBjb250ZW50IGlzCi0gICAqIHJlbmRlcmVkIGluLiBZb3UgY2FuIHNw
ZWNpZnkgdHdvIGRpZmZlcmVudCBwYXJlbnQgb2JqZWN0cyBmb3IgYQotICAgKiBLSFRNTFBhcnQs
IG9uZSBwYXJlbnQgZm9yIHRoZSBLSFRNTFBhcnQgZG9jdW1lbnQgYW5kIG9uIHBhcmVudAotICAg
KiBmb3IgdGhlIEByZWYgS0hUTUxWaWV3LiBJZiB0aGUgc2Vjb25kIEBwIHBhcmVudCBhcmd1bWVu
dCBpcyAwTCwgdGhlbgotICAgKiBAcCBwYXJlbnRXaWRnZXQgaXMgdXNlZCBhcyBwYXJlbnQgZm9y
IGJvdGggb2JqZWN0cywgdGhlIHBhcnQgYW5kCi0gICAqIHRoZSB2aWV3LgotICAgKi8KLSAgS0hU
TUxQYXJ0KFFXaWRnZXQgKnBhcmVudFdpZGdldCA9IDAsIGNvbnN0IGNoYXIgKndpZGdldG5hbWUg
PSAwLCBRT2JqZWN0ICpwYXJlbnQgPSAwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7Ci0gIEtIVE1M
UGFydChLSFRNTFZpZXcgKnZpZXcsIFFPYmplY3QgKnBhcmVudCA9IDAsIGNvbnN0IGNoYXIgKm5h
bWUgPSAwKTsKKyAgRnJhbWUoUVdpZGdldCAqcGFyZW50V2lkZ2V0ID0gMCwgY29uc3QgY2hhciAq
d2lkZ2V0bmFtZSA9IDAsIFFPYmplY3QgKnBhcmVudCA9IDAsIGNvbnN0IGNoYXIgKm5hbWUgPSAw
KTsKKyAgRnJhbWUoS0hUTUxWaWV3ICp2aWV3LCBRT2JqZWN0ICpwYXJlbnQgPSAwLCBjb25zdCBj
aGFyICpuYW1lID0gMCk7CiAKICAgLyoqCiAgICAqIERlc3RydWN0b3IuCiAgICAqLwotICB2aXJ0
dWFsIH5LSFRNTFBhcnQoKTsKKyAgdmlydHVhbCB+RnJhbWUoKTsKIAogICAvKioKICAgICogT3Bl
bnMgdGhlIHNwZWNpZmllZCBVUkwgQHAgdXJsLgpAQCAtMjk0LDE3ICsyNDEsNiBAQCBwdWJsaWM6
CiAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdDsKIAogICAvKioKLSAgICogUmV0dXJucyB0aGUg
amF2YSBjb250ZXh0IG9mIHRoZSBhcHBsZXRzLiBJZiBubyBhcHBsZXQgZXhpc3RzLCAwIGlzIHJl
dHVybmVkLgotICAgKi8KLSAgS0phdmFBcHBsZXRDb250ZXh0ICpqYXZhQ29udGV4dCgpOwotCi0g
IC8qKgotICAgKiBSZXR1cm5zIHRoZSBqYXZhIGNvbnRleHQgb2YgdGhlIGFwcGxldHMuIElmIG5v
IGNvbnRleHQgZXhpc3RzIHlldCwgYSBuZXcgb25lIGlzCi0gICAqIGNyZWF0ZWQuCi0gICAqLwot
ICBLSmF2YUFwcGxldENvbnRleHQgKmNyZWF0ZUphdmFDb250ZXh0KCk7Ci0KLSAgLyoqCiAgICAq
IEVuYWJsZXMgb3IgZGlzYWJsZXMgcGx1Z2lucyB2aWEsIGRlZmF1bHQgaXMgZW5hYmxlZAogICAg
Ki8KICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZCggYm9vbCBlbmFibGUgKTsKQEAgLTU3Myw3ICs1
MDksNyBAQCBwdWJsaWM6CiAgIC8qKgogICAgKiBTZXRzIHRoZSBncmFudWxhcml0eSBvZiB0aGUg
c2VsZWN0aW9uIChjaGFyYWN0ZXIsIHdvcmQsIGxpbmUsIHBhcmFncmFwaCkuCiAgICAqLwotICB2
b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoa2h0bWw6OkVUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0OworICB2b2lkIHNldFNlbGVjdGlvbkdyYW51bGFyaXR5
KGtodG1sOjpFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KSBjb25zdDsKIAogICAvKioKICAg
ICogUmV0dXJucyB0aGUgZHJhZyBjYXJldCBvZiB0aGUgSFRNTC4KQEAgLTc0NSwxMiArNjgxLDEx
IEBAIHB1YmxpYzoKICAgY29uc3QgS0hUTUxTZXR0aW5ncyAqc2V0dGluZ3MoKSBjb25zdDsKIAog
ICAvKioKLSAgICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBLSFRNTFBhcnQgaWYg
dGhlIHBhcnQgaXMgYSBmcmFtZQotICAgKiBpbiBhbiBIVE1MIGZyYW1lc2V0LgorICAgKiBSZXR1
cm5zIGEgcG9pbnRlciB0byB0aGUgcGFyZW50IEZyYW1lLCBpZiBhbnkuCiAgICAqCiAgICAqICBS
ZXR1cm5zIDBMIG90aGVyd2lzZS4KICAgICovCi0gIEtIVE1MUGFydCAqcGFyZW50UGFydCgpIGNv
bnN0OworICBGcmFtZSAqcGFyZW50RnJhbWUoKSBjb25zdDsKIAogICAvKioKICAgICogUmV0dXJu
cyBhIGxpc3Qgb2YgbmFtZXMgb2YgYWxsIGZyYW1lIChpbmNsdWRpbmcgaWZyYW1lKSBvYmplY3Rz
IG9mCkBAIC03NjEsMTIgKzY5NiwxMiBAQCBwdWJsaWM6CiAKICAgUVB0ckxpc3Q8S1BhcnRzOjpS
ZWFkT25seVBhcnQ+IGZyYW1lcygpIGNvbnN0OwogCi0gIEtIVE1MUGFydCAqY2hpbGRGcmFtZU5h
bWVkKGNvbnN0IFFTdHJpbmcgJm5hbWUpIGNvbnN0OworICBGcmFtZSAqY2hpbGRGcmFtZU5hbWVk
KGNvbnN0IFFTdHJpbmcgJm5hbWUpIGNvbnN0OwogCiAgIC8qKgogICAgKiBGaW5kcyBhIGZyYW1l
IGJ5IG5hbWUuIFJldHVybnMgMEwgaWYgZnJhbWUgY2FuJ3QgYmUgZm91bmQuCiAgICAqLwotICBL
SFRNTFBhcnQgKmZpbmRGcmFtZSggY29uc3QgUVN0cmluZyAmZiApOworICBGcmFtZSAqZmluZEZy
YW1lKCBjb25zdCBRU3RyaW5nICZmICk7CiAKICAgLyoqCiAgICAqIFJldHVybiB0aGUgY3VycmVu
dCBmcmFtZSAodGhlIG9uZSB0aGF0IGhhcyBmb2N1cykKQEAgLTg0Nyw3ICs3ODIsNyBAQCBwdWJs
aWM6CiAgIGludCB0b3BMZXZlbEZyYW1lQ291bnQoKTsKIAogICAvLyBFZGl0aW5nIG9wZXJhdGlv
bnMuCi0gIC8vIE5vdCBjbGVhciBpZiB0aGVzZSB3aWxsIGJlIHdhbnRlZCBpbiBLSFRNTFBhcnQg
YnkgS0RFLAorICAvLyBOb3QgY2xlYXIgaWYgdGhlc2Ugd2lsbCBiZSB3YW50ZWQgaW4gRnJhbWUg
YnkgS0RFLAogICAvLyBidXQgZm9yIG5vdyB0aGVzZSBicmlkZ2Ugc28gd2UgZG9uJ3QgaGF2ZSB0
byBwZXBwZXIgdGhlCiAgIC8vIEtIVE1MIGNvZGUgd2l0aCBXZWJDb3JlLXNwZWNpZmljIHN0dWZm
LgogICBlbnVtIFRyaVN0YXRlIHsgZmFsc2VUcmlTdGF0ZSwgdHJ1ZVRyaVN0YXRlLCBtaXhlZFRy
aVN0YXRlIH07CkBAIC0xMTg5LDggKzExMjQsOCBAQCBwcml2YXRlOgogCiAgcHVibGljOgogICBL
SlNQcm94eUltcGwgKmpTY3JpcHQoKTsKLSAgS0hUTUxQYXJ0ICpvcGVuZXIoKTsKLSAgdm9pZCBz
ZXRPcGVuZXIoS0hUTUxQYXJ0ICpfb3BlbmVyKTsKKyAgRnJhbWUgKm9wZW5lcigpOworICB2b2lk
IHNldE9wZW5lcihGcmFtZSAqX29wZW5lcik7CiAgIGJvb2wgb3BlbmVkQnlKUygpOwogICB2b2lk
IHNldE9wZW5lZEJ5SlMoYm9vbCBfb3BlbmVkQnlKUyk7CiAgcHJpdmF0ZToKQEAgLTEyMjMsNyAr
MTE1OCw3IEBAIHByaXZhdGU6CiAgIGZyaWVuZCBjbGFzcyBraHRtbDo6U2VsZWN0aW9uQ29udHJv
bGxlcjsKIAogcHVibGljOiAgCi0gIGZyaWVuZCBjbGFzcyBLV1FLSFRNTFBhcnQ7CisgIGZyaWVu
ZCBjbGFzcyBNYWNGcmFtZTsKIAogICB2b2lkIGNvbXBsZXRlZCgpOwogICB2b2lkIGNvbXBsZXRl
ZChib29sKTsKQEAgLTEyMzYsNiArMTE3MSw0IEBAIHB1YmxpYzogIAogICBpbnQgZnJhbWVDb3Vu
dDsKIH07CiAKLSNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIKLQogI2VuZGlmCkluZGV4OiBraHRt
bC9lZGl0aW5nL3RleHRfZ3JhbnVsYXJpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5n
L3RleHRfZ3JhbnVsYXJpdHkuaAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9lZGl0aW5nL3Rl
eHRfZ3JhbnVsYXJpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogbmFtZXNw
YWNlIGtodG1sIHsKIAogLy8gRklYTUU6IFRoaXMgcmVhbGx5IHNob3VsZCBiZSBicm9rZW4gdXAg
aW50byBtb3JlIHRoYW4gb25lIGNvbmNlcHQuCi0vLyBLSFRNTFBhcnQgZG9lc24ndCBuZWVlZCB0
aGUgMyBib3VuZGFyaWVzIGluIHRoaXMgZW51bS4KKy8vIEZyYW1lIGRvZXNuJ3QgbmVlZWQgdGhl
IDMgYm91bmRhcmllcyBpbiB0aGlzIGVudW0uCiBlbnVtIEVUZXh0R3JhbnVsYXJpdHkgeyBDSEFS
QUNURVIsIFdPUkQsIExJTkUsIFBBUkFHUkFQSCwgTElORV9CT1VOREFSWSwgUEFSQUdSQVBIX0JP
VU5EQVJZLCBET0NVTUVOVF9CT1VOREFSWSB9OwogCiB9CkluZGV4OiBraHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcv
cmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwv
ZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVkZSAi
dmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKLSNpbmNsdWRl
ICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9y
YW5nZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1
ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgpAQCAtNTkxLDExICs1OTEsMTEgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgZWxzZQogICAgICAgICBzdGFy
dFBvcyA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudChzdGFydFBvcyk7
CiAKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBkb2N1bWVudCgpLT5wYXJ0KCk7CisgICAgRnJhbWUg
KmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAKICAgICAvLyBGSVhNRTogSW1wcm92
ZSB0eXBpbmcgc3R5bGUuCiAgICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjovL3Byb2JsZW0vMzc2
OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGltcHJvdmVtZW50Ci0g
ICAgcGFydC0+Y2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGZyYW1lLT5jbGVhclR5cGluZ1N0eWxl
KCk7CiAgICAgc2V0VHlwaW5nU3R5bGUoMCk7ICAgIAogICAgIAogICAgIC8vIGRvbmUgaWYgdGhl
cmUgaXMgbm90aGluZyB0byBhZGQKQEAgLTYyNiwxNCArNjI2LDE0IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBpZiAoYWRkTGVhZGluZ1NwYWNlKSB7
CiAgICAgICAgICAgICBRQ2hhciBwcmV2aW91c0NoYXIgPSB2aXNpYmxlUG9zLnByZXZpb3VzKCku
Y2hhcmFjdGVyKCk7CiAgICAgICAgICAgICBpZiAoIXByZXZpb3VzQ2hhci5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgIGFkZExlYWRpbmdTcGFjZSA9ICFwYXJ0LT5pc0NoYXJhY3RlclNtYXJ0
UmVwbGFjZUV4ZW1wdChwcmV2aW91c0NoYXIsIHRydWUpOworICAgICAgICAgICAgICAgIGFkZExl
YWRpbmdTcGFjZSA9ICFmcmFtZS0+aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlv
dXNDaGFyLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBhZGRUcmFp
bGluZ1NwYWNlID0gc3RhcnRQb3MudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVM
VF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzRW5kT2ZMaW5lKHZpc2libGVQb3MpOwog
ICAgICAgICBpZiAoYWRkVHJhaWxpbmdTcGFjZSkgewogICAgICAgICAgICAgUUNoYXIgdGhpc0No
YXIgPSB2aXNpYmxlUG9zLmNoYXJhY3RlcigpOwogICAgICAgICAgICAgaWYgKCF0aGlzQ2hhci5p
c051bGwoKSkgewotICAgICAgICAgICAgICAgIGFkZFRyYWlsaW5nU3BhY2UgPSAhcGFydC0+aXND
aGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQodGhpc0NoYXIsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBhZGRUcmFpbGluZ1NwYWNlID0gIWZyYW1lLT5pc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4
ZW1wdCh0aGlzQ2hhciwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJ
bmRleDoga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2Vk
aXRpbmcvanNlZGl0aW5nLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9lZGl0aW5nL2pz
ZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUg
ImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgotI2luY2x1
ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAKLSNpbmNsdWRl
ICJLV1FLSFRNTFBhcnQuaCIKKyNpbmNsdWRlICJNYWNGcmFtZS5oIgogCiB1c2luZyBraHRtbDo6
VHlwaW5nQ29tbWFuZDsKIApAQCAtNDcsMTAgKzQ3LDEwIEBAIG5hbWVzcGFjZSB7CiBib29sIHN1
cHBvcnRzUGFzdGVDb21tYW5kID0gZmFsc2U7CiAKIHN0cnVjdCBDb21tYW5kSW1wIHsKLSAgICBi
b29sICgqZXhlY0ZuKShLSFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3Qg
RE9NU3RyaW5nICZ2YWx1ZSk7Ci0gICAgYm9vbCAoKmVuYWJsZWRGbikoS0hUTUxQYXJ0ICpwYXJ0
KTsKLSAgICBLSFRNTFBhcnQ6OlRyaVN0YXRlICgqc3RhdGVGbikoS0hUTUxQYXJ0ICpwYXJ0KTsK
LSAgICBET01TdHJpbmcgKCp2YWx1ZUZuKShLSFRNTFBhcnQgKnBhcnQpOworICAgIGJvb2wgKCpl
eGVjRm4pKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKKyAgICBib29sICgqZW5hYmxlZEZuKShGcmFtZSAqZnJhbWUpOworICAgIEZyYW1l
OjpUcmlTdGF0ZSAoKnN0YXRlRm4pKEZyYW1lICpmcmFtZSk7CisgICAgRE9NU3RyaW5nICgqdmFs
dWVGbikoRnJhbWUgKmZyYW1lKTsKIH07CiAKIHR5cGVkZWYgSGFzaE1hcDxET01TdHJpbmdJbXBs
ICosIGNvbnN0IENvbW1hbmRJbXAgKiwgQ2FzZUluc2Vuc2l0aXZlSGFzaD4gQ29tbWFuZE1hcDsK
QEAgLTcwLDExICs3MCwxMSBAQCBib29sIEpTRWRpdG9yOjpleGVjQ29tbWFuZChjb25zdCBET01T
dHJpCiAgICAgY29uc3QgQ29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKICAg
ICBpZiAoIWNtZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtIVE1MUGFydCAqcGFydCA9
IG1fZG9jLT5wYXJ0KCk7Ci0gICAgaWYgKCFwYXJ0KQorICAgIEZyYW1lICpmcmFtZSA9IG1fZG9j
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBt
X2RvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJu
IGNtZC0+ZW5hYmxlZEZuKHBhcnQpICYmIGNtZC0+ZXhlY0ZuKHBhcnQsIHVzZXJJbnRlcmZhY2Us
IHZhbHVlKTsKKyAgICByZXR1cm4gY21kLT5lbmFibGVkRm4oZnJhbWUpICYmIGNtZC0+ZXhlY0Zu
KGZyYW1lLCAgdXNlckludGVyZmFjZSwgdmFsdWUpOwogfQogCiBib29sIEpTRWRpdG9yOjpxdWVy
eUNvbW1hbmRFbmFibGVkKGNvbnN0IERPTVN0cmluZyAmY29tbWFuZCkKQEAgLTgyLDExICs4Miwx
MSBAQCBib29sIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRFbmFibGVkKGNvbnN0CiAgICAgY29uc3Qg
Q29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKICAgICBpZiAoIWNtZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtIVE1MUGFydCAqcGFydCA9IG1fZG9jLT5wYXJ0KCk7
Ci0gICAgaWYgKCFwYXJ0KQorICAgIEZyYW1lICpmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2RvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNtZC0+ZW5hYmxlZEZu
KHBhcnQpOworICAgIHJldHVybiBjbWQtPmVuYWJsZWRGbihmcmFtZSk7CiB9CiAKIGJvb2wgSlNF
ZGl0b3I6OnF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGNvbnN0IERPTVN0cmluZyAmY29tbWFuZCkKQEAg
LTk0LDExICs5NCwxMSBAQCBib29sIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRJbmRldGVybShjb25z
CiAgICAgY29uc3QgQ29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKICAgICBp
ZiAoIWNtZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtIVE1MUGFydCAqcGFydCA9IG1f
ZG9jLT5wYXJ0KCk7Ci0gICAgaWYgKCFwYXJ0KQorICAgIEZyYW1lICpmcmFtZSA9IG1fZG9jLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2Rv
Yy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNt
ZC0+c3RhdGVGbihwYXJ0KSA9PSBLSFRNTFBhcnQ6Om1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJu
IGNtZC0+c3RhdGVGbihmcmFtZSkgPT0gRnJhbWU6Om1peGVkVHJpU3RhdGU7CiB9CiAKIGJvb2wg
SlNFZGl0b3I6OnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnN0IERPTVN0cmluZyAmY29tbWFuZCkKQEAg
LTEwNiwxMSArMTA2LDExIEBAIGJvb2wgSlNFZGl0b3I6OnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnN0
IEQKICAgICBjb25zdCBDb21tYW5kSW1wICpjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQpOwogICAg
IGlmICghY21kKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0g
bV9kb2MtPnBhcnQoKTsKLSAgICBpZiAoIXBhcnQpCisgICAgRnJhbWUgKmZyYW1lID0gbV9kb2Mt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1f
ZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4g
Y21kLT5zdGF0ZUZuKHBhcnQpICE9IEtIVE1MUGFydDo6ZmFsc2VUcmlTdGF0ZTsKKyAgICByZXR1
cm4gY21kLT5zdGF0ZUZuKGZyYW1lKSAhPSBGcmFtZTo6ZmFsc2VUcmlTdGF0ZTsKIH0KIAogYm9v
bCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kU3VwcG9ydGVkKGNvbnN0IERPTVN0cmluZyAmY29tbWFu
ZCkKQEAgLTEyNSwxMSArMTI1LDExIEBAIERPTVN0cmluZyBKU0VkaXRvcjo6cXVlcnlDb21tYW5k
VmFsdWUoY28KICAgICBjb25zdCBDb21tYW5kSW1wICpjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQp
OwogICAgIGlmICghY21kKQogICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgS0hUTUxQ
YXJ0ICpwYXJ0ID0gbV9kb2MtPnBhcnQoKTsKLSAgICBpZiAoIXBhcnQpCisgICAgRnJhbWUgKmZy
YW1lID0gbV9kb2MtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIERP
TVN0cmluZygpOwogICAgIG1fZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKLSAgICByZXR1cm4gY21kLT52YWx1ZUZuKHBhcnQpOworICAgIHJldHVybiBjbWQtPnZh
bHVlRm4oZnJhbWUpOwogfQogCiB2b2lkIEpTRWRpdG9yOjpzZXRTdXBwb3J0c1Bhc3RlQ29tbWFu
ZChib29sIGZsYWcpCkBAIC0xNDMsMzYgKzE0MywzNiBAQCB2b2lkIEpTRWRpdG9yOjpzZXRTdXBw
b3J0c1Bhc3RlQ29tbWFuZChiCiAKIG5hbWVzcGFjZSB7CiAKLWJvb2wgZXhlY1N0eWxlQ2hhbmdl
KEtIVE1MUGFydCAqcGFydCwgaW50IHByb3BlcnR5SUQsIGNvbnN0IERPTVN0cmluZyAmcHJvcGVy
dHlWYWx1ZSkKK2Jvb2wgZXhlY1N0eWxlQ2hhbmdlKEZyYW1lICpmcmFtZSwgaW50IHByb3BlcnR5
SUQsIGNvbnN0IERPTVN0cmluZyAmcHJvcGVydHlWYWx1ZSkKIHsKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGw7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5
VmFsdWUpOwotICAgIHBhcnQtPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIGZyYW1lLT5h
cHBseVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVj
U3R5bGVDaGFuZ2UoS0hUTUxQYXJ0ICpwYXJ0LCBpbnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciAq
cHJvcGVydHlWYWx1ZSkKK2Jvb2wgZXhlY1N0eWxlQ2hhbmdlKEZyYW1lICpmcmFtZSwgaW50IHBy
b3BlcnR5SUQsIGNvbnN0IGNoYXIgKnByb3BlcnR5VmFsdWUpCiB7Ci0gICAgcmV0dXJuIGV4ZWNT
dHlsZUNoYW5nZShwYXJ0LCBwcm9wZXJ0eUlELCBET01TdHJpbmcocHJvcGVydHlWYWx1ZSkpOwor
ICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBwcm9wZXJ0eUlELCBET01TdHJpbmco
cHJvcGVydHlWYWx1ZSkpOwogfQogCi1LSFRNTFBhcnQ6OlRyaVN0YXRlIHN0YXRlU3R5bGUoS0hU
TUxQYXJ0ICpwYXJ0LCBpbnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciAqZGVzaXJlZFZhbHVlKQor
RnJhbWU6OlRyaVN0YXRlIHN0YXRlU3R5bGUoRnJhbWUgKmZyYW1lLCBpbnQgcHJvcGVydHlJRCwg
Y29uc3QgY2hhciAqZGVzaXJlZFZhbHVlKQogewogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkltcGw+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bDsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVlKTsKLSAg
ICByZXR1cm4gcGFydC0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIHJldHVy
biBmcmFtZS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpOwogfQogCi1ib29sIHNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUoS0hUTUxQYXJ0ICpwYXJ0LCBpbnQgcHJvcGVydHlJRCwgY29uc3Qg
Y2hhciAqZGVzaXJlZFZhbHVlKQorYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKEZyYW1lICpm
cmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRlc2lyZWRWYWx1ZSkKIHsKICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBzdHlsZSA9IG5ldyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIGRlc2lyZWRWYWx1ZSk7Ci0gICAgcmV0dXJuIHBhcnQtPnNlbGVjdGlvblN0YXJ0SGFzU3R5
bGUoc3R5bGUuZ2V0KCkpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uU3RhcnRIYXNTdHls
ZShzdHlsZS5nZXQoKSk7CiB9CiAKLURPTVN0cmluZyB2YWx1ZVN0eWxlKEtIVE1MUGFydCAqcGFy
dCwgaW50IHByb3BlcnR5SUQpCitET01TdHJpbmcgdmFsdWVTdHlsZShGcmFtZSAqZnJhbWUsIGlu
dCBwcm9wZXJ0eUlEKQogewotICAgIHJldHVybiBwYXJ0LT5zZWxlY3Rpb25TdGFydFN0eWxlUHJv
cGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvblN0YXJ0
U3R5bGVQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogfQogCiAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQEAgLTE4MCwxODQgKzE4MCwxODQgQEAgRE9NU3RyaW5nIHZh
bHVlU3R5bGUoS0hUTUxQYXJ0ICpwYXJ0LCBpbgogLy8gZXhlY0NvbW1hbmQgaW1wbGVtZW50YXRp
b25zCiAvLwogCi1ib29sIGV4ZWNCYWNrQ29sb3IoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJ
bnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNCYWNrQ29sb3IoRnJh
bWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShwYXJ0LCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NP
TE9SLCB2YWx1ZSk7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9Q
X0JBQ0tHUk9VTkRfQ09MT1IsIHZhbHVlKTsKIH0KIAotYm9vbCBleGVjQm9sZChLSFRNTFBhcnQg
KnBhcnQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wg
ZXhlY0JvbGQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmlu
ZyAmdmFsdWUpCiB7Ci0gICAgYm9vbCBpc0JvbGQgPSBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKHBh
cnQsIENTU19QUk9QX0ZPTlRfV0VJR0hULCAiYm9sZCIpOwotICAgIHJldHVybiBleGVjU3R5bGVD
aGFuZ2UocGFydCwgQ1NTX1BST1BfRk9OVF9XRUlHSFQsIGlzQm9sZCA/ICJub3JtYWwiIDogImJv
bGQiKTsKKyAgICBib29sIGlzQm9sZCA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsICBD
U1NfUFJPUF9GT05UX1dFSUdIVCwgImJvbGQiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdl
KGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsIGlzQm9sZCA/ICJub3JtYWwiIDogImJvbGQi
KTsKIH0KIAotYm9vbCBleGVjQ29weShLSFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0NvcHkoRnJhbWUgKmZyYW1lLCBi
b29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgcGFydC0+
Y29weVRvUGFzdGVib2FyZCgpOworICAgIGZyYW1lLT5jb3B5VG9QYXN0ZWJvYXJkKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0N1dChLSFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNl
ckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0N1dChGcmFtZSAq
ZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAg
ICBwYXJ0LT5jdXRUb1Bhc3RlYm9hcmQoKTsKKyAgICBmcmFtZS0+Y3V0VG9QYXN0ZWJvYXJkKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0RlbGV0ZShLSFRNTFBhcnQgKnBhcnQs
IGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0Rl
bGV0ZShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2
YWx1ZSkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKHBhcnQtPnhtbERv
Y0ltcGwoKSwgcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBraHRtbDo6V09SRCk7Cisg
ICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+eG1sRG9jSW1wbCgpLCBm
cmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBraHRtbDo6V09SRCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgZXhlY0ZvcndhcmREZWxldGUoS0hUTUxQYXJ0ICpwYXJ0LCBib29s
IHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNGb3J3YXJk
RGVsZXRlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcg
JnZhbHVlKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKHBh
cnQtPnhtbERvY0ltcGwoKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
ZXhlY0ZvbnROYW1lKEtIVE1MUGFydCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBE
T01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjRm9udE5hbWUoRnJhbWUgKmZyYW1lLCBib29sIHVz
ZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGV4ZWNT
dHlsZUNoYW5nZShwYXJ0LCBDU1NfUFJPUF9GT05UX0ZBTUlMWSwgdmFsdWUpOworICAgIHJldHVy
biBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9GT05UX0ZBTUlMWSwgdmFsdWUpOwog
fQogCi1ib29sIGV4ZWNGb250U2l6ZShLSFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZvbnRTaXplKEZyYW1lICpmcmFt
ZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIHJl
dHVybiBleGVjU3R5bGVDaGFuZ2UocGFydCwgQ1NTX1BST1BfRk9OVF9TSVpFLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX0ZPTlRfU0laRSwgdmFs
dWUpOwogfQogCi1ib29sIGV4ZWNGb250U2l6ZURlbHRhKEtIVE1MUGFydCAqcGFydCwgYm9vbCB1
c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjRm9udFNpemVE
ZWx0YShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2
YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKHBhcnQsIENTU19QUk9QX19LSFRN
TF9GT05UX1NJWkVfREVMVEEsIHZhbHVlKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZy
YW1lLCAgQ1NTX1BST1BfX0tIVE1MX0ZPTlRfU0laRV9ERUxUQSwgdmFsdWUpOwogfQogCi1ib29s
IGV4ZWNGb3JlQ29sb3IoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0
IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNGb3JlQ29sb3IoRnJhbWUgKmZyYW1lLCBib29s
IHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGV4
ZWNTdHlsZUNoYW5nZShwYXJ0LCBDU1NfUFJPUF9DT0xPUiwgdmFsdWUpOworICAgIHJldHVybiBl
eGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9DT0xPUiwgdmFsdWUpOwogfQogCi1ib29s
IGV4ZWNJbmRlbnQoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERP
TVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNJbmRlbnQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJ
bnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZXhlY0luc2VydExpbmVCcmVhayhL
SFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1
ZSkKK2Jvb2wgZXhlY0luc2VydExpbmVCcmVhayhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVy
ZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjppbnNl
cnRMaW5lQnJlYWsocGFydC0+eG1sRG9jSW1wbCgpKTsKKyAgICBUeXBpbmdDb21tYW5kOjppbnNl
cnRMaW5lQnJlYWsoZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZXhlY0luc2VydFBhcmFncmFwaChLSFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVy
ZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0luc2VydFBhcmFncmFwaChG
cmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkK
IHsKLSAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IocGFydC0+eG1s
RG9jSW1wbCgpKTsKKyAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
ZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0lu
c2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRl
cmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNJbnNlcnROZXdsaW5lSW5R
dW90ZWRDb250ZW50KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01T
dHJpbmcgJnZhbHVlKQogewotICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvckluUXVvdGVkQ29udGVudChwYXJ0LT54bWxEb2NJbXBsKCkpOworICAgIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChmcmFtZS0+eG1sRG9j
SW1wbCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjSW5zZXJ0VGV4dChLSFRN
TFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkK
K2Jvb2wgZXhlY0luc2VydFRleHQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNv
bnN0IERPTVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChw
YXJ0LT54bWxEb2NJbXBsKCksIHZhbHVlKTsKKyAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0
KGZyYW1lLT54bWxEb2NJbXBsKCksIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBleGVjSXRhbGljKEtIVE1MUGFydCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBE
T01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSXRhbGljKEZyYW1lICpmcmFtZSwgYm9vbCB1c2Vy
SW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIGJvb2wgaXNJdGFsaWMg
PSBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKHBhcnQsIENTU19QUk9QX0ZPTlRfU1RZTEUsICJpdGFs
aWMiKTsKLSAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKHBhcnQsIENTU19QUk9QX0ZPTlRfU1RZ
TEUsIGlzSXRhbGljID8gIm5vcm1hbCIgOiAiaXRhbGljIik7CisgICAgYm9vbCBpc0l0YWxpYyA9
IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX1NUWUxFLCAiaXRh
bGljIik7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX0ZPTlRf
U1RZTEUsIGlzSXRhbGljID8gIm5vcm1hbCIgOiAiaXRhbGljIik7CiB9CiAKLWJvb2wgZXhlY0p1
c3RpZnlDZW50ZXIoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERP
TVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNKdXN0aWZ5Q2VudGVyKEZyYW1lICpmcmFtZSwgYm9v
bCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVybiBl
eGVjU3R5bGVDaGFuZ2UocGFydCwgQ1NTX1BST1BfVEVYVF9BTElHTiwgImNlbnRlciIpOworICAg
IHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9URVhUX0FMSUdOLCAiY2Vu
dGVyIik7CiB9CiAKLWJvb2wgZXhlY0p1c3RpZnlGdWxsKEtIVE1MUGFydCAqcGFydCwgYm9vbCB1
c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSnVzdGlmeUZ1
bGwoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShwYXJ0LCBDU1NfUFJPUF9URVhUX0FM
SUdOLCAianVzdGlmeSIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1Nf
UFJPUF9URVhUX0FMSUdOLCAianVzdGlmeSIpOwogfQogCi1ib29sIGV4ZWNKdXN0aWZ5TGVmdChL
SFRNTFBhcnQgKnBhcnQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1
ZSkKK2Jvb2wgZXhlY0p1c3RpZnlMZWZ0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNl
LCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2Uo
cGFydCwgQ1NTX1BST1BfVEVYVF9BTElHTiwgImxlZnQiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxl
Q2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfVEVYVF9BTElHTiwgImxlZnQiKTsKIH0KIAotYm9vbCBl
eGVjSnVzdGlmeVJpZ2h0KEtIVE1MUGFydCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25z
dCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSnVzdGlmeVJpZ2h0KEZyYW1lICpmcmFtZSwg
Ym9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVy
biBleGVjU3R5bGVDaGFuZ2UocGFydCwgQ1NTX1BST1BfVEVYVF9BTElHTiwgInJpZ2h0Iik7Cisg
ICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX1RFWFRfQUxJR04sICJy
aWdodCIpOwogfQogCi1ib29sIGV4ZWNPdXRkZW50KEtIVE1MUGFydCAqcGFydCwgYm9vbCB1c2Vy
SW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjT3V0ZGVudChGcmFt
ZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBl
eGVjUGFzdGUoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0
cmluZyAmdmFsdWUpCitib29sIGV4ZWNQYXN0ZShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVy
ZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBwYXJ0LT5wYXN0ZUZyb21QYXN0
ZWJvYXJkKCk7CisgICAgZnJhbWUtPnBhc3RlRnJvbVBhc3RlYm9hcmQoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBleGVjUGFzdGVBbmRNYXRjaFN0eWxlKEtIVE1MUGFydCAqcGFydCwg
Ym9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUGFz
dGVBbmRNYXRjaFN0eWxlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBE
T01TdHJpbmcgJnZhbHVlKQogewotICAgIHBhcnQtPnBhc3RlQW5kTWF0Y2hTdHlsZSgpOworICAg
IGZyYW1lLT5wYXN0ZUFuZE1hdGNoU3R5bGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBleGVjUHJpbnQoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERP
TVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNQcmludChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlcklu
dGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBwYXJ0LT5wcmludCgpOwor
ICAgIGZyYW1lLT5wcmludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNSZWRv
KEtIVE1MUGFydCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZh
bHVlKQorYm9vbCBleGVjUmVkbyhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBwYXJ0LT5yZWRvKCk7CisgICAgZnJhbWUtPnJl
ZG8oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjU2VsZWN0QWxsKEtIVE1MUGFy
dCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9v
bCBleGVjU2VsZWN0QWxsKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBE
T01TdHJpbmcgJnZhbHVlKQogewotICAgIHBhcnQtPnNlbGVjdEFsbCgpOworICAgIGZyYW1lLT5z
ZWxlY3RBbGwoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjU3Vic2NyaXB0KEtI
VE1MUGFydCAqcGFydCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVl
KQorYm9vbCBleGVjU3Vic2NyaXB0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBj
b25zdCBET01TdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UocGFy
dCwgQ1NTX1BST1BfVkVSVElDQUxfQUxJR04sICJzdWIiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxl
Q2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfVkVSVElDQUxfQUxJR04sICJzdWIiKTsKIH0KIAotYm9v
bCBleGVjU3VwZXJzY3JpcHQoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNv
bnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNTdXBlcnNjcmlwdChGcmFtZSAqZnJhbWUs
IGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICByZXR1
cm4gZXhlY1N0eWxlQ2hhbmdlKHBhcnQsIENTU19QUk9QX1ZFUlRJQ0FMX0FMSUdOLCAic3VwZXIi
KTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfVkVSVElDQUxf
QUxJR04sICJzdXBlciIpOwogfQogCi1ib29sIGV4ZWNUcmFuc3Bvc2UoS0hUTUxQYXJ0ICpwYXJ0
LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNU
cmFuc3Bvc2UoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmlu
ZyAmdmFsdWUpCiB7Ci0gICAgcGFydC0+dHJhbnNwb3NlKCk7CisgICAgZnJhbWUtPnRyYW5zcG9z
ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNVbmRlcmxpbmUoS0hUTUxQYXJ0
ICpwYXJ0LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29s
IGV4ZWNVbmRlcmxpbmUoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IERP
TVN0cmluZyAmdmFsdWUpCiB7Ci0gICAgYm9vbCBpc1VuZGVybGluZWQgPSBzZWxlY3Rpb25TdGFy
dEhhc1N0eWxlKHBhcnQsIENTU19QUk9QX19LSFRNTF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVD
VCwgInVuZGVybGluZSIpOwotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UocGFydCwgQ1NTX1BS
T1BfX0tIVE1MX1RFWFRfREVDT1JBVElPTlNfSU5fRUZGRUNULCBpc1VuZGVybGluZWQgPyAibm9u
ZSIgOiAidW5kZXJsaW5lIik7CisgICAgYm9vbCBpc1VuZGVybGluZWQgPSBzZWxlY3Rpb25TdGFy
dEhhc1N0eWxlKGZyYW1lLCAgQ1NTX1BST1BfX0tIVE1MX1RFWFRfREVDT1JBVElPTlNfSU5fRUZG
RUNULCAidW5kZXJsaW5lIik7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENT
U19QUk9QX19LSFRNTF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVCwgaXNVbmRlcmxpbmVkID8g
Im5vbmUiIDogInVuZGVybGluZSIpOwogfQogCi1ib29sIGV4ZWNVbmRvKEtIVE1MUGFydCAqcGFy
dCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBET01TdHJpbmcgJnZhbHVlKQorYm9vbCBleGVj
VW5kbyhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2
YWx1ZSkKIHsKLSAgICBwYXJ0LT51bmRvKCk7CisgICAgZnJhbWUtPnVuZG8oKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjVW5zZWxlY3QoS0hUTUxQYXJ0ICpwYXJ0LCBib29sIHVz
ZXJJbnRlcmZhY2UsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNVbnNlbGVjdChG
cmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkK
IHsKLSAgICBwYXJ0LT5jbGVhclNlbGVjdGlvbigpOworICAgIGZyYW1lLT5jbGVhclNlbGVjdGlv
bigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNzEsMzkgKzM3MSwzOSBAQCBib29sIGV4
ZWNVbnNlbGVjdChLSFRNTFBhcnQgKnBhcnQsIGJvb2wgCiAvLyAgICAgU3VwcG9ydGVkID0gVGhl
IGNvbW1hbmQgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgb2JqZWN0LgogLy8gICAgIEVuYWJsZWQgPSAg
IFRoZSBjb21tYW5kIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KIAotYm9vbCBlbmFibGVkKEtI
VE1MUGFydCAqcGFydCkKK2Jvb2wgZW5hYmxlZChGcmFtZSAqZnJhbWUpCiB7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgZW5hYmxlZEFueVNlbGVjdGlvbihLSFRNTFBhcnQgKnBhcnQpCiti
b29sIGVuYWJsZWRBbnlTZWxlY3Rpb24oRnJhbWUgKmZyYW1lKQogewotICAgIHJldHVybiBwYXJ0
LT5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0
aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsKIH0KIAotYm9vbCBlbmFibGVkUGFzdGUoS0hUTUxQYXJ0
ICpwYXJ0KQorYm9vbCBlbmFibGVkUGFzdGUoRnJhbWUgKmZyYW1lKQogewotICAgIHJldHVybiBz
dXBwb3J0c1Bhc3RlQ29tbWFuZCAmJiBwYXJ0LT5jYW5QYXN0ZSgpOworICAgIHJldHVybiBzdXBw
b3J0c1Bhc3RlQ29tbWFuZCAmJiBmcmFtZS0+Y2FuUGFzdGUoKTsKIH0KIAotYm9vbCBlbmFibGVk
UGFzdGVBbmRNYXRjaFN0eWxlKEtIVE1MUGFydCAqcGFydCkKK2Jvb2wgZW5hYmxlZFBhc3RlQW5k
TWF0Y2hTdHlsZShGcmFtZSAqZnJhbWUpCiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzUGFzdGVDb21t
YW5kICYmIHBhcnQtPmNhblBhc3RlKCk7CisgICAgcmV0dXJuIHN1cHBvcnRzUGFzdGVDb21tYW5k
ICYmIGZyYW1lLT5jYW5QYXN0ZSgpOwogfQogCi1ib29sIGVuYWJsZWRSYW5nZVNlbGVjdGlvbihL
SFRNTFBhcnQgKnBhcnQpCitib29sIGVuYWJsZWRSYW5nZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUp
CiB7Ci0gICAgcmV0dXJuIHBhcnQtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKKyAgICByZXR1cm4g
ZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKIH0KIAotYm9vbCBlbmFibGVkUmVkbyhLSFRN
TFBhcnQgKnBhcnQpCitib29sIGVuYWJsZWRSZWRvKEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1
cm4gcGFydC0+Y2FuUmVkbygpOworICAgIHJldHVybiBmcmFtZS0+Y2FuUmVkbygpOwogfQogCi1i
b29sIGVuYWJsZWRVbmRvKEtIVE1MUGFydCAqcGFydCkKK2Jvb2wgZW5hYmxlZFVuZG8oRnJhbWUg
KmZyYW1lKQogewotICAgIHJldHVybiBwYXJ0LT5jYW5VbmRvKCk7CisgICAgcmV0dXJuIGZyYW1l
LT5jYW5VbmRvKCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpAQCAtNDIzLDM0ICs0MjMsMzQgQEAgYm9vbCBlbmFibGVkVW5kbyhLSFRNTFBhcnQgKnBhcnQp
CiAvLyBUaGVuLCBxdWVyeUNvbW1hbmRJbmRldGVybSBzaG91bGQgcmV0dXJuICJubyIgaW4gdGhl
IGNhc2Ugd2hlcmUKIC8vIGFsbCB0aGUgdGV4dCBpcyBlaXRoZXIgYWxsIGJvbGQgb3Igbm90LWJv
bGQgYW5kIGFuZCAieWVzIiBmb3IgcGFydGlhbGx5LWJvbGQgdGV4dC4KIAotS0hUTUxQYXJ0OjpU
cmlTdGF0ZSBzdGF0ZU5vbmUoS0hUTUxQYXJ0ICpwYXJ0KQorRnJhbWU6OlRyaVN0YXRlIHN0YXRl
Tm9uZShGcmFtZSAqZnJhbWUpCiB7Ci0gICAgcmV0dXJuIEtIVE1MUGFydDo6ZmFsc2VUcmlTdGF0
ZTsKKyAgICByZXR1cm4gRnJhbWU6OmZhbHNlVHJpU3RhdGU7CiB9CiAKLUtIVE1MUGFydDo6VHJp
U3RhdGUgc3RhdGVCb2xkKEtIVE1MUGFydCAqcGFydCkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZUJv
bGQoRnJhbWUgKmZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKHBhcnQsIENTU19QUk9Q
X0ZPTlRfV0VJR0hULCAiYm9sZCIpOworICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NT
X1BST1BfRk9OVF9XRUlHSFQsICJib2xkIik7CiB9CiAKLUtIVE1MUGFydDo6VHJpU3RhdGUgc3Rh
dGVJdGFsaWMoS0hUTUxQYXJ0ICpwYXJ0KQorRnJhbWU6OlRyaVN0YXRlIHN0YXRlSXRhbGljKEZy
YW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHlsZShwYXJ0LCBDU1NfUFJPUF9GT05U
X1NUWUxFLCAiaXRhbGljIik7CisgICAgcmV0dXJuIHN0YXRlU3R5bGUoZnJhbWUsICBDU1NfUFJP
UF9GT05UX1NUWUxFLCAiaXRhbGljIik7CiB9CiAKLUtIVE1MUGFydDo6VHJpU3RhdGUgc3RhdGVT
dWJzY3JpcHQoS0hUTUxQYXJ0ICpwYXJ0KQorRnJhbWU6OlRyaVN0YXRlIHN0YXRlU3Vic2NyaXB0
KEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHlsZShwYXJ0LCBDU1NfUFJPUF9W
RVJUSUNBTF9BTElHTiwgInN1YiIpOworICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NT
X1BST1BfVkVSVElDQUxfQUxJR04sICJzdWIiKTsKIH0KIAotS0hUTUxQYXJ0OjpUcmlTdGF0ZSBz
dGF0ZVN1cGVyc2NyaXB0KEtIVE1MUGFydCAqcGFydCkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN1
cGVyc2NyaXB0KEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHlsZShwYXJ0LCBD
U1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgInN1cGVyIik7CisgICAgcmV0dXJuIHN0YXRlU3R5bGUo
ZnJhbWUsICBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgInN1cGVyIik7CiB9CiAKLUtIVE1MUGFy
dDo6VHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUoS0hUTUxQYXJ0ICpwYXJ0KQorRnJhbWU6OlRyaVN0
YXRlIHN0YXRlVW5kZXJsaW5lKEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHls
ZShwYXJ0LCBDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sICJ1bmRlcmxpbmUiKTsKKyAgICByZXR1
cm4gc3RhdGVTdHlsZShmcmFtZSwgIENTU19QUk9QX1RFWFRfREVDT1JBVElPTiwgInVuZGVybGlu
ZSIpOwogfQogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ1
OCwzNCArNDU4LDM0IEBAIEtIVE1MUGFydDo6VHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUoS0hUTUwK
IC8vIHF1ZXJ5Q29tbWFuZFZhbHVlIGltcGxlbWVudGF0aW9ucwogLy8KIAotRE9NU3RyaW5nIHZh
bHVlTnVsbChLSFRNTFBhcnQgKnBhcnQpCitET01TdHJpbmcgdmFsdWVOdWxsKEZyYW1lICpmcmFt
ZSkKIHsKICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiB9CiAKLURPTVN0cmluZyB2YWx1ZUJhY2tD
b2xvcihLSFRNTFBhcnQgKnBhcnQpCitET01TdHJpbmcgdmFsdWVCYWNrQ29sb3IoRnJhbWUgKmZy
YW1lKQogewotICAgIHJldHVybiB2YWx1ZVN0eWxlKHBhcnQsIENTU19QUk9QX0JBQ0tHUk9VTkRf
Q09MT1IpOworICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfQkFDS0dST1VO
RF9DT0xPUik7CiB9CiAKLURPTVN0cmluZyB2YWx1ZUZvbnROYW1lKEtIVE1MUGFydCAqcGFydCkK
K0RPTVN0cmluZyB2YWx1ZUZvbnROYW1lKEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFs
dWVTdHlsZShwYXJ0LCBDU1NfUFJPUF9GT05UX0ZBTUlMWSk7CisgICAgcmV0dXJuIHZhbHVlU3R5
bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX0ZBTUlMWSk7CiB9CiAKLURPTVN0cmluZyB2YWx1ZUZv
bnRTaXplKEtIVE1MUGFydCAqcGFydCkKK0RPTVN0cmluZyB2YWx1ZUZvbnRTaXplKEZyYW1lICpm
cmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShwYXJ0LCBDU1NfUFJPUF9GT05UX1NJWkUp
OworICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9TSVpFKTsKIH0K
IAotRE9NU3RyaW5nIHZhbHVlRm9udFNpemVEZWx0YShLSFRNTFBhcnQgKnBhcnQpCitET01TdHJp
bmcgdmFsdWVGb250U2l6ZURlbHRhKEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVT
dHlsZShwYXJ0LCBDU1NfUFJPUF9fS0hUTUxfRk9OVF9TSVpFX0RFTFRBKTsKKyAgICByZXR1cm4g
dmFsdWVTdHlsZShmcmFtZSwgIENTU19QUk9QX19LSFRNTF9GT05UX1NJWkVfREVMVEEpOwogfQog
Ci1ET01TdHJpbmcgdmFsdWVGb3JlQ29sb3IoS0hUTUxQYXJ0ICpwYXJ0KQorRE9NU3RyaW5nIHZh
bHVlRm9yZUNvbG9yKEZyYW1lICpmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShwYXJ0
LCBDU1NfUFJPUF9DT0xPUik7CisgICAgcmV0dXJuIHZhbHVlU3R5bGUoZnJhbWUsICBDU1NfUFJP
UF9DT0xPUik7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJ
bmRleDoga2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTk2MCkK
KysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJpbnNlcnRf
dGV4dF9jb21tYW5kLmgiCiAKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFu
Z2UuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCkBAIC0xNTIsNyArMTUyLDcgQEAg
dm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgRE9NUwogICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KICAgICAvLyBGSVhNRTogSW1w
cm92ZSB0eXBpbmcgc3R5bGUuCiAgICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjovL3Byb2JsZW0v
Mzc2OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGltcHJvdmVtZW50
Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0eXBpbmdTdHlsZSA9IGRvY3Vt
ZW50KCktPnBhcnQoKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGwgKnR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dHlwaW5nU3R5bGUo
KTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPmxlbmd0aCgpID4gMCkKICAg
ICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZSk7CiAKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5z
ZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9p
bnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9l
ZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUg
InhtbC9kb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKLSNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgPGt4
bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCkBAIC0xNjcsNyAr
MTY3LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBG
SVhNRTogSW1wcm92ZSB0eXBpbmcgc3R5bGUuCiAgICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjov
L3Byb2JsZW0vMzc2OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGlt
cHJvdmVtZW50CiAgICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0eXBp
bmdTdHlsZSA9IGRvY3VtZW50KCktPnBhcnQoKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+dHlwaW5nU3R5bGUoKTsKICAgICAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5
bGUtPmxlbmd0aCgpID4gMCkgewogICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlv
bkJlZm9yZVN0eWxlID0gZW5kaW5nU2VsZWN0aW9uKCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2pz
ZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmgJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImRvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJxZGlj
dC5oIgogCi1jbGFzcyBLSFRNTFBhcnQ7CitjbGFzcyBGcmFtZTsKIGNsYXNzIFFTdHJpbmc7CiAK
IG5hbWVzcGFjZSBET00gewpJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHJl
dmlzaW9uIDExOTYwKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgog
I2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0LmgiCiAKLWNsYXNzIEtIVE1MUGFydDsKK2Ns
YXNzIEZyYW1lOwogY2xhc3MgUVBhaW50ZXI7CiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC0xMTAs
OSArMTEwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGVidWdQb3NpdGlvbigpIGNvbnN0OwogICAg
IHZvaWQgZGVidWdSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVk
KSBjb25zdDsKIAotICAgIGZyaWVuZCBjbGFzcyA6OktIVE1MUGFydDsKKyAgICBmcmllbmQgY2xh
c3MgOjpGcmFtZTsKICAgICAKLSAgICBLSFRNTFBhcnQgKnBhcnQoKSBjb25zdCB7IHJldHVybiAh
aXNOb25lKCkgPyBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpIDogMDsgfQor
ICAgIEZyYW1lICpmcmFtZSgpIGNvbnN0IHsgcmV0dXJuICFpc05vbmUoKSA/IG1fc3RhcnQubm9k
ZSgpLT5nZXREb2N1bWVudCgpLT5mcmFtZSgpIDogMDsgfQogCiAgICAgLy8gU2FmYXJpIFNlbGVj
dGlvbiBPYmplY3QgQVBJCiAgICAgTm9kZUltcGwgKmJhc2VOb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9iYXNlLm5vZGUoKTsgfQpJbmRleDoga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDExOTYw
KQorKysga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDggKzQzLDYgQEAKICNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxf
aW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKLSNpbmNsdWRlICJraHRtbF9w
YXJ0LmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgog
I2luY2x1ZGUgInFjb2xvci5oIgogI2luY2x1ZGUgInFwdHJsaXN0LmgiCkBAIC04Niw3ICs4NCw3
IEBAIHVzaW5nIERPTTo6VHJlZVdhbGtlckltcGw7CiAKICNpbmNsdWRlIDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgotI2luY2x1ZGUgIktXUUtIVE1MUGFy
dC5oIgorI2luY2x1ZGUgIk1hY0ZyYW1lLmgiCiAjaW5jbHVkZSAiS1dRUmVnRXhwLmgiCiAKIG5h
bWVzcGFjZSBraHRtbCB7CkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSAiZG9tL2RvbV9u
b2RlLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJraHRtbF9wYXJ0
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRl
ICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJf
c3R5bGUuaCIKQEAgLTQwNSw4ICs0MDUsOCBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZGlmeShjb25zdCBECiAKIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlciBh
bHRlciwgRURpcmVjdGlvbiBkaXIsIEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0g
ICAgaWYgKHBhcnQoKSkKLSAgICAgICAgcGFydCgpLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShn
cmFudWxhcml0eSk7CisgICAgaWYgKGZyYW1lKCkpCisgICAgICAgIGZyYW1lKCktPnNldFNlbGVj
dGlvbkdyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKICAgICAKICAgICBzZXRNb2RpZnlCaWFzKGFs
dGVyLCBkaXIpOwogCkBAIC01NjIsMTEgKzU2MiwxMSBAQCBpbnQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6eFBvc0ZvclZlcnRpY2FsCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBLSFRN
TFBhcnQgKnBhcnQgPSBwb3Mubm9kZSgpLT5nZXREb2N1bWVudCgpLT5wYXJ0KCk7Ci0gICAgaWYg
KCFwYXJ0KQorICAgIEZyYW1lICpmcmFtZSA9IHBvcy5ub2RlKCktPmdldERvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgIAotICAg
IGlmIChyZWNhbGMgfHwgcGFydC0+eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkgPT0g
S0hUTUxQYXJ0OjpOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikgeworICAgIGlmIChy
ZWNhbGMgfHwgZnJhbWUtPnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpID09IEZyYW1l
OjpOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikgewogICAgICAgICBzd2l0Y2ggKG1f
YWZmaW5pdHkpIHsKICAgICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKICAgICAgICAgICAgICAg
ICBwb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBtX2FmZmluaXR5KS5kb3duc3RyZWFtRGVlcEVx
dWl2YWxlbnQoKTsKQEAgLTU3NiwxMCArNTc2LDEwIEBAIGludCBTZWxlY3Rpb25Db250cm9sbGVy
Ojp4UG9zRm9yVmVydGljYWwKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICB4ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwg
bV9hZmZpbml0eSkueCgpOwotICAgICAgICBwYXJ0LT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oeCk7CisgICAgICAgIGZyYW1lLT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24oeCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB4ID0gcGFydC0+eFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CisgICAgICAgIHggPSBmcmFtZS0+eFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgfQogICAgIHJldHVybiB4OwogfQpJbmRleDoga2h0
bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkocmV2aXNpb24gMTE5NjAp
CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHls
ZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aCIKQEAgLTYwOSw5ICs2MDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1
bGF0ZUVuCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUoTm9kZUltcGwgKmluc2VydGVkUGxhY2Vob2xkZXIpCiB7CiAgICAgLy8gQ29t
cHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdHlsZSBiZWZvcmUgdGhlIGRlbGV0ZSBh
bmQgdGhlIHN0eWxlIG5vdwotICAgIC8vIGFmdGVyIHRoZSBkZWxldGUgaGFzIGJlZW4gZG9uZS4g
U2V0IHRoaXMgc3R5bGUgb24gdGhlIHBhcnQsIHNvIG90aGVyIGVkaXRpbmcKKyAgICAvLyBhZnRl
ciB0aGUgZGVsZXRlIGhhcyBiZWVuIGRvbmUuIFNldCB0aGlzIHN0eWxlIG9uIHRoZSBmcmFtZSwg
c28gb3RoZXIgZWRpdGluZwogICAgIC8vIGNvbW1hbmRzIGJlaW5nIGNvbXBvc2VkIHdpdGggdGhp
cyBvbmUgd2lsbCB3b3JrLCBhbmQgYWxzbyBjYWNoZSBpdCBvbiB0aGUgY29tbWFuZCwKLSAgICAv
LyBzbyB0aGUgS0hUTUxQYXJ0OjphcHBsaWVkRWRpdGluZyBjYW4gc2V0IGl0IGFmdGVyIHRoZSB3
aG9sZSBjb21wb3NpdGUgY29tbWFuZCAKKyAgICAvLyBzbyB0aGUgRnJhbWU6OmFwcGxpZWRFZGl0
aW5nIGNhbiBzZXQgaXQgYWZ0ZXIgdGhlIHdob2xlIGNvbXBvc2l0ZSBjb21tYW5kIAogICAgIC8v
IGhhcyBjb21wbGV0ZWQuCiAgICAgLy8gRklYTUU6IEltcHJvdmUgdHlwaW5nIHN0eWxlLgogICAg
IC8vIFNlZSB0aGlzIGJ1ZzogPHJkYXI6Ly9wcm9ibGVtLzM3Njk4OTk+IEltcGxlbWVudGF0aW9u
IG9mIHR5cGluZyBzdHlsZSBuZWVkcyBpbXByb3ZlbWVudApAQCAtNjM4LDcgKzYzOCw3IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICB9CiAgICAgLy8gU2V0
IG1fdHlwaW5nU3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KICAgICAvLyBJdCdzIHBlcmZlY3Rs
eSBPSyBmb3IgbV90eXBpbmdTdHlsZSB0byBiZSBudWxsLgotICAgIGRvY3VtZW50KCktPnBhcnQo
KS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSk7CisgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSk7CiAgICAgc2V0VHlw
aW5nU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSk7CiB9CiAKSW5kZXg6IGtodG1sL2VkaXRpbmcv
dHlwaW5nX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvdHlwaW5nX2Nv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiaW5zZXJ0
X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5oIgogI2luY2x1ZGUgImJyZWFrX2Jsb2NrcXVv
dGVfY29tbWFuZC5oIgogCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3Np
dGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTU5LDE1ICs1OSwxNSBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jCiB7CiAgICAgQVNTRVJUKGRv
Y3VtZW50KTsKICAgICAKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBkb2N1bWVudC0+cGFydCgpOwot
ICAgIEFTU0VSVChwYXJ0KTsKKyAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
KyAgICBBU1NFUlQoZnJhbWUpOwogICAgIAotICAgIEVkaXRDb21tYW5kUHRyIGxhc3RFZGl0Q29t
bWFuZCA9IHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgpOworICAgIEVkaXRDb21tYW5kUHRyIGxhc3RF
ZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoaXNPcGVuRm9y
TW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5kKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmRlbGV0ZUtleVByZXNz
ZWQoKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2Vs
ZWN0aW9uID0gcGFydC0+c2VsZWN0aW9uKCk7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIg
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlz
Q2FyZXQoKSAmJiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5z
dGFydEFmZmluaXR5KCkpLnByZXZpb3VzKCkuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIC8vIGRv
IG5vdGhpbmcgZm9yIGEgZGVsZXRlIGtleSBhdCB0aGUgc3RhcnQgb2YgYW4gZWRpdGFibGUgZWxl
bWVudC4KICAgICAgICAgfQpAQCAtODQsMTUgKzg0LDE1IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXMKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIAotICAg
IEtIVE1MUGFydCAqcGFydCA9IGRvY3VtZW50LT5wYXJ0KCk7Ci0gICAgQVNTRVJUKHBhcnQpOwor
ICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7
CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRDb21tYW5kID0gcGFydC0+bGFzdEVk
aXRDb21tYW5kKCk7CisgICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUt
Pmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmIChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChs
YXN0RWRpdENvbW1hbmQpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4o
bGFzdEVkaXRDb21tYW5kLmdldCgpKS0+Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoKTsKICAgICB9
CiAgICAgZWxzZSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uID0gcGFy
dC0+c2VsZWN0aW9uKCk7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBp
c0VuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rp
b24uc3RhcnRBZmZpbml0eSgpKSkpIHsKICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgZm9yIGEg
ZGVsZXRlIGtleSBhdCB0aGUgc3RhcnQgb2YgYW4gZWRpdGFibGUgZWxlbWVudC4KICAgICAgICAg
fQpAQCAtMTA5LDEwICsxMDksMTAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERv
Y3VtZW50SQogewogICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgCi0gICAgS0hUTUxQYXJ0ICpw
YXJ0ID0gZG9jdW1lbnQtPnBhcnQoKTsKLSAgICBBU1NFUlQocGFydCk7CisgICAgRnJhbWUgKmZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKICAgICAKLSAgICBF
ZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBwYXJ0LT5sYXN0RWRpdENvbW1hbmQoKTsK
KyAgICBFZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21t
YW5kKCk7CiAgICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFu
ZCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1h
bmQuZ2V0KCkpLT5pbnNlcnRUZXh0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7CiAgICAgfQpA
QCAtMTI2LDEwICsxMjYsMTAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWso
RG9jdQogewogICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgCi0gICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gZG9jdW1lbnQtPnBhcnQoKTsKLSAgICBBU1NFUlQocGFydCk7CisgICAgRnJhbWUgKmZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKICAgICAKLSAgICBFZGl0
Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBwYXJ0LT5sYXN0RWRpdENvbW1hbmQoKTsKKyAg
ICBFZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5k
KCk7CiAgICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkp
IHsKICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQu
Z2V0KCkpLT5pbnNlcnRMaW5lQnJlYWsoKTsKICAgICB9CkBAIC0xNDMsMTAgKzE0MywxMCBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyCiB7CiAgICAgQVNTRVJUKGRv
Y3VtZW50KTsKICAgICAKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBkb2N1bWVudC0+cGFydCgpOwot
ICAgIEFTU0VSVChwYXJ0KTsKKyAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
KyAgICBBU1NFUlQoZnJhbWUpOwogICAgIAotICAgIEVkaXRDb21tYW5kUHRyIGxhc3RFZGl0Q29t
bWFuZCA9IHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgpOworICAgIEVkaXRDb21tYW5kUHRyIGxhc3RF
ZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoaXNPcGVuRm9y
TW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5kKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwogICAgIH0KQEAgLTE2MCwxMCArMTYwLDEwIEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXIKIHsKICAgICBBU1NFUlQo
ZG9jdW1lbnQpOwogICAgIAotICAgIEtIVE1MUGFydCAqcGFydCA9IGRvY3VtZW50LT5wYXJ0KCk7
Ci0gICAgQVNTRVJUKHBhcnQpOworICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OworICAgIEFTU0VSVChmcmFtZSk7CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRD
b21tYW5kID0gcGFydC0+bGFzdEVkaXRDb21tYW5kKCk7CisgICAgRWRpdENvbW1hbmRQdHIgbGFz
dEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmIChpc09wZW5G
b3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7CiAgICAgICAgIHN0YXRpY19j
YXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKCk7CiAgICAgfQpAQCAtMjMxLDIwICsyMzEsMjAgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEg
PSBzdGFydE9mV29yZChwcmV2aW91cywgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBLV1EoZG9jdW1lbnQoKS0+
cGFydCgpKS0+bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3JkcyhwMSk7CisgICAgICAgICAg
ICBNYWMoZG9jdW1lbnQoKS0+ZnJhbWUoKSktPm1hcmtNaXNzcGVsbGluZ3NJbkFkamFjZW50V29y
ZHMocDEpOwogICAgIH0KIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3Bl
bkNvbW1hbmQoKQogewogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZygpOwotICAgIC8v
IERvIG5vdCBhcHBseSBlZGl0aW5nIHRvIHRoZSBwYXJ0IG9uIHRoZSBmaXJzdCB0aW1lIHRocm91
Z2guCi0gICAgLy8gVGhlIHBhcnQgd2lsbCBnZXQgdG9sZCBpbiB0aGUgc2FtZSB3YXkgYXMgYWxs
IG90aGVyIGNvbW1hbmRzLgorICAgIC8vIERvIG5vdCBhcHBseSBlZGl0aW5nIHRvIHRoZSBmcmFt
ZSBvbiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLgorICAgIC8vIFRoZSBmcmFtZSB3aWxsIGdldCB0
b2xkIGluIHRoZSBzYW1lIHdheSBhcyBhbGwgb3RoZXIgY29tbWFuZHMuCiAgICAgLy8gQnV0IHNp
bmNlIHRoaXMgY29tbWFuZCBzdGF5cyBvcGVuIGFuZCBpcyB1c2VkIGZvciBhZGRpdGlvbmFsIHR5
cGluZywgCi0gICAgLy8gd2UgbmVlZCB0byB0ZWxsIHRoZSBwYXJ0IGhlcmUgYXMgb3RoZXIgY29t
bWFuZHMgYXJlIGFkZGVkLgorICAgIC8vIHdlIG5lZWQgdG8gdGVsbCB0aGUgZnJhbWUgaGVyZSBh
cyBvdGhlciBjb21tYW5kcyBhcmUgYWRkZWQuCiAgICAgaWYgKG1fYXBwbHlFZGl0aW5nKSB7CiAg
ICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZCh0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+cGFy
dCgpLT5hcHBsaWVkRWRpdGluZyhjbWQpOworICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5h
cHBsaWVkRWRpdGluZyhjbWQpOwogICAgIH0KICAgICBtX2FwcGx5RWRpdGluZyA9IHRydWU7CiB9
CkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0
aG91dAogewogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4KICAgICAvLyBTZWUg
dGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBp
bmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKLSAgICBpZiAoZG9jdW1lbnQoKS0+cGFydCgpLT50
eXBpbmdTdHlsZSgpIHx8IG1fY21kcy5jb3VudCgpID09IDApIHsKKyAgICBpZiAoZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+dHlwaW5nU3R5bGUoKSB8fCBtX2NtZHMuY291bnQoKSA9PSAwKSB7CiAgICAg
ICAgIEluc2VydFRleHRDb21tYW5kICppbXBsID0gbmV3IEluc2VydFRleHRDb21tYW5kKGRvY3Vt
ZW50KCkpOwogICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQoaW1wbCk7CiAgICAgICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2VkaXRfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCShyZXZp
c2lvbiAxMTk2MCkKKysrIGtodG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImVk
aXRfY29tbWFuZC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgogCiAjaW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5oIgpAQCAtMTkxLDggKzE5MSw4IEBA
IEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudEltcGwgKmQKICAgICA6IG1fZG9jdW1l
bnQoZG9jdW1lbnQpLCBtX3N0YXRlKE5vdEFwcGxpZWQpLCBtX3BhcmVudCgwKQogewogICAgIEFT
U0VSVChtX2RvY3VtZW50KTsKLSAgICBBU1NFUlQobV9kb2N1bWVudC0+cGFydCgpKTsKLSAgICBt
X3N0YXJ0aW5nU2VsZWN0aW9uID0gbV9kb2N1bWVudC0+cGFydCgpLT5zZWxlY3Rpb24oKTsKKyAg
ICBBU1NFUlQobV9kb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgbV9zdGFydGluZ1NlbGVjdGlvbiA9
IG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpOwogICAgIG1fZW5kaW5nU2VsZWN0aW9u
ID0gbV9zdGFydGluZ1NlbGVjdGlvbjsKIH0KIApAQCAtMjAzLDEwICsyMDMsMTAgQEAgRWRpdENv
bW1hbmQ6On5FZGl0Q29tbWFuZCgpCiB2b2lkIEVkaXRDb21tYW5kOjphcHBseSgpCiB7CiAgICAg
QVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIEFTU0VSVChtX2RvY3VtZW50LT5wYXJ0KCkpOworICAg
IEFTU0VSVChtX2RvY3VtZW50LT5mcmFtZSgpKTsKICAgICBBU1NFUlQoc3RhdGUoKSA9PSBOb3RB
cHBsaWVkKTsKICAKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBtX2RvY3VtZW50LT5wYXJ0KCk7Cisg
ICAgRnJhbWUgKmZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKIAogICAgIGRvQXBwbHkoKTsK
ICAgICAKQEAgLTIyMCwxOSArMjIwLDE5IEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5KCkKICAg
ICBpZiAoIWlzQ29tcG9zaXRlU3RlcCgpKSB7CiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwogICAg
ICAgICBFZGl0Q29tbWFuZFB0ciBjbWQodGhpcyk7Ci0gICAgICAgIHBhcnQtPmFwcGxpZWRFZGl0
aW5nKGNtZCk7CisgICAgICAgIGZyYW1lLT5hcHBsaWVkRWRpdGluZyhjbWQpOwogICAgIH0KIH0K
IAogdm9pZCBFZGl0Q29tbWFuZDo6dW5hcHBseSgpCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQp
OwotICAgIEFTU0VSVChtX2RvY3VtZW50LT5wYXJ0KCkpOworICAgIEFTU0VSVChtX2RvY3VtZW50
LT5mcmFtZSgpKTsKICAgICBBU1NFUlQoc3RhdGUoKSA9PSBBcHBsaWVkKTsKIAogICAgIGJvb2wg
dG9wTGV2ZWwgPSAhaXNDb21wb3NpdGVTdGVwKCk7CiAgCi0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0g
bV9kb2N1bWVudC0+cGFydCgpOworICAgIEZyYW1lICpmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1l
KCk7CiAgICAgCiAgICAgZG9VbmFwcGx5KCk7CiAgICAgCkBAIC0yNDEsMTkgKzI0MSwxOSBAQCB2
b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKICAgICBpZiAodG9wTGV2ZWwpIHsKICAgICAgICAg
dXBkYXRlTGF5b3V0KCk7CiAgICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZCh0aGlzKTsKLSAgICAg
ICAgcGFydC0+dW5hcHBsaWVkRWRpdGluZyhjbWQpOworICAgICAgICBmcmFtZS0+dW5hcHBsaWVk
RWRpdGluZyhjbWQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cmVhcHBseSgpCiB7
CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIEFTU0VSVChtX2RvY3VtZW50LT5wYXJ0KCkp
OworICAgIEFTU0VSVChtX2RvY3VtZW50LT5mcmFtZSgpKTsKICAgICBBU1NFUlQoc3RhdGUoKSA9
PSBOb3RBcHBsaWVkKTsKICAgICAKICAgICBib29sIHRvcExldmVsID0gIWlzQ29tcG9zaXRlU3Rl
cCgpOwogIAotICAgIEtIVE1MUGFydCAqcGFydCA9IG1fZG9jdW1lbnQtPnBhcnQoKTsKKyAgICBG
cmFtZSAqZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwogICAgIAogICAgIGRvUmVhcHBseSgp
OwogICAgIApAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnJlYXBwbHkoKQog
ICAgIGlmICh0b3BMZXZlbCkgewogICAgICAgICB1cGRhdGVMYXlvdXQoKTsKICAgICAgICAgRWRp
dENvbW1hbmRQdHIgY21kKHRoaXMpOwotICAgICAgICBwYXJ0LT5yZWFwcGxpZWRFZGl0aW5nKGNt
ZCk7CisgICAgICAgIGZyYW1lLT5yZWFwcGxpZWRFZGl0aW5nKGNtZCk7CiAgICAgfQogfQogCkBA
IC0zNDYsNyArMzQ2LDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpFZGl0Q29t
bQogIAogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4KICAgICAvLyBTZWUgdGhp
cyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBpbmcg
c3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbklt
cGwgKnR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS0+cGFydCgpLT50eXBpbmdTdHlsZSgpOworICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpLT50eXBpbmdTdHlsZSgpOwogICAgIGlmICh0eXBpbmdTdHlsZSkKICAgICAgICAg
c3R5bGUtPm1lcmdlKHR5cGluZ1N0eWxlKTsKICAgICAKSW5kZXg6IGtodG1sL2todG1sX3BhcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtodG1sL2todG1sX3BhcnQuY3BwCShyZXZpc2lvbiAxMTk2MCkK
KysrIGtodG1sL2todG1sX3BhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzMDIgKzAsMCBA
QAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0gKgotICogQ29weXJp
Z2h0IChDKSAxOTk4LCAxOTk5IFRvcmJlbiBXZWlzIDx3ZWlzQGtkZS5vcmc+Ci0gKiAgICAgICAg
ICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCA8a25vbGxAa2RlLm9yZz4KLSAqICAgICAgICAg
ICAgICAgICAgICAgMTk5OSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4KLSAqICAg
ICAgICAgICAgICAgICAgICAgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4K
LSAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSA8MVN0ZWluQGdt
eC5kZT4KLSAqICAgICAgICAgICAgICAgICAgICAgMjAwMSBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCi0KLSNkZWZpbmUgUVRfTk9f
Q0xJUEJPQVJECi0jZGVmaW5lIFFUX05PX0RSQUdBTkREUk9QCi0KLSNpbmNsdWRlICJjc3MvY3Nz
aGVscGVyLmgiCi0jaW5jbHVkZSAiY3NzL2Nzc3Byb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJjc3Mv
Y3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgot
I2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcu
aCIKLSNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgotI2luY2x1ZGUgImVkaXRpbmcvaHRtbGVk
aXRpbmcuaCIKLSNpbmNsdWRlICJlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJlZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaCIKLSNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgotI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfYmFzZWltcGwu
aCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxf
aW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKLSNpbmNsdWRl
ICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmgiCi0jaW5jbHVkZSAibWlzYy9sb2FkZXIu
aCIKLSNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAieG1sL2RvbTJf
cmFuZ2VpbXBsLmgiCi0jaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJ4bWwv
eG1sX3Rva2VuaXplci5oIgotI2lmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
LSNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsK
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLSNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNp
bmNsdWRlICJlY21hL2tqc19wcm94eS5oIgotI2luY2x1ZGUgImVjbWEveG1saHR0cHJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJraHRtbF9zZXR0aW5ncy5oIgotI2luY2x1ZGUgImtodG1scGFydF9wLmgi
Ci0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0j
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRl
IDxhc3NlcnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGtzdGFuZGFyZGRp
cnMuaD4KLSNpbmNsdWRlIDxraW8vam9iLmg+Ci0jaW5jbHVkZSA8a2lvL2dsb2JhbC5oPgotI2lu
Y2x1ZGUgPGtkZWJ1Zy5oPgotI2luY2x1ZGUgPGtsb2NhbGUuaD4KLSNpbmNsdWRlIDxrZ2xvYmFs
c2V0dGluZ3MuaD4KLQotI2luY2x1ZGUgPHFmaWxlLmg+Ci0jaW5jbHVkZSA8cXB0cmxpc3QuaD4K
LQotI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIERPTTo6RXZlbnROYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBraHRtbDsKLQotdXNpbmcgS1Bh
cnRzOjpCcm93c2VySW50ZXJmYWNlOwotCi1jb25zdCBpbnQgQ0FSRVRfQkxJTktfRlJFUVVFTkNZ
ID0gNTAwOwotCi1uYW1lc3BhY2Uga2h0bWwgewotICAgIGNsYXNzIFBhcnRTdHlsZVNoZWV0TG9h
ZGVyIDogcHVibGljIENhY2hlZE9iamVjdENsaWVudAotICAgIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFBhcnRTdHlsZVNoZWV0TG9hZGVyKEtIVE1MUGFydCAqcGFydCwgRE9NOjpET01TdHJpbmcg
dXJsLCBEb2NMb2FkZXIqIGRsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3BhcnQgPSBwYXJ0
OwotICAgICAgICAgICAgbV9jYWNoZWRTaGVldCA9IENhY2hlOjpyZXF1ZXN0U3R5bGVTaGVldChk
bCwgdXJsICk7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKLQkJbV9jYWNoZWRTaGVl
dC0+cmVmKCB0aGlzICk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+UGFydFN0eWxlU2hl
ZXRMb2FkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIG1fY2FjaGVkU2hlZXQgKSBt
X2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0U3R5bGVTaGVldChjb25zdCBET006OkRPTVN0cmluZyYsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nICZzaGVldCkKLSAgICAgICAgewotICAgICAgICAgIGlmICggbV9wYXJ0ICkKLSAgICAgICAg
ICAgIG1fcGFydC0+c2V0VXNlclN0eWxlU2hlZXQoIHNoZWV0LnFzdHJpbmcoKSApOwotCi0gICAg
ICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAgfQotICAgICAgICBRR3VhcmRlZFB0cjxLSFRN
TFBhcnQ+IG1fcGFydDsKLSAgICAgICAga2h0bWw6OkNhY2hlZENTU1N0eWxlU2hlZXQgKm1fY2Fj
aGVkU2hlZXQ7Ci0gICAgfTsKLX0KLQotRnJhbWVMaXN0OjpJdGVyYXRvciBGcmFtZUxpc3Q6OmZp
bmQoIGNvbnN0IFFTdHJpbmcgJm5hbWUgKQotewotICAgIEl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsK
LSAgICBJdGVyYXRvciBlID0gZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQhPWU7ICsraXQgKQotICAg
ICAgICBpZiAoICgqaXQpLm1fbmFtZT09bmFtZSApCi0gICAgICAgICAgICBicmVhazsKLQotICAg
IHJldHVybiBpdDsKLX0KLQotS0hUTUxQYXJ0OjpLSFRNTFBhcnQoUVdpZGdldCAqcGFyZW50V2lk
Z2V0LCBjb25zdCBjaGFyICp3aWRnZXRuYW1lLCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIg
Km5hbWUpCi0gICAgOiBLUGFydHM6OlJlYWRPbmx5UGFydChwYXJlbnQsIG5hbWUpLCBkKDApCi17
Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0Ojppbml0KEtIVE1MVmlldyAqdmlldykKLXsKLSAgQXRvbWlj
U3RyaW5nOjppbml0KCk7Ci0gIFF1YWxpZmllZE5hbWU6OmluaXQoKTsKLSAgRXZlbnROYW1lczo6
aW5pdCgpOwotICBIVE1MTmFtZXM6OmluaXQoKTsgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRo
aXMgaGFwcGVuIG9ubHkgd2hlbiBIVE1MIGlzIHVzZWQuCi0jaWYgU1ZHX1NVUFBPUlQKLSAgS1NW
Rzo6U1ZHTmFtZXM6OmluaXQoKTsKLSAgWExpbmtOYW1lczo6aW5pdCgpOwotI2VuZGlmCi0KLSAg
ZnJhbWVDb3VudCA9IDA7Ci0KLSAgZCA9IG5ldyBLSFRNTFBhcnRQcml2YXRlKHBhcmVudCgpKTsK
LQotICBkLT5tX3ZpZXcgPSB2aWV3OwotICBzZXRXaWRnZXQoIGQtPm1fdmlldyApOwotICAKLSAg
ZC0+bV9leHRlbnNpb24gPSBuZXcgS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiggdGhpcyApOwot
Ci0gIGQtPm1fYlNlY3VyaXR5SW5RdWVzdGlvbiA9IGZhbHNlOwotICBkLT5tX2JNb3VzZVByZXNz
ZWQgPSBmYWxzZTsKLQotICAvLyBUaGUgamF2YSwgamF2YXNjcmlwdCwgYW5kIHBsdWdpbiBzZXR0
aW5ncyB3aWxsIGJlIHNldCBhZnRlciB0aGUgc2V0dGluZ3MKLSAgLy8gaGF2ZSBiZWVuIGluaXRp
YWxpemVkLgotICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IHRydWU7Ci0gIGQtPm1fYkphdmFFbmFi
bGVkID0gdHJ1ZTsKLSAgZC0+bV9iUGx1Z2luc0VuYWJsZWQgPSB0cnVlOwotCi0gIGNvbm5lY3Qo
IGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIFNJR05BTCggcmVxdWVzdFN0YXJ0ZWQoIGtodG1sOjpE
b2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVkT2JqZWN0KiApICksCi0gICAgICAgICAgIHRoaXMsIFNM
T1QoIHNsb3RMb2FkZXJSZXF1ZXN0U3RhcnRlZCgga2h0bWw6OkRvY0xvYWRlciosIGtodG1sOjpD
YWNoZWRPYmplY3QqICkgKSApOwotICBjb25uZWN0KCBraHRtbDo6Q2FjaGU6OmxvYWRlcigpLCBT
SUdOQUwoIHJlcXVlc3REb25lKCBraHRtbDo6RG9jTG9hZGVyKiwga2h0bWw6OkNhY2hlZE9iamVj
dCAqKSApLAotICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90TG9hZGVyUmVxdWVzdERvbmUoIGto
dG1sOjpEb2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVkT2JqZWN0ICopICkgKTsKLSAgY29ubmVjdCgg
a2h0bWw6OkNhY2hlOjpsb2FkZXIoKSwgU0lHTkFMKCByZXF1ZXN0RmFpbGVkKCBraHRtbDo6RG9j
TG9hZGVyKiwga2h0bWw6OkNhY2hlZE9iamVjdCAqKSApLAotICAgICAgICAgICB0aGlzLCBTTE9U
KCBzbG90TG9hZGVyUmVxdWVzdERvbmUoIGtodG1sOjpEb2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVk
T2JqZWN0ICopICkgKTsKLQotICBjb25uZWN0KCAmZC0+bV9yZWRpcmVjdGlvblRpbWVyLCBTSUdO
QUwoIHRpbWVvdXQoKSApLAotICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90UmVkaXJlY3QoKSAp
ICk7Ci0KLSAgY29ubmVjdCgmZC0+bV9saWZlU3VwcG9ydFRpbWVyLCBTSUdOQUwodGltZW91dCgp
KSwgdGhpcywgU0xPVChzbG90RW5kTGlmZVN1cHBvcnQoKSkpOwotfQotCi1LSFRNTFBhcnQ6On5L
SFRNTFBhcnQoKQotewotICBzdG9wQXV0b1Njcm9sbCgpOwotICBjYW5jZWxSZWRpcmVjdGlvbigp
OwotCi0gIGlmICghZC0+bV9iQ29tcGxldGUpCi0gICAgY2xvc2VVUkwoKTsKLQotICBkaXNjb25u
ZWN0KCBraHRtbDo6Q2FjaGU6OmxvYWRlcigpLCBTSUdOQUwoIHJlcXVlc3RTdGFydGVkKCBraHRt
bDo6RG9jTG9hZGVyKiwga2h0bWw6OkNhY2hlZE9iamVjdCogKSApLAotICAgICAgICAgICB0aGlz
LCBTTE9UKCBzbG90TG9hZGVyUmVxdWVzdFN0YXJ0ZWQoIGtodG1sOjpEb2NMb2FkZXIqLCBraHRt
bDo6Q2FjaGVkT2JqZWN0KiApICkgKTsKLSAgZGlzY29ubmVjdCgga2h0bWw6OkNhY2hlOjpsb2Fk
ZXIoKSwgU0lHTkFMKCByZXF1ZXN0RG9uZSgga2h0bWw6OkRvY0xvYWRlciosIGtodG1sOjpDYWNo
ZWRPYmplY3QgKikgKSwKLSAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdExvYWRlclJlcXVlc3RE
b25lKCBraHRtbDo6RG9jTG9hZGVyKiwga2h0bWw6OkNhY2hlZE9iamVjdCAqKSApICk7Ci0gIGRp
c2Nvbm5lY3QoIGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIFNJR05BTCggcmVxdWVzdEZhaWxlZCgg
a2h0bWw6OkRvY0xvYWRlciosIGtodG1sOjpDYWNoZWRPYmplY3QgKikgKSwKLSAgICAgICAgICAg
dGhpcywgU0xPVCggc2xvdExvYWRlclJlcXVlc3REb25lKCBraHRtbDo6RG9jTG9hZGVyKiwga2h0
bWw6OkNhY2hlZE9iamVjdCAqKSApICk7Ci0KLSAgY2xlYXIoKTsKLQotICBpZiAoZC0+bV92aWV3
KSB7Ci0gICAgZC0+bV92aWV3LT5oaWRlKCk7Ci0gICAgZC0+bV92aWV3LT52aWV3cG9ydCgpLT5o
aWRlKCk7Ci0gICAgZC0+bV92aWV3LT5tX3BhcnQgPSAwOwotICB9Ci0gIAotICBkZWxldGUgZDsg
ZCA9IDA7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0OjpyZXN0b3JlVVJMKCBjb25zdCBLVVJMICZ1cmwg
KQotewotICBrZERlYnVnKCA2MDUwICkgPDwgIktIVE1MUGFydDo6cmVzdG9yZVVSTCAiIDw8IHVy
bC51cmwoKSA8PCBlbmRsOwotCi0gIGNhbmNlbFJlZGlyZWN0aW9uKCk7Ci0KLSAgLyoKLSAgICog
VGhhdCdzIG5vdCBhIGdvb2QgaWRlYSBhcyBpdCB3aWxsIGNhbGwgY2xvc2VVUkwoKSBvbiBhbGwK
LSAgICogY2hpbGQgZnJhbWVzLCBwcmV2ZW50aW5nIHRoZW0gZnJvbSBmdXJ0aGVyIGxvYWRpbmcu
IFRoaXMKLSAgICogbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gcmVzdG9yZVN0YXRlKCkgaW4gY2Fz
ZSBvZiBhIGZ1bGwgZnJhbWVzZXQKLSAgICogcmVzdG9yYWwsIGFuZCByZXN0b3JlU3RhdGUoKSBj
YWxscyBjbG9zZVVSTCgpIGJlZm9yZSByZXN0b3JpbmcKLSAgICogYW55d2F5LgotICBrZERlYnVn
KCA2MDUwICkgPDwgImNsb3Npbmcgb2xkIFVSTCIgPDwgZW5kbDsKLSAgY2xvc2VVUkwoKTsKLSAg
Ki8KLQotICBkLT5tX2JDb21wbGV0ZSA9IGZhbHNlOwotICBkLT5tX2JMb2FkRXZlbnRFbWl0dGVk
ID0gZmFsc2U7Ci0gIGQtPm1fd29ya2luZ1VSTCA9IHVybDsKLQotICAvLyBzZXQgdGhlIGphdmEo
c2NyaXB0KSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaG9zdC4KLSAgZC0+bV9iSlNj
cmlwdEVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKHVybC5ob3N0
KCkpOwotICBkLT5tX2JKYXZhRW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQo
dXJsLmhvc3QoKSk7Ci0gIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+aXNQ
bHVnaW5zRW5hYmxlZCh1cmwuaG9zdCgpKTsKLQotICBtX3VybCA9IHVybDsKLQotICBlbWl0IHN0
YXJ0ZWQoIDBMICk7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBLSFRNTFBhcnQ6OmRp
ZE9wZW5VUkwoY29uc3QgS1VSTCAmdXJsKQotewotICBrZERlYnVnKCA2MDUwICkgPDwgIktIVE1M
UGFydCgiIDw8IHRoaXMgPDwgIik6Om9wZW5VUkwgIiA8PCB1cmwudXJsKCkgPDwgZW5kbDsKLQot
ICBpZiAoZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9PSBsb2NhdGlvbkNoYW5nZVNjaGVkdWxl
ZER1cmluZ0xvYWQpIHsKLSAgICAvLyBXZSdyZSBhYm91dCB0byBnZXQgYSByZWRpcmVjdCB0aGF0
IGhhcHBlbmVkIGJlZm9yZSB0aGUgZG9jdW1lbnQgd2FzCi0gICAgLy8gY3JlYXRlZC4gIFRoaXMg
Y2FuIGhhcHBlbiB3aGVuIG9uZSBmcmFtZSBtYXkgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiBhIAot
ICAgIC8vIHNpYmxpbmcuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBjYW5jZWxSZWRp
cmVjdGlvbigpOwotICAKLSAgLy8gY2xlYXIgbGFzdCBlZGl0IGNvbW1hbmQKLSAgZC0+bV9sYXN0
RWRpdENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0cigpOwotICBLV1EodGhpcyktPmNsZWFyVW5kb1Jl
ZG9PcGVyYXRpb25zKCk7Ci0gIAotCi0gIEtQYXJ0czo6VVJMQXJncyBhcmdzKCBkLT5tX2V4dGVu
c2lvbi0+dXJsQXJncygpICk7Ci0KLQotICBpZiAoIWQtPm1fcmVzdG9yZWQpCi0gIHsKLSAgICBr
ZERlYnVnKCA2MDUwICkgPDwgImNsb3Npbmcgb2xkIFVSTCIgPDwgZW5kbDsKLSAgICBjbG9zZVVS
TCgpOwotICB9Ci0KLQotICBpZiAoZC0+bV9yZXN0b3JlZCkKLSAgICAgZC0+bV9jYWNoZVBvbGlj
eSA9IEtJTzo6Q0NfQ2FjaGU7Ci0gIGVsc2UgaWYgKGFyZ3MucmVsb2FkKQotICAgICBkLT5tX2Nh
Y2hlUG9saWN5ID0gS0lPOjpDQ19SZWZyZXNoOwotICBlbHNlCi0gICAgIGQtPm1fY2FjaGVQb2xp
Y3kgPSBLSU86OkNDX1ZlcmlmeTsKLQotICBpZiAoIGFyZ3MuZG9Qb3N0KCkgJiYgKHVybC5wcm90
b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSkgKQotICB7Ci0gICAgICBkLT5tX2pvYiA9IEtJTzo6
aHR0cF9wb3N0KCB1cmwsIGFyZ3MucG9zdERhdGEsIGZhbHNlICk7Ci0gICAgICBkLT5tX2pvYi0+
YWRkTWV0YURhdGEoImNvbnRlbnQtdHlwZSIsIGFyZ3MuY29udGVudFR5cGUoKSApOwotICB9Ci0g
IGVsc2UKLSAgewotICAgICAgZC0+bV9qb2IgPSBLSU86OmdldCggdXJsLCBmYWxzZSwgZmFsc2Ug
KTsKLSAgICAgIGQtPm1fam9iLT5hZGRNZXRhRGF0YSgiY2FjaGUiLCBLSU86OmdldENhY2hlQ29u
dHJvbFN0cmluZyhkLT5tX2NhY2hlUG9saWN5KSk7Ci0gIH0KLQotICBkLT5tX2pvYi0+YWRkTWV0
YURhdGEoYXJncy5tZXRhRGF0YSgpKTsKLQotICBjb25uZWN0KCBkLT5tX2pvYiwgU0lHTkFMKCBy
ZXN1bHQoIEtJTzo6Sm9iICogKSApLAotICAgICAgICAgICBTTE9UKCBzbG90RmluaXNoZWQoIEtJ
Tzo6Sm9iICogKSApICk7Ci0KLSAgY29ubmVjdCggZC0+bV9qb2IsIFNJR05BTChyZWRpcmVjdGlv
bihLSU86OkpvYiosIGNvbnN0IEtVUkwmKSApLAotICAgICAgICAgICBTTE9UKCBzbG90UmVkaXJl
Y3Rpb24oS0lPOjpKb2IqLGNvbnN0IEtVUkwmKSApICk7Ci0KLSAgZC0+bV9iQ29tcGxldGUgPSBm
YWxzZTsKLSAgZC0+bV9iTG9hZGluZ01haW5SZXNvdXJjZSA9IHRydWU7Ci0gIGQtPm1fYkxvYWRF
dmVudEVtaXR0ZWQgPSBmYWxzZTsKLQotICAvLyBkZWxldGUgb2xkIHN0YXR1cyBiYXIgbXNnJ3Mg
ZnJvbSBranMgKGlmIGl0IF93YXNfIGFjdGl2YXRlZCBvbiBsYXN0IFVSTCkKLSAgaWYoIGQtPm1f
YkpTY3JpcHRFbmFibGVkICkKLSAgewotICAgICBkLT5tX2tqc1N0YXR1c0JhclRleHQgPSBRU3Ry
aW5nOjpudWxsOwotICAgICBkLT5tX2tqc0RlZmF1bHRTdGF0dXNCYXJUZXh0ID0gUVN0cmluZzo6
bnVsbDsKLSAgfQotCi0gIC8vIHNldCB0aGUgamF2YXNjcmlwdCBmbGFncyBhY2NvcmRpbmcgdG8g
dGhlIGN1cnJlbnQgdXJsCi0gIGQtPm1fYkphdmFFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+aXNK
YXZhRW5hYmxlZCh1cmwuaG9zdCgpKTsKLSAgZC0+bV9iUGx1Z2luc0VuYWJsZWQgPSBkLT5tX3Nl
dHRpbmdzLT5pc1BsdWdpbnNFbmFibGVkKHVybC5ob3N0KCkpOwotCi0gIC8vIGluaXRpYWxpemlu
ZyBtX3VybCB0byB0aGUgbmV3IHVybCBicmVha3MgcmVsYXRpdmUgbGlua3Mgd2hlbiBvcGVuaW5n
IHN1Y2ggYSBsaW5rIGFmdGVyIHRoaXMgY2FsbCBhbmQgX2JlZm9yZV8gYmVnaW4oKSBpcyBjYWxs
ZWQgKHdoZW4gdGhlIGZpcnN0Ci0gIC8vIGRhdGEgYXJyaXZlcykgKFNpbW9uKQotICBtX3VybCA9
IHVybDsKLSAgaWYobV91cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJodHRwIikgJiYgIW1fdXJs
Lmhvc3QoKS5pc0VtcHR5KCkgJiYgbV91cmwucGF0aCgpLmlzRW1wdHkoKSkKLSAgICBtX3VybC5z
ZXRQYXRoKCIvIik7Ci0gIC8vIGNvcHkgdG8gbV93b3JraW5nVVJMIGFmdGVyIGZpeGluZyBtX3Vy
bCBhYm92ZQotICBkLT5tX3dvcmtpbmdVUkwgPSBtX3VybDsKLQotICBrZERlYnVnKCA2MDUwICkg
PDwgIktIVE1MUGFydDo6b3BlblVSTCBub3cgKGJlZm9yZSBzdGFydGVkKSBtX3VybCA9ICIgPDwg
bV91cmwudXJsKCkgPDwgZW5kbDsKLQotICBjb25uZWN0KCBkLT5tX2pvYiwgU0lHTkFMKCBzcGVl
ZCggS0lPOjpKb2IqLCB1bnNpZ25lZCBsb25nICkgKSwKLSAgICAgICAgICAgdGhpcywgU0xPVCgg
c2xvdEpvYlNwZWVkKCBLSU86OkpvYiosIHVuc2lnbmVkIGxvbmcgKSApICk7Ci0KLSAgY29ubmVj
dCggZC0+bV9qb2IsIFNJR05BTCggcGVyY2VudCggS0lPOjpKb2IqLCB1bnNpZ25lZCBsb25nICkg
KSwKLSAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdEpvYlBlcmNlbnQoIEtJTzo6Sm9iKiwgdW5z
aWduZWQgbG9uZyApICkgKTsKLQotICBlbWl0IHN0YXJ0ZWQoIDBMICk7Ci0KLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpkaWRFeHBsaWNpdE9wZW4oKQotewotICBkLT5tX2JD
b21wbGV0ZSA9IGZhbHNlOwotICBkLT5tX2JMb2FkRXZlbnRFbWl0dGVkID0gZmFsc2U7Ci0gICAg
Ci0gIC8vIFByZXZlbnQgd2luZG93Lm9wZW4odXJsKSAtLSBlZyB3aW5kb3cub3BlbigiYWJvdXQ6
YmxhbmsiKSAtLSBmcm9tIGJsb3dpbmcgYXdheSByZXN1bHRzCi0gIC8vIGZyb20gYSBzdWJzZXF1
ZW50IHdpbmRvdy5kb2N1bWVudC5vcGVuIC8gd2luZG93LmRvY3VtZW50LndyaXRlIGNhbGwuIAot
ICAvLyBDYW5jZWxsaW5nIHJlZGlyZWN0aW9uIGhlcmUgd29ya3MgZm9yIGFsbCBjYXNlcyBiZWNh
dXNlIGRvY3VtZW50Lm9wZW4gCi0gIC8vIGltcGxpY2l0bHkgcHJlY2VkZXMgZG9jdW1lbnQud3Jp
dGUuCi0gIGNhbmNlbFJlZGlyZWN0aW9uKCk7IAotfQotCi12b2lkIEtIVE1MUGFydDo6c3RvcExv
YWRpbmcoYm9vbCBzZW5kVW5sb2FkKQotewotICBpZiAoZC0+bV9kb2MgJiYgZC0+bV9kb2MtPnRv
a2VuaXplcigpKQotICAgIGQtPm1fZG9jLT50b2tlbml6ZXIoKS0+c3RvcFBhcnNpbmcoKTsKLSAg
ICAKLSAgaWYgKCBkLT5tX2pvYiApCi0gIHsKLSAgICBkLT5tX2pvYi0+a2lsbCgpOwotICAgIGQt
Pm1fam9iID0gMDsKLSAgfQotCi0gIGlmIChzZW5kVW5sb2FkKSB7Ci0gICAgaWYgKCBkLT5tX2Rv
YyAmJiBkLT5tX2RvYy0+aXNIVE1MRG9jdW1lbnQoKSApIHsKLSAgICAgIEhUTUxEb2N1bWVudElt
cGwqIGhkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oIGQtPm1fZG9jICk7Ci0g
ICAgICAKLSAgICAgIGlmICggaGRvYy0+Ym9keSgpICYmIGQtPm1fYkxvYWRFdmVudEVtaXR0ZWQg
JiYgIWQtPm1fYlVubG9hZEV2ZW50RW1pdHRlZCApIHsKLSAgICAgICAgaGRvYy0+Ym9keSgpLT5k
aXNwYXRjaFdpbmRvd0V2ZW50KCB1bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlICk7Ci0gICAgICAg
IGlmICggZC0+bV9kb2MgKQotICAgICAgICAgIGQtPm1fZG9jLT51cGRhdGVSZW5kZXJpbmcoKTsK
LSAgICAgICAgZC0+bV9iVW5sb2FkRXZlbnRFbWl0dGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaWYgKGQtPm1fZG9jICYmICFkLT5tX2RvYy0+aW5QYWdlQ2FjaGUoKSkKLSAg
ICAgIGQtPm1fZG9jLT5yZW1vdmVBbGxFdmVudExpc3RlbmVyc0Zyb21BbGxOb2RlcygpOwotICB9
Ci0KLSAgZC0+bV9iQ29tcGxldGUgPSB0cnVlOyAvLyB0byBhdm9pZCBlbWl0dGluZyBjb21wbGV0
ZWQoKSBpbiBzbG90RmluaXNoZWRQYXJzaW5nKCkgKERhdmlkKQotICBkLT5tX2JMb2FkaW5nTWFp
blJlc291cmNlID0gZmFsc2U7Ci0gIGQtPm1fYkxvYWRFdmVudEVtaXR0ZWQgPSB0cnVlOyAvLyBk
b24ndCB3YW50IHRoYXQgb25lIGVpdGhlcgotICBkLT5tX2NhY2hlUG9saWN5ID0gS0lPOjpDQ19W
ZXJpZnk7IC8vIFdoeSBoZXJlPwotCi0gIGlmICggZC0+bV9kb2MgJiYgZC0+bV9kb2MtPnBhcnNp
bmcoKSApCi0gIHsKLSAgICBrZERlYnVnKCA2MDUwICkgPDwgIiB3YXMgc3RpbGwgcGFyc2luZy4u
LiBjYWxsaW5nIGVuZCAiIDw8IGVuZGw7Ci0gICAgc2xvdEZpbmlzaGVkUGFyc2luZygpOwotICAg
IGQtPm1fZG9jLT5zZXRQYXJzaW5nKGZhbHNlKTsKLSAgfQotICAKLSAgZC0+bV93b3JraW5nVVJM
ID0gS1VSTCgpOwotCi0gIGlmIChEb2N1bWVudEltcGwgKmRvYyA9IGQtPm1fZG9jKSB7Ci0gICAg
aWYgKERvY0xvYWRlciAqZG9jTG9hZGVyID0gZG9jLT5kb2NMb2FkZXIoKSkKLSAgICAgIGtodG1s
OjpDYWNoZTo6bG9hZGVyKCktPmNhbmNlbFJlcXVlc3RzKGRvY0xvYWRlcik7Ci0gICAgS0pTOjpY
TUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoZG9jKTsKLSAgfQotCi0gIC8vIHRlbGwgYWxs
IHN1YmZyYW1lcyB0byBzdG9wIGFzIHdlbGwKLSAgQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFt
ZXMuYmVnaW4oKTsKLSAgQ29uc3RGcmFtZUl0IGVuZCA9IGQtPm1fZnJhbWVzLmVuZCgpOwotICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0ICkgewotICAgICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKnBh
cnQgPSAoKml0KS5tX3BhcnQ7Ci0gICAgICBpZiAocGFydCkgewotICAgICAgICAgIEtIVE1MUGFy
dCAqa2h0bWxfcGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPihwYXJ0KTsKLQotICAgICAg
ICAgIGlmIChraHRtbF9wYXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCi0gICAgICAgICAgICAg
IGtodG1sX3BhcnQtPnN0b3BMb2FkaW5nKHNlbmRVbmxvYWQpOwotICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgcGFydC0+Y2xvc2VVUkwoKTsKLSAgICAgIH0KLSAgfQotCi0gIGQtPm1fYlBl
bmRpbmdDaGlsZFJlZGlyZWN0aW9uID0gZmFsc2U7Ci0KLSAgLy8gU3RvcCBhbnkgc3RhcnRlZCBy
ZWRpcmVjdGlvbnMgYXMgd2VsbCEhIChEQSkKLSAgY2FuY2VsUmVkaXJlY3Rpb24oKTsKLX0KLQot
Ym9vbCBLSFRNTFBhcnQ6OmNsb3NlVVJMKCkKLXsgICAgCi0gIHN0b3BMb2FkaW5nKHRydWUpOwot
Ci0gIHJldHVybiB0cnVlOwotfQotCi1LUGFydHM6OkJyb3dzZXJFeHRlbnNpb24gKktIVE1MUGFy
dDo6YnJvd3NlckV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gIHJldHVybiBkLT5tX2V4dGVuc2lvbjsK
LX0KLQotS0hUTUxWaWV3ICpLSFRNTFBhcnQ6OnZpZXcoKSBjb25zdAotewotICByZXR1cm4gZC0+
bV92aWV3OwotfQotCi12b2lkIEtIVE1MUGFydDo6c2V0SlNjcmlwdEVuYWJsZWQoIGJvb2wgZW5h
YmxlICkKLXsKLSAgaWYgKCAhZW5hYmxlICYmIGpTY3JpcHRFbmFibGVkKCkgJiYgZC0+bV9qc2Ny
aXB0ICkgewotICAgIGQtPm1fanNjcmlwdC0+Y2xlYXIoKTsKLSAgfQotICBkLT5tX2JKU2NyaXB0
Rm9yY2UgPSBlbmFibGU7Ci0gIGQtPm1fYkpTY3JpcHRPdmVycmlkZSA9IHRydWU7Ci19Ci0KLWJv
b2wgS0hUTUxQYXJ0OjpqU2NyaXB0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gIGlmICggZC0+bV9iSlNj
cmlwdE92ZXJyaWRlICkKLSAgICAgIHJldHVybiBkLT5tX2JKU2NyaXB0Rm9yY2U7Ci0gIHJldHVy
biBkLT5tX2JKU2NyaXB0RW5hYmxlZDsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNldE1ldGFSZWZy
ZXNoRW5hYmxlZCggYm9vbCBlbmFibGUgKQotewotICBkLT5tX21ldGFSZWZyZXNoRW5hYmxlZCA9
IGVuYWJsZTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6Om1ldGFSZWZyZXNoRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gIHJldHVybiBkLT5tX21ldGFSZWZyZXNoRW5hYmxlZDsKLX0KLQotS0pTUHJveHlJbXBs
ICpLSFRNTFBhcnQ6OmpTY3JpcHQoKQotewotICAgIGlmICghalNjcmlwdEVuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWQtPm1fanNjcmlwdCkKLSAgICAgICAgZC0+bV9q
c2NyaXB0ID0gbmV3IEtKU1Byb3h5SW1wbCh0aGlzKTsKLQotICAgIHJldHVybiBkLT5tX2pzY3Jp
cHQ7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpyZXBsYWNlQ29udGVudHNXaXRoU2NyaXB0UmVzdWx0
KCBjb25zdCBLVVJMICZ1cmwgKQotewotICBRU3RyaW5nIHNjcmlwdCA9IEtVUkw6OmRlY29kZV9z
dHJpbmcodXJsLnVybCgpLm1pZChzdHJsZW4oImphdmFzY3JpcHQ6IikpKTsKLSAgUVZhcmlhbnQg
cmV0ID0gZXhlY3V0ZVNjcmlwdChzY3JpcHQpOwotICAKLSAgaWYgKHJldC50eXBlKCkgPT0gUVZh
cmlhbnQ6OlN0cmluZykgewotICAgIGJlZ2luKCk7Ci0gICAgd3JpdGUocmV0LmFzU3RyaW5nKCkp
OwotICAgIGVuZCgpOwotICB9Ci19Ci0KLVFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlw
dCggY29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUgKQotewotICAg
IHJldHVybiBleGVjdXRlU2NyaXB0KCAwLCBzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUgKTsKLX0K
LQotUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBET006Ok5vZGVJbXBsICpuLCBj
b25zdCBRU3RyaW5nICZzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSApCi17Ci0gIEtKU1By
b3h5SW1wbCAqcHJveHkgPSBqU2NyaXB0KCk7Ci0KLSAgaWYgKCFwcm94eSkKLSAgICByZXR1cm4g
UVZhcmlhbnQoKTsKLSAgZC0+bV9ydW5uaW5nU2NyaXB0cysrOwotICAvLyBJZiBmb3JjZVVzZXJH
ZXN0dXJlIGlzIHRydWUsIHRoZW4gbWFrZSB0aGUgc2NyaXB0IGludGVycHJldGVyCi0gIC8vIHRy
ZWF0IGl0IGFzIGlmIHRyaWdnZXJlZCBieSBhIHVzZXIgZ2VzdHVyZSBldmVuIGlmIHRoZXJlIGlz
IG5vCi0gIC8vIGN1cnJlbnQgRE9NIGV2ZW50IGJlaW5nIHByb2Nlc3NlZC4KLSAgUVZhcmlhbnQg
cmV0ID0gcHJveHktPmV2YWx1YXRlKCBmb3JjZVVzZXJHZXN0dXJlID8gUVN0cmluZzo6bnVsbCA6
IG1fdXJsLnVybCgpLCAwLCBzY3JpcHQsIG4gKTsKLSAgZC0+bV9ydW5uaW5nU2NyaXB0cy0tOwot
ICBpZiAoIWQtPm1fcnVubmluZ1NjcmlwdHMgJiYgZC0+bV9kb2MgJiYgIWQtPm1fZG9jLT5wYXJz
aW5nKCkgJiYgZC0+bV9zdWJtaXRGb3JtICkKLSAgICAgIHN1Ym1pdEZvcm1BZ2FpbigpOwotICAg
IERvY3VtZW50SW1wbDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7Ci0KLSAgcmV0dXJuIHJl
dDsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OnNjaGVkdWxlU2NyaXB0KERPTTo6Tm9kZUltcGwgKm4s
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICAvL2tkRGVidWcoNjA1MCkgPDwgIktIVE1M
UGFydDo6c2NoZWR1bGVTY3JpcHQgIjw8IHNjcmlwdCA8PCBlbmRsOwotCi0gICAgZC0+c2NoZWR1
bGVkU2NyaXB0ID0gc2NyaXB0OwotICAgIGQtPnNjaGVkdWxlZFNjcmlwdE5vZGUgPSBuOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjaGVkdWxl
ZFNjcmlwdCgpCi17Ci0gIGlmKCBkLT5zY2hlZHVsZWRTY3JpcHQuaXNFbXB0eSgpICkKLSAgICBy
ZXR1cm4gUVZhcmlhbnQoKTsKLQotICAvL2tkRGVidWcoNjA1MCkgPDwgImV4ZWN1dGluZyBkZWxh
eWVkICIgPDwgZC0+c2NoZWR1bGVkU2NyaXB0IDw8IGVuZGw7Ci0KLSAgUVZhcmlhbnQgcmV0ID0g
ZXhlY3V0ZVNjcmlwdCggZC0+c2NoZWR1bGVkU2NyaXB0Tm9kZS5nZXQoKSwgZC0+c2NoZWR1bGVk
U2NyaXB0ICk7Ci0gIGQtPnNjaGVkdWxlZFNjcmlwdCA9IFFTdHJpbmcoKTsKLSAgZC0+c2NoZWR1
bGVkU2NyaXB0Tm9kZSA9IDA7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6
OnNldEphdmFFbmFibGVkKCBib29sIGVuYWJsZSApCi17Ci0gIGQtPm1fYkphdmFGb3JjZSA9IGVu
YWJsZTsKLSAgZC0+bV9iSmF2YU92ZXJyaWRlID0gdHJ1ZTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6
OmphdmFFbmFibGVkKCkgY29uc3QKLXsKLSNpZm5kZWYgUV9XU19RV1MKLSAgaWYoIGQtPm1fYkph
dmFPdmVycmlkZSApCi0gICAgICByZXR1cm4gZC0+bV9iSmF2YUZvcmNlOwotICByZXR1cm4gZC0+
bV9iSmF2YUVuYWJsZWQ7Ci0jZWxzZQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBLSFRNTFBhcnQ6OnNldFBsdWdpbnNFbmFibGVkKCBib29sIGVuYWJsZSApCi17Ci0gIGQtPm1f
YlBsdWdpbnNGb3JjZSA9IGVuYWJsZTsKLSAgZC0+bV9iUGx1Z2luc092ZXJyaWRlID0gdHJ1ZTsK
LX0KLQotYm9vbCBLSFRNTFBhcnQ6OnBsdWdpbnNFbmFibGVkKCkgY29uc3QKLXsKLSAgaWYgKCBk
LT5tX2JQbHVnaW5zT3ZlcnJpZGUgKQotICAgICAgcmV0dXJuIGQtPm1fYlBsdWdpbnNGb3JjZTsK
LSAgcmV0dXJuIGQtPm1fYlBsdWdpbnNFbmFibGVkOwotfQotCi0KLXZvaWQgS0hUTUxQYXJ0Ojpz
bG90RGVidWdET01UcmVlKCkKLXsKLSAgaWYgKCBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+Zmlyc3RD
aGlsZCgpICkKLSAgICBxRGVidWcoIiVzIiwgY3JlYXRlTWFya3VwKGQtPm1fZG9jLT5maXJzdENo
aWxkKCkpLmxhdGluMSgpKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3REZWJ1Z1JlbmRlclRy
ZWUoKQotewotI2lmbmRlZiBOREVCVUcKLSAgaWYgKCBkLT5tX2RvYyApCi0gICAgZC0+bV9kb2Mt
PnJlbmRlcmVyKCktPnByaW50VHJlZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgS0hUTUxQYXJ0Ojpz
ZXRBdXRvbG9hZEltYWdlcyggYm9vbCBlbmFibGUgKQotewotICBpZiAoIGQtPm1fZG9jICYmIGQt
Pm1fZG9jLT5kb2NMb2FkZXIoKS0+YXV0b2xvYWRJbWFnZXMoKSA9PSBlbmFibGUgKQotICAgIHJl
dHVybjsKLQotICBpZiAoIGQtPm1fZG9jICkKLSAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNl
dEF1dG9sb2FkSW1hZ2VzKCBlbmFibGUgKTsKLQotfQotCi1ib29sIEtIVE1MUGFydDo6YXV0b2xv
YWRJbWFnZXMoKSBjb25zdAotewotICBpZiAoIGQtPm1fZG9jICkKLSAgICByZXR1cm4gZC0+bV9k
b2MtPmRvY0xvYWRlcigpLT5hdXRvbG9hZEltYWdlcygpOwotCi0gIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEtIVE1MUGFydDo6Y2xlYXIoKQotewotICBpZiAoIGQtPm1fYkNsZWFyZWQgKQotICAg
IHJldHVybjsKLSAgZC0+bV9iQ2xlYXJlZCA9IHRydWU7Ci0KLSAgZC0+bV9iQ2xlYXJpbmcgPSB0
cnVlOwotCi0KLSAgZC0+bV9tb3VzZVByZXNzTm9kZSA9IDA7Ci0KLQotICBpZiAoIGQtPm1fZG9j
ICkKLSAgICBkLT5tX2RvYy0+ZGV0YWNoKCk7Ci0KLSAgLy8gTW92aW5nIHBhc3QgZG9jIHNvIHRo
YXQgb25VbmxvYWQgd29ya3MuCi0gIGlmICggZC0+bV9qc2NyaXB0ICkKLSAgICBkLT5tX2pzY3Jp
cHQtPmNsZWFyKCk7Ci0KLSAgaWYgKCBkLT5tX3ZpZXcgKQotICAgIGQtPm1fdmlldy0+Y2xlYXIo
KTsKLQotICAvLyBkbyBub3QgZGVyZWZlcmVuY2UgdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUganNj
cmlwdCBhbmQgdmlldyBhcmUgY2xlYXJlZCwgYXMgc29tZSBkZXN0cnVjdG9ycwotICAvLyBtaWdo
dCBzdGlsbCB0cnkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC4KLSAgaWYgKCBkLT5tX2RvYyApCi0g
ICAgZC0+bV9kb2MtPmRlcmVmKCk7Ci0gIGQtPm1fZG9jID0gMDsKLQotICBkLT5tX2RlY29kZXIg
PSAwOwotCi0gIHsKLSAgICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdpbigpOwot
ICAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgICBmb3IoOyBpdCAh
PSBlbmQ7ICsraXQgKQotICAgIHsKLSAgICAgIGlmICggKCppdCkubV9wYXJ0ICkKLSAgICAgIHsK
LSAgICAgICAgZGlzY29ubmVjdENoaWxkKCYqaXQpOwotICAgICAgICAoKml0KS5tX3BhcnQtPmRl
cmVmKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGQtPm1fZnJhbWVzLmNsZWFyKCk7Ci0KLSAg
ewotICAgIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fb2JqZWN0cy5iZWdpbigpOwotICAgIENvbnN0
RnJhbWVJdCBlbmQgPSBkLT5tX29iamVjdHMuZW5kKCk7Ci0gICAgZm9yKDsgaXQgIT0gZW5kOyAr
K2l0ICkKLSAgICB7Ci0gICAgICBpZiAoICgqaXQpLm1fcGFydCApCi0gICAgICB7Ci0gICAgICAg
ICgqaXQpLm1fcGFydC0+ZGVyZWYoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZC0+bV9vYmpl
Y3RzLmNsZWFyKCk7Ci0KLSAgZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9IG5vUmVkaXJlY3Rp
b25TY2hlZHVsZWQ7Ci0gIGQtPm1fZGVsYXlSZWRpcmVjdCA9IDA7Ci0gIGQtPm1fcmVkaXJlY3RV
UkwgPSBRU3RyaW5nOjpudWxsOwotICBkLT5tX3JlZGlyZWN0UmVmZXJyZXIgPSBRU3RyaW5nOjpu
dWxsOwotICBkLT5tX3JlZGlyZWN0TG9ja0hpc3RvcnkgPSB0cnVlOwotICBkLT5tX3JlZGlyZWN0
VXNlckdlc3R1cmUgPSBmYWxzZTsKLSAgZC0+bV9iSFRUUFJlZnJlc2ggPSBmYWxzZTsKLSAgZC0+
bV9iQ2xlYXJpbmcgPSBmYWxzZTsKLSAgZC0+bV9mcmFtZU5hbWVJZCA9IDE7Ci0gIGQtPm1fYkZp
cnN0RGF0YSA9IHRydWU7Ci0KLSAgZC0+bV9iTW91c2VQcmVzc2VkID0gZmFsc2U7Ci0KLSNpZm5k
ZWYgUVRfTk9fQ0xJUEJPQVJECi0gIGNvbm5lY3QoIGthcHAtPmNsaXBib2FyZCgpLCBTSUdOQUwo
IHNlbGVjdGlvbkNoYW5nZWQoKSksIFNMT1QoIHNsb3RDbGVhclNlbGVjdGlvbigpKSk7Ci0jZW5k
aWYKLQotCi0gIGlmICggIWQtPm1faGF2ZUVuY29kaW5nICkKLSAgICBkLT5tX2VuY29kaW5nID0g
UVN0cmluZzo6bnVsbDsKLSNpZmRlZiBTUEVFRF9ERUJVRwotICBkLT5tX3BhcnNldGltZS5yZXN0
YXJ0KCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBLSFRNTFBhcnQ6Om9wZW5GaWxlKCkKLXsKLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLURPTTo6RG9jdW1lbnRJbXBsICpLSFRNTFBhcnQ6OnhtbERvY0ltcGwo
KSBjb25zdAotewotICAgIGlmICggZCApCi0gICAgICAgIHJldHVybiBkLT5tX2RvYzsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnJlcGxhY2VEb2NJbXBsKERvY3VtZW50SW1w
bCogbmV3RG9jKQotewotICAgIGlmIChkKSB7Ci0gICAgICAgIGlmIChkLT5tX2RvYykgewotICAg
ICAgICAgICAgZC0+bV9kb2MtPmRldGFjaCgpOwotICAgICAgICAgICAgZC0+bV9kb2MtPmRlcmVm
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZC0+bV9kb2MgPSBuZXdEb2M7Ci0gICAgICAgIGlmIChu
ZXdEb2MpIHsKLSAgICAgICAgICAgIG5ld0RvYy0+cmVmKCk7Ci0gICAgICAgICAgICBuZXdEb2Mt
PmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKmJvb2wgS0hUTUxQYXJ0Ojppc1NT
TEluVXNlKCkgY29uc3QKLXsKLSAgcmV0dXJuIGQtPm1fc3NsX2luX3VzZTsKLX0qLwotCi12b2lk
IEtIVE1MUGFydDo6cmVjZWl2ZWRGaXJzdERhdGEoKQotewotICAgIC8vIExlYXZlIGluZGVudGVk
IG9uZSBleHRyYSBmb3IgZWFzaWVyIG1lcmdpbmcuCi0gICAgCi0gICAgICAvL2tkRGVidWcoIDYw
NTAgKSA8PCAiYmVnaW4hIiA8PCBlbmRsOwotCi0gICAgYmVnaW4oIGQtPm1fd29ya2luZ1VSTCwg
ZC0+bV9leHRlbnNpb24tPnVybEFyZ3MoKS54T2Zmc2V0LCBkLT5tX2V4dGVuc2lvbi0+dXJsQXJn
cygpLnlPZmZzZXQgKTsKLQotCi0gICAgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5zZXRDYWNoZVBv
bGljeShkLT5tX2NhY2hlUG9saWN5KTsKLSAgICBkLT5tX3dvcmtpbmdVUkwgPSBLVVJMKCk7Ci0K
LQotICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRhdGEgYXJyaXZlcywgdGhlIG1ldGFkYXRhIGhhcyBq
dXN0IGJlZW4gbWFkZSBhdmFpbGFibGUKLSAgICBRU3RyaW5nIHFEYXRhOwotCi0gICAgLy8gU3Vw
cG9ydCBmb3IgaHR0cC1yZWZyZXNoCi0gICAgcURhdGEgPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0
YSgiaHR0cC1yZWZyZXNoIik7Ci0gICAgaWYoICFxRGF0YS5pc0VtcHR5KCkgJiYgZC0+bV9tZXRh
UmVmcmVzaEVuYWJsZWQgKQotICAgIHsKLSAgICAgIGtkRGVidWcoNjA1MCkgPDwgIkhUVFAgUmVm
cmVzaCBSZXF1ZXN0OiAiIDw8IHFEYXRhIDw8IGVuZGw7Ci0gICAgICBkb3VibGUgZGVsYXk7Ci0g
ICAgICBpbnQgcG9zID0gcURhdGEuZmluZCggJzsnICk7Ci0gICAgICBpZiAoIHBvcyA9PSAtMSAp
Ci0gICAgICAgIHBvcyA9IHFEYXRhLmZpbmQoICcsJyApOwotCi0gICAgICBpZiggcG9zID09IC0x
ICkKLSAgICAgIHsKLSAgICAgICAgZGVsYXkgPSBxRGF0YS5zdHJpcFdoaXRlU3BhY2UoKS50b0Rv
dWJsZSgpOwotICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVm
cmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKLSAgICAgICAgc2NoZWR1bGVSZWRpcmVjdGlvbiggZGVs
YXksIG1fdXJsLnVybCgpLCBkZWxheSA8PSAxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAg
IHsKLSAgICAgICAgaW50IGVuZF9wb3MgPSBxRGF0YS5sZW5ndGgoKTsKLSAgICAgICAgZGVsYXkg
PSBxRGF0YS5sZWZ0KHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkudG9Eb3VibGUoKTsKLSAgICAgICAg
d2hpbGUgKCBxRGF0YVsrK3Bvc10gPT0gJyAnICk7Ci0gICAgICAgIGlmICggcURhdGEuZmluZCgg
InVybCIsIHBvcywgZmFsc2UgKSA9PSBwb3MgKQotICAgICAgICB7Ci0gICAgICAgICAgcG9zICs9
IDM7Ci0gICAgICAgICAgd2hpbGUgKHFEYXRhW3Bvc10gPT0gJyAnIHx8IHFEYXRhW3Bvc10gPT0g
Jz0nICkKLSAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgaWYgKCBxRGF0YVtwb3NdID09
ICciJyApCi0gICAgICAgICAgewotICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAg
aW50IGluZGV4ID0gZW5kX3Bvcy0xOwotICAgICAgICAgICAgICB3aGlsZSggaW5kZXggPiBwb3Mg
KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCBxRGF0YVtpbmRleF0gPT0g
JyInICkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaW5kZXgt
LTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoIGluZGV4ID4gcG9zICkKLSAg
ICAgICAgICAgICAgICBlbmRfcG9zID0gaW5kZXg7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoZSByZWZyZXNoIHRpbWVv
dXQgPiAxIHNlY29uZAotICAgICAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKCBkZWxheSwgZC0+bV9k
b2MtPmNvbXBsZXRlVVJMKCBxRGF0YS5taWQoIHBvcywgZW5kX3BvcyApICksIGRlbGF5IDw9IDEp
OwotICAgICAgfQotICAgICAgZC0+bV9iSFRUUFJlZnJlc2ggPSB0cnVlOwotICAgIH0KLQotICAg
IC8vIFN1cHBvcnQgZm9yIGh0dHAgbGFzdC1tb2RpZmllZAotICAgIGQtPm1fbGFzdE1vZGlmaWVk
ID0gZC0+bV9qb2ItPnF1ZXJ5TWV0YURhdGEoIm1vZGlmaWVkIik7Ci0gICAgLy9rZERlYnVnKCkg
PDwgIktIVE1MUGFydDo6c2xvdERhdGEgbWV0YWRhdGEgbW9kaWZpZWQ6ICIgPDwgZC0+bV9sYXN0
TW9kaWZpZWQgPDwgZW5kbDsKLX0KLQotCi12b2lkIEtIVE1MUGFydDo6c2xvdEZpbmlzaGVkKCBL
SU86OkpvYiAqIGpvYiApCi17Ci0gIGlmIChqb2ItPmVycm9yKCkpCi0gIHsKLSAgICBkLT5tX2pv
YiA9IDBMOwotICAgIC8vIFRPRE86IHdoYXQgZWxzZSA/Ci0gICAgY2hlY2tDb21wbGV0ZWQoKTsK
LSAgICByZXR1cm47Ci0gIH0KLQotICBkLT5tX3dvcmtpbmdVUkwgPSBLVVJMKCk7Ci0gIGQtPm1f
am9iID0gMEw7Ci0KLSAgaWYgKGQtPm1fZG9jLT5wYXJzaW5nKCkpCi0gICAgICBlbmQoKTsgLy93
aWxsIGVtaXQgY29tcGxldGVkKCkKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmNoaWxkQmVnaW4oKQot
ewotICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGVuIHRoZSBjaGlsZCBpcyBjcmVhdGVkIHNv
IGFzIHRvIGF2b2lkIHRoZSBib2d1cyBzdGF0ZSBvZiB0aGUgcGFyZW50J3MKLSAgICAvLyBjaGls
ZC0+bV9iQ29tcGxldGVkIGJlaW5nIGZhbHNlIGJ1dCB0aGUgY2hpbGQncyBtX2JDb21wbGV0ZSBi
ZWluZyB0cnVlLiAgSWYgdGhlIGNoaWxkIGdldHMKLSAgICAvLyBhbiBlcnJvciBlYXJseSBvbiwg
d2UgaGFkIHRyb3VibGUgd2hlcmUgY2hlY2tpbmdDb21wbGV0ZSBvbiB0aGUgY2hpbGQgd2FzIGEg
Tk9QIGJlY2F1c2UKLSAgICAvLyBpdCB0aG91Z2h0IGl0IHdhcyBhbHJlYWR5IGNvbXBsZXRlLCBh
bmQgdGh1cyB0aGUgcGFyZW50IHdhcyBuZXZlciBzaWduYWxlZCwgYW5kIG5ldmVyIHNldAotICAg
IC8vIGl0cyBjaGlsZC0+bV9iQ29tcGxldGUuCi0gICAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsK
LX0KLQotdm9pZCBLSFRNTFBhcnQ6OmJlZ2luKCBjb25zdCBLVVJMICZ1cmwsIGludCB4T2Zmc2V0
LCBpbnQgeU9mZnNldCApCi17Ci0gIC8vIElmIHdlIGFyZW4ndCBsb2FkaW5nIGFuIGFjdHVhbCBV
UkwsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUKLSAgLy8gdGhhdCB3ZSBoYXZlIGF0IGxlYXN0
IGFuIGVtcHR5IGRvY3VtZW50LiBjcmVhdGVFbXB0eURvY3VtZW50IHdpbGwKLSAgLy8gZG8gdGhh
dCBpZiB3ZSBkb24ndCBoYXZlIGEgZG9jdW1lbnQgYWxyZWFkeS4KLSAgaWYgKGQtPm1fd29ya2lu
Z1VSTC5pc0VtcHR5KCkpIHsKLSAgICBLV1EodGhpcyktPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsK
LSAgfQotCi0gIGNsZWFyKCk7Ci0KLSAgS1dRKHRoaXMpLT5wYXJ0Q2xlYXJlZEluQmVnaW4oKTsK
LQotICAvLyBPbmx5IGRvIHRoaXMgYWZ0ZXIgY2xlYXJpbmcgdGhlIHBhcnQsIHNvIHRoYXQgSmF2
YVNjcmlwdCBjYW4KLSAgLy8gY2xlYW4gdXAgcHJvcGVybHkgaWYgaXQgd2FzIG9uIGZvciB0aGUg
bGFzdCBsb2FkLgotICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2
YVNjcmlwdEVuYWJsZWQodXJsLmhvc3QoKSk7Ci0KLSAgZC0+bV9iQ2xlYXJlZCA9IGZhbHNlOwot
ICBkLT5tX2JDb21wbGV0ZSA9IGZhbHNlOwotICBkLT5tX2JMb2FkRXZlbnRFbWl0dGVkID0gZmFs
c2U7Ci0gIGQtPm1fYkxvYWRpbmdNYWluUmVzb3VyY2UgPSB0cnVlOwotCi0gIEtQYXJ0czo6VVJM
QXJncyBhcmdzKCBkLT5tX2V4dGVuc2lvbi0+dXJsQXJncygpICk7Ci0gIGFyZ3MueE9mZnNldCA9
IHhPZmZzZXQ7Ci0gIGFyZ3MueU9mZnNldCA9IHlPZmZzZXQ7Ci0gIGQtPm1fZXh0ZW5zaW9uLT5z
ZXRVUkxBcmdzKCBhcmdzICk7Ci0KLSAgS1VSTCByZWYodXJsKTsKLSAgcmVmLnNldFVzZXIoUVNU
UklOR19OVUxMKTsKLSAgcmVmLnNldFBhc3MoUVNUUklOR19OVUxMKTsKLSAgcmVmLnNldFJlZihR
U1RSSU5HX05VTEwpOwotICBkLT5tX3JlZmVycmVyID0gcmVmLnVybCgpOwotICBtX3VybCA9IHVy
bDsKLSAgS1VSTCBiYXNldXJsOwotCi0gIC8vIFdlIGRvbid0IG5lZWQgS0RFIGNoYWluZWQgVVJJ
IGhhbmRsaW5nIG9yIHdpbmRvdyBjYXB0aW9uIHNldHRpbmcKLSAgaWYgKCFtX3VybC5pc0VtcHR5
KCkpCi0gICAgYmFzZXVybCA9IG1fdXJsOwotCi0gIGlmIChET01JbXBsZW1lbnRhdGlvbkltcGw6
OmlzWE1MTUlNRVR5cGUoYXJncy5zZXJ2aWNlVHlwZSkpCi0gICAgZC0+bV9kb2MgPSBET01JbXBs
ZW1lbnRhdGlvbkltcGw6Omluc3RhbmNlKCktPmNyZWF0ZURvY3VtZW50KCBkLT5tX3ZpZXcgKTsK
LSAgZWxzZQotICAgIGQtPm1fZG9jID0gRE9NSW1wbGVtZW50YXRpb25JbXBsOjppbnN0YW5jZSgp
LT5jcmVhdGVIVE1MRG9jdW1lbnQoIGQtPm1fdmlldyApOwotCi0gIGQtPm1fZG9jLT5yZWYoKTsK
LSAgaWYgKCFkLT5tX2RvYy0+YXR0YWNoZWQoKSkKLSAgICBkLT5tX2RvYy0+YXR0YWNoKCApOwot
ICBkLT5tX2RvYy0+c2V0VVJMKCBtX3VybC51cmwoKSApOwotICAvLyBXZSBwcmVmZXIgbV9iYXNl
VVJMIG92ZXIgbV91cmwgYmVjYXVzZSBtX3VybCBjaGFuZ2VzIHdoZW4gd2UgYXJlCi0gIC8vIGFi
b3V0IHRvIGxvYWQgYSBuZXcgcGFnZS4KLSAgZC0+bV9kb2MtPnNldEJhc2VVUkwoIGJhc2V1cmwu
dXJsKCkgKTsKLSAgaWYgKGQtPm1fZGVjb2RlcikKLSAgICBkLT5tX2RvYy0+c2V0RGVjb2Rlcihk
LT5tX2RlY29kZXIuZ2V0KCkpOwotICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNldFNob3dBbmlt
YXRpb25zKCBkLT5tX3NldHRpbmdzLT5zaG93QW5pbWF0aW9ucygpICk7Ci0KLSAgS1dRKHRoaXMp
LT51cGRhdGVQb2xpY3lCYXNlVVJMKCk7Ci0KLSAgc2V0QXV0b2xvYWRJbWFnZXMoIGQtPm1fc2V0
dGluZ3MtPmF1dG9Mb2FkSW1hZ2VzKCkgKTsKLSAgUVN0cmluZyB1c2VyU3R5bGVTaGVldCA9IGQt
Pm1fc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0KCk7Ci0KLSAgaWYgKCAhdXNlclN0eWxlU2hlZXQu
aXNFbXB0eSgpICkKLSAgICBzZXRVc2VyU3R5bGVTaGVldCggS1VSTCggdXNlclN0eWxlU2hlZXQg
KSApOwotCi0gIEtXUSh0aGlzKS0+cmVzdG9yZURvY3VtZW50U3RhdGUoKTsKLQotICBkLT5tX2Rv
Yy0+aW1wbGljaXRPcGVuKCk7Ci0gIC8vIGNsZWFyIHdpZGdldAotICBpZiAoZC0+bV92aWV3KQot
ICAgIGQtPm1fdmlldy0+cmVzaXplQ29udGVudHMoIDAsIDAgKTsKLSAgY29ubmVjdChkLT5tX2Rv
YyxTSUdOQUwoZmluaXNoZWRQYXJzaW5nKCkpLHRoaXMsU0xPVChzbG90RmluaXNoZWRQYXJzaW5n
KCkpKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OndyaXRlKCBjb25zdCBjaGFyICpzdHIsIGludCBs
ZW4gKQotewotICAgIGlmICggIWQtPm1fZGVjb2RlciApIHsKLSAgICAgICAgZC0+bV9kZWNvZGVy
ID0gbmV3IERlY29kZXI7Ci0gICAgICAgIGlmICghZC0+bV9lbmNvZGluZy5pc051bGwoKSkKLSAg
ICAgICAgICAgIGQtPm1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoZC0+bV9lbmNvZGluZy5sYXRpbjEo
KSwKLSAgICAgICAgICAgICAgICBkLT5tX2hhdmVFbmNvZGluZyA/IERlY29kZXI6OlVzZXJDaG9z
ZW5FbmNvZGluZyA6IERlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkLT5tX2RlY29kZXItPnNldEVuY29kaW5nKHNldHRpbmdzKCktPmVu
Y29kaW5nKCkubGF0aW4xKCksIERlY29kZXI6OkRlZmF1bHRFbmNvZGluZyk7Ci0KLSAgICAgICAg
aWYgKGQtPm1fZG9jKQotICAgICAgICAgICAgZC0+bV9kb2MtPnNldERlY29kZXIoZC0+bV9kZWNv
ZGVyLmdldCgpKTsKLSAgICB9Ci0gIGlmICggbGVuID09IDAgKQotICAgIHJldHVybjsKLQotICBp
ZiAoIGxlbiA9PSAtMSApCi0gICAgbGVuID0gc3RybGVuKCBzdHIgKTsKLQotICBRU3RyaW5nIGRl
Y29kZWQgPSBkLT5tX2RlY29kZXItPmRlY29kZSggc3RyLCBsZW4gKTsKLQotICBpZihkZWNvZGVk
LmlzRW1wdHkoKSkgcmV0dXJuOwotCi0gIGlmKGQtPm1fYkZpcnN0RGF0YSkgewotICAgICAgLy8g
ZGV0ZXJtaW5lIHRoZSBwYXJzZSBtb2RlCi0gICAgICBkLT5tX2RvYy0+ZGV0ZXJtaW5lUGFyc2VN
b2RlKCBkZWNvZGVkICk7Ci0gICAgICBkLT5tX2JGaXJzdERhdGEgPSBmYWxzZTsKLQotICAgICAg
Ly8gIyMjIHRoaXMgaXMgc3RpbGwgcXVpdGUgaGFja3ksIGJ1dCBzaG91bGQgd29yayBhIGxvdCBi
ZXR0ZXIgdGhhbiB0aGUgb2xkIHNvbHV0aW9uCi0gICAgICBpZihkLT5tX2RlY29kZXItPnZpc3Vh
bGx5T3JkZXJlZCgpKSBkLT5tX2RvYy0+c2V0VmlzdWFsbHlPcmRlcmVkKCk7Ci0gICAgICBkLT5t
X2RvYy0+cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpGb3JjZSApOwotICB9Ci0KLSAgaWYgKFRva2Vu
aXplciogdCA9IGQtPm1fZG9jLT50b2tlbml6ZXIoKSkKLSAgICAgIHQtPndyaXRlKCBkZWNvZGVk
LCB0cnVlICk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0Ojp3cml0ZSggY29uc3QgUVN0cmluZyAmc3Ry
ICkKLXsKLSAgaWYgKCBzdHIuaXNOdWxsKCkgKQotICAgIHJldHVybjsKLQotICBpZihkLT5tX2JG
aXJzdERhdGEpIHsKLSAgICAgIC8vIGRldGVybWluZSB0aGUgcGFyc2UgbW9kZQotICAgICAgZC0+
bV9kb2MtPnNldFBhcnNlTW9kZSggRG9jdW1lbnRJbXBsOjpTdHJpY3QgKTsKLSAgICAgIGQtPm1f
YkZpcnN0RGF0YSA9IGZhbHNlOwotICB9Ci0gIFRva2VuaXplciogdCA9IGQtPm1fZG9jLT50b2tl
bml6ZXIoKTsKLSAgaWYodCkKLSAgICB0LT53cml0ZSggc3RyLCB0cnVlICk7Ci19Ci0KLXZvaWQg
S0hUTUxQYXJ0OjplbmQoKQotewotICAgIGQtPm1fYkxvYWRpbmdNYWluUmVzb3VyY2UgPSBmYWxz
ZTsKLSAgICBlbmRJZk5vdExvYWRpbmcoKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmVuZElmTm90
TG9hZGluZygpCi17Ci0gICAgaWYgKGQtPm1fYkxvYWRpbmdNYWluUmVzb3VyY2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIG1ha2Ugc3VyZSBub3RoaW5nJ3MgbGVmdCBpbiB0aGVyZS4uLgot
ICAgIGlmIChkLT5tX2RlY29kZXIpCi0gICAgICAgIHdyaXRlKGQtPm1fZGVjb2Rlci0+Zmx1c2go
KSk7Ci0gICAgaWYgKGQtPm1fZG9jKQotICAgICAgICBkLT5tX2RvYy0+ZmluaXNoUGFyc2luZygp
OwotICAgIGVsc2UKLSAgICAgICAgLy8gV2ViS2l0IHBhcnRpYWxseSB1c2VzIFdlYkNvcmUgd2hl
biBsb2FkaW5nIG5vbi1IVE1MIGRvY3MuICBJbiB0aGVzZSBjYXNlcyBkb2M9PW5pbCwgYnV0Ci0g
ICAgICAgIC8vIFdlYkNvcmUgaXMgZW5vdWdoIGludm9sdmVkIHRoYXQgd2UgbmVlZCB0byBjaGVj
a0NvbXBsZXRlZCgpIGluIG9yZGVyIGZvciBtX2JDb21wbGV0ZSB0bwotICAgICAgICAvLyBiZWNv
bWUgdHJ1ZS4gIEFuIGV4YW1wbGUgaXMgd2hlbiBhIHN1YmZyYW1lIGlzIGEgcHVyZSB0ZXh0IGRv
YywgYW5kIHRoYXQgc3ViZnJhbWUgaXMgdGhlCi0gICAgICAgIC8vIGxhc3Qgb25lIHRvIGNvbXBs
ZXRlLgotICAgICAgICBjaGVja0NvbXBsZXRlZCgpOwotfQotCi12b2lkIEtIVE1MUGFydDo6c3Rv
cCgpCi17Ci0gICAgLy8gbWFrZSBzdXJlIG5vdGhpbmcncyBsZWZ0IGluIHRoZXJlLi4uCi0gICAg
aWYgKGQtPm1fZG9jKSB7Ci0gICAgICAgIGlmIChkLT5tX2RvYy0+dG9rZW5pemVyKCkpCi0gICAg
ICAgICAgICBkLT5tX2RvYy0+dG9rZW5pemVyKCktPnN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIGQt
Pm1fZG9jLT5maW5pc2hQYXJzaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2ViS2l0
IHBhcnRpYWxseSB1c2VzIFdlYkNvcmUgd2hlbiBsb2FkaW5nIG5vbi1IVE1MIGRvY3MuICBJbiB0
aGVzZSBjYXNlcyBkb2M9PW5pbCwgYnV0Ci0gICAgICAgIC8vIFdlYkNvcmUgaXMgZW5vdWdoIGlu
dm9sdmVkIHRoYXQgd2UgbmVlZCB0byBjaGVja0NvbXBsZXRlZCgpIGluIG9yZGVyIGZvciBtX2JD
b21wbGV0ZSB0bwotICAgICAgICAvLyBiZWNvbWUgdHJ1ZS4gIEFuIGV4YW1wbGUgaXMgd2hlbiBh
IHN1YmZyYW1lIGlzIGEgcHVyZSB0ZXh0IGRvYywgYW5kIHRoYXQgc3ViZnJhbWUgaXMgdGhlCi0g
ICAgICAgIC8vIGxhc3Qgb25lIHRvIGNvbXBsZXRlLgotICAgICAgICBjaGVja0NvbXBsZXRlZCgp
OwotICAgIH0KLX0KLQotCi12b2lkIEtIVE1MUGFydDo6c3RvcEFuaW1hdGlvbnMoKQotewotICBp
ZiAoIGQtPm1fZG9jICkKLSAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNldFNob3dBbmltYXRp
b25zKCBLSFRNTFNldHRpbmdzOjpLQW5pbWF0aW9uRGlzYWJsZWQgKTsKLQotICBDb25zdEZyYW1l
SXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdpbigpOwotICBDb25zdEZyYW1lSXQgZW5kID0gZC0+bV9m
cmFtZXMuZW5kKCk7Ci0gIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAgIGlmICggISggKml0
ICkubV9wYXJ0LmlzTnVsbCgpICYmICggKml0ICkubV9wYXJ0LT5pbmhlcml0cyggIktIVE1MUGFy
dCIgKSApIHsKLSAgICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0KiBwID0gKCAqaXQgKS5tX3BhcnQ7
Ci0gICAgICBzdGF0aWNfY2FzdDxLSFRNTFBhcnQqPiggcCApLT5zdG9wQW5pbWF0aW9ucygpOwot
ICAgIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmdvdG9BbmNob3IoKQotewotICAgIC8vIElmIG91
ciBVUkwgaGFzIG5vIHJlZiwgdGhlbiB3ZSBoYXZlIG5vIHBsYWNlIHdlIG5lZWQgdG8ganVtcCB0
by4KLSAgICBpZiAoIW1fdXJsLmhhc1JlZigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRU3Ry
aW5nIHJlZiA9IG1fdXJsLmVuY29kZWRIdG1sUmVmKCk7Ci0gICAgaWYgKCFnb3RvQW5jaG9yKHJl
ZikpIHsKLSAgICAgICAgLy8gQ2FuJ3QgdXNlIGh0bWxSZWYoKSBoZXJlIGJlY2F1c2UgaXQgZG9l
c24ndCBrbm93IHdoaWNoIGVuY29kaW5nIHRvIHVzZSB0byBkZWNvZGUuCi0gICAgICAgIC8vIERl
Y29kaW5nIGhlcmUgaGFzIHRvIG1hdGNoIGVuY29kaW5nIGluIGNvbXBsZXRlVVJMLCB3aGljaCBt
ZWFucyBpdCBoYXMgdG8gdXNlIHRoZQotICAgICAgICAvLyBwYWdlJ3MgZW5jb2RpbmcgcmF0aGVy
IHRoYW4gVVRGLTguCi0gICAgICAgIGlmIChkLT5tX2RlY29kZXIpCi0gICAgICAgICAgICBnb3Rv
QW5jaG9yKEtVUkw6OmRlY29kZV9zdHJpbmcocmVmLCBkLT5tX2RlY29kZXItPmNvZGVjKCkpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90RmluaXNoZWRQYXJzaW5nKCkKLXsKLSAg
ZC0+bV9kb2MtPnNldFBhcnNpbmcoZmFsc2UpOwotCi0gIGlmICghZC0+bV92aWV3KQotICAgIHJl
dHVybjsgLy8gV2UgYXJlIHByb2JhYmx5IGJlaW5nIGRlc3RydWN0ZWQuCi0KLSAgUmVmUHRyPEtI
VE1MUGFydD4gcHJvdGVjdG9yKHRoaXMpOwotICBjaGVja0NvbXBsZXRlZCgpOwotCi0gIGlmICgh
ZC0+bV92aWV3KQotICAgIHJldHVybjsgLy8gV2UgYXJlIGJlaW5nIGRlc3Ryb3llZCBieSBzb21l
dGhpbmcgY2hlY2tDb21wbGV0ZWQgY2FsbGVkLgotCi0gIC8vIGNoZWNrIGlmIHRoZSBzY3JvbGxi
YXJzIGFyZSByZWFsbHkgbmVlZGVkIGZvciB0aGUgY29udGVudAotICAvLyBpZiBub3QsIHJlbW92
ZSB0aGVtLCByZWxheW91dCwgYW5kIHJlcGFpbnQKLQotICBkLT5tX3ZpZXctPnJlc3RvcmVTY3Jv
bGxCYXIoKTsKLSAgZ290b0FuY2hvcigpOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2xvdExvYWRl
clJlcXVlc3RTdGFydGVkKCBraHRtbDo6RG9jTG9hZGVyKiBkbCwga2h0bWw6OkNhY2hlZE9iamVj
dCAqb2JqICkKLXsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RMb2FkZXJSZXF1ZXN0RG9uZSgg
a2h0bWw6OkRvY0xvYWRlciogZGwsIGtodG1sOjpDYWNoZWRPYmplY3QgKm9iaiApCi17Ci0gIC8v
IFdlIHJlYWxseSBvbmx5IG5lZWQgdG8gY2FsbCBjaGVja0NvbXBsZXRlZCB3aGVuIG91ciBvd24g
cmVzb3VyY2VzIGFyZSBkb25lIGxvYWRpbmcuCi0gIC8vIFNvIHdlIHNob3VsZCBjaGVjayB0aGF0
IGQtPm1fZG9jLT5kb2NMb2FkZXIoKSA9PSBkbCBoZXJlLgotICAvLyBUaGF0IG1pZ2h0IGhlbHAg
d2l0aCBwZXJmb3JtYW5jZSBieSBza2lwcGluZyBzb21lIHVubmVjZXNzYXJ5IHdvcmssIGJ1dCBp
dCdzIHRvbwotICAvLyByaXNreSB0byBtYWtlIHRoYXQgY2hhbmdlIHJpZ2h0IG5vdyAoMjAwNS0w
Mi0wNyksIGJlY2F1c2Ugd2UgbWlnaHQgYmUgYWNjaWRlbnRhbGx5Ci0gIC8vIGRlcGVuZGluZyBv
biB0aGUgZXh0cmEgY2hlY2tDb21wbGV0ZWQgY2FsbHMuCi0gIGlmIChkLT5tX2RvYykgewotICAg
IGNoZWNrQ29tcGxldGVkKCk7Ci0gIH0KLX0KLQotCi12b2lkIEtIVE1MUGFydDo6Y2hlY2tDb21w
bGV0ZWQoKQotewotLy8gICBrZERlYnVnKCA2MDUwICkgPDwgIktIVE1MUGFydDo6Y2hlY2tDb21w
bGV0ZWQoKSBwYXJzaW5nOiAiIDw8IGQtPm1fZG9jLT5wYXJzaW5nKCkgPDwgZW5kbDsKLS8vICAg
a2REZWJ1ZyggNjA1MCApIDw8ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTog
IiA8PCBkLT5tX2JDb21wbGV0ZSA8PCBlbmRsOwotCi0KLSAgLy8gQW55IGZyYW1lIHRoYXQgaGFz
bid0IGNvbXBsZXRlZCB5ZXQgPwotICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdp
bigpOwotICBDb25zdEZyYW1lSXQgZW5kID0gZC0+bV9mcmFtZXMuZW5kKCk7Ci0gIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQgKQotICAgIGlmICggISgqaXQpLm1fYkNvbXBsZXRlZCApCi0gICAgICBy
ZXR1cm47Ci0KLSAgLy8gSGF2ZSB3ZSBjb21wbGV0ZWQgYmVmb3JlPwotICBpZiAoIGQtPm1fYkNv
bXBsZXRlICkKLSAgICByZXR1cm47Ci0KLSAgLy8gQXJlIHdlIHN0aWxsIHBhcnNpbmc/Ci0gIGlm
ICggZC0+bV9kb2MgJiYgZC0+bV9kb2MtPnBhcnNpbmcoKSApCi0gICAgcmV0dXJuOwotCi0gIC8v
IFN0aWxsIHdhaXRpbmcgZm9yIGltYWdlcy9zY3JpcHRzIGZyb20gdGhlIGxvYWRlciA/Ci0gIGlu
dCByZXF1ZXN0cyA9IDA7Ci0gIGlmICggZC0+bV9kb2MgJiYgZC0+bV9kb2MtPmRvY0xvYWRlcigp
ICkKLSAgICByZXF1ZXN0cyA9IGtodG1sOjpDYWNoZTo6bG9hZGVyKCktPm51bVJlcXVlc3RzKCBk
LT5tX2RvYy0+ZG9jTG9hZGVyKCkgKTsKLQotICBpZiAoIHJlcXVlc3RzID4gMCApCi0gICAgcmV0
dXJuOwotCi0gIC8vIE9LLCBjb21wbGV0ZWQuCi0gIC8vIE5vdyBkbyB3aGF0IHNob3VsZCBiZSBk
b25lIHdoZW4gd2UgYXJlIHJlYWxseSBjb21wbGV0ZWQuCi0gIGQtPm1fYkNvbXBsZXRlID0gdHJ1
ZTsKLQotICBjaGVja0VtaXRMb2FkRXZlbnQoKTsgLy8gaWYgd2UgZGlkbid0IGRvIGl0IGJlZm9y
ZQotCi0KLSAgaWYgKCBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uICE9IG5vUmVkaXJlY3Rpb25T
Y2hlZHVsZWQgKQotICB7Ci0gICAgLy8gRG8gbm90IHN0YXJ0IHJlZGlyZWN0aW9uIGZvciBmcmFt
ZXMgaGVyZSEgVGhhdCBhY3Rpb24gaXMKLSAgICAvLyBkZWZlcnJlZCB1bnRpbCB0aGUgcGFyZW50
IGVtaXRzIGEgY29tcGxldGVkIHNpZ25hbC4KLSAgICBpZiAoIHBhcmVudFBhcnQoKSA9PSAwICkK
LSAgICAgIGQtPm1fcmVkaXJlY3Rpb25UaW1lci5zdGFydCggKGludCkoMTAwMCAqIGQtPm1fZGVs
YXlSZWRpcmVjdCksIHRydWUgKTsKLQotICAgIGVtaXQgY29tcGxldGVkKCB0cnVlICk7Ci0gIH0K
LSAgZWxzZQotICB7Ci0gICAgaWYgKCBkLT5tX2JQZW5kaW5nQ2hpbGRSZWRpcmVjdGlvbiApCi0g
ICAgICBlbWl0IGNvbXBsZXRlZCAoIHRydWUgKTsKLSAgICBlbHNlCi0gICAgICBlbWl0IGNvbXBs
ZXRlZCgpOwotICB9Ci0KLQotI2lmZGVmIFNQRUVEX0RFQlVHCi0gIGtkRGVidWcoNjA1MCkgPDwg
IkRPTkU6ICIgPDxkLT5tX3BhcnNldGltZS5lbGFwc2VkKCkgPDwgZW5kbDsKLSNlbmRpZgotfQot
Ci12b2lkIEtIVE1MUGFydDo6Y2hlY2tFbWl0TG9hZEV2ZW50KCkKLXsKLSAgaWYgKCBkLT5tX2JM
b2FkRXZlbnRFbWl0dGVkIHx8ICFkLT5tX2RvYyB8fCBkLT5tX2RvYy0+cGFyc2luZygpICkgcmV0
dXJuOwotCi0gIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7Ci0gIENvbnN0
RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCApCi0gICAgaWYgKCAhKCppdCkubV9iQ29tcGxldGVkICkgLy8gc3RpbGwgZ290IGEgZnJhbWUg
cnVubmluZyAtPiB0b28gZWFybHkKLSAgICAgIHJldHVybjsKLQotCi0gIC8vIEFsbCBmcmFtZXMg
Y29tcGxldGVkIC0+IHNldCB0aGVpciBkb21haW4gdG8gdGhlIGZyYW1lc2V0J3MgZG9tYWluCi0g
IC8vIFRoaXMgbXVzdCBvbmx5IGJlIGRvbmUgd2hlbiBsb2FkaW5nIHRoZSBmcmFtZXNldCBpbml0
aWFsbHkgKCMyMjAzOSksCi0gIC8vIG5vdCB3aGVuIGZvbGxvd2luZyBhIGxpbmsgaW4gYSBmcmFt
ZSAoIzQ0MTYyKS4KLSAgaWYgKGQtPm1fZG9jKSB7Ci0gICAgRE9NU3RyaW5nIGRvbWFpbiA9IGQt
Pm1fZG9jLT5kb21haW4oKTsKLSAgICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdp
bigpOwotICAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0ICkgewotICAgICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKnAgPSAo
Kml0KS5tX3BhcnQ7Ci0gICAgICBpZiAocCAmJiBwLT5pbmhlcml0cygiS0hUTUxQYXJ0IikpIHsK
LSAgICAgICAgS0hUTUxQYXJ0KiBodG1sRnJhbWUgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnQgKj4o
cCk7Ci0gICAgICAgIGlmIChodG1sRnJhbWUtPmQtPm1fZG9jKQotICAgICAgICAgIGh0bWxGcmFt
ZS0+ZC0+bV9kb2MtPnNldERvbWFpbihkb21haW4pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IGQtPm1fYkxvYWRFdmVudEVtaXR0ZWQgPSB0cnVlOwotICBkLT5tX2JVbmxvYWRFdmVudEVtaXR0
ZWQgPSBmYWxzZTsKLSAgaWYgKGQtPm1fZG9jKQotICAgIGQtPm1fZG9jLT5pbXBsaWNpdENsb3Nl
KCk7Ci19Ci0KLWNvbnN0IEtIVE1MU2V0dGluZ3MgKktIVE1MUGFydDo6c2V0dGluZ3MoKSBjb25z
dAotewotICByZXR1cm4gZC0+bV9zZXR0aW5nczsKLX0KLQotI2lmbmRlZiBLREVfTk9fQ09NUEFU
Ci1LVVJMIEtIVE1MUGFydDo6YmFzZVVSTCgpIGNvbnN0Ci17Ci0gIGlmICggIWQtPm1fZG9jICkg
cmV0dXJuIEtVUkwoKTsKLQotICByZXR1cm4gZC0+bV9kb2MtPmJhc2VVUkwoKTsKLX0KLQotUVN0
cmluZyBLSFRNTFBhcnQ6OmJhc2VUYXJnZXQoKSBjb25zdAotewotICBpZiAoICFkLT5tX2RvYyAp
IHJldHVybiBRU3RyaW5nOjpudWxsOwotCi0gIHJldHVybiBkLT5tX2RvYy0+YmFzZVRhcmdldCgp
OwotfQotI2VuZGlmCi0KLUtVUkwgS0hUTUxQYXJ0Ojpjb21wbGV0ZVVSTCggY29uc3QgUVN0cmlu
ZyAmdXJsICkKLXsKLSAgaWYgKCAhZC0+bV9kb2MgKSByZXR1cm4gdXJsOwotCi0KLSAgcmV0dXJu
IEtVUkwoIGQtPm1fZG9jLT5jb21wbGV0ZVVSTCggdXJsICkgKTsKLX0KLQotdm9pZCBLSFRNTFBh
cnQ6OnNjaGVkdWxlUmVkaXJlY3Rpb24oIGRvdWJsZSBkZWxheSwgY29uc3QgUVN0cmluZyAmdXJs
LCBib29sIGRvTG9ja0hpc3RvcnkpCi17Ci0gICAga2REZWJ1Zyg2MDUwKSA8PCAiS0hUTUxQYXJ0
OjpzY2hlZHVsZVJlZGlyZWN0aW9uIGRlbGF5PSIgPDwgZGVsYXkgPDwgIiB1cmw9IiA8PCB1cmwg
PDwgZW5kbDsKLSAgICBpZiAoZGVsYXkgPCAwIHx8IGRlbGF5ID4gSU5UX01BWCAvIDEwMDApCi0g
ICAgICByZXR1cm47Ci0gICAgaWYgKCBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uID09IG5vUmVk
aXJlY3Rpb25TY2hlZHVsZWQgfHwgZGVsYXkgPD0gZC0+bV9kZWxheVJlZGlyZWN0ICkKLSAgICB7
Ci0gICAgICAgZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9IHJlZGlyZWN0aW9uU2NoZWR1bGVk
OwotICAgICAgIGQtPm1fZGVsYXlSZWRpcmVjdCA9IGRlbGF5OwotICAgICAgIGQtPm1fcmVkaXJl
Y3RVUkwgPSB1cmw7Ci0gICAgICAgZC0+bV9yZWRpcmVjdFJlZmVycmVyID0gUVN0cmluZzo6bnVs
bDsKLSAgICAgICBkLT5tX3JlZGlyZWN0TG9ja0hpc3RvcnkgPSBkb0xvY2tIaXN0b3J5OwotICAg
ICAgIGQtPm1fcmVkaXJlY3RVc2VyR2VzdHVyZSA9IGZhbHNlOwotCi0gICAgICAgZC0+bV9yZWRp
cmVjdGlvblRpbWVyLnN0b3AoKTsKLSAgICAgICBpZiAoIGQtPm1fYkNvbXBsZXRlICkKLSAgICAg
ICAgIGQtPm1fcmVkaXJlY3Rpb25UaW1lci5zdGFydCggKGludCkoMTAwMCAqIGQtPm1fZGVsYXlS
ZWRpcmVjdCksIHRydWUgKTsKLSAgICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzY2hlZHVsZUxv
Y2F0aW9uQ2hhbmdlKGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmcmVmZXJyZXIs
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgdXNlckdlc3R1cmUpCi17Ci0gICAgLy8gSGFuZGxlIGEg
bG9jYXRpb24gY2hhbmdlIG9mIGEgcGFnZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3BlY2lhbCBj
YXNlLgotICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9j
YXRpb24gb2YgYW5vdGhlciBmcmFtZS4KLSAgICBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uID0g
ZC0+bV9kb2MgPyBsb2NhdGlvbkNoYW5nZVNjaGVkdWxlZCA6IGxvY2F0aW9uQ2hhbmdlU2NoZWR1
bGVkRHVyaW5nTG9hZDsKLSAgICAKLSAgICAvLyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQg
ZHVyaW5nIGEgbG9hZCwgdGhlbiBzdG9wIHRoZSBjdXJyZW50IGxvYWQuCi0gICAgLy8gT3RoZXJ3
aXNlIHdoZW4gdGhlIGN1cnJlbnQgbG9hZCB0cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwg
dG8gYSAKLSAgICAvLyBjb21taXR0ZWQgc3RhdGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBj
YW5jZWxsZWQuIAotICAgIGlmIChkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uID09IGxvY2F0aW9u
Q2hhbmdlU2NoZWR1bGVkRHVyaW5nTG9hZCkgewotICAgICAgICBzdG9wTG9hZGluZyh0cnVlKTsg
ICAKLSAgICB9Ci0gICAgCi0gICAgZC0+bV9kZWxheVJlZGlyZWN0ID0gMDsKLSAgICBkLT5tX3Jl
ZGlyZWN0VVJMID0gdXJsOwotICAgIGQtPm1fcmVkaXJlY3RSZWZlcnJlciA9IHJlZmVycmVyOwot
ICAgIGQtPm1fcmVkaXJlY3RMb2NrSGlzdG9yeSA9IGxvY2tIaXN0b3J5OwotICAgIGQtPm1fcmVk
aXJlY3RVc2VyR2VzdHVyZSA9IHVzZXJHZXN0dXJlOwotICAgIGQtPm1fcmVkaXJlY3Rpb25UaW1l
ci5zdG9wKCk7Ci0gICAgaWYgKGQtPm1fYkNvbXBsZXRlKQotICAgICAgICBkLT5tX3JlZGlyZWN0
aW9uVGltZXIuc3RhcnQoMCwgdHJ1ZSk7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0Ojppc1NjaGVkdWxl
ZExvY2F0aW9uQ2hhbmdlUGVuZGluZygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChkLT5tX3NjaGVk
dWxlZFJlZGlyZWN0aW9uKSB7Ci0gICAgICAgIGNhc2Ugbm9SZWRpcmVjdGlvblNjaGVkdWxlZDoK
LSAgICAgICAgY2FzZSByZWRpcmVjdGlvblNjaGVkdWxlZDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgY2FzZSBoaXN0b3J5TmF2aWdhdGlvblNjaGVkdWxlZDoKLSAgICAgICAg
Y2FzZSBsb2NhdGlvbkNoYW5nZVNjaGVkdWxlZDoKLSAgICAgICAgY2FzZSBsb2NhdGlvbkNoYW5n
ZVNjaGVkdWxlZER1cmluZ0xvYWQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2NoZWR1bGVIaXN0b3J5TmF2
aWdhdGlvbiggaW50IHN0ZXBzICkKLXsKLSAgICAvLyBuYXZpZ2F0aW9uIHdpbGwgYWx3YXlzIGJl
IGFsbG93ZWQgaW4gdGhlIDAgc3RlcHMgY2FzZSwgd2hpY2ggaXMgT0sgYmVjYXVzZQotICAgIC8v
IHRoYXQncyBzdXBwb3NlZCB0byBmb3JjZSBhIHJlbG9hZC4KLSAgICBpZiAoIUtXUSh0aGlzKS0+
Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKSkgewotICAgICAgICBjYW5jZWxSZWRpcmVjdGlvbigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlv
biA9IGhpc3RvcnlOYXZpZ2F0aW9uU2NoZWR1bGVkOwotICAgIGQtPm1fZGVsYXlSZWRpcmVjdCA9
IDA7Ci0gICAgZC0+bV9yZWRpcmVjdFVSTCA9IFFTdHJpbmc6Om51bGw7Ci0gICAgZC0+bV9yZWRp
cmVjdFJlZmVycmVyID0gUVN0cmluZzo6bnVsbDsKLSAgICBkLT5tX3NjaGVkdWxlZEhpc3RvcnlO
YXZpZ2F0aW9uU3RlcHMgPSBzdGVwczsKLSAgICBkLT5tX3JlZGlyZWN0aW9uVGltZXIuc3RvcCgp
OwotICAgIGlmIChkLT5tX2JDb21wbGV0ZSkKLSAgICAgICAgZC0+bV9yZWRpcmVjdGlvblRpbWVy
LnN0YXJ0KDAsIHRydWUpOwotfQotCi12b2lkIEtIVE1MUGFydDo6Y2FuY2VsUmVkaXJlY3Rpb24o
Ym9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGQpIHsKLSAgICAgICAg
ZC0+bV9jYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MgPSBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3M7
Ci0gICAgICAgIGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gPSBub1JlZGlyZWN0aW9uU2NoZWR1
bGVkOwotICAgICAgICBkLT5tX3JlZGlyZWN0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLX0KLQot
dm9pZCBLSFRNTFBhcnQ6OmNoYW5nZUxvY2F0aW9uKGNvbnN0IFFTdHJpbmcgJlVSTCwgY29uc3Qg
UVN0cmluZyAmcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgdXNlckdlc3R1cmUpCi17
Ci0gICAgaWYgKFVSTC5maW5kKCJqYXZhc2NyaXB0OiIsIDAsIGZhbHNlKSA9PSAwKSB7Ci0gICAg
ICAgIFFTdHJpbmcgc2NyaXB0ID0gS1VSTDo6ZGVjb2RlX3N0cmluZyhVUkwubWlkKDExKSk7Ci0g
ICAgICAgIFFWYXJpYW50IHJlc3VsdCA9IGV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB1c2VyR2VzdHVy
ZSk7Ci0gICAgICAgIGlmIChyZXN1bHQudHlwZSgpID09IFFWYXJpYW50OjpTdHJpbmcpIHsKLSAg
ICAgICAgICAgIGJlZ2luKHVybCgpKTsKLSAgICAgICAgICAgIHdyaXRlKHJlc3VsdC5hc1N0cmlu
ZygpKTsKLSAgICAgICAgICAgIGVuZCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBLUGFydHM6OlVSTEFyZ3MgYXJnczsKLQotICAgIGFyZ3Muc2V0TG9ja0hpc3Rv
cnkobG9ja0hpc3RvcnkpOwotICAgIGlmICghcmVmZXJyZXIuaXNFbXB0eSgpKQotICAgICAgICBh
cmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSByZWZlcnJlcjsKLQotICAgIHVybFNlbGVjdGVk
KFVSTCwgMCwgMCwgIl9zZWxmIiwgYXJncyk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90UmVk
aXJlY3QoKQotewotICAgIGlmIChkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uID09IGhpc3RvcnlO
YXZpZ2F0aW9uU2NoZWR1bGVkKSB7Ci0gICAgICAgIGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24g
PSBub1JlZGlyZWN0aW9uU2NoZWR1bGVkOwotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Ig
Z28oMCkgZnJvbSBhIGZyYW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBmcmFtZQotICAgICAgICAvLyBn
byhpIT0wKSBmcm9tIGEgZnJhbWUgbmF2aWdhdGVzIGludG8gdGhlIGhpc3Rvcnkgb2YgdGhlIGZy
YW1lIG9ubHksCi0gICAgICAgIC8vIGluIGJvdGggSUUgYW5kIE5TIChidXQgbm90IGluIE1vemls
bGEpLi4uLiB3ZSBjYW4ndCBlYXNpbHkgZG8gdGhhdAotICAgICAgICAvLyBpbiBLb25xdWVyb3Iu
Li4KLSAgICAgICAgaWYgKGQtPm1fc2NoZWR1bGVkSGlzdG9yeU5hdmlnYXRpb25TdGVwcyA9PSAw
KSAvLyBhZGQgJiYgcGFyZW50UGFydCgpIHRvIGdldCBvbmx5IGZyYW1lcywgYnV0IGRvZXNuJ3Qg
bWF0dGVyCi0gICAgICAgICAgICBvcGVuVVJMKCB1cmwoKSApOyAvLy8gIyMgbmVlZCBhcmdzLnJl
bG9hZD10cnVlPwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChkLT5tX2V4dGVuc2lv
bikgewotICAgICAgICAgICAgICAgIEJyb3dzZXJJbnRlcmZhY2UgKmludGVyZmFjZSA9IGQtPm1f
ZXh0ZW5zaW9uLT5icm93c2VySW50ZXJmYWNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGludGVy
ZmFjZSkKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLT5jYWxsTWV0aG9kKCAiZ29IaXN0
b3J5KGludCkiLCBkLT5tX3NjaGVkdWxlZEhpc3RvcnlOYXZpZ2F0aW9uU3RlcHMgKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUVN0cmlu
ZyBVUkwgPSBkLT5tX3JlZGlyZWN0VVJMOwotICAgIFFTdHJpbmcgcmVmZXJyZXIgPSBkLT5tX3Jl
ZGlyZWN0UmVmZXJyZXI7Ci0gICAgYm9vbCBsb2NrSGlzdG9yeSA9IGQtPm1fcmVkaXJlY3RMb2Nr
SGlzdG9yeTsKLSAgICBib29sIHVzZXJHZXN0dXJlID0gZC0+bV9yZWRpcmVjdFVzZXJHZXN0dXJl
OwotCi0gICAgZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9IG5vUmVkaXJlY3Rpb25TY2hlZHVs
ZWQ7Ci0gICAgZC0+bV9kZWxheVJlZGlyZWN0ID0gMDsKLSAgICBkLT5tX3JlZGlyZWN0VVJMID0g
UVN0cmluZzo6bnVsbDsKLSAgICBkLT5tX3JlZGlyZWN0UmVmZXJyZXIgPSBRU3RyaW5nOjpudWxs
OwotCi0gICAgY2hhbmdlTG9jYXRpb24oVVJMLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIHVzZXJH
ZXN0dXJlKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RSZWRpcmVjdGlvbihLSU86OkpvYios
IGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBkLT5tX3dvcmtpbmdVUkwgPSB1cmw7Ci19Ci0KLVFT
dHJpbmcgS0hUTUxQYXJ0OjplbmNvZGluZygpIGNvbnN0Ci17Ci0gICAgaWYoZC0+bV9oYXZlRW5j
b2RpbmcgJiYgIWQtPm1fZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZC0+bV9l
bmNvZGluZzsKLQotICAgIGlmKGQtPm1fZGVjb2RlciAmJiBkLT5tX2RlY29kZXItPmVuY29kaW5n
KCkpCi0gICAgICAgIHJldHVybiBRU3RyaW5nKGQtPm1fZGVjb2Rlci0+ZW5jb2RpbmcoKSk7Ci0K
LSAgICByZXR1cm4oc2V0dGluZ3MoKS0+ZW5jb2RpbmcoKSk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0
OjpzZXRVc2VyU3R5bGVTaGVldChjb25zdCBLVVJMICZ1cmwpCi17Ci0gIGlmICggZC0+bV9kb2Mg
JiYgZC0+bV9kb2MtPmRvY0xvYWRlcigpICkKLSAgICAodm9pZCkgbmV3IGtodG1sOjpQYXJ0U3R5
bGVTaGVldExvYWRlcih0aGlzLCB1cmwudXJsKCksIGQtPm1fZG9jLT5kb2NMb2FkZXIoKSk7Ci19
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRVc2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5nICZzdHls
ZVNoZWV0KQotewotICBpZiAoIGQtPm1fZG9jICkKLSAgICBkLT5tX2RvYy0+c2V0VXNlclN0eWxl
U2hlZXQoIHN0eWxlU2hlZXQgKTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OmdvdG9BbmNob3IoIGNv
bnN0IFFTdHJpbmcgJm5hbWUgKQotewotICBpZiAoIWQtPm1fZG9jKQotICAgIHJldHVybiBmYWxz
ZTsKLQotICBOb2RlSW1wbCAqbiA9IGQtPm1fZG9jLT5nZXRFbGVtZW50QnlJZChuYW1lKTsKLSAg
aWYgKCFuKSB7Ci0gICAgSFRNTENvbGxlY3Rpb25JbXBsICphbmNob3JzID0KLSAgICAgICAgbmV3
IEhUTUxDb2xsZWN0aW9uSW1wbCggZC0+bV9kb2MsIEhUTUxDb2xsZWN0aW9uSW1wbDo6RE9DX0FO
Q0hPUlMpOwotICAgIGFuY2hvcnMtPnJlZigpOwotICAgIG4gPSBhbmNob3JzLT5uYW1lZEl0ZW0o
bmFtZSwgIWQtPm1fZG9jLT5pbkNvbXBhdE1vZGUoKSk7Ci0gICAgYW5jaG9ycy0+ZGVyZWYoKTsK
LSAgfQotCi0gIGQtPm1fZG9jLT5zZXRDU1NUYXJnZXQobik7IC8vIFNldHRpbmcgdG8gbnVsbCB3
aWxsIGNsZWFyIHRoZSBjdXJyZW50IHRhcmdldC4KLSAgCi0gIC8vIEltcGxlbWVudCB0aGUgcnVs
ZSB0aGF0ICIiIGFuZCAidG9wIiBib3RoIG1lYW4gdG9wIG9mIHBhZ2UgYXMgaW4gb3RoZXIgYnJv
d3NlcnMuCi0gIGlmICghbiAmJiAhKG5hbWUuaXNFbXB0eSgpIHx8IG5hbWUubG93ZXIoKSA9PSAi
dG9wIikpIHsKLSAgICBrZERlYnVnKDYwNTApIDw8ICJLSFRNTFBhcnQ6OmdvdG9BbmNob3Igbm9k
ZSAnIiA8PCBuYW1lIDw8ICInIG5vdCBmb3VuZCIgPDwgZW5kbDsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLQotICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbGF5b3V0IGJlZm9yZSBzY3JvbGxp
bmcsIG90aGVyd2lzZSB3ZSBjb3VsZAotICAvLyByZWFsbHkgbWVzcyB0aGluZ3MgdXAgaWYgYW4g
YW5jaG9yIHNjcm9sbCBjb21lcyBhdCBhIGJhZCBtb21lbnQuCi0gIGlmICggZC0+bV9kb2MgKSB7
Ci0gICAgZC0+bV9kb2MtPnVwZGF0ZVJlbmRlcmluZygpOwotICAgIC8vIE9ubHkgZG8gYSBsYXlv
dXQgaWYgY2hhbmdlcyBoYXZlIG9jY3VycmVkIHRoYXQgbWFrZSBpdCBuZWNlc3NhcnkuICAgICAg
Ci0gICAgaWYgKCBkLT5tX3ZpZXcgJiYgZC0+bV9kb2MtPnJlbmRlcmVyKCkgJiYgZC0+bV9kb2Mt
PnJlbmRlcmVyKCktPm5lZWRzTGF5b3V0KCkgKSB7Ci0gICAgICBkLT5tX3ZpZXctPmxheW91dCgp
OwotICAgIH0KLSAgfQotICAKLSAgLy8gU2Nyb2xsIG5lc3RlZCBsYXllcnMgYW5kIGZyYW1lcyB0
byByZXZlYWwgdGhlIGFuY2hvci4KLSAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlcjsKLSAgUVJlY3Qg
cmVjdDsKLSAgaWYgKG4pIHsKLSAgICAgIHJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKLSAgICAg
IHJlY3QgPSBuLT5nZXRSZWN0KCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gSWYgdGhlcmUncyBubyBu
b2RlLCB3ZSBzaG91bGQgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgotICAgICAg
cmVuZGVyZXIgPSBkLT5tX2RvYy0+cmVuZGVyZXIoKTsKLSAgICAgIHJlY3QgPSBRUmVjdCgpOwot
ICB9Ci0KLSAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgLy8gQWxpZ24gdG8gdGhlIHRvcCBhbmQgdG8g
dGhlIGNsb3Nlc3Qgc2lkZSAodGhpcyBtYXRjaGVzIG90aGVyIGJyb3dzZXJzKS4KLSAgICByZW5k
ZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBSZW5kZXJM
YXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQsIFJlbmRlckxheWVyOjpnQWxpZ25Ub3BBbHdheXMp
OwotICB9Ci0gIAotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNldFN0YW5k
YXJkRm9udCggY29uc3QgUVN0cmluZyAmbmFtZSApCi17Ci0gICAgZC0+bV9zZXR0aW5ncy0+c2V0
U3RkRm9udE5hbWUobmFtZSk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRGaXhlZEZvbnQoIGNv
bnN0IFFTdHJpbmcgJm5hbWUgKQotewotICAgIGQtPm1fc2V0dGluZ3MtPnNldEZpeGVkRm9udE5h
bWUobmFtZSk7Ci19Ci0KLQotUUN1cnNvciBLSFRNTFBhcnQ6OnVybEN1cnNvcigpIGNvbnN0Ci17
Ci0gIC8vIERvbid0IGxvYWQgdGhlIGxpbmsgY3Vyc29yIHVudGlsIGl0J3MgYWN0dWFsbHkgdXNl
ZC4KLSAgLy8gQWxzbywgd2UgZG9uJ3QgbmVlZCBzZXRVUkxDdXJzb3IuCi0gIC8vIFRoaXMgc3Bl
ZWRzIHVwIHN0YXJ0dXAgdGltZS4KLSAgcmV0dXJuIEtDdXJzb3I6OmhhbmRDdXJzb3IoKTsKLX0K
LQotYm9vbCBLSFRNTFBhcnQ6Om9ubHlMb2NhbFJlZmVyZW5jZXMoKSBjb25zdAotewotICByZXR1
cm4gZC0+bV9vbmx5TG9jYWxSZWZlcmVuY2VzOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2V0T25s
eUxvY2FsUmVmZXJlbmNlcyhib29sIGVuYWJsZSkKLXsKLSAgZC0+bV9vbmx5TG9jYWxSZWZlcmVu
Y2VzID0gZW5hYmxlOwotfQotCi1RU3RyaW5nIEtIVE1MUGFydDo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gcGxhaW5UZXh0KHNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSk7
Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0OjpoYXNTZWxlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVy
biBkLT5tX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOwotfQotCi1jb25zdCBTZWxlY3Rpb25D
b250cm9sbGVyICZLSFRNTFBhcnQ6OnNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQt
Pm1fc2VsZWN0aW9uOwotfQotCi1FVGV4dEdyYW51bGFyaXR5IEtIVE1MUGFydDo6c2VsZWN0aW9u
R3JhbnVsYXJpdHkoKSBjb25zdAotewotICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbkdyYW51bGFy
aXR5OwotfQotCi12b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoRVRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSkgY29uc3QKLXsKLSAgICBkLT5tX3NlbGVjdGlvbkdyYW51
bGFyaXR5ID0gZ3JhbnVsYXJpdHk7Ci19Ci0KLWNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJktI
VE1MUGFydDo6ZHJhZ0NhcmV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+bV9kcmFnQ2FyZXQ7
Ci19Ci0KLWNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJktIVE1MUGFydDo6bWFyaygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGQtPm1fbWFyazsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNldE1hcmso
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmcykKLXsKLSAgICBkLT5tX21hcmsgPSBzOwotfQot
Ci12b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIg
JnMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wga2VlcFR5cGluZ1N0eWxlKQotewotICAgIGlmIChk
LT5tX3NlbGVjdGlvbiA9PSBzKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
Y2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwotCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBvbGRT
ZWxlY3Rpb24gPSBkLT5tX3NlbGVjdGlvbjsKLQotICAgIGQtPm1fc2VsZWN0aW9uID0gczsKLSAg
ICBpZiAoIXMuaXNOb25lKCkpCi0gICAgICAgIHNldEZvY3VzTm9kZUlmTmVlZGVkKCk7Ci0gICAg
Ci0gICAgc2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpOwotCi0gICAgLy8gQWx3YXlzIGNsZWFyIHRo
ZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCi0gICAgLy8g
SXQgd2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2Rl
IGlmIG5lY2Vzc2FyeS4KLSAgICBkLT5tX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9
IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwotCi0gICAgaWYgKGNsb3NlVHlwaW5n
KQotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhsYXN0RWRpdENvbW1hbmQoKSk7
Ci0KLSAgICBpZiAoIWtlZXBUeXBpbmdTdHlsZSkKLSAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgp
OwotICAgIAotICAgIEtXUSh0aGlzKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxl
Y3Rpb24sIGNsb3NlVHlwaW5nKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNldERyYWdDYXJldChj
b25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZkcmFnQ2FyZXQpCi17Ci0gICAgaWYgKGQtPm1fZHJh
Z0NhcmV0ICE9IGRyYWdDYXJldCkgewotICAgICAgICBkLT5tX2RyYWdDYXJldC5uZWVkc0NhcmV0
UmVwYWludCgpOwotICAgICAgICBkLT5tX2RyYWdDYXJldCA9IGRyYWdDYXJldDsKLSAgICAgICAg
ZC0+bV9kcmFnQ2FyZXQubmVlZHNDYXJldFJlcGFpbnQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgS0hU
TUxQYXJ0OjpjbGVhclNlbGVjdGlvbigpCi17Ci0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNv
bnRyb2xsZXIoKSk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjppbnZhbGlkYXRlU2VsZWN0aW9uKCkK
LXsKLSAgICBjbGVhckNhcmV0UmVjdElmTmVlZGVkKCk7Ci0gICAgZC0+bV9zZWxlY3Rpb24uc2V0
TmVlZHNMYXlvdXQoKTsKLSAgICBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQg
S0hUTUxQYXJ0OjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQotewotICAgIGlmIChkLT5tX2Nh
cmV0VmlzaWJsZSA9PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOwotICAgIGlmIChmbGFnKQotICAgICAgICBzZXRGb2N1c05vZGVJZk5lZWRlZCgp
OwotICAgIGQtPm1fY2FyZXRWaXNpYmxlID0gZmxhZzsKLSAgICBzZWxlY3Rpb25MYXlvdXRDaGFu
Z2VkKCk7Ci19Ci0KLQotdm9pZCBLSFRNTFBhcnQ6OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQot
ewotICAgIGlmIChkLT5tX2NhcmV0UGFpbnQpIHsKLSAgICAgICAgZC0+bV9jYXJldFBhaW50ID0g
ZmFsc2U7Ci0gICAgICAgIGQtPm1fc2VsZWN0aW9uLm5lZWRzQ2FyZXRSZXBhaW50KCk7Ci0gICAg
fSAgICAgICAgCi19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRlbGxzIHdoZXRoZXIgYSBw
YXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0IGhhcyBhbiBlbnRpcmUKLS8vIEtIVE1M
UGFydCBhbmQgS0hUTUxWaWV3LCBhIDxmcmFtZT4sIDxpZnJhbWU+LCBvciA8b2JqZWN0Pi4KLXN0
YXRpYyBib29sIGlzRnJhbWUoY29uc3QgTm9kZUltcGwgKm4pCi17Ci0gICAgaWYgKCFuKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG4tPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBRV2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJXaWRnZXQgKj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKLSAgICByZXR1cm4gd2lkZ2V0ICYmIHdp
ZGdldC0+aW5oZXJpdHMoIktIVE1MVmlldyIpOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2V0Rm9j
dXNOb2RlSWZOZWVkZWQoKQotewotICAgIGlmICgheG1sRG9jSW1wbCgpIHx8IGQtPm1fc2VsZWN0
aW9uLmlzTm9uZSgpIHx8ICFkLT5tX2lzRm9jdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Tm9kZUltcGwgKnN0YXJ0Tm9kZSA9IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOwotICAg
IE5vZGVJbXBsICp0YXJnZXQgPSBzdGFydE5vZGUgPyBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IDA7Ci0gICAgCi0gICAgaWYgKHRhcmdldCkgewotICAgICAgICBmb3IgKCA7IHRh
cmdldDsgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gc2V0IGZvY3VzIG9uIGEgc3ViZnJhbWUgd2hlbiBzZWxlY3RpbmcgaW4g
YSBwYXJlbnQgZnJhbWUsCi0gICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFpc0ZyYW1lIGNoZWNr
IGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwotICAgICAg
ICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZp
eCBhdCB0aGlzIHRpbWUuCi0gICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxl
KCkgJiYgIWlzRnJhbWUodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIHhtbERvY0ltcGwoKS0+
c2V0Rm9jdXNOb2RlKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHhtbERvY0ltcGwoKS0+c2V0Rm9jdXNOb2RlKDApOwot
ICAgIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNlbGVjdGlvbkxheW91dENoYW5nZWQoKQotewot
ICAgIC8vIGtpbGwgYW55IGNhcmV0IGJsaW5rIHRpbWVyIG5vdyBydW5uaW5nCi0gICAgaWYgKGQt
Pm1fY2FyZXRCbGlua1RpbWVyID49IDApIHsKLSAgICAgICAga2lsbFRpbWVyKGQtPm1fY2FyZXRC
bGlua1RpbWVyKTsKLSAgICAgICAgZC0+bV9jYXJldEJsaW5rVGltZXIgPSAtMTsKLSAgICB9Ci0K
LSAgICAvLyBzZWUgaWYgYSBuZXcgY2FyZXQgYmxpbmsgdGltZXIgbmVlZHMgdG8gYmUgc3RhcnRl
ZAotICAgIGlmIChkLT5tX2NhcmV0VmlzaWJsZSAmJiBkLT5tX2NhcmV0QmxpbmtzICYmIAotICAg
ICAgICBkLT5tX3NlbGVjdGlvbi5pc0NhcmV0KCkgJiYgZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5u
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgZC0+bV9jYXJldEJsaW5rVGlt
ZXIgPSBzdGFydFRpbWVyKENBUkVUX0JMSU5LX0ZSRVFVRU5DWSk7Ci0gICAgICAgIGQtPm1fY2Fy
ZXRQYWludCA9IHRydWU7Ci0gICAgICAgIGQtPm1fc2VsZWN0aW9uLm5lZWRzQ2FyZXRSZXBhaW50
KCk7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1fZG9jKQotICAgICAgICBkLT5tX2RvYy0+dXBkYXRl
U2VsZWN0aW9uKCk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRYUG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24oaW50IHgpCi17Ci0gICAgZC0+bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24gPSB4OwotfQotCi1pbnQgS0hUTUxQYXJ0Ojp4UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBkLT5tX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKmUp
Ci17Ci0gICAgaWYgKGUtPnRpbWVySWQoKSA9PSBkLT5tX2NhcmV0QmxpbmtUaW1lciAmJiAKLSAg
ICAgICAgZC0+bV9jYXJldFZpc2libGUgJiYgCi0gICAgICAgIGQtPm1fY2FyZXRCbGlua3MgJiYg
Ci0gICAgICAgIGQtPm1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZC0+bV9i
TW91c2VQcmVzc2VkKSB7Ci0gICAgICAgICAgICBpZiAoIWQtPm1fY2FyZXRQYWludCkgewotICAg
ICAgICAgICAgICAgIGQtPm1fY2FyZXRQYWludCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZC0+
bV9zZWxlY3Rpb24ubmVlZHNDYXJldFJlcGFpbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGQtPm1fY2FyZXRQYWludCA9ICFkLT5tX2Nh
cmV0UGFpbnQ7Ci0gICAgICAgICAgICBkLT5tX3NlbGVjdGlvbi5uZWVkc0NhcmV0UmVwYWludCgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEtIVE1MUGFydDo6cGFpbnRDYXJldChRUGFp
bnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpIGNvbnN0Ci17Ci0gICAgaWYgKGQtPm1fY2FyZXRQ
YWludCkKLSAgICAgICAgZC0+bV9zZWxlY3Rpb24ucGFpbnRDYXJldChwLCByZWN0KTsKLX0KLQot
dm9pZCBLSFRNTFBhcnQ6OnBhaW50RHJhZ0NhcmV0KFFQYWludGVyICpwLCBjb25zdCBRUmVjdCAm
cmVjdCkgY29uc3QKLXsKLSAgICBkLT5tX2RyYWdDYXJldC5wYWludENhcmV0KHAsIHJlY3QpOwot
fQotCi0KLXZvaWQgS0hUTUxQYXJ0Ojp1cmxTZWxlY3RlZCggY29uc3QgUVN0cmluZyAmdXJsLCBp
bnQgYnV0dG9uLCBpbnQgc3RhdGUsIGNvbnN0IFFTdHJpbmcgJl90YXJnZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEtQYXJ0czo6VVJMQXJncyBhcmdzICkKLXsKLSAgYm9vbCBoYXNU
YXJnZXQgPSBmYWxzZTsKLQotICBRU3RyaW5nIHRhcmdldCA9IF90YXJnZXQ7Ci0gIGlmICggdGFy
Z2V0LmlzRW1wdHkoKSAmJiBkLT5tX2RvYyApCi0gICAgdGFyZ2V0ID0gZC0+bV9kb2MtPmJhc2VU
YXJnZXQoKTsKLSAgaWYgKCAhdGFyZ2V0LmlzRW1wdHkoKSApCi0gICAgICBoYXNUYXJnZXQgPSB0
cnVlOwotCi0gIGlmICggdXJsLmZpbmQoIFFTdHJpbmc6OmZyb21MYXRpbjEoICJqYXZhc2NyaXB0
OiIgKSwgMCwgZmFsc2UgKSA9PSAwICkKLSAgewotICAgIGV4ZWN1dGVTY3JpcHQoIEtVUkw6OmRl
Y29kZV9zdHJpbmcoIHVybC5yaWdodCggdXJsLmxlbmd0aCgpIC0gMTEpICksIHRydWUgKTsKLSAg
ICByZXR1cm47Ci0gIH0KLQotICBLVVJMIGNVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOwotCi0gIGlm
ICggIWNVUkwuaXNWYWxpZCgpICkKLSAgICAvLyAjIyMgRVJST1IgSEFORExJTkcKLSAgICByZXR1
cm47Ci0KLSAgLy9rZERlYnVnKCA2MDAwICkgPDwgInVybFNlbGVjdGVkOiBjb21wbGV0ZSBVUkw6
IiA8PCBjVVJMLnVybCgpIDw8ICIgdGFyZ2V0ID0gIiA8PCB0YXJnZXQgPDwgZW5kbDsKLQotCi0g
IGFyZ3MuZnJhbWVOYW1lID0gdGFyZ2V0OwotCi0gIGlmICggZC0+bV9iSFRUUFJlZnJlc2ggKQot
ICB7Ci0gICAgZC0+bV9iSFRUUFJlZnJlc2ggPSBmYWxzZTsKLSAgICBhcmdzLm1ldGFEYXRhKClb
ImNhY2hlIl0gPSAicmVmcmVzaCI7Ci0gIH0KLQotCi0gIGlmICghZC0+bV9yZWZlcnJlci5pc0Vt
cHR5KCkpCi0gICAgYXJncy5tZXRhRGF0YSgpWyJyZWZlcnJlciJdID0gZC0+bV9yZWZlcnJlcjsK
LSAgS1dRKHRoaXMpLT51cmxTZWxlY3RlZChjVVJMLCBidXR0b24sIHN0YXRlLCBhcmdzKTsKLX0K
LQotCi1ib29sIEtIVE1MUGFydDo6cmVxdWVzdEZyYW1lKCBraHRtbDo6UmVuZGVyUGFydCAqZnJh
bWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmZnJhbWVOYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMsIGNv
bnN0IFFTdHJpbmdMaXN0ICZwYXJhbVZhbHVlcywgYm9vbCBpc0lGcmFtZSApCi17Ci0gIEZyYW1l
SXQgaXQgPSBkLT5tX2ZyYW1lcy5maW5kKCBmcmFtZU5hbWUgKTsKLSAgaWYgKGl0ID09IGQtPm1f
ZnJhbWVzLmVuZCgpKSB7Ci0gICAga2h0bWw6OkNoaWxkRnJhbWUgY2hpbGQ7Ci0gICAgY2hpbGQu
bV9uYW1lID0gZnJhbWVOYW1lOwotICAgIGl0ID0gZC0+bV9mcmFtZXMuYXBwZW5kKCBjaGlsZCAp
OwotICB9Ci0KLSAgKCppdCkubV90eXBlID0gaXNJRnJhbWUgPyBraHRtbDo6Q2hpbGRGcmFtZTo6
SUZyYW1lIDoga2h0bWw6OkNoaWxkRnJhbWU6OkZyYW1lOwotICAoKml0KS5tX2ZyYW1lID0gZnJh
bWU7Ci0gICgqaXQpLm1fcGFyYW1WYWx1ZXMgPSBwYXJhbU5hbWVzOwotICAoKml0KS5tX3BhcmFt
TmFtZXMgPSBwYXJhbVZhbHVlczsKLQotICAvLyBTdXBwb3J0IGZvciA8ZnJhbWUgc3JjPSJqYXZh
c2NyaXB0OnN0cmluZyI+Ci0gIGlmICh1cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxz
ZSkpIHsKLSAgICBpZiAoIXByb2Nlc3NPYmplY3RSZXF1ZXN0KCYoKml0KSwgImFib3V0OmJsYW5r
IiwgInRleHQvaHRtbCIgKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEtIVE1MUGFydCAq
bmV3UGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPigmKigqaXQpLm1fcGFydCk7IAotICAg
IG5ld1BhcnQtPnJlcGxhY2VDb250ZW50c1dpdGhTY3JpcHRSZXN1bHQoIHVybCApOwotCi0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gcmVxdWVzdE9iamVjdCggJigqaXQpLCBjb21w
bGV0ZVVSTCggdXJsICkpOwotfQotCi1RU3RyaW5nIEtIVE1MUGFydDo6cmVxdWVzdEZyYW1lTmFt
ZSgpCi17Ci0gICAgcmV0dXJuIEtXUSh0aGlzKS0+Z2VuZXJhdGVGcmFtZU5hbWUoKTsKLX0KLQot
Ym9vbCBLSFRNTFBhcnQ6OnJlcXVlc3RPYmplY3QoIGtodG1sOjpSZW5kZXJQYXJ0ICpmcmFtZSwg
Y29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZzZXJ2aWNlVHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1OYW1lcywgY29u
c3QgUVN0cmluZ0xpc3QgJnBhcmFtVmFsdWVzICkKLXsKLSAga2h0bWw6OkNoaWxkRnJhbWUgY2hp
bGQ7Ci0gIFFWYWx1ZUxpc3Q8a2h0bWw6OkNoaWxkRnJhbWU+OjpJdGVyYXRvciBpdCA9IGQtPm1f
b2JqZWN0cy5hcHBlbmQoIGNoaWxkICk7Ci0gICgqaXQpLm1fZnJhbWUgPSBmcmFtZTsKLSAgKCpp
dCkubV90eXBlID0ga2h0bWw6OkNoaWxkRnJhbWU6Ok9iamVjdDsKLSAgKCppdCkubV9wYXJhbU5h
bWVzID0gcGFyYW1OYW1lczsKLSAgKCppdCkubV9wYXJhbVZhbHVlcyA9IHBhcmFtVmFsdWVzOwot
ICAoKml0KS5tX2hhc0ZhbGxiYWNrQ29udGVudCA9IGZyYW1lLT5oYXNGYWxsYmFja0NvbnRlbnQo
KTsKLQotICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAgIGNv
bXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7Ci0KLSAgS1BhcnRzOjpVUkxBcmdzIGFyZ3M7
Ci0gIGFyZ3Muc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZTsKLSAgcmV0dXJuIHJlcXVlc3RPYmpl
Y3QoICYoKml0KSwgY29tcGxldGVkVVJMLCBhcmdzICk7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0Ojpy
ZXF1ZXN0T2JqZWN0KCBraHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwg
Y29uc3QgS1BhcnRzOjpVUkxBcmdzICZfYXJncyApCi17Ci0gIGlmICggY2hpbGQtPm1fYlByZWxv
YWRlZCApCi0gIHsKLSAgICAvLyBrZERlYnVnKDYwMDUpIDw8ICJLSFRNTFBhcnQ6OnJlcXVlc3RP
YmplY3QgcHJlbG9hZCIgPDwgZW5kbDsKLSAgICBpZiAoIGNoaWxkLT5tX2ZyYW1lICYmIGNoaWxk
LT5tX3BhcnQgJiYgY2hpbGQtPm1fcGFydC0+d2lkZ2V0KCkgKQotICAgICAgY2hpbGQtPm1fZnJh
bWUtPnNldFdpZGdldCggY2hpbGQtPm1fcGFydC0+d2lkZ2V0KCkgKTsKLQotICAgIGNoaWxkLT5t
X2JQcmVsb2FkZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEtQYXJ0czo6
VVJMQXJncyBhcmdzKCBfYXJncyApOwotCi0KLSAgaWYgKCBjaGlsZC0+bV9wYXJ0ICYmICFhcmdz
LnJlbG9hZCAmJiB1cmxjbXAoIGNoaWxkLT5tX3BhcnQtPnVybCgpLnVybCgpLCB1cmwudXJsKCks
IHRydWUsIHRydWUgKSApCi0gICAgYXJncy5zZXJ2aWNlVHlwZSA9IGNoaWxkLT5tX3NlcnZpY2VU
eXBlOwotCi0gIGNoaWxkLT5tX2FyZ3MgPSBhcmdzOwotICBjaGlsZC0+bV9hcmdzLnJlbG9hZCA9
IChkLT5tX2NhY2hlUG9saWN5ID09IEtJTzo6Q0NfUmVsb2FkKSB8fCAoZC0+bV9jYWNoZVBvbGlj
eSA9PSBLSU86OkNDX1JlZnJlc2gpOwotICBjaGlsZC0+bV9zZXJ2aWNlTmFtZSA9IFFTdHJpbmc6
Om51bGw7Ci0gIGlmICghZC0+bV9yZWZlcnJlci5pc0VtcHR5KCkgJiYgIWNoaWxkLT5tX2FyZ3Mu
bWV0YURhdGEoKS5jb250YWlucyggInJlZmVycmVyIiApKQotICAgIGNoaWxkLT5tX2FyZ3MubWV0
YURhdGEoKVsicmVmZXJyZXIiXSA9IGQtPm1fcmVmZXJyZXI7Ci0KLQotICAvLyBXZSB3YW50IGEg
S0hUTUxQYXJ0IGlmIHRoZSBIVE1MIHNheXMgPGZyYW1lIHNyYz0iIj4gb3IgPGZyYW1lIHNyYz0i
YWJvdXQ6YmxhbmsiPgotICBpZiAoKHVybC5pc0VtcHR5KCkgfHwgdXJsLnVybCgpID09ICJhYm91
dDpibGFuayIpICYmIGFyZ3Muc2VydmljZVR5cGUuaXNFbXB0eSgpKQotICAgIGFyZ3Muc2Vydmlj
ZVR5cGUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAidGV4dC9odG1sIiApOwotCi0gIHJldHVybiBw
cm9jZXNzT2JqZWN0UmVxdWVzdCggY2hpbGQsIHVybCwgYXJncy5zZXJ2aWNlVHlwZSApOwotfQot
Ci1ib29sIEtIVE1MUGFydDo6cHJvY2Vzc09iamVjdFJlcXVlc3QoIGtodG1sOjpDaGlsZEZyYW1l
ICpjaGlsZCwgY29uc3QgS1VSTCAmX3VybCwgY29uc3QgUVN0cmluZyAmbWltZXR5cGUgKQotewot
ICAvL2tkRGVidWcoIDYwNTAgKSA8PCAiS0hUTUxQYXJ0Ojpwcm9jZXNzT2JqZWN0UmVxdWVzdCB0
cnlpbmcgdG8gY3JlYXRlIHBhcnQgZm9yICIgPDwgbWltZXR5cGUgPDwgZW5kbDsKLQotICAvLyBJ
TVBPUlRBTlQ6IGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHVybCBoZXJlLCBiZWNhdXNlIGl0IGlzIGp1
c3QgYSByZWZlcmVuY2UsIHdoaWNoIHdhcyBsaWtlbHkgdG8gYmUgZ2l2ZW4KLSAgLy8gYnkgYW4g
ZW1pdHRpbmcgZnJhbWUgcGFydCAoZW1pdCBvcGVuVVJMUmVxdWVzdCggYmxhaHVybCwgLi4uICkg
LiBBIGZldyBsaW5lcyBiZWxvdyB3ZSBkZWxldGUgdGhlIHBhcnQKLSAgLy8gdGhvdWdoIC0+IHRo
ZSByZWZlcmVuY2UgYmVjb21lcyBpbnZhbGlkIC0+IGNyYXNoIGlzIGxpa2VseQotICBLVVJMIHVy
bCggX3VybCApOwotCi0gIC8vIGtodG1scnVuIGNhbGxlZCB1cyB0aGlzIHdheSB0byBpbmRpY2F0
ZSBhIGxvYWRpbmcgZXJyb3IKLSAgaWYgKCBkLT5tX29ubHlMb2NhbFJlZmVyZW5jZXMgfHwgKCB1
cmwuaXNFbXB0eSgpICYmIG1pbWV0eXBlLmlzRW1wdHkoKSApICkKLSAgewotICAgICAgY2hlY2tF
bWl0TG9hZEV2ZW50KCk7Ci0gICAgICBjaGlsZC0+bV9iQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAg
IHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGNoaWxkLT5tX2JOb3RpZnkpCi0gIHsKLSAgICAg
IGNoaWxkLT5tX2JOb3RpZnkgPSBmYWxzZTsKLSAgICAgIGlmICggIWNoaWxkLT5tX2FyZ3MubG9j
a0hpc3RvcnkoKSApCi0gICAgICAgICAgZW1pdCBkLT5tX2V4dGVuc2lvbi0+b3BlblVSTE5vdGlm
eSgpOwotICB9Ci0KLSAgaWYgKCBjaGlsZC0+bV9wYXJ0ICkKLSAgewotICAgIEtIVE1MUGFydCAq
cGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPigmKmNoaWxkLT5tX3BhcnQpOwotICAgIGlm
IChwYXJ0ICYmIHBhcnQtPmluaGVyaXRzKCJLSFRNTFBhcnQiKSkgewotICAgICAgS1BhcnRzOjpV
UkxBcmdzIGFyZ3M7Ci0gICAgICBpZiAoIWQtPm1fcmVmZXJyZXIuaXNFbXB0eSgpKQotICAgICAg
ICBhcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwotICAgICAgS1dR
KHBhcnQpLT5vcGVuVVJMUmVxdWVzdCh1cmwsIGFyZ3MpOwotICAgIH0KLSAgfQotICBlbHNlCi0g
IHsKLSAgICBLUGFydHM6OlJlYWRPbmx5UGFydCAqcGFydCA9IEtXUSh0aGlzKS0+Y3JlYXRlUGFy
dCgqY2hpbGQsIHVybCwgbWltZXR5cGUpOwotICAgIEtIVE1MUGFydCAqa2h0bWxfcGFydCA9IHN0
YXRpY19jYXN0PEtIVE1MUGFydCAqPihwYXJ0KTsKLSAgICBpZiAoa2h0bWxfcGFydCAmJiBraHRt
bF9wYXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCi0gICAgICBraHRtbF9wYXJ0LT5jaGlsZEJl
Z2luKCk7Ci0KLSAgICBpZiAoIXBhcnQpIHsKLSAgICAgICAgY2hlY2tFbWl0TG9hZEV2ZW50KCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvL0NSSVRJQ0FMIFNUVUZGCi0g
ICAgaWYgKCBjaGlsZC0+bV9wYXJ0ICkKLSAgICB7Ci0gICAgICBkaXNjb25uZWN0Q2hpbGQoY2hp
bGQpOwotICAgICAgY2hpbGQtPm1fcGFydC0+ZGVyZWYoKTsKLSAgICB9Ci0KLSAgICBjaGlsZC0+
bV9zZXJ2aWNlVHlwZSA9IG1pbWV0eXBlOwotICAgIGlmICggY2hpbGQtPm1fZnJhbWUgJiYgcGFy
dC0+d2lkZ2V0KCkgKQotICAgICAgY2hpbGQtPm1fZnJhbWUtPnNldFdpZGdldCggcGFydC0+d2lk
Z2V0KCkgKTsKLQotCi0gICAgY2hpbGQtPm1fcGFydCA9IHBhcnQ7Ci0gICAgYXNzZXJ0KCAoKHZv
aWQqKSBjaGlsZC0+bV9wYXJ0KSAhPSAwKTsKLQotICAgIGNvbm5lY3RDaGlsZChjaGlsZCk7Ci0K
LSAgfQotCi0gIGNoZWNrRW1pdExvYWRFdmVudCgpOwotICAvLyBTb21lIEpTIGNvZGUgaW4gdGhl
IGxvYWQgZXZlbnQgbWF5IGhhdmUgZGVzdHJveWVkIHRoZSBwYXJ0Ci0gIC8vIEluIHRoYXQgY2Fz
ZSwgYWJvcnQKLSAgaWYgKCAhY2hpbGQtPm1fcGFydCApCi0gICAgcmV0dXJuIGZhbHNlOwotCi0g
IGlmICggY2hpbGQtPm1fYlByZWxvYWRlZCApCi0gIHsKLSAgICBpZiAoIGNoaWxkLT5tX2ZyYW1l
ICYmIGNoaWxkLT5tX3BhcnQgKQotICAgICAgY2hpbGQtPm1fZnJhbWUtPnNldFdpZGdldCggY2hp
bGQtPm1fcGFydC0+d2lkZ2V0KCkgKTsKLQotICAgIGNoaWxkLT5tX2JQcmVsb2FkZWQgPSBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGNoaWxkLT5tX2FyZ3MucmVsb2FkID0gKGQt
Pm1fY2FjaGVQb2xpY3kgPT0gS0lPOjpDQ19SZWxvYWQpIHx8IChkLT5tX2NhY2hlUG9saWN5ID09
IEtJTzo6Q0NfUmVmcmVzaCk7Ci0KLSAgLy8gbWFrZSBzdXJlIHRoZSBwYXJ0IGhhcyBhIHdheSB0
byBmaW5kIG91dCBhYm91dCB0aGUgbWltZXR5cGUuCi0gIC8vIHdlIGFjdHVhbGx5IHNldCBpdCBp
biBjaGlsZC0+bV9hcmdzIGluIHJlcXVlc3RPYmplY3QgYWxyZWFkeSwKLSAgLy8gYnV0IGl0J3Mg
dXNlbGVzcyBpZiB3ZSBoYWQgdG8gdXNlIGEgS0hUTUxSdW4gaW5zdGFuY2UsIGFzIHRoZQotICAv
LyBwb2ludCB0aGUgcnVuIG9iamVjdCBpcyB0byBmaW5kIG91dCBleGFjdGx5IHRoZSBtaW1ldHlw
ZS4KLSAgY2hpbGQtPm1fYXJncy5zZXJ2aWNlVHlwZSA9IG1pbWV0eXBlOwotCi0gIGNoaWxkLT5t
X2JDb21wbGV0ZWQgPSBmYWxzZTsKLSAgaWYgKCBjaGlsZC0+bV9leHRlbnNpb24gKQotICAgIGNo
aWxkLT5tX2V4dGVuc2lvbi0+c2V0VVJMQXJncyggY2hpbGQtPm1fYXJncyApOwotCi0gIC8vIElu
IHRoZXNlIGNhc2VzLCB0aGUgc3luY2hyb25vdXMgbG9hZCB3b3VsZCBoYXZlIGZpbmlzaGVkCi0g
IC8vIGJlZm9yZSB3ZSBjb3VsZCBjb25uZWN0IHRoZSBzaWduYWxzLCBzbyBtYWtlIHN1cmUgdG8g
c2VuZCB0aGUgCi0gIC8vIGNvbXBsZXRlZCgpIHNpZ25hbCBmb3IgdGhlIGNoaWxkIGJ5IGhhbmQK
LSAgLy8gRklYTUU6IEluIHRoaXMgY2FzZSB0aGUgS0hUTUxQYXJ0IHdpbGwgaGF2ZSBmaW5pc2hl
ZCBsb2FkaW5nIGJlZm9yZSAKLSAgLy8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUgY2hpbGQgbGlz
dC4gIEl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvCi0gIC8vIGNyZWF0ZSB0aGUgY2hpbGQgZmly
c3QsIHRoZW4gaW52b2tlIHRoZSBsb2FkZXIgc2VwYXJhdGVseSAgCi0gIGlmICh1cmwuaXNFbXB0
eSgpIHx8IHVybC51cmwoKSA9PSAiYWJvdXQ6YmxhbmsiKSB7Ci0gICAgICBSZWFkT25seVBhcnQg
KnJlYWRPbmx5UGFydCA9IGNoaWxkLT5tX3BhcnQ7Ci0gICAgICBLSFRNTFBhcnQgKnBhcnQgPSBz
dGF0aWNfY2FzdDxLSFRNTFBhcnQgKj4ocmVhZE9ubHlQYXJ0KTsKLSAgICAgIGlmIChwYXJ0ICYm
IHBhcnQtPmluaGVyaXRzKCJLSFRNTFBhcnQiKSkgewotICAgICAgICAgIHBhcnQtPmNvbXBsZXRl
ZCgpOwotICAgICAgICAgIHBhcnQtPmNoZWNrQ29tcGxldGVkKCk7Ci0gICAgICB9Ci0gIH0KLSAg
ICAgIHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtQWdhaW4o
KQotewotICBpZiggZC0+bV9kb2MgJiYgIWQtPm1fZG9jLT5wYXJzaW5nKCkgJiYgZC0+bV9zdWJt
aXRGb3JtKQotICAgIEtIVE1MUGFydDo6c3VibWl0Rm9ybSggZC0+bV9zdWJtaXRGb3JtLT5zdWJt
aXRBY3Rpb24sIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0VXJsLCBkLT5tX3N1Ym1pdEZvcm0tPnN1
Ym1pdEZvcm1EYXRhLCBkLT5tX3N1Ym1pdEZvcm0tPnRhcmdldCwgZC0+bV9zdWJtaXRGb3JtLT5z
dWJtaXRDb250ZW50VHlwZSwgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRCb3VuZGFyeSApOwotCi0g
IGRlbGV0ZSBkLT5tX3N1Ym1pdEZvcm07Ci0gIGQtPm1fc3VibWl0Rm9ybSA9IDA7Ci0gIGRpc2Nv
bm5lY3QodGhpcywgU0lHTkFMKGNvbXBsZXRlZCgpKSwgdGhpcywgU0xPVChzdWJtaXRGb3JtQWdh
aW4oKSkpOwotfQotCi12b2lkIEtIVE1MUGFydDo6c3VibWl0Rm9ybSggY29uc3QgY2hhciAqYWN0
aW9uLCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IEZvcm1EYXRhICZmb3JtRGF0YSwgY29uc3Qg
UVN0cmluZyAmX3RhcmdldCwgY29uc3QgUVN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFFTdHJp
bmcmIGJvdW5kYXJ5ICkKLXsKLSAga2REZWJ1Zyg2MDAwKSA8PCB0aGlzIDw8ICI6IEtIVE1MUGFy
dDo6c3VibWl0Rm9ybSB0YXJnZXQ9IiA8PCBfdGFyZ2V0IDw8ICIgdXJsPSIgPDwgdXJsIDw8IGVu
ZGw7Ci0gIEtVUkwgdSA9IGNvbXBsZXRlVVJMKCB1cmwgKTsKLQotICBpZiAoIXUuaXNWYWxpZCgp
KQotICAgIC8vICMjIyBFUlJPUiBIQU5ETElORyEKLSAgICByZXR1cm47Ci0KLSAgUVN0cmluZyB1
cmxzdHJpbmcgPSB1LnVybCgpOwotICBpZiAodXJsc3RyaW5nLnN0YXJ0c1dpdGgoImphdmFzY3Jp
cHQ6IiwgZmFsc2UpKSB7Ci0gICAgdXJsc3RyaW5nID0gS1VSTDo6ZGVjb2RlX3N0cmluZyh1cmxz
dHJpbmcpOwotICAgIGQtPm1fZXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24gPSB0cnVlOwot
ICAgIGV4ZWN1dGVTY3JpcHQoIHVybHN0cmluZy5yaWdodCggdXJsc3RyaW5nLmxlbmd0aCgpIC0g
MTEpICk7Ci0gICAgZC0+bV9leGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbiA9IGZhbHNlOwot
ICAgIHJldHVybjsKLSAgfQotCi0gIEtQYXJ0czo6VVJMQXJncyBhcmdzOwotCi0gIGlmICghZC0+
bV9yZWZlcnJlci5pc0VtcHR5KCkpCi0gICAgIGFyZ3MubWV0YURhdGEoKVsicmVmZXJyZXIiXSA9
IGQtPm1fcmVmZXJyZXI7Ci0KLSAgYXJncy5mcmFtZU5hbWUgPSBfdGFyZ2V0LmlzRW1wdHkoKSA/
IGQtPm1fZG9jLT5iYXNlVGFyZ2V0KCkgOiBfdGFyZ2V0IDsKLQotICAvLyBIYW5kbGUgbWFpbHRv
OiBmb3JtcwotICBpZiAodS5wcm90b2NvbCgpID09ICJtYWlsdG8iKSB7Ci0gICAgICAvLyAxKSAg
Q2hlY2sgZm9yIGF0dGFjaD0gYW5kIHN0cmlwIGl0Ci0gICAgICBRU3RyaW5nIHEgPSB1LnF1ZXJ5
KCkubWlkKDEpOwotICAgICAgUVN0cmluZ0xpc3QgbnZwcyA9IFFTdHJpbmdMaXN0OjpzcGxpdCgi
JiIsIHEpOwotICAgICAgYm9vbCB0cmllZFRvQXR0YWNoID0gZmFsc2U7Ci0KLSAgICAgIGZvciAo
UVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIG52cCA9IG52cHMuYmVnaW4oKTsgbnZwICE9IG52cHMuZW5k
KCk7ICsrbnZwKSB7Ci0gICAgICAgICBRU3RyaW5nTGlzdCBwYWlyID0gUVN0cmluZ0xpc3Q6OnNw
bGl0KCI9IiwgKm52cCk7Ci0gICAgICAgICBpZiAocGFpci5jb3VudCgpID49IDIpIHsKLSAgICAg
ICAgICAgIGlmIChwYWlyLmZpcnN0KCkubG93ZXIoKSA9PSAiYXR0YWNoIikgewotICAgICAgICAg
ICAgICAgbnZwID0gbnZwcy5yZW1vdmUobnZwKTsKLSAgICAgICAgICAgICAgIHRyaWVkVG9BdHRh
Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgfQotCi0KLSAgICAg
IC8vIDIpICBBcHBlbmQgYm9keT0KLSAgICAgIFFTdHJpbmcgYm9keUVuYzsKLSAgICAgIGlmIChj
b250ZW50VHlwZS5sb3dlcigpID09ICJtdWx0aXBhcnQvZm9ybS1kYXRhIikgewotICAgICAgICAg
Ly8gRklYTUU6IGlzIHRoaXMgY29ycmVjdD8gIEkgc3VzcGVjdCBub3QKLSAgICAgICAgIGJvZHlF
bmMgPSBLVVJMOjplbmNvZGVfc3RyaW5nKGZvcm1EYXRhLmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAg
ICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUubG93ZXIoKSA9PSAidGV4dC9wbGFpbiIpIHsKLSAg
ICAgICAgIC8vIENvbnZlbnRpb24gc2VlbXMgdG8gYmUgdG8gZGVjb2RlLCBhbmQgcy8mL1xuLwot
ICAgICAgICAgUVN0cmluZyB0bXBib2R5ID0gZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCk7Ci0g
ICAgICAgICB0bXBib2R5LnJlcGxhY2UoJyYnLCAnXG4nKTsKLSAgICAgICAgIHRtcGJvZHkucmVw
bGFjZSgnKycsICcgJyk7Ci0gICAgICAgICB0bXBib2R5ID0gS1VSTDo6ZGVjb2RlX3N0cmluZyh0
bXBib2R5KTsgIC8vIERlY29kZSB0aGUgcmVzdCBvZiBpdAotICAgICAgICAgYm9keUVuYyA9IEtV
Ukw6OmVuY29kZV9zdHJpbmcodG1wYm9keSk7ICAvLyBSZWNvZGUgZm9yIHRoZSBVUkwKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICBib2R5RW5jID0gS1VSTDo6ZW5jb2RlX3N0cmluZyhmb3JtRGF0
YS5mbGF0dGVuVG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIG52cHMuYXBwZW5kKFFTdHJp
bmcoImJvZHk9JTEiKS5hcmcoYm9keUVuYykpOwotICAgICAgcSA9IG52cHMuam9pbigiJiIpOwot
ICAgICAgdS5zZXRRdWVyeShxKTsKLSAgfSAKLQotICBpZiAoIHN0cmNtcCggYWN0aW9uLCAiZ2V0
IiApID09IDAgKSB7Ci0gICAgaWYgKHUucHJvdG9jb2woKSAhPSAibWFpbHRvIikKLSAgICAgICB1
LnNldFF1ZXJ5KCBmb3JtRGF0YS5mbGF0dGVuVG9TdHJpbmcoKSApOwotICAgIGFyZ3Muc2V0RG9Q
b3N0KCBmYWxzZSApOwotICB9Ci0gIGVsc2UgewotICAgIGFyZ3MucG9zdERhdGEgPSBmb3JtRGF0
YTsKLSAgICBhcmdzLnNldERvUG9zdCggdHJ1ZSApOwotCi0gICAgLy8gY29uc3RydWN0IHNvbWUg
dXNlciBoZWFkZXJzIGlmIG5lY2Vzc2FyeQotICAgIGlmIChjb250ZW50VHlwZS5pc051bGwoKSB8
fCBjb250ZW50VHlwZSA9PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikKLSAg
ICAgIGFyZ3Muc2V0Q29udGVudFR5cGUoICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZCIgKTsKLSAgICBlbHNlIC8vIGNvbnRlbnRUeXBlIG11c3QgYmUgIm11
bHRpcGFydC9mb3JtLWRhdGEiCi0gICAgICBhcmdzLnNldENvbnRlbnRUeXBlKCAiQ29udGVudC1U
eXBlOiAiICsgY29udGVudFR5cGUgKyAiOyBib3VuZGFyeT0iICsgYm91bmRhcnkgKTsKLSAgfQot
Ci0gIGlmICggZC0+bV9kb2MtPnBhcnNpbmcoKSB8fCBkLT5tX3J1bm5pbmdTY3JpcHRzID4gMCAp
IHsKLSAgICBpZiggZC0+bV9zdWJtaXRGb3JtICkgewotICAgICAga2REZWJ1Zyg2MDAwKSA8PCAi
S0hUTUxQYXJ0OjpzdWJtaXRGb3JtIEFCT1JUSU5HISIgPDwgZW5kbDsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgZC0+bV9zdWJtaXRGb3JtID0gbmV3IEtIVE1MUGFydFByaXZhdGU6OlN1Ym1p
dEZvcm07Ci0gICAgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRBY3Rpb24gPSBhY3Rpb247Ci0gICAg
ZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRVcmwgPSB1cmw7Ci0gICAgZC0+bV9zdWJtaXRGb3JtLT5z
dWJtaXRGb3JtRGF0YSA9IGZvcm1EYXRhOwotICAgIGQtPm1fc3VibWl0Rm9ybS0+dGFyZ2V0ID0g
X3RhcmdldDsKLSAgICBkLT5tX3N1Ym1pdEZvcm0tPnN1Ym1pdENvbnRlbnRUeXBlID0gY29udGVu
dFR5cGU7Ci0gICAgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRCb3VuZGFyeSA9IGJvdW5kYXJ5Owot
ICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNvbXBsZXRlZCgpKSwgdGhpcywgU0xPVChzdWJtaXRG
b3JtQWdhaW4oKSkpOwotICB9Ci0gIGVsc2UKLSAgewotICAgIEtXUSh0aGlzKS0+c3VibWl0Rm9y
bSggdSwgYXJncyk7Ci0gIH0KLX0KLQotCi12b2lkIEtIVE1MUGFydDo6c2xvdFBhcmVudENvbXBs
ZXRlZCgpCi17Ci0gIGlmICggZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAhPSBub1JlZGlyZWN0
aW9uU2NoZWR1bGVkICYmICFkLT5tX3JlZGlyZWN0aW9uVGltZXIuaXNBY3RpdmUoKSApCi0gIHsK
LSAgICAvLyBrZERlYnVnKDYwNTApIDw8IHRoaXMgPDwgIjogQ2hpbGQgcmVkaXJlY3Rpb24gLT4g
IiA8PCBkLT5tX3JlZGlyZWN0VVJMIDw8IGVuZGw7Ci0gICAgZC0+bV9yZWRpcmVjdGlvblRpbWVy
LnN0YXJ0KCAoaW50KSgxMDAwICogZC0+bV9kZWxheVJlZGlyZWN0KSwgdHJ1ZSApOwotICB9Ci19
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90Q2hpbGRTdGFydGVkKCBLSU86OkpvYiAqam9iICkKLXsK
LSAga2h0bWw6OkNoaWxkRnJhbWUgKmNoaWxkID0gY2hpbGRGcmFtZSggc2VuZGVyKCkgKTsKLQot
ICBhc3NlcnQoIGNoaWxkICk7Ci0KLSAgY2hpbGQtPm1fYkNvbXBsZXRlZCA9IGZhbHNlOwotCi0g
IGlmICggZC0+bV9iQ29tcGxldGUgKQotICB7Ci0gICAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsK
LSAgICBlbWl0IHN0YXJ0ZWQoIGpvYiApOwotICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90
Q2hpbGRDb21wbGV0ZWQoKQotewotICBzbG90Q2hpbGRDb21wbGV0ZWQoIGZhbHNlICk7Ci19Ci0K
LXZvaWQgS0hUTUxQYXJ0OjpzbG90Q2hpbGRDb21wbGV0ZWQoIGJvb2wgY29tcGxldGUgKQotewot
ICBraHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQgPSBjaGlsZEZyYW1lKCBzZW5kZXIoKSApOwotCi0g
IGFzc2VydCggY2hpbGQgKTsKLQotICBjaGlsZC0+bV9iQ29tcGxldGVkID0gdHJ1ZTsKLSAgY2hp
bGQtPm1fYXJncyA9IEtQYXJ0czo6VVJMQXJncygpOwotCi0gIGlmICggY29tcGxldGUgJiYgcGFy
ZW50UGFydCgpID09IDAgKQotICAgIGQtPm1fYlBlbmRpbmdDaGlsZFJlZGlyZWN0aW9uID0gdHJ1
ZTsKLQotICBjaGVja0NvbXBsZXRlZCgpOwotfQotCi0KLWtodG1sOjpDaGlsZEZyYW1lICpLSFRN
TFBhcnQ6OmNoaWxkRnJhbWUoIGNvbnN0IFFPYmplY3QgKm9iaiApCi17Ci0gICAgYXNzZXJ0KCBv
YmotPmluaGVyaXRzKCAiS1BhcnRzOjpSZWFkT25seVBhcnQiICkgKTsKLSAgICBjb25zdCBSZWFk
T25seVBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZWFkT25seVBhcnQgKj4oIG9iaiAp
OwotCi0gICAgRnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7Ci0gICAgRnJhbWVJdCBl
bmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0ICkKLSAg
ICAgIGlmICggc3RhdGljX2Nhc3Q8UmVhZE9ubHlQYXJ0ICo+KCgqaXQpLm1fcGFydCkgPT0gcGFy
dCApCi0gICAgICAgIHJldHVybiAmKCppdCk7Ci0KLSAgICBpdCA9IGQtPm1fb2JqZWN0cy5iZWdp
bigpOwotICAgIGVuZCA9IGQtPm1fb2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0ICkKLSAgICAgIGlmICggc3RhdGljX2Nhc3Q8UmVhZE9ubHlQYXJ0ICo+KCgqaXQpLm1f
cGFydCkgPT0gcGFydCApCi0gICAgICAgIHJldHVybiAmKCppdCk7Ci0KLSAgICByZXR1cm4gMEw7
Ci19Ci0KLUtIVE1MUGFydCAqS0hUTUxQYXJ0OjpmaW5kRnJhbWUoIGNvbnN0IFFTdHJpbmcgJmYg
KQotewotCi0gIC8vICMjIyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9hcHBlbmRpeC9ub3Rl
cy5odG1sI25vdGVzLWZyYW1lcwotICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5maW5k
KCBmICk7Ci0gIGlmICggaXQgPT0gZC0+bV9mcmFtZXMuZW5kKCkgKQotICB7Ci0gICAgLy9rZERl
YnVnKCkgPDwgIktIVE1MUGFydDo6ZmluZEZyYW1lIGZyYW1lICIgPDwgZiA8PCAiIG5vdCBmb3Vu
ZCIgPDwgZW5kbDsKLSAgICByZXR1cm4gMEw7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgS1BhcnRzOjpS
ZWFkT25seVBhcnQgKnAgPSAoKml0KS5tX3BhcnQ7Ci0gICAgaWYgKCBwICYmIHAtPmluaGVyaXRz
KCAiS0hUTUxQYXJ0IiApKQotICAgIHsKLSAgICAgIC8va2REZWJ1ZygpIDw8ICJLSFRNTFBhcnQ6
OmZpbmRGcmFtZSBmcmFtZSAiIDw8IGYgPDwgIiBpcyBhIEtIVE1MUGFydCwgb2siIDw8IGVuZGw7
Ci0gICAgICByZXR1cm4gKEtIVE1MUGFydCopcDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgIHJldHVybiAwTDsKLSAgICB9Ci0gIH0KLX0KLQotCi1ib29sIEtIVE1MUGFydDo6ZnJhbWVF
eGlzdHMoIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSApCi17Ci0gIENvbnN0RnJhbWVJdCBpdCA9
IGQtPm1fZnJhbWVzLmZpbmQoIGZyYW1lTmFtZSApOwotICBpZiAoIGl0ID09IGQtPm1fZnJhbWVz
LmVuZCgpICkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gV0FCQTogV2Ugb25seSByZXR1cm4g
dHJ1ZSBpZiB0aGUgY2hpbGQgYWN0dWFsbHkgaGFzIGEgZnJhbWUKLSAgLy8gc2V0LiBPdGhlcndp
c2Ugd2UgbWlnaHQgZmluZCBvdXIgcHJlbG9hZGVkLXNlbHZlLgotICAvLyBUaGlzIGhhcHBlbnMg
d2hlbiB3ZSByZXN0b3JlIHRoZSBmcmFtZXNldC4KLSAgcmV0dXJuICghKCppdCkubV9mcmFtZS5p
c051bGwoKSk7Ci19Ci0KLUtIVE1MUGFydCAqS0hUTUxQYXJ0OjpwYXJlbnRQYXJ0KCkgY29uc3QK
LXsKLSAgaWYgKCAhcGFyZW50KCkgfHwgIXBhcmVudCgpLT5pbmhlcml0cyggIktIVE1MUGFydCIg
KSApCi0gICAgcmV0dXJuIDBMOwotCi0gIHJldHVybiAoS0hUTUxQYXJ0ICopcGFyZW50KCk7Ci19
Ci0KLWludCBLSFRNTFBhcnQ6Onpvb21GYWN0b3IoKSBjb25zdAotewotICByZXR1cm4gZC0+bV96
b29tRmFjdG9yOwotfQotCi0vLyAjIyMgbWFrZSB0aGUgbGlzdCBjb25maWd1cmFibGUgPwotc3Rh
dGljIGNvbnN0IGludCB6b29tU2l6ZXNbXSA9IHsgMjAsIDQwLCA2MCwgODAsIDkwLCA5NSwgMTAw
LCAxMDUsIDExMCwgMTIwLCAxNDAsIDE2MCwgMTgwLCAyMDAsIDI1MCwgMzAwIH07Ci1zdGF0aWMg
Y29uc3QgaW50IHpvb21TaXplQ291bnQgPSAoc2l6ZW9mKHpvb21TaXplcykgLyBzaXplb2YoaW50
KSk7Ci1zdGF0aWMgY29uc3QgaW50IG1pblpvb20gPSAyMDsKLXN0YXRpYyBjb25zdCBpbnQgbWF4
Wm9vbSA9IDMwMDsKLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RJbmNab29tKCkKLXsKLSAgaW50IHpv
b21GYWN0b3IgPSBkLT5tX3pvb21GYWN0b3I7Ci0KLSAgaWYgKHpvb21GYWN0b3IgPCBtYXhab29t
KSB7Ci0gICAgLy8gZmluZCB0aGUgZW50cnkgbmVhcmVzdCB0byB0aGUgZ2l2ZW4gem9vbXNpemVz
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB6b29tU2l6ZUNvdW50OyArK2kpCi0gICAgICBpZiAo
em9vbVNpemVzW2ldID4gem9vbUZhY3RvcikgewotICAgICAgICB6b29tRmFjdG9yID0gem9vbVNp
emVzW2ldOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBzZXRab29tRmFjdG9yKHpvb21G
YWN0b3IpOwotICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90RGVjWm9vbSgpCi17Ci0gICAg
aW50IHpvb21GYWN0b3IgPSBkLT5tX3pvb21GYWN0b3I7Ci0gICAgaWYgKHpvb21GYWN0b3IgPiBt
aW5ab29tKSB7Ci0gICAgICAvLyBmaW5kIHRoZSBlbnRyeSBuZWFyZXN0IHRvIHRoZSBnaXZlbiB6
b29tc2l6ZXMKLSAgICAgIGZvciAoaW50IGkgPSB6b29tU2l6ZUNvdW50LTE7IGkgPj0gMDsgLS1p
KQotICAgICAgICBpZiAoem9vbVNpemVzW2ldIDwgem9vbUZhY3RvcikgewotICAgICAgICAgIHpv
b21GYWN0b3IgPSB6b29tU2l6ZXNbaV07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgIHNldFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7Ci0gICAgfQotfQotCi12b2lkIEtIVE1MUGFy
dDo6c2V0Wm9vbUZhY3RvciAoaW50IHBlcmNlbnQpCi17Ci0gIAotICBpZiAoZC0+bV96b29tRmFj
dG9yID09IHBlcmNlbnQpIHJldHVybjsKLSAgZC0+bV96b29tRmFjdG9yID0gcGVyY2VudDsKLQot
ICBpZihkLT5tX2RvYykgewotICAgIGQtPm1fZG9jLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkZv
cmNlICk7Ci0gIH0KLQotICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdpbigpOwot
ICBDb25zdEZyYW1lSXQgZW5kID0gZC0+bV9mcmFtZXMuZW5kKCk7Ci0gIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQgKQotICAgIGlmICggISggKml0ICkubV9wYXJ0LmlzTnVsbCgpICYmICggKml0ICku
bV9wYXJ0LT5pbmhlcml0cyggIktIVE1MUGFydCIgKSApIHsKLSAgICAgIEtQYXJ0czo6UmVhZE9u
bHlQYXJ0KiBwID0gKCAqaXQgKS5tX3BhcnQ7Ci0gICAgICBzdGF0aWNfY2FzdDxLSFRNTFBhcnQq
PiggcCApLT5zZXRab29tRmFjdG9yKGQtPm1fem9vbUZhY3Rvcik7Ci0gICAgfQotCi0KLSAgaWYg
KGQtPm1fZG9jICYmIGQtPm1fZG9jLT5yZW5kZXJlcigpICYmIGQtPm1fZG9jLT5yZW5kZXJlcigp
LT5uZWVkc0xheW91dCgpKQotICAgIHZpZXcoKS0+bGF5b3V0KCk7Ci19Ci0KLXZvaWQgS0hUTUxQ
YXJ0OjpzZXRKU1N0YXR1c0JhclRleHQoIGNvbnN0IFFTdHJpbmcgJnRleHQgKQotewotICAgZC0+
bV9ranNTdGF0dXNCYXJUZXh0ID0gdGV4dDsKLSAgIGVtaXQgc2V0U3RhdHVzQmFyVGV4dCggZC0+
bV9ranNTdGF0dXNCYXJUZXh0ICk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRKU0RlZmF1bHRT
dGF0dXNCYXJUZXh0KCBjb25zdCBRU3RyaW5nICZ0ZXh0ICkKLXsKLSAgIGQtPm1fa2pzRGVmYXVs
dFN0YXR1c0JhclRleHQgPSB0ZXh0OwotICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KCBkLT5tX2tq
c0RlZmF1bHRTdGF0dXNCYXJUZXh0ICk7Ci19Ci0KLVFTdHJpbmcgS0hUTUxQYXJ0Ojpqc1N0YXR1
c0JhclRleHQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5tX2tqc1N0YXR1c0JhclRleHQ7Ci19
Ci0KLVFTdHJpbmcgS0hUTUxQYXJ0Ojpqc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkgY29uc3QKLXsK
LSAgIHJldHVybiBkLT5tX2tqc0RlZmF1bHRTdGF0dXNCYXJUZXh0OwotfQotCi1RU3RyaW5nIEtI
VE1MUGFydDo6cmVmZXJyZXIoKSBjb25zdAotewotICAgcmV0dXJuIGQtPm1fcmVmZXJyZXI7Ci19
Ci0KLVFTdHJpbmcgS0hUTUxQYXJ0OjpsYXN0TW9kaWZpZWQoKSBjb25zdAotewotICByZXR1cm4g
ZC0+bV9sYXN0TW9kaWZpZWQ7Ci19Ci0KLQotdm9pZCBLSFRNTFBhcnQ6OnJlcGFyc2VDb25maWd1
cmF0aW9uKCkKLXsKLSAgc2V0QXV0b2xvYWRJbWFnZXMoIGQtPm1fc2V0dGluZ3MtPmF1dG9Mb2Fk
SW1hZ2VzKCkgKTsKLSAgaWYgKGQtPm1fZG9jKQotICAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCkt
PnNldFNob3dBbmltYXRpb25zKCBkLT5tX3NldHRpbmdzLT5zaG93QW5pbWF0aW9ucygpICk7Ci0K
LSAgZC0+bV9iSlNjcmlwdEVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFi
bGVkKG1fdXJsLmhvc3QoKSk7Ci0gIGQtPm1fYkphdmFFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+
aXNKYXZhRW5hYmxlZChtX3VybC5ob3N0KCkpOwotICBkLT5tX2JQbHVnaW5zRW5hYmxlZCA9IGQt
Pm1fc2V0dGluZ3MtPmlzUGx1Z2luc0VuYWJsZWQobV91cmwuaG9zdCgpKTsKLQotICBRU3RyaW5n
IHVzZXJTdHlsZVNoZWV0ID0gZC0+bV9zZXR0aW5ncy0+dXNlclN0eWxlU2hlZXQoKTsKLSAgaWYg
KCAhdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpICkKLSAgICBzZXRVc2VyU3R5bGVTaGVldCggS1VS
TCggdXNlclN0eWxlU2hlZXQgKSApOwotICBlbHNlCi0gICAgc2V0VXNlclN0eWxlU2hlZXQoIFFT
dHJpbmcoKSApOwotCi0gIGlmKGQtPm1fZG9jKSBkLT5tX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3Rv
cigpOwotfQotCi1RU3RyaW5nTGlzdCBLSFRNTFBhcnQ6OmZyYW1lTmFtZXMoKSBjb25zdAotewot
ICBRU3RyaW5nTGlzdCByZXM7Ci0KLSAgQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuYmVn
aW4oKTsKLSAgQ29uc3RGcmFtZUl0IGVuZCA9IGQtPm1fZnJhbWVzLmVuZCgpOwotICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0ICkKLSAgICBpZiAoISgqaXQpLm1fYlByZWxvYWRlZCkKLSAgICAgIHJl
cyArPSAoKml0KS5tX25hbWU7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotUVB0ckxpc3Q8S1BhcnRz
OjpSZWFkT25seVBhcnQ+IEtIVE1MUGFydDo6ZnJhbWVzKCkgY29uc3QKLXsKLSAgUVB0ckxpc3Q8
S1BhcnRzOjpSZWFkT25seVBhcnQ+IHJlczsKLQotICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2Zy
YW1lcy5iZWdpbigpOwotICBDb25zdEZyYW1lSXQgZW5kID0gZC0+bV9mcmFtZXMuZW5kKCk7Ci0g
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAgIGlmICghKCppdCkubV9iUHJlbG9hZGVkKQot
ICAgICAgcmVzLmFwcGVuZCggKCppdCkubV9wYXJ0ICk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQot
S0hUTUxQYXJ0ICpLSFRNTFBhcnQ6OmNoaWxkRnJhbWVOYW1lZChjb25zdCBRU3RyaW5nICZuYW1l
KSBjb25zdAotewotICBGcmFtZUxpc3Q6Okl0ZXJhdG9yIGl0ID0gZC0+bV9mcmFtZXMuZmluZChu
YW1lKTsKLSAgaWYgKGl0ICE9IGQtPm1fZnJhbWVzLmVuZCgpKQotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxLSFRNTFBhcnQgKj4oJiooKml0KS5tX3BhcnQpOwotICByZXR1cm4gTlVMTDsKLX0KLQot
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRETkRFbmFibGVkKCBib29sIGIgKQotewotICBkLT5tX2JE
bmQgPSBiOwotfQotCi1ib29sIEtIVE1MUGFydDo6ZG5kRW5hYmxlZCgpIGNvbnN0Ci17Ci0gIHJl
dHVybiBkLT5tX2JEbmQ7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUo
RE9NOjpOb2RlSW1wbCAqbm9kZSwgaW50IHgsIGludCB5KSBjb25zdAotewotICAgIC8vIE5vIEtE
RSBpbXBsIHlldAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmN1c3Rv
bUV2ZW50KCBRQ3VzdG9tRXZlbnQgKmV2ZW50ICkKLXsKLSAgaWYgKCBraHRtbDo6TW91c2VQcmVz
c0V2ZW50Ojp0ZXN0KCBldmVudCApICkKLSAgewotICAgIGtodG1sTW91c2VQcmVzc0V2ZW50KCBz
dGF0aWNfY2FzdDxraHRtbDo6TW91c2VQcmVzc0V2ZW50ICo+KCBldmVudCApICk7Ci0gICAgcmV0
dXJuOwotICB9Ci0KLSAgaWYgKCBraHRtbDo6TW91c2VEb3VibGVDbGlja0V2ZW50Ojp0ZXN0KCBl
dmVudCApICkKLSAgewotICAgIGtodG1sTW91c2VEb3VibGVDbGlja0V2ZW50KCBzdGF0aWNfY2Fz
dDxraHRtbDo6TW91c2VEb3VibGVDbGlja0V2ZW50ICo+KCBldmVudCApICk7Ci0gICAgcmV0dXJu
OwotICB9Ci0KLSAgaWYgKCBraHRtbDo6TW91c2VNb3ZlRXZlbnQ6OnRlc3QoIGV2ZW50ICkgKQot
ICB7Ci0gICAga2h0bWxNb3VzZU1vdmVFdmVudCggc3RhdGljX2Nhc3Q8a2h0bWw6Ok1vdXNlTW92
ZUV2ZW50ICo+KCBldmVudCApICk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCBraHRtbDo6
TW91c2VSZWxlYXNlRXZlbnQ6OnRlc3QoIGV2ZW50ICkgKQotICB7Ci0gICAga2h0bWxNb3VzZVJl
bGVhc2VFdmVudCggc3RhdGljX2Nhc3Q8a2h0bWw6Ok1vdXNlUmVsZWFzZUV2ZW50ICo+KCBldmVu
dCApICk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCBraHRtbDo6RHJhd0NvbnRlbnRzRXZl
bnQ6OnRlc3QoIGV2ZW50ICkgKQotICB7Ci0gICAga2h0bWxEcmF3Q29udGVudHNFdmVudCggc3Rh
dGljX2Nhc3Q8a2h0bWw6OkRyYXdDb250ZW50c0V2ZW50ICo+KCBldmVudCApICk7Ci0gICAgcmV0
dXJuOwotICB9Ci0KLSAgS1BhcnRzOjpSZWFkT25seVBhcnQ6OmN1c3RvbUV2ZW50KCBldmVudCAp
OwotfQotCi1ib29sIEtIVE1MUGFydDo6aXNQb2ludEluc2lkZVNlbGVjdGlvbihpbnQgeCwgaW50
IHkpCi17Ci0gICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9uIGxpa2Ugbm8gc2VsZWN0
aW9uLgotICAgIGlmICghZC0+bV9zZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCF4bWxEb2NJbXBsKCktPnJlbmRlcmVyKCkpIAotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyBub2RlSW5mbyh0cnVl
LCB0cnVlKTsKLSAgICB4bWxEb2NJbXBsKCktPnJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3Qo
bm9kZUluZm8sIHgsIHkpOwotICAgIE5vZGVJbXBsICppbm5lck5vZGUgPSBub2RlSW5mby5pbm5l
ck5vZGUoKTsKLSAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUG9zaXRpb24gcG9zKGlubmVyTm9kZS0+
cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4LCB5KS5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBO
b2RlSW1wbCAqbiA9IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOwotICAgIHdoaWxlIChu
KSB7Ci0gICAgICAgIGlmIChuID09IHBvcy5ub2RlKCkpIHsKLSAgICAgICAgICAgIGlmICgobiA9
PSBkLT5tX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSAmJiBwb3Mub2Zmc2V0KCkgPCBkLT5tX3Nl
bGVjdGlvbi5zdGFydCgpLm9mZnNldCgpKSB8fAotICAgICAgICAgICAgICAgIChuID09IGQtPm1f
c2VsZWN0aW9uLmVuZCgpLm5vZGUoKSAmJiBwb3Mub2Zmc2V0KCkgPiBkLT5tX3NlbGVjdGlvbi5l
bmQoKS5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
biA9PSBkLT5tX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICB9Ci0KLSAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQo
UU1vdXNlRXZlbnQgKm1vdXNlLCBOb2RlSW1wbCAqaW5uZXJOb2RlLCBpbnQgeCwgaW50IHkpCi17
Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247Ci0KLSAgICBpZiAoaW5uZXJOb2Rl
ICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpICYm
IGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0KCkpIHsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMoeCwgeSkpOwotICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgICAgICBz
ZWxlY3Rpb24ubW92ZVRvKHBvcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdH
cmFudWxhcml0eShXT1JEKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoc2VsZWN0
aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gV09S
RDsKLSAgICAgICAgZC0+bV9iZWdhblNlbGVjdGluZ1RleHQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHsKLSAgICAgICAgc2V0
U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgICAgIHN0YXJ0QXV0b1Njcm9sbCgpOwotICAgIH0K
LX0KLQotdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlUHJlc3NFdmVudERvdWJsZUNsaWNrKGto
dG1sOjpNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQotewotICAgIGlmIChldmVudC0+cW1vdXNlRXZl
bnQoKS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAoc2VsZWN0aW9uKCku
aXNSYW5nZSgpKSB7Ci0gICAgICAgICAgICAvLyBBIGRvdWJsZS1jbGljayB3aGVuIHJhbmdlIGlz
IGFscmVhZHkgc2VsZWN0ZWQKLSAgICAgICAgICAgIC8vIHNob3VsZCBub3QgY2hhbmdlIHRoZSBz
ZWxlY3Rpb24uICBTbywgZG8gbm90IGNhbGwKLSAgICAgICAgICAgIC8vIHNlbGVjdENsb3Nlc3RX
b3JkRnJvbU1vdXNlRXZlbnQsIGJ1dCBkbyBzZXQKLSAgICAgICAgICAgIC8vIG1fYmVnYW5TZWxl
Y3RpbmdUZXh0IHRvIHByZXZlbnQga2h0bWxNb3VzZVJlbGVhc2VFdmVudAotICAgICAgICAgICAg
Ly8gZnJvbSBzZXR0aW5nIGNhcmV0IHNlbGVjdGlvbi4KLSAgICAgICAgICAgIGQtPm1fYmVnYW5T
ZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlbGVj
dENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoZXZlbnQtPnFtb3VzZUV2ZW50KCksIGV2ZW50LT5p
bm5lck5vZGUoKSwgZXZlbnQtPngoKSwgZXZlbnQtPnkoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhraHRt
bDo6TW91c2VQcmVzc0V2ZW50ICpldmVudCkKLXsKLSAgICBRTW91c2VFdmVudCAqbW91c2UgPSBl
dmVudC0+cW1vdXNlRXZlbnQoKTsKLSAgICBOb2RlSW1wbCAqaW5uZXJOb2RlID0gZXZlbnQtPmlu
bmVyTm9kZSgpOwotICAgIAotICAgIGlmIChtb3VzZS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAm
JiBpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmCi0gICAgICAgIG1vdXNlRG93
bk1heVN0YXJ0U2VsZWN0KCkgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpLT5zaG91bGRTZWxlY3Qo
KSkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnkoKSkpOwotICAgICAgICBpZiAocG9zLmlzTm90TnVs
bCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7Ci0gICAgICAgICAgICBz
ZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShQQVJBR1JBUEgpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgICAgICBkLT5tX3NlbGVj
dGlvbkdyYW51bGFyaXR5ID0gUEFSQUdSQVBIOwotICAgICAgICAgICAgZC0+bV9iZWdhblNlbGVj
dGluZ1RleHQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHsKLSAgICAgICAgICAgIHNldFNlbGVjdGlvbihz
ZWxlY3Rpb24pOwotICAgICAgICAgICAgc3RhcnRBdXRvU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGlj
ayhraHRtbDo6TW91c2VQcmVzc0V2ZW50ICpldmVudCkKLXsKLSAgICBRTW91c2VFdmVudCAqbW91
c2UgPSBldmVudC0+cW1vdXNlRXZlbnQoKTsKLSAgICBOb2RlSW1wbCAqaW5uZXJOb2RlID0gZXZl
bnQtPmlubmVyTm9kZSgpOwotICAgIAotICAgIGlmIChtb3VzZS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewotICAgICAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAm
JgotICAgICAgICAgICAgbW91c2VEb3duTWF5U3RhcnRTZWxlY3QoKSAmJiBpbm5lck5vZGUtPnJl
bmRlcmVyKCktPnNob3VsZFNlbGVjdCgpKSB7Ci0gICAgICAgICAgICBTZWxlY3Rpb25Db250cm9s
bGVyIHNlbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBzZWxlY3Rp
b24gaWYgdGhlIFNoaWZ0IGtleSBpcyBkb3duLCB1bmxlc3MgdGhlIGNsaWNrIGlzIGluIGEgbGlu
ay4KLSAgICAgICAgICAgIGJvb2wgZXh0ZW5kU2VsZWN0aW9uID0gKG1vdXNlLT5zdGF0ZSgpICYg
U2hpZnRCdXR0b24pICYmIChldmVudC0+dXJsKCkuaXNOdWxsKCkpOwotCi0gICAgICAgICAgICAv
LyBEb24ndCByZXN0YXJ0IHRoZSBzZWxlY3Rpb24gd2hlbiB0aGUgbW91c2UgaXMgcHJlc3NlZCBv
biBhbgotICAgICAgICAgICAgLy8gZXhpc3Rpbmcgc2VsZWN0aW9uIHNvIHdlIGNhbiBhbGxvdyBm
b3IgdGV4dCBkcmFnZ2luZy4KLSAgICAgICAgICAgIGlmICghZXh0ZW5kU2VsZWN0aW9uICYmIGlz
UG9pbnRJbnNpZGVTZWxlY3Rpb24oZXZlbnQtPngoKSwgZXZlbnQtPnkoKSkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JDb29yZGlu
YXRlcyhldmVudC0+eCgpLCBldmVudC0+eSgpKSk7Ci0gICAgICAgICAgICBpZiAodmlzaWJsZVBv
cy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9u
KGlubmVyTm9kZSwgaW5uZXJOb2RlLT5jYXJldE1pbk9mZnNldCgpLCBraHRtbDo6RE9XTlNUUkVB
TSk7Ci0gICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNlbCA9IHNlbGVjdGlvbigpOwotICAgICAg
ICAgICAgaWYgKGV4dGVuZFNlbGVjdGlvbiAmJiBzZWwuaXNDYXJldE9yUmFuZ2UoKSkgewotICAg
ICAgICAgICAgICAgIHNlbC5jbGVhck1vZGlmeUJpYXMoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzM2NjgxNTc+IFJFR1JFU1NJT04g
KE1haWwpOiBzaGlmdC1jbGljayBkZXNlbGVjdHMgd2hlbiBzZWxlY3Rpb24gCi0gICAgICAgICAg
ICAgICAgLy8gd2FzIGNyZWF0ZWQgcmlnaHQtdG8tbGVmdAotICAgICAgICAgICAgICAgIFBvc2l0
aW9uIHN0YXJ0ID0gc2VsLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgc2hvcnQgYmVmb3JlID0g
UmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2ludHMocG9zLm5vZGUoKSwgcG9zLm9mZnNldCgp
LCBzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYmVm
b3JlIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsLnNldEJhc2VBbmRFeHRlbnQocG9z
Lm5vZGUoKSwgcG9zLm9mZnNldCgpLCBzZWwuZW5kKCkubm9kZSgpLCBzZWwuZW5kKCkub2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbC5z
ZXRCYXNlQW5kRXh0ZW50KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCksIHBvcy5ub2RlKCks
IHBvcy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gQ0hBUkFDVEVSKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJp
dHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0
aW5nVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNl
bCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIodmlzaWJsZVBvcyk7Ci0gICAgICAgICAgICAgICAgZC0+
bV9zZWxlY3Rpb25HcmFudWxhcml0eSA9IENIQVJBQ1RFUjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7Ci0g
ICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7Ci0gICAgICAgICAgICAgICAgc3RhcnRB
dXRvU2Nyb2xsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
S0hUTUxQYXJ0OjpraHRtbE1vdXNlUHJlc3NFdmVudChraHRtbDo6TW91c2VQcmVzc0V2ZW50ICpl
dmVudCkKLXsKLSAgICBET006OkRPTVN0cmluZyB1cmwgPSBldmVudC0+dXJsKCk7Ci0gICAgUU1v
dXNlRXZlbnQgKm1vdXNlID0gZXZlbnQtPnFtb3VzZUV2ZW50KCk7Ci0gICAgTm9kZUltcGwgKmlu
bmVyTm9kZSA9IGV2ZW50LT5pbm5lck5vZGUoKTsKLQotICAgIGQtPm1fbW91c2VQcmVzc05vZGUg
PSBpbm5lck5vZGU7Ci0gICAgZC0+bV9kcmFnU3RhcnRQb3MgPSBtb3VzZS0+cG9zKCk7Ci0KLSAg
ICBpZiAoIWV2ZW50LT51cmwoKS5pc051bGwoKSkgewotICAgICAgICBkLT5tX3N0clNlbGVjdGVk
VVJMID0gZC0+bV9zdHJTZWxlY3RlZFVSTFRhcmdldCA9IFFTdHJpbmc6Om51bGw7Ci0gICAgfQot
ICAgIGVsc2UgewotICAgICAgICBkLT5tX3N0clNlbGVjdGVkVVJMID0gZXZlbnQtPnVybCgpLnFz
dHJpbmcoKTsKLSAgICAgICAgZC0+bV9zdHJTZWxlY3RlZFVSTFRhcmdldCA9IGV2ZW50LT50YXJn
ZXQoKS5xc3RyaW5nKCk7Ci0gICAgfQotCi0KLSAgICBpZiAobW91c2UtPmJ1dHRvbigpID09IExl
ZnRCdXR0b24gfHwgbW91c2UtPmJ1dHRvbigpID09IE1pZEJ1dHRvbikgewotICAgICAgICBkLT5t
X2JNb3VzZVByZXNzZWQgPSB0cnVlOwotCi0jaWZkZWYgS0hUTUxfTk9fU0VMRUNUSU9OCi0gICAg
ICAgIGQtPm1fZHJhZ0xhc3RQb3MgPSBtb3VzZS0+Z2xvYmFsUG9zKCk7Ci0jZWxzZQotICAgICAg
ICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4dCA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtb3VzZS0+
Y2xpY2tDb3VudCgpID09IDIpIHsKLSAgICAgICAgICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVudERv
dWJsZUNsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKG1vdXNlLT5jbGlja0NvdW50KCkgPj0gMykgewotICAgICAgICAgICAg
aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soZXZlbnQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xp
Y2soZXZlbnQpOwotI2VuZGlmIC8vIEtIVE1MX05PX1NFTEVDVElPTgotICAgIH0KLX0KLQotdm9p
ZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VEb3VibGVDbGlja0V2ZW50KCBraHRtbDo6TW91c2VEb3Vi
bGVDbGlja0V2ZW50ICpldmVudCkKLXsKLX0KLQotCi12b2lkIEtIVE1MUGFydDo6aGFuZGxlTW91
c2VNb3ZlRXZlbnRTZWxlY3Rpb24oa2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCkKLXsKLSAg
ICAvLyBNb3VzZSBub3QgcHJlc3NlZC4gRG8gbm90aGluZy4KLSAgICBpZiAoIWQtPm1fYk1vdXNl
UHJlc3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWZkZWYgS0hUTUxfTk9fU0VMRUNUSU9OCi0g
ICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fdmlldykgewotICAgICAgICBRUG9pbnQgZGlmZiggbW91
c2UtPmdsb2JhbFBvcygpIC0gZC0+bV9kcmFnTGFzdFBvcyApOwotCQkKLSAgICAgICAgaWYgKGFi
cyhkaWZmLngoKSkgPiA2NCB8fCBhYnMoZGlmZi55KCkpID4gNjQpIHsKLSAgICAgICAgICAgIGQt
Pm1fdmlldy0+c2Nyb2xsQnkoLWRpZmYueCgpLCAtZGlmZi55KCkpOwotICAgICAgICAgICAgZC0+
bV9kcmFnTGFzdFBvcyA9IG1vdXNlLT5nbG9iYWxQb3MoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm47ICAgCi0jZWxzZQotCi0gICAgUU1vdXNlRXZlbnQgKm1vdXNlID0gZXZlbnQtPnFt
b3VzZUV2ZW50KCk7Ci0gICAgTm9kZUltcGwgKmlubmVyTm9kZSA9IGV2ZW50LT5pbm5lck5vZGUo
KTsKLQotICAgIGlmIChtb3VzZS0+c3RhdGUoKSAhPSBMZWZ0QnV0dG9uIHx8ICFpbm5lck5vZGUg
fHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSB8fAotICAgICAgICAhbW91c2VEb3duTWF5U3RhcnRT
ZWxlY3QoKSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpLT5zaG91bGRTZWxlY3QoKSkKLSAgICAJ
cmV0dXJuOwotCi0gICAgLy8gaGFuZGxlIG1ha2luZyBzZWxlY3Rpb24KLSAgICBWaXNpYmxlUG9z
aXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhl
dmVudC0+eCgpLCBldmVudC0+eSgpKSk7Ci0KLSAgICAvLyBEb24ndCBtb2RpZnkgdGhlIHNlbGVj
dGlvbiBpZiB3ZSdyZSBub3Qgb24gYSBub2RlLgotICAgIGlmIChwb3MuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFJlc3RhcnQgdGhlIHNlbGVjdGlvbiBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCBtb3VzZSBtb3ZlLiBUaGlzIHdvcmsgaXMgdXN1YWxseQotICAgIC8vIGRvbmUgaW4g
a2h0bWxNb3VzZVByZXNzRXZlbnQsIGJ1dCBub3QgaWYgdGhlIG1vdXNlIHByZXNzIHdhcyBvbiBh
biBleGlzdGluZyBzZWxlY3Rpb24uCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBzZWxl
Y3Rpb24oKTsKLSAgICBzZWwuY2xlYXJNb2RpZnlCaWFzKCk7Ci0gICAgCi0gICAgaWYgKCFkLT5t
X2JlZ2FuU2VsZWN0aW5nVGV4dCkgewotICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4dCA9
IHRydWU7Ci0gICAgICAgIHNlbC5tb3ZlVG8ocG9zKTsKLSAgICB9Ci0KLSAgICBzZWwuc2V0RXh0
ZW50KHBvcyk7Ci0gICAgaWYgKGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gQ0hBUkFDVEVS
KQotICAgICAgICBzZWwuZXhwYW5kVXNpbmdHcmFudWxhcml0eShkLT5tX3NlbGVjdGlvbkdyYW51
bGFyaXR5KTsKLQotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkKLSAgICAgICAg
c2V0U2VsZWN0aW9uKHNlbCk7Ci0KLSNlbmRpZiAvLyBLSFRNTF9OT19TRUxFQ1RJT04KLX0KLQot
dm9pZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VNb3ZlRXZlbnQoa2h0bWw6Ok1vdXNlTW92ZUV2ZW50
ICpldmVudCkKLXsKLSAgICBoYW5kbGVNb3VzZU1vdmVFdmVudFNlbGVjdGlvbihldmVudCk7CQkK
LX0KLQotdm9pZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VSZWxlYXNlRXZlbnQoIGtodG1sOjpNb3Vz
ZVJlbGVhc2VFdmVudCAqZXZlbnQgKQotewotICAgIGlmIChkLT5tX2JNb3VzZVByZXNzZWQpCi0g
ICAgICAgIHN0b3BBdXRvU2Nyb2xsKCk7Ci0JCi0gICAgLy8gVXNlZCB0byBwcmV2ZW50IG1vdXNl
TW92ZUV2ZW50IGZyb20gaW5pdGlhdGluZyBhIGRyYWcgYmVmb3JlCi0gICAgLy8gdGhlIG1vdXNl
IGlzIHByZXNzZWQgYWdhaW4uCi0gICAgZC0+bV9iTW91c2VQcmVzc2VkID0gZmFsc2U7Ci0KLSNp
Zm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAgUU1vdXNlRXZlbnQgKl9tb3VzZSA9IGV2ZW50LT5x
bW91c2VFdmVudCgpOwotICAgIGlmICgoZC0+bV9ndWlQcm9maWxlID09IEJyb3dzZXJWaWV3R1VJ
KSAmJiAoX21vdXNlLT5idXR0b24oKSA9PSBNaWRCdXR0b24pICYmIChldmVudC0+dXJsKCkuaXNO
dWxsKCkpKSB7Ci0gICAgICAgIFFDbGlwYm9hcmQgKmNiID0gUUFwcGxpY2F0aW9uOjpjbGlwYm9h
cmQoKTsKLSAgICAgICAgY2ItPnNldFNlbGVjdGlvbk1vZGUodHJ1ZSk7Ci0gICAgICAgIFFDU3Ry
aW5nIHBsYWluKCJwbGFpbiIpOwotICAgICAgICBRU3RyaW5nIHVybCA9IGNiLT50ZXh0KHBsYWlu
KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgS1VSTCB1KHVybCk7Ci0gICAgICAgIGlmICh1
LmlzTWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgIC8vIHNvbWUgaGFsZi1iYWtlZCBndWVzc2Vz
IGZvciBpbmNvbXBsZXRlIHVybHMKLSAgICAgICAgICAgIC8vICh0aGUgc2FtZSBjb2RlIGlzIGlu
IGxpYmtvbnEva29ucV9kaXJwYXJ0LmNjKQotICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRo
KCJmdHAuIikpIHsKLSAgICAgICAgICAgICAgICB1cmwucHJlcGVuZCgiZnRwOi8vIik7Ci0gICAg
ICAgICAgICAgICAgdSA9IHVybDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHVybC5wcmVwZW5kKCJodHRwOi8vIik7Ci0gICAgICAgICAgICAgICAg
dSA9IHVybDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodS5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIFFTdHJpbmcgc2F2ZWRSZWZlcnJlciA9IGQtPm1fcmVmZXJyZXI7
Ci0gICAgICAgICAgICBkLT5tX3JlZmVycmVyID0gUVN0cmluZzo6bnVsbDsgLy8gRGlzYWJsZSBy
ZWZlcnJlci4KLSAgICAgICAgICAgIHVybFNlbGVjdGVkKHVybCwgMCwwLCAiX3RvcCIpOwotICAg
ICAgICAgICAgZC0+bV9yZWZlcnJlciA9IHNhdmVkUmVmZXJyZXI7IC8vIFJlc3RvcmUgb3JpZ2lu
YWwgcmVmZXJyZXIuCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgCi0jaWZuZGVmIEtIVE1M
X05PX1NFTEVDVElPTgotCQotICAgIC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaWYgdGhlIG1vdXNl
IGRpZG4ndCBtb3ZlIGFmdGVyIHRoZSBsYXN0IG1vdXNlIHByZXNzLgotICAgIC8vIFdlIGRvIHRo
aXMgc28gd2hlbiBjbGlja2luZyBvbiB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIGdvZXMg
YXdheS4KLSAgICAvLyBIb3dldmVyLCBpZiB3ZSBhcmUgZWRpdGluZywgcGxhY2UgdGhlIGNhcmV0
LgotICAgIGlmIChtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpICYmICFkLT5tX2JlZ2FuU2VsZWN0
aW5nVGV4dAotICAgICAgICAgICAgJiYgZC0+bV9kcmFnU3RhcnRQb3MueCgpID09IGV2ZW50LT5x
bW91c2VFdmVudCgpLT54KCkKLSAgICAgICAgICAgICYmIGQtPm1fZHJhZ1N0YXJ0UG9zLnkoKSA9
PSBldmVudC0+cW1vdXNlRXZlbnQoKS0+eSgpCi0gICAgICAgICAgICAmJiBkLT5tX3NlbGVjdGlv
bi5pc1JhbmdlKCkpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247Ci0g
ICAgICAgIE5vZGVJbXBsICpub2RlID0gZXZlbnQtPmlubmVyTm9kZSgpOwotICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsK
LSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigpLT5wb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGV2ZW50LT54KCksIGV2ZW50LT55KCkpOwotICAgICAgICAgICAg
c2VsZWN0aW9uLm1vdmVUbyhwb3MpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkgewotICAgICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAg
Ly8gZ2V0IHNlbGVjdGVkIHRleHQgYW5kIHBhc3RlIHRvIHRoZSBjbGlwYm9hcmQKLSAgICBRU3Ry
aW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKLSAgICB0ZXh0LnJlcGxhY2UoUVJlZ0V4cChRQ2hh
cigweGEwKSksICIgIik7Ci0gICAgUUNsaXBib2FyZCAqY2IgPSBRQXBwbGljYXRpb246OmNsaXBi
b2FyZCgpOwotICAgIGNiLT5zZXRTZWxlY3Rpb25Nb2RlKHRydWUpOwotICAgIGRpc2Nvbm5lY3Qo
a2FwcC0+Y2xpcGJvYXJkKCksIFNJR05BTChzZWxlY3Rpb25DaGFuZ2VkKCkpLCB0aGlzLCBTTE9U
KHNsb3RDbGVhclNlbGVjdGlvbigpKSk7Ci0gICAgY2ItPnNldFRleHQodGV4dCk7Ci0gICAgY29u
bmVjdChrYXBwLT5jbGlwYm9hcmQoKSwgU0lHTkFMKHNlbGVjdGlvbkNoYW5nZWQoKSksIFNMT1Qo
c2xvdENsZWFyU2VsZWN0aW9uKCkpKTsKLSAgICBjYi0+c2V0U2VsZWN0aW9uTW9kZShmYWxzZSk7
Ci0jZW5kaWYgLy8gUVRfTk9fQ0xJUEJPQVJECi0KLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBh
cmVudElmRnVsbHlTZWxlY3RlZCgpOwotCi0jZW5kaWYgLy8gS0hUTUxfTk9fU0VMRUNUSU9OCi19
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpraHRtbERyYXdDb250ZW50c0V2ZW50KCBraHRtbDo6RHJhd0Nv
bnRlbnRzRXZlbnQgKiApCi17Ci19Ci0KLQotdm9pZCBLSFRNTFBhcnQ6OnN0YXJ0QXV0b1Njcm9s
bCgpCi17Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzdG9wQXV0b1Njcm9sbCgpCi17Ci19Ci0KLQot
dm9pZCBLSFRNTFBhcnQ6OnNlbGVjdEFsbCgpCi17Ci0gICAgaWYgKCFkLT5tX2RvYykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBkLT5tX3NlbGVjdGlv
bi5zdGFydCgpLm5vZGUoKTsKLSAgICBOb2RlSW1wbCAqcm9vdCA9IHN0YXJ0Tm9kZSAmJiBzdGFy
dE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPyBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSA6IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAKLSAgICBzZWxlY3RDb250
ZW50c09mTm9kZShyb290KTsKLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlT
ZWxlY3RlZCgpOwotfQotCi1ib29sIEtIVE1MUGFydDo6c2VsZWN0Q29udGVudHNPZk5vZGUoTm9k
ZUltcGwqIG5vZGUpCi17Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBTZWxlY3Rpb25D
b250cm9sbGVyKFBvc2l0aW9uKG5vZGUsIDApLCBraHRtbDo6RE9XTlNUUkVBTSwgUG9zaXRpb24o
bm9kZSwgbm9kZS0+bWF4RGVlcE9mZnNldCgpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKLSAg
ICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKLSAgICAgICAgc2V0U2VsZWN0aW9u
KHNlbCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
Q29udHJvbGxlciAmbmV3c2VsZWN0aW9uKSBjb25zdAotewotICAgIHJldHVybiBLV1EodGhpcykt
PnNob3VsZENoYW5nZVNlbGVjdGlvbihkLT5tX3NlbGVjdGlvbiwgbmV3c2VsZWN0aW9uLCBuZXdz
ZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpLCBmYWxzZSk7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0Ojpz
aG91bGRCZWdpbkVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
UmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBL
SFRNTFBhcnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgCi17Ci0gICAgaWYgKCFkLT5tX2Rv
YykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkLT5tX2RvYy0+aW5EZXNpZ25N
b2RlKCk7Ci19Ci0KLUVkaXRDb21tYW5kUHRyIEtIVE1MUGFydDo6bGFzdEVkaXRDb21tYW5kKCkK
LXsKLSAgICByZXR1cm4gZC0+bV9sYXN0RWRpdENvbW1hbmQ7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0
OjphcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAmY21kKQotewotICAgIGlmIChzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVjdGlvbigpKSkgewotICAgICAgICBzZXRTZWxl
Y3Rpb24oY21kLmVuZGluZ1NlbGVjdGlvbigpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gTm93
IHNldCB0aGUgdHlwaW5nIHN0eWxlIGZyb20gdGhlIGNvbW1hbmQuIENsZWFyIGl0IHdoZW4gZG9u
ZS4KLSAgICAvLyBUaGlzIGhlbHBzIG1ha2UgdGhlIGNhc2Ugd29yayB3aGVyZSB5b3UgY29tcGxl
dGVseSBkZWxldGUgYSBwaWVjZQotICAgIC8vIG9mIHN0eWxlZCB0ZXh0IGFuZCB0aGVuIHR5cGUg
YSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIuCi0gICAgLy8gVGhhdCBuZXcgY2hhcmFjdGVy
IG5lZWRzIHRvIHRha2Ugb24gdGhlIHN0eWxlIG9mIHRoZSBqdXN0LWRlbGV0ZWQgdGV4dC4KLSAg
ICAvLyBGSVhNRTogSW1wcm92ZSB0eXBpbmcgc3R5bGUuCi0gICAgLy8gU2VlIHRoaXMgYnVnOiA8
cmRhcjovL3Byb2JsZW0vMzc2OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5l
ZWRzIGltcHJvdmVtZW50Ci0gICAgaWYgKGNtZC50eXBpbmdTdHlsZSgpKSB7Ci0gICAgICAgIHNl
dFR5cGluZ1N0eWxlKGNtZC50eXBpbmdTdHlsZSgpKTsKLSAgICAgICAgY21kLnNldFR5cGluZ1N0
eWxlKDApOwotICAgIH0KLQotICAgIC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVk
aXQgY29tbWFuZCBvbmx5IGluIHRoZSBjYXNlIG9mIHR5cGluZwotICAgIGlmIChkLT5tX2xhc3RF
ZGl0Q29tbWFuZCA9PSBjbWQpIHsKLSAgICAgICAgYXNzZXJ0KGNtZC5pc1R5cGluZ0NvbW1hbmQo
KSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIGEgbmV3IHVu
ZG8gY29tbWFuZCBpZiB0aGUgY29tbWFuZCBwYXNzZWQgaW4gaXMKLSAgICAgICAgLy8gZGlmZmVy
ZW50IGZyb20gdGhlIGxhc3QgY29tbWFuZAotICAgICAgICBLV1EodGhpcyktPnJlZ2lzdGVyQ29t
bWFuZEZvclVuZG8oY21kKTsKLSAgICAgICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBjbWQ7Ci0g
ICAgfQotICAgIEtXUSh0aGlzKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7Ci19Ci0KLXZv
aWQgS0hUTUxQYXJ0Ojp1bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kUHRyICZjbWQpCi17Ci0g
ICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihjbWQuc3RhcnRpbmdTZWxlY3Rpb24oKSkpIHsK
LSAgICAgICAgc2V0U2VsZWN0aW9uKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpLCB0cnVlKTsKLSAg
ICB9Ci0gICAgS1dRKHRoaXMpLT5yZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNtZCk7Ci0gICAgS1dR
KHRoaXMpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKLSAgICBkLT5tX2xhc3RFZGl0Q29t
bWFuZCA9IEVkaXRDb21tYW5kUHRyOjplbXB0eUNvbW1hbmQoKTsKLX0KLQotdm9pZCBLSFRNTFBh
cnQ6OnJlYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkKLXsKLSAgICBpZiAoc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSkpIHsKLSAgICAgICAgc2V0
U2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSwgdHJ1ZSk7Ci0gICAgfQotICAgIEtXUSh0
aGlzKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjbWQpOwotICAgIEtXUSh0aGlzKS0+cmVzcG9u
ZFRvQ2hhbmdlZENvbnRlbnRzKCk7Ci0gICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBFZGl0Q29t
bWFuZFB0cjo6ZW1wdHlDb21tYW5kKCk7Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
SW1wbCAqS0hUTUxQYXJ0Ojp0eXBpbmdTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm1f
dHlwaW5nU3R5bGU7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRUeXBpbmdTdHlsZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKQotewotICAgIGlmIChkLT5tX3R5cGluZ1N0
eWxlID09IHN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqb2xkID0gZC0+bV90eXBpbmdTdHlsZTsKLSAgICBkLT5tX3R5
cGluZ1N0eWxlID0gc3R5bGU7Ci0gICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpCi0gICAgICAgIGQt
Pm1fdHlwaW5nU3R5bGUtPnJlZigpOwotICAgIGlmIChvbGQpCi0gICAgICAgIG9sZC0+ZGVyZWYo
KTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmNsZWFyVHlwaW5nU3R5bGUoKQotewotICAgIHNldFR5
cGluZ1N0eWxlKDApOwotfQotCi0KLVFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdChR
U3RyaW5nIGZpbGVuYW1lLCBpbnQgYmFzZUxpbmUsIE5vZGVJbXBsICpuLCBjb25zdCBRU3RyaW5n
ICZzY3JpcHQpCi17Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiZXhl
Y3V0ZVNjcmlwdDogZmlsZW5hbWU9IiA8PCBmaWxlbmFtZSA8PCAiIGJhc2VMaW5lPSIgPDwgYmFz
ZUxpbmUgPDwgIiBzY3JpcHQ9IiA8PCBzY3JpcHQgPDwgZW5kbDsKLSNlbmRpZgotICBLSlNQcm94
eUltcGwgKnByb3h5ID0galNjcmlwdCgpOwotCi0gIGlmICghcHJveHkpCi0gICAgcmV0dXJuIFFW
YXJpYW50KCk7Ci0gIFFWYXJpYW50IHJldCA9IHByb3h5LT5ldmFsdWF0ZShmaWxlbmFtZSxiYXNl
TGluZSxzY3JpcHQsIG4gKTsKLSAgRG9jdW1lbnRJbXBsOjp1cGRhdGVEb2N1bWVudHNSZW5kZXJp
bmcoKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJ0UmVtb3Zl
ZChLUGFydHM6OlBhcnQgKnBhcnQpCi17Ci0gICAgaWYgKHBhcnQgPT0gZC0+bV9hY3RpdmVGcmFt
ZSkKLSAgICAgICAgZC0+bV9hY3RpdmVGcmFtZSA9IDA7Ci19Ci0KLURPTTo6RXZlbnRMaXN0ZW5l
ciAqS0hUTUxQYXJ0OjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcmIGNv
ZGUsIE5vZGVJbXBsICpub2RlKQotewotICAgIGlmIChLSlNQcm94eUltcGwgKnByb3h5ID0galNj
cmlwdCgpKQotICAgICAgICByZXR1cm4gcHJveHktPmNyZWF0ZUhUTUxFdmVudEhhbmRsZXIoY29k
ZSwgbm9kZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUtIVE1MUGFydCAqS0hUTUxQYXJ0OjpvcGVu
ZXIoKQotewotICAgIHJldHVybiBkLT5tX29wZW5lcjsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNl
dE9wZW5lcihLSFRNTFBhcnQgKl9vcGVuZXIpCi17Ci0gICAgZC0+bV9vcGVuZXIgPSBfb3BlbmVy
OwotfQotCi1ib29sIEtIVE1MUGFydDo6b3BlbmVkQnlKUygpCi17Ci0gICAgcmV0dXJuIGQtPm1f
b3BlbmVkQnlKUzsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNldE9wZW5lZEJ5SlMoYm9vbCBfb3Bl
bmVkQnlKUykKLXsKLSAgICBkLT5tX29wZW5lZEJ5SlMgPSBfb3BlbmVkQnlKUzsKLX0KLQotdm9p
ZCBLSFRNTFBhcnQ6OnByZWxvYWRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3Qg
UVN0cmluZyAmc3R5bGVzaGVldCkKLXsKLSAgICBraHRtbDo6Q2FjaGU6OnByZWxvYWRTdHlsZVNo
ZWV0KHVybCwgc3R5bGVzaGVldCk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpwcmVsb2FkU2NyaXB0
KGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmc2NyaXB0KQotewotICAgIGtodG1s
OjpDYWNoZTo6cHJlbG9hZFNjcmlwdCh1cmwsIHNjcmlwdCk7Ci19Ci0KLQotYm9vbCBLSFRNTFBh
cnQ6OnJlc3RvcmVkKCkgY29uc3QKLXsKLSAgcmV0dXJuIGQtPm1fcmVzdG9yZWQ7Ci19Ci0KLXZv
aWQgS0hUTUxQYXJ0OjppbmNyZW1lbnRGcmFtZUNvdW50KCkKLXsKLSAgZnJhbWVDb3VudCsrOwot
ICBpZiAocGFyZW50UGFydCgpKSB7Ci0gICAgcGFyZW50UGFydCgpLT5pbmNyZW1lbnRGcmFtZUNv
dW50KCk7Ci0gIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmRlY3JlbWVudEZyYW1lQ291bnQoKQot
ewotICBmcmFtZUNvdW50LS07Ci0gIGlmIChwYXJlbnRQYXJ0KCkpIHsKLSAgICBwYXJlbnRQYXJ0
KCktPmRlY3JlbWVudEZyYW1lQ291bnQoKTsKLSAgfQotfQotCi1pbnQgS0hUTUxQYXJ0Ojp0b3BM
ZXZlbEZyYW1lQ291bnQoKQotewotICBpZiAocGFyZW50UGFydCgpKSB7Ci0gICAgcmV0dXJuIHBh
cmVudFBhcnQoKS0+dG9wTGV2ZWxGcmFtZUNvdW50KCk7Ci0gIH0KLQotICByZXR1cm4gZnJhbWVD
b3VudDsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OnRhYnNUb0xpbmtzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OnRhYnNUb0FsbENvbnRyb2xzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmNvcHlUb1Bhc3Rl
Ym9hcmQoKQotewotICAgIEtXUSh0aGlzKS0+aXNzdWVDb3B5Q29tbWFuZCgpOwotfQotCi12b2lk
IEtIVE1MUGFydDo6Y3V0VG9QYXN0ZWJvYXJkKCkKLXsKLSAgICBLV1EodGhpcyktPmlzc3VlQ3V0
Q29tbWFuZCgpOwotfQotCi12b2lkIEtIVE1MUGFydDo6cGFzdGVGcm9tUGFzdGVib2FyZCgpCi17
Ci0gICAgS1dRKHRoaXMpLT5pc3N1ZVBhc3RlQ29tbWFuZCgpOwotfQotCi12b2lkIEtIVE1MUGFy
dDo6cGFzdGVBbmRNYXRjaFN0eWxlKCkKLXsKLSAgICBLV1EodGhpcyktPmlzc3VlUGFzdGVBbmRN
YXRjaFN0eWxlQ29tbWFuZCgpOwotfQotCi12b2lkIEtIVE1MUGFydDo6dHJhbnNwb3NlKCkKLXsK
LSAgICBLV1EodGhpcyktPmlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOwotfQotCi12b2lkIEtIVE1M
UGFydDo6cmVkbygpCi17Ci0gICAgS1dRKHRoaXMpLT5pc3N1ZVJlZG9Db21tYW5kKCk7Ci19Ci0K
LXZvaWQgS0hUTUxQYXJ0Ojp1bmRvKCkKLXsKLSAgICBLV1EodGhpcyktPmlzc3VlVW5kb0NvbW1h
bmQoKTsKLX0KLQotCi12b2lkIEtIVE1MUGFydDo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQot
ewotICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgY2xl
YXJUeXBpbmdTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FsY3Vs
YXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGwgKm11dGFibGVTdHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgpOwotICAgIG11dGFi
bGVTdHlsZS0+cmVmKCk7Ci0gICAgaWYgKHR5cGluZ1N0eWxlKCkpIHsKLSAgICAgICAgdHlwaW5n
U3R5bGUoKS0+bWVyZ2UobXV0YWJsZVN0eWxlKTsKLSAgICAgICAgbXV0YWJsZVN0eWxlLT5kZXJl
ZigpOwotICAgICAgICBtdXRhYmxlU3R5bGUgPSB0eXBpbmdTdHlsZSgpOwotICAgICAgICBtdXRh
YmxlU3R5bGUtPnJlZigpOwotICAgIH0KLQotICAgIE5vZGVJbXBsICpub2RlID0gVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSku
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7Ci0gICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
SW1wbCBjb21wdXRlZFN0eWxlKG5vZGUpOwotICAgIGNvbXB1dGVkU3R5bGUuZGlmZihtdXRhYmxl
U3R5bGUpOwotICAgIAotICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0
aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsICpibG9ja1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7
Ci0gICAgYmxvY2tTdHlsZS0+cmVmKCk7Ci0gICAgYmxvY2tTdHlsZS0+ZGlmZihtdXRhYmxlU3R5
bGUpOwotICAgIGlmICh4bWxEb2NJbXBsKCkgJiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7
Ci0gICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgQXBwbHlTdHlsZUNvbW1hbmQoeG1sRG9j
SW1wbCgpLCBibG9ja1N0eWxlLCBlZGl0aW5nQWN0aW9uKSk7Ci0gICAgICAgIGNtZC5hcHBseSgp
OwotICAgIH0KLSAgICBibG9ja1N0eWxlLT5kZXJlZigpOwotICAgIAotICAgIC8vIFNldCB0aGUg
cmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgc2V0VHlwaW5nU3R5bGUo
bXV0YWJsZVN0eWxlKTsKLSAgICBtdXRhYmxlU3R5bGUtPmRlcmVmKCk7Ci19Ci0KLXZvaWQgS0hU
TUxQYXJ0OjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQotewotICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkg
ewotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6Ci0gICAgICAgICAgICAv
LyBkbyBub3RoaW5nCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25D
b250cm9sbGVyOjpDQVJFVDogewotICAgICAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6Ci0gICAgICAgICAgICBpZiAo
eG1sRG9jSW1wbCgpICYmIHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgRWRpdENvbW1hbmRQdHIg
Y21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZCh4bWxEb2NJbXBsKCksIHN0eWxlLCBlZGl0aW5nQWN0
aW9uKSk7Ci0gICAgICAgICAgICAgICAgY21kLmFwcGx5KCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjphcHBseVBhcmFncmFw
aFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKQotewotICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAgICBj
YXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6Ci0gICAgICAgICAgICAvLyBkbyBub3RoaW5n
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpD
QVJFVDoKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpSQU5HRToKLSAgICAgICAg
ICAgIGlmICh4bWxEb2NJbXBsKCkgJiYgc3R5bGUpIHsKLSAgICAgICAgICAgICAgICBFZGl0Q29t
bWFuZFB0ciBjbWQobmV3IEFwcGx5U3R5bGVDb21tYW5kKHhtbERvY0ltcGwoKSwgc3R5bGUsIGVk
aXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwot
ICAgICAgICAgICAgICAgIGNtZC5hcHBseSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVTdGF0ZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbkltcGwgKmRlc2lyZWRTdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uSW1wbCAqY29tcHV0ZWRTdHlsZSwgYm9vbCAmYXRTdGFydCwgS0hUTUxQYXJ0OjpUcmlTdGF0
ZSAmc3RhdGUpCi17Ci0gICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVu
ZDsKLSAgICBmb3IgKFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IGRl
c2lyZWRTdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGludCBwcm9wZXJ0eUlEID0gKCppdCkuaWQoKTsKLSAgICAgICAgRE9NU3RyaW5nIGRlc2lyZWRQ
cm9wZXJ0eSA9IGRlc2lyZWRTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKLSAg
ICAgICAgRE9NU3RyaW5nIGNvbXB1dGVkUHJvcGVydHkgPSBjb21wdXRlZFN0eWxlLT5nZXRQcm9w
ZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBLSFRNTFBhcnQ6OlRyaVN0YXRlIHByb3Bl
cnR5U3RhdGUgPSBlcXVhbElnbm9yaW5nQ2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJv
cGVydHkpCi0gICAgICAgICAgICA/IEtIVE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0
OjpmYWxzZVRyaVN0YXRlOwotICAgICAgICBpZiAoYXRTdGFydCkgewotICAgICAgICAgICAgc3Rh
dGUgPSBwcm9wZXJ0eVN0YXRlOwotICAgICAgICAgICAgYXRTdGFydCA9IGZhbHNlOwotICAgICAg
ICB9IGVsc2UgaWYgKHN0YXRlICE9IHByb3BlcnR5U3RhdGUpIHsKLSAgICAgICAgICAgIHN0YXRl
ID0gS0hUTUxQYXJ0OjptaXhlZFRyaVN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUtIVE1MUGFydDo6VHJpU3RhdGUgS0hUTUxQYXJ0OjpzZWxlY3Rpb25I
YXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUpIGNvbnN0Ci17Ci0gICAgYm9v
bCBhdFN0YXJ0ID0gdHJ1ZTsKLSAgICBUcmlTdGF0ZSBzdGF0ZSA9IGZhbHNlVHJpU3RhdGU7Ci0K
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm11dGFibGVTdHlsZSA9IHN0eWxl
LT5tYWtlTXV0YWJsZSgpOwotICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uSW1wbD4gcHJv
dGVjdFF1ZXJ5U3R5bGUobXV0YWJsZVN0eWxlKTsKLQotICAgIGlmICghZC0+bV9zZWxlY3Rpb24u
aXNSYW5nZSgpKSB7Ci0gICAgICAgIE5vZGVJbXBsICpub2RlVG9SZW1vdmU7Ci0gICAgICAgIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKnNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOwotICAgICAgICBpZiAoIXNlbGVjdGlvblN0eWxl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlVHJpU3RhdGU7Ci0gICAgICAgIHNlbGVjdGlvblN0
eWxlLT5yZWYoKTsKLSAgICAgICAgdXBkYXRlU3RhdGUobXV0YWJsZVN0eWxlLCBzZWxlY3Rpb25T
dHlsZSwgYXRTdGFydCwgc3RhdGUpOwotICAgICAgICBzZWxlY3Rpb25TdHlsZS0+ZGVyZWYoKTsK
LSAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkgewotICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNv
ZGUgPSAwOwotICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoZXhjZXB0aW9uQ29kZSk7
Ci0gICAgICAgICAgICBhc3NlcnQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBkLT5tX3NlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewot
ICAgICAgICAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqY29tcHV0ZWRTdHls
ZSA9IG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsKG5vZGUpOwotICAgICAgICAg
ICAgaWYgKGNvbXB1dGVkU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlLT5y
ZWYoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZShtdXRhYmxlU3R5bGUsIGNvbXB1dGVk
U3R5bGUsIGF0U3RhcnQsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlLT5k
ZXJlZigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlID09IG1peGVkVHJp
U3RhdGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBk
LT5tX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLWJvb2wgS0hUTUxQYXJ0Ojpz
ZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSkgY29u
c3QKLXsKLSAgICBOb2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwotICAgIENTU1N0eWxlRGVjbGFyYXRp
b25JbXBsICpzZWxlY3Rpb25TdHlsZSA9IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVt
b3ZlKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm11dGFibGVTdHlsZSA9IHN0eWxl
LT5tYWtlTXV0YWJsZSgpOwotCi0gICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb25JbXBsPiBw
cm90ZWN0U2VsZWN0aW9uU3R5bGUoc2VsZWN0aW9uU3R5bGUpOwotICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uSW1wbD4gcHJvdGVjdFF1ZXJ5U3R5bGUobXV0YWJsZVN0eWxlKTsKLQotICAg
IGJvb2wgbWF0Y2ggPSB0cnVlOwotICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3Bl
cnR5PiBlbmQ7Ci0gICAgZm9yIChRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4g
aXQgPSBtdXRhYmxlU3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7Ci0gICAgICAgIGlmICghZXF1YWxJ
Z25vcmluZ0Nhc2UobXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpLCBz
ZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKSkpIHsKLSAgICAgICAg
ICAgIG1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChub2RlVG9SZW1vdmUpIHsKLSAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAw
OwotICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShleGNlcHRpb25Db2RlKTsKLSAgICAgICAg
YXNzZXJ0KGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwot
fQotCi1ET01TdHJpbmcgS0hUTUxQYXJ0OjpzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1
ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdAotewotICAgIE5vZGVJbXBsICpub2RlVG9SZW1v
dmU7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnNlbGVjdGlvblN0eWxlID0gc2VsZWN0
aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOwotICAgIGlmICghc2VsZWN0aW9uU3R5bGUp
Ci0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLQotICAgIHNlbGVjdGlvblN0eWxlLT5yZWYo
KTsKLSAgICBET01TdHJpbmcgdmFsdWUgPSBzZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVydHlWYWx1
ZShzdHlsZVByb3BlcnR5SUQpOwotICAgIHNlbGVjdGlvblN0eWxlLT5kZXJlZigpOwotCi0gICAg
aWYgKG5vZGVUb1JlbW92ZSkgewotICAgICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAg
ICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGV4Y2VwdGlvbkNvZGUpOwotICAgICAgICBhc3NlcnQo
ZXhjZXB0aW9uQ29kZSA9PSAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLUNT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKktIVE1MUGFydDo6c2VsZWN0aW9uQ29tcHV0
ZWRTdHlsZShOb2RlSW1wbCAqJm5vZGVUb1JlbW92ZSkgY29uc3QKLXsKLSAgICBub2RlVG9SZW1v
dmUgPSAwOwotCi0gICAgaWYgKCF4bWxEb2NJbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKGQtPm1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IFJlZlB0cjxSYW5nZUltcGw+IHJhbmdlKGQtPm1fc2VsZWN0aW9uLnRvUmFuZ2UoKSk7Ci0gICAg
UG9zaXRpb24gcG9zID0gcmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCk7Ci0KLSAgICBFbGVt
ZW50SW1wbCAqZWxlbSA9IHBvcy5lbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKLSAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZWxlbTsKLSAg
ICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0KLSAgICBpZiAoZC0+bV90eXBpbmdTdHlsZSkgewot
ICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVsZW1lbnROUyh4aHRt
bE5hbWVzcGFjZVVSSSwgInNwYW4iLCBleGNlcHRpb25Db2RlKTsKLSAgICAgICAgYXNzZXJ0KGV4
Y2VwdGlvbkNvZGUgPT0gMCk7Ci0KLSAgICAgICAgc3R5bGVFbGVtZW50LT5yZWYoKTsKLSAgICAg
ICAgCi0gICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgZC0+bV90
eXBpbmdTdHlsZS0+Y3NzVGV4dCgpLmltcGwoKSwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgIGFz
c2VydChleGNlcHRpb25Db2RlID09IDApOwotICAgICAgICAKLSAgICAgICAgVGV4dEltcGwgKnRl
eHQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIik7Ci0gICAgICAgIHN0
eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQodGV4dCwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgIGFz
c2VydChleGNlcHRpb25Db2RlID09IDApOwotCi0gICAgICAgIGlmIChlbGVtLT5yZW5kZXJlcigp
ICYmIGVsZW0tPnJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICBl
bGVtLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGV4Y2VwdGlvbkNvZGUpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IGVsZW0tPnBhcmVudCgpOwot
ICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBlbGVtLT5uZXh0U2libGluZygpOwotCi0gICAg
ICAgICAgICBpZiAobmV4dCkgewotICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3Jl
KHN0eWxlRWxlbWVudCwgbmV4dCwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBleGNl
cHRpb25Db2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoZXhj
ZXB0aW9uQ29kZSA9PSAwKTsKLQotICAgICAgICBzdHlsZUVsZW1lbnQtPmRlcmVmKCk7Ci0KLSAg
ICAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiBu
ZXcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbChzdHlsZUVsZW1lbnQpOwotfQotCi1z
dGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICplZGl0aW5nU3R5bGUoKQotewot
ICAgIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKmVkaXRpbmdTdHlsZSA9
IDA7Ci0gICAgaWYgKCFlZGl0aW5nU3R5bGUpIHsKLSAgICAgICAgZWRpdGluZ1N0eWxlID0gbmV3
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKLSAgICAgICAgaW50IGV4Y2VwdGlvbkNv
ZGU7Ci0gICAgICAgIGVkaXRpbmdTdHlsZS0+c2V0Q3NzVGV4dCgid29yZC13cmFwOiBicmVhay13
b3JkOyAta2h0bWwtbmJzcC1tb2RlOiBzcGFjZTsgLWtodG1sLWxpbmUtYnJlYWs6IGFmdGVyLXdo
aXRlLXNwYWNlOyIsIGV4Y2VwdGlvbkNvZGUpOwotICAgIH0KLSAgICByZXR1cm4gZWRpdGluZ1N0
eWxlOwotfQotCi12b2lkIEtIVE1MUGFydDo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50
KCkgY29uc3QKLXsKLSAgICBpZiAoIWQtPm1fZG9jKQotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIFJlZlB0cjxOb2RlTGlzdEltcGw+IGxpc3QgPSBkLT5tX2RvYy0+Z2V0RWxlbWVudHNC
eVRhZ05hbWUoImJvZHkiKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgYXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obGlzdC0+aXRlbShp
KSkpOyAgICAKLSAgICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpyZW1vdmVFZGl0aW5nU3R5bGVG
cm9tQm9keUVsZW1lbnQoKSBjb25zdAotewotICAgIGlmICghZC0+bV9kb2MpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgUmVmUHRyPE5vZGVMaXN0SW1wbD4gbGlzdCA9IGQtPm1fZG9j
LT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOwotICAgIHVuc2lnbmVkIGxlbiA9IGxpc3Qt
Pmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAg
ICAgICByZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCAqPihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmFw
cGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVsZW1lbnRJbXBsICplbGVtZW50KSBjb25zdAotewot
ICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBlbGVtZW50LT5y
ZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsICpjdXJyZW50U3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oZWxlbWVu
dCktPmdldElubGluZVN0eWxlRGVjbCgpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
SW1wbCAqbWVyZ2VTdHlsZSA9IGVkaXRpbmdTdHlsZSgpOwotICAgIGlmIChtZXJnZVN0eWxlKSB7
Ci0gICAgICAgIGN1cnJlbnRTdHlsZS0+bWVyZ2UobWVyZ2VTdHlsZSk7Ci0gICAgICAgIGVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGN1cnJlbnRTdHlsZS0+Y3NzVGV4dCgpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpyZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudChF
bGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBSZW5k
ZXJPYmplY3QgKnJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRl
cmVyIHx8ICFyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqY3VycmVudFN0eWxlID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURlY2woKTsK
LSAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICBjaGFuZ2VkIHw9ICFjdXJyZW50U3R5bGUt
PnJlbW92ZVByb3BlcnR5KENTU19QUk9QX1dPUkRfV1JBUCwgZmFsc2UpLmlzTnVsbCgpOwotICAg
IGNoYW5nZWQgfD0gIWN1cnJlbnRTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTX1BST1BfX0tIVE1M
X05CU1BfTU9ERSwgZmFsc2UpLmlzTnVsbCgpOwotICAgIGNoYW5nZWQgfD0gIWN1cnJlbnRTdHls
ZS0+cmVtb3ZlUHJvcGVydHkoQ1NTX1BST1BfX0tIVE1MX0xJTkVfQlJFQUssIGZhbHNlKS5pc051
bGwoKTsKLSAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAgY3VycmVudFN0eWxlLT5zZXRDaGFuZ2Vk
KCk7Ci0KLSAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBjdXJyZW50U3R5bGUt
PmNzc1RleHQoKSk7Ci19Ci0KLQotYm9vbCBLSFRNTFBhcnQ6OmlzQ2hhcmFjdGVyU21hcnRSZXBs
YWNlRXhlbXB0KGNvbnN0IFFDaGFyICYsIGJvb2wpCi17Ci0gICAgLy8gbm8gc21hcnQgcmVwbGFj
ZQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtIVE1MUGFydDo6Y29ubmVjdENoaWxkKGNv
bnN0IGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCkgY29uc3QKLXsKLSAgICBSZWFkT25seVBhcnQg
KnBhcnQgPSBjaGlsZC0+bV9wYXJ0OwotICAgIGlmIChwYXJ0ICYmIGNoaWxkLT5tX3R5cGUgIT0g
Q2hpbGRGcmFtZTo6T2JqZWN0KQotICAgIHsKLSAgICAgICAgY29ubmVjdCggcGFydCwgU0lHTkFM
KCBzdGFydGVkKCBLSU86OkpvYiAqKSApLAotICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKCBz
bG90Q2hpbGRTdGFydGVkKCBLSU86OkpvYiAqKSApICk7Ci0gICAgICAgIGNvbm5lY3QoIHBhcnQs
IFNJR05BTCggY29tcGxldGVkKCkgKSwKLSAgICAgICAgICAgICAgICAgdGhpcywgU0xPVCggc2xv
dENoaWxkQ29tcGxldGVkKCkgKSApOwotICAgICAgICBjb25uZWN0KCBwYXJ0LCBTSUdOQUwoIGNv
bXBsZXRlZChib29sKSApLAotICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90Q2hpbGRD
b21wbGV0ZWQoYm9vbCkgKSApOwotICAgICAgICBjb25uZWN0KCBwYXJ0LCBTSUdOQUwoIHNldFN0
YXR1c0JhclRleHQoIGNvbnN0IFFTdHJpbmcgJiApICksCi0gICAgICAgICAgICAgICAgIHRoaXMs
IFNJR05BTCggc2V0U3RhdHVzQmFyVGV4dCggY29uc3QgUVN0cmluZyAmICkgKSApOwotICAgICAg
ICBjb25uZWN0KCB0aGlzLCBTSUdOQUwoIGNvbXBsZXRlZCgpICksCi0gICAgICAgICAgICAgICAg
IHBhcnQsIFNMT1QoIHNsb3RQYXJlbnRDb21wbGV0ZWQoKSApICk7Ci0gICAgICAgIGNvbm5lY3Qo
IHRoaXMsIFNJR05BTCggY29tcGxldGVkKGJvb2wpICksCi0gICAgICAgICAgICAgICAgIHBhcnQs
IFNMT1QoIHNsb3RQYXJlbnRDb21wbGV0ZWQoKSApICk7Ci0gICAgfQotfQotCi12b2lkIEtIVE1M
UGFydDo6ZGlzY29ubmVjdENoaWxkKGNvbnN0IGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCkgY29u
c3QKLXsKLSAgICBSZWFkT25seVBhcnQgKnBhcnQgPSBjaGlsZC0+bV9wYXJ0OwotICAgIGlmIChw
YXJ0ICYmIGNoaWxkLT5tX3R5cGUgIT0gQ2hpbGRGcmFtZTo6T2JqZWN0KQotICAgIHsKLSAgICAg
ICAgZGlzY29ubmVjdCggcGFydCwgU0lHTkFMKCBzdGFydGVkKCBLSU86OkpvYiAqKSApLAotICAg
ICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90Q2hpbGRTdGFydGVkKCBLSU86OkpvYiAq
KSApICk7Ci0gICAgICAgIGRpc2Nvbm5lY3QoIHBhcnQsIFNJR05BTCggY29tcGxldGVkKCkgKSwK
LSAgICAgICAgICAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdENoaWxkQ29tcGxldGVkKCkgKSAp
OwotICAgICAgICBkaXNjb25uZWN0KCBwYXJ0LCBTSUdOQUwoIGNvbXBsZXRlZChib29sKSApLAot
ICAgICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90Q2hpbGRDb21wbGV0ZWQoYm9vbCkg
KSApOwotICAgICAgICBkaXNjb25uZWN0KCBwYXJ0LCBTSUdOQUwoIHNldFN0YXR1c0JhclRleHQo
IGNvbnN0IFFTdHJpbmcgJiApICksCi0gICAgICAgICAgICAgICAgICAgIHRoaXMsIFNJR05BTCgg
c2V0U3RhdHVzQmFyVGV4dCggY29uc3QgUVN0cmluZyAmICkgKSApOwotICAgICAgICBkaXNjb25u
ZWN0KCB0aGlzLCBTSUdOQUwoIGNvbXBsZXRlZCgpICksCi0gICAgICAgICAgICAgICAgICAgIHBh
cnQsIFNMT1QoIHNsb3RQYXJlbnRDb21wbGV0ZWQoKSApICk7Ci0gICAgICAgIGRpc2Nvbm5lY3Qo
IHRoaXMsIFNJR05BTCggY29tcGxldGVkKGJvb2wpICksCi0gICAgICAgICAgICAgICAgICAgIHBh
cnQsIFNMT1QoIHNsb3RQYXJlbnRDb21wbGV0ZWQoKSApICk7Ci0gICAgfQotfQotCi12b2lkIEtI
VE1MUGFydDo6a2VlcEFsaXZlKCkKLXsKLSAgICBpZiAoZC0+bV9saWZlU3VwcG9ydFRpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICByZWYoKTsKLSAgICBkLT5tX2xpZmVTdXBw
b3J0VGltZXIuc3RhcnQoMCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90RW5kTGlm
ZVN1cHBvcnQoKQotewotICAgIGQtPm1fbGlmZVN1cHBvcnRUaW1lci5zdG9wKCk7Ci0gICAgZGVy
ZWYoKTsKLX0KLQotLy8gV29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCBpdCdzIGhhcmQgdG8g
ZGVsZXRlIGEgZnJhbWUuCi0vLyBDYWxsIHRoaXMgYWZ0ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQg
c2VsZWN0aW9ucyB0byBtYWtlIGl0IGVhc3kgdG8gZGVsZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJl
bHkgc2VsZWN0ZWQuCi0vLyBDYW4ndCBkbyB0aGlzIGltcGxpY2l0bHkgYXMgcGFydCBvZiBldmVy
eSBzZXRTZWxlY3Rpb24gY2FsbCBiZWNhdXNlIGluIHNvbWUgY29udGV4dHMgaXQgbWlnaHQgbm90
IGJlIGdvb2QKLS8vIGZvciB0aGUgZm9jdXMgdG8gbW92ZSB0byBhbm90aGVyIGZyYW1lLiBTbyBp
bnN0ZWFkIHdlIGNhbGwgaXQgZnJvbSBwbGFjZXMgd2hlcmUgd2UgYXJlIHNlbGVjdGluZyB3aXRo
IHRoZQotLy8gbW91c2Ugb3IgdGhlIGtleWJvYXJkIGFmdGVyIHNldHRpbmcgdGhlIHNlbGVjdGlv
bi4KLXZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxl
Y3RlZCgpCi17Ci0gICAgLy8gRmluZCB0aGUgcGFyZW50IGZyYW1lOyBpZiB0aGVyZSBpcyBub25l
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBLSFRNTFBhcnQgKnBhcmVudCA9IHBh
cmVudFBhcnQoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIEtIVE1M
VmlldyAqcGFyZW50VmlldyA9IHBhcmVudC0+dmlldygpOwotICAgIGlmICghcGFyZW50VmlldykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHNlbGVjdGlvbiBjb250YWlu
cyB0aGUgZW50aXJlIGZyYW1lIGNvbnRlbnRzOyBpZiBub3QsIHRoZW4gdGhlcmUgaXMgbm90aGlu
ZyB0byBkby4KLSAgICBpZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2Vs
ZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0VuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKGQtPm1f
c2VsZWN0aW9uLmVuZCgpLCBkLT5tX3NlbGVjdGlvbi5lbmRBZmZpbml0eSgpKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZl
biA8b2JqZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgotICAgIERvY3VtZW50SW1w
bCAqZG9jdW1lbnQgPSB4bWxEb2NJbXBsKCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIEVsZW1lbnRJbXBsICpvd25lckVsZW1lbnQgPSBkb2N1bWVudC0+b3duZXJF
bGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBO
b2RlSW1wbCAqb3duZXJFbGVtZW50UGFyZW50ID0gb3duZXJFbGVtZW50LT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKCFvd25lckVsZW1lbnRQYXJlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50Lgot
ICAgIHVuc2lnbmVkIG93bmVyRWxlbWVudE5vZGVJbmRleCA9IG93bmVyRWxlbWVudC0+bm9kZUlu
ZGV4KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9z
aXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIGtodG1sOjpT
RUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93bmVyRWxl
bWVudChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2Rl
SW5kZXggKyAxLCBraHRtbDo6VlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKLQotICAgIC8vIEZv
Y3VzIG9uIHRoZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlz
IGVsZW1lbnQgdG8gYWZ0ZXIuCi0gICAgaWYgKHBhcmVudC0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KFNlbGVjdGlvbkNvbnRyb2xsZXIoYmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVu
dCkpKSB7Ci0gICAgICAgIHBhcmVudFZpZXctPnNldEZvY3VzKCk7Ci0gICAgICAgIHBhcmVudC0+
c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoYmVmb3JlT3duZXJFbGVtZW50LCBhZnRl
ck93bmVyRWxlbWVudCkpOwotICAgIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZUZhbGxi
YWNrQ29udGVudCgpCi17Ci0gICAgS0hUTUxQYXJ0ICpwYXJlbnQgPSBwYXJlbnRQYXJ0KCk7Ci0g
ICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBDaGlsZEZyYW1lICpjaGlsZEZy
YW1lID0gcGFyZW50LT5jaGlsZEZyYW1lKHRoaXMpOwotICAgIGlmICghY2hpbGRGcmFtZSB8fCBj
aGlsZEZyYW1lLT5tX3R5cGUgIT0gQ2hpbGRGcmFtZTo6T2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0gICAga2h0bWw6OlJlbmRlclBhcnQgKnJlbmRlclBhcnQgPSBjaGlsZEZyYW1lLT5tX2ZyYW1l
OwotICAgIGlmICghcmVuZGVyUGFydCkKLSAgICAgICAgcmV0dXJuOwotICAgIE5vZGVJbXBsICpu
b2RlID0gcmVuZGVyUGFydC0+ZWxlbWVudCgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aGFz
VGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nhc3Q8SFRN
TE9iamVjdEVsZW1lbnRJbXBsICo+KG5vZGUpLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLX0K
SW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBACiAj
aW5jbHVkZSAicmVuZGVyX3RoZW1lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgPGtzdGFu
ZGFyZGRpcnMuaD4KICNpbmNsdWRlIDxxZmlsZS5oPgpAQCAtMjIwLDcgKzIyMCw3IEBAIENTU1N0
eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoIERvY3UKIAogICAgIHZpZXcgPSBkb2MtPnZp
ZXcoKTsKICAgICBzdHJpY3RQYXJzaW5nID0gX3N0cmljdFBhcnNpbmc7Ci0gICAgc2V0dGluZ3Mg
PSB2aWV3ID8gdmlldy0+cGFydCgpLT5zZXR0aW5ncygpIDogMDsKKyAgICBzZXR0aW5ncyA9IHZp
ZXcgPyB2aWV3LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMDsKICAgICBpZiAoIWRlZmF1bHRTdHls
ZSkKICAgICAgICAgbG9hZERlZmF1bHRTdHlsZSgpOwogICAgIG1fbWVkaXVtID0gdmlldyA/IHZp
ZXctPm1lZGlhVHlwZSgpIDogUVN0cmluZygiYWxsIik7CkBAIC01MTMsOCArNTEzLDggQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbAogICAgICAgICBwYXJlbnRTdHls
ZSA9IChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPnJlbmRlcmVyKCkpID8gcGFyZW50Tm9kZS0+
cmVuZGVyZXIoKS0+c3R5bGUoKSA6IDA7CiAgICAgdmlldyA9IGVsZW1lbnQtPmdldERvY3VtZW50
KCktPnZpZXcoKTsKICAgICBpc1hNTERvYyA9ICFlbGVtZW50LT5nZXREb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpOwotICAgIHBhcnQgPSBlbGVtZW50LT5nZXREb2N1bWVudCgpLT5wYXJ0KCk7
Ci0gICAgc2V0dGluZ3MgPSBwYXJ0ID8gcGFydC0+c2V0dGluZ3MoKSA6IDA7CisgICAgZnJhbWUg
PSBlbGVtZW50LT5nZXREb2N1bWVudCgpLT5mcmFtZSgpOworICAgIHNldHRpbmdzID0gZnJhbWUg
PyBmcmFtZS0+c2V0dGluZ3MoKSA6IDA7CiAgICAgcGFpbnREZXZpY2VNZXRyaWNzID0gZWxlbWVu
dC0+Z2V0RG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCk7CiAgICAgCiAgICAgc3R5bGUg
PSAwOwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09u
ZVNlbGVjdG9yKAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICAgICAgaWYg
KGUgJiYgZS0+Zm9jdXNlZCgpICYmIGUtPmdldERvY3VtZW50KCktPnBhcnQoKS0+ZGlzcGxheXNX
aXRoRm9jdXNBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5mb2N1
c2VkKCkgJiYgZS0+Z2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZGlzcGxheXNXaXRoRm9jdXNBdHRy
aWJ1dGVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk1MCw4ICsyOTUwLDggQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgogICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSAxLjA7CiAgICAgICAgICAgICAvLyBTY2FsZSBmb3IgdGhlIGZvbnQgem9v
bSBmYWN0b3Igb25seSBmb3IgdHlwZXMgb3RoZXIgdGhhbiAiZW0iIGFuZCAiZXgiLCBzaW5jZSB0
aG9zZSBhcmUKICAgICAgICAgICAgIC8vIGFscmVhZHkgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4K
LSAgICAgICAgICAgIGlmICh0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TICYmIHR5
cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgJiYgdmlldyAmJiB2aWV3LT5wYXJ0KCkp
IHsKLSAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gdmlldy0+cGFydCgpLT56b29tRmFjdG9y
KCkgLyAxMDAuMDsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfRU1TICYmIHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgJiYgdmlldyAmJiB2
aWV3LT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IHZpZXctPmZyYW1l
KCktPnpvb21GYWN0b3IoKSAvIDEwMC4wOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aChzdHlsZSwgcGFp
bnREZXZpY2VNZXRyaWNzLCBtdWx0aXBsaWVyKSwgRml4ZWQpOwogICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQpAQCAtNDE3NSw3ICs0
MTc1LDcgQEAgZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRTaXplRgogICAgIGlu
dCBtaW5TaXplID0gc2V0dGluZ3MtPm1pbkZvbnRTaXplKCk7CiAgICAgaW50IG1pbkxvZ2ljYWxT
aXplID0gc2V0dGluZ3MtPm1pbkxvZ2ljYWxGb250U2l6ZSgpOwogCi0gICAgZmxvYXQgem9vbVBl
cmNlbnQgPSAoIXByaW50cGFpbnRlciAmJiB2aWV3KSA/IHZpZXctPnBhcnQoKS0+em9vbUZhY3Rv
cigpLzEwMC4wZiA6IDEuMGY7CisgICAgZmxvYXQgem9vbVBlcmNlbnQgPSAoIXByaW50cGFpbnRl
ciAmJiB2aWV3KSA/IHZpZXctPmZyYW1lKCktPnpvb21GYWN0b3IoKS8xMDAuMGYgOiAxLjBmOwog
ICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXplICogem9vbVBlcmNlbnQ7CiAKICAg
ICAvLyBBcHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiAgV2Ugb25seSBhcHBseSB0aGUgaGFy
ZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgpJbmRleDog
a2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5oCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2Nzcy9jc3NzdHlsZXNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogY2xhc3MgS0hUTUxT
ZXR0aW5nczsKIGNsYXNzIEtIVE1MVmlldzsKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNzIEZyYW1l
OwogY2xhc3MgS1VSTDsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjcsNyArMjI3LDcgQEAgcHVi
bGljOgogCURPTTo6Tm9kZUltcGwgKnBhcmVudE5vZGU7CiAgICAgICAgIFJlbmRlclN0eWxlOjpQ
c2V1ZG9JZCBwc2V1ZG9TdHlsZTsKIAlLSFRNTFZpZXcgKnZpZXc7Ci0JS0hUTUxQYXJ0ICpwYXJ0
OworCUZyYW1lICpmcmFtZTsKIAljb25zdCBLSFRNTFNldHRpbmdzICpzZXR0aW5nczsKIAlRUGFp
bnREZXZpY2VNZXRyaWNzICpwYWludERldmljZU1ldHJpY3M7CiAgICAgICAgIGJvb2wgZm9udERp
cnR5OwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2todG1s
X3BhcnQuaAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9raHRtbF9wYXJ0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIyNyArMCwwIEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0v
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLSAqCi0gKiBDb3B5cmlnaHQg
KEMpIDE5OTgsIDE5OTkgVG9yYmVuIFdlaXMgPHdlaXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAg
ICAgICAgICAgMTk5OS0yMDAxIExhcnMgS25vbGwgPGtub2xsQGtkZS5vcmc+Ci0gKiAgICAgICAg
ICAgICAgICAgICAgIDE5OTktMjAwMSBBbnR0aSBLb2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4K
LSAqICAgICAgICAgICAgICAgICAgICAgMjAwMC0yMDAxIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFu
bkBrZGUub3JnPgotICogICAgICAgICAgICAgICAgICAgICAyMDAwLTIwMDEgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgIDIwMDAgU3RlZmFuIFNj
aGltYW5za2kgPDFTdGVpbkBnbXguZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
LSAqLwotI2lmbmRlZiBfX2todG1sX3BhcnRfaF9fCi0jZGVmaW5lIF9fa2h0bWxfcGFydF9oX18K
LQotI2luY2x1ZGUgImVkaXRpbmcvdGV4dF9ncmFudWxhcml0eS5oIgotI2luY2x1ZGUgImVkaXRp
bmcvZWRpdF9hY3Rpb25zLmgiCi0KLSNpbmNsdWRlIDxrcGFydHMvcGFydC5oPgotI2luY2x1ZGUg
PGtwYXJ0cy9icm93c2VyZXh0ZW5zaW9uLmg+Ci0KLWNsYXNzIEtIVE1MUGFydFByaXZhdGU7Ci1j
bGFzcyBLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOwotY2xhc3MgS0pTUHJveHlJbXBsOwotY2xh
c3MgS0hUTUxWaWV3OwotY2xhc3MgS0hUTUxTZXR0aW5nczsKLQotbmFtZXNwYWNlIERPTQotewot
ICBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsOwotICBjbGFzcyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Ci0gIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb25JbXBs
OwotICBjbGFzcyBET01TdHJpbmc7Ci0gIGNsYXNzIERvY3VtZW50OwotICBjbGFzcyBEb2N1bWVu
dEltcGw7Ci0gIGNsYXNzIEVsZW1lbnRJbXBsOwotICBjbGFzcyBFdmVudExpc3RlbmVyOwotICBj
bGFzcyBIVE1MQW5jaG9yRWxlbWVudEltcGw7Ci0gIGNsYXNzIEhUTUxEb2N1bWVudDsKLSAgY2xh
c3MgSFRNTERvY3VtZW50SW1wbDsKLSAgY2xhc3MgSFRNTEVsZW1lbnRJbXBsOwotICBjbGFzcyBI
VE1MRXZlbnRMaXN0ZW5lcjsKLSAgY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsKLSAgY2xhc3Mg
SFRNTEZyYW1lRWxlbWVudEltcGw7Ci0gIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50SW1wbDsKLSAg
Y2xhc3MgSFRNTE1ldGFFbGVtZW50SW1wbDsKLSAgY2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBs
OwotICBjbGFzcyBIVE1MVGl0bGVFbGVtZW50SW1wbDsKLSAgY2xhc3MgTm9kZTsKLSAgY2xhc3Mg
Tm9kZUltcGw7Ci0gIGNsYXNzIFJhbmdlOwotICBjbGFzcyBSYW5nZUltcGw7Ci19Ci0KLW5hbWVz
cGFjZSBraHRtbAotewotICBjbGFzcyBDYWNoZWRPYmplY3Q7Ci0gIHN0cnVjdCBDaGlsZEZyYW1l
OwotICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwotICBjbGFzcyBEb2NMb2FkZXI7Ci0gIGNsYXNz
IERyYXdDb250ZW50c0V2ZW50OwotICBjbGFzcyBFZGl0Q29tbWFuZFB0cjsKLSAgY2xhc3MgRm9y
bURhdGE7Ci0gIGNsYXNzIEhUTUxUb2tlbml6ZXI7Ci0gIGNsYXNzIE1vdXNlRG91YmxlQ2xpY2tF
dmVudDsKLSAgY2xhc3MgTW91c2VFdmVudDsKLSAgY2xhc3MgTW91c2VNb3ZlRXZlbnQ7Ci0gIGNs
YXNzIE1vdXNlUHJlc3NFdmVudDsKLSAgY2xhc3MgTW91c2VSZWxlYXNlRXZlbnQ7Ci0gIGNsYXNz
IFJlbmRlclBhcnQ7Ci0gIGNsYXNzIFJlbmRlclBhcnRPYmplY3Q7Ci0gIGNsYXNzIFJlbmRlcldp
ZGdldDsKLSAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKLSAgY2xhc3MgWE1MVG9rZW5pemVy
OwotfQotCi1uYW1lc3BhY2UgS0pTIHsKLSAgICBjbGFzcyBET01Eb2N1bWVudDsKLSAgICBjbGFz
cyBTZWxlY3Rpb247Ci0gICAgY2xhc3MgU2VsZWN0aW9uRnVuYzsKLSAgICBjbGFzcyBXaW5kb3c7
Ci0gICAgY2xhc3MgV2luZG93RnVuYzsKLX0KLQotbmFtZXNwYWNlIEtQYXJ0cwotewotICBjbGFz
cyBQYXJ0TWFuYWdlcjsKLX07Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBraHRtbCdzIG1haW4g
Y2xhc3MuIEl0IGZlYXR1cmVzIGFuIGFsbW9zdCBjb21wbGV0ZQotICogd2ViIGJyb3dzZXIsIGFu
ZCBodG1sIHJlbmRlcmVyLgotICoKLSAqIFRoZSBlYXNpZXN0IHdheSB0byB1c2UgdGhpcyBjbGFz
cyAoaWYgeW91IGp1c3Qgd2FudCB0byBkaXNwbGF5IGFuIEhUTUwKLSAqIHBhZ2UgYXQgc29tZSBV
UkwpIGlzIHRoZSBmb2xsb3dpbmc6Ci0gKgotICogPHByZT4KLSAqIEtVUkwgdXJsID0gImh0dHA6
Ly93d3cua2RlLm9yZyI7Ci0gKiBLSFRNTFBhcnQgKncgPSBuZXcgS0hUTUxQYXJ0KCk7Ci0gKiB3
LT5vcGVuVVJMKHVybCk7Ci0gKiB3LT52aWV3KCktPnJlc2l6ZSg1MDAsIDQwMCk7Ci0gKiB3LT5z
aG93KCk7Ci0gKiA8L3ByZT4KLSAqCi0gKiBCeSBkZWZhdWx0IEphdmEgYW5kIEphdmFTY3JpcHQg
c3VwcG9ydCBhcmUgZGlzYWJsZWQuIFlvdSBjYW4gZW5hYmxlIHRoZW0gYnkKLSAqIHVzaW5nIHRo
ZSBAcmVmIHNldEphdmFFbmFibGVkKCkgYW5kIEByZWYgc2V0SlNjcmlwdEVuYWJsZWQoKSBtZXRo
b2RzLgotICoKLSAqIFNvbWUgYXBwcyB3YW50IHRvIHdyaXRlIHRoZWlyIEhUTUwgY29kZSBkaXJl
Y3RseSBpbnRvIHRoZSB3aWRnZXQgaW5zdGVhZCBvZgotICogaXQgb3BlbmluZyBhbiB1cmwuIFlv
dSBjYW4gYWxzbyBkbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICoKLSAqIDxwcmU+Ci0g
KiBRU3RyaW5nIG15SFRNTENvZGUgPSAuLi47Ci0gKiBLSFRNTFBhcnQgKncgPSBuZXcgS0hUTUxQ
YXJ0KCk7Ci0gKiB3LT5iZWdpbigpOwotICogdy0+d3JpdGUobXlIVE1MQ29kZSk7Ci0gKiAuLi4K
LSAqIHctPmVuZCgpOwotICogPC9wcmU+Ci0gKgotICogWW91IGNhbiBkbyBhcyBtYW55IGNhbGxz
IHRvIHdyaXRlIGFzIHlvdSB3YW50LiBCdXQgdGhlcmUgYXJlIHR3bwotICogQHJlZiB3cml0ZSgp
IG1ldGhvZHMsIG9uZSBhY2NlcHRpbmcgYSBAcmVmIFFTdHJpbmcgb25lIGFjY2VwdGluZyBhCi0g
KiBAcCBjaGFyIEBwICogYXJndW1lbnQuIFlvdSBzaG91bGQgdXNlIG9uZSBvciB0aGUgb3RoZXIK
LSAqIChidXQgbm90IGJvdGgpIHNpbmNlIHRoZSBtZXRob2QgdXNpbmcKLSAqIHRoZSBAcCBjaGFy
IEBwICogYXJndW1lbnQgZG9lcyBhbiBhZGRpdGlvbmFsIGRlY29kaW5nIHN0ZXAgdG8gY29udmVy
dCB0aGUKLSAqIHdyaXR0ZW4gZGF0YSB0byBVbmljb2RlLgotICoKLSAqIEBzaG9ydCBIVE1MIEJy
b3dzZXIgV2lkZ2V0Ci0gKiBAYXV0aG9yIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAq
LwotY2xhc3MgS0hUTUxQYXJ0IDogcHVibGljIEtQYXJ0czo6UmVhZE9ubHlQYXJ0Ci17Ci0gIGZy
aWVuZCBjbGFzcyBLSFRNTFZpZXc7Ci0gIGZyaWVuZCBjbGFzcyBET006OkhUTUxUaXRsZUVsZW1l
bnRJbXBsOwotICBmcmllbmQgY2xhc3MgRE9NOjpIVE1MRnJhbWVFbGVtZW50SW1wbDsKLSAgZnJp
ZW5kIGNsYXNzIERPTTo6SFRNTElGcmFtZUVsZW1lbnRJbXBsOwotICBmcmllbmQgY2xhc3MgRE9N
OjpIVE1MT2JqZWN0RWxlbWVudEltcGw7Ci0gIGZyaWVuZCBjbGFzcyBET006OkhUTUxBbmNob3JF
bGVtZW50SW1wbDsKLSAgZnJpZW5kIGNsYXNzIERPTTo6SFRNTE1ldGFFbGVtZW50SW1wbDsKLSAg
ZnJpZW5kIGNsYXNzIERPTTo6Tm9kZUltcGw7Ci0gIGZyaWVuZCBjbGFzcyBLSFRNTFJ1bjsKLSAg
ZnJpZW5kIGNsYXNzIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKLSAgZnJpZW5kIGNsYXNzIGto
dG1sOjpSZW5kZXJQYXJ0T2JqZWN0OwotICBmcmllbmQgY2xhc3MgS0pTOjpTZWxlY3Rpb247Ci0g
IGZyaWVuZCBjbGFzcyBLSlM6OlNlbGVjdGlvbkZ1bmM7Ci0gIGZyaWVuZCBjbGFzcyBLSlM6Oldp
bmRvdzsKLSAgZnJpZW5kIGNsYXNzIEtKUzo6V2luZG93RnVuYzsKLSAgZnJpZW5kIGNsYXNzIEtK
Uzo6RE9NRG9jdW1lbnQ7Ci0gIGZyaWVuZCBjbGFzcyBLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9u
OwotICBmcmllbmQgY2xhc3MgRE9NOjpEb2N1bWVudEltcGw7Ci0gIGZyaWVuZCBjbGFzcyBET006
OkhUTUxEb2N1bWVudEltcGw7Ci0gIGZyaWVuZCBjbGFzcyBraHRtbDo6SFRNTFRva2VuaXplcjsK
LSAgZnJpZW5kIGNsYXNzIGtodG1sOjpYTUxUb2tlbml6ZXI7Ci0gIGZyaWVuZCBjbGFzcyBraHRt
bDo6UmVuZGVyV2lkZ2V0OwotICBmcmllbmQgY2xhc3Mga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I7
Ci0gIGZyaWVuZCBjbGFzcyBLSFRNTFBhcnRJZmFjZTsKLQotICBRX1BST1BFUlRZKCBib29sIGph
dmFTY3JpcHRFbmFibGVkIFJFQUQgalNjcmlwdEVuYWJsZWQgV1JJVEUgc2V0SlNjcmlwdEVuYWJs
ZWQgKQotICBRX1BST1BFUlRZKCBib29sIGphdmFFbmFibGVkIFJFQUQgamF2YUVuYWJsZWQgV1JJ
VEUgc2V0SmF2YUVuYWJsZWQgKQotICBRX1BST1BFUlRZKCBib29sIGF1dG9sb2FkSW1hZ2VzIFJF
QUQgYXV0b2xvYWRJbWFnZXMgV1JJVEUgc2V0QXV0b2xvYWRJbWFnZXMgKQotICBRX1BST1BFUlRZ
KCBib29sIGRuZEVuYWJsZWQgUkVBRCBkbmRFbmFibGVkIFdSSVRFIHNldEROREVuYWJsZWQgKQot
ICBRX1BST1BFUlRZKCBib29sIHBsdWdpbnNFbmFibGVkIFJFQUQgcGx1Z2luc0VuYWJsZWQgV1JJ
VEUgc2V0UGx1Z2luc0VuYWJsZWQgKQotICBRX1BST1BFUlRZKCBib29sIG9ubHlMb2NhbFJlZmVy
ZW5jZXMgUkVBRCBvbmx5TG9jYWxSZWZlcmVuY2VzIFdSSVRFIHNldE9ubHlMb2NhbFJlZmVyZW5j
ZXMgKQotICBRX1BST1BFUlRZKCBRQ1N0cmluZyBkY29wT2JqZWN0SWQgUkVBRCBkY29wT2JqZWN0
SWQgKQotCi1wdWJsaWM6Ci0gIGVudW0geyBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biA9IElOVF9NSU4gfTsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBLSFRNTFBhcnQu
Ci0gICAqCi0gICAqIEtIVE1MIGJhc2ljYWxseSBjb25zaXN0cyBvZiB0d28gb2JqZWN0czogVGhl
IEtIVE1MUGFydCBpdHNlbGYsCi0gICAqIGhvbGRpbmcgdGhlIGRvY3VtZW50IGRhdGEgKERPTSBk
b2N1bWVudCksIGFuZCB0aGUgQHJlZiBLSFRNTFZpZXcsCi0gICAqIGRlcml2ZWQgZnJvbSBAcmVm
IFFTY3JvbGxWaWV3LCBpbiB3aGljaCB0aGUgZG9jdW1lbnQgY29udGVudCBpcwotICAgKiByZW5k
ZXJlZCBpbi4gWW91IGNhbiBzcGVjaWZ5IHR3byBkaWZmZXJlbnQgcGFyZW50IG9iamVjdHMgZm9y
IGEKLSAgICogS0hUTUxQYXJ0LCBvbmUgcGFyZW50IGZvciB0aGUgS0hUTUxQYXJ0IGRvY3VtZW50
IGFuZCBvbiBwYXJlbnQKLSAgICogZm9yIHRoZSBAcmVmIEtIVE1MVmlldy4gSWYgdGhlIHNlY29u
ZCBAcCBwYXJlbnQgYXJndW1lbnQgaXMgMEwsIHRoZW4KLSAgICogQHAgcGFyZW50V2lkZ2V0IGlz
IHVzZWQgYXMgcGFyZW50IGZvciBib3RoIG9iamVjdHMsIHRoZSBwYXJ0IGFuZAotICAgKiB0aGUg
dmlldy4KLSAgICovCi0gIEtIVE1MUGFydChRV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSAwLCBjb25z
dCBjaGFyICp3aWRnZXRuYW1lID0gMCwgUU9iamVjdCAqcGFyZW50ID0gMCwgY29uc3QgY2hhciAq
bmFtZSA9IDApOwotICBLSFRNTFBhcnQoS0hUTUxWaWV3ICp2aWV3LCBRT2JqZWN0ICpwYXJlbnQg
PSAwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7Ci0KLSAgLyoqCi0gICAqIERlc3RydWN0b3IuCi0g
ICAqLwotICB2aXJ0dWFsIH5LSFRNTFBhcnQoKTsKLQotICAvKioKLSAgICogT3BlbnMgdGhlIHNw
ZWNpZmllZCBVUkwgQHAgdXJsLgotICAgKgotICAgKiBSZWltcGxlbWVudGVkIGZyb20gQHJlZiBL
UGFydHM6OlJlYWRPbmx5UGFydDo6b3BlblVSTCAuCi0gICAqLwotICB2aXJ0dWFsIGJvb2wgb3Bl
blVSTCggY29uc3QgS1VSTCAmdXJsICk7Ci0KLSAgdm9pZCBkaWRFeHBsaWNpdE9wZW4oKTsKLQot
ICAvKioKLSAgICogU3RvcHMgbG9hZGluZyB0aGUgZG9jdW1lbnQgYW5kIGtpbGwgYWxsIGRhdGEg
cmVxdWVzdHMgKGZvciBpbWFnZXMsIGV0Yy4pCi0gICAqLwotICB2b2lkIHN0b3BMb2FkaW5nKGJv
b2wgc2VuZFVubG9hZCA9IGZhbHNlKTsKLSAgdmlydHVhbCBib29sIGNsb3NlVVJMKCk7Ci0KLSAg
LyoqCi0gICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBAcmVmIEtQYXJ0czo6QnJvd3NlckV4
dGVuc2lvbi4KLSAgICovCi0gIEtQYXJ0czo6QnJvd3NlckV4dGVuc2lvbiAqYnJvd3NlckV4dGVu
c2lvbigpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSFRN
TCBkb2N1bWVudCdzIHZpZXcuCi0gICAqLwotICBLSFRNTFZpZXcgKnZpZXcoKSBjb25zdDsKLQot
ICAvKioKLSAgICogRW5hYmxlL2Rpc2FibGUgSmF2YXNjcmlwdCBzdXBwb3J0LiBOb3RlIHRoYXQg
dGhpcyB3aWxsCi0gICAqIGluIGVpdGhlciBjYXNlIHBlcm1hbmVudGx5IG92ZXJyaWRlIHRoZSBk
ZWZhdWx0IHVzZXJzZXR0aW5nLgotICAgKiBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBkZWZhdWx0
IFVzZXJTZXR0aW5ncywgZG9uJ3QgY2FsbCB0aGlzCi0gICAqIG1ldGhvZC4KLSAgICovCi0gIHZv
aWQgc2V0SlNjcmlwdEVuYWJsZWQoIGJvb2wgZW5hYmxlICk7Ci0KLSAgLyoqCi0gICAqIFJldHVy
bnMgQHAgdHJ1ZSBpZiBKYXZhc2NyaXB0IHN1cHBvcnQgaXMgZW5hYmxlZCBvciBAcCBmYWxzZQot
ICAgKiBvdGhlcndpc2UuCi0gICAqLwotICBib29sIGpTY3JpcHRFbmFibGVkKCkgY29uc3Q7Ci0K
LSAgLyoqCi0gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBhdXRvbWF0aWMgZm9yd2FyZGluZyBieSA8
bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiAuLi4uPgotICAgKi8KLSAgdm9pZCBzZXRNZXRhUmVm
cmVzaEVuYWJsZWQoIGJvb2wgZW5hYmxlICk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgQHAgdHJ1
ZSBpZiBhdXRvbXRhaWMgZm9yd2FyZGluZyBpcyBlbmFibGVkLgotICAgKi8KLSAgYm9vbCBtZXRh
UmVmcmVzaEVuYWJsZWQoKSBjb25zdDsKLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgc3BlY2lm
aWVkIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCBjb2RlLgotICAgKgotICAgKiBSZXR1cm5zIEBwIHRy
dWUgaWYgSmF2YVNjcmlwdCB3YXMgZW5hYmxlZCwgbm8gZXJyb3Igb2NjdXJlZAotICAgKiBhbmQg
dGhlIGNvZGUgcmV0dXJuZWQgdHJ1ZSBpdHNlbGYgb3IgQHAgZmFsc2Ugb3RoZXJ3aXNlLgotICAg
KiBAZGVwcmVjYXRlZCwgdXNlIHRoZSBvbmUgYmVsb3cuCi0gICAqLwotICBRVmFyaWFudCBleGVj
dXRlU2NyaXB0KCBjb25zdCBRU3RyaW5nICZzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9
IGZhbHNlICk7Ci0KLSAgLyoqCi0gICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHRoZSBOb2RlIHBh
cmFtZXRlciBzcGVjaWZ5aW5nIHRoZSAndGhpcycgdmFsdWUuCi0gICAqLwotICBRVmFyaWFudCBl
eGVjdXRlU2NyaXB0KCBET006Ok5vZGVJbXBsICpuLCBjb25zdCBRU3RyaW5nICZzY3JpcHQsIGJv
b2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlICk7Ci0KLSAgLyoqCi0gICAqIEVuYWJsZXMgb3Ig
ZGlzYWJsZXMgRHJhZyduJ0Ryb3Agc3VwcG9ydC4gQSBkcmFnIG9wZXJhdGlvbiBpcyBzdGFydGVk
IGlmCi0gICAqIHRoZSB1c2VycyBkcmFncyBhIGxpbmsuCi0gICAqLwotICB2b2lkIHNldEROREVu
YWJsZWQoIGJvb2wgYiApOwotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIERyYWduJ24nRHJv
cCBzdXBwb3J0IGlzIGVuYWJsZWQgb3Igbm90LgotICAgKi8KLSAgYm9vbCBkbmRFbmFibGVkKCkg
Y29uc3Q7Ci0KLSAgLyoqCi0gICAqIEltcGxlbWVudGF0aW9uIG9mIENTUyBwcm9wZXJ0eSAta2h0
bWwtdXNlci1kcmFnID09IGF1dG8KLSAgICovCi0gIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnQXV0
b05vZGUoRE9NOjpOb2RlSW1wbCosIGludCB4LCBpbnQgeSkgY29uc3Q7Ci0gIAotICAvKioKLSAg
ICogRW5hYmxlcy9kaXNhYmxlcyBKYXZhIGFwcGxldCBzdXBwb3J0LiBOb3RlIHRoYXQgY2FsbGlu
ZyB0aGlzIGZ1bmN0aW9uCi0gICAqIHdpbGwgcGVybWFuZW50bHkgb3ZlcnJpZGUgdGhlIFVzZXIg
c2V0dGluZ3MgYWJvdXQgSmF2YSBhcHBsZXQgc3VwcG9ydC4KLSAgICogTm90IGNhbGxpbmcgdGhp
cyBmdW5jdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gbGV0IHRoZSBkZWZhdWx0IHNldHRpbmdzCi0g
ICAqIGFwcGx5LgotICAgKi8KLSAgdm9pZCBzZXRKYXZhRW5hYmxlZCggYm9vbCBlbmFibGUgKTsK
LQotICAvKioKLSAgICogUmV0dXJuIGlmIEphdmEgYXBwbGV0IHN1cHBvcnQgaXMgZW5hYmxlZC9k
aXNhYmxlZC4KLSAgICovCi0gIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdDsKLQotICAvKioKLSAg
ICogRW5hYmxlcyBvciBkaXNhYmxlcyBwbHVnaW5zIHZpYSwgZGVmYXVsdCBpcyBlbmFibGVkCi0g
ICAqLwotICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKCBib29sIGVuYWJsZSApOwotCi0gIC8qKgot
ICAgKiBSZXR1cm5zIHRyaWUgaWYgcGx1Z2lucyBhcmUgZW5hYmxlZC9kaXNhYmxlZC4KLSAgICov
Ci0gIGJvb2wgcGx1Z2luc0VuYWJsZWQoKSBjb25zdDsKLQotICAvKioKLSAgICogU3BlY2lmaWVz
IHdoZXRoZXIgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIGxvYWRl
ZAotICAgKiBhdXRvbWF0aWNhbGx5IG9yIG5vdC4KLSAgICoKLSAgICogQG5vdGUgUmVxdWVzdCB3
aWxsIGJlIGlnbm9yZWQgaWYgY2FsbGVkIGJlZm9yZSBAcmVmIGJlZ2luKCkuCi0gICAqLwotICB2
b2lkIHNldEF1dG9sb2FkSW1hZ2VzKCBib29sIGVuYWJsZSApOwotICAvKioKLSAgICogUmV0dXJu
cyB3aGV0aGVyIGltYWdlcyBjb250YWluZWQgaW4gdGhlIGRvY3VtZW50IGFyZSBsb2FkZWQgYXV0
b21hdGljYWxseQotICAgKiBvciBub3QuCi0gICAqIEBub3RlIHRoYXQgdGhlIHJldHVybmVkIGlu
Zm9ybWF0aW9uIGlzIHVucmVsaWFibGUgYXMgbG9uZyBhcyBubyBiZWdpbigpCi0gICAqIHdhcyBj
YWxsZWQuCi0gICAqLwotICBib29sIGF1dG9sb2FkSW1hZ2VzKCkgY29uc3Q7Ci0KLSAgLyoqCi0g
ICAqIFNlY3VyaXR5IG9wdGlvbi4KLSAgICoKLSAgICogU3BlY2lmeSB3aGV0aGVyIG9ubHkgbG9j
YWwgcmVmZXJlbmNlcyAoIHN0eWxlc2hlZXRzLCBpbWFnZXMsIHNjcmlwdHMsIHN1YmRvY3VtZW50
cyApCi0gICAqIHNob3VsZCBiZSBsb2FkZWQuICggZGVmYXVsdCBmYWxzZSAtIGV2ZXJ5dGhpbmcg
aXMgbG9hZGVkLCBpZiB0aGUgbW9yZSBzcGVjaWZpYwotICAgKiBvcHRpb25zIGFsbG93ICkKLSAg
ICovCi0gIHZvaWQgc2V0T25seUxvY2FsUmVmZXJlbmNlcyhib29sIGVuYWJsZSk7Ci0KLSAgLyoq
Ci0gICAqIFJldHVybnMgd2hldGhlciByZWZlcmVuY2VzIHNob3VsZCBiZSBsb2FkZWQgKCBkZWZh
dWx0IGZhbHNlICkKLSAgICoqLwotICBib29sIG9ubHlMb2NhbFJlZmVyZW5jZXMoKSBjb25zdDsK
LQotI2lmbmRlZiBLREVfTk9fQ09NUEFUCi0gIHZvaWQgZW5hYmxlSlNjcmlwdChib29sIGUpIHsg
c2V0SlNjcmlwdEVuYWJsZWQoZSk7IH0KLSAgdm9pZCBlbmFibGVKYXZhKGJvb2wgZSkgeyBzZXRK
YXZhRW5hYmxlZChlKTsgfQotICB2b2lkIGVuYWJsZVBsdWdpbnMoYm9vbCBlKSB7IHNldFBsdWdp
bnNFbmFibGVkKGUpOyB9Ci0gIHZvaWQgYXV0b2xvYWRJbWFnZXMoYm9vbCBlKSB7IHNldEF1dG9s
b2FkSW1hZ2VzKGUpOyB9Ci0gIHZvaWQgZW5hYmxlTWV0YVJlZnJlc2goYm9vbCBlKSB7IHNldE1l
dGFSZWZyZXNoRW5hYmxlZChlKTsgfQotICBib29sIHNldENoYXJzZXQoIGNvbnN0IFFTdHJpbmcg
JiwgYm9vbCApIHsgcmV0dXJuIHRydWU7IH0KLQotICBLVVJMIGJhc2VVUkwoKSBjb25zdDsKLSAg
UVN0cmluZyBiYXNlVGFyZ2V0KCkgY29uc3Q7Ci0jZW5kaWYKLQotICAvKioKLSAgICogUmV0dXJu
cyB0aGUgVVJMIGZvciB0aGUgYmFja2dyb3VuZCBJbWFnZSAodXNlZCBieSBzYXZlIGJhY2tncm91
bmQpCi0gICAqLwotICBLVVJMIGJhY2tncm91bmRVUkwoKSBjb25zdDsKLQotICAvKioKLSAgICog
U2NoZWR1bGVzIGEgcmVkaXJlY3Rpb24gYWZ0ZXIgQHAgZGVsYXkgc2Vjb25kcy4KLSAgICovCi0g
IHZvaWQgc2NoZWR1bGVSZWRpcmVjdGlvbihkb3VibGUgZGVsYXksIGNvbnN0IFFTdHJpbmcgJnVy
bCwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUpOwotCi0gIC8qKgotICAgKiBNYWtlIGEgbG9jYXRp
b24gY2hhbmdlLCBvciBzY2hlZHVsZSBvbmUgZm9yIGxhdGVyLgotICAgKiBUaGVzZSBhcmUgdXNl
ZCBmb3IgSmF2YVNjcmlwdC10cmlnZ2VyZWQgbG9jYXRpb24gY2hhbmdlcy4KLSAgICovCi0gIHZv
aWQgY2hhbmdlTG9jYXRpb24oY29uc3QgUVN0cmluZyAmVVJMLCBjb25zdCBRU3RyaW5nICZyZWZl
cnJlciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7
Ci0gIHZvaWQgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZShjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0
IFFTdHJpbmcgJnJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCB1c2VyR2Vz
dHVyZSA9IGZhbHNlKTsKLSAgYm9vbCBpc1NjaGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVuZGluZygp
IGNvbnN0OwotCi0gIC8qKgotICAgKiBTY2hlZHVsZXMgYSBoaXN0b3J5IG5hdmlnYXRpb24gb3Bl
cmF0aW9uIChnbyBmb3J3YXJkLCBnbyBiYWNrLCBldGMuKS4KLSAgICogVGhpcyBpcyB1c2VkIGZv
ciBKYXZhU2NyaXB0LXRyaWdnZXJlZCBsb2NhdGlvbiBjaGFuZ2VzLgotICAgKi8KLSAgdm9pZCBz
Y2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKCBpbnQgc3RlcHMgKTsKLQotICAvKioKLSAgICogQ2xl
YXJzIHRoZSB3aWRnZXQgYW5kIHByZXBhcmVzIGl0IGZvciBuZXcgY29udGVudC4KLSAgICoKLSAg
ICogSWYgeW91IHdhbnQgQHJlZiB1cmwoKSB0byByZXR1cm4KLSAgICogZm9yIGV4YW1wbGUgImZp
bGU6L3RtcC90ZXN0Lmh0bWwiLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvZGU6Ci0gICAq
IDxQUkU+Ci0gICAqIHZpZXctPmJlZ2luKCBLVVJMKCJmaWxlOi90bXAvdGVzdC5odG1sIiApICk7
Ci0gICAqIDwvUFJFPgotICAgKgotICAgKiBAcGFyYW0gdXJsIGlzIHRoZSB1cmwgb2YgdGhlIGRv
Y3VtZW50IHRvIGJlIGRpc3BsYXllZC4gIEV2ZW4gaWYgeW91Ci0gICAqIGFyZSBnZW5lcmF0aW5n
IHRoZSBIVE1MIG9uIHRoZSBmbHksIGl0IG1heSBiZSB1c2VmdWwgdG8gc3BlY2lmeQotICAgKiBh
IGRpcmVjdG9yeSBzbyB0aGF0IGFueSBwaXhtYXBzIGFyZSBmb3VuZC4KLSAgICoKLSAgICogQHBh
cmFtIHhPZmZzZXQgaXMgdGhlIGluaXRpYWwgaG9yaXpvbnRhbCBzY3JvbGxiYXIgdmFsdWUuIFVz
dWFsbHkKLSAgICogeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAqCi0gICAqIEBwYXJh
bSB5T2Zmc2V0IGlzIHRoZSBpbml0aWFsIHZlcnRpY2FsIHNjcm9sbGJhciB2YWx1ZS4gVXN1YWxs
eQotICAgKiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcy4KLSAgICoKLSAgICogQWxsIGNoaWxk
IGZyYW1lcyBhbmQgdGhlIG9sZCBkb2N1bWVudCBhcmUgcmVtb3ZlZCBpZiB5b3UgY2FsbAotICAg
KiB0aGlzIG1ldGhvZC4KLSAgICovCi0gIHZpcnR1YWwgdm9pZCBiZWdpbiggY29uc3QgS1VSTCAm
dXJsID0gS1VSTCgpLCBpbnQgeE9mZnNldCA9IDAsIGludCB5T2Zmc2V0ID0gMCApOwotCi0gIC8q
KgotICAgKiBXcml0ZXMgYW5vdGhlciBwYXJ0IG9mIHRoZSBIVE1MIGNvZGUgdG8gdGhlIHdpZGdl
dC4KLSAgICoKLSAgICogWW91IG1heSBjYWxsCi0gICAqIHRoaXMgZnVuY3Rpb24gbWFueSB0aW1l
cyBpbiBzZXF1ZW5jZS4gQnV0IHJlbWVtYmVyOiBUaGUgZmV3ZXIgY2FsbHMKLSAgICogeW91IG1h
a2UsIHRoZSBmYXN0ZXIgdGhlIHdpZGdldCB3aWxsIGJlLgotICAgKgotICAgKiBUaGUgSFRNTCBj
b2RlIGlzIHNlbmQgdGhyb3VnaCBhIGRlY29kZXIgd2hpY2ggZGVjb2RlcyB0aGUgc3RyZWFtIHRv
Ci0gICAqIFVuaWNvZGUuCi0gICAqCi0gICAqIFRoZSBAcCBsZW4gcGFyYW1ldGVyIGlzIG5lZWRl
ZCBmb3Igc3RyZWFtcyBlbmNvZGVkIGluIHV0Zi0xNiwKLSAgICogc2luY2UgdGhlc2UgY2FuIGhh
dmUgXDAgY2hhcnMgaW4gdGhlbS4gSW4gY2FzZSB0aGUgZW5jb2RpbmcKLSAgICogeW91J3JlIHVz
aW5nIGlzbid0IHV0Zi0xNiwgeW91IGNhbiBzYWZlbHkgbGVhdmUgb3V0IHRoZSBsZW5ndGgKLSAg
ICogcGFyYW1ldGVyLgotICAgKgotICAgKiBBdHRlbnRpb246IERvbid0IG1peCBjYWxscyB0byBA
cmVmIHdyaXRlKCBjb25zdCBjaGFyICopIHdpdGggY2FsbHMKLSAgICogdG8gQHJlZiB3cml0ZSgg
Y29uc3QgUVN0cmluZyAmICkuCi0gICAqCi0gICAqIFRoZSByZXN1bHQgbWlnaHQgbm90IGJlIHdo
YXQgeW91IHdhbnQuCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgd3JpdGUoIGNvbnN0IGNoYXIgKnN0
ciwgaW50IGxlbiA9IC0xICk7Ci0KLSAgLyoqCi0gICAqIFdyaXRlcyBhbm90aGVyIHBhcnQgb2Yg
dGhlIEhUTUwgY29kZSB0byB0aGUgd2lkZ2V0LgotICAgKgotICAgKiBZb3UgbWF5IGNhbGwKLSAg
ICogdGhpcyBmdW5jdGlvbiBtYW55IHRpbWVzIGluIHNlcXVlbmNlLiBCdXQgcmVtZW1iZXI6IFRo
ZSBmZXdlciBjYWxscwotICAgKiB5b3UgbWFrZSwgdGhlIGZhc3RlciB0aGUgd2lkZ2V0IHdpbGwg
YmUuCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgd3JpdGUoIGNvbnN0IFFTdHJpbmcgJnN0ciApOwot
Ci0gIC8qKgotICAgKiBDYWxsIHRoaXMgYWZ0ZXIgeW91ciBsYXN0IGNhbGwgdG8gQHJlZiB3cml0
ZSgpLgotICAgKi8KLSAgdmlydHVhbCB2b2lkIGVuZCgpOwotCi0gIHZvaWQgZW5kSWZOb3RMb2Fk
aW5nKCk7Ci0KLSAgLyoqCi0gICAqIFNpbWlsYXIgdG8gZW5kLCBidXQgY2FsbGVkIHRvIGFib3J0
IGEgbG9hZCByYXRoZXIgdGhhbiBjbGVhbmx5IGVuZC4KLSAgICovCi0gIHZvaWQgc3RvcCgpOwot
Ci0gIC8qCi0gICAqIFByaW50cyB0aGUgY3VycmVudCBIVE1MIHBhZ2UgbGF5ZWQgb3V0IGZvciB0
aGUgcHJpbnRlci4KLSAgICoKLSAgICogKG5vdCBpbXBsZW1lbnRlZCBhdCB0aGUgbW9tZW50KQot
ICAgKi8KLSAgLy8gICAgdm9pZCBwcmludChRUGFpbnRlciAqLCBpbnQgcGFnZUhlaWdodCwgaW50
IHBhZ2VXaWR0aCk7Ci0KLSAgLyoqCi0gICAqIFBhaW50cyB0aGUgSFRNTCBwYWdlIHRvIGEgUVBh
aW50ZXIuIFNlZSBAcmVmIEtIVE1MVmlldzo6cGFpbnQgZm9yIGRldGFpbHMKLSAgICovCi0gIHZv
aWQgcGFpbnQoUVBhaW50ZXIgKiwgY29uc3QgUVJlY3QgJiwgaW50ID0gMCwgYm9vbCAqID0gMCk7
Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGVuY29kaW5nIHRoZSBwYWdlIHVzZXMuCi0gICAqCi0g
ICAqIFRoaXMgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyc2V0LiBUaGUgd2lkZ2V0IHdp
bGwgdHJ5IHRvIHJlbG9hZCB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBuZXcKLSAgICogZW5jb2Rp
bmcsIGlmIHVybCgpIGlzIG5vdCBlbXB0eS4KLSAgICovCi0gIGJvb2wgc2V0RW5jb2RpbmcoIGNv
bnN0IFFTdHJpbmcgJm5hbWUsIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSApOwotCi0gIC8qKgotICAg
KiBSZXR1cm5zIHRoZSBlbmNvZGluZyB0aGUgcGFnZSBjdXJyZW50bHkgdXNlcy4KLSAgICoKLSAg
ICogTm90ZSB0aGF0IHRoZSBlbmNvZGluZyBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgY2hh
cnNldC4KLSAgICovCi0gIFFTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKLQotICAvKioKLSAgICog
U2V0cyBhIHVzZXIgZGVmaW5lZCBzdHlsZSBzaGVldCB0byBiZSB1c2VkIG9uIHRvcCBvZiB0aGUg
SFRNTCA0Ci0gICAqIGRlZmF1bHQgc3R5bGUgc2hlZXQuCi0gICAqCi0gICAqIFRoaXMgZ2l2ZXMg
YSB3aWRlIHJhbmdlIG9mIHBvc3NpYmlsaXRpZXMgdG8KLSAgICogY2hhbmdlIHRoZSBsYXlvdXQg
b2YgdGhlIHBhZ2UuCi0gICAqLwotICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IEtVUkwg
JnVybCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgYSB1c2VyIGRlZmluZWQgc3R5bGUgc2hlZXQgdG8g
YmUgdXNlZCBvbiB0b3Agb2YgdGhlIEhUTUwgNAotICAgKiBkZWZhdWx0IHN0eWxlIHNoZWV0Lgot
ICAgKgotICAgKiBUaGlzIGdpdmVzIGEgd2lkZSByYW5nZSBvZiBwb3NzaWJpbGl0aWVzIHRvCi0g
ICAqIGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBwYWdlLgotICAgKi8KLSAgdm9pZCBzZXRVc2Vy
U3R5bGVTaGVldChjb25zdCBRU3RyaW5nICZzdHlsZVNoZWV0KTsKLQotcHVibGljOgotCi0gIC8q
KgotICAgKiBTZXRzIHRoZSBzdGFuZGFyZCBmb250IHN0eWxlLgotICAgKgotICAgKiBAcGFyYW0g
bmFtZSBUaGUgZm9udCBuYW1lIHRvIHVzZSBmb3Igc3RhbmRhcmQgdGV4dC4KLSAgICovCi0gIHZv
aWQgc2V0U3RhbmRhcmRGb250KCBjb25zdCBRU3RyaW5nICZuYW1lICk7Ci0KLSAgLyoqCi0gICAq
IFNldHMgdGhlIGZpeGVkIGZvbnQgc3R5bGUuCi0gICAqCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBm
b250IG5hbWUgdG8gdXNlIGZvciBmaXhlZCB0ZXh0LCBlLmcuCi0gICAqIHRoZSA8dHQ+Jmx0O3By
ZSZndDs8L3R0PiB0YWcuCi0gICAqLwotICB2b2lkIHNldEZpeGVkRm9udCggY29uc3QgUVN0cmlu
ZyAmbmFtZSApOwotCi0gIC8qKgotICAgKiBGaW5kcyB0aGUgYW5jaG9yIG5hbWVkIEBwIG5hbWUu
Ci0gICAqCi0gICAqIElmIHRoZSBhbmNob3IgaXMgZm91bmQsIHRoZSB3aWRnZXQKLSAgICogc2Ny
b2xscyB0byB0aGUgY2xvc2VzdCBwb3NpdGlvbi4gUmV0dXJucyBAcCBpZiB0aGUgYW5jaG9yIGhh
cwotICAgKiBiZWVuIGZvdW5kLgotICAgKi8KLSAgYm9vbCBnb3RvQW5jaG9yKCBjb25zdCBRU3Ry
aW5nICZuYW1lICk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGN1cnNvciB0byB1c2Ugd2hlbiB0
aGUgY3Vyc29yIGlzIG9uIGEgbGluay4KLSAgICovCi0gIHZvaWQgc2V0VVJMQ3Vyc29yKCBjb25z
dCBRQ3Vyc29yICZjICk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGN1cnNvciB3aGljaCBp
cyB1c2VkIHdoZW4gdGhlIGN1cnNvciBpcyBvbiBhIGxpbmsuCi0gICAqLwotICBRQ3Vyc29yIHVy
bEN1cnNvcigpIGNvbnN0OwotCi0gIC8qKgotICAgKiBJbml0aWF0ZXMgYSB0ZXh0IHNlYXJjaC4K
LSAgICovCi0gIHZvaWQgZmluZFRleHRCZWdpbihET006Ok5vZGVJbXBsICpzdGFydE5vZGUgPSAw
LCBpbnQgc3RhcnRQb3MgPSAtMSk7Ci0KLSAgLyoqCi0gICAqIEZpbmRzIHRoZSBuZXh0IG9jY3Vy
cmVuY2Ugb2YgdGhlIHN0cmluZyBvciBleHByZXNzaW9uLgotICAgKiBJZiBpc1JlZ0V4cCBpcyB0
cnVlIHRoZW4gc3RyIGlzIGNvbnZlcnRlZCB0byBhIFFSZWdFeHAsIGFuZCBjYXNlU2Vuc2l0aXZl
IGlzIGlnbm9yZWQuCi0gICAqLwotICBib29sIGZpbmRUZXh0TmV4dCggY29uc3QgUVN0cmluZyAm
c3RyLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ0V4cCApOwot
Ci0gIC8qKgotICAgKiBTZXRzIHRoZSBab29tIGZhY3Rvci4gVGhlIHZhbHVlIGlzIGdpdmVuIGlu
IHBlcmNlbnQsIGxhcmdlciB2YWx1ZXMgbWVhbiBhCi0gICAqIGdlbmVyYWxseSBsYXJnZXIgZm9u
dCBhbmQgbGFyZ2VyIHBhZ2UgY29udGVudHMuIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQKLSAg
ICogYWxsIHBhcnRzIG9mIHRoZSBwYWdlIGFyZSBzY2FsZWQgd2l0aCB0aGUgc2FtZSBmYWN0b3Ig
dGhvdWdoLgotICAgKgotICAgKiBUaGUgZ2l2ZW4gdmFsdWUgc2hvdWxkIGJlIGluIHRoZSByYW5n
ZSBvZiAyMC4uMzAwLCB2YWx1ZXMgb3V0c2lkZSB0aGF0Ci0gICAqIHJhbmdlIGFyZSBub3QgZ3Vh
cmFudGVlZCB0byB3b3JrLiBBIHZhbHVlIG9mIDEwMCB3aWxsIGRpc2FibGUgYWxsIHpvb21pbmcK
LSAgICogYW5kIHNob3cgdGhlIHBhZ2Ugd2l0aCB0aGUgc2l6ZXMgZGV0ZXJtaW5lZCB2aWEgdGhl
IGdpdmVuIGxlbmd0aHMgaW4gdGhlCi0gICAqIHN0eWxlc2hlZXRzLgotICAgKi8KLSAgdm9pZCBz
ZXRab29tRmFjdG9yKGludCBwZXJjZW50KTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3Vy
cmVudCB6b29tIGZhY3Rvci4KLSAgICovCi0gIGludCB6b29tRmFjdG9yKCkgY29uc3Q7Ci0KLSAg
LyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgdGhlIHVzZXIgaGFzIG1hcmtlZC4KLSAgICovCi0g
IHZpcnR1YWwgUVN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKLQotICAvKioKLSAgICogUmV0
dXJucyB0aGUgc2VsZWN0ZWQgcGFydCBvZiB0aGUgSFRNTC4KLSAgICovCi0gIGNvbnN0IGtodG1s
OjpTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24oKSBjb25zdDsKLQotICAvKioKLSAgICog
UmV0dXJucyB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHNlbGVjdGlvbiAoY2hhcmFjdGVyLCB3b3Jk
LCBsaW5lLCBwYXJhZ3JhcGgpLgotICAgKi8KLSAga2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgc2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdDsKLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBncmFu
dWxhcml0eSBvZiB0aGUgc2VsZWN0aW9uIChjaGFyYWN0ZXIsIHdvcmQsIGxpbmUsIHBhcmFncmFw
aCkuCi0gICAqLwotICB2b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoa2h0
bWw6OkVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0OwotCi0gIC8qKgotICAgKiBS
ZXR1cm5zIHRoZSBkcmFnIGNhcmV0IG9mIHRoZSBIVE1MLgotICAgKi8KLSAgY29uc3Qga2h0bWw6
OlNlbGVjdGlvbkNvbnRyb2xsZXIgJmRyYWdDYXJldCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBT
ZXRzIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICovCi0gIHZvaWQgc2V0U2VsZWN0aW9uKGNv
bnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICYsIGJvb2wgY2xvc2VUeXBpbmcgPSB0cnVl
LCBib29sIGtlZXBUeXBpbmdTdHlsZSA9IGZhbHNlKTsKLQotICAvKioKLSAgICogUmV0dXJucyB3
aGV0aGVyIHNlbGVjdGlvbiBjYW4gYmUgY2hhbmdlZC4KLSAgICovCi0gIGJvb2wgc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICYpIGNvbnN0Owot
Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgbWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgotICAgKi8KLSAgY29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm1hcmsoKSBjb25z
dDsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWFyay4KLSAgICovCi0gIHZvaWQgc2V0TWFy
ayhjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKLQotICAvKioKLSAgICogU2V0
cyB0aGUgY3VycmVudCBkcmFnIGNhcnQuCi0gICAqLwotICB2b2lkIHNldERyYWdDYXJldChjb25z
dCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKLSAgCi0gIC8qKgotICAgKiBUcmFuc3Bv
c2VzIGNoYXJhY3RlcnMgZWl0aGVyIHNpZGUgb2YgY2FyZXQgc2VsZWN0aW9uLgotICAgKi8KLSAg
dm9pZCB0cmFuc3Bvc2UoKTsKLSAgCi0gIC8qKgotICAgKiBDbGVhcnMgdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uLgotICAgKi8KLSAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwotCi0gIC8qKgotICAgKiBJ
bnZhbGlkYXRlcyB0aGUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAqLwotICB2b2lkIGludmFsaWRh
dGVTZWxlY3Rpb24oKTsKLQotICAvKioKLSAgICogQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIHNlbGVjdGlvbi4KLSAgICovCi0gIHZvaWQgc2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZz10
cnVlKTsKLQotICAvKioKLSAgICogUGFpbnRzIHRoZSBjYXJldC4KLSAgICovCi0gIHZvaWQgcGFp
bnRDYXJldChRUGFpbnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpIGNvbnN0OwotICAKLSAvKioK
LSAgICogUGFpbnRzIHRoZSBkcmFnIGNhcmV0LgotICAgKi8KLSAgdm9pZCBwYWludERyYWdDYXJl
dChRUGFpbnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpIGNvbnN0OwotCi0gIC8qKgotICAgKiBT
ZXQgaW5mbyBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KLSAgICovCi0gIHZvaWQgc2V0
WFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKGludCB4KTsKLQotICAvKioKLSAgICogR2V0
IGluZm8gZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCi0gICAqLwotICBpbnQgeFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIEhhcyB0aGUg
dXNlciBzZWxlY3RlZCBhbnl0aGluZz8KLSAgICoKLSAgICogIENhbGwgQHJlZiBzZWxlY3RlZFRl
eHQoKSB0bwotICAgKiByZXRyaWV2ZSB0aGUgc2VsZWN0ZWQgdGV4dC4KLSAgICoKLSAgICogQHJl
dHVybiBAcCB0cnVlIGlmIHRoZXJlIGlzIHRleHQgc2VsZWN0ZWQuCi0gICAqLwotICBib29sIGhh
c1NlbGVjdGlvbigpIGNvbnN0OwotCi0gIC8qKgotICAgKiBNYXJrcyBhbGwgdGV4dCBpbiB0aGUg
ZG9jdW1lbnQgYXMgc2VsZWN0ZWQuCi0gICAqLwotICB2b2lkIHNlbGVjdEFsbCgpOwotCi0gIC8q
KgotICAgKiBNYXJrcyBjb250ZW50cyBvZiBub2RlIGFzIHNlbGVjdGVkLgotICAgKiBSZXR1cm5z
IHdoZXRoZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VkLgotICAgKi8KLSAgYm9vbCBzZWxlY3RDb250
ZW50c09mTm9kZShET006Ok5vZGVJbXBsKik7Ci0gCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRo
ZXIgZWRpdGluZyBzaG91bGQgZW5kIGluIHRoZSBnaXZlbiByYW5nZQotICAgKi8KLSAgdmlydHVh
bCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBET006OlJhbmdlSW1wbCAqKSBjb25zdDsK
LQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIGVkaXRpbmcgc2hvdWxkIGVuZCBpbiB0aGUg
Z2l2ZW4gcmFuZ2UKLSAgICovCi0gIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0
IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjb250
ZW50RWRpdGFibGUgIm92ZXJyaWRlIiB2YWx1ZSBmb3IgdGhlIHBhcnQKLSAgICovCi0gIHZpcnR1
YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm5z
IHRoZSBtb3N0IHJlY2VudCBlZGl0IGNvbW1hbmQgYXBwbGllZC4KLSAgICovCi0gIGtodG1sOjpF
ZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQoKTsKLQotICAvKioKLSAgICogQ2FsbGVkIHdo
ZW4gZWRpdGluZyBoYXMgYmVlbiBhcHBsaWVkLgotICAgKi8KLSAgdm9pZCBhcHBsaWVkRWRpdGlu
ZyhraHRtbDo6RWRpdENvbW1hbmRQdHIgJik7Ci0KLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIGVk
aXRpbmcgaGFzIGJlZW4gdW5hcHBsaWVkLgotICAgKi8KLSAgdm9pZCB1bmFwcGxpZWRFZGl0aW5n
KGtodG1sOjpFZGl0Q29tbWFuZFB0ciAmKTsKLQotICAvKioKLSAgICogQ2FsbGVkIHdoZW4gZWRp
dGluZyBoYXMgYmVlbiByZWFwcGxpZWQuCi0gICAqLwotICB2b2lkIHJlYXBwbGllZEVkaXRpbmco
a2h0bWw6OkVkaXRDb21tYW5kUHRyICYpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0eXBp
bmcgc3R5bGUgZm9yIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIERPTTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsICp0eXBpbmdTdHlsZSgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBTZXRz
IHRoZSB0eXBpbmcgc3R5bGUgZm9yIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHZvaWQgc2V0VHlw
aW5nU3R5bGUoRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKik7Ci0KLSAgLyoq
Ci0gICAqIENsZWFycyB0aGUgdHlwaW5nIHN0eWxlIGZvciB0aGUgZG9jdW1lbnQuCi0gICAqLwot
ICB2b2lkIGNsZWFyVHlwaW5nU3R5bGUoKTsKLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0
aG9kIHRvIHNob3cgdGhlIGRvY3VtZW50J3Mgdmlldy4KLSAgICoKLSAgICogRXF1aXZhbGVudCB0
byB3aWRnZXQoKS0+c2hvdygpIG9yIHZpZXcoKS0+c2hvdygpIC4KLSAgICovCi0gIHZvaWQgc2hv
dygpOwotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gaGlkZSB0aGUgZG9jdW1l
bnQncyB2aWV3LgotICAgKgotICAgKiBFcXVpdmFsZW50IHRvIHdpZGdldCgpLT5oaWRlKCkgb3Ig
dmlldygpLT5oaWRlKCkuCi0gICAqLwotICB2b2lkIGhpZGUoKTsKLQotICAvKioKLSAgICogUmV0
dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGFydG1hbmFnZXIgaW5zdGFuY2Ugd2hpY2gKLSAgICog
bWFuYWdlcyBodG1sIGZyYW1lIG9iamVjdHMuCi0gICAqLwotICBLUGFydHM6OlBhcnRNYW5hZ2Vy
ICpwYXJ0TWFuYWdlcigpOwotCi0KLSAgdmlydHVhbCB2b2lkIHRva2VuaXplclByb2Nlc3NlZERh
dGEoKSB7fTsKLQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqLwotICBjb25zdCBLSFRNTFNl
dHRpbmdzICpzZXR0aW5ncygpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcG9pbnRl
ciB0byB0aGUgcGFyZW50IEtIVE1MUGFydCBpZiB0aGUgcGFydCBpcyBhIGZyYW1lCi0gICAqIGlu
IGFuIEhUTUwgZnJhbWVzZXQuCi0gICAqCi0gICAqICBSZXR1cm5zIDBMIG90aGVyd2lzZS4KLSAg
ICovCi0gIEtIVE1MUGFydCAqcGFyZW50UGFydCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1
cm5zIGEgbGlzdCBvZiBuYW1lcyBvZiBhbGwgZnJhbWUgKGluY2x1ZGluZyBpZnJhbWUpIG9iamVj
dHMgb2YKLSAgICogdGhlIGN1cnJlbnQgZG9jdW1lbnQuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBp
cyBub3Qgd29ya2luZyByZWN1cnNpdmVseQotICAgKiBmb3Igc3ViLWZyYW1lcy4KLSAgICovCi0g
IFFTdHJpbmdMaXN0IGZyYW1lTmFtZXMoKSBjb25zdDsKLQotICBRUHRyTGlzdDxLUGFydHM6OlJl
YWRPbmx5UGFydD4gZnJhbWVzKCkgY29uc3Q7Ci0KLSAgS0hUTUxQYXJ0ICpjaGlsZEZyYW1lTmFt
ZWQoY29uc3QgUVN0cmluZyAmbmFtZSkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIEZpbmRzIGEgZnJh
bWUgYnkgbmFtZS4gUmV0dXJucyAwTCBpZiBmcmFtZSBjYW4ndCBiZSBmb3VuZC4KLSAgICovCi0g
IEtIVE1MUGFydCAqZmluZEZyYW1lKCBjb25zdCBRU3RyaW5nICZmICk7Ci0KLSAgLyoqCi0gICAq
IFJldHVybiB0aGUgY3VycmVudCBmcmFtZSAodGhlIG9uZSB0aGF0IGhhcyBmb2N1cykKLSAgICog
Tm90IG5lY2Vzc2FyaWx5IGEgZGlyZWN0IGNoaWxkIG9mIG91cnMsIGZyYW1lc2V0cyBjYW4gYmUg
bmVzdGVkLgotICAgKiBSZXR1cm5zICJ0aGlzIiBpZiB0aGlzIHBhcnQgaXNuJ3QgYSBmcmFtZXNl
dC4KLSAgICovCi0gIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpjdXJyZW50RnJhbWUoKSBjb25zdDsK
LQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIGEgZnJhbWUgd2l0aCB0aGUgc3BlY2lmaWVk
IG5hbWUgaXMgZXhpc3RzIG9yIG5vdC4KLSAgICogSW4gY29udHJhcnkgdG8gdGhlIEByZWYgZmlu
ZEZyYW1lIG1ldGhvZCB0aGlzIG9uZSBhbHNvIHJldHVybnMgdHJ1ZQotICAgKiBpZiB0aGUgZnJh
bWUgaXMgZGVmaW5lZCBidXQgbm8gZGlzcGxheWluZyBjb21wb25lbnQgaGFzIGJlZW4KLSAgICog
Zm91bmQvbG9hZGVkLCB5ZXQuCi0gICAqLwotICBib29sIGZyYW1lRXhpc3RzKCBjb25zdCBRU3Ry
aW5nICZmcmFtZU5hbWUgKTsKLQotCi0gIC8qKgotICAgKiBDYWxsZWQgYnkgS0pTLgotICAgKiBT
ZXRzIHRoZSBTdGF0dXNCYXJUZXh0IGFzc2lnbmVkCi0gICAqIHZpYSB3aW5kb3cuc3RhdHVzCi0g
ICAqLwotICB2b2lkIHNldEpTU3RhdHVzQmFyVGV4dCggY29uc3QgUVN0cmluZyAmdGV4dCApOwot
Ci0gIC8qKgotICAgKiBDYWxsZWQgYnkgS0pTLgotICAgKiBTZXRzIHRoZSBEZWZhdWx0U3RhdHVz
QmFyVGV4dCBhc3NpZ25lZAotICAgKiB2aWEgd2luZG93LmRlZmF1bHRTdGF0dXMKLSAgICovCi0g
IHZvaWQgc2V0SlNEZWZhdWx0U3RhdHVzQmFyVGV4dCggY29uc3QgUVN0cmluZyAmdGV4dCApOwot
Ci0gIC8qKgotICAgKiBDYWxsZWQgYnkgS0pTLgotICAgKiBSZXR1cm5zIHRoZSBTdGF0dXNCYXJU
ZXh0IGFzc2lnbmVkCi0gICAqIHZpYSB3aW5kb3cuc3RhdHVzCi0gICAqLwotICBRU3RyaW5nIGpz
U3RhdHVzQmFyVGV4dCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBDYWxsZWQgYnkgS0pTLgotICAg
KiBSZXR1cm5zIHRoZSBEZWZhdWx0U3RhdHVzQmFyVGV4dCBhc3NpZ25lZAotICAgKiB2aWEgd2lu
ZG93LmRlZmF1bHRTdGF0dXMKLSAgICovCi0gIFFTdHJpbmcganNEZWZhdWx0U3RhdHVzQmFyVGV4
dCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZWZlcnJlciB1c2VkIGZvciBsaW5rcyBpbiB0aGlz
IHBhZ2UuCi0gICAqLwotICBRU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IExhc3QtbW9kaWZpZWQgZGF0ZSAoaW4gcmF3IHN0cmluZyBmb3JtYXQpLCBpZiByZWNlaXZlZCBp
biB0aGUgW0hUVFBdIGhlYWRlcnMuCi0gICAqLwotICBRU3RyaW5nIGxhc3RNb2RpZmllZCgpIGNv
bnN0OwotCi0gIC8qKgotICAgKiBMb2FkcyBhIHN0eWxlIHNoZWV0IGludG8gdGhlIHN0eWxlc2hl
ZXQgY2FjaGUuCi0gICAqLwotICB2b2lkIHByZWxvYWRTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcg
JnVybCwgY29uc3QgUVN0cmluZyAmc3R5bGVzaGVldCk7Ci0KLSAgLyoqCi0gICAqIExvYWRzIGEg
c2NyaXB0IGludG8gdGhlIHNjcmlwdCBjYWNoZS4KLSAgICovCi0gIHZvaWQgcHJlbG9hZFNjcmlw
dChjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCk7Ci0KLSAgYm9vbCBp
c1BvaW50SW5zaWRlU2VsZWN0aW9uKGludCB4LCBpbnQgeSk7Ci0KLSAgdmlydHVhbCBib29sIHRh
YnNUb0xpbmtzKCkgY29uc3Q7Ci0gIHZpcnR1YWwgYm9vbCB0YWJzVG9BbGxDb250cm9scygpIGNv
bnN0OwotICAKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgYm9vbCByZXN0b3JlZCgp
IGNvbnN0OwotCi0gIHZvaWQgaW5jcmVtZW50RnJhbWVDb3VudCgpOwotICB2b2lkIGRlY3JlbWVu
dEZyYW1lQ291bnQoKTsKLSAgaW50IHRvcExldmVsRnJhbWVDb3VudCgpOwotCi0gIC8vIEVkaXRp
bmcgb3BlcmF0aW9ucy4KLSAgLy8gTm90IGNsZWFyIGlmIHRoZXNlIHdpbGwgYmUgd2FudGVkIGlu
IEtIVE1MUGFydCBieSBLREUsCi0gIC8vIGJ1dCBmb3Igbm93IHRoZXNlIGJyaWRnZSBzbyB3ZSBk
b24ndCBoYXZlIHRvIHBlcHBlciB0aGUKLSAgLy8gS0hUTUwgY29kZSB3aXRoIFdlYkNvcmUtc3Bl
Y2lmaWMgc3R1ZmYuCi0gIGVudW0gVHJpU3RhdGUgeyBmYWxzZVRyaVN0YXRlLCB0cnVlVHJpU3Rh
dGUsIG1peGVkVHJpU3RhdGUgfTsKLSAgdm9pZCBjb3B5VG9QYXN0ZWJvYXJkKCk7Ci0gIHZvaWQg
Y3V0VG9QYXN0ZWJvYXJkKCk7Ci0gIHZvaWQgcGFzdGVGcm9tUGFzdGVib2FyZCgpOwotICB2b2lk
IHBhc3RlQW5kTWF0Y2hTdHlsZSgpOwotICBib29sIGNhblBhc3RlKCkgY29uc3Q7Ci0gIHZvaWQg
cmVkbygpOwotICB2b2lkIHVuZG8oKTsKLSAgYm9vbCBjYW5SZWRvKCkgY29uc3Q7Ci0gIGJvb2wg
Y2FuVW5kbygpIGNvbnN0OwotICB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShET006OkNT
U1N0eWxlRGVjbGFyYXRpb25JbXBsICosIGtodG1sOjpFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb249
a2h0bWw6OkVkaXRBY3Rpb25VbnNwZWNpZmllZCk7Ci0gIHZvaWQgYXBwbHlTdHlsZShET006OkNT
U1N0eWxlRGVjbGFyYXRpb25JbXBsICosIGtodG1sOjpFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb249
a2h0bWw6OkVkaXRBY3Rpb25VbnNwZWNpZmllZCk7Ci0gIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHls
ZShET006OkNTU1N0eWxlRGVjbGFyYXRpb25JbXBsICosIGtodG1sOjpFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb249a2h0bWw6OkVkaXRBY3Rpb25VbnNwZWNpZmllZCk7Ci0gIFRyaVN0YXRlIHNlbGVj
dGlvbkhhc1N0eWxlKERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKikgY29uc3Q7Ci0gIGJv
b2wgc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShET006OkNTU1N0eWxlRGVjbGFyYXRpb25JbXBsICop
IGNvbnN0OwotICBET006OkRPTVN0cmluZyBzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1
ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdDsKLSAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKSBjb25zdDsKLSAgdm9pZCByZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVs
ZW1lbnQoKSBjb25zdDsKLSAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChET006OkVs
ZW1lbnRJbXBsICopIGNvbnN0OwotICB2b2lkIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50
KERPTTo6RWxlbWVudEltcGwgKikgY29uc3Q7Ci0gIHZvaWQgcHJpbnQoKTsKLSAgdmlydHVhbCBi
b29sIGlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KGNvbnN0IFFDaGFyICYsIGJvb2wpOwot
Ci0gIHZpcnR1YWwgYm9vbCBkaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgCi0gIC8vIFVzZWQgdG8ga2VlcCB0aGUgcGFydCBhbGl2ZSB3aGVu
IHJ1bm5pbmcgYSBzY3JpcHQgdGhhdCBtaWdodCBkZXN0cm95IGl0LgotICB2b2lkIGtlZXBBbGl2
ZSgpOwotCi1zaWduYWxzOgotICAvKioKLSAgICogRW1pdHRlZCBpZiB0aGUgY3Vyc29yIGlzIG1v
dmVkIG92ZXIgYW4gVVJMLgotICAgKi8KLSAgdm9pZCBvblVSTCggY29uc3QgUVN0cmluZyAmdXJs
ICk7Ci0KLSAgLyoqCi0gICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIHJpZ2h0
IG1vdXNlIGJ1dHRvbiBvbiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICB2b2lkIHBvcHVwTWVudShj
b25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFQb2ludCAmcG9pbnQpOwotCi0gIC8qKgotICAgKiBU
aGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgotICAgKi8K
LSAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Ci0KLXB1YmxpYzoKLQotICAvKioKLSAgICogcmV0
dXJucyBhIEtVUkwgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gdXJsLiBVc2Ugd2hlbgotICAgKiB5b3Ug
a25vdyB3aGF0IHlvdSdyZSBkb2luZy4KLSAgICovCi0gIEtVUkwgY29tcGxldGVVUkwoIGNvbnN0
IFFTdHJpbmcgJnVybCApOwotCi0gIC8qKgotICAgKiBwcmVzZW50cyBhIGRldGFpbGVkIGVycm9y
IG1lc3NhZ2UgdG8gdGhlIHVzZXIuCi0gICAqIEBwIGVycm9yQ29kZSBraW8gZXJyb3IgY29kZSwg
ZWcgS0lPOjpFUlJfU0VSVkVSX1RJTUVPVVQuCi0gICAqIEBwIHRleHQga2lvIGFkZGl0aW9uYWwg
aW5mb3JtYXRpb24gdGV4dC4KLSAgICogQHAgdXJsIHRoZSB1cmwgdGhhdCB0cmlnZ2VyZWQgdGhl
IGVycm9yLgotICAgKi8KLSAgdm9pZCBodG1sRXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgUVN0
cmluZyYgdGV4dCwgY29uc3QgS1VSTCYgcmVxVXJsKTsKLQotICB2aXJ0dWFsIHZvaWQgY3VzdG9t
RXZlbnQoIFFDdXN0b21FdmVudCAqZXZlbnQgKTsKLQotICAvKioKLSAgICogRXZlbnRoYW5kbGVy
IG9mIHRoZSBraHRtbDo6TW91c2VQcmVzc0V2ZW50LgotICAgKi8KLSAgdmlydHVhbCB2b2lkIGto
dG1sTW91c2VQcmVzc0V2ZW50KCBraHRtbDo6TW91c2VQcmVzc0V2ZW50ICpldmVudCApOwotICAv
KioKLSAgICogRXZlbnRoYW5kbGVyIGZvciB0aGUga2h0bWw6Ok1vdXNlRG91YmxlQ2xpY2tFdmVu
dC4KLSAgICovCi0gIHZpcnR1YWwgdm9pZCBraHRtbE1vdXNlRG91YmxlQ2xpY2tFdmVudCgga2h0
bWw6Ok1vdXNlRG91YmxlQ2xpY2tFdmVudCAqICk7Ci0KLSAgLyoqCi0gICAqIEV2ZW50aGFuZGxl
ciBmb3IgdGhlIGtodG1sOjpNb3VzZURvdWJsZU1vdmVFdmVudC4KLSAgICovCi0gIHZpcnR1YWwg
dm9pZCBraHRtbE1vdXNlTW92ZUV2ZW50KCBraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2ZW50ICk7
Ci0gIC8qKgotICAgKiBFdmVudGhhbmRsZXIgZm9yIHRoZSBraHRtbDo6TW91c2VNb3ZlRXZlbnQu
Ci0gICAqLwotICB2aXJ0dWFsIHZvaWQga2h0bWxNb3VzZVJlbGVhc2VFdmVudCgga2h0bWw6Ok1v
dXNlUmVsZWFzZUV2ZW50ICpldmVudCApOwotICAvKioKLSAgICogRXZlbnRoYW5kbGVyIGZvciB0
aGUga2h0bWw6OkRyYXdDb250ZW50c0V2ZW50LgotICAgKi8KLSAgdmlydHVhbCB2b2lkIGtodG1s
RHJhd0NvbnRlbnRzRXZlbnQoIGtodG1sOjpEcmF3Q29udGVudHNFdmVudCAqICk7Ci0gIAotICB2
b2lkIHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQgKm1vdXNlLCBE
T006Ok5vZGVJbXBsICppbm5lck5vZGUsIGludCB4LCBpbnQgeSk7Ci0KLQotICAvKioKLSAgICog
SW50ZXJuYWwgZW1wdHkgcmVpbXBsZW1lbnRhdGlvbiBvZiBAcmVmIEtQYXJ0czo6UmVhZE9ubHlQ
YXJ0OjpvcGVuRmlsZSAuCi0gICAqLwotICB2aXJ0dWFsIGJvb2wgb3BlbkZpbGUoKTsKLQotICB2
aXJ0dWFsIHZvaWQgdXJsU2VsZWN0ZWQoIGNvbnN0IFFTdHJpbmcgJnVybCwgaW50IGJ1dHRvbiwg
aW50IHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJl90
YXJnZXQsIEtQYXJ0czo6VVJMQXJncyBhcmdzID0gS1BhcnRzOjpVUkxBcmdzKCkpOwotCi0KLXB1
YmxpYyBzbG90czoKLQotICAvKioKLSAgICogU3RvcHMgYWxsIGFuaW1hdGVkIGltYWdlcyBvbiB0
aGUgY3VycmVudCBhbmQgY2hpbGQgcGFnZXMKLSAgICovCi0gIHZvaWQgc3RvcEFuaW1hdGlvbnMo
KTsKLQotICBRQ1N0cmluZyBkY29wT2JqZWN0SWQoKSBjb25zdDsKLQotcHJpdmF0ZSBzbG90czoK
LQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqLwotICB2b2lkIHJlcGFyc2VDb25maWd1cmF0
aW9uKCk7Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90RGF0YSgg
S0lPOjpKb2IqLCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhICk7Ci0gIC8qKgotICAgKiBAaW50ZXJu
YWwKLSAgICovCi0gIHZvaWQgc2xvdFJlc3RvcmVEYXRhKCBjb25zdCBRQnl0ZUFycmF5ICZkYXRh
ICk7Ci0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xvdEZpbmlzaGVkKCBL
SU86OkpvYiogKTsKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90Rmlu
aXNoZWRQYXJzaW5nKCk7Ci0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xv
dFJlZGlyZWN0KCk7Ci0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xvdFJl
ZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYpOwotICAvKioKLSAgICogQGludGVybmFs
Ci0gICAqLwotICB2b2lkIHNsb3REZWJ1Z0RPTVRyZWUoKTsKLSAgLyoqCi0gICAqIEBpbnRlcm5h
bAotICAgKi8KLSAgdm9pZCBzbG90RGVidWdSZW5kZXJUcmVlKCk7Ci0KLSAgdm9pZCBzbG90SW5j
Wm9vbSgpOwotICB2b2lkIHNsb3REZWNab29tKCk7Ci0KLSAgdm9pZCBjaGlsZEJlZ2luKCk7Ci0K
LSAgdm9pZCBzbG90TG9hZEltYWdlcygpOwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICov
Ci0gIHZvaWQgc3VibWl0Rm9ybUFnYWluKCk7Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAg
Ki8KLSAgdm9pZCB1cGRhdGVBY3Rpb25zKCk7Ci0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICov
Ci0gIHZvaWQgc2xvdFBhcnRSZW1vdmVkKCBLUGFydHM6OlBhcnQgKnBhcnQgKTsKLSAgLyoqCi0g
ICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90QWN0aXZlRnJhbWVDaGFuZ2VkKCBLUGFy
dHM6OlBhcnQgKnBhcnQgKTsKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBz
bG90Q2hpbGRTdGFydGVkKCBLSU86OkpvYiAqam9iICk7Ci0gIC8qKgotICAgKiBAaW50ZXJuYWwK
LSAgICovCi0gIHZvaWQgc2xvdENoaWxkQ29tcGxldGVkKCk7Ci0gIC8qKgotICAgKiBAaW50ZXJu
YWwKLSAgICovCi0gIHZvaWQgc2xvdENoaWxkQ29tcGxldGVkKCBib29sICk7Ci0gIC8qKgotICAg
KiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xvdFBhcmVudENvbXBsZXRlZCgpOwotICAvKioK
LSAgICogQGludGVybmFsCi0gICAqLwotICB2b2lkIHNsb3RDaGlsZFVSTFJlcXVlc3QoIGNvbnN0
IEtVUkwgJnVybCwgY29uc3QgS1BhcnRzOjpVUkxBcmdzICZhcmdzICk7Ci0KLSAgdm9pZCBzbG90
TG9hZGVyUmVxdWVzdFN0YXJ0ZWQoIGtodG1sOjpEb2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVkT2Jq
ZWN0KiBvYmopOwotICB2b2lkIHNsb3RMb2FkZXJSZXF1ZXN0RG9uZSgga2h0bWw6OkRvY0xvYWRl
ciosIGtodG1sOjpDYWNoZWRPYmplY3QgKm9iaiApOwotICB2b2lkIGNoZWNrQ29tcGxldGVkKCk7
Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90U2hvd0RvY3VtZW50
KCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnRhcmdldCApOwotCi0gIC8qKgot
ICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xvdEF1dG9TY3JvbGwoKTsKLQotICB2b2lk
IHNsb3RQcmludEZyYW1lKCk7Ci0KLSAgdm9pZCBzbG90U2VsZWN0QWxsKCk7Ci0KLSAgLyoqCi0g
ICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90UHJvZ3Jlc3NVcGRhdGUoKTsKLQotICAv
KgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgc2xvdEpvYlBlcmNlbnQoS0lPOjpKb2Iq
LCB1bnNpZ25lZCBsb25nKTsKLQotICAvKgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQg
c2xvdEpvYlNwZWVkKEtJTzo6Sm9iKiwgdW5zaWduZWQgbG9uZyk7Ci0KLSAgLyoqCi0gICAqIEBp
bnRlcm5hbAotICAgKi8KLSAgdm9pZCBzbG90Q2xlYXJTZWxlY3Rpb24oKTsKLQotICB2b2lkIHNs
b3RFbmRMaWZlU3VwcG9ydCgpOwotCi1wcml2YXRlOgotCi0KLSAgLyoqCi0gICAqIEBpbnRlcm5h
bAotICAgKi8KLSAgYm9vbCByZXN0b3JlVVJMKCBjb25zdCBLVVJMICZ1cmwgKTsKLQotICAvKioK
LSAgICogQGludGVybmFsCi0gICAqLwotICB2b2lkIGNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKTsK
LQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqLwotICB2b2lkIHNldEZvY3VzTm9kZUlmTmVl
ZGVkKCk7Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCBzZWxlY3Rpb25M
YXlvdXRDaGFuZ2VkKCk7Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdm9pZCB0
aW1lckV2ZW50KFFUaW1lckV2ZW50ICopOwotICAKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAg
Ki8KLSAgYm9vbCBvcGVuVVJMSW5GcmFtZSggY29uc3QgS1VSTCAmdXJsLCBjb25zdCBLUGFydHM6
OlVSTEFyZ3MgJnVybEFyZ3MgKTsKLQotICB2b2lkIHN0YXJ0QXV0b1Njcm9sbCgpOwotICB2b2lk
IHN0b3BBdXRvU2Nyb2xsKCk7Ci0gIHZvaWQgb3ZlclVSTCggY29uc3QgUVN0cmluZyAmdXJsLCBj
b25zdCBRU3RyaW5nICZ0YXJnZXQsIGJvb2wgc2hpZnRQcmVzc2VkID0gZmFsc2UgKTsKLQotICAv
KioKLSAgICogQGludGVybmFsCi0gICAqLwotICBib29sIHByb2Nlc3NPYmplY3RSZXF1ZXN0KCBr
aHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgUVN0cmluZyAm
bWltZXR5cGUgKTsKLQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqLwotICB2b2lkIHN1Ym1p
dEZvcm0oIGNvbnN0IGNoYXIgKmFjdGlvbiwgY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBraHRt
bDo6Rm9ybURhdGEgJmZvcm1EYXRhLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcg
JnRhcmdldCwgY29uc3QgUVN0cmluZyYgY29udGVudFR5cGUgPSBRU3RyaW5nOjpudWxsLAotICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGJvdW5kYXJ5ID0gUVN0cmluZzo6bnVsbCAp
OwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZvaWQgcG9wdXBNZW51KCBjb25z
dCBRU3RyaW5nICZ1cmwgKTsKLQotCi0gIHZvaWQgaW5pdChLSFRNTFZpZXcgKnZpZXcpOwotCi0g
IHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gIGJvb2wgc2NoZWR1bGVTY3JpcHQoIERPTTo6Tm9k
ZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7Ci0KLSAgUVZhcmlhbnQgZXhlY3V0ZVNj
aGVkdWxlZFNjcmlwdCgpOwotCi0gIGJvb2wgcmVxdWVzdEZyYW1lKCBraHRtbDo6UmVuZGVyUGFy
dCAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmZnJhbWVOYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMgPSBRU3Ry
aW5nTGlzdCgpLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMgPSBRU3RyaW5nTGlzdCgp
LCBib29sIGlzSUZyYW1lID0gZmFsc2UgKTsKLQotICAvKioKLSAgICogQGludGVybmFsIHJldHVy
bnMgYSBuYW1lIGZvciBhIGZyYW1lIHdpdGhvdXQgYSBuYW1lLgotICAgKiBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgYSBzZXF1ZW5jZSBvZiBuYW1lcy4KLSAgICogQWxsIG5hbWVzIGluIGEgc2VxdWVu
Y2UgYXJlIGRpZmZlcmVudCBidXQgdGhlIHNlcXVlbmNlIGlzCi0gICAqIGFsd2F5cyB0aGUgc2Ft
ZS4KLSAgICogVGhlIHNlcXVlbmNlIGlzIHJlc2V0IGluIGNsZWFyKCkuCi0gICAqLwotICBRU3Ry
aW5nIHJlcXVlc3RGcmFtZU5hbWUoKTsKLQotICBib29sIHJlcXVlc3RPYmplY3QoIGtodG1sOjpS
ZW5kZXJQYXJ0ICpmcmFtZSwgY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZzZXJ2
aWNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1O
YW1lcyA9IFFTdHJpbmdMaXN0KCksIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbVZhbHVlcyA9IFFT
dHJpbmdMaXN0KCkgICk7Ci0KLSAgYm9vbCByZXF1ZXN0T2JqZWN0KCBraHRtbDo6Q2hpbGRGcmFt
ZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgS1BhcnRzOjpVUkxBcmdzICZhcmdzID0g
S1BhcnRzOjpVUkxBcmdzKCkgKTsKLQotICBET006OkV2ZW50TGlzdGVuZXIgKmNyZWF0ZUhUTUxF
dmVudExpc3RlbmVyKGNvbnN0IERPTTo6RE9NU3RyaW5nJiBjb2RlLCBET006Ok5vZGVJbXBsICpu
b2RlKTsKLQotcHVibGljOgotICBET006OkRvY3VtZW50SW1wbCAqeG1sRG9jSW1wbCgpIGNvbnN0
OwotICB2b2lkIHJlcGxhY2VEb2NJbXBsKERPTTo6RG9jdW1lbnRJbXBsKiBuZXdEb2MpOwotCi0g
IC8vIFdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgaXQncyBoYXJkIHRvIGRlbGV0ZSBhIGZy
YW1lLgotICAvLyBDYWxsIHRoaXMgYWZ0ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQgc2VsZWN0aW9u
cyB0byBtYWtlIGl0IGVhc3kgdG8gZGVsZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJlbHkgc2VsZWN0
ZWQuCi0gIHZvaWQgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsK
LSAgCi0gIHZpcnR1YWwgYm9vbCBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLQotICB2b2lkIGhhbmRsZUZhbGxiYWNrQ29udGVudCgpOwotCi1wcml2YXRl
OgotICBraHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGRGcmFtZSggY29uc3QgUU9iamVjdCAqb2JqICk7
Ci0KLSAga2h0bWw6OkNoaWxkRnJhbWUgKnJlY3Vyc2l2ZUZyYW1lUmVxdWVzdCggY29uc3QgS1VS
TCAmdXJsLCBjb25zdCBLUGFydHM6OlVSTEFyZ3MgJmFyZ3MsIGJvb2wgY2FsbFBhcmVudCA9IHRy
dWUgKTsKLQotICB2b2lkIGNvbm5lY3RDaGlsZChjb25zdCBraHRtbDo6Q2hpbGRGcmFtZSAqKSBj
b25zdDsKLSAgdm9pZCBkaXNjb25uZWN0Q2hpbGQoY29uc3Qga2h0bWw6OkNoaWxkRnJhbWUgKikg
Y29uc3Q7Ci0KLSAgYm9vbCBjaGVja0xpbmtTZWN1cml0eShjb25zdCBLVVJMICZsaW5rVVJMLGNv
bnN0IFFTdHJpbmcgJm1lc3NhZ2UgPSBRU3RyaW5nOjpudWxsLCBjb25zdCBRU3RyaW5nICZidXR0
b24gPSBRU3RyaW5nOjpudWxsKTsKLSAgUVZhcmlhbnQgZXhlY3V0ZVNjcmlwdChRU3RyaW5nIGZp
bGVuYW1lLCBpbnQgYmFzZUxpbmUsIERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNj
cmlwdCk7Ci0gIAotICB2b2lkIGNhbmNlbFJlZGlyZWN0aW9uKGJvb2wgbmV3TG9hZEluUHJvZ3Jl
c3MgPSBmYWxzZSk7Ci0KLSBwdWJsaWM6Ci0gIEtKU1Byb3h5SW1wbCAqalNjcmlwdCgpOwotICBL
SFRNTFBhcnQgKm9wZW5lcigpOwotICB2b2lkIHNldE9wZW5lcihLSFRNTFBhcnQgKl9vcGVuZXIp
OwotICBib29sIG9wZW5lZEJ5SlMoKTsKLSAgdm9pZCBzZXRPcGVuZWRCeUpTKGJvb2wgX29wZW5l
ZEJ5SlMpOwotIHByaXZhdGU6Ci0gIGludCBjYWNoZUlkKCkgY29uc3Q7Ci0KLSAgdm9pZCBjaGVj
a0VtaXRMb2FkRXZlbnQoKTsKLSAgdm9pZCBlbWl0TG9hZEV2ZW50KCk7Ci0gIAotICB2b2lkIHJl
Y2VpdmVkRmlyc3REYXRhKCk7Ci0KLSAgdm9pZCByZXBsYWNlQ29udGVudHNXaXRoU2NyaXB0UmVz
dWx0KCBjb25zdCBLVVJMICZ1cmwgKTsKLQotICBib29sIGhhbmRsZU1vdXNlTW92ZUV2ZW50RHJh
ZyhraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2ZW50KTsKLSAgYm9vbCBoYW5kbGVNb3VzZU1vdmVF
dmVudE92ZXIoa2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCk7Ci0gIHZvaWQgaGFuZGxlTW91
c2VNb3ZlRXZlbnRTZWxlY3Rpb24oa2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCk7Ci0KLSAg
LyoqCi0gICAqIEBpbnRlcm5hbCBFeHRyYWN0cyBhbmNob3IgYW5kIHRyaWVzIGJvdGggZW5jb2Rl
ZCBhbmQgZGVjb2RlZCBmb3JtLgotICAgKi8KLSAgdm9pZCBnb3RvQW5jaG9yKCk7Ci0KLSAgdm9p
ZCBoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhraHRtbDo6TW91c2VQcmVzc0V2ZW50
ICpldmVudCk7Ci0gIHZvaWQgaGFuZGxlTW91c2VQcmVzc0V2ZW50RG91YmxlQ2xpY2soa2h0bWw6
Ok1vdXNlUHJlc3NFdmVudCAqZXZlbnQpOwotICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NFdmVudFRy
aXBsZUNsaWNrKGtodG1sOjpNb3VzZVByZXNzRXZlbnQgKmV2ZW50KTsKLQotICBET006OkNTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoRE9NOjpO
b2RlSW1wbCAqJm5vZGVUb1JlbW92ZSkgY29uc3Q7Ci0KLSAgS0hUTUxQYXJ0UHJpdmF0ZSAqZDsK
LSAgZnJpZW5kIGNsYXNzIEtIVE1MUGFydFByaXZhdGU7Ci0gIGZyaWVuZCBjbGFzcyBraHRtbDo6
U2VsZWN0aW9uQ29udHJvbGxlcjsKLQotcHVibGljOiAgCi0gIGZyaWVuZCBjbGFzcyBLV1FLSFRN
TFBhcnQ7Ci0KLSAgdm9pZCBjb21wbGV0ZWQoKTsKLSAgdm9pZCBjb21wbGV0ZWQoYm9vbCk7Ci0g
IGJvb2wgZGlkT3BlblVSTChjb25zdCBLVVJMICYpOwotICB2b2lkIHNldFN0YXR1c0JhclRleHQo
Y29uc3QgUVN0cmluZyAmKTsKLSAgdm9pZCBzdGFydGVkKEtJTzo6Sm9iICopOwotICB2b2lkIGZy
YW1lRGV0YWNoZWQoKTsKLSAgdmlydHVhbCB2b2lkIGRpZEZpcnN0TGF5b3V0KCkge30KLQotICBp
bnQgZnJhbWVDb3VudDsKLX07Ci0KLSNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIKLQotI2VuZGlm
CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2todG1sdmll
dy5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwva2h0bWx2aWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImto
dG1sdmlldy5oIgogCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAia2h0bWxfZXZlbnRzLmgiCiAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmgiCkBAIC0xNjEsMTQgKzE2MSwxNCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE5vZGVJ
bXBsPiBkcmFnVGFyZ2V0OwogfTsKIAotS0hUTUxWaWV3OjpLSFRNTFZpZXcoIEtIVE1MUGFydCAq
cGFydCwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQorS0hUTUxWaWV3OjpLSFRN
TFZpZXcoIEZyYW1lICpmcmFtZSwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQog
ICAgIDogUVNjcm9sbFZpZXcoIHBhcmVudCwgbmFtZSwgV1Jlc2l6ZU5vRXJhc2UgfCBXUmVwYWlu
dE5vRXJhc2UgfCBXUGFpbnRVbmNsaXBwZWQgKSwKICAgICAgIF9yZWZDb3VudCgxKQogewogICAg
IG1fbWVkaXVtID0gInNjcmVlbiI7CiAKLSAgICBtX3BhcnQgPSBwYXJ0OwotICAgIG1fcGFydC0+
cmVmKCk7CisgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fZnJhbWUtPnJlZigpOwogICAgIGQg
PSBuZXcgS0hUTUxWaWV3UHJpdmF0ZTsKIAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNvbnRl
bnRzTW92aW5nKGludCwgaW50KSksIHRoaXMsIFNMT1Qoc2xvdFNjcm9sbEJhck1vdmVkKCkpKTsK
QEAgLTE4NiwxNSArMTg2LDE1IEBAIEtIVE1MVmlldzo6fktIVE1MVmlldygpCiAKICAgICBhc3Nl
cnQoX3JlZkNvdW50ID09IDApOwogCi0gICAgaWYgKG1fcGFydCkKKyAgICBpZiAobV9mcmFtZSkK
ICAgICB7CiAgICAgICAgIC8vV0FCQTogSXMgdGhpcyBPaz8gRG8gSSBuZWVkIHRvIGRlcmVmIGl0
IGFzIHdlbGw/CiAgICAgICAgIC8vRG9lcyB0aGlzIG5lZWQgdG8gYmUgZG9uZSBzb21ld2hlcmUg
ZWxzZT8KLSAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsK
KyAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgICAg
ICAgIGlmIChkb2MpCiAgICAgICAgICAgICBkb2MtPmRldGFjaCgpOwogCi0gICAgICAgIG1fcGFy
dC0+ZGVyZWYoKTsKKyAgICAgICAgbV9mcmFtZS0+ZGVyZWYoKTsKICAgICB9CiAKICAgICBkZWxl
dGUgZDsgZCA9IDA7CkBAIC0yMDIsOSArMjAyLDkgQEAgS0hUTUxWaWV3Ojp+S0hUTUxWaWV3KCkK
IAogdm9pZCBLSFRNTFZpZXc6OmNsZWFyUGFydCgpCiB7Ci0gICAgaWYgKG1fcGFydCl7Ci0gICAg
ICAgIG1fcGFydC0+ZGVyZWYoKTsKLSAgICAgICAgbV9wYXJ0ID0gMDsKKyAgICBpZiAobV9mcmFt
ZSl7CisgICAgICAgIG1fZnJhbWUtPmRlcmVmKCk7CisgICAgICAgIG1fZnJhbWUgPSAwOwogICAg
IH0KIH0KIApAQCAtMjM3LDEzICsyMzcsMTMgQEAgdm9pZCBLSFRNTFZpZXc6OmNsZWFyKCkKIAog
ICAgIHNldFN0YXRpY0JhY2tncm91bmQoZmFsc2UpOwogICAgIAotICAgIG1fcGFydC0+Y2xlYXJT
ZWxlY3Rpb24oKTsKKyAgICBtX2ZyYW1lLT5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgZC0+cmVz
ZXQoKTsKIAogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICBpZiAoZC0+
bGF5b3V0VGltZXJJZCAmJiBtX3BhcnQtPnhtbERvY0ltcGwoKSAmJiAhbV9wYXJ0LT54bWxEb2NJ
bXBsKCktPm93bmVyRWxlbWVudCgpKQotICAgICAgICBwcmludGYoIktpbGxpbmcgdGhlIGxheW91
dCB0aW1lciBmcm9tIGEgY2xlYXIgYXQgJWRcbiIsIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5lbGFw
c2VkVGltZSgpKTsKKyAgICBpZiAoZC0+bGF5b3V0VGltZXJJZCAmJiBtX2ZyYW1lLT54bWxEb2NJ
bXBsKCkgJiYgIW1fZnJhbWUtPnhtbERvY0ltcGwoKS0+b3duZXJFbGVtZW50KCkpCisgICAgICAg
IHByaW50ZigiS2lsbGluZyB0aGUgbGF5b3V0IHRpbWVyIGZyb20gYSBjbGVhciBhdCAlZFxuIiwg
bV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5lbGFwc2VkVGltZSgpKTsKICNlbmRpZgogICAgIAogICAg
IGtpbGxUaW1lcnMoKTsKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIEtIVE1MVmlldzo6Y2xlYXIo
KQogCiB2b2lkIEtIVE1MVmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50KiBlKQogewotICAg
IGlmIChtX3BhcnQgJiYgbV9wYXJ0LT54bWxEb2NJbXBsKCkpCi0gICAgICAgIG1fcGFydC0+eG1s
RG9jSW1wbCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50TmFtZXM6OnJlc2l6ZUV2ZW50LCBm
YWxzZSwgZmFsc2UpOworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPnhtbERvY0ltcGwoKSkK
KyAgICAgICAgbV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50
TmFtZXM6OnJlc2l6ZUV2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCiB2b2lkIEtIVE1MVmlldzo6
aW5pdFNjcm9sbEJhcnMoKQpAQCAtMjgwLDggKzI4MCw4IEBAIHZvaWQgS0hUTUxWaWV3OjpzZXRN
YXJnaW5IZWlnaHQoaW50IGgpCiAKIHZvaWQgS0hUTUxWaWV3OjphZGp1c3RWaWV3U2l6ZSgpCiB7
Ci0gICAgaWYoIG1fcGFydC0+eG1sRG9jSW1wbCgpICkgewotICAgICAgICBEb2N1bWVudEltcGwg
KmRvY3VtZW50ID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7CisgICAgaWYoIG1fZnJhbWUtPnhtbERv
Y0ltcGwoKSApIHsKKyAgICAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IG1fZnJhbWUtPnht
bERvY0ltcGwoKTsKIAogICAgICAgICBSZW5kZXJDYW52YXMqIHJvb3QgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJDYW52YXMgKj4oZG9jdW1lbnQtPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAoICFyb290
ICkKQEAgLTM1MCwxNCArMzUwLDE0IEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIGQt
PmxheW91dFRpbWVySWQgPSAwOwogICAgIGQtPmRlbGF5ZWRMYXlvdXQgPSBmYWxzZTsKIAotICAg
IGlmICghbV9wYXJ0KSB7CisgICAgaWYgKCFtX2ZyYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBE
byB3ZSBuZWVkIHRvIHNldCBfd2lkdGggaGVyZT8KICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3
ZSBzZXQgX2hlaWdodCBoZXJlIHRvbz8KICAgICAgICAgX3dpZHRoID0gdmlzaWJsZVdpZHRoKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEb2N1bWVudEltcGwqIGRvY3VtZW50ID0g
bV9wYXJ0LT54bWxEb2NJbXBsKCk7CisgICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9IG1fZnJh
bWUtPnhtbERvY0ltcGwoKTsKICAgICBpZiAoIWRvY3VtZW50KSB7CiAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2Ugc2V0IF9oZWlnaHQgaGVyZSB0b28/CiAgICAgICAgIF93aWR0aCA9IHZpc2li
bGVXaWR0aCgpOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQog
CiAgICAgcm9vdC0+bGF5b3V0KCk7CiAKLSAgICBtX3BhcnQtPmludmFsaWRhdGVTZWxlY3Rpb24o
KTsKKyAgICBtX2ZyYW1lLT5pbnZhbGlkYXRlU2VsZWN0aW9uKCk7CiAgICAKICAgICBkLT5sYXlv
dXRTY2hlZHVsaW5nRW5hYmxlZD10cnVlOwogICAgIGQtPmxheW91dFN1cHByZXNzZWQgPSBmYWxz
ZTsKQEAgLTQ5MywxOCArNDkzLDE4IEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIHNl
dFN0YXRpY0JhY2tncm91bmQoZC0+dXNlU2xvd1JlcGFpbnRzKTsKIAogICAgIGlmIChkaWRGaXJz
dExheW91dCkgewotICAgICAgICBtX3BhcnQtPmRpZEZpcnN0TGF5b3V0KCk7CisgICAgICAgIG1f
ZnJhbWUtPmRpZEZpcnN0TGF5b3V0KCk7CiAgICAgfQogfQogCiB2b2lkIEtIVE1MVmlldzo6dXBk
YXRlRGFzaGJvYXJkUmVnaW9ucygpCiB7Ci0gICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9IG1f
cGFydC0+eG1sRG9jSW1wbCgpOworICAgIERvY3VtZW50SW1wbCogZG9jdW1lbnQgPSBtX2ZyYW1l
LT54bWxEb2NJbXBsKCk7CiAgICAgaWYgKGRvY3VtZW50LT5oYXNEYXNoYm9hcmRSZWdpb25zKCkp
IHsKICAgICAgICAgUVZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9ucyA9
IGRvY3VtZW50LT5yZW5kZXJlcigpLT5jb21wdXRlRGFzaGJvYXJkUmVnaW9ucygpOwogICAgICAg
ICBRVmFsdWVMaXN0PERhc2hib2FyZFJlZ2lvblZhbHVlPiBjdXJyZW50UmVnaW9ucyA9IGRvY3Vt
ZW50LT5kYXNoYm9hcmRSZWdpb25zKCk7CiAJZG9jdW1lbnQtPnNldERhc2hib2FyZFJlZ2lvbnMo
bmV3UmVnaW9ucyk7Ci0JS1dRKG1fcGFydCktPmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CisJ
TWFjKG1fZnJhbWUpLT5kYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogICAgIH0KIH0KIApAQCAt
NTE1LDcgKzUxNSw3IEBAIHZvaWQgS0hUTUxWaWV3Ojp1cGRhdGVEYXNoYm9hcmRSZWdpb25zKCkK
IAogdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAq
X21vdXNlICkKIHsKLSAgICBpZighbV9wYXJ0LT54bWxEb2NJbXBsKCkpIHJldHVybjsKKyAgICBp
ZighbV9mcmFtZS0+eG1sRG9jSW1wbCgpKSByZXR1cm47CiAKICAgICBSZWZQdHI8S0hUTUxWaWV3
PiBwcm90ZWN0b3IodGhpcyk7CiAKQEAgLTUyNSw5ICs1MjUsOSBAQCB2b2lkIEtIVE1MVmlldzo6
dmlld3BvcnRNb3VzZVByZXNzRXZlbnQoCiAgICAgZC0+bW91c2VQcmVzc2VkID0gdHJ1ZTsKIAog
ICAgIE5vZGVJbXBsOjpNb3VzZUV2ZW50IG1ldiggX21vdXNlLT5zdGF0ZUFmdGVyKCksIE5vZGVJ
bXBsOjpNb3VzZVByZXNzICk7Ci0gICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPnByZXBhcmVNb3Vz
ZUV2ZW50KCBmYWxzZSwgeG0sIHltLCAmbWV2ICk7CisgICAgbV9mcmFtZS0+eG1sRG9jSW1wbCgp
LT5wcmVwYXJlTW91c2VFdmVudCggZmFsc2UsIHhtLCB5bSwgJm1ldiApOwogCi0gICAgaWYgKEtX
UShtX3BhcnQpLT5wYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2KSkgeworICAgIGlmIChN
YWMobV9mcmFtZSktPnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYpKSB7CiAgICAgICAg
IGludmFsaWRhdGVDbGljaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTQ0LDEzICs1
NDQsMTMgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VQcmVzc0V2ZW50KAogCiAgICAg
aWYgKCFzd2FsbG93RXZlbnQpIHsKIAlNb3VzZVByZXNzRXZlbnQgZXZlbnQoIF9tb3VzZSwgeG0s
IHltLCBtZXYudXJsLCBtZXYudGFyZ2V0LCBtZXYuaW5uZXJOb2RlLmdldCgpICk7Ci0JUUFwcGxp
Y2F0aW9uOjpzZW5kRXZlbnQoIG1fcGFydCwgJmV2ZW50ICk7CisJUUFwcGxpY2F0aW9uOjpzZW5k
RXZlbnQoIG1fZnJhbWUsICZldmVudCApOwogICAgICAgICAvLyBNYW55IEFLIHdpZGdldHMgcnVu
IHRoZWlyIG93biBldmVudCBsb29wcyBhbmQgY29uc3VtZSBldmVudHMgd2hpbGUgdGhlIG1vdXNl
IGlzIGRvd24uCiAgICAgICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJlbnRFdmVudCBpcyB0
aGUgbW91c2VVcCB0aGF0IHRoZXkgZXhpdGVkIG9uLiAgV2UgbmVlZCB0byB1cGRhdGUKICAgICAg
ICAgLy8gdGhlIGtodG1sIHN0YXRlIHdpdGggdGhpcyBtb3VzZVVwLCB3aGljaCBraHRtbCBuZXZl
ciBzYXcuCiAgICAgICAgIC8vIElmIHRoaXMgZXZlbnQgaXNuJ3QgYSBtb3VzZVVwLCB3ZSBhc3N1
bWUgdGhhdCB0aGUgbW91c2VVcCB3aWxsIGJlIGNvbWluZyBsYXRlci4gIFRoZXJlCiAgICAgICAg
IC8vIGlzIGEgaG9sZSBoZXJlIGlmIHRoZSB3aWRnZXQgY29uc3VtZXMgdGhlIG1vdXNlVXAgYW5k
IHN1YnNlcXVlbnQgZXZlbnRzLgotICAgICAgICBpZiAoS1dRKG1fcGFydCktPmxhc3RFdmVudElz
TW91c2VVcCgpKSB7CisgICAgICAgIGlmIChNYWMobV9mcmFtZSktPmxhc3RFdmVudElzTW91c2VV
cCgpKSB7CiAgICAgICAgICAgICBkLT5tb3VzZVByZXNzZWQgPSBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVBy
ZXNzRXZlbnQoCiAKIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2tFdmVu
dCggUU1vdXNlRXZlbnQgKl9tb3VzZSApCiB7Ci0gICAgaWYoIW1fcGFydC0+eG1sRG9jSW1wbCgp
KSByZXR1cm47CisgICAgaWYoIW1fZnJhbWUtPnhtbERvY0ltcGwoKSkgcmV0dXJuOwogCiAgICAg
UmVmUHRyPEtIVE1MVmlldz4gcHJvdGVjdG9yKHRoaXMpOwogCkBAIC01NjksOSArNTY5LDkgQEAg
dm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogICAgIGQtPm1vdXNlUHJl
c3NlZCA9IGZhbHNlOwogCiAgICAgTm9kZUltcGw6Ok1vdXNlRXZlbnQgbWV2KCBfbW91c2UtPnN0
YXRlQWZ0ZXIoKSwgTm9kZUltcGw6Ok1vdXNlRGJsQ2xpY2sgKTsKLSAgICBtX3BhcnQtPnhtbERv
Y0ltcGwoKS0+cHJlcGFyZU1vdXNlRXZlbnQoIGZhbHNlLCB4bSwgeW0sICZtZXYgKTsKKyAgICBt
X2ZyYW1lLT54bWxEb2NJbXBsKCktPnByZXBhcmVNb3VzZUV2ZW50KCBmYWxzZSwgeG0sIHltLCAm
bWV2ICk7CiAKLSAgICBpZiAoS1dRKG1fcGFydCktPnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFt
ZShtZXYpKQorICAgIGlmIChNYWMobV9mcmFtZSktPnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFt
ZShtZXYpKQogICAgICAgICByZXR1cm47CiAKICAgICBkLT5jbGlja0NvdW50ID0gX21vdXNlLT5j
bGlja0NvdW50KCk7CkBAIC01ODUsMTAgKzU4NSwxMCBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3Bv
cnRNb3VzZURvdWJsZUNsaWNrCiAgICAgLy8gUXQgZGVsaXZlcnMgYSByZWxlYXNlIGV2ZW50IEFO
RCBhIGRvdWJsZSBjbGljayBldmVudC4KICAgICBpZiAoIXN3YWxsb3dFdmVudCkgewogCU1vdXNl
UmVsZWFzZUV2ZW50IGV2ZW50MSggX21vdXNlLCB4bSwgeW0sIG1ldi51cmwsIG1ldi50YXJnZXQs
IG1ldi5pbm5lck5vZGUuZ2V0KCkgKTsKLQlRQXBwbGljYXRpb246OnNlbmRFdmVudCggbV9wYXJ0
LCAmZXZlbnQxICk7CisJUUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQoIG1fZnJhbWUsICZldmVudDEg
KTsKIAogCU1vdXNlRG91YmxlQ2xpY2tFdmVudCBldmVudDIoIF9tb3VzZSwgeG0sIHltLCBtZXYu
dXJsLCBtZXYudGFyZ2V0LCBtZXYuaW5uZXJOb2RlLmdldCgpICk7Ci0JUUFwcGxpY2F0aW9uOjpz
ZW5kRXZlbnQoIG1fcGFydCwgJmV2ZW50MiApOworCVFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBt
X2ZyYW1lLCAmZXZlbnQyICk7CiAgICAgfQogCiAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBAIC01
OTksMTAgKzU5OSwxMCBAQCBzdGF0aWMgYm9vbCBpc1N1Ym1pdEltYWdlKE5vZGVJbXBsICpub2Rl
CiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgJiYgc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRUeXBlKCkgPT0gSFRNTElu
cHV0RWxlbWVudEltcGw6OklNQUdFOwogfQogCi1zdGF0aWMgUUN1cnNvciBzZWxlY3RDdXJzb3Io
Y29uc3QgTm9kZUltcGw6Ok1vdXNlRXZlbnQgJmV2ZW50LCBLSFRNTFBhcnQgKnBhcnQsIGJvb2wg
bW91c2VQcmVzc2VkKQorc3RhdGljIFFDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE5vZGVJbXBs
OjpNb3VzZUV2ZW50ICZldmVudCwgRnJhbWUgKmZyYW1lLCBib29sIG1vdXNlUHJlc3NlZCkKIHsK
ICAgICAvLyBEdXJpbmcgc2VsZWN0aW9uLCB1c2UgYW4gSS1iZWFtIG5vIG1hdHRlciB3aGF0IHdl
J3JlIG92ZXIKLSAgICBpZiAobW91c2VQcmVzc2VkICYmIHBhcnQtPmhhc1NlbGVjdGlvbigpKQor
ICAgIGlmIChtb3VzZVByZXNzZWQgJiYgZnJhbWUtPmhhc1NlbGVjdGlvbigpKQogICAgICAgICBy
ZXR1cm4gS0N1cnNvcjo6aWJlYW1DdXJzb3IoKTsKIAogICAgIE5vZGVJbXBsICpub2RlID0gZXZl
bnQuaW5uZXJOb2RlLmdldCgpOwpAQCAtNjE1LDE0ICs2MTUsMTQgQEAgc3RhdGljIFFDdXJzb3Ig
c2VsZWN0Q3Vyc29yKGNvbnN0IE5vZGVJbQogICAgIHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+Y3Vy
c29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgICAgICBjYXNlIENVUlNPUl9BVVRPOgogICAgICAg
ICAgICAgaWYgKCFldmVudC51cmwuaXNOdWxsKCkgfHwgaXNTdWJtaXRJbWFnZShub2RlKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGFydC0+dXJsQ3Vyc29yKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZyYW1lLT51cmxDdXJzb3IoKTsKICAgICAgICAgICAgIGlmICgobm9kZSAmJiBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgp
ICYmIHJlbmRlcmVyLT5jYW5TZWxlY3QoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEtDdXJz
b3I6OmliZWFtQ3Vyc29yKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDVVJT
T1JfQ1JPU1M6CiAgICAgICAgICAgICByZXR1cm4gS0N1cnNvcjo6Y3Jvc3NDdXJzb3IoKTsKICAg
ICAgICAgY2FzZSBDVVJTT1JfUE9JTlRFUjoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0LT51cmxD
dXJzb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFtZS0+dXJsQ3Vyc29yKCk7CiAgICAgICAg
IGNhc2UgQ1VSU09SX01PVkU6CiAgICAgICAgICAgICByZXR1cm4gS0N1cnNvcjo6c2l6ZUFsbEN1
cnNvcigpOwogICAgICAgICBjYXNlIENVUlNPUl9FX1JFU0laRToKQEAgLTY1OSw4ICs2NTksOCBA
QCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCggCiAgICAgLy8gcGFydCBi
ZWluZyBudWxsIGhlcmUsIHdoaWNoIHNlZW1zIGltcG9zc2libGUsIHNvIGNoZWNrIGZvciBuaWwK
ICAgICAvLyBidXQgYWxzbyBhc3NlcnQgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpZ3VyZSB0aGlz
IG91dCBpbiBkZWJ1ZwogICAgIC8vIGJ1aWxkcywgaWYgaXQgaGFwcGVucy4KLSAgICBhc3NlcnQo
bV9wYXJ0KTsKLSAgICBpZighbV9wYXJ0IHx8ICFtX3BhcnQtPnhtbERvY0ltcGwoKSkgcmV0dXJu
OworICAgIGFzc2VydChtX2ZyYW1lKTsKKyAgICBpZighbV9mcmFtZSB8fCAhbV9mcmFtZS0+eG1s
RG9jSW1wbCgpKSByZXR1cm47CiAKICAgICBpbnQgeG0sIHltOwogICAgIHZpZXdwb3J0VG9Db250
ZW50cyhfbW91c2UtPngoKSwgX21vdXNlLT55KCksIHhtLCB5bSk7CkBAIC02NzAsMjMgKzY3MCwy
MyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCggCiAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IDpob3ZlciBhbmQgOmFjdGl2ZSBmcmVlemUgaW4gdGhlIHN0YXRlIHRoZXkg
d2VyZSBpbiB3aGVuIHRoZSBtb3VzZQogICAgIC8vIHdhcyBwcmVzc2VkLCByYXRoZXIgdGhhbiB1
cGRhdGluZyBmb3Igbm9kZXMgdGhlIG1vdXNlIG1vdmVzIG92ZXIgYXMgeW91IGhvbGQgdGhlIG1v
dXNlIGRvd24uCiAgICAgTm9kZUltcGw6Ok1vdXNlRXZlbnQgbWV2KCBfbW91c2UtPnN0YXRlQWZ0
ZXIoKSwgTm9kZUltcGw6Ok1vdXNlTW92ZSApOwotICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5w
cmVwYXJlTW91c2VFdmVudChkLT5tb3VzZVByZXNzZWQgJiYgbV9wYXJ0LT5tb3VzZURvd25NYXlT
dGFydFNlbGVjdCgpLCBkLT5tb3VzZVByZXNzZWQsIHhtLCB5bSwgJm1ldiApOworICAgIG1fZnJh
bWUtPnhtbERvY0ltcGwoKS0+cHJlcGFyZU1vdXNlRXZlbnQoZC0+bW91c2VQcmVzc2VkICYmIG1f
ZnJhbWUtPm1vdXNlRG93bk1heVN0YXJ0U2VsZWN0KCksIGQtPm1vdXNlUHJlc3NlZCwgeG0sIHlt
LCAmbWV2ICk7CiAKLSAgICBpZiAoIUtXUShtX3BhcnQpLT5wYXNzU3ViZnJhbWVFdmVudFRvU3Vi
ZnJhbWUobWV2KSkKLSAgICAgICAgdmlld3BvcnQoKS0+c2V0Q3Vyc29yKHNlbGVjdEN1cnNvciht
ZXYsIG1fcGFydCwgZC0+bW91c2VQcmVzc2VkKSk7CisgICAgaWYgKCFNYWMobV9mcmFtZSktPnBh
c3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYpKQorICAgICAgICB2aWV3cG9ydCgpLT5zZXRD
dXJzb3Ioc2VsZWN0Q3Vyc29yKG1ldiwgbV9mcmFtZSwgZC0+bW91c2VQcmVzc2VkKSk7CiAgICAg
ICAgIAogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlbW92
ZUV2ZW50LG1ldi5pbm5lck5vZGUuZ2V0KCksZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCxfbW91c2UsdHJ1ZSxOb2RlSW1wbDo6TW91c2VNb3ZlKTsK
IAogICAgIC8vIGV4ZWN1dGUgdGhlIHNjaGVkdWxlZCBzY3JpcHQuIFRoaXMgaXMgdG8gbWFrZSBz
dXJlIHRoZSBtb3VzZW92ZXIgZXZlbnRzIGNvbWUgYWZ0ZXIgdGhlIG1vdXNlb3V0IGV2ZW50cwot
ICAgIG1fcGFydC0+ZXhlY3V0ZVNjaGVkdWxlZFNjcmlwdCgpOworICAgIG1fZnJhbWUtPmV4ZWN1
dGVTY2hlZHVsZWRTY3JpcHQoKTsKIAogICAgIGQtPnByZXZNb3VzZVggPSB4bTsKICAgICBkLT5w
cmV2TW91c2VZID0geW07CiAKICAgICBpZiAoIXN3YWxsb3dFdmVudCkgewogICAgICAgICBNb3Vz
ZU1vdmVFdmVudCBldmVudChfbW91c2UsIHhtLCB5bSwgbWV2LnVybCwgbWV2LnRhcmdldCwgbWV2
LmlubmVyTm9kZS5nZXQoKSk7Ci0gICAgICAgIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KG1fcGFy
dCwgJmV2ZW50KTsKKyAgICAgICAgUUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQobV9mcmFtZSwgJmV2
ZW50KTsKICAgICB9CiB9CiAKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIEtIVE1MVmlldzo6aW52
YWxpZGF0ZUNsaWNrKCkKIAogdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VSZWxlYXNlRXZl
bnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKIHsKLSAgICBpZiAoICFtX3BhcnQtPnhtbERvY0lt
cGwoKSApIHJldHVybjsKKyAgICBpZiAoICFtX2ZyYW1lLT54bWxEb2NJbXBsKCkgKSByZXR1cm47
CiAKICAgICBSZWZQdHI8S0hUTUxWaWV3PiBwcm90ZWN0b3IodGhpcyk7CiAKQEAgLTcxMSw5ICs3
MTEsOSBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVJlbGVhc2VFdmVuCiAgICAgZC0+
bW91c2VQcmVzc2VkID0gZmFsc2U7CiAKICAgICBOb2RlSW1wbDo6TW91c2VFdmVudCBtZXYoIF9t
b3VzZS0+c3RhdGVBZnRlcigpLCBOb2RlSW1wbDo6TW91c2VSZWxlYXNlICk7Ci0gICAgbV9wYXJ0
LT54bWxEb2NJbXBsKCktPnByZXBhcmVNb3VzZUV2ZW50KCBmYWxzZSwgeG0sIHltLCAmbWV2ICk7
CisgICAgbV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5wcmVwYXJlTW91c2VFdmVudCggZmFsc2UsIHht
LCB5bSwgJm1ldiApOwogCi0gICAgaWYgKEtXUShtX3BhcnQpLT5wYXNzU3ViZnJhbWVFdmVudFRv
U3ViZnJhbWUobWV2KSkKKyAgICBpZiAoTWFjKG1fZnJhbWUpLT5wYXNzU3ViZnJhbWVFdmVudFRv
U3ViZnJhbWUobWV2KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBzd2FsbG93RXZlbnQg
PSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2V1cEV2ZW50LG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1
ZSwKQEAgLTcyNiw3ICs3MjYsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVJlbGVh
c2VFdmVuCiAKICAgICBpZiAoIXN3YWxsb3dFdmVudCkgewogCU1vdXNlUmVsZWFzZUV2ZW50IGV2
ZW50KCBfbW91c2UsIHhtLCB5bSwgbWV2LnVybCwgbWV2LnRhcmdldCwgbWV2LmlubmVyTm9kZS5n
ZXQoKSApOwotCVFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBtX3BhcnQsICZldmVudCApOworCVFB
cHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBtX2ZyYW1lLCAmZXZlbnQgKTsKICAgICB9CiAKICAgICBp
bnZhbGlkYXRlQ2xpY2soKTsKQEAgLTczNCw4ICs3MzQsOCBAQCB2b2lkIEtIVE1MVmlldzo6dmll
d3BvcnRNb3VzZVJlbGVhc2VFdmVuCiAKIHZvaWQgS0hUTUxWaWV3OjprZXlQcmVzc0V2ZW50KCBR
S2V5RXZlbnQgKl9rZSApCiB7Ci0gICAgaWYgKG1fcGFydC0+eG1sRG9jSW1wbCgpICYmIG1fcGFy
dC0+eG1sRG9jSW1wbCgpLT5mb2N1c05vZGUoKSkgewotICAgICAgICBpZiAobV9wYXJ0LT54bWxE
b2NJbXBsKCktPmZvY3VzTm9kZSgpLT5kaXNwYXRjaEtleUV2ZW50KF9rZSkpCisgICAgaWYgKG1f
ZnJhbWUtPnhtbERvY0ltcGwoKSAmJiBtX2ZyYW1lLT54bWxEb2NJbXBsKCktPmZvY3VzTm9kZSgp
KSB7CisgICAgICAgIGlmIChtX2ZyYW1lLT54bWxEb2NJbXBsKCktPmZvY3VzTm9kZSgpLT5kaXNw
YXRjaEtleUV2ZW50KF9rZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIF9rZS0+YWNjZXB0KCk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC03NTcsNyArNzU3LDcgQEAgYm9vbCBLSFRNTFZpZXc6
OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbnN0IAogICAgIGJvb2wgbWV0YUtleSA9IDA7CiAgICAgCiAg
ICAgTW91c2VFdmVudEltcGwgKm1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKGV2ZW50VHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgbV9w
YXJ0LT54bWxEb2NJbXBsKCktPmRlZmF1bHRWaWV3KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRydWUsIG1fZnJhbWUtPnhtbERvY0ltcGwoKS0+
ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwgY2xpZW50WSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwg
bWV0YUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgY2xpcGJvYXJkKTsKQEAgLTc3NSw3ICs3NzUsNyBAQCBib29sIEtIVE1MVmlldzo6dXBkYXRl
RHJhZ0FuZERyb3AoY29uc3QgCiAgICAgaW50IHhtLCB5bTsKICAgICB2aWV3cG9ydFRvQ29udGVu
dHMobG9jLngoKSwgbG9jLnkoKSwgeG0sIHltKTsKICAgICBOb2RlSW1wbDo6TW91c2VFdmVudCBt
ZXYoMCwgTm9kZUltcGw6Ok1vdXNlTW92ZSk7Ci0gICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPnBy
ZXBhcmVNb3VzZUV2ZW50KHRydWUsIHhtLCB5bSwgJm1ldik7CisgICAgbV9mcmFtZS0+eG1sRG9j
SW1wbCgpLT5wcmVwYXJlTW91c2VFdmVudCh0cnVlLCB4bSwgeW0sICZtZXYpOwogICAgIE5vZGVJ
bXBsICpuZXdUYXJnZXQgPSBtZXYuaW5uZXJOb2RlLmdldCgpOwogCiAgICAgLy8gRHJhZyBldmVu
dHMgc2hvdWxkIG5ldmVyIGdvIHRvIHRleHQgbm9kZXMgKGZvbGxvd2luZyBJRSwgYW5kIHByb3Bl
ciBtb3VzZW92ZXIvb3V0IGRpc3BhdGNoKQpAQCAtOTA0LDcgKzkwNCw3IEBAIHZvaWQgS0hUTUxW
aWV3Ojpmb2N1c05leHRQcmV2Tm9kZShib29sIG4KICAgICAvLyB1c2VkIGlzIHRoYXQgc3BlY2lm
aWVkIGluIHRoZSBIVE1MIHNwZWMgKHNlZSBEb2N1bWVudEltcGw6Om5leHRGb2N1c05vZGUoKSBh
bmQgRG9jdW1lbnRJbXBsOjpwcmV2aW91c0ZvY3VzTm9kZSgpCiAgICAgLy8gZm9yIGRldGFpbHMp
LgogCi0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBE
b2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICBOb2RlSW1wbCAq
b2xkRm9jdXNOb2RlID0gZG9jLT5mb2N1c05vZGUoKTsKICAgICBOb2RlSW1wbCAqbmV3Rm9jdXNO
b2RlOwogCkBAIC05NzEsNyArOTcxLDcgQEAgdm9pZCBLSFRNTFZpZXc6OmZvY3VzTmV4dFByZXZO
b2RlKGJvb2wgbgogICAgICAgICB9CiAgICAgfQogICAgIC8vIFNldCBmb2N1cyBub2RlIG9uIHRo
ZSBkb2N1bWVudAotICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRGb2N1c05vZGUobmV3Rm9j
dXNOb2RlKTsKKyAgICBtX2ZyYW1lLT54bWxEb2NJbXBsKCktPnNldEZvY3VzTm9kZShuZXdGb2N1
c05vZGUpOwogfQogCiB2b2lkIEtIVE1MVmlldzo6c2V0TWVkaWFUeXBlKCBjb25zdCBRU3RyaW5n
ICZtZWRpdW0gKQpAQCAtOTgyLDcgKzk4Miw3IEBAIHZvaWQgS0hUTUxWaWV3OjpzZXRNZWRpYVR5
cGUoIGNvbnN0IFFTdHIKIFFTdHJpbmcgS0hUTUxWaWV3OjptZWRpYVR5cGUoKSBjb25zdAogewog
ICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFuIG92ZXJyaWRlIHR5cGUuCi0gICAgUVN0cmluZyBvdmVy
cmlkZVR5cGUgPSBLV1EobV9wYXJ0KS0+b3ZlcnJpZGVNZWRpYVR5cGUoKTsKKyAgICBRU3RyaW5n
IG92ZXJyaWRlVHlwZSA9IE1hYyhtX2ZyYW1lKS0+b3ZlcnJpZGVNZWRpYVR5cGUoKTsKICAgICBp
ZiAoIW92ZXJyaWRlVHlwZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG92ZXJyaWRlVHlwZTsK
ICAgICByZXR1cm4gbV9tZWRpdW07CkBAIC0xMDU5LDcgKzEwNTksNyBAQCBib29sIEtIVE1MVmll
dzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZUltcGw+
IG9sZFVuZGVyOwogICAgICAgICAgICAgaWYgKGQtPnByZXZNb3VzZVggPj0gMCAmJiBkLT5wcmV2
TW91c2VZID49IDApIHsKICAgICAgICAgICAgICAgICBOb2RlSW1wbDo6TW91c2VFdmVudCBtZXYo
IF9tb3VzZS0+c3RhdGVBZnRlcigpLCBzdGF0aWNfY2FzdDxOb2RlSW1wbDo6TW91c2VFdmVudFR5
cGU+KG1vdXNlRXZlbnRUeXBlKSk7Ci0gICAgICAgICAgICAgICAgbV9wYXJ0LT54bWxEb2NJbXBs
KCktPnByZXBhcmVNb3VzZUV2ZW50KCB0cnVlLCBkLT5wcmV2TW91c2VYLCBkLT5wcmV2TW91c2VZ
LCAmbWV2ICk7CisgICAgICAgICAgICAgICAgbV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5wcmVwYXJl
TW91c2VFdmVudCggdHJ1ZSwgZC0+cHJldk1vdXNlWCwgZC0+cHJldk1vdXNlWSwgJm1ldiApOwog
ICAgICAgICAgICAgICAgIG9sZFVuZGVyID0gbWV2LmlubmVyTm9kZTsKICAgICAgICAgICAgICAg
ICBpZiAob2xkVW5kZXIgJiYgb2xkVW5kZXItPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgb2xkVW5kZXIgPSBvbGRVbmRlci0+cGFyZW50Tm9kZSgpOwpAQCAtMTA5MCwxMCArMTA5
MCwxMCBAQCBib29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0CiAgICAgICAg
IC8vIElmIGZvY3VzIHNoaWZ0IGlzIGJsb2NrZWQsIHdlIGVhdCB0aGUgZXZlbnQuICBOb3RlIHdl
IHNob3VsZCBuZXZlciBjbGVhciBzd2FsbG93RXZlbnQKICAgICAgICAgLy8gaWYgdGhlIHBhZ2Ug
YWxyZWFkeSBzZXQgaXQgKGUuZy4sIGJ5IGNhbmNlbGluZyBkZWZhdWx0IGJlaGF2aW9yKS4KICAg
ICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRGb2N1c05vZGUobm9kZSkpCisgICAgICAg
ICAgICBpZiAoIW1fZnJhbWUtPnhtbERvY0ltcGwoKS0+c2V0Rm9jdXNOb2RlKG5vZGUpKQogICAg
ICAgICAgICAgICAgIHN3YWxsb3dFdmVudCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmZvY3VzZWQoKSkgewotICAgICAgICAgICAgaWYgKCFtX3BhcnQtPnhtbERv
Y0ltcGwoKS0+c2V0Rm9jdXNOb2RlKDApKQorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT54bWxE
b2NJbXBsKCktPnNldEZvY3VzTm9kZSgwKSkKICAgICAgICAgICAgIHN3YWxsb3dFdmVudCA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTA4LDcgKzExMDgsNyBAQCB2b2lkIEtIVE1MVmll
dzo6c2V0SWdub3JlV2hlZWxFdmVudHMoIGJvCiAKIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydFdo
ZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGUpCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX3Bh
cnQtPnhtbERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERv
Y0ltcGwoKTsKICAgICBpZiAoZG9jKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCAqZG9jUmVuZGVy
ZXIgPSBkb2MtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChkb2NSZW5kZXJlcikgewpAQCAtMTEx
OSw3ICsxMTE5LDcgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0V2hlZWxFdmVudChRV2hlZQog
ICAgICAgICAgICAgZG9jLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXN1
bHQsIHgsIHkpOyAKICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gaGl0VGVzdFJlc3VsdC5p
bm5lck5vZGUoKTsKIAotICAgICAgICAgICBpZiAoS1dRKG1fcGFydCktPnBhc3NXaGVlbEV2ZW50
VG9DaGlsZFdpZGdldChub2RlKSkgeworICAgICAgICAgICBpZiAoTWFjKG1fZnJhbWUpLT5wYXNz
V2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBlLT5hY2Nl
cHQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMTM1LDEz
ICsxMTM1LDEzIEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydFdoZWVsRXZlbnQoUVdoZWUKIAog
dm9pZCBLSFRNTFZpZXc6OmZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKmUgKQogewotICAgIG1f
cGFydC0+c2V0Q2FyZXRWaXNpYmxlKCk7CisgICAgbV9mcmFtZS0+c2V0Q2FyZXRWaXNpYmxlKCk7
CiB9CiAKIHZvaWQgS0hUTUxWaWV3Ojpmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAqZSApCiB7
Ci0gICAgbV9wYXJ0LT5zdG9wQXV0b1Njcm9sbCgpOwotICAgIG1fcGFydC0+c2V0Q2FyZXRWaXNp
YmxlKGZhbHNlKTsKKyAgICBtX2ZyYW1lLT5zdG9wQXV0b1Njcm9sbCgpOworICAgIG1fZnJhbWUt
PnNldENhcmV0VmlzaWJsZShmYWxzZSk7CiB9CiAKIHZvaWQgS0hUTUxWaWV3OjpzbG90U2Nyb2xs
QmFyTW92ZWQoKQpAQCAtMTE1OSw4ICsxMTU5LDggQEAgdm9pZCBLSFRNTFZpZXc6OnRpbWVyRXZl
bnQgKCBRVGltZXJFdmVudAogewogICAgIGlmIChlLT50aW1lcklkKCk9PWQtPmxheW91dFRpbWVy
SWQpIHsKICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAgICAgIGlmICht
X3BhcnQtPnhtbERvY0ltcGwoKSAmJiAhbV9wYXJ0LT54bWxEb2NJbXBsKCktPm93bmVyRWxlbWVu
dCgpKQotICAgICAgICAgICAgcHJpbnRmKCJMYXlvdXQgdGltZXIgZmlyZWQgYXQgJWRcbiIsIG1f
cGFydC0+eG1sRG9jSW1wbCgpLT5lbGFwc2VkVGltZSgpKTsKKyAgICAgICAgaWYgKG1fZnJhbWUt
PnhtbERvY0ltcGwoKSAmJiAhbV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5vd25lckVsZW1lbnQoKSkK
KyAgICAgICAgICAgIHByaW50ZigiTGF5b3V0IHRpbWVyIGZpcmVkIGF0ICVkXG4iLCBtX2ZyYW1l
LT54bWxEb2NJbXBsKCktPmVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCiAgICAgICAgIGxheW91dCgp
OwogICAgIH0KQEAgLTExNzEsMTAgKzExNzEsMTAgQEAgdm9pZCBLSFRNTFZpZXc6OnNjaGVkdWxl
UmVsYXlvdXQoKQogICAgIGlmICghZC0+bGF5b3V0U2NoZWR1bGluZ0VuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wYXJ0LT54bWxEb2NJbXBsKCkgfHwgIW1fcGFydC0+eG1s
RG9jSW1wbCgpLT5zaG91bGRTY2hlZHVsZUxheW91dCgpKQorICAgIGlmICghbV9mcmFtZS0+eG1s
RG9jSW1wbCgpIHx8ICFtX2ZyYW1lLT54bWxEb2NJbXBsKCktPnNob3VsZFNjaGVkdWxlTGF5b3V0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBkZWxheSA9IG1fcGFydC0+eG1sRG9jSW1w
bCgpLT5taW5pbXVtTGF5b3V0RGVsYXkoKTsKKyAgICBpbnQgZGVsYXkgPSBtX2ZyYW1lLT54bWxE
b2NJbXBsKCktPm1pbmltdW1MYXlvdXREZWxheSgpOwogICAgIGlmIChkLT5sYXlvdXRUaW1lcklk
ICYmIGQtPmRlbGF5ZWRMYXlvdXQgJiYgIWRlbGF5KQogICAgICAgICB1bnNjaGVkdWxlUmVsYXlv
dXQoKTsKICAgICBpZiAoZC0+bGF5b3V0VGltZXJJZCkKQEAgLTExODMsNyArMTE4Myw3IEBAIHZv
aWQgS0hUTUxWaWV3OjpzY2hlZHVsZVJlbGF5b3V0KCkKICAgICBkLT5kZWxheWVkTGF5b3V0ID0g
ZGVsYXkgIT0gMDsKIAogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICBp
ZiAoIW1fcGFydC0+eG1sRG9jSW1wbCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICBpZiAoIW1fZnJh
bWUtPnhtbERvY0ltcGwoKS0+b3duZXJFbGVtZW50KCkpCiAgICAgICAgIHByaW50ZigiU2NoZWR1
bGluZyBsYXlvdXQgZm9yICVkXG4iLCBkZWxheSk7CiAjZW5kaWYKIApAQCAtMTIwNiw4ICsxMjA2
LDggQEAgdm9pZCBLSFRNTFZpZXc6OnVuc2NoZWR1bGVSZWxheW91dCgpCiAgICAgICAgIHJldHVy
bjsKIAogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKLSAgICBpZiAobV9wYXJ0
LT54bWxEb2NJbXBsKCkgJiYgIW1fcGFydC0+eG1sRG9jSW1wbCgpLT5vd25lckVsZW1lbnQoKSkK
LSAgICAgICAgcHJpbnRmKCJMYXlvdXQgdGltZXIgdW5zY2hlZHVsZWQgYXQgJWRcbiIsIG1fcGFy
dC0+eG1sRG9jSW1wbCgpLT5lbGFwc2VkVGltZSgpKTsKKyAgICBpZiAobV9mcmFtZS0+eG1sRG9j
SW1wbCgpICYmICFtX2ZyYW1lLT54bWxEb2NJbXBsKCktPm93bmVyRWxlbWVudCgpKQorICAgICAg
ICBwcmludGYoIkxheW91dCB0aW1lciB1bnNjaGVkdWxlZCBhdCAlZFxuIiwgbV9mcmFtZS0+eG1s
RG9jSW1wbCgpLT5lbGFwc2VkVGltZSgpKTsKICNlbmRpZgogICAgIAogICAgIGtpbGxUaW1lcihk
LT5sYXlvdXRUaW1lcklkKTsKSW5kZXg6IGtodG1sL21pc2MvQ2FjaGVkT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwvbWlzYy9DYWNoZWRPYmplY3QuaAkocmV2aXNpb24gMTE5NjApCisrKyBr
aHRtbC9taXNjL0NhY2hlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
CiAjaW5jbHVkZSA8ZG9tL2RvbV9zdHJpbmcuaD4KICNpbmNsdWRlICJEb2NQdHIuaCIKIAotY2xh
c3MgS0hUTUxQYXJ0OworY2xhc3MgRnJhbWU7CiAKIG5hbWVzcGFjZSBLSU8gewogICBjbGFzcyBK
b2I7CkluZGV4OiBraHRtbC9taXNjL0RvY0xvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL21p
c2MvRG9jTG9hZGVyLmgJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvbWlzYy9Eb2NMb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGtodG1sX3NldHRp
bmdzLmg+CiAjaW5jbHVkZSA8ZG9tL2RvbV9zdHJpbmcuaD4KIAotY2xhc3MgS0hUTUxQYXJ0Owor
Y2xhc3MgRnJhbWU7CiBjbGFzcyBLVVJMOwogCiBuYW1lc3BhY2UgRE9NIHsKQEAgLTU5LDcgKzU5
LDcgQEAgbmFtZXNwYWNlIGtodG1sCiAgICAgY2xhc3MgRG9jTG9hZGVyCiAgICAgewogICAgIHB1
YmxpYzoKLSAJRG9jTG9hZGVyKEtIVE1MUGFydCosIERPTTo6RG9jdW1lbnRJbXBsKik7CisgCURv
Y0xvYWRlcihGcmFtZSosIERPTTo6RG9jdW1lbnRJbXBsKik7CiAgCX5Eb2NMb2FkZXIoKTsKIAog
CUNhY2hlZEltYWdlICpyZXF1ZXN0SW1hZ2UoIGNvbnN0IERPTTo6RE9NU3RyaW5nICZ1cmwpOwpA
QCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2Uga2h0bWwKICAgICAgICAgS0lPOjpDYWNoZUNvbnRy
b2wgY2FjaGVQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUG9saWN5OyB9CiAgICAgICAg
IEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25BZHZpY2Ugc2hvd0FuaW1hdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX3Nob3dBbmltYXRpb25zOyB9CiAgICAgICAgIHRpbWVfdCBleHBpcmVEYXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBpcmVEYXRlOyB9Ci0gICAgICAgIEtIVE1MUGFydCogcGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFydDsgfQorICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lOyB9CiAgICAgICAgIERPTTo6RG9jdW1lbnRJbXBsKiBkb2MoKSBjb25z
dCB7IHJldHVybiBtX2RvYzsgfQogCiAgICAgICAgIHZvaWQgc2V0RXhwaXJlRGF0ZSggdGltZV90
ICk7CkBAIC0xMDEsNyArMTAxLDcgQEAgbmFtZXNwYWNlIGtodG1sCiAJS0lPOjpDYWNoZUNvbnRy
b2wgbV9jYWNoZVBvbGljeTsKICAgICAgICAgYm9vbCBtX2JhdXRvbG9hZEltYWdlcyA6IDE7CiAg
ICAgICAgIEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25BZHZpY2UgbV9zaG93QW5pbWF0aW9ucyA6
IDI7Ci0gICAgICAgIEtIVE1MUGFydCogbV9wYXJ0OworICAgICAgICBGcmFtZSogbV9mcmFtZTsK
ICAgICAgICAgRE9NOjpEb2N1bWVudEltcGwgKm1fZG9jOwogICAgICAgICBib29sIG1fbG9hZElu
UHJvZ3Jlc3M7CiAgICAgfTsKSW5kZXg6IGtodG1sL21pc2MvbG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9taXNjL2xvYWRlci5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvbWlz
Yy9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8
a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvYWRlci5oIgogI2luY2x1ZGUg
Imh0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKQEAgLTIwMiw4ICsyMDIsOCBAQCB2
b2lkIExvYWRlcjo6c2xvdFJlY2VpdmVkUmVzcG9uc2UoS0lPOjpKCiAgICAgICAgIEFTU0VSVChy
LT5vYmplY3QtPmlzSW1hZ2UoKSk7CiAgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlICo+
KHItPm9iamVjdCktPmNsZWFyKCk7CiAgICAgICAgIHItPm1fYnVmZmVyID0gUUJ1ZmZlcigpOwot
ICAgICAgICBpZiAoci0+bV9kb2NMb2FkZXItPnBhcnQoKSkKLSAgICAgICAgICAgIHItPm1fZG9j
TG9hZGVyLT5wYXJ0KCktPmNoZWNrQ29tcGxldGVkKCk7CisgICAgICAgIGlmIChyLT5tX2RvY0xv
YWRlci0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHItPm1fZG9jTG9hZGVyLT5mcmFtZSgpLT5jaGVj
a0NvbXBsZXRlZCgpOwogICAgICAgICAKICAgICB9IGVsc2UgaWYgKEtXUVJlc3BvbnNlSXNNdWx0
aXBhcnQocmVzcG9uc2UpKSB7CiAgICAgICAgIHItPm11bHRpcGFydCA9IHRydWU7CkluZGV4OiBr
aHRtbC9taXNjL0NhY2hlZEltYWdlQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL21p
c2MvQ2FjaGVkSW1hZ2VDYWxsYmFjay5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvbWlz
Yy9DYWNoZWRJbWFnZUNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTQgKzU4LDE0
IEBAIHZvaWQgQ2FjaGVkSW1hZ2VDYWxsYmFjazo6bm90aWZ5VXBkYXRlKCkKICAgICAgICAgLy8g
bGF5b3V0IGFuZCBkaXNwYXRjaGluZyB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlci4gIFJlbW92
aW5nIHRoZSByZXF1ZXN0IGZyb20KICAgICAgICAgLy8gdGhlIGxpc3Qgb2YgYmFja2dyb3VuZCBk
ZWNvZGluZyByZXF1ZXN0cyB3aWxsIGVuc3VyZSB0aGF0IExvYWRlcjo6bnVtUmVxdWVzdHMoKSAK
ICAgICAgICAgLy8gZG9lcyBub3QgY291bnQgdGhpcyBiYWNrZ3JvdW5kIHJlcXVlc3QuICBGdXJ0
aGVyIG51bVJlcXVlc3RzKCkgY2FuCi0gICAgICAgIC8vIGJlIGNvcnJlY3RseSB1c2VkIGJ5IHRo
ZSBwYXJ0IHRvIGRldGVybWluZSBpZiBsb2FkaW5nIGlzIHN1ZmZpY2llbnRseQorICAgICAgICAv
LyBiZSBjb3JyZWN0bHkgdXNlZCBieSB0aGUgZnJhbWUgdG8gZGV0ZXJtaW5lIGlmIGxvYWRpbmcg
aXMgc3VmZmljaWVudGx5CiAgICAgICAgIC8vIGNvbXBsZXRlIHRvIGRpc3BhdGNoIHRoZSBwYWdl
J3Mgb25sb2FkIGhhbmRsZXIuCiAgICAgICAgIFJlcXVlc3QgKnIgPSBjYWNoZWRJbWFnZS0+bV9y
ZXF1ZXN0OwogICAgICAgICBEb2NMb2FkZXIgKmRsID0gci0+bV9kb2NMb2FkZXI7CiAKICAgICAg
ICAga2h0bWw6OkNhY2hlOjpsb2FkZXIoKS0+cmVtb3ZlQmFja2dyb3VuZERlY29kaW5nUmVxdWVz
dChyKTsKIAotICAgICAgICAvLyBQb2tlIHRoZSBwYXJ0IHRvIGdldCBpdCB0byBkbyBhIGNoZWNr
Q29tcGxldGVkKCkuICBPbmx5IGRvIHRoaXMgZm9yCisgICAgICAgIC8vIFBva2UgdGhlIGZyYW1l
IHRvIGdldCBpdCB0byBkbyBhIGNoZWNrQ29tcGxldGVkKCkuICBPbmx5IGRvIHRoaXMgZm9yCiAg
ICAgICAgIC8vIHRoZSBmaXJzdCB1cGRhdGUgdG8gbWluaW1pemUgd29yay4gIE5vdGUgdGhhdCB3
ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlCiAgICAgICAgIC8vIHJlYWQgdGhlIGhlYWRlciB3aGVu
IHdlIHJlY2VpdmVkIHRoaXMgZmlyc3QgdXBkYXRlLCB3aGljaCBpcyB0cmlnZ2VyZWQKICAgICAg
ICAgLy8gYnkgdGhlIGZpcnN0IGtDR0ltYWdlU3RhdHVzSW5jb21wbGV0ZSBzdGF0dXMgZnJvbSBD
Ry4ga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQ2FjaGVk
SW1hZ2VDYWxsYmFjazo6bm90aWZ5RmluaXNoZWQKIAogICAgICAgICBraHRtbDo6Q2FjaGU6Omxv
YWRlcigpLT5yZW1vdmVCYWNrZ3JvdW5kRGVjb2RpbmdSZXF1ZXN0KHIpOwogCi0gICAgICAgIC8v
IFBva2UgdGhlIHBhcnQgdG8gZ2V0IGl0IHRvIGRvIGEgY2hlY2tDb21wbGV0ZWQoKS4KKyAgICAg
ICAgLy8gUG9rZSB0aGUgZnJhbWUgdG8gZ2V0IGl0IHRvIGRvIGEgY2hlY2tDb21wbGV0ZWQoKS4K
ICAgICAgICAgZW1pdCBraHRtbDo6Q2FjaGU6OmxvYWRlcigpLT5yZXF1ZXN0RG9uZSggZGwsIGNh
Y2hlZEltYWdlICk7CiAgICAgICAgIAogICAgICAgICBkZWxldGUgcjsKQEAgLTEyNiw3ICsxMjYs
NyBAQCB2b2lkIENhY2hlZEltYWdlQ2FsbGJhY2s6OmNsZWFyKCkgCiAKICAgICAgICAga2h0bWw6
OkNhY2hlOjpsb2FkZXIoKS0+cmVtb3ZlQmFja2dyb3VuZERlY29kaW5nUmVxdWVzdChyKTsKIAot
ICAgICAgICAvLyBQb2tlIHRoZSBwYXJ0IHRvIGdldCBpdCB0byBkbyBhIGNoZWNrQ29tcGxldGVk
KCkuCisgICAgICAgIC8vIFBva2UgdGhlIGZyYW1lIHRvIGdldCBpdCB0byBkbyBhIGNoZWNrQ29t
cGxldGVkKCkuCiAgICAgICAgIGVtaXQga2h0bWw6OkNhY2hlOjpsb2FkZXIoKS0+cmVxdWVzdEZh
aWxlZCggZGwsIGNhY2hlZEltYWdlICk7CiAKICAgICAgICAgZGVsZXRlIHI7CkBAIC0xMzQsNCAr
MTM0LDQgQEAgdm9pZCBDYWNoZWRJbWFnZUNhbGxiYWNrOjpjbGVhcigpIAogICAgIGNhY2hlZElt
YWdlID0gMDsKIH0KIAotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9OwpJbmRleDog
a2h0bWwvbWlzYy9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL21pc2MvRG9jTG9h
ZGVyLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9taXNjL0RvY0xvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNs
dWRlICJkb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgIktXUUxvYWRlci5oIgotI2luY2x1ZGUgImto
dG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiAjaW5jbHVkZSA8a3VybC5oPgogCkBA
IC00MywxMyArNDMsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIAogbmFtZXNwYWNlIGtodG1s
IHsKIAotRG9jTG9hZGVyOjpEb2NMb2FkZXIoS0hUTUxQYXJ0KiBwYXJ0LCBEb2N1bWVudEltcGwq
IGRvYykKK0RvY0xvYWRlcjo6RG9jTG9hZGVyKEZyYW1lICpmcmFtZSwgRG9jdW1lbnRJbXBsKiBk
b2MpCiB7CiAgICAgbV9jYWNoZVBvbGljeSA9IEtJTzo6Q0NfVmVyaWZ5OwogICAgIG1fZXhwaXJl
RGF0ZSA9IDA7CiAgICAgbV9iYXV0b2xvYWRJbWFnZXMgPSB0cnVlOwogICAgIG1fc2hvd0FuaW1h
dGlvbnMgPSBLSFRNTFNldHRpbmdzOjpLQW5pbWF0aW9uRW5hYmxlZDsKLSAgICBtX3BhcnQgPSBw
YXJ0OworICAgIG1fZnJhbWUgPSBmcmFtZTsKICAgICBtX2RvYyA9IGRvYzsKICAgICBtX2xvYWRJ
blByb2dyZXNzID0gZmFsc2U7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIERvY0xvYWRlcjo6
bmVlZFJlbG9hZChjb25zdCBLVVJMICZmCiBDYWNoZWRJbWFnZSAqRG9jTG9hZGVyOjpyZXF1ZXN0
SW1hZ2UoIGNvbnN0IERPTTo6RE9NU3RyaW5nICZ1cmwpCiB7CiAgICAgS1VSTCBmdWxsVVJMID0g
bV9kb2MtPmNvbXBsZXRlVVJMKHVybC5xc3RyaW5nKCkpOwotICAgIGlmICggbV9wYXJ0ICYmIG1f
cGFydC0+b25seUxvY2FsUmVmZXJlbmNlcygpICYmIGZ1bGxVUkwucHJvdG9jb2woKSAhPSAiZmls
ZSIpIHJldHVybiAwOworICAgIGlmICggbV9mcmFtZSAmJiBtX2ZyYW1lLT5vbmx5TG9jYWxSZWZl
cmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAKICAg
ICBpZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkgewogICAgICAgICBzZXRDYWNoZVBvbGlj
eShLSU86OkNDX1JlbG9hZCk7CkBAIC0xMTgsNyArMTE4LDcgQEAgQ2FjaGVkSW1hZ2UgKkRvY0xv
YWRlcjo6cmVxdWVzdEltYWdlKCBjbwogQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9hZGVyOjpy
ZXF1ZXN0U3R5bGVTaGVldCggY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3QgUVN0cmlu
ZyYgY2hhcnNldCkKIHsKICAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwodXJs
LnFzdHJpbmcoKSk7Ci0gICAgaWYgKCBtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxSZWZlcmVu
Y2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CisgICAgaWYg
KCBtX2ZyYW1lICYmIG1fZnJhbWUtPm9ubHlMb2NhbFJlZmVyZW5jZXMoKSAmJiBmdWxsVVJMLnBy
b3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKIAogICAgIGlmIChLV1FDaGVja0lmUmVsb2Fk
aW5nKHRoaXMpKSB7CiAgICAgICAgIHNldENhY2hlUG9saWN5KEtJTzo6Q0NfUmVsb2FkKTsKQEAg
LTEzNCw3ICsxMzQsNyBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0ICpEb2NMb2FkZXI6OnJlcXVlc3RT
CiBDYWNoZWRTY3JpcHQgKkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlwdCggY29uc3QgRE9NOjpET01T
dHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyYgY2hhcnNldCkKIHsKICAgICBLVVJMIGZ1bGxVUkwg
PSBtX2RvYy0+Y29tcGxldGVVUkwodXJsLnFzdHJpbmcoKSk7Ci0gICAgaWYgKCBtX3BhcnQgJiYg
bV9wYXJ0LT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJm
aWxlIikgcmV0dXJuIDA7CisgICAgaWYgKCBtX2ZyYW1lICYmIG1fZnJhbWUtPm9ubHlMb2NhbFJl
ZmVyZW5jZXMoKSAmJiBmdWxsVVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKIAog
ICAgIGlmIChLV1FDaGVja0lmUmVsb2FkaW5nKHRoaXMpKSB7CiAgICAgICAgIHNldENhY2hlUG9s
aWN5KEtJTzo6Q0NfUmVsb2FkKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBDYWNoZWRYU0xTdHlsZVNo
ZWV0KiBEb2NMb2FkZXI6OnJlcXVlc3RYCiB7CiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNv
bXBsZXRlVVJMKHVybC5xc3RyaW5nKCkpOwogICAgIAotICAgIGlmIChtX3BhcnQgJiYgbV9wYXJ0
LT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikg
cmV0dXJuIDA7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+b25seUxvY2FsUmVmZXJlbmNl
cygpICYmIGZ1bGxVUkwucHJvdG9jb2woKSAhPSAiZmlsZSIpIHJldHVybiAwOwogICAgIAogICAg
IGlmIChLV1FDaGVja0lmUmVsb2FkaW5nKHRoaXMpKQogICAgICAgICBzZXRDYWNoZVBvbGljeShL
SU86OkNDX1JlbG9hZCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIERv
Y0xvYWRlcjo6cmVxdWVzdFhCTAogICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVS
TCh1cmwucXN0cmluZygpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXMgdGhpcyByaWdodCBmb3Ig
WEJMPwotICAgIGlmIChtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYg
ZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CisgICAgaWYgKG1fZnJhbWUg
JiYgbV9mcmFtZS0+b25seUxvY2FsUmVmZXJlbmNlcygpICYmIGZ1bGxVUkwucHJvdG9jb2woKSAh
PSAiZmlsZSIpIHJldHVybiAwOwogICAgIAogICAgIGlmIChLV1FDaGVja0lmUmVsb2FkaW5nKHRo
aXMpKSB7CiAgICAgICAgIHNldENhY2hlUG9saWN5KEtJTzo6Q0NfUmVsb2FkKTsKSW5kZXg6IGto
dG1sL3htbC9kb21feG1saW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1sL2RvbV94bWxp
bXBsLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC94bWwvZG9tX3htbGltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjYsNyArNDY2LDcgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25JbXBsOjpjaGVja1N0eQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vICMjIyBz
b21lIHZhbGlkYXRpb24gb24gdGhlIFVSTD8KICAgICAgICAgICAgICAgICAvLyAjIyMgRklYTUUg
Y2hhcnNldAotCQlpZiAoZ2V0RG9jdW1lbnQoKS0+cGFydCgpKSB7CisJCWlmIChnZXREb2N1bWVu
dCgpLT5mcmFtZSgpKSB7CiAJCSAgICBtX2xvYWRpbmcgPSB0cnVlOwogCQkgICAgZ2V0RG9jdW1l
bnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7CiAJCSAgICBpZiAobV9jYWNoZWRTaGVldCkgbV9jYWNo
ZWRTaGVldC0+ZGVyZWYodGhpcyk7CkluZGV4OiBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAkocmV2aXNpb24gMTE5NjApCisrKyBr
aHRtbC94bWwvZG9tX2RvY2ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAog
Y2xhc3MgUVBhaW50RGV2aWNlOwogY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKIGNsYXNzIEtI
VE1MVmlldzsKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVyQXJl
bmE7CiAKIGNsYXNzIEtXUUFjY09iamVjdENhY2hlOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIHB1Ymxp
YzoKICAgICBRU3RyaW5nTGlzdCAmcmVzdG9yZVN0YXRlKCApIHsgcmV0dXJuIG1fc3RhdGU7IH0K
IAogICAgIEtIVE1MVmlldyAqdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldzsgfQotICAgIEtI
VE1MUGFydCAqcGFydCgpIGNvbnN0OworICAgIEZyYW1lICpmcmFtZSgpIGNvbnN0OwogCiAgICAg
UmFuZ2VJbXBsICpjcmVhdGVSYW5nZSgpOwogCkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkocmV2aXNpb24g
MTE5NjApCisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQAogI2luY2x1ZGUgImVjbWEva2pzX2JpbmRpbmcuaCIKICNpbmNsdWRlICJl
Y21hL2tqc19wcm94eS5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImtodG1s
X3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiAvLyBGSVhNRTogU2hvdWxkIG5vdCBoYXZl
IHRvIGluY2x1ZGUgdGhpcy4gIEN1dCB0aGUgSFRNTCBkZXBlbmRlbmN5IQogI2luY2x1ZGUgImh0
bWxuYW1lcy5oIgpAQCAtNTE3LDEzICs1MTcsMTMgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hF
dmVudChFdmVudEltcGwgKgogICAgIC8vIFdlJ3ZlIGhhZCBhdCBsZWFzdCBvbmUgcmVwb3J0IG9m
IGEgY3Jhc2ggb24gYSBwYWdlIHdoZXJlIGRvY3VtZW50IGlzIG5pbCBoZXJlLgogICAgIC8vIFVu
Zm9ydHVuYXRlbHkgdGhhdCBwYWdlIG5vIGxvbmdlciBleGlzdHMsIGJ1dCB3ZSdsbCBtYWtlIHRo
aXMgY29kZSByb2J1c3QgYWdhaW5zdAogICAgIC8vIHRoYXQgYW55d2F5LgotICAgIC8vIEZJWE1F
OiBNdWNoIGNvZGUgaW4gdGhpcyBjbGFzcyBhc3N1bWVzIGRvY3VtZW50IGlzIG5vbi1uaWw7IGl0
IHdvdWxkIGJlIGJldHRlciB0bwotICAgIC8vIGVuc3VyZSB0aGF0IGRvY3VtZW50IGNhbiBuZXZl
ciBiZSBuaWwuCi0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gbmlsOwotICAgIEtIVE1MVmlldyAqdmll
dyA9IG5pbDsKKyAgICAvLyBGSVhNRTogTXVjaCBjb2RlIGluIHRoaXMgY2xhc3MgYXNzdW1lcyBk
b2N1bWVudCBpcyBub24tbnVsbDsgaXQgd291bGQgYmUgYmV0dGVyIHRvCisgICAgLy8gZW5zdXJl
IHRoYXQgZG9jdW1lbnQgY2FuIG5ldmVyIGJlIG51bGwuCisgICAgRnJhbWUgKmZyYW1lID0gMDsK
KyAgICBLSFRNTFZpZXcgKnZpZXcgPSAwOwogICAgIAogICAgIGlmIChEb2N1bWVudEltcGwgKmRv
YyA9IGdldERvY3VtZW50KCkpIHsKLSAgICAgICAgcGFydCA9IGRvYy0+cGFydCgpOworICAgICAg
ICBmcmFtZSA9IGRvYy0+ZnJhbWUoKTsKICAgICAgICAgdmlldyA9IGRvYy0+dmlldygpOwogICAg
ICAgICAvLyBTaW5jZSBldmVudCBoYW5kbGluZyBjb2RlIGNvdWxkIGNhdXNlIHRoaXMgb2JqZWN0
IHRvIGJlIGRlbGV0ZWQsIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgbm93CiAgICAgICAg
IGlmICh2aWV3KQpAQCAtNTM1LDggKzUzNSw4IEBAIGJvb2wgTm9kZUltcGw6OmRpc3BhdGNoRXZl
bnQoRXZlbnRJbXBsICoKICAgICAvLyBJZiB0ZW1wRXZlbnQgaXMgdHJ1ZSwgdGhpcyBtZWFucyB0
aGF0IHRoZSBET00gaW1wbGVtZW50YXRpb24gd2lsbCBub3QgYmUgc3RvcmluZyBhIHJlZmVyZW5j
ZSB0byB0aGUgZXZlbnQsIGkuZS4KICAgICAvLyB0aGVyZSBpcyBubyB3YXkgdG8gcmV0cmlldmUg
aXQgZnJvbSBqYXZhc2NyaXB0IGlmIGEgc2NyaXB0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHJl
ZmVyZW5jZSB0byBpdCBpbiBhIHZhcmlhYmxlLgogICAgIC8vIFNvIHRoZXJlIGlzIG5vIG5lZWQg
Zm9yIHRoZSBpbnRlcnByZXRlciB0byBrZWVwIHRoZSBldmVudCBpbiBpdCdzIGNhY2hlCi0gICAg
aWYgKHRlbXBFdmVudCAmJiBwYXJ0ICYmIHBhcnQtPmpTY3JpcHQoKSkKLSAgICAgICAgcGFydC0+
alNjcmlwdCgpLT5maW5pc2hlZFdpdGhFdmVudChldnQpOworICAgIGlmICh0ZW1wRXZlbnQgJiYg
ZnJhbWUgJiYgZnJhbWUtPmpTY3JpcHQoKSkKKyAgICAgICAgZnJhbWUtPmpTY3JpcHQoKS0+Zmlu
aXNoZWRXaXRoRXZlbnQoZXZ0KTsKIAogICAgIGlmICh2aWV3KQogICAgICAgICB2aWV3LT5kZXJl
ZigpOwpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVt
ZW50aW1wbC5oIgogCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2luY2x1ZGUgIk1hY0ZyYW1l
LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAKICNpbmNsdWRlICJodG1sL2h0bWxwYXJzZXIu
aCIKQEAgLTc5Nyw4ICs3OTcsOCBAQCB2b2lkIEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgICAg
ICAgICBkb2MtPnNldEZvY3VzTm9kZSh0aGlzKTsKICAgICAgICAgICAgIGlmIChpc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCByZXN0b3Jl
IHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gaWYgdGhlcmUgaXMgb25lLCBpbnN0ZWFkIG9mIGFsd2F5
cyBzZWxlY3RpbmcgYWxsLgotICAgICAgICAgICAgICAgIGlmIChLV1EoZG9jLT5wYXJ0KCkpLT5z
ZWxlY3RDb250ZW50c09mTm9kZSh0aGlzKSkKLSAgICAgICAgICAgICAgICAgICAgS1dRKGRvYy0+
cGFydCgpKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgaWYgKE1hYyhkb2Mt
PmZyYW1lKCkpLT5zZWxlY3RDb250ZW50c09mTm9kZSh0aGlzKSkKKyAgICAgICAgICAgICAgICAg
ICAgTWFjKGRvYy0+ZnJhbWUoKSktPnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChyZW5kZXJlcigpICYmICFyZW5kZXJlcigpLT5pc1dpZGdldCgpKQogICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUo
Z2V0UmVjdCgpKTsKICAgICAgICAgfQpJbmRleDoga2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9kb20yX2V2ZW50c2ltcGwuaAkocmV2aXNpb24gMTE5
NjApCisrKyBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJt
aXNjL3NoYXJlZC5oIgogCi1jbGFzcyBLSFRNTFBhcnQ7CitjbGFzcyBGcmFtZTsKIGNsYXNzIFFL
ZXlFdmVudDsKIGNsYXNzIFFQaXhtYXA7CiBjbGFzcyBRUG9pbnQ7CkluZGV4OiBraHRtbC94bWwv
ZG9tX2RvY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJ
KHJldmlzaW9uIDExOTYwKQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgInJlbmRlcl9hcmVuYS5oIgogCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCiAjaW5jbHVkZSA8
a2dsb2JhbHNldHRpbmdzLmg+CiAjaW5jbHVkZSAia2h0bWxfc2V0dGluZ3MuaCIKQEAgLTQwNyw3
ICs0MDYsNyBAQCBEb2N1bWVudEltcGw6OkRvY3VtZW50SW1wbChET01JbXBsZW1lbnRhCiAgICAg
bV9hY2NDYWNoZSA9IDA7CiAgICAgCiAgICAgaWYgKCB2ICkgewotICAgICAgICBtX2RvY0xvYWRl
ciA9IG5ldyBEb2NMb2FkZXIodi0+cGFydCgpLCB0aGlzICk7CisgICAgICAgIG1fZG9jTG9hZGVy
ID0gbmV3IERvY0xvYWRlcih2LT5mcmFtZSgpLCB0aGlzICk7CiAgICAgICAgIHNldFBhaW50RGV2
aWNlKCBtX3ZpZXcgKTsKICAgICB9CiAgICAgZWxzZQpAQCAtOTAzLDExICs5MDIsMTEgQEAgRWxl
bWVudEltcGwgKkRvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QQogCiB2b2lkIERvY3VtZW50SW1w
bDo6dXBkYXRlVGl0bGUoKQogewotICAgIEtIVE1MUGFydCAqcCA9IHBhcnQoKTsKKyAgICBGcmFt
ZSAqcCA9IGZyYW1lKCk7CiAgICAgaWYgKCFwKQogICAgICAgICByZXR1cm47CiAKLSAgICBLV1Eo
cCktPnNldFRpdGxlKG1fdGl0bGUpOworICAgIE1hYyhwKS0+c2V0VGl0bGUobV90aXRsZSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRUaXRsZShET01TdHJpbmcgdGl0bGUsIE5vZGVJbXBs
ICp0aXRsZUVsZW1lbnQpCkBAIC05NzQsOSArOTczLDkgQEAgUVN0cmluZ0xpc3QgRG9jdW1lbnRJ
bXBsOjpkb2NTdGF0ZSgpCiAgICAgcmV0dXJuIHM7CiB9CiAKLUtIVE1MUGFydCAqRG9jdW1lbnRJ
bXBsOjpwYXJ0KCkgY29uc3QgCitGcmFtZSAqRG9jdW1lbnRJbXBsOjpmcmFtZSgpIGNvbnN0IAog
ewotICAgIHJldHVybiBtX3ZpZXcgPyBtX3ZpZXctPnBhcnQoKSA6IDA7IAorICAgIHJldHVybiBt
X3ZpZXcgPyBtX3ZpZXctPmZyYW1lKCkgOiAwOyAKIH0KIAogUmFuZ2VJbXBsICpEb2N1bWVudElt
cGw6OmNyZWF0ZVJhbmdlKCkKQEAgLTEwNDgsNyArMTA0Nyw3IEBAIHZvaWQgRG9jdW1lbnRJbXBs
OjpyZWNhbGNTdHlsZSggU3R5bGVDaGEKICAgICAgICAgYm9vbCBwcmludGluZyA9IG1fcGFpbnRE
ZXZpY2UgJiYgKG1fcGFpbnREZXZpY2UtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlByaW50ZXIp
OwogICAgICAgICBmb250RGVmLnVzZVByaW50ZXJGb250ID0gcHJpbnRpbmc7CiAgICAgICAgIGlm
IChtX3ZpZXcpIHsKLSAgICAgICAgICAgIGNvbnN0IEtIVE1MU2V0dGluZ3MgKnNldHRpbmdzID0g
bV92aWV3LT5wYXJ0KCktPnNldHRpbmdzKCk7CisgICAgICAgICAgICBjb25zdCBLSFRNTFNldHRp
bmdzICpzZXR0aW5ncyA9IG1fdmlldy0+ZnJhbWUoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgICAg
IGlmIChwcmludGluZyAmJiAhc2V0dGluZ3MtPnNob3VsZFByaW50QmFja2dyb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIF9zdHlsZS0+c2V0Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUodHJ1ZSk7
CiAgICAgICAgICAgICB9CkBAIC0xMjk2LDcgKzEyOTUsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6
dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlbmRlckNhbnZh
cyAqY2FudmFzID0gc3RhdGljX2Nhc3Q8UmVuZGVyQ2FudmFzKj4obV9yZW5kZXIpOwotICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgcyA9IHBhcnQoKS0+c2VsZWN0aW9uKCk7CisgICAgU2VsZWN0aW9u
Q29udHJvbGxlciBzID0gZnJhbWUoKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzLmlzUmFuZ2Uo
KSkgewogICAgICAgICBjYW52YXMtPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgfQpAQCAtMTMzOSwx
MiArMTMzOCwxMiBAQCB2b2lkIERvY3VtZW50SW1wbDo6b3BlbiggICkKIAogICAgIGltcGxpY2l0
T3BlbigpOwogCi0gICAgaWYgKHBhcnQoKSkgewotICAgICAgICBwYXJ0KCktPmRpZEV4cGxpY2l0
T3BlbigpOworICAgIGlmIChmcmFtZSgpKSB7CisgICAgICAgIGZyYW1lKCktPmRpZEV4cGxpY2l0
T3BlbigpOwogICAgIH0KIAogICAgIC8vIFRoaXMgaXMgd29yayB0aGF0IHdlIHNob3VsZCBwcm9i
YWJseSBkbyBpbiBjbGVhcigpLCBidXQgd2UgY2FuJ3QgaGF2ZSBpdAotICAgIC8vIGhhcHBlbiB3
aGVuIGltcGxpY2l0T3BlbigpIGlzIGNhbGxlZCB1bmxlc3Mgd2UgcmVvcmdhbml6ZSBLSFRNTFBh
cnQgY29kZS4KKyAgICAvLyBoYXBwZW4gd2hlbiBpbXBsaWNpdE9wZW4oKSBpcyBjYWxsZWQgdW5s
ZXNzIHdlIHJlb3JnYW5pemUgRnJhbWUgY29kZS4KICAgICBzZXRVUkwoUVN0cmluZygpKTsKICAg
ICBEb2N1bWVudEltcGwgKnBhcmVudCA9IHBhcmVudERvY3VtZW50KCk7CiAgICAgaWYgKHBhcmVu
dCkgewpAQCAtMTM4Myw4ICsxMzgyLDggQEAgSFRNTEVsZW1lbnRJbXBsKiBEb2N1bWVudEltcGw6
OmJvZHkoKQogCiB2b2lkIERvY3VtZW50SW1wbDo6Y2xvc2UoKQogewotICAgIGlmIChwYXJ0KCkp
Ci0gICAgICAgIHBhcnQoKS0+ZW5kSWZOb3RMb2FkaW5nKCk7CisgICAgaWYgKGZyYW1lKCkpCisg
ICAgICAgIGZyYW1lKCktPmVuZElmTm90TG9hZGluZygpOwogICAgIGltcGxpY2l0Q2xvc2UoKTsK
IH0KIApAQCAtMTM5Niw3ICsxMzk1LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OmltcGxpY2l0Q2xv
c2UoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB3YXNMb2NhdGlvbkNoYW5n
ZVBlbmRpbmcgPSBwYXJ0KCkgJiYgcGFydCgpLT5pc1NjaGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVu
ZGluZygpOworICAgIGJvb2wgd2FzTG9jYXRpb25DaGFuZ2VQZW5kaW5nID0gZnJhbWUoKSAmJiBm
cmFtZSgpLT5pc1NjaGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVuZGluZygpOwogICAgIGJvb2wgZG9s
b2FkID0gIXBhcnNpbmcoKSAmJiBtX3Rva2VuaXplciAmJiAhbV9wcm9jZXNzaW5nTG9hZEV2ZW50
ICYmICF3YXNMb2NhdGlvbkNoYW5nZVBlbmRpbmc7CiAgICAgCiAgICAgaWYgKCFkb2xvYWQpCkBA
IC0xNDMxLDggKzE0MzAsOCBAQCB2b2lkIERvY3VtZW50SW1wbDo6aW1wbGljaXRDbG9zZSgpCiAg
ICAgaWYgKG9ubG9hZFRhcmdldCkgewogICAgICAgICBkaXNwYXRjaEltYWdlTG9hZEV2ZW50c05v
dygpOwogICAgICAgICBvbmxvYWRUYXJnZXQtPmRpc3BhdGNoV2luZG93RXZlbnQobG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBpZiAoS0hUTUxQYXJ0ICpwID0gcGFydCgpKQotICAg
ICAgICAgICAgS1dRKHApLT5oYW5kbGVkT25sb2FkRXZlbnRzKCk7CisgICAgICAgIGlmIChGcmFt
ZSAqcCA9IGZyYW1lKCkpCisgICAgICAgICAgICBNYWMocCktPmhhbmRsZWRPbmxvYWRFdmVudHMo
KTsKICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCiAgICAgICAgIGlmICghb3du
ZXJFbGVtZW50KCkpCiAgICAgICAgICAgICBwcmludGYoIm9ubG9hZCBmaXJlZCBhdCAlZFxuIiwg
ZWxhcHNlZFRpbWUoKSk7CkBAIC0xNDQ1LDE1ICsxNDQ0LDE1IEBAIHZvaWQgRG9jdW1lbnRJbXBs
OjppbXBsaWNpdENsb3NlKCkKICAgICAvLyBmaXJlcy4gVGhpcyB3aWxsIGltcHJvdmUgb25sb2Fk
IHNjb3JlcywgYW5kIG90aGVyIGJyb3dzZXJzIGRvIGl0LgogICAgIC8vIElmIHRoZXkgd2FubmEg
Y2hlYXQsIHdlIGNhbiB0b28uIC1kd2gKIAotICAgIGlmIChwYXJ0KCkgJiYgcGFydCgpLT5pc1Nj
aGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVuZGluZygpICYmIG1fc3RhcnRUaW1lLmVsYXBzZWQoKSA8
IGNMYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkgeworICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCkt
PmlzU2NoZWR1bGVkTG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkgJiYgbV9zdGFydFRpbWUuZWxhcHNl
ZCgpIDwgY0xheW91dFNjaGVkdWxlVGhyZXNob2xkKSB7CiAgICAgICAgIC8vIEp1c3QgYmFpbCBv
dXQuIEJlZm9yZSBvciBkdXJpbmcgdGhlIG9ubG9hZCB3ZSB3ZXJlIHNoaWZ0ZWQgdG8gYW5vdGhl
ciBwYWdlLgogICAgICAgICAvLyBUaGUgb2xkIGktQmVuY2ggc3VpdGUgZG9lcyB0aGlzLiBXaGVu
IHRoaXMgaGFwcGVucyBkb24ndCBib3RoZXIgcGFpbnRpbmcgb3IgbGF5aW5nIG91dC4gICAgICAg
IAogICAgICAgICB2aWV3KCktPnVuc2NoZWR1bGVSZWxheW91dCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKHBhcnQoKSkKLSAgICAgICAgcGFydCgpLT5jaGVja0VtaXRMb2Fk
RXZlbnQoKTsKKyAgICBpZiAoZnJhbWUoKSkKKyAgICAgICAgZnJhbWUoKS0+Y2hlY2tFbWl0TG9h
ZEV2ZW50KCk7CiAKICAgICAvLyBOb3cgZG8gb3VyIHBhaW50aW5nL2xheW91dCwgYnV0IG9ubHkg
aWYgd2UgYXJlbid0IGluIGEgc3ViZnJhbWUgb3IgaWYgd2UncmUgaW4gYSBzdWJmcmFtZQogICAg
IC8vIHRoYXQgaGFzIGJlZW4gc2l6ZWQgYWxyZWFkeS4gIE90aGVyd2lzZSwgb3VyIHZpZXcgc2l6
ZSB3b3VsZCBiZSBpbmNvcnJlY3QsIHNvIGRvaW5nIGFueSAKQEAgLTE4MjcsNyArMTgyNiw3IEBA
IHZvaWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNzSHR0cEVxdWl2KGNvbnMKIHsKICAgICBhc3NlcnQo
IWVxdWl2LmlzTnVsbCgpICYmICFjb250ZW50LmlzTnVsbCgpKTsKIAotICAgIEtIVE1MUGFydCAq
cGFydCA9IHRoaXMtPnBhcnQoKTsKKyAgICBGcmFtZSAqZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwog
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiZGVmYXVsdC1zdHlsZSIpKSB7CiAg
ICAgICAgIC8vIFRoZSBwcmVmZXJyZWQgc3R5bGUgc2V0IGhhcyBiZWVuIG92ZXJyaWRkZW4gYXMg
cGVyIHNlY3Rpb24gCkBAIC0xODM2LDExICsxODM1LDExIEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpw
cm9jZXNzSHR0cEVxdWl2KGNvbnMKICAgICAgICAgLy8gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSB0
ZXN0IGF0OgogICAgICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2V2aWwvY3NzL2lt
cG9ydC9tYWluL3ByZWZlcnJlZC5odG1sCiAgICAgICAgIC8vIC1kd2gKLSAgICAgICAgcGFydC0+
ZC0+bV9zaGVldFVzZWQgPSBjb250ZW50LnFzdHJpbmcoKTsKKyAgICAgICAgZnJhbWUtPmQtPm1f
c2hlZXRVc2VkID0gY29udGVudC5xc3RyaW5nKCk7CiAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVz
aGVldFNldCA9IGNvbnRlbnQ7CiAgICAgICAgIHVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICB9
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJyZWZyZXNoIikgJiYgcGFy
dC0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZXF1aXYsICJyZWZyZXNoIikgJiYgZnJhbWUtPm1ldGFSZWZyZXNoRW5hYmxlZCgpKQogICAgIHsK
ICAgICAgICAgLy8gZ2V0IGRlbGF5IGFuZCB1cmwKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250
ZW50LnFzdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTE4NTQsNyArMTg1Myw3IEBAIHZv
aWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNzSHR0cEVxdWl2KGNvbnMKICAgICAgICAgICAgIGludCBk
ZWxheSA9IDA7CiAJICAgIGRlbGF5ID0gc3RyLnRvSW50KCZvayk7CiAJICAgIC8vIFdlIHdhbnQg
YSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoZSByZWZyZXNoIHRpbWVvdXQgPiAxIHNlY29uZAotCSAg
ICBpZihvayAmJiBwYXJ0KSBwYXJ0LT5zY2hlZHVsZVJlZGlyZWN0aW9uKGRlbGF5LCBwYXJ0LT51
cmwoKS51cmwoKSwgZGVsYXkgPD0gMSk7CisJICAgIGlmKG9rICYmIGZyYW1lKSBmcmFtZS0+c2No
ZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgZnJhbWUtPnVybCgpLnVybCgpLCBkZWxheSA8PSAxKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRvdWJsZSBkZWxheSA9IDA7CiAgICAgICAg
ICAgICBib29sIG9rID0gZmFsc2U7CkBAIC0xODY5LDkgKzE4NjgsOSBAQCB2b2lkIERvY3VtZW50
SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCgp
ICYmIHN0clswXSA9PSAnPScpCiAgICAgICAgICAgICAgICAgc3RyID0gc3RyLm1pZCgxKS5zdHJp
cFdoaXRlU3BhY2UoKTsKICAgICAgICAgICAgIHN0ciA9IHBhcnNlVVJMKERPTVN0cmluZyhzdHIp
KS5xc3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAob2sgJiYgcGFydCkKKyAgICAgICAgICAgIGlm
IChvayAmJiBmcmFtZSkKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rvcnkg
aXRlbSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKLSAgICAgICAgICAgICAgICBw
YXJ0LT5zY2hlZHVsZVJlZGlyZWN0aW9uKGRlbGF5LCBjb21wbGV0ZVVSTCggc3RyICksIGRlbGF5
IDw9IDEpOworICAgICAgICAgICAgICAgIGZyYW1lLT5zY2hlZHVsZVJlZGlyZWN0aW9uKGRlbGF5
LCBjb21wbGV0ZVVSTCggc3RyICksIGRlbGF5IDw9IDEpOwogICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiZXhwaXJlcyIpKQpAQCAtMTg4MSwx
MCArMTg4MCwxMCBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAg
ICAgICAgIGlmIChtX2RvY0xvYWRlcikKICAgICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRFeHBp
cmVEYXRlKGV4cGlyZV9kYXRlKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdD
YXNlKGVxdWl2LCAicHJhZ21hIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjYWNoZS1j
b250cm9sIikpICYmIHBhcnQpCisgICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2
LCAicHJhZ21hIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjYWNoZS1jb250cm9sIikp
ICYmIGZyYW1lKQogICAgIHsKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnFzdHJpbmco
KS5sb3dlcigpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBLVVJMIHVybCA9IHBhcnQtPnVy
bCgpOworICAgICAgICBLVVJMIHVybCA9IGZyYW1lLT51cmwoKTsKICAgICB9CiAgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJzZXQtY29va2llIikpCiAgICAgewpAQCAtMTk4
NywxNCArMTk4NiwxNCBAQCBET01TdHJpbmcgRG9jdW1lbnRJbXBsOjpwcmVmZXJyZWRTdHlsZXNo
CiAKIERPTVN0cmluZyBEb2N1bWVudEltcGw6OnNlbGVjdGVkU3R5bGVzaGVldFNldCgpCiB7Ci0g
IHJldHVybiB2aWV3KCkgPyB2aWV3KCktPnBhcnQoKS0+ZC0+bV9zaGVldFVzZWQgOiBET01TdHJp
bmcoKTsKKyAgcmV0dXJuIHZpZXcoKSA/IHZpZXcoKS0+ZnJhbWUoKS0+ZC0+bV9zaGVldFVzZWQg
OiBET01TdHJpbmcoKTsKIH0KIAogdm9pZCAKIERvY3VtZW50SW1wbDo6c2V0U2VsZWN0ZWRTdHls
ZXNoZWV0U2V0KGNvbnN0IERPTVN0cmluZyYgYVN0cmluZykKIHsKICAgaWYgKHZpZXcoKSkgewot
ICAgIHZpZXcoKS0+cGFydCgpLT5kLT5tX3NoZWV0VXNlZCA9IGFTdHJpbmcucXN0cmluZygpOwor
ICAgIHZpZXcoKS0+ZnJhbWUoKS0+ZC0+bV9zaGVldFVzZWQgPSBhU3RyaW5nLnFzdHJpbmcoKTsK
ICAgICB1cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICBy
ZW5kZXJlcigpLT5yZXBhaW50KCk7CkBAIC0yMTMwLDcgKzIxMjksNyBAQCB2b2lkIERvY3VtZW50
SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMg
c2hlZXQuCiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcmVsID0gZS0+Z2V0QXR0cmlidXRl
KHJlbEF0dHIpLnFzdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShzdHlsZVRhZykgfHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQgPSB2aWV3KCktPnBhcnQoKS0+
ZC0+bV9zaGVldFVzZWQgPSB0aXRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVy
cmVkU3R5bGVzaGVldFNldCA9IHZpZXcoKS0+ZnJhbWUoKS0+ZC0+bV9zaGVldFVzZWQgPSB0aXRs
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2F2YWlsYWJsZVNoZWV0cy5jb250YWlucyggdGl0bGUgKSApCkBAIC0yMTUy
LDcgKzIxNTEsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJl
ZmVycmVkU3R5bGVzaGVldFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0ID0gdmlldygpLT5wYXJ0KCktPmQtPm1fc2hlZXRVc2VkID0gdGl0bGU7
CisgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gdmlldygpLT5mcmFt
ZSgpLT5kLT5tX3NoZWV0VXNlZCA9IHRpdGxlOwogCiAgICAgICAgICAgICBpZiAoIXRpdGxlLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3ByZWZlcnJlZFN0eWxl
c2hlZXRTZXQpCkBAIC0yMjExLDEwICsyMjEwLDEwIEBAIGJvb2wgRG9jdW1lbnRJbXBsOjpyZWxp
bnF1aXNoZXNFZGl0aW5nRm8KICAgICBhc3NlcnQobm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7
CiAKICAgICBOb2RlSW1wbCAqcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAg
ICBpZiAoIXBhcnQoKSB8fCAhcm9vdCkKKyAgICBpZiAoIWZyYW1lKCkgfHwgIXJvb3QpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYXJ0KCktPnNob3VsZEVuZEVkaXRpbmco
cmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgpKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+c2hvdWxk
RW5kRWRpdGluZyhyYW5nZU9mQ29udGVudHMocm9vdCkuZ2V0KCkpOwogfQogCiBib29sIERvY3Vt
ZW50SW1wbDo6YWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlSW1wbCAqbm9kZSkKQEAgLTIyMjMsMTAg
KzIyMjIsMTAgQEAgYm9vbCBEb2N1bWVudEltcGw6OmFjY2VwdHNFZGl0aW5nRm9jdXMoTgogICAg
IGFzc2VydChub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKIAogICAgIE5vZGVJbXBsICpyb290
ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGlmICghcGFydCgpIHx8ICFyb290
KQorICAgIGlmICghZnJhbWUoKSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIHBhcnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlT2ZDb250ZW50cyhyb290
KS5nZXQoKSk7CisgICAgcmV0dXJuIGZyYW1lKCktPnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZU9m
Q29udGVudHMocm9vdCkuZ2V0KCkpOwogfQogCiBjb25zdCBRVmFsdWVMaXN0PERhc2hib2FyZFJl
Z2lvblZhbHVlPiAmIERvY3VtZW50SW1wbDo6ZGFzaGJvYXJkUmVnaW9ucygpIGNvbnN0CkBAIC0y
MzQyLDE0ICsyMzQxLDE0IEBAIFNldEZvY3VzTm9kZURvbmU6CiAKIHZvaWQgRG9jdW1lbnRJbXBs
OjpjbGVhclNlbGVjdGlvbklmTmVlZGVkKE5vZGVJbXBsICpuZXdGb2N1c05vZGUpCiB7Ci0gICAg
aWYgKCFwYXJ0KCkpCisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBDbGVhciB0aGUgc2VsZWN0aW9uIHdoZW4gY2hhbmdpbmcgdGhlIGZvY3VzIG5vZGUgdG8gbnVs
bCBvciB0byBhIG5vZGUgdGhhdCBpcyBub3QgCiAgICAgLy8gY29udGFpbmVkIGJ5IHRoZSBjdXJy
ZW50IHNlbGVjdGlvbi4KLSAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIgPSBwYXJ0KCktPnNl
bGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5lciA9
IGZyYW1lKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpOwogICAgIGlmICghbmV3Rm9jdXNO
b2RlIHx8IChzdGFydENvbnRhaW5lciAmJiBzdGFydENvbnRhaW5lciAhPSBuZXdGb2N1c05vZGUg
JiYgIXN0YXJ0Q29udGFpbmVyLT5pc0FuY2VzdG9yKG5ld0ZvY3VzTm9kZSkpKQotICAgICAgICBw
YXJ0KCktPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIGZyYW1lKCktPmNsZWFyU2VsZWN0aW9u
KCk7CiB9CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRDU1NUYXJnZXQoTm9kZUltcGwqIG4pCkBA
IC0yNTA5LDggKzI1MDgsOCBAQCBib29sIERvY3VtZW50SW1wbDo6aGFzV2luZG93RXZlbnRMaXN0
ZW5lCiAKIEV2ZW50TGlzdGVuZXIgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEV2ZW50TGlzdGVu
ZXIoY29uc3QgRE9NU3RyaW5nJiBjb2RlLCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAocGFy
dCgpKSB7Ci0JcmV0dXJuIHBhcnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoY29kZSwgbm9k
ZSk7CisgICAgaWYgKGZyYW1lKCkpIHsKKwlyZXR1cm4gZnJhbWUoKS0+Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoY29kZSwgbm9kZSk7CiAgICAgfSBlbHNlIHsKIAlyZXR1cm4gTlVMTDsKICAgICB9
CkBAIC0yNTc5LDEwICsyNTc4LDEwIEBAIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6Om93bmVy
RWxlbWVudCgKICAgICBLSFRNTFZpZXcgKmNoaWxkVmlldyA9IHZpZXcoKTsKICAgICBpZiAoIWNo
aWxkVmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgS0hUTUxQYXJ0ICpjaGlsZFBhcnQgPSBj
aGlsZFZpZXctPnBhcnQoKTsKKyAgICBGcmFtZSAqY2hpbGRQYXJ0ID0gY2hpbGRWaWV3LT5mcmFt
ZSgpOwogICAgIGlmICghY2hpbGRQYXJ0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBLSFRNTFBh
cnQgKnBhcmVudCA9IGNoaWxkUGFydC0+cGFyZW50UGFydCgpOworICAgIEZyYW1lICpwYXJlbnQg
PSBjaGlsZFBhcnQtPnBhcmVudEZyYW1lKCk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIENoaWxkRnJhbWUgKmNoaWxkRnJhbWUgPSBwYXJlbnQtPmNoaWxkRnJhbWUo
Y2hpbGRQYXJ0KTsKQEAgLTI1OTYsOCArMjU5NSw4IEBAIEVsZW1lbnRJbXBsICpEb2N1bWVudElt
cGw6Om93bmVyRWxlbWVudCgKIAogRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6cmVmZXJyZXIoKSBj
b25zdAogewotICAgIGlmICggcGFydCgpICkKLSAgICAgICAgcmV0dXJuIEtXUShwYXJ0KCkpLT5p
bmNvbWluZ1JlZmVycmVyKCk7CisgICAgaWYgKCBmcmFtZSgpICkKKyAgICAgICAgcmV0dXJuIE1h
YyhmcmFtZSgpKS0+aW5jb21pbmdSZWZlcnJlcigpOwogICAgIAogICAgIHJldHVybiBET01TdHJp
bmcoKTsKIH0KQEAgLTMxNTUsMTAgKzMxNTQsMTAgQEAgYm9vbCBEb2N1bWVudEltcGw6OmluRGVz
aWduTW9kZSgpIGNvbnN0CiAKIERvY3VtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpwYXJlbnREb2N1
bWVudCgpIGNvbnN0CiB7Ci0gICAgS0hUTUxQYXJ0ICpjaGlsZFBhcnQgPSBwYXJ0KCk7CisgICAg
RnJhbWUgKmNoaWxkUGFydCA9IGZyYW1lKCk7CiAgICAgaWYgKCFjaGlsZFBhcnQpCiAgICAgICAg
IHJldHVybiAwOwotICAgIEtIVE1MUGFydCAqcGFyZW50ID0gY2hpbGRQYXJ0LT5wYXJlbnRQYXJ0
KCk7CisgICAgRnJhbWUgKnBhcmVudCA9IGNoaWxkUGFydC0+cGFyZW50RnJhbWUoKTsKICAgICBp
ZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHBhcmVudC0+eG1sRG9j
SW1wbCgpOwpJbmRleDoga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC94
bWwveG1sX3Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlIDxrZGVi
dWcuaD4KICNpbmNsdWRlIDxrbG9jYWxlLmg+CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIFhN
TFRva2VuaXplcjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uCiAgICAgICAgIHBpLT5hdHRhY2goKTsK
IAogICAgIC8vIGRvbid0IGxvYWQgc3R5bGVzaGVldHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRz
Ci0gICAgaWYgKG1fZG9jLT5wYXJ0KCkpIHsKKyAgICBpZiAobV9kb2MtPmZyYW1lKCkpIHsKICAg
ICAgICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAhcGktPmNoZWNrU3R5bGVTaGVldCgpOwogI2lmZGVm
IEtIVE1MX1hTTFQKICAgICAgICAgLy8gUHJldGVuZCB3ZSBkaWRuJ3Qgc2VlIHRoaXMgUEkgaWYg
d2UncmUgdGhlIHJlc3VsdCBvZiBhIHRyYW5zZm9ybS4KQEAgLTgzMiw3ICs4MzIsNyBAQCB2b2lk
IFhNTFRva2VuaXplcjo6ZXhlY3V0ZVNjcmlwdHMoKQogICAgICAgICAgICAgc2NyaXB0SHJlZiA9
IHNjcmlwdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAjZW5k
aWYKICAgICAgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3JpcHRzIGZvciBzdGFuZGFsb25l
IGRvY3VtZW50cyAoZm9yIG5vdykKLSAgICAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSAm
JiBtX2RvYy0+cGFydCgpKSB7CisgICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkgJiYg
bV9kb2MtPmZyYW1lKCkpIHsKICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRl
CiAgICAgICAgICAgICBRU3RyaW5nIGNoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5nZXRBdHRyaWJ1
dGUoY2hhcnNldEF0dHIpLnFzdHJpbmcoKTsKICAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0ID0g
bV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIGNoYXJzZXQpOwpA
QCAtODUwLDcgKzg1MCw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpleGVjdXRlU2NyaXB0cygpCiAg
ICAgICAgICAgICAvLyBhbm90aGVyIHBhZ2UsIGV0Yy4gKGFsc28gaW4gbm90aWZ5RmluaXNoZWQo
KSkKICAgICAgICAgICAgIC8vICMjIyB0aGUgc2NyaXB0IG1heSBhZGQgYW5vdGhlciBzY3JpcHQg
bm9kZSBhZnRlciB0aGlzIG9uZSB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQKICAgICAgICAgICAg
IGlmIChtX3ZpZXcpCi0gICAgICAgICAgICAgICAgbV92aWV3LT5wYXJ0KCktPmV4ZWN1dGVTY3Jp
cHQoc2NyaXB0Q29kZSk7CisgICAgICAgICAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5leGVjdXRl
U2NyaXB0KHNjcmlwdENvZGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04NjgsNyArODY4LDcg
QEAgdm9pZCBYTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZAogICAgICAgICBET01T
dHJpbmcgc2NyaXB0U291cmNlID0gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpOwogICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiAgICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsK
LSAgICAgICAgbV92aWV3LT5wYXJ0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0U291cmNlLnFzdHJp
bmcoKSk7CisgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHRTb3Vy
Y2UucXN0cmluZygpKTsKICAgICAgICAgZXhlY3V0ZVNjcmlwdHMoKTsKICAgICB9CiB9CkluZGV4
OiBraHRtbC9raHRtbHZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9raHRtbHZpZXcuaAkocmV2
aXNpb24gMTE5NjApCisrKyBraHRtbC9raHRtbHZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBuYW1lc3BhY2Uga2h0bWwgewogICAgIHZvaWQgYXBwbHlSdWxlKERPTTo6Q1NT
UHJvcGVydHkgKnByb3ApOwogfTsKIAotY2xhc3MgS0hUTUxQYXJ0OworY2xhc3MgRnJhbWU7CiBj
bGFzcyBLSFRNTFZpZXdQcml2YXRlOwogCiAvKioKQEAgLTc4LDcgKzc4LDcgQEAgY2xhc3MgS0hU
TUxWaWV3IDogcHVibGljIFFTY3JvbGxWaWV3CiAgICAgZnJpZW5kIGNsYXNzIERPTTo6SFRNTEZv
cm1FbGVtZW50SW1wbDsKICAgICBmcmllbmQgY2xhc3MgRE9NOjpIVE1MQW5jaG9yRWxlbWVudElt
cGw7CiAgICAgZnJpZW5kIGNsYXNzIERPTTo6RG9jdW1lbnRJbXBsOwotICAgIGZyaWVuZCBjbGFz
cyBLSFRNTFBhcnQ7CisgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwogICAgIGZyaWVuZCBjbGFzcyBr
aHRtbDo6UmVuZGVyQ2FudmFzOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyT2JqZWN0
OwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyQm94OwpAQCAtODgsMjAgKzg4LDIwIEBA
IGNsYXNzIEtIVE1MVmlldyA6IHB1YmxpYyBRU2Nyb2xsVmlldwogICAgIGZyaWVuZCBjbGFzcyBr
aHRtbDo6UmVuZGVyV2lkZ2V0OwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NTU3R5bGVTZWxl
Y3RvcjsKICAgICBmcmllbmQgdm9pZCBraHRtbDo6YXBwbHlSdWxlKERPTTo6Q1NTUHJvcGVydHkg
KnByb3ApOwotICAgIGZyaWVuZCBjbGFzcyBLV1FLSFRNTFBhcnQ7CisgICAgZnJpZW5kIGNsYXNz
IE1hY0ZyYW1lOwogCiBwdWJsaWM6CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIEtIVE1M
Vmlldy4KICAgICAgKi8KLSAgICBLSFRNTFZpZXcoIEtIVE1MUGFydCAqcGFydCwgUVdpZGdldCAq
cGFyZW50LCBjb25zdCBjaGFyICpuYW1lPTAgKTsKKyAgICBLSFRNTFZpZXcoIEZyYW1lICpmcmFt
ZSwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgICB2aXJ0dWFsIH5L
SFRNTFZpZXcoKTsKIAogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBL
SFRNTFBhcnQgdGhhdCBpcworICAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBGcmFtZSB0
aGF0IGlzCiAgICAgICogcmVuZGVyaW5nIHRoZSBwYWdlLgogICAgICAqKi8KLSAgICBLSFRNTFBh
cnQgKnBhcnQoKSBjb25zdCB7IHJldHVybiBtX3BhcnQ7IH0KKyAgICBGcmFtZSAqZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKICAgICBpbnQgZnJhbWVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIF93aWR0aDsgfQogCkBAIC0yNzgsNyArMjc4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQg
X21hcmdpbldpZHRoOwogICAgIGludCBfbWFyZ2luSGVpZ2h0OwogCi0gICAgS0hUTUxQYXJ0ICpt
X3BhcnQ7CisgICAgRnJhbWUgKm1fZnJhbWU7CiAgICAgS0hUTUxWaWV3UHJpdmF0ZSAqZDsKIAog
ICAgIFFTdHJpbmcgbV9tZWRpdW07ICAgLy8gbWVkaWEgdHlwZQpJbmRleDoga2h0bWwvaHRtbC9o
dG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIu
Y3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIK
IAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInht
bC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgpAQCAtMzY3LDcgKzM2
Nyw3IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgCiAgICAg
Q2FjaGVkU2NyaXB0KiBjcyA9IDA7CiAgICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3JpcHRz
IGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKLSAgICBpZiAoIXNjcmlwdFNyYy5p
c0VtcHR5KCkgJiYgcGFyc2VyLT5kb2MoKS0+cGFydCgpKSB7CisgICAgaWYgKCFzY3JpcHRTcmMu
aXNFbXB0eSgpICYmIHBhcnNlci0+ZG9jKCktPmZyYW1lKCkpIHsKICAgICAgICAgLy8gZm9yZ2V0
IHdoYXQgd2UganVzdCBnb3Q7IGxvYWQgZnJvbSBzcmMgdXJsIGluc3RlYWQKICAgICAgICAgaWYg
KCFwYXJzZXItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7CiAjaWZkZWYgSU5T
VFJVTUVOVF9MQVlPVVRfU0NIRURVTElORwpAQCAtNDczLDE0ICs0NzMsMTQgQEAgSFRNTFRva2Vu
aXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogSFRNTFRva2VuaXplcjo6U3RhdGUgSFRN
TFRva2VuaXplcjo6c2NyaXB0RXhlY3V0aW9uKGNvbnN0IFFTdHJpbmcmIHN0ciwgU3RhdGUgc3Rh
dGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgc2NyaXB0VVJMLCBpbnQgYmFzZUxpbmUpCiB7Ci0gICAgaWYgKCF2aWV3IHx8ICF2
aWV3LT5wYXJ0KCkpCisgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5mcmFtZSgpKQogICAgICAgICBy
ZXR1cm4gc3RhdGU7CiAgICAgYm9vbCBvbGRzY3JpcHQgPSBzdGF0ZS5pblNjcmlwdCgpOwogICAg
IG1fZXhlY3V0aW5nU2NyaXB0Kys7CiAgICAgc3RhdGUuc2V0SW5TY3JpcHQoZmFsc2UpOwogICAg
IFFTdHJpbmcgdXJsOyAgICAKICAgICBpZiAoc2NyaXB0VVJMLmlzTnVsbCgpKQotICAgICAgdXJs
ID0gdmlldy0+cGFydCgpLT54bWxEb2NJbXBsKCktPlVSTCgpOworICAgICAgdXJsID0gdmlldy0+
ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5VUkwoKTsKICAgICBlbHNlCiAgICAgICB1cmwgPSBzY3Jp
cHRVUkw7CiAKQEAgLTQ5NCw3ICs0OTQsNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9r
ZW5pemVyOjpzY3JpCiAjZW5kaWYKIAogICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICB2aWV3LT5w
YXJ0KCktPmV4ZWN1dGVTY3JpcHQodXJsLGJhc2VMaW5lLDAsc3RyKTsKKyAgICB2aWV3LT5mcmFt
ZSgpLT5leGVjdXRlU2NyaXB0KHVybCxiYXNlTGluZSwwLHN0cik7CiAgICAgc3RhdGUgPSBtX3N0
YXRlOwogCiAgICAgc3RhdGUuc2V0QWxsb3dZaWVsZCh0cnVlKTsKQEAgLTExOTYsOCArMTE5Niw4
IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnBhcnMKICAgICAgICAgICAg
ICAgICBzY3JpcHRTcmMgPSBRU3RyaW5nOjpudWxsOwogICAgICAgICAgICAgICAgIHNjcmlwdFNy
Y0NoYXJzZXQgPSBRU3RyaW5nOjpudWxsOwogICAgICAgICAgICAgICAgIGlmICggY3VyclRva2Vu
LmF0dHJzICYmIC8qIHBvdGVudGlhbGx5IGhhdmUgYSBBVFRSX1NSQyA/ICovCi0JCSAgICAgcGFy
c2VyLT5kb2MoKS0+cGFydCgpICYmCi0gICAgICAgICAgICAgICAgICAgICBwYXJzZXItPmRvYygp
LT5wYXJ0KCktPmpTY3JpcHRFbmFibGVkKCkgJiYgLyoganNjcmlwdCBhbGxvd2VkIGF0IGFsbD8g
Ki8KKwkJICAgICBwYXJzZXItPmRvYygpLT5mcmFtZSgpICYmCisgICAgICAgICAgICAgICAgICAg
ICBwYXJzZXItPmRvYygpLT5mcmFtZSgpLT5qU2NyaXB0RW5hYmxlZCgpICYmIC8qIGpzY3JpcHQg
YWxsb3dlZCBhdCBhbGw/ICovCiAgICAgICAgICAgICAgICAgICAgICB2aWV3IC8qIGFyZSB3ZSBh
IHJlZ3VsYXIgdG9rZW5pemVyIG9yIGp1c3QgZm9yIGlubmVySFRNTCA/ICovCiAgICAgICAgICAg
ICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSBjdXJyVG9rZW4uYXR0
cnMtPmdldEF0dHJpYnV0ZUl0ZW0oc3JjQXR0cikpKQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAgSFRN
TFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6cGFycwogICAgICAgICAgICAgICAgICAg
ICBpZiAoKGEgPSBjdXJyVG9rZW4uYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oY2hhcnNldEF0dHIp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFNyY0NoYXJzZXQgPSBhLT52YWx1ZSgp
LnFzdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
Y3JpcHRTcmNDaGFyc2V0LmlzRW1wdHkoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3Jp
cHRTcmNDaGFyc2V0ID0gcGFyc2VyLT5kb2MoKS0+cGFydCgpLT5lbmNvZGluZygpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc2NyaXB0U3JjQ2hhcnNldCA9IHBhcnNlci0+ZG9jKCktPmZyYW1l
KCktPmVuY29kaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIHR5cGUgYmVmb3Jl
IGxhbmd1YWdlLCBzaW5jZSBsYW5ndWFnZSBpcyBkZXByZWNhdGVkICovCiAgICAgICAgICAgICAg
ICAgICAgIGlmICgoYSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0
cikpICE9IDAgJiYgIWEtPnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmRUeXBlQXR0cmlidXRlID0gdHJ1ZTsKQEAgLTEzOTYsMTEgKzEzOTYsMTEgQEAgYm9v
bCBIVE1MVG9rZW5pemVyOjp3cml0ZShjb25zdCBUb2tlbml6ZQogICAgIFFUaW1lIHN0YXJ0VGlt
ZTsKICAgICBzdGFydFRpbWUuc3RhcnQoKTsKIAotICAgIEtIVE1MUGFydCogcGFydCA9IHBhcnNl
ci0+ZG9jKCktPnBhcnQoKTsKKyAgICBGcmFtZSAqZnJhbWUgPSBwYXJzZXItPmRvYygpLT5mcmFt
ZSgpOwogCiAgICAgU3RhdGUgc3RhdGUgPSBtX3N0YXRlOwogCi0gICAgd2hpbGUgKCFzcmMuaXNF
bXB0eSgpICYmICghcGFydCB8fCAhcGFydC0+aXNTY2hlZHVsZWRMb2NhdGlvbkNoYW5nZVBlbmRp
bmcoKSkpIHsKKyAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkgJiYgKCFmcmFtZSB8fCAhZnJhbWUt
PmlzU2NoZWR1bGVkTG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpKSB7CiAgICAgICAgIGlmICghY29u
dGludWVQcm9jZXNzaW5nKHByb2Nlc3NlZENvdW50LCBzdGFydFRpbWUsIHN0YXRlKSkKICAgICAg
ICAgICAgIGJyZWFrOwogCkBAIC0xNTM3LDggKzE1MzcsOCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6
OnN0b3BQYXJzaW5nKCkKIAogICAgIC8vIFRoZSBwYXJ0IG5lZWRzIHRvIGtub3cgdGhhdCB0aGUg
dG9rZW5pemVyIGhhcyBmaW5pc2hlZCB3aXRoIGl0cyBkYXRhLAogICAgIC8vIHJlZ2FyZGxlc3Mg
b2Ygd2hldGhlciBpdCBoYXBwZW5lZCBuYXR1cmFsbHkgb3IgZHVlIHRvIG1hbnVhbCBpbnRlcnZl
bnRpb24uCi0gICAgaWYgKHZpZXcgJiYgdmlldy0+cGFydCgpKQotICAgICAgdmlldy0+cGFydCgp
LT50b2tlbml6ZXJQcm9jZXNzZWREYXRhKCk7CisgICAgaWYgKHZpZXcgJiYgdmlldy0+ZnJhbWUo
KSkKKyAgICAgIHZpZXctPmZyYW1lKCktPnRva2VuaXplclByb2Nlc3NlZERhdGEoKTsKIH0KIAog
Ym9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzaW5nRGF0YSgpIGNvbnN0CkBAIC0xNTcxLDkgKzE1
NzEsOSBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlCiAgICAgICAK
ICAgICAgICAgLy8gSWYgd2UgY2FsbGVkIGVuZCgpIGR1cmluZyB0aGUgd3JpdGUsICB3ZSBuZWVk
IHRvIGxldCBXZWJLaXQga25vdyB0aGF0IHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyB0aGUgZGF0YS4K
ICAgICAgICAgaWYgKGRpZENhbGxFbmQgJiYgc2F2ZWRWaWV3KSB7Ci0gICAgICAgICAgICBLSFRN
TFBhcnQgKnBhcnQgPSBzYXZlZFZpZXctPnBhcnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0KSB7
Ci0gICAgICAgICAgICAgICAgcGFydC0+dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpOworICAgICAg
ICAgICAgRnJhbWUgKmZyYW1lID0gc2F2ZWRWaWV3LT5mcmFtZSgpOworICAgICAgICAgICAgaWYg
KGZyYW1lKSB7CisgICAgICAgICAgICAgICAgZnJhbWUtPnRva2VuaXplclByb2Nlc3NlZERhdGEo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE2NTEsNyArMTY1MSw3IEBA
IHZvaWQgSFRNTFRva2VuaXplcjo6ZmluaXNoKCkKIAogTm9kZUltcGwgKkhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NUb2tlbigpCiB7Ci0gICAgS0pTUHJveHlJbXBsICpqc1Byb3h5ID0gKHZpZXcgJiYg
dmlldy0+cGFydCgpKSA/IHZpZXctPnBhcnQoKS0+alNjcmlwdCgpIDogMEw7ICAgIAorICAgIEtK
U1Byb3h5SW1wbCAqanNQcm94eSA9ICh2aWV3ICYmIHZpZXctPmZyYW1lKCkpID8gdmlldy0+ZnJh
bWUoKS0+alNjcmlwdCgpIDogMEw7ICAgIAogICAgIGlmIChqc1Byb3h5KQogICAgICAgICBqc1By
b3h5LT5zZXRFdmVudEhhbmRsZXJMaW5lbm8odGFnU3RhcnRMaW5lbm8pOwogICAgIGlmICggZGVz
dCA+IGJ1ZmZlciApCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysg
a2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcu
aCIKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJranNfcHJveHkuaCIKIAogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKQEAgLTkz
LDggKzkzLDggQEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpwcm9jZXNzKCkKICAgICBpZiAo
IWluRG9jdW1lbnQoKSkKIAlyZXR1cm47CiAKLSAgICBpZighbV9ocmVmLmlzRW1wdHkoKSAmJiBn
ZXREb2N1bWVudCgpLT5wYXJ0KCkpCi0JZ2V0RG9jdW1lbnQoKS0+c2V0QmFzZVVSTCggS1VSTCgg
Z2V0RG9jdW1lbnQoKS0+cGFydCgpLT51cmwoKSwgbV9ocmVmLnFzdHJpbmcoKSApLnVybCgpICk7
CisgICAgaWYoIW1faHJlZi5pc0VtcHR5KCkgJiYgZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKSkKKwln
ZXREb2N1bWVudCgpLT5zZXRCYXNlVVJMKCBLVVJMKCBnZXREb2N1bWVudCgpLT5mcmFtZSgpLT51
cmwoKSwgbV9ocmVmLnFzdHJpbmcoKSApLnVybCgpICk7CiAKICAgICBpZighbV90YXJnZXQuaXNF
bXB0eSgpKQogCWdldERvY3VtZW50KCktPnNldEJhc2VUYXJnZXQoIG1fdGFyZ2V0LnFzdHJpbmco
KSApOwpAQCAtMjIwLDE5ICsyMjAsMTkgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpwcm9j
ZXNzKCkKIAogICAgIFFTdHJpbmcgdHlwZSA9IG1fdHlwZS5xc3RyaW5nKCkubG93ZXIoKTsKICAg
ICAKLSAgICBLSFRNTFBhcnQqIHBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CisgICAgRnJh
bWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAogICAgIC8vIElFIGV4dGVuc2lv
bjogbG9jYXRpb24gb2Ygc21hbGwgaWNvbiBmb3IgbG9jYXRpb25iYXIgLyBib29rbWFya3MKLSAg
ICBpZiAocGFydCAmJiBtX2lzSWNvbiAmJiAhbV91cmwuaXNFbXB0eSgpICYmICFwYXJ0LT5wYXJl
bnRQYXJ0KCkpIHsKKyAgICBpZiAoZnJhbWUgJiYgbV9pc0ljb24gJiYgIW1fdXJsLmlzRW1wdHko
KSAmJiAhZnJhbWUtPnBhcmVudEZyYW1lKCkpIHsKICAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHko
KSkgLy8gTW96aWxsYSBleHRlbnNpb24gdG8gSUUgZXh0ZW5zaW9uOiBpY29uIHNwZWNpZmllZCB3
aXRoIHR5cGUKLSAgICAgICAgICAgIHBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0VHlwZWRJ
Y29uVVJMKEtVUkwobV91cmwucXN0cmluZygpKSwgdHlwZSk7CisgICAgICAgICAgICBmcmFtZS0+
YnJvd3NlckV4dGVuc2lvbigpLT5zZXRUeXBlZEljb25VUkwoS1VSTChtX3VybC5xc3RyaW5nKCkp
LCB0eXBlKTsKICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHBhcnQtPmJyb3dzZXJFeHRlbnNp
b24oKS0+c2V0SWNvblVSTChLVVJMKG1fdXJsLnFzdHJpbmcoKSkpOworICAgICAgICAgICAgZnJh
bWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0SWNvblVSTChLVVJMKG1fdXJsLnFzdHJpbmcoKSkp
OwogICAgIH0KIAogICAgIC8vIFN0eWxlc2hlZXQKICAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQg
d291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFz
IGEgZGlmZmVyZW50IHNwZWNpZmllZCBtZWFuaW5nLiAtZHdoCi0gICAgaWYgKG1fZGlzYWJsZWRT
dGF0ZSAhPSAyICYmICh0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpIHx8IG1faXNTdHlsZVNoZWV0
KSAmJiBnZXREb2N1bWVudCgpLT5wYXJ0KCkpIHsKKyAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9
IDIgJiYgKHR5cGUuY29udGFpbnMoInRleHQvY3NzIikgfHwgbV9pc1N0eWxlU2hlZXQpICYmIGdl
dERvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgLy8gbm8gbmVlZCB0byBsb2FkIHN0eWxl
IHNoZWV0cyB3aGljaCBhcmVuJ3QgZm9yIHRoZSBzY3JlZW4gb3V0cHV0CiAgICAgICAgIC8vICMj
IyB0aGVyZSBtYXkgYmUgaW4gc29tZSBzaXR1YXRpb25zIGUuZy4gZm9yIGFuIGVkaXRvciBvciBz
Y3JpcHQgdG8gbWFuaXB1bGF0ZQogCS8vIGFsc28sIGRvbid0IGxvYWQgc3R5bGUgc2hlZXRzIGZv
ciBzdGFuZGFsb25lIGRvY3VtZW50cwpAQCAtNTE4LDcgKzUxOCw3IEBAIHZvaWQgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEEKIAogICAgICAgICAvLyBGSVhNRTogRXZhbHVhdGUg
c2NyaXB0cyBpbiB2aWV3bGVzcyBkb2N1bWVudHMuCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjcKLSAgICAgICAgaWYgKCFn
ZXREb2N1bWVudCgpLT5wYXJ0KCkpCisgICAgICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+ZnJhbWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB1cmwgPSBhdHRyLT52YWx1ZSgpOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsOjppbnNlcnRlZEludG8KICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdk
IGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBhIAogICAg
IC8vIHZpZXdsZXNzIGRvY3VtZW50IGJ1dCB0aGlzJ2xsIGRvIGZvciBub3cuCiAgICAgLy8gU2Vl
IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwotICAg
IGlmICghZ2V0RG9jdW1lbnQoKS0+cGFydCgpKQorICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+ZnJh
bWUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJs
ID0gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwpAQCAtNjA3LDkgKzYwNyw5IEBAIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnRJbXBsOjpldmFsdWF0ZVNjcmkKICAgICBpZiAobV9ldmFsdWF0ZWQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5w
YXJ0KCk7Ci0gICAgaWYgKHBhcnQpIHsKLSAgICAgICAgS0pTUHJveHlJbXBsICpwcm94eSA9IHBh
cnQtPmpTY3JpcHQoKTsKKyAgICBGcmFtZSAqZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgp
OworICAgIGlmIChmcmFtZSkgeworICAgICAgICBLSlNQcm94eUltcGwgKnByb3h5ID0gZnJhbWUt
PmpTY3JpcHQoKTsKICAgICAgICAgaWYgKHByb3h5KSB7CiAgICAgICAgICAgICBtX2V2YWx1YXRl
ZCA9IHRydWU7CiAgICAgICAgICAgICBwcm94eS0+ZXZhbHVhdGUoVVJMLCAwLCBzY3JpcHQsIDAp
OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2h0bWwv
aHRtbF9mb3JtaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJNYWNGcmFtZS5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgogI2lu
Y2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCkBAIC0zMDUsMTQgKzMwNSwxNCBAQCBib29sIEhUTUxG
b3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAgICAgc3RyLnJlcGxhY2UoJywnLCAnICcp
OwogICAgIFFTdHJpbmdMaXN0IGNoYXJzZXRzID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgc3Ry
KTsKICAgICBRVGV4dENvZGVjKiBjb2RlYyA9IDA7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gZ2V0
RG9jdW1lbnQoKS0+cGFydCgpOworICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZy
YW1lKCk7CiAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQgPSBjaGFyc2V0cy5iZWdp
bigpOyBpdCAhPSBjaGFyc2V0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBRU3RyaW5nIGVuYyA9
ICgqaXQpOwogICAgICAgICBpZiAoZW5jLmNvbnRhaW5zKCJVTktOT1dOIikpIHsKICAgICAgICAg
ICAgIC8vIHVzZSBzdGFuZGFyZCBkb2N1bWVudCBlbmNvZGluZwogICAgICAgICAgICAgZW5jID0g
IklTTy04ODU5LTEiOwotICAgICAgICAgICAgaWYgKHBhcnQpCi0gICAgICAgICAgICAgICAgZW5j
ID0gcGFydC0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAg
ICAgICBlbmMgPSBmcmFtZS0+ZW5jb2RpbmcoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGNv
ZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKGVuYy5sYXRpbjEoKSkpKQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNzEsNyArMzcxLDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZighc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+dmFsdWUoKS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmlu
ZyBtaW1lVHlwZSA9IHBhcnQgPyBLV1EocGFydCktPm1pbWVUeXBlRm9yRmlsZU5hbWUocGF0aCkg
OiBRU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtaW1lVHlw
ZSA9IGZyYW1lID8gTWFjKGZyYW1lKS0+bWltZVR5cGVGb3JGaWxlTmFtZShwYXRoKSA6IFFTdHJp
bmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9ICJcclxuQ29udGVu
dC1UeXBlOiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9IG1pbWVU
eXBlLmFzY2lpKCk7CkBAIC00MjUsOCArNDI1LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBs
OjpzZXRCb3VuZGFyeSggYwogCiBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OnByZXBhcmVTdWJt
aXQoKQogewotICAgIEtIVE1MUGFydCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKLSAg
ICBpZihtX2luc3VibWl0IHx8ICFwYXJ0IHx8IHBhcnQtPm9ubHlMb2NhbFJlZmVyZW5jZXMoKSkK
KyAgICBGcmFtZSAqZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmKG1faW5z
dWJtaXQgfHwgIWZyYW1lIHx8IGZyYW1lLT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkpCiAgICAgICAg
IHJldHVybiBtX2luc3VibWl0OwogCiAgICAgbV9pbnN1Ym1pdCA9IHRydWU7CkBAIC00NDYsOCAr
NDQ2LDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpwcmVwYXJlU3VibWl0KAogdm9pZCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQoIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24gKQog
ewogICAgIEtIVE1MVmlldyAqdmlldyA9IGdldERvY3VtZW50KCktPnZpZXcoKTsKLSAgICBLSFRN
TFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7Ci0gICAgaWYgKCF2aWV3IHx8ICFw
YXJ0KSB7CisgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBp
ZiAoIXZpZXcgfHwgIWZyYW1lKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ2MSw3
ICs0NjEsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAgICAg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9
IDA7CiAgICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGFjdGl2YXRlU3VibWl0QnV0dG9u
OwkvLyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgc3VibWl0IGJ1dHRvbj8KICAgICAKLSAgICBL
V1EocGFydCktPmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7CisgICAgTWFjKGZyYW1lKS0+Y2xl
YXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9y
bUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCogY3VycmVudCA9IGZvcm1FbGVtZW50c1tpXTsKICAgICAgICAgLy8gT3VyIGFwcCBuZWVk
cyB0byBnZXQgZm9ybSB2YWx1ZXMgZm9yIHBhc3N3b3JkIGZpZWxkcyBmb3IgZG9pbmcgcGFzc3dv
cmQgYXV0b2NvbXBsZXRlLApAQCAtNDcyLDcgKzQ3Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
SW1wbDo6c3VibWl0KCBib29sIGEKICAgICAgICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBl
KCkgPT0gIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRAogICAgICAgICAgICAgICAgIHx8
IGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6U0VBUkNIKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEtXUShwYXJ0KS0+cmVjb3JkRm9ybVZhbHVlKGlu
cHV0LT5uYW1lKCkucXN0cmluZygpLCBpbnB1dC0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpOwor
ICAgICAgICAgICAgICAgIE1hYyhmcmFtZSktPnJlY29yZEZvcm1WYWx1ZShpbnB1dC0+bmFtZSgp
LnFzdHJpbmcoKSwgaW5wdXQtPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKTsKICAgICAgICAgICAg
ICAgICBpZiAoaW5wdXQtPnJlbmRlcmVyKCkgJiYgaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpTRUFSQ0gpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlckxpbmVFZGl0Kj4oaW5wdXQtPnJlbmRlcmVyKCkpLT5hZGRTZWFyY2hSZXN1bHQoKTsK
ICAgICAgICAgICAgIH0KQEAgLTQ5NywxMyArNDk3LDEzIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
SW1wbDo6c3VibWl0KCBib29sIGEKICAgICBGb3JtRGF0YSBmb3JtX2RhdGE7CiAgICAgaWYgKGZv
cm1EYXRhKGZvcm1fZGF0YSkpIHsKICAgICAgICAgaWYobV9wb3N0KSB7Ci0gICAgICAgICAgICBw
YXJ0LT5zdWJtaXRGb3JtKCAicG9zdCIsIG1fdXJsLnFzdHJpbmcoKSwgZm9ybV9kYXRhLAorICAg
ICAgICAgICAgZnJhbWUtPnN1Ym1pdEZvcm0oICJwb3N0IiwgbV91cmwucXN0cmluZygpLCBmb3Jt
X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LnFz
dHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZSgp
LnFzdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRh
cnkoKS5xc3RyaW5nKCkgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHBhcnQtPnN1Ym1pdEZvcm0oICJnZXQiLCBtX3VybC5xc3RyaW5nKCksIGZvcm1fZGF0YSwKKyAg
ICAgICAgICAgIGZyYW1lLT5zdWJtaXRGb3JtKCAiZ2V0IiwgbV91cmwucXN0cmluZygpLCBmb3Jt
X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LnFz
dHJpbmcoKSApOwogICAgICAgICB9CiAgICAgfQpAQCAtNTE3LDggKzUxNyw4IEBAIHZvaWQgSFRN
TEZvcm1FbGVtZW50SW1wbDo6c3VibWl0KCBib29sIGEKIAogdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpyZXNldCggICkKIHsKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5w
YXJ0KCk7Ci0gICAgaWYobV9pbnJlc2V0IHx8ICFwYXJ0KSByZXR1cm47CisgICAgRnJhbWUgKmZy
YW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZihtX2lucmVzZXQgfHwgIWZyYW1l
KSByZXR1cm47CiAKICAgICBtX2lucmVzZXQgPSB0cnVlOwogCkBAIC05MjYsOCArOTI2LDggQEAg
Ym9vbCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6aXNLZXlibwogICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG1fcmVuZGVyKS0+d2lkZ2V0KCkgJiYKICAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9yZW5kZXIpLT53aWRn
ZXQoKS0+Zm9jdXNQb2xpY3koKSAmIFFXaWRnZXQ6OlRhYkZvY3VzKTsKICAgICAgICAgfQotCWlm
IChnZXREb2N1bWVudCgpLT5wYXJ0KCkpCi0JICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5wYXJ0
KCktPnRhYnNUb0FsbENvbnRyb2xzKCk7CisJaWYgKGdldERvY3VtZW50KCktPmZyYW1lKCkpCisJ
ICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5mcmFtZSgpLT50YWJzVG9BbGxDb250cm9scygpOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yOTk2LDcgKzI5OTYsNyBAQCBib29sIEhU
TUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAgICAgLy8gT25seSBSU0EgaXMgc3Vw
cG9ydGVkIGF0IHRoaXMgdGltZS4KICAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiAhZXF1
YWxJZ25vcmluZ0Nhc2UobV9rZXlUeXBlLCAicnNhIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBRU3RyaW5nIHZhbHVlID0gS1NTTEtleUdlbjo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHNlbGVjdGVkSW5kZXgoKSwgbV9jaGFsbGVuZ2UucXN0cmluZygpLCBnZXREb2N1
bWVudCgpLT5wYXJ0KCktPmJhc2VVUkwoKSk7CisgICAgUVN0cmluZyB2YWx1ZSA9IEtTU0xLZXlH
ZW46OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1f
Y2hhbGxlbmdlLnFzdHJpbmcoKSwgZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+YmFzZVVSTCgpKTsK
ICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBlbmNv
ZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgdmFsdWUudXRmOCgpKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxf
b2JqZWN0aW1wbC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvaHRtbC9odG1sX29iamVj
dGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKIAotI2luY2x1ZGUgImto
dG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5n
LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSA8cXN0cmluZy5oPgpAQCAtNDcs
NyArNDcsNyBAQAogCiAjaW5jbHVkZSAiamF2YS9ramF2YWFwcGxldHdpZGdldC5oIgogCi0jaW5j
bHVkZSAiS1dRS0hUTUxQYXJ0LmgiCisjaW5jbHVkZSAiTWFjRnJhbWUuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIGtodG1sOwogCkBAIC0xNjYsOSArMTY2LDkgQEAgYm9vbCBIVE1MQXBwbGV0RWxlbWVu
dEltcGw6OnJlbmRlcmVySXNOZQogUmVuZGVyT2JqZWN0ICpIVE1MQXBwbGV0RWxlbWVudEltcGw6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQog
ewogI2lmbmRlZiBRX1dTX1FXUyAvLyBGSVhNRShFKT8gSSBkb24ndCB0aGluayB0aGlzIGlzIHBv
c3NpYmxlIHdpdGggUXQgRW1iZWRkZWQuLi4KLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1
bWVudCgpLT5wYXJ0KCk7CisgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUo
KTsKIAotICAgIGlmKCBwYXJ0ICYmIHBhcnQtPmphdmFFbmFibGVkKCkgKQorICAgIGlmKCBmcmFt
ZSAmJiBmcmFtZS0+amF2YUVuYWJsZWQoKSApCiAgICAgewogCVFNYXA8UVN0cmluZywgUVN0cmlu
Zz4gYXJnczsKIApAQCAtMjA1LDggKzIwNSw4IEBAIFJlbmRlck9iamVjdCAqSFRNTEFwcGxldEVs
ZW1lbnRJbXBsOjpjcmUKIAogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxBcHBsZXRFbGVt
ZW50SW1wbDo6Z2V0QXBwbGV0SW5zdGFuY2UoKSBjb25zdAogewotICAgIEtIVE1MUGFydCogcGFy
dCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKLSAgICBpZiAoIXBhcnQgfHwgIXBhcnQtPmphdmFF
bmFibGVkKCkpCisgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+amF2YUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBpZiAoYXBwbGV0SW5zdGFuY2UpCkBAIC0yMTYsOSArMjE2LDkgQEAgS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UgKkhUTUxBcHBsZXRFbGVtZQogICAgIGlmIChyKSB7CiAgICAgICAgIHIt
PmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCk7CiAgICAgICAgIGlmIChyLT53aWRnZXQoKSkKLSAg
ICAgICAgICAgIC8vIENhbGwgaW50byB0aGUgcGFydCAoYW5kIG92ZXIgdGhlIGJyaWRnZSkgdG8g
cHVsbCB0aGUgQmluZGluZ3M6Okluc3RhbmNlCisgICAgICAgICAgICAvLyBDYWxsIGludG8gdGhl
IGZyYW1lIChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFu
Y2UKICAgICAgICAgICAgIC8vIGZyb20gdGhlIGd1dHMgb2YgdGhlIHBsdWdpbi4KLSAgICAgICAg
ICAgIGFwcGxldEluc3RhbmNlID0gS1dRKHBhcnQpLT5nZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdl
dChyLT53aWRnZXQoKSk7CisgICAgICAgICAgICBhcHBsZXRJbnN0YW5jZSA9IE1hYyhmcmFtZSkt
PmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHItPndpZGdldCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIGFwcGxldEluc3RhbmNlOwogfQpAQCAtMzY1LDggKzM2NSw4IEBAIGJvb2wgSFRNTEVtYmVk
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnMKIAogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhU
TUxFbWJlZEVsZW1lbnRJbXBsOjpnZXRFbWJlZEluc3RhbmNlKCkgY29uc3QKIHsKLSAgICBLSFRN
TFBhcnQqIHBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7Ci0gICAgaWYgKCFwYXJ0KQorICAg
IEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoZW1iZWRJbnN0YW5jZSkKQEAgLTM4MSwxMiAr
MzgxLDEyIEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MRW1iZWRFbGVtZW4KIAogICAg
IGlmIChyICYmIHItPmlzV2lkZ2V0KCkpewogICAgICAgICBpZiAoUVdpZGdldCAqd2lkZ2V0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHIpLT53aWRnZXQoKSkgewotICAgICAgICAgICAg
Ly8gQ2FsbCBpbnRvIHRoZSBwYXJ0IChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBC
aW5kaW5nczo6SW5zdGFuY2UKKyAgICAgICAgICAgIC8vIENhbGwgaW50byB0aGUgZnJhbWUgKGFu
ZCBvdmVyIHRoZSBicmlkZ2UpIHRvIHB1bGwgdGhlIEJpbmRpbmdzOjpJbnN0YW5jZQogICAgICAg
ICAgICAgLy8gZnJvbSB0aGUgZ3V0cyBvZiB0aGUgSmF2YSBWTS4KLSAgICAgICAgICAgIGVtYmVk
SW5zdGFuY2UgPSBLV1EocGFydCktPmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQod2lkZ2V0KTsK
KyAgICAgICAgICAgIGVtYmVkSW5zdGFuY2UgPSBNYWMoZnJhbWUpLT5nZXRFbWJlZEluc3RhbmNl
Rm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICAgICAvLyBBcHBsZXQgbWF5IHNwZWNpZmllZCB3
aXRoIDxlbWJlZD4gdGFnLgogICAgICAgICAgICAgaWYgKCFlbWJlZEluc3RhbmNlKQotICAgICAg
ICAgICAgICAgIGVtYmVkSW5zdGFuY2UgPSBLV1EocGFydCktPmdldEFwcGxldEluc3RhbmNlRm9y
V2lkZ2V0KHdpZGdldCk7CisgICAgICAgICAgICAgICAgZW1iZWRJbnN0YW5jZSA9IE1hYyhmcmFt
ZSktPmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIGVtYmVkSW5zdGFuY2U7CkBAIC00NzAsOCArNDcwLDggQEAgdm9pZCBIVE1M
RW1iZWRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogCiBib29sIEhUTUxFbWJlZEVsZW1lbnRJ
bXBsOjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBLSFRNTFBh
cnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7Ci0gICAgaWYgKCFwYXJ0IHx8ICFwYXJ0
LT5wbHVnaW5zRW5hYmxlZCgpKQorICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBsdWdpbnNFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGVJbXBsICpwID0gcGFyZW50Tm9kZSgpOwpAQCAt
NTQ1LDggKzU0NSw4IEBAIGJvb2wgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpjaGVja0RURChjb24K
IAogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Z2V0T2Jq
ZWN0SW5zdGFuY2UoKSBjb25zdAogewotICAgIEtIVE1MUGFydCogcGFydCA9IGdldERvY3VtZW50
KCktPnBhcnQoKTsKLSAgICBpZiAoIXBhcnQpCisgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1l
bnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IGlmIChvYmplY3RJbnN0YW5jZSkKQEAgLTU1NSwxMiArNTU1LDEyIEBAIEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlICpIVE1MT2JqZWN0RWxlbWUKICAgICBpZiAoUmVuZGVyT2JqZWN0ICpyID0gbV9y
ZW5kZXIpIHsKICAgICAgICAgaWYgKHItPmlzV2lkZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChR
V2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQgKj4ociktPndpZGdldCgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FsbCBpbnRvIHRoZSBwYXJ0IChhbmQgb3ZlciB0aGUg
YnJpZGdlKSB0byBwdWxsIHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKKyAgICAgICAgICAgICAgICAv
LyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxsIHRoZSBC
aW5kaW5nczo6SW5zdGFuY2UKICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBndXRzIG9mIHRo
ZSBwbHVnaW4uCi0gICAgICAgICAgICAgICAgb2JqZWN0SW5zdGFuY2UgPSBLV1EocGFydCktPmdl
dE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7CisgICAgICAgICAgICAgICAgb2JqZWN0
SW5zdGFuY2UgPSBNYWMoZnJhbWUpLT5nZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldCh3aWRnZXQp
OwogICAgICAgICAgICAgICAgIC8vIEFwcGxldCBtYXkgc3BlY2lmaWVkIHdpdGggPG9iamVjdD4g
dGFnLgogICAgICAgICAgICAgICAgIGlmICghb2JqZWN0SW5zdGFuY2UpCi0gICAgICAgICAgICAg
ICAgICAgIG9iamVjdEluc3RhbmNlID0gS1dRKHBhcnQpLT5nZXRBcHBsZXRJbnN0YW5jZUZvcldp
ZGdldCh3aWRnZXQpOworICAgICAgICAgICAgICAgICAgICBvYmplY3RJbnN0YW5jZSA9IE1hYyhm
cmFtZSktPmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CkBAIC02NzMsOCArNjczLDggQEAgYm9vbCBIVE1MT2JqZWN0RWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZQogICAgIGlmIChtX3VzZUZhbGxiYWNrQ29udGVudCB8fCBp
c0ltYWdlVHlwZSgpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnRJbXBsOjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKTsKIAotICAgIEtIVE1MUGFydCogcGFydCA9IGdldERvY3VtZW50KCktPnBh
cnQoKTsKLSAgICBpZiAoIXBhcnQgfHwgIXBhcnQtPnBsdWdpbnNFbmFibGVkKCkpCisgICAgRnJh
bWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+cGx1Z2luc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysr
IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAKICNpbmNsdWRlICJr
aHRtbHZpZXcuaCIKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
IAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmgiCiAjaW5jbHVkZSAiY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuaCIKQEAgLTMwNSwyMiArMzA1LDIyIEBAIGJvb2wgSFRNTEZyYW1lRWxl
bWVudEltcGw6OmlzVVJMQWxsb3dlZCgKICAgICAvLyBGSVhNRTogVGhpcyBsaW1pdCBjb3VsZCBi
ZSBoaWdoZXIsIGJ1dCBXZWJLaXQgaGFzIHNvbWUKICAgICAvLyBhbGdvcml0aG1zIHRoYXQgaGFw
cGVuIHdoaWxlIGxvYWRpbmcgd2hpY2ggYXBwZWFyIHRvIGJlIE5eMiBvcgogICAgIC8vIHdvcnNl
IGluIHRoZSBudW1iZXIgb2YgZnJhbWVzCi0gICAgaWYgKHctPnBhcnQoKS0+dG9wTGV2ZWxGcmFt
ZUNvdW50KCkgPj0gMjAwKSB7CisgICAgaWYgKHctPmZyYW1lKCktPnRvcExldmVsRnJhbWVDb3Vu
dCgpID49IDIwMCkgewogCXJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBQcm9oaWJpdCBu
b24tZmlsZSBVUkxzIGlmIHdlIGFyZSBhc2tlZCB0by4KLSAgICBpZiAody0+cGFydCgpLT5vbmx5
TG9jYWxSZWZlcmVuY2VzKCkgJiYgbmV3VVJMLnByb3RvY29sKCkubG93ZXIoKSAhPSAiZmlsZSIp
IHsKKyAgICBpZiAody0+ZnJhbWUoKS0+b25seUxvY2FsUmVmZXJlbmNlcygpICYmIG5ld1VSTC5w
cm90b2NvbCgpLmxvd2VyKCkgIT0gImZpbGUiKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICAvLyBXZSBhbGxvdyBvbmUgbGV2ZWwgb2Ygc2VsZi1yZWZlcmVuY2UgYmVjYXVz
ZSBzb21lIHNpdGVzIGRlcGVuZCBvbiB0aGF0LgogICAgIC8vIEJ1dCB3ZSBkb24ndCBhbGxvdyBt
b3JlIHRoYW4gb25lLgogICAgIGJvb2wgZm91bmRTZWxmUmVmZXJlbmNlID0gZmFsc2U7Ci0gICAg
Zm9yIChLSFRNTFBhcnQgKnBhcnQgPSB3LT5wYXJ0KCk7IHBhcnQ7IHBhcnQgPSBwYXJ0LT5wYXJl
bnRQYXJ0KCkpIHsKLSAgICAgICAgS1VSTCBwYXJ0VVJMID0gcGFydC0+dXJsKCk7Ci0gICAgICAg
IHBhcnRVUkwuc2V0UmVmKFFTdHJpbmc6Om51bGwpOwotICAgICAgICBpZiAocGFydFVSTCA9PSBu
ZXdVUkwpIHsKKyAgICBmb3IgKEZyYW1lICpmcmFtZSA9IHctPmZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT5wYXJlbnRGcmFtZSgpKSB7CisgICAgICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFt
ZS0+dXJsKCk7CisgICAgICAgIGZyYW1lVVJMLnNldFJlZihRU3RyaW5nOjpudWxsKTsKKyAgICAg
ICAgaWYgKGZyYW1lVVJMID09IG5ld1VSTCkgewogICAgICAgICAgICAgaWYgKGZvdW5kU2VsZlJl
ZmVyZW5jZSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0K
QEAgLTM2NiwxMiArMzY2LDEyIEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6Om9wZW5VUkwo
KQogICAgIH0KIAogICAgIC8vIExvYWQgdGhlIGZyYW1lIGNvbnRlbnRzLgotICAgIEtIVE1MUGFy
dCAqcGFydCA9IHctPnBhcnQoKTsKLSAgICBLSFRNTFBhcnQgKmZyYW1lUGFydCA9IHBhcnQtPmZp
bmRGcmFtZShtX25hbWUucXN0cmluZygpKTsKKyAgICBGcmFtZSAqZnJhbWUgPSB3LT5mcmFtZSgp
OworICAgIEZyYW1lICpmcmFtZVBhcnQgPSBmcmFtZS0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5n
KCkpOwogICAgIGlmIChmcmFtZVBhcnQpIHsKICAgICAgICAgZnJhbWVQYXJ0LT5vcGVuVVJMKGdl
dERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMLnFzdHJpbmcoKSkpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHBhcnQtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2FzdDxSZW5kZXJGcmFt
ZSAqPihtX3JlbmRlciksIHJlbGF0aXZlVVJMLnFzdHJpbmcoKSwgbV9uYW1lLnFzdHJpbmcoKSk7
CisgICAgICAgIGZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWUgKj4o
bV9yZW5kZXIpLCByZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5xc3RyaW5nKCkpOwogICAg
IH0KIH0KIApAQCAtNDUyLDEyICs0NTIsMTIgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6
YXR0YWNoKCkKICAgICBpZiAoIW1fcmVuZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBLSFRN
TFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CisgICAgRnJhbWUgKmZyYW1lID0g
Z2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAotICAgIGlmICghcGFydCkKKyAgICBpZiAoIWZyYW1l
KQogCXJldHVybjsKIAotICAgIHBhcnQtPmluY3JlbWVudEZyYW1lQ291bnQoKTsKKyAgICBmcmFt
ZS0+aW5jcmVtZW50RnJhbWVDb3VudCgpOwogICAgIAogICAgIEF0b21pY1N0cmluZyByZWxhdGl2
ZVVSTCA9IG1fVVJMOwogICAgIGlmIChyZWxhdGl2ZVVSTC5pc0VtcHR5KCkpIHsKQEAgLTQ2NSwy
MCArNDY1LDIwIEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmF0dGFjaCgpCiAgICAgfQog
CiAgICAgLy8gd2UgbmVlZCBhIHVuaXF1ZSBuYW1lIGZvciBldmVyeSBmcmFtZSBpbiB0aGUgZnJh
bWVzZXQuIEhvcGUgdGhhdCdzIHVuaXF1ZSBlbm91Z2guCi0gICAgaWYgKG1fbmFtZS5pc0VtcHR5
KCkgfHwgcGFydC0+ZnJhbWVFeGlzdHMobV9uYW1lLnFzdHJpbmcoKSkpCi0gICAgICAgIG1fbmFt
ZSA9IEF0b21pY1N0cmluZyhwYXJ0LT5yZXF1ZXN0RnJhbWVOYW1lKCkpOworICAgIGlmIChtX25h
bWUuaXNFbXB0eSgpIHx8IGZyYW1lLT5mcmFtZUV4aXN0cyhtX25hbWUucXN0cmluZygpKSkKKyAg
ICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKGZyYW1lLT5yZXF1ZXN0RnJhbWVOYW1lKCkpOwog
CiAgICAgLy8gbG9hZCB0aGUgZnJhbWUgY29udGVudHMKLSAgICBwYXJ0LT5yZXF1ZXN0RnJhbWUo
c3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWUqPihtX3JlbmRlciksIHJlbGF0aXZlVVJMLnFzdHJpbmco
KSwgbV9uYW1lLnFzdHJpbmcoKSk7CisgICAgZnJhbWUtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2Fz
dDxSZW5kZXJGcmFtZSo+KG1fcmVuZGVyKSwgcmVsYXRpdmVVUkwucXN0cmluZygpLCBtX25hbWUu
cXN0cmluZygpKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6Y2xvc2UoKQogewot
ICAgIEtIVE1MUGFydCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKKyAgICBGcmFtZSAq
ZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwogCi0gICAgaWYgKG1fcmVuZGVyICYmIHBh
cnQpIHsKLQlwYXJ0LT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7Ci0gICAgICAgIEtIVE1MUGFydCAq
ZnJhbWVQYXJ0ID0gcGFydC0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5nKCkpOworICAgIGlmICht
X3JlbmRlciAmJiBmcmFtZSkgeworCWZyYW1lLT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7CisgICAg
ICAgIEZyYW1lICpmcmFtZVBhcnQgPSBmcmFtZS0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5nKCkp
OwogICAgICAgICBpZiAoZnJhbWVQYXJ0KQogICAgICAgICAgICAgZnJhbWVQYXJ0LT5mcmFtZURl
dGFjaGVkKCk7CiAgICAgfQpAQCAtNTI5LDEwICs1MjksMTAgQEAgdm9pZCBIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6c2V0Rm9jdXMoYm9vbAogCXJlbmRlckZyYW1lLT53aWRnZXQoKS0+Y2xlYXJGb2N1
cygpOwogfQogCi1LSFRNTFBhcnQqIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpjb250ZW50UGFydCgp
IGNvbnN0CitGcmFtZSogSFRNTEZyYW1lRWxlbWVudEltcGw6OmNvbnRlbnRQYXJ0KCkgY29uc3QK
IHsKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJ0IHRoYXQgY29udGFpbnMgdGhpcyBlbGVtZW50
LCBvdXIgb3duZXJEb2N1bWVudC4KLSAgICBLSFRNTFBhcnQqIG93bmVyRG9jdW1lbnRQYXJ0ID0g
Z2V0RG9jdW1lbnQoKS0+cGFydCgpOworICAgIEZyYW1lKiBvd25lckRvY3VtZW50UGFydCA9IGdl
dERvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFvd25lckRvY3VtZW50UGFydCkgewogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC01NDMsMTMgKzU0MywxMyBAQCBLSFRNTFBhcnQqIEhU
TUxGcmFtZUVsZW1lbnRJbXBsOjpjb250ZW50CiAKIERvY3VtZW50SW1wbCogSFRNTEZyYW1lRWxl
bWVudEltcGw6OmNvbnRlbnREb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgS0hUTUxQYXJ0KiBwYXJ0
ID0gY29udGVudFBhcnQoKTsKLSAgICBpZiAoIXBhcnQpIHsKKyAgICBGcmFtZSAqZnJhbWUgPSBj
b250ZW50UGFydCgpOworICAgIGlmICghZnJhbWUpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudCBmb3IgdGhhdCBwYXJ0LCB3aGljaCBpcyBv
dXIgY29udGVudERvY3VtZW50LgotICAgIHJldHVybiBwYXJ0LT54bWxEb2NJbXBsKCk7CisgICAg
cmV0dXJuIGZyYW1lLT54bWxEb2NJbXBsKCk7CiB9CiAKIGJvb2wgSFRNTEZyYW1lRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0CkBAIC05MzgsMTIg
KzkzOCwxMiBAQCB2b2lkIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAKICAg
ICBIVE1MRWxlbWVudEltcGw6OmF0dGFjaCgpOwogCi0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gZ2V0
RG9jdW1lbnQoKS0+cGFydCgpOwotICAgIGlmIChtX3JlbmRlciAmJiBwYXJ0KSB7CisgICAgRnJh
bWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAobV9yZW5kZXIgJiYg
ZnJhbWUpIHsKICAgICAgICAgLy8gd2UgbmVlZCBhIHVuaXF1ZSBuYW1lIGZvciBldmVyeSBmcmFt
ZSBpbiB0aGUgZnJhbWVzZXQuIEhvcGUgdGhhdCdzIHVuaXF1ZSBlbm91Z2guCi0gICAgICAgIHBh
cnQtPmluY3JlbWVudEZyYW1lQ291bnQoKTsKLSAgICAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkg
fHwgcGFydC0+ZnJhbWVFeGlzdHMobV9uYW1lLnFzdHJpbmcoKSkpCi0gICAgICAgICAgICBtX25h
bWUgPSBBdG9taWNTdHJpbmcocGFydC0+cmVxdWVzdEZyYW1lTmFtZSgpKTsKKyAgICAgICAgZnJh
bWUtPmluY3JlbWVudEZyYW1lQ291bnQoKTsKKyAgICAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkg
fHwgZnJhbWUtPmZyYW1lRXhpc3RzKG1fbmFtZS5xc3RyaW5nKCkpKQorICAgICAgICAgICAgbV9u
YW1lID0gQXRvbWljU3RyaW5nKGZyYW1lLT5yZXF1ZXN0RnJhbWVOYW1lKCkpOwogCiAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihtX3JlbmRlciktPnVwZGF0ZVdpZGdldCgp
OwogICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7CkluZGV4OiBraHRtbC9odG1sL2h0
bWxfY2FudmFzaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2lt
cGwuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9k
b2N1bWVudGltcGwuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImtodG1s
X3BhcnQuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
aW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNw
cAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVu
dGltcGwuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImtodG1sX3BhcnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9odG1sL2h0bWxf
ZWxlbWVudGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVk
ZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiAjaW5jbHVkZSAiZG9t
L2RvbV9leGNlcHRpb24uaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgpA
QCAtNDY3LDcgKzQ2Nyw3IEBAIGJvb2wgSFRNTEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgpIGNv
bnMKIAogYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgCiB7
Ci0gICAgaWYgKGdldERvY3VtZW50KCktPnBhcnQoKSAmJiBnZXREb2N1bWVudCgpLT5wYXJ0KCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGdldERvY3VtZW50KCktPmZyYW1lKCkgJiYg
Z2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBnZXREb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKQEAgLTUw
MiwyMCArNTAyLDIwIEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OmNvbnRlbnRFZGl0YWIK
IAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldENvbnRlbnRFZGl0YWJsZShNYXBwZWRBdHRyaWJ1
dGVJbXBsKiBhdHRyKSAKIHsKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5w
YXJ0KCk7CisgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGVuYWJsZWQgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChlbmFi
bGVkLmlzRW1wdHkoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShlbmFibGVkLCAidHJ1ZSIpKSB7CiAg
ICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRNTF9VU0VSX01PRElGWSwg
Q1NTX1ZBTF9SRUFEX1dSSVRFKTsKLSAgICAgICAgaWYgKHBhcnQpCi0gICAgICAgICAgICBwYXJ0
LT5hcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCh0aGlzKTsgICAgCisgICAgICAgIGlmIChmcmFt
ZSkKKyAgICAgICAgICAgIGZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCh0aGlzKTsg
ICAgCiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmFibGVkLCAiZmFsc2UiKSkg
ewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxfVVNFUl9NT0RJ
RlksIENTU19WQUxfUkVBRF9PTkxZKTsKLSAgICAgICAgaWYgKHBhcnQpCi0gICAgICAgICAgICBw
YXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0aGlzKTsgICAgCisgICAgICAgIGlm
IChmcmFtZSkKKyAgICAgICAgICAgIGZyYW1lLT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVu
dCh0aGlzKTsgICAgCiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmFibGVkLCAi
aW5oZXJpdCIpKSB7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRN
TF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9JTkhFUklUKTsKLSAgICAgICAgaWYgKHBhcnQpCi0gICAg
ICAgICAgICBwYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0aGlzKTsgICAgCisg
ICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgIGZyYW1lLT5yZW1vdmVFZGl0aW5nU3R5bGVG
cm9tRWxlbWVudCh0aGlzKTsgICAgCiAgICAgfQogfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxw
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KICNpbmNsdWRl
ICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRl
ICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJjc3MvY3NzcHJv
cGVydGllcy5oIgogI2luY2x1ZGUgImNzcy9jc3N2YWx1ZXMuaCIKIApAQCAtNzM5LDcgKzczOSw3
IEBAIGJvb2wgSFRNTFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWMKIAogYm9vbCBIVE1M
UGFyc2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVz
dWx0KQogewotICAgIGlmIChIVE1MV2lkZ2V0ICYmIEhUTUxXaWRnZXQtPnBhcnQoKS0+alNjcmlw
dEVuYWJsZWQoKSkKKyAgICBpZiAoSFRNTFdpZGdldCAmJiBIVE1MV2lkZ2V0LT5mcmFtZSgpLT5q
U2NyaXB0RW5hYmxlZCgpKQogICAgICAgICBzZXRTa2lwTW9kZShub3NjcmlwdFRhZyk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCShyZXZpc2lvbiAxMTk2
MCkKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImNzcy9jc3N2YWx1ZXMuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgot
I2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgImto
dG1sdmlldy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfYnIuaCIKICNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX2Zsb3cuaCIKQEAgLTEwNCwxMCArMTA0LDEwIEBAIGJvb2wgSFRNTEFu
Y2hvckVsZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAgICBpZiAoIWlzRm9jdXNhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIWdldERvY3VtZW50KCktPnBhcnQo
KSkKKyAgICBpZiAoIWdldERvY3VtZW50KCktPmZyYW1lKCkpCiAJcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGdldERvY3VtZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKKyAgICByZXR1
cm4gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+dGFic1RvTGlua3MoKTsKIH0KIAogdm9pZCBIVE1M
QW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQpCkBA
IC0yMDMsOCArMjAzLDggQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVu
dAogICAgICAgICAgICAgICAgIHN0YXRlIHw9IFF0OjpDb250cm9sQnV0dG9uOwogCSAgICB9CiAK
LSAgICAgICAgICAgIGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPnZpZXcoKSAm
JiBnZXREb2N1bWVudCgpLT5wYXJ0KCkpIHsKLSAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgp
LT5wYXJ0KCktPgorICAgICAgICAgICAgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQo
KS0+dmlldygpICYmIGdldERvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBn
ZXREb2N1bWVudCgpLT5mcmFtZSgpLT4KICAgICAgICAgICAgICAgICAgICAgdXJsU2VsZWN0ZWQo
IHVybCwgYnV0dG9uLCBzdGF0ZSwgdXRhcmdldCApOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRt
bC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQAogI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIK
LSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJr
aHRtbHBhcnRfcC5oIgogI2luY2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCiAKQEAgLTExOCw4ICsx
MTgsOCBAQCBFbGVtZW50SW1wbCogSFRNTERvY3VtZW50SW1wbDo6ZG9jdW1lbnRFCiAKIERPTVN0
cmluZyBIVE1MRG9jdW1lbnRJbXBsOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewotICAgIGlmICgg
cGFydCgpICkKLSAgICAgICAgcmV0dXJuIHBhcnQoKS0+bGFzdE1vZGlmaWVkKCk7CisgICAgaWYg
KCBmcmFtZSgpICkKKyAgICAgICAgcmV0dXJuIGZyYW1lKCktPmxhc3RNb2RpZmllZCgpOwogICAg
IHJldHVybiBET01TdHJpbmcoKTsKIH0KIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgJKHJldmlzaW9uIDEx
OTYwKQorKysga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgPHFzY3JvbGx2aWV3Lmg+CiAKLWNsYXNzIEtIVE1MUGFy
dDsKK2NsYXNzIEZyYW1lOwogY2xhc3MgS0hUTUxWaWV3OwogCiBuYW1lc3BhY2Uga2h0bWwgewpA
QCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CiAKLSAgICBLSFRNTFBh
cnQqIGNvbnRlbnRQYXJ0KCkgY29uc3Q7CisgICAgRnJhbWUqIGNvbnRlbnRQYXJ0KCkgY29uc3Q7
CiAgICAgRG9jdW1lbnRJbXBsKiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3Q7Cklu
ZGV4OiBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9odG1sL2h0
bWxfdGFibGVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1
ZGUgImRvbS9kb21fbm9kZS5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAi
a2h0bWxfcGFydC5oIgogCiAjaW5jbHVkZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNs
dWRlICJjc3MvY3NzcHJvcGVydGllcy5oIgpJbmRleDoga2h0bWwvZWNtYS9ranNfbmF2aWdhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCShyZXZpc2lv
biAxMTk2MCkKKysrIGtodG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJranNfbmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAi
a2pzL2xvb2t1cC5oIgogI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0jaW5jbHVkZSAia2h0bWxf
cGFydC5oIgorI2luY2x1ZGUgIk1hY0ZyYW1lLmgiCiAKICNpbmNsdWRlICJLV1FLQ29va2llSmFy
LmgiCiAKQEAgLTE1Nyw4ICsxNTcsOCBAQCBjb25zdCBDbGFzc0luZm8gTmF2aWdhdG9yOjppbmZv
ID0geyAiTmF2CiAqLwogS0pTX0lNUExFTUVOVF9QUk9UT0ZVTkMoTmF2aWdhdG9yRnVuYykKIAot
TmF2aWdhdG9yOjpOYXZpZ2F0b3IoRXhlY1N0YXRlICpleGVjLCBLSFRNTFBhcnQgKnApCi0gIDog
SlNPYmplY3QoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5
cGUoKSksIG1fcGFydChwKSB7IH0KK05hdmlnYXRvcjo6TmF2aWdhdG9yKEV4ZWNTdGF0ZSAqZXhl
YywgRnJhbWUgKnApCisgIDogSlNPYmplY3QoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKSksIG1fZnJhbWUocCkgeyB9CiAKIGJvb2wgTmF2aWdhdG9y
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBi
b29sIE5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiAKIEpTVmFsdWUgKk5hdmln
YXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgUVN0cmluZyB1c2VyQWdlbnQgPSBLV1EobV9wYXJ0KS0+dXNlckFnZW50KCk7CisgIFFT
dHJpbmcgdXNlckFnZW50ID0gTWFjKG1fZnJhbWUpLT51c2VyQWdlbnQoKTsKICAgc3dpdGNoICh0
b2tlbikgewogICBjYXNlIEFwcENvZGVOYW1lOgogICAgIHJldHVybiBqc1N0cmluZygiTW96aWxs
YSIpOwpAQCAtNTUxLDcgKzU1MSw3IEBAIEpTVmFsdWUgKk5hdmlnYXRvckZ1bmM6OmNhbGxBc0Z1
bmN0aW9uKEUKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBOYXZp
Z2F0b3IgKm5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvciAqPih0aGlzT2JqKTsKICAgLy8gamF2
YUVuYWJsZWQoKQotICByZXR1cm4ganNCb29sZWFuKG5hdi0+cGFydCgpLT5qYXZhRW5hYmxlZCgp
KTsKKyAgcmV0dXJuIGpzQm9vbGVhbihuYXYtPmZyYW1lKCktPmphdmFFbmFibGVkKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZQpJbmRleDoga2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmgJKHJldmlzaW9uIDExOTYwKQorKysg
a2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIyICsyMywy
MiBAQAogCiAjaW5jbHVkZSA8a2pzL29iamVjdC5oPgogCi1jbGFzcyBLSFRNTFBhcnQ7CitjbGFz
cyBGcmFtZTsKIAogbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGlj
IEpTT2JqZWN0IHsKICAgcHVibGljOgotICAgIE5hdmlnYXRvcihFeGVjU3RhdGUgKmV4ZWMsIEtI
VE1MUGFydCAqcCk7CisgICAgTmF2aWdhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUgKnApOwog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IEFwcENvZGVOYW1lLCBBcHBOYW1lLCBB
cHBWZXJzaW9uLCBMYW5ndWFnZSwgVXNlckFnZW50LCBQbGF0Zm9ybSwKICAgICAgICAgICAgX1Bs
dWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgQ29va2llRW5h
YmxlZCwgSmF2YUVuYWJsZWQgfTsKLSAgICBLSFRNTFBhcnQgKnBhcnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcnQ7IH0KKyAgICBGcmFtZSAqZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9
CiAgIHByaXZhdGU6Ci0gICAgS0hUTUxQYXJ0ICptX3BhcnQ7CisgICAgRnJhbWUgKm1fZnJhbWU7
CiAgIH07CiB9OyAvLyBuYW1lc3BhY2UKIApJbmRleDoga2h0bWwvZWNtYS94bWxodHRwcmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKIAotI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogCiAjaW5jbHVkZSA8a2Rl
YnVnLmg+CkBAIC0yNzcsMTQgKzI3NywxNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjaGFuZ2VT
dGF0ZShYTUxIdHRwCiAgIGlmIChzdGF0ZSAhPSBuZXdTdGF0ZSkgewogICAgIHN0YXRlID0gbmV3
U3RhdGU7CiAgICAgCi0gICAgaWYgKGRvYyAmJiBkb2MtPnBhcnQoKSAmJiBvblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcikgeworICAgIGlmIChkb2MgJiYgZG9jLT5mcmFtZSgpICYmIG9uUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyKSB7CiAgICAgICBpbnQgaWdub3JlRXhjZXB0aW9uOwogICAgICAg
UmVmUHRyPEV2ZW50SW1wbD4gZXYgPSBkb2MtPmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIiwgaWdu
b3JlRXhjZXB0aW9uKTsKICAgICAgIGV2LT5pbml0RXZlbnQocmVhZHlzdGF0ZWNoYW5nZUV2ZW50
LCB0cnVlLCB0cnVlKTsKICAgICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5oYW5kbGVF
dmVudEltcGwoZXYuZ2V0KCksIHRydWUpOwogICAgIH0KICAgICAKLSAgICBpZiAoZG9jICYmIGRv
Yy0+cGFydCgpICYmIHN0YXRlID09IENvbXBsZXRlZCAmJiBvbkxvYWRMaXN0ZW5lcikgeworICAg
IGlmIChkb2MgJiYgZG9jLT5mcmFtZSgpICYmIHN0YXRlID09IENvbXBsZXRlZCAmJiBvbkxvYWRM
aXN0ZW5lcikgewogICAgICAgaW50IGlnbm9yZUV4Y2VwdGlvbjsKICAgICAgIFJlZlB0cjxFdmVu
dEltcGw+IGV2ID0gZG9jLT5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIsIGlnbm9yZUV4Y2VwdGlv
bik7CiAgICAgICBldi0+aW5pdEV2ZW50KGxvYWRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CkBAIC03MTgs
NyArNzE4LDcgQEAgSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGxBcwogICAg
ICAgfQogICAgIAogICAgICAgUVN0cmluZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5xc3RyaW5nKCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFjdGl2
ZShleGVjKS0+cGFydCgpLT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKGFyZ3NbMV0tPnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKSkpOworICAgICAgS1VSTCB1cmwgPSBLVVJMKFdpbmRvdzo6cmV0
cmlldmVBY3RpdmUoZXhlYyktPmZyYW1lKCktPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoYXJn
c1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKSk7CiAKICAgICAgIGJvb2wgYXN5bmMgPSB0
cnVlOwogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpIHsKSW5kZXg6IGtodG1sL2VjbWEva2pz
X3RyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNw
cAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8eG1sL2RvbV9ub2RlaW1wbC5o
PgogI2luY2x1ZGUgPHhtbC9kb21fZG9jaW1wbC5oPgogI2luY2x1ZGUgPGtodG1sdmlldy5oPgot
I2luY2x1ZGUgPGtodG1sX3BhcnQuaD4KKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgPGtk
ZWJ1Zy5oPgogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAKQEAgLTMxNiw4ICszMTYsOCBAQCBK
U05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRlckNvbmRpCiBzaG9ydCBKU05vZGVGaWx0
ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZUltcGwqIGZpbHRlck5vZGUpIGNvbnN0CiB7CiAg
ICAgTm9kZUltcGwgKm5vZGUgPSBmaWx0ZXJOb2RlOwotICAgIEtIVE1MUGFydCAqcGFydCA9IG5v
ZGUtPmdldERvY3VtZW50KCktPnBhcnQoKTsKLSAgICBLSlNQcm94eUltcGwgKnByb3h5ID0gcGFy
dC0+alNjcmlwdCgpOworICAgIEZyYW1lICpmcmFtZSA9IG5vZGUtPmdldERvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgS0pTUHJveHlJbXBsICpwcm94eSA9IGZyYW1lLT5qU2NyaXB0KCk7CiAgICAg
aWYgKHByb3h5ICYmIGZpbHRlci0+aW1wbGVtZW50c0NhbGwoKSkgewogICAgICAgICBKU0xvY2sg
bG9jazsKICAgICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmds
b2JhbEV4ZWMoKTsKSW5kZXg6IGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9l
Y21hL2tqc19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5j
bHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc19ldmVudHMubHV0LmgiCiAKLSNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAiTWFjRnJhbWUuaCIKICNpbmNsdWRlICJranNf
d2luZG93LmgiCiAjaW5jbHVkZSAia2pzX3ZpZXdzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5Lmgi
CkBAIC02OCwxMCArNjgsMTAgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxl
RXZlbgogICAgICAgICByZXR1cm47CiAKICAgICBXaW5kb3cqIHdpbmRvdyA9IHdpbmRvd09iaigp
OwotICAgIEtIVE1MUGFydCogcGFydCA9IHdpbmRvdy0+cGFydCgpOwotICAgIGlmICghcGFydCkK
KyAgICBGcmFtZSAqZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEtKU1Byb3h5SW1wbCogcHJveHkgPSBwYXJ0LT5qU2NyaXB0KCk7
CisgICAgS0pTUHJveHlJbXBsKiBwcm94eSA9IGZyYW1lLT5qU2NyaXB0KCk7CiAgICAgaWYgKCFw
cm94eSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBKU0Fic3Ry
YWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAgICAgICAgRE9NU3RyaW5nIHNvdXJj
ZVVSTCA9IGV4Y2VwdGlvbi0+Z2V0KGV4ZWMsICJzb3VyY2VVUkwiKS0+dG9TdHJpbmcoZXhlYyku
ZG9tU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoSW50ZXJwcmV0ZXI6OnNob3VsZFByaW50RXhj
ZXB0aW9ucygpKQogICAgICAgICAgICAgICAgIHByaW50ZigiKGV2ZW50IGhhbmRsZXIpOiVzXG4i
LCBtZXNzYWdlLnFzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEtXUShwYXJ0
KS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwor
ICAgICAgICAgICAgTWFjKGZyYW1lKS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5l
TnVtYmVyLCBzb3VyY2VVUkwpOwogICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghcmV0dmFsLT5pc1VuZGVmaW5lZE9y
TnVsbCgpICYmIGV2ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygpKQpAQCAtMjUyLDEwICsyNTIs
MTAgQEAgdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAgICAgICBy
ZXR1cm47CiAgICAgcGFyc2VkID0gdHJ1ZTsKIAotICAgIEtIVE1MUGFydCAqcGFydCA9IHdpbmRv
d09iaigpLT5wYXJ0KCk7CisgICAgRnJhbWUgKmZyYW1lID0gd2luZG93T2JqKCktPmZyYW1lKCk7
CiAgICAgS0pTUHJveHlJbXBsICpwcm94eSA9IDA7Ci0gICAgaWYgKHBhcnQpCi0gICAgICAgIHBy
b3h5ID0gcGFydC0+alNjcmlwdCgpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAgcHJveHkgPSBm
cmFtZS0+alNjcmlwdCgpOwogCiAgICAgaWYgKHByb3h5KSB7CiAgICAgICAgIFNjcmlwdEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IHByb3h5LT5pbnRlcnByZXRlcigpOwpAQCAtMjY1LDcgKzI2
NSw3IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KICAgICAgICAg
SlNPYmplY3QqIGNvbnN0ciA9IGludGVycHJldGVyLT5idWlsdGluRnVuY3Rpb24oKTsKICAgICAg
ICAgTGlzdCBhcmdzOwogCi0gICAgICAgIFVTdHJpbmcgc291cmNlVVJMKHBhcnQtPm1fdXJsLnVy
bCgpKTsKKyAgICAgICAgVVN0cmluZyBzb3VyY2VVUkwoZnJhbWUtPm1fdXJsLnVybCgpKTsKICAg
ICAgICAgYXJncy5hcHBlbmQoZXZlbnRQYXJhbWV0ZXJOYW1lKCkpOwogICAgICAgICBhcmdzLmFw
cGVuZChqc1N0cmluZyhjb2RlKSk7CiAgICAgICAgIGxpc3RlbmVyID0gY29uc3RyLT5jb25zdHJ1
Y3QoZXhlYywgYXJncywgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsgLy8gIyMjIGlzIGdsb2JhbEV4
ZWMgb2sgPwpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvZWNtYS9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvZWNtYS9ranNf
aHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJodG1s
L2h0bWxfb2JqZWN0aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKIAot
I2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgImto
dG1sdmlldy5oIgogCiAjaW5jbHVkZSAia2pzX2Nzcy5oIgpAQCAtOTcsOSArOTcsOSBAQCBKU1Zh
bHVlICpLSlM6OkhUTUxEb2NGdW5jdGlvbjo6Y2FsbEFzRnVuCiAgIGNhc2UgSFRNTERvY3VtZW50
OjpPcGVuOgogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYnJvd3NlcnMsIHBh
c3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAyIHBhcmFtZXRlcnMgdG8gdGhlIHdpbmRvdy4K
ICAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICBLSFRNTFBhcnQgKnBhcnQgPSBkb2Mu
cGFydCgpOwotICAgICAgaWYgKHBhcnQpIHsKLQlXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0
cmlldmVXaW5kb3cocGFydCk7CisgICAgICBGcmFtZSAqZnJhbWUgPSBkb2MuZnJhbWUoKTsKKyAg
ICAgIGlmIChmcmFtZSkgeworCVdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyhmcmFtZSk7CiAJaWYgKHdpbmRvdykgewogCSAgSlNPYmplY3QgKmZ1bmN0aW9uT2JqZWN0ID0g
d2luZG93LT5nZXQoZXhlYywgIm9wZW4iKS0+Z2V0T2JqZWN0KCk7CiAJICBpZiAoIWZ1bmN0aW9u
T2JqZWN0IHx8ICFmdW5jdGlvbk9iamVjdC0+aW1wbGVtZW50c0NhbGwoKSkKQEAgLTIwMywxMCAr
MjAzLDEwIEBAIEpTVmFsdWUgKkhUTUxEb2N1bWVudDo6bmFtZWRJdGVtR2V0dGVyKEUKIAogICBp
ZiAoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPT0gMSkgewogICAgIE5vZGVJbXBsICpub2RlID0gY29s
bGVjdGlvbi0+Zmlyc3RJdGVtKCk7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0OworICAgIEZyYW1lICpm
cmFtZTsKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpICYmIAotICAgICAgICAo
cGFydCA9IHN0YXRpY19jYXN0PERPTTo6SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5j
b250ZW50UGFydCgpKSkKLSAgICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKHBhcnQpOworICAg
ICAgICAoZnJhbWUgPSBzdGF0aWNfY2FzdDxET006OkhUTUxJRnJhbWVFbGVtZW50SW1wbCAqPihu
b2RlKS0+Y29udGVudFBhcnQoKSkpCisgICAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShmcmFt
ZSk7CiAKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBub2RlKTsKICAgfQpAQCAtMjE5LDcg
KzIxOSw3IEBAIEpTVmFsdWUgKkhUTUxEb2N1bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSgKICAgSFRN
TERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1w
bCgpKTsKIAogICBLSFRNTFZpZXcgKnZpZXcgPSBkb2MudmlldygpOwotICBLSFRNTFBhcnQgKnBh
cnQgPSBkb2MucGFydCgpOworICBGcmFtZSAqZnJhbWUgPSBkb2MuZnJhbWUoKTsKIAogICBIVE1M
RWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwogICBIVE1MQm9keUVsZW1lbnRJbXBsICpi
b2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CkBAIC0yMzYsNyArMjM2LDcg
QEAgSlNWYWx1ZSAqSFRNTERvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KAogICBjYXNlIEJvZHk6
CiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgYm9keSk7CiAgIGNhc2UgTG9jYXRpb246Ci0g
ICAgaWYgKFdpbmRvdyogd2luID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KSkKKyAgICBp
ZiAoV2luZG93KiB3aW4gPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKSkKICAgICAgIHJl
dHVybiB3aW4tPmxvY2F0aW9uKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgIGNhc2Ug
Q29va2llOgpAQCAtMzUzLDIxICszNTMsMjEgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0
VmFsdWVQcm9wZXJ0eQogICAgIGRvYy5zZXRDb29raWUodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLmRv
bVN0cmluZygpKTsKICAgICBicmVhazsKICAgY2FzZSBMb2NhdGlvbjogewotICAgIEtIVE1MUGFy
dCAqcGFydCA9IGRvYy5wYXJ0KCk7Ci0gICAgaWYgKHBhcnQpCisgICAgRnJhbWUgKmZyYW1lID0g
ZG9jLmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKQogICAgIHsKICAgICAgIFFTdHJpbmcgc3RyID0g
dmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKIAogICAgICAgLy8gV2hlbiBhc3NpZ25p
bmcgbG9jYXRpb24sIElFIGFuZCBNb3ppbGxhIGJvdGggcmVzb2x2ZSB0aGUgVVJMCiAgICAgICAv
LyByZWxhdGl2ZSB0byB0aGUgZnJhbWUgd2hlcmUgdGhlIEphdmFTY3JpcHQgaXMgZXhlY3V0aW5n
IG5vdAogICAgICAgLy8gdGhlIHRhcmdldCBmcmFtZS4KLSAgICAgIEtIVE1MUGFydCAqYWN0aXZl
UGFydCA9IHN0YXRpY19jYXN0PEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXIgKj4oIGV4ZWMtPmR5bmFt
aWNJbnRlcnByZXRlcigpICktPnBhcnQoKTsKKyAgICAgIEZyYW1lICphY3RpdmVQYXJ0ID0gc3Rh
dGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlciAqPiggZXhlYy0+ZHluYW1pY0ludGVycHJl
dGVyKCkgKS0+ZnJhbWUoKTsKICAgICAgIGlmIChhY3RpdmVQYXJ0KQogICAgICAgICBzdHIgPSBh
Y3RpdmVQYXJ0LT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKHN0cik7CiAKICAgICAgIC8vIFdl
IHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxlZCB2aWEgYSB1c2Vy
IGdlc3R1cmUKICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRl
cnByZXRlciAqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdlc3R1
cmUoKTsKLSAgICAgIHBhcnQtPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uoc3RyLCBhY3RpdmVQYXJ0
LT5yZWZlcnJlcigpLCAhdXNlckdlc3R1cmUpOworICAgICAgZnJhbWUtPnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2Uoc3RyLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCAhdXNlckdlc3R1cmUpOwogICAg
IH0KICAgICBicmVhazsKICAgfQpAQCAtMTIyMSw3ICsxMjIxLDcgQEAgSlNWYWx1ZSAqSFRNTEVs
ZW1lbnQ6OmZyYW1lc2V0TmFtZUdldHRlcgogCiAgICAgTm9kZUltcGwgKmZyYW1lID0gZWxlbWVu
dC0+Y2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKSk7CiAgICAg
aWYgKERvY3VtZW50SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwg
Kj4oZnJhbWUpLT5jb250ZW50RG9jdW1lbnQoKSkKLSAgICAgICAgaWYgKFdpbmRvdyAqd2luZG93
ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhkb2MtPnBhcnQoKSkpCisgICAgICAgIGlmIChXaW5k
b3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZG9jLT5mcmFtZSgpKSkKICAgICAg
ICAgICAgIHJldHVybiB3aW5kb3c7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEy
MzIsNyArMTIzMiw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpmcmFtZVdpbmRvd1Byb3BlcnQK
ICAgICBIVE1MRWxlbWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNs
b3Quc2xvdEJhc2UoKSk7CiAKICAgICBpZiAoRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpLT5jb250ZW50RG9jdW1l
bnQoKSkKLSAgICAgICAgaWYgKFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyhkb2MtPnBhcnQoKSkpCisgICAgICAgIGlmIChXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0
cmlldmVXaW5kb3coZG9jLT5mcmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiB3aW5kb3ctPmdl
dChleGVjLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0x
MjkyLDcgKzEyOTIsNyBAQCBib29sIEhUTUxFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKGZyYW1lVGFn
KSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShpZnJhbWVUYWcpKSB7CiAgICAgICAgIGlmIChEb2N1
bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpLmNvbnRlbnREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdp
bmRvdzo6cmV0cmlldmVXaW5kb3coZG9jLT5wYXJ0KCkpOworICAgICAgICAgICAgV2luZG93ICp3
aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGRvYy0+ZnJhbWUoKSk7CiAgICAgICAgICAg
ICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkg
ewogICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGZyYW1lV2luZG93UHJvcGVy
dHlHZXR0ZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTM1MSw3ICsxMzUx
LDcgQEAgYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIAogICAgIEhUTUxF
bGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBs
KCkpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7
CiAgICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKLSAg
ICAgICAgS0pTUHJveHlJbXBsICpwcm94eSA9IGRvYy0+cGFydCgpLT5qU2NyaXB0KCk7CisgICAg
ICAgIEtKU1Byb3h5SW1wbCAqcHJveHkgPSBkb2MtPmZyYW1lKCktPmpTY3JpcHQoKTsKICAgICAg
ICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgaWYgKEpTVmFsdWUgKnJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4
ZWMsIGVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+
KHJ1bnRpbWVPYmplY3QpLT5pbXBsZW1lbnRzQ2FsbCgpOwpAQCAtMzYyOSw3ICszNjI5LDcgQEAg
dm9pZCBJbWFnZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCiB2b2lkIEltYWdlOjpu
b3RpZnlGaW5pc2hlZChraHRtbDo6Q2FjaGVkT2JqZWN0ICopCiB7Ci0gIGlmIChvbkxvYWRMaXN0
ZW5lciAmJiBkb2MtPnBhcnQoKSkgeworICBpZiAob25Mb2FkTGlzdGVuZXIgJiYgZG9jLT5mcmFt
ZSgpKSB7CiAgICAgaW50IGlnbm9yZUV4Y2VwdGlvbjsKICAgICBFdmVudEltcGwgKmV2ID0gZG9j
LT5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIsIGlnbm9yZUV4Y2VwdGlvbik7CiAgICAgZXYtPnJl
ZigpOwpJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2VjbWEva2pz
X3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAKICNpbmNsdWRlICJk
b21wYXJzZXIuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImtodG1sX3Bh
cnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgImtodG1sX2V4dC5oIgogI2luY2x1
ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCkBAIC05Miw4
ICs5Miw4IEBAIHB1YmxpYzoKICAgY2xhc3MgSGlzdG9yeSA6IHB1YmxpYyBKU09iamVjdCB7CiAg
ICAgZnJpZW5kIGNsYXNzIEhpc3RvcnlGdW5jOwogICBwdWJsaWM6Ci0gICAgSGlzdG9yeShFeGVj
U3RhdGUgKmV4ZWMsIEtIVE1MUGFydCAqcCkKLSAgICAgIDogSlNPYmplY3QoZXhlYy0+bGV4aWNh
bEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSksIHBhcnQocCkgeyB9Cisg
ICAgSGlzdG9yeShFeGVjU3RhdGUgKmV4ZWMsIEZyYW1lICpwKQorICAgICAgOiBKU09iamVjdChl
eGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgbV9m
cmFtZShwKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmly
dHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IEJhY2ssIEZvcndhcmQs
IEdvLCBMZW5ndGggfTsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IHBhcnQ7
CisgICAgUUd1YXJkZWRQdHI8RnJhbWU+IG1fZnJhbWU7CiAgIH07CiAKICAgY2xhc3MgRnJhbWVB
cnJheSA6IHB1YmxpYyBKU09iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBGcmFtZUFycmF5KEV4ZWNT
dGF0ZSAqZXhlYywgS0hUTUxQYXJ0ICpwKQotICAgICAgOiBKU09iamVjdChleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgcGFydChwKSB7IH0KKyAg
ICBGcmFtZUFycmF5KEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUgKnApCisgICAgICA6IEpTT2JqZWN0
KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpLCBt
X2ZyYW1lKHApIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU1ZhbHVlICpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKTsKICAgICB2aXJ0dWFs
IFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKQEAgLTExOSw3ICsxMTks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
Ci0gICAgUUd1YXJkZWRQdHI8S0hUTUxQYXJ0PiBwYXJ0OworICAgIFFHdWFyZGVkUHRyPEZyYW1l
PiBtX2ZyYW1lOwogICB9OwogCiB9CkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBTY3JlZW46Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogSlNWYWx1ZSAqU2NyZWVuOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBLV2luTW9kdWxlIGlu
Zm87Ci0gIFFXaWRnZXQgKnRoaXNXaWRnZXQgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMp
LT5wYXJ0KCktPnZpZXcoKTsKKyAgUVdpZGdldCAqdGhpc1dpZGdldCA9IFdpbmRvdzo6cmV0cmll
dmVBY3RpdmUoZXhlYyktPmZyYW1lKCktPnZpZXcoKTsKICAgUVJlY3Qgc2cgPSBRQXBwbGljYXRp
b246OmRlc2t0b3AoKS0+c2NyZWVuR2VvbWV0cnkoUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNj
cmVlbk51bWJlcih0aGlzV2lkZ2V0KSk7CiAKICAgc3dpdGNoKCB0b2tlbiApIHsKQEAgLTMwOCw5
ICszMDgsOSBAQCBjb25zdCBDbGFzc0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93CiAqLwog
S0pTX0lNUExFTUVOVF9QUk9UT0ZVTkMoV2luZG93RnVuYykKIAotV2luZG93OjpXaW5kb3coS0hU
TUxQYXJ0ICpwKQorV2luZG93OjpXaW5kb3coRnJhbWUgKnApCiAgIDogSlNPYmplY3QoLypubyBw
cm90byovKQotICAsIG1fcGFydChwKQorICAsIG1fZnJhbWUocCkKICAgLCBzY3JlZW4oMCkKICAg
LCBoaXN0b3J5KDApCiAgICwgZnJhbWVzKDApCkBAIC0zMjYsNyArMzI2LDcgQEAgV2luZG93OjpX
aW5kb3coS0hUTUxQYXJ0ICpwKQogICAsIG1fcmV0dXJuVmFsdWVTbG90KDApCiB7CiAgIHdpbnEg
PSBuZXcgV2luZG93UU9iamVjdCh0aGlzKTsKLSAgLy9rZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6
OldpbmRvdyB0aGlzPSIgPDwgdGhpcyA8PCAiIHBhcnQ9IiA8PCBtX3BhcnQgPDwgIiAiIDw8IG1f
cGFydC0+bmFtZSgpIDw8IGVuZGw7CisgIC8va2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93OjpXaW5k
b3cgdGhpcz0iIDw8IHRoaXMgPDwgIiBmcmFtZT0iIDw8IG1fZnJhbWUgPDwgIiAiIDw8IG1fZnJh
bWUtPm5hbWUoKSA8PCBlbmRsOwogfQogCiBXaW5kb3c6On5XaW5kb3coKQpAQCAtMzQ5LDE0ICsz
NDksMTQgQEAgV2luZG93Ojp+V2luZG93KCkKIAogU2NyaXB0SW50ZXJwcmV0ZXIgKldpbmRvdzo6
aW50ZXJwcmV0ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhcnQtPmpTY3JpcHQoKS0+aW50
ZXJwcmV0ZXIoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+alNjcmlwdCgpLT5pbnRlcnByZXRlcigp
OwogfQogCi1XaW5kb3cgKldpbmRvdzo6cmV0cmlldmVXaW5kb3coS0hUTUxQYXJ0ICpwKQorV2lu
ZG93ICpXaW5kb3c6OnJldHJpZXZlV2luZG93KEZyYW1lICpwKQogewogICBKU09iamVjdCAqb2Jq
ID0gcmV0cmlldmUocCktPmdldE9iamVjdCgpOwogI2lmbmRlZiBOREVCVUcKLSAgLy8gb2JqIHNo
b3VsZCBuZXZlciBiZSBudWxsLCBleGNlcHQgd2hlbiBqYXZhc2NyaXB0IGhhcyBiZWVuIGRpc2Fi
bGVkIGluIHRoYXQgcGFydC4KKyAgLy8gb2JqIHNob3VsZCBuZXZlciBiZSBudWxsLCBleGNlcHQg
d2hlbiBqYXZhc2NyaXB0IGhhcyBiZWVuIGRpc2FibGVkIGluIHRoYXQgZnJhbWUuCiAgIGlmIChw
ICYmIHAtPmpTY3JpcHRFbmFibGVkKCkpCiAgICAgYXNzZXJ0KG9iaik7CiAjZW5kaWYKQEAgLTM3
Miw3ICszNzIsNyBAQCBXaW5kb3cgKldpbmRvdzo6cmV0cmlldmVBY3RpdmUoRXhlY1N0YXRlCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdyo+KGltcCk7CiB9CiAKLUpTVmFsdWUgKldpbmRv
dzo6cmV0cmlldmUoS0hUTUxQYXJ0ICpwKQorSlNWYWx1ZSAqV2luZG93OjpyZXRyaWV2ZShGcmFt
ZSAqcCkKIHsKICAgICBhc3NlcnQocCk7CiAgICAgaWYgKEtKU1Byb3h5SW1wbCAqcHJveHkgPSBw
LT5qU2NyaXB0KCkpCkBAIC0zODQsNTYgKzM4NCw1NiBAQCBKU1ZhbHVlICpXaW5kb3c6OnJldHJp
ZXZlKEtIVE1MUGFydCAqcCkKIExvY2F0aW9uICpXaW5kb3c6OmxvY2F0aW9uKCkgY29uc3QKIHsK
ICAgaWYgKCFsb2MpCi0gICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bG9jID0gbmV3IExv
Y2F0aW9uKG1fcGFydCk7CisgICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bG9jID0gbmV3
IExvY2F0aW9uKG1fZnJhbWUpOwogICByZXR1cm4gbG9jOwogfQogCiBTZWxlY3Rpb24gKldpbmRv
dzo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgaWYgKCFtX3NlbGVjdGlvbikKLSAgICBjb25zdF9j
YXN0PFdpbmRvdyo+KHRoaXMpLT5tX3NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24obV9wYXJ0KTsK
KyAgICBjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5tX3NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rp
b24obV9mcmFtZSk7CiAgIHJldHVybiBtX3NlbGVjdGlvbjsKIH0KIAogQmFySW5mbyAqV2luZG93
Ojpsb2NhdGlvbmJhcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7CiAgIGlmICghbV9sb2NhdGlv
bmJhcikKLSAgICBjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5tX2xvY2F0aW9uYmFyID0gbmV3
IEJhckluZm8oZXhlYywgbV9wYXJ0LCBCYXJJbmZvOjpMb2NhdGlvbmJhcik7CisgICAgY29uc3Rf
Y2FzdDxXaW5kb3cqPih0aGlzKS0+bV9sb2NhdGlvbmJhciA9IG5ldyBCYXJJbmZvKGV4ZWMsIG1f
ZnJhbWUsIEJhckluZm86OkxvY2F0aW9uYmFyKTsKICAgcmV0dXJuIG1fbG9jYXRpb25iYXI7CiB9
CiAKIEJhckluZm8gKldpbmRvdzo6bWVudWJhcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7CiAg
IGlmICghbV9tZW51YmFyKQotICAgIGNvbnN0X2Nhc3Q8V2luZG93Kj4odGhpcyktPm1fbWVudWJh
ciA9IG5ldyBCYXJJbmZvKGV4ZWMsIG1fcGFydCwgQmFySW5mbzo6TWVudWJhcik7CisgICAgY29u
c3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bV9tZW51YmFyID0gbmV3IEJhckluZm8oZXhlYywgbV9m
cmFtZSwgQmFySW5mbzo6TWVudWJhcik7CiAgIHJldHVybiBtX21lbnViYXI7CiB9CiAKIEJhcklu
Zm8gKldpbmRvdzo6cGVyc29uYWxiYXIoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewogICBpZiAo
IW1fcGVyc29uYWxiYXIpCi0gICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bV9wZXJzb25h
bGJhciA9IG5ldyBCYXJJbmZvKGV4ZWMsIG1fcGFydCwgQmFySW5mbzo6UGVyc29uYWxiYXIpOwor
ICAgIGNvbnN0X2Nhc3Q8V2luZG93Kj4odGhpcyktPm1fcGVyc29uYWxiYXIgPSBuZXcgQmFySW5m
byhleGVjLCBtX2ZyYW1lLCBCYXJJbmZvOjpQZXJzb25hbGJhcik7CiAgIHJldHVybiBtX3BlcnNv
bmFsYmFyOwogfQogCiBCYXJJbmZvICpXaW5kb3c6OnN0YXR1c2JhcihFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0CiB7CiAgIGlmICghbV9zdGF0dXNiYXIpCi0gICAgY29uc3RfY2FzdDxXaW5kb3cqPih0
aGlzKS0+bV9zdGF0dXNiYXIgPSBuZXcgQmFySW5mbyhleGVjLCBtX3BhcnQsIEJhckluZm86OlN0
YXR1c2Jhcik7CisgICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bV9zdGF0dXNiYXIgPSBu
ZXcgQmFySW5mbyhleGVjLCBtX2ZyYW1lLCBCYXJJbmZvOjpTdGF0dXNiYXIpOwogICByZXR1cm4g
bV9zdGF0dXNiYXI7CiB9CiAKIEJhckluZm8gKldpbmRvdzo6dG9vbGJhcihFeGVjU3RhdGUgKmV4
ZWMpIGNvbnN0CiB7CiAgIGlmICghbV90b29sYmFyKQotICAgIGNvbnN0X2Nhc3Q8V2luZG93Kj4o
dGhpcyktPm1fdG9vbGJhciA9IG5ldyBCYXJJbmZvKGV4ZWMsIG1fcGFydCwgQmFySW5mbzo6VG9v
bGJhcik7CisgICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bV90b29sYmFyID0gbmV3IEJh
ckluZm8oZXhlYywgbV9mcmFtZSwgQmFySW5mbzo6VG9vbGJhcik7CiAgIHJldHVybiBtX3Rvb2xi
YXI7CiB9CiAKIEJhckluZm8gKldpbmRvdzo6c2Nyb2xsYmFycyhFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0CiB7CiAgIGlmICghbV9zY3JvbGxiYXJzKQotICAgIGNvbnN0X2Nhc3Q8V2luZG93Kj4odGhp
cyktPm1fc2Nyb2xsYmFycyA9IG5ldyBCYXJJbmZvKGV4ZWMsIG1fcGFydCwgQmFySW5mbzo6U2Ny
b2xsYmFycyk7CisgICAgY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+bV9zY3JvbGxiYXJzID0g
bmV3IEJhckluZm8oZXhlYywgbV9mcmFtZSwgQmFySW5mbzo6U2Nyb2xsYmFycyk7CiAgIHJldHVy
biBtX3Njcm9sbGJhcnM7CiB9CiAKQEAgLTQ3Myw4ICs0NzMsOCBAQCBVU3RyaW5nIFdpbmRvdzo6
dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvCiAKIHN0YXRpYyBib29sIGFsbG93UG9wVXAoRXhlY1N0
YXRlICpleGVjLCBXaW5kb3cgKndpbmRvdykKIHsKLSAgICByZXR1cm4gd2luZG93LT5wYXJ0KCkK
LSAgICAgICAgJiYgKHdpbmRvdy0+cGFydCgpLT5zZXR0aW5ncygpLT5KYXZhU2NyaXB0Q2FuT3Bl
bldpbmRvd3NBdXRvbWF0aWNhbGx5KCkKKyAgICByZXR1cm4gd2luZG93LT5mcmFtZSgpCisgICAg
ICAgICYmICh3aW5kb3ctPmZyYW1lKCktPnNldHRpbmdzKCktPkphdmFTY3JpcHRDYW5PcGVuV2lu
ZG93c0F1dG9tYXRpY2FsbHkoKQogICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8U2NyaXB0SW50
ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53YXNSdW5CeVVzZXJHZXN0
dXJlKCkpOwogfQogCkBAIC01MzcsMTEgKzUzNywxMSBAQCBzdGF0aWMgaW50IGludEZlYXR1cmUo
Y29uc3QgUU1hcDxRU3RyaW5nCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZCk7CiB9CiAK
LXN0YXRpYyBLSFRNTFBhcnQgKmNyZWF0ZU5ld1dpbmRvdyhFeGVjU3RhdGUgKmV4ZWMsIFdpbmRv
dyAqb3BlbmVyV2luZG93LCBjb25zdCBRU3RyaW5nICZVUkwsCitzdGF0aWMgRnJhbWUgKmNyZWF0
ZU5ld1dpbmRvdyhFeGVjU3RhdGUgKmV4ZWMsIFdpbmRvdyAqb3BlbmVyV2luZG93LCBjb25zdCBR
U3RyaW5nICZVUkwsCiAgICAgY29uc3QgUVN0cmluZyAmZnJhbWVOYW1lLCBjb25zdCBXaW5kb3dB
cmdzICZ3aW5kb3dBcmdzLCBKU1ZhbHVlICpkaWFsb2dBcmdzKQogewotICAgIEtIVE1MUGFydCAq
b3BlbmVyUGFydCA9IG9wZW5lcldpbmRvdy0+cGFydCgpOwotICAgIEtIVE1MUGFydCAqYWN0aXZl
UGFydCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPnBhcnQoKTsKKyAgICBGcmFtZSAq
b3BlbmVyUGFydCA9IG9wZW5lcldpbmRvdy0+ZnJhbWUoKTsKKyAgICBGcmFtZSAqYWN0aXZlUGFy
dCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmZyYW1lKCk7CiAKICAgICBVUkxBcmdz
IHVhcmdzOwogCkBAIC01NjAsMTAgKzU2MCwxMCBAQCBzdGF0aWMgS0hUTUxQYXJ0ICpjcmVhdGVO
ZXdXaW5kb3coRXhlY1N0CiAgICAgUmVhZE9ubHlQYXJ0ICpuZXdSZWFkT25seVBhcnQgPSAwOwog
ICAgIG9wZW5lclBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKS0+Y3JlYXRlTmV3V2luZG93KCIiLCB1
YXJncywgd2luZG93QXJncywgbmV3UmVhZE9ubHlQYXJ0KTsKIAotICAgIGlmICghbmV3UmVhZE9u
bHlQYXJ0IHx8ICFuZXdSZWFkT25seVBhcnQtPmluaGVyaXRzKCJLSFRNTFBhcnQiKSkKKyAgICBp
ZiAoIW5ld1JlYWRPbmx5UGFydCB8fCAhbmV3UmVhZE9ubHlQYXJ0LT5pbmhlcml0cygiRnJhbWUi
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBLSFRNTFBhcnQgKm5ld1BhcnQgPSBzdGF0aWNf
Y2FzdDxLSFRNTFBhcnQgKj4obmV3UmVhZE9ubHlQYXJ0KTsKKyAgICBGcmFtZSAqbmV3UGFydCA9
IHN0YXRpY19jYXN0PEZyYW1lICo+KG5ld1JlYWRPbmx5UGFydCk7CiAgICAgV2luZG93ICpuZXdX
aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KG5ld1BhcnQpOwogCiAgICAgbmV3UGFydC0+
c2V0T3BlbmVyKG9wZW5lclBhcnQpOwpAQCAtNTg1LDE0ICs1ODUsMTQgQEAgc3RhdGljIEtIVE1M
UGFydCAqY3JlYXRlTmV3V2luZG93KEV4ZWNTdAogCiBzdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxE
aWFsb2coY29uc3QgV2luZG93ICp3aW5kb3cpCiB7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gd2lu
ZG93LT5wYXJ0KCk7Ci0gICAgcmV0dXJuIHBhcnQgJiYgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0QnJv
d3NlckV4dGVuc2lvbiAqPihwYXJ0LT5icm93c2VyRXh0ZW5zaW9uKCkpLT5jYW5SdW5Nb2RhbCgp
OworICAgIEZyYW1lICpmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICByZXR1cm4gZnJhbWUg
JiYgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiAqPihmcmFtZS0+YnJvd3Nl
ckV4dGVuc2lvbigpKS0+Y2FuUnVuTW9kYWwoKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuU2hvd01v
ZGFsRGlhbG9nTm93KGNvbnN0IFdpbmRvdyAqd2luZG93KQogewotICAgIEtIVE1MUGFydCAqcGFy
dCA9IHdpbmRvdy0+cGFydCgpOwotICAgIHJldHVybiBwYXJ0ICYmIHN0YXRpY19jYXN0PEtIVE1M
UGFydEJyb3dzZXJFeHRlbnNpb24gKj4ocGFydC0+YnJvd3NlckV4dGVuc2lvbigpKS0+Y2FuUnVu
TW9kYWxOb3coKTsKKyAgICBGcmFtZSAqZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgcmV0
dXJuIGZyYW1lICYmIHN0YXRpY19jYXN0PEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb24gKj4oZnJh
bWUtPmJyb3dzZXJFeHRlbnNpb24oKSktPmNhblJ1bk1vZGFsTm93KCk7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlICpzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlICpleGVjLCBXaW5kb3cgKm9wZW5lcldp
bmRvdywgY29uc3QgTGlzdCAmYXJncykKQEAgLTYxNiw3ICs2MTYsNyBAQCBzdGF0aWMgSlNWYWx1
ZSAqc2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0CiAgICAgLy8gLSBoZWxwOiBib29sRmVhdHVyZShm
ZWF0dXJlcywgImhlbHAiLCB0cnVlKSwgbWFrZXMgaGVscCBpY29uIGFwcGVhciBpbiBkaWFsb2cg
KHdoYXQgZG9lcyBpdCBkbyBvbiBXaW5kb3dzPykKICAgICAvLyAtIHVuYWRvcm5lZDogdHJ1c3Rl
ZCAmJiBib29sRmVhdHVyZShmZWF0dXJlcywgInVuYWRvcm5lZCIpOwogCi0gICAgUVJlY3Qgc2Ny
ZWVuUmVjdCA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5hdmFpbGFibGVHZW9tZXRyeShvcGVu
ZXJXaW5kb3ctPnBhcnQoKS0+dmlldygpKTsKKyAgICBRUmVjdCBzY3JlZW5SZWN0ID0gUUFwcGxp
Y2F0aW9uOjpkZXNrdG9wKCktPmF2YWlsYWJsZUdlb21ldHJ5KG9wZW5lcldpbmRvdy0+ZnJhbWUo
KS0+dmlldygpKTsKIAogICAgIHdhcmdzLndpZHRoID0gaW50RmVhdHVyZShmZWF0dXJlcywgImRp
YWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5SZWN0LndpZHRoKCksIDYyMCk7IC8vIGRlZmF1bHQgaGVy
ZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKICAgICB3YXJncy53aWR0
aFNldCA9IHRydWU7CkBAIC02NDgsNyArNjQ4LDcgQEAgc3RhdGljIEpTVmFsdWUgKnNob3dNb2Rh
bERpYWxvZyhFeGVjU3RhdAogICAgIHdhcmdzLmxvY2F0aW9uQmFyVmlzaWJsZSA9IGZhbHNlOwog
ICAgIHdhcmdzLmZ1bGxzY3JlZW4gPSBmYWxzZTsKICAgICAKLSAgICBLSFRNTFBhcnQgKmRpYWxv
Z1BhcnQgPSBjcmVhdGVOZXdXaW5kb3coZXhlYywgb3BlbmVyV2luZG93LCBVUkwucXN0cmluZygp
LCAiIiwgd2FyZ3MsIGFyZ3NbMV0pOworICAgIEZyYW1lICpkaWFsb2dQYXJ0ID0gY3JlYXRlTmV3
V2luZG93KGV4ZWMsIG9wZW5lcldpbmRvdywgVVJMLnFzdHJpbmcoKSwgIiIsIHdhcmdzLCBhcmdz
WzFdKTsKICAgICBpZiAoIWRpYWxvZ1BhcnQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCkBAIC02NjIsMTcgKzY2MiwxNyBAQCBzdGF0aWMgSlNWYWx1ZSAqc2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0CiAKIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgIGFzc2VydCh0b2tlbiA9PSBDbG9zZWQgfHwg
bV9wYXJ0KTsKKyAgIGFzc2VydCh0b2tlbiA9PSBDbG9zZWQgfHwgbV9mcmFtZSk7CiAKICAgIHN3
aXRjaCAodG9rZW4pIHsKICAgIGNhc2UgQ2xvc2VkOgotICAgICAgcmV0dXJuIGpzQm9vbGVhbiht
X3BhcnQuaXNOdWxsKCkpOworICAgICAgcmV0dXJuIGpzQm9vbGVhbihtX2ZyYW1lLmlzTnVsbCgp
KTsKICAgIGNhc2UgQ3J5cHRvOgogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vICMjIwog
ICAgY2FzZSBEZWZhdWx0U3RhdHVzOgotICAgICAgcmV0dXJuIGpzU3RyaW5nKFVTdHJpbmcobV9w
YXJ0LT5qc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkpKTsKKyAgICAgIHJldHVybiBqc1N0cmluZyhV
U3RyaW5nKG1fZnJhbWUtPmpzRGVmYXVsdFN0YXR1c0JhclRleHQoKSkpOwogICAgY2FzZSBTdGF0
dXM6Ci0gICAgICByZXR1cm4ganNTdHJpbmcoVVN0cmluZyhtX3BhcnQtPmpzU3RhdHVzQmFyVGV4
dCgpKSk7CisgICAgICByZXR1cm4ganNTdHJpbmcoVVN0cmluZyhtX2ZyYW1lLT5qc1N0YXR1c0Jh
clRleHQoKSkpOwogICAgIGNhc2UgTm9kZToKICAgICAgIHJldHVybiBnZXROb2RlQ29uc3RydWN0
b3IoZXhlYyk7CiAgICAgY2FzZSBSYW5nZToKQEAgLTY4NywzNCArNjg3LDM0IEBAIEpTVmFsdWUg
KldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QKICAgICAgIHJldHVybiBnZXRFdmVudENv
bnN0cnVjdG9yKGV4ZWMpOwogICAgIGNhc2UgRnJhbWVzOgogICAgICAgaWYgKCFmcmFtZXMpCi0g
ICAgICAgIGZyYW1lcyA9IG5ldyBGcmFtZUFycmF5KGV4ZWMsIG1fcGFydCk7CisgICAgICAgIGZy
YW1lcyA9IG5ldyBGcmFtZUFycmF5KGV4ZWMsIG1fZnJhbWUpOwogICAgICAgcmV0dXJuIGZyYW1l
czsKICAgICBjYXNlIF9IaXN0b3J5OgogICAgICAgaWYgKCFoaXN0b3J5KQotICAgICAgICBoaXN0
b3J5ID0gbmV3IEhpc3RvcnkoZXhlYywgbV9wYXJ0KTsKKyAgICAgICAgaGlzdG9yeSA9IG5ldyBI
aXN0b3J5KGV4ZWMsIG1fZnJhbWUpOwogICAgICAgcmV0dXJuIGhpc3Rvcnk7CiAgICAgY2FzZSBF
dmVudDoKICAgICAgIGlmICghbV9ldnQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgcmV0dXJuIGdldERPTUV2ZW50KGV4ZWMsIG1fZXZ0KTsKICAgICBjYXNlIElubmVySGVp
Z2h0OgotICAgICAgaWYgKCFtX3BhcnQtPnZpZXcoKSkKKyAgICAgIGlmICghbV9mcmFtZS0+dmll
dygpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIHJldHVybiBqc051bWJl
cihtX3BhcnQtPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpKTsKKyAgICAgIHJldHVybiBqc051bWJl
cihtX2ZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7CiAgICAgY2FzZSBJbm5lcldpZHRo
OgotICAgICAgaWYgKCFtX3BhcnQtPnZpZXcoKSkKKyAgICAgIGlmICghbV9mcmFtZS0+dmlldygp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIHJldHVybiBqc051bWJlciht
X3BhcnQtPnZpZXcoKS0+dmlzaWJsZVdpZHRoKCkpOworICAgICAgcmV0dXJuIGpzTnVtYmVyKG1f
ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZVdpZHRoKCkpOwogICAgIGNhc2UgTGVuZ3RoOgotICAgICAg
cmV0dXJuIGpzTnVtYmVyKG1fcGFydC0+ZnJhbWVzKCkuY291bnQoKSk7CisgICAgICByZXR1cm4g
anNOdW1iZXIobV9mcmFtZS0+ZnJhbWVzKCkuY291bnQoKSk7CiAgICAgY2FzZSBfTG9jYXRpb246
CiAgICAgICByZXR1cm4gbG9jYXRpb24oKTsKICAgICBjYXNlIE5hbWU6Ci0gICAgICByZXR1cm4g
anNTdHJpbmcobV9wYXJ0LT5uYW1lKCkpOworICAgICAgcmV0dXJuIGpzU3RyaW5nKG1fZnJhbWUt
Pm5hbWUoKSk7CiAgICAgY2FzZSBfTmF2aWdhdG9yOgogICAgIGNhc2UgQ2xpZW50SW5mb3JtYXRp
b246IHsKICAgICAgIC8vIFN0b3JlIHRoZSBuYXZpZ2F0b3IgaW4gdGhlIG9iamVjdCBzbyB3ZSBn
ZXQgdGhlIHNhbWUgb25lIGVhY2ggdGltZS4KLSAgICAgIE5hdmlnYXRvciAqbiA9IG5ldyBOYXZp
Z2F0b3IoZXhlYywgbV9wYXJ0KTsKKyAgICAgIE5hdmlnYXRvciAqbiA9IG5ldyBOYXZpZ2F0b3Io
ZXhlYywgbV9mcmFtZSk7CiAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIG1ha2UgdGhlICJuYXZp
Z2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxlIGZyb20gd2luZG93cyB0aGF0IGZhaWwKICAgICAgIC8v
IHRoZSBzZWN1cml0eSBjaGVjayB0aGUgZmlyc3QgdGltZSwgYnV0IG5vdCBzdWJzZXF1ZW50IHRp
bWVzLCBzZWVtcyB3ZWlyZC4KICAgICAgIGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXRE
aXJlY3QoIm5hdmlnYXRvciIsIG4sIERvbnREZWxldGV8UmVhZE9ubHkpOwpAQCAtNzI4LDYyICs3
MjgsNjIgQEAgSlNWYWx1ZSAqV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogICAgIGNh
c2UgT2Zmc2NyZWVuQnVmZmVyaW5nOgogICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKICAg
ICBjYXNlIE9wZW5lcjoKLSAgICAgIGlmIChtX3BhcnQtPm9wZW5lcigpKQotICAgICAgICByZXR1
cm4gcmV0cmlldmUobV9wYXJ0LT5vcGVuZXIoKSk7CisgICAgICBpZiAobV9mcmFtZS0+b3BlbmVy
KCkpCisgICAgICAgIHJldHVybiByZXRyaWV2ZShtX2ZyYW1lLT5vcGVuZXIoKSk7CiAgICAgICBl
bHNlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBjYXNlIE91dGVySGVpZ2h0OgogICAg
IGNhc2UgT3V0ZXJXaWR0aDoKICAgICB7Ci0gICAgICBpZiAobV9wYXJ0LT52aWV3KCkpIHsKLSAg
ICAgICAgUVJlY3QgZnJhbWUgPSBtX3BhcnQtPnZpZXcoKS0+dG9wTGV2ZWxXaWRnZXQoKS0+ZnJh
bWVHZW9tZXRyeSgpOworICAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkgeworICAgICAgICBRUmVj
dCBmcmFtZSA9IG1fZnJhbWUtPnZpZXcoKS0+dG9wTGV2ZWxXaWRnZXQoKS0+ZnJhbWVHZW9tZXRy
eSgpOwogICAgICAgICByZXR1cm4ganNOdW1iZXIodG9rZW4gPT0gT3V0ZXJIZWlnaHQgPyBmcmFt
ZS5oZWlnaHQoKSA6IGZyYW1lLndpZHRoKCkpOwogICAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBqc051bWJlcigwKTsKICAgICB9CiAgICAgY2FzZSBQYWdlWE9mZnNldDoKLSAgICAgIGlmICgh
bV9wYXJ0LT52aWV3KCkpCisgICAgICBpZiAoIW1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgIHJldHVybiBq
c051bWJlcihtX3BhcnQtPnZpZXcoKS0+Y29udGVudHNYKCkpOworICAgICAgcmV0dXJuIGpzTnVt
YmVyKG1fZnJhbWUtPnZpZXcoKS0+Y29udGVudHNYKCkpOwogICAgIGNhc2UgUGFnZVlPZmZzZXQ6
Ci0gICAgICBpZiAoIW1fcGFydC0+dmlldygpKQorICAgICAgaWYgKCFtX2ZyYW1lLT52aWV3KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgdXBkYXRlTGF5b3V0KCk7Ci0g
ICAgICByZXR1cm4ganNOdW1iZXIobV9wYXJ0LT52aWV3KCktPmNvbnRlbnRzWSgpKTsKKyAgICAg
IHJldHVybiBqc051bWJlcihtX2ZyYW1lLT52aWV3KCktPmNvbnRlbnRzWSgpKTsKICAgICBjYXNl
IFBhcmVudDoKLSAgICAgIHJldHVybiByZXRyaWV2ZShtX3BhcnQtPnBhcmVudFBhcnQoKSA/IG1f
cGFydC0+cGFyZW50UGFydCgpIDogKEtIVE1MUGFydCopbV9wYXJ0KTsKKyAgICAgIHJldHVybiBy
ZXRyaWV2ZShtX2ZyYW1lLT5wYXJlbnRGcmFtZSgpID8gbV9mcmFtZS0+cGFyZW50RnJhbWUoKSA6
IChGcmFtZSopbV9mcmFtZSk7CiAgICAgY2FzZSBQZXJzb25hbGJhcjoKICAgICAgIHJldHVybiBw
ZXJzb25hbGJhcihleGVjKTsKICAgICBjYXNlIFNjcmVlbkxlZnQ6CiAgICAgY2FzZSBTY3JlZW5Y
OiB7Ci0gICAgICBpZiAobV9wYXJ0LT52aWV3KCkpIHsKKyAgICAgIGlmIChtX2ZyYW1lLT52aWV3
KCkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byB1c2UgZnJhbWVHZW9tZXRyeSBoZXJlIGluc3Rl
YWQgb2YgbWFwVG9HbG9iYWwgYmVjYXVzZSBpdCBnb2VzIHRocm91Z2gKICAgICAgICAgLy8gdGhl
IHdpbmRvd0ZyYW1lIG1ldGhvZCBvZiB0aGUgV2ViS2l0J3MgVUkgZGVsZWdhdGUuIEFsc28gd2Ug
ZG9uJ3Qgd2FudCB0byB0cnkKICAgICAgICAgLy8gdG8gZG8gYW55dGhpbmcgcmVsYXRpdmUgdG8g
dGhlIHNjcmVlbiB0aGUgd2luZG93IGlzIG9uLCBzbyB0aGUgY29kZSBiZWxvdyBpcyBubwogICAg
ICAgICAvLyBnb29kIG9mIHVzIGFueXdheS4KLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcGFy
dC0+dmlldygpLT50b3BMZXZlbFdpZGdldCgpLT5mcmFtZUdlb21ldHJ5KCkueCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG1fZnJhbWUtPnZpZXcoKS0+dG9wTGV2ZWxXaWRnZXQoKS0+ZnJh
bWVHZW9tZXRyeSgpLngoKSk7CiAgICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIGNhc2UgU2NyZWVuVG9wOgogICAgIGNhc2UgU2NyZWVuWTogewot
ICAgICAgaWYgKG1fcGFydC0+dmlldygpKSB7CisgICAgICBpZiAobV9mcmFtZS0+dmlldygpKSB7
CiAgICAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGluIFNjcmVlblguCi0gICAgICAgIHJldHVy
biBqc051bWJlcihtX3BhcnQtPnZpZXcoKS0+dG9wTGV2ZWxXaWRnZXQoKS0+ZnJhbWVHZW9tZXRy
eSgpLnkoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihtX2ZyYW1lLT52aWV3KCktPnRvcExl
dmVsV2lkZ2V0KCktPmZyYW1lR2VvbWV0cnkoKS55KCkpOwogICAgICAgfSBlbHNlIAogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgY2FzZSBTY3JvbGxYOgotICAgICAg
aWYgKCFtX3BhcnQtPnZpZXcoKSkKKyAgICAgIGlmICghbV9mcmFtZS0+dmlldygpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgICAgcmV0
dXJuIGpzTnVtYmVyKG1fcGFydC0+dmlldygpLT5jb250ZW50c1goKSk7CisgICAgICByZXR1cm4g
anNOdW1iZXIobV9mcmFtZS0+dmlldygpLT5jb250ZW50c1goKSk7CiAgICAgY2FzZSBTY3JvbGxZ
OgotICAgICAgaWYgKCFtX3BhcnQtPnZpZXcoKSkKKyAgICAgIGlmICghbV9mcmFtZS0+dmlldygp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIHVwZGF0ZUxheW91dCgpOwot
ICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fcGFydC0+dmlldygpLT5jb250ZW50c1koKSk7CisgICAg
ICByZXR1cm4ganNOdW1iZXIobV9mcmFtZS0+dmlldygpLT5jb250ZW50c1koKSk7CiAgICAgY2Fz
ZSBTY3JvbGxiYXJzOgogICAgICAgcmV0dXJuIHNjcm9sbGJhcnMoZXhlYyk7CiAgICAgY2FzZSBT
dGF0dXNiYXI6CkBAIC03OTIsMTEgKzc5MiwxMSBAQCBKU1ZhbHVlICpXaW5kb3c6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0CiAgICAgICByZXR1cm4gdG9vbGJhcihleGVjKTsKICAgICBjYXNlIFNl
bGY6CiAgICAgY2FzZSBfV2luZG93OgotICAgICAgcmV0dXJuIHJldHJpZXZlKG1fcGFydCk7Cisg
ICAgICByZXR1cm4gcmV0cmlldmUobV9mcmFtZSk7CiAgICAgY2FzZSBUb3A6IHsKLSAgICAgIEtI
VE1MUGFydCAqcCA9IG1fcGFydDsKLSAgICAgIHdoaWxlIChwLT5wYXJlbnRQYXJ0KCkpCi0gICAg
ICAgIHAgPSBwLT5wYXJlbnRQYXJ0KCk7CisgICAgICBGcmFtZSAqcCA9IG1fZnJhbWU7CisgICAg
ICB3aGlsZSAocC0+cGFyZW50RnJhbWUoKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudEZyYW1lKCk7
CiAgICAgICByZXR1cm4gcmV0cmlldmUocCk7CiAgICAgfQogICAgIGNhc2UgX1NjcmVlbjoKQEAg
LTgwNiwxNSArODA2LDE1IEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3QKICAgICBjYXNlIEltYWdlOgogICAgICAgLy8gRklYTUU6IHRoaXMgcHJvcGVydHkgKGFuZCB0
aGUgZmV3IGJlbG93KSBwcm9iYWJseSBzaG91bGRuJ3QgY3JlYXRlIGEgbmV3IG9iamVjdCBldmVy
eQogICAgICAgLy8gdGltZQotICAgICAgcmV0dXJuIG5ldyBJbWFnZUNvbnN0cnVjdG9ySW1wKGV4
ZWMsIG1fcGFydC0+eG1sRG9jSW1wbCgpKTsKKyAgICAgIHJldHVybiBuZXcgSW1hZ2VDb25zdHJ1
Y3RvckltcChleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwogICAgIGNhc2UgT3B0aW9uOgot
ICAgICAgcmV0dXJuIG5ldyBPcHRpb25Db25zdHJ1Y3RvckltcChleGVjLCBtX3BhcnQtPnhtbERv
Y0ltcGwoKSk7CisgICAgICByZXR1cm4gbmV3IE9wdGlvbkNvbnN0cnVjdG9ySW1wKGV4ZWMsIG1f
ZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDoKLSAgICAgIHJl
dHVybiBuZXcgWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcChleGVjLCBtX3BhcnQtPnhtbERv
Y0ltcGwoKSk7CisgICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAo
ZXhlYywgbV9mcmFtZS0+eG1sRG9jSW1wbCgpKTsKICAgICBjYXNlIFhNTFNlcmlhbGl6ZXI6CiAg
ICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXJDb25zdHJ1Y3RvckltcChleGVjKTsKICAgICBj
YXNlIERPTVBhcnNlcjoKLSAgICAgIHJldHVybiBuZXcgRE9NUGFyc2VyQ29uc3RydWN0b3JJbXAo
ZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOworICAgICAgcmV0dXJuIG5ldyBET01QYXJzZXJD
b25zdHJ1Y3RvckltcChleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwogI2lmZGVmIEtIVE1M
X1hTTFQKICAgICBjYXNlIFhTTFRQcm9jZXNzb3I6CiAgICAgICByZXR1cm4gbmV3IFhTTFRQcm9j
ZXNzb3JDb25zdHJ1Y3RvckltcChleGVjKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCBKU1ZhbHVlICpX
aW5kb3c6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICNlbmRpZgogICAgIGNhc2UgRnJhbWVFbGVtZW50OgotICAgICAgaWYgKERvY3VtZW50SW1w
bCAqZG9jID0gbV9wYXJ0LT54bWxEb2NJbXBsKCkpCisgICAgICBpZiAoRG9jdW1lbnRJbXBsICpk
b2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpCiAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqZmUg
PSBkb2MtPm93bmVyRWxlbWVudCgpKQogICAgICAgICAgIGlmIChjaGVja05vZGVTZWN1cml0eShl
eGVjLCBmZSkpIHsKICAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZlKTsKQEAg
LTgzNiwxMyArODM2LDEzIEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3QKIAogICAgc3dpdGNoICh0b2tlbikgewogICAgY2FzZSBEb2N1bWVudDoKLSAgICAgaWYgKCFt
X3BhcnQtPnhtbERvY0ltcGwoKSkgewotICAgICAgIEtXUShtX3BhcnQpLT5jcmVhdGVFbXB0eURv
Y3VtZW50KCk7Ci0gICAgICAgbV9wYXJ0LT5iZWdpbigpOwotICAgICAgIG1fcGFydC0+d3JpdGUo
IjxIVE1MPjxCT0RZPiIpOwotICAgICAgIG1fcGFydC0+ZW5kKCk7CisgICAgIGlmICghbV9mcmFt
ZS0+eG1sRG9jSW1wbCgpKSB7CisgICAgICAgTWFjKG1fZnJhbWUpLT5jcmVhdGVFbXB0eURvY3Vt
ZW50KCk7CisgICAgICAgbV9mcmFtZS0+YmVnaW4oKTsKKyAgICAgICBtX2ZyYW1lLT53cml0ZSgi
PEhUTUw+PEJPRFk+Iik7CisgICAgICAgbV9mcmFtZS0+ZW5kKCk7CiAgICAgIH0KLSAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOworICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwogICAgY2FzZSBPbmFib3J0
OgogICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgYWJvcnRFdmVudCk7CiAgICBjYXNlIE9u
Ymx1cjoKQEAgLTkwNSwzMCArOTA1LDMwIEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3QKIEpTVmFsdWUgKldpbmRvdzo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIFdpbmRvdyAqdGhpc09iaiA9
IHN0YXRpY19jYXN0PFdpbmRvdyAqPihzbG90LnNsb3RCYXNlKCkpOwotICByZXR1cm4gcmV0cmll
dmUodGhpc09iai0+bV9wYXJ0LT5jaGlsZEZyYW1lTmFtZWQocHJvcGVydHlOYW1lLnFzdHJpbmco
KSkpOworICByZXR1cm4gcmV0cmlldmUodGhpc09iai0+bV9mcmFtZS0+Y2hpbGRGcmFtZU5hbWVk
KHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpKTsKIH0KIAogSlNWYWx1ZSAqV2luZG93OjpuYW1lZEZy
YW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+KHNsb3Quc2xvdEJhc2Uo
KSk7Ci0gIHJldHVybiByZXRyaWV2ZSh0aGlzT2JqLT5tX3BhcnQtPmZpbmRGcmFtZShwcm9wZXJ0
eU5hbWUucXN0cmluZygpKSk7CisgIHJldHVybiByZXRyaWV2ZSh0aGlzT2JqLT5tX2ZyYW1lLT5m
aW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJpbmcoKSkpOwogfQogCiBKU1ZhbHVlICpXaW5kb3c6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgIAotICBRUHRyTGlzdDxLUGFydHM6OlJlYWRPbmx5UGFydD4gZnJhbWVzID0gdGhp
c09iai0+bV9wYXJ0LT5mcmFtZXMoKTsKKyAgUVB0ckxpc3Q8S1BhcnRzOjpSZWFkT25seVBhcnQ+
IGZyYW1lcyA9IHRoaXNPYmotPm1fZnJhbWUtPmZyYW1lcygpOwogICBLUGFydHM6OlJlYWRPbmx5
UGFydCogZnJhbWUgPSBmcmFtZXMuYXQoc2xvdC5pbmRleCgpKTsKLSAgYXNzZXJ0KGZyYW1lICYm
IGZyYW1lLT5pbmhlcml0cygiS0hUTUxQYXJ0IikpOworICBhc3NlcnQoZnJhbWUgJiYgZnJhbWUt
PmluaGVyaXRzKCJGcmFtZSIpKTsKIAotICByZXR1cm4gcmV0cmlldmUoc3RhdGljX2Nhc3Q8S0hU
TUxQYXJ0Kj4oZnJhbWUpKTsKKyAgcmV0dXJuIHJldHJpZXZlKHN0YXRpY19jYXN0PEZyYW1lKj4o
ZnJhbWUpKTsKIH0KIAogSlNWYWx1ZSAqV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBXaW5kb3cgKnRoaXNPYmog
PSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgRG9jdW1lbnRJbXBs
ICpkb2MgPSB0aGlzT2JqLT5tX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgRG9jdW1lbnRJbXBsICpk
b2MgPSB0aGlzT2JqLT5tX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgIGFzc2VydCh0aGlzT2JqLT5p
c1NhZmVTY3JpcHQoZXhlYykgJiYgZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1lbnQoKSk7CiAKICAg
RE9NU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCk7CkBAIC05NDIsNyArOTQy
LDcgQEAgSlNWYWx1ZSAqV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YQogYm9vbCBXaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAvLyB3ZSBkb24ndCB3YW50
IGFueSBwcm9wZXJ0aWVzIG90aGVyIHRoYW4gImNsb3NlZCIgb24gYSBjbG9zZWQgd2luZG93Ci0g
IGlmIChtX3BhcnQuaXNOdWxsKCkpIHsKKyAgaWYgKG1fZnJhbWUuaXNOdWxsKCkpIHsKICAgICBp
ZiAocHJvcGVydHlOYW1lID09ICJjbG9zZWQiKSB7CiAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5
KHRoaXMsIExvb2t1cDo6ZmluZEVudHJ5KCZXaW5kb3dUYWJsZSwgImNsb3NlZCIpLCBzdGF0aWNW
YWx1ZUdldHRlcjxXaW5kb3c+KTsKICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcyLDcgKzk3Miw3
IEBAIGJvb2wgV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXQKICAgLy8gbmFtaW5n
IGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9wZXJ0aWVzIHRoYXQK
ICAgLy8gYXJlIGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2Us
IHdlIGhhdmUgdG8gZG8KICAgLy8gaXQgdGhlIE1veiB3YXkuCi0gIEtIVE1MUGFydCAqY2hpbGRG
cmFtZSA9IG1fcGFydC0+Y2hpbGRGcmFtZU5hbWVkKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpOwor
ICBGcmFtZSAqY2hpbGRGcmFtZSA9IG1fZnJhbWUtPmNoaWxkRnJhbWVOYW1lZChwcm9wZXJ0eU5h
bWUucXN0cmluZygpKTsKICAgaWYgKGNoaWxkRnJhbWUpIHsKICAgICBzbG90LnNldEN1c3RvbSh0
aGlzLCBjaGlsZEZyYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMDIsNyArMTAw
Miw3IEBAIGJvb2wgV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXQKICAgICByZXR1
cm4gdHJ1ZTsKICAgfQogCi0gIEtIVE1MUGFydCAqa3AgPSBtX3BhcnQtPmZpbmRGcmFtZShwcm9w
ZXJ0eU5hbWUucXN0cmluZygpKTsKKyAgRnJhbWUgKmtwID0gbV9mcmFtZS0+ZmluZEZyYW1lKHBy
b3BlcnR5TmFtZS5xc3RyaW5nKCkpOwogICBpZiAoa3ApIHsKICAgICBzbG90LnNldEN1c3RvbSh0
aGlzLCBuYW1lZEZyYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTIsMTEgKzEw
MTIsMTEgQEAgYm9vbCBXaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogICBib29s
IG9rOwogICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsK
ICAgaWYgKG9rKSB7Ci0gICAgUVB0ckxpc3Q8S1BhcnRzOjpSZWFkT25seVBhcnQ+IGZyYW1lcyA9
IG1fcGFydC0+ZnJhbWVzKCk7CisgICAgUVB0ckxpc3Q8S1BhcnRzOjpSZWFkT25seVBhcnQ+IGZy
YW1lcyA9IG1fZnJhbWUtPmZyYW1lcygpOwogICAgIHVuc2lnbmVkIGludCBsZW4gPSBmcmFtZXMu
Y291bnQoKTsKICAgICBpZiAoaSA8IGxlbikgewogICAgICAgS1BhcnRzOjpSZWFkT25seVBhcnQq
IGZyYW1lID0gZnJhbWVzLmF0KGkpOwotICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pbmhlcml0
cygiS0hUTUxQYXJ0IikpIHsKKyAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+aW5oZXJpdHMoIkZy
YW1lIikpIHsKICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRl
cik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAg
Ym9vbCBXaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogICB9CiAKICAgLy8gYWxs
b3cgc2hvcnRjdXRzIGxpa2UgJ0ltYWdlMScgaW5zdGVhZCBvZiBkb2N1bWVudC5pbWFnZXMuSW1h
Z2UxCi0gIERvY3VtZW50SW1wbCAqZG9jID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7CisgIERvY3Vt
ZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICBpZiAoaXNTYWZlU2NyaXB0
KGV4ZWMpICYmIGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICBET01TdHJpbmcg
bmFtZSA9IHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50SW1wbCAqPihkb2MpLT5oYXNOYW1lZEl0ZW0obmFtZSkgfHwgZG9jLT5nZXRFbGVt
ZW50QnlJZChuYW1lKSkgewpAQCAtMTA1OCwyMCArMTA1OCwyMCBAQCB2b2lkIFdpbmRvdzo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgIHsKICAgICBzd2l0Y2goIGVudHJ5LT52YWx1ZSAp
IHsKICAgICBjYXNlIFN0YXR1czoKLSAgICAgIG1fcGFydC0+c2V0SlNTdGF0dXNCYXJUZXh0KHZh
bHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAgICAgbV9mcmFtZS0+c2V0SlNTdGF0
dXNCYXJUZXh0KHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogICAgICAgcmV0dXJu
OwogICAgIGNhc2UgRGVmYXVsdFN0YXR1czoKLSAgICAgIG1fcGFydC0+c2V0SlNEZWZhdWx0U3Rh
dHVzQmFyVGV4dCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKKyAgICAgIG1fZnJh
bWUtPnNldEpTRGVmYXVsdFN0YXR1c0JhclRleHQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKSk7CiAgICAgICByZXR1cm47CiAgICAgY2FzZSBfTG9jYXRpb246IHsKLSAgICAgIEtIVE1M
UGFydCogcCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPm1fcGFydDsKKyAgICAgIEZy
YW1lKiBwID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+bV9mcmFtZTsKICAgICAgIGlm
IChwKSB7CiAgICAgICAgIFFTdHJpbmcgZHN0VXJsID0gcC0+eG1sRG9jSW1wbCgpLT5jb21wbGV0
ZVVSTCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICAgICAgaWYgKCFkc3RV
cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgaXNTYWZlU2NyaXB0KGV4ZWMp
KQogICAgICAgICB7CiAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNj
cmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlV
c2VyR2VzdHVyZSgpOwogICAgICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlm
IHRoaXMgSlMgd2FzIGNhbGxlZCB2aWEgYSB1c2VyIGdlc3R1cmUKLSAgICAgICAgICBtX3BhcnQt
PnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoZHN0VXJsLCBwLT5yZWZlcnJlcigpLCAhdXNlckdlc3R1
cmUsIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgICBtX2ZyYW1lLT5zY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKGRzdFVybCwgcC0+cmVmZXJyZXIoKSwgIXVzZXJHZXN0dXJlLCB1c2VyR2VzdHVyZSk7CiAg
ICAgICAgIH0KICAgICAgIH0KICAgICAgIHJldHVybjsKQEAgLTExODYsNyArMTE4Niw3IEBAIHZv
aWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICAgIHJldHVybjsKICAg
ICBjYXNlIE5hbWU6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBtX3Bh
cnQtPnNldE5hbWUoIHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkgKTsKKyAgICAgICAg
bV9mcmFtZS0+c2V0TmFtZSggdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSApOwogICAg
ICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTExOTksMTQgKzExOTks
MTQgQEAgdm9pZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogCiBib29sIFdp
bmRvdzo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdAogewotICByZXR1cm4gIW1fcGFydC5p
c051bGwoKTsKKyAgcmV0dXJuICFtX2ZyYW1lLmlzTnVsbCgpOwogfQogCiB2b2lkIFdpbmRvdzo6
c2NoZWR1bGVDbG9zZSgpCiB7Ci0gIGtkRGVidWcoNjA3MCkgPDwgIldpbmRvdzo6c2NoZWR1bGVD
bG9zZSB3aW5kb3cuY2xvc2UoKSAiIDw8IG1fcGFydCA8PCBlbmRsOworICBrZERlYnVnKDYwNzAp
IDw8ICJXaW5kb3c6OnNjaGVkdWxlQ2xvc2Ugd2luZG93LmNsb3NlKCkgIiA8PCBtX2ZyYW1lIDw8
IGVuZGw7CiAgIFFfQVNTRVJUKHdpbnEpOwotICBLV1EobV9wYXJ0KS0+c2NoZWR1bGVDbG9zZSgp
OworICBNYWMobV9mcmFtZSktPnNjaGVkdWxlQ2xvc2UoKTsKIH0KIAogc3RhdGljIGJvb2wgc2hv
dWxkTG9hZEFzRW1wdHlEb2N1bWVudChjb25zdCBLVVJMICZ1cmwpCkBAIC0xMjE5LDggKzEyMTks
OCBAQCBib29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAgICAgaWYgKG9y
aWdpbiA9PSB0YXJnZXQpCiAJcmV0dXJuIHRydWU7CiAJCi0gICAgS0hUTUxQYXJ0ICpvcmlnaW5Q
YXJ0ID0gb3JpZ2luLT5wYXJ0KCk7Ci0gICAgS0hUTUxQYXJ0ICp0YXJnZXRQYXJ0ID0gdGFyZ2V0
LT5wYXJ0KCk7CisgICAgRnJhbWUgKm9yaWdpblBhcnQgPSBvcmlnaW4tPmZyYW1lKCk7CisgICAg
RnJhbWUgKnRhcmdldFBhcnQgPSB0YXJnZXQtPmZyYW1lKCk7CiAKICAgICAvLyBKUyBtYXkgYmUg
YXR0ZW1wdGluZyB0byBhY2Nlc3MgdGhlICJ3aW5kb3ciIG9iamVjdCwgd2hpY2ggc2hvdWxkIGJl
IHZhbGlkLAogICAgIC8vIGV2ZW4gaWYgdGhlIGRvY3VtZW50IGhhc24ndCBiZWVuIGNvbnN0cnVj
dGVkIHlldC4gIElmIHRoZSBkb2N1bWVudCBkb2Vzbid0CkBAIC0xMjQ3LDkgKzEyNDcsOSBAQCBi
b29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAgICAgLy8gb3Igb3BlbmVy
LCBhbGxvdyBhY2Nlc3MgZnJvbSBhbnkgZG9jdW1lbnQgaW4gdGhlIHNhbWUgZG9tYWluIGFzCiAg
ICAgLy8gdGhlIHBhcmVudCBvciBvcGVuZXIuCiAgICAgaWYgKHNob3VsZExvYWRBc0VtcHR5RG9j
dW1lbnQodGFyZ2V0UGFydC0+dXJsKCkpKSB7Ci0JS0hUTUxQYXJ0ICphbmNlc3RvclBhcnQgPSB0
YXJnZXRQYXJ0LT5vcGVuZXIoKSA/IHRhcmdldFBhcnQtPm9wZW5lcigpIDogdGFyZ2V0UGFydC0+
cGFyZW50UGFydCgpOworCUZyYW1lICphbmNlc3RvclBhcnQgPSB0YXJnZXRQYXJ0LT5vcGVuZXIo
KSA/IHRhcmdldFBhcnQtPm9wZW5lcigpIDogdGFyZ2V0UGFydC0+cGFyZW50RnJhbWUoKTsKIAl3
aGlsZSAoYW5jZXN0b3JQYXJ0ICYmIHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQoYW5jZXN0b3JQ
YXJ0LT51cmwoKSkpIHsKLQkgICAgYW5jZXN0b3JQYXJ0ID0gYW5jZXN0b3JQYXJ0LT5wYXJlbnRQ
YXJ0KCk7CisJICAgIGFuY2VzdG9yUGFydCA9IGFuY2VzdG9yUGFydC0+cGFyZW50RnJhbWUoKTsK
IAl9CiAKIAlpZiAoYW5jZXN0b3JQYXJ0KQpAQCAtMTI2NiwzNiArMTI2NiwzNiBAQCBib29sIFdp
bmRvdzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAgICAgUVN0cmluZyBtZXNzYWdlOwog
ICAgIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3Mg
ZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1h
dGNoLlxuIiwgCiAgICAgICAgICAgICAgICAgICB0YXJnZXREb2N1bWVudC0+VVJMKCkubGF0aW4x
KCksIG9yaWdpbkRvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSk7Ci0gICAgS1dRKHRhcmdldFBhcnQp
LT5hZGRNZXNzYWdlVG9Db25zb2xlKERPTVN0cmluZyhtZXNzYWdlKSwgMSwgRE9NU3RyaW5nKCkp
OyAvL2ZpeG1lOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNldXJsCisgICAg
TWFjKHRhcmdldFBhcnQpLT5hZGRNZXNzYWdlVG9Db25zb2xlKERPTVN0cmluZyhtZXNzYWdlKSwg
MSwgRE9NU3RyaW5nKCkpOyAvL2ZpeG1lOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQg
c291cmNldXJsCiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgV2luZG93Ojppc1NhZmVT
Y3JpcHQoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewotICBpZiAobV9wYXJ0LmlzTnVsbCgpKSB7
IC8vIHBhcnQgZGVsZXRlZCA/IGNhbid0IGdyYW50IGFjY2VzcwotICAgIGtkRGVidWcoNjA3MCkg
PDwgIldpbmRvdzo6aXNTYWZlU2NyaXB0OiBhY2Nlc3NpbmcgZGVsZXRlZCBwYXJ0ICEiIDw8IGVu
ZGw7CisgIGlmIChtX2ZyYW1lLmlzTnVsbCgpKSB7IC8vIGZyYW1lIGRlbGV0ZWQgPyBjYW4ndCBn
cmFudCBhY2Nlc3MKKyAgICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6OmlzU2FmZVNjcmlwdDog
YWNjZXNzaW5nIGRlbGV0ZWQgZnJhbWUgISIgPDwgZW5kbDsKICAgICByZXR1cm4gZmFsc2U7CiAg
IH0KLSAgS0hUTUxQYXJ0ICphY3RpdmVQYXJ0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0
ZXIgKj4oIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpICktPnBhcnQoKTsKKyAgRnJhbWUgKmFj
dGl2ZVBhcnQgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPiggZXhlYy0+ZHluYW1p
Y0ludGVycHJldGVyKCkgKS0+ZnJhbWUoKTsKICAgaWYgKCFhY3RpdmVQYXJ0KSB7Ci0gICAga2RE
ZWJ1Zyg2MDcwKSA8PCAiV2luZG93Ojppc1NhZmVTY3JpcHQ6IGN1cnJlbnQgaW50ZXJwcmV0ZXIn
cyBwYXJ0IGlzIDBMISIgPDwgZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6Omlz
U2FmZVNjcmlwdDogY3VycmVudCBpbnRlcnByZXRlcidzIGZyYW1lIGlzIDBMISIgPDwgZW5kbDsK
ICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKCBhY3RpdmVQYXJ0ID09IG1fcGFydCApIC8v
IE5vdCBjYWxsaW5nIGZyb20gYW5vdGhlciBmcmFtZSwgbm8gcHJvYmxlbS4KKyAgaWYgKCBhY3Rp
dmVQYXJ0ID09IG1fZnJhbWUgKSAvLyBOb3QgY2FsbGluZyBmcm9tIGFub3RoZXIgZnJhbWUsIG5v
IHByb2JsZW0uCiAgICAgcmV0dXJuIHRydWU7CiAKICAgLy8gSlMgbWF5IGJlIGF0dGVtcHRpbmcg
dG8gYWNjZXNzIHRoZSAid2luZG93IiBvYmplY3QsIHdoaWNoIHNob3VsZCBiZSB2YWxpZCwKICAg
Ly8gZXZlbiBpZiB0aGUgZG9jdW1lbnQgaGFzbid0IGJlZW4gY29uc3RydWN0ZWQgeWV0LiAgSWYg
dGhlIGRvY3VtZW50IGRvZXNuJ3QKICAgLy8gZXhpc3QgeWV0IGFsbG93IEpTIHRvIGFjY2VzcyB0
aGUgd2luZG93IG9iamVjdC4KLSAgaWYgKCFtX3BhcnQtPnhtbERvY0ltcGwoKSkKKyAgaWYgKCFt
X2ZyYW1lLT54bWxEb2NJbXBsKCkpCiAgICAgICByZXR1cm4gdHJ1ZTsKIAotICBET006OkRvY3Vt
ZW50SW1wbCogdGhpc0RvY3VtZW50ID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7CisgIERPTTo6RG9j
dW1lbnRJbXBsKiB0aGlzRG9jdW1lbnQgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgIERPTTo6
RG9jdW1lbnRJbXBsKiBhY3REb2N1bWVudCA9IGFjdGl2ZVBhcnQtPnhtbERvY0ltcGwoKTsKIAog
ICBpZiAoIWFjdERvY3VtZW50KSB7Ci0gICAga2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93Ojppc1Nh
ZmVTY3JpcHQ6IGFjdGl2ZSBwYXJ0IGhhcyBubyBkb2N1bWVudCEiIDw8IGVuZGw7CisgICAga2RE
ZWJ1Zyg2MDcwKSA8PCAiV2luZG93Ojppc1NhZmVTY3JpcHQ6IGFjdGl2ZSBmcmFtZSBoYXMgbm8g
ZG9jdW1lbnQhIiA8PCBlbmRsOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0xMzEwLDEw
ICsxMzEwLDEwIEBAIGJvb2wgV2luZG93Ojppc1NhZmVTY3JpcHQoRXhlY1N0YXRlICpleGUKICAg
Ly8gaWYgdGhpcyBkb2N1bWVudCBpcyBiZWluZyBpbml0aWFsbHkgbG9hZGVkIGFzIGVtcHR5IGJ5
IGl0cyBwYXJlbnQKICAgLy8gb3Igb3BlbmVyLCBhbGxvdyBhY2Nlc3MgZnJvbSBhbnkgZG9jdW1l
bnQgaW4gdGhlIHNhbWUgZG9tYWluIGFzCiAgIC8vIHRoZSBwYXJlbnQgb3Igb3BlbmVyLgotICBp
ZiAoc2hvdWxkTG9hZEFzRW1wdHlEb2N1bWVudChtX3BhcnQtPnVybCgpKSkgewotICAgIEtIVE1M
UGFydCAqYW5jZXN0b3JQYXJ0ID0gbV9wYXJ0LT5vcGVuZXIoKSA/IG1fcGFydC0+b3BlbmVyKCkg
OiBtX3BhcnQtPnBhcmVudFBhcnQoKTsKKyAgaWYgKHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQo
bV9mcmFtZS0+dXJsKCkpKSB7CisgICAgRnJhbWUgKmFuY2VzdG9yUGFydCA9IG1fZnJhbWUtPm9w
ZW5lcigpID8gbV9mcmFtZS0+b3BlbmVyKCkgOiBtX2ZyYW1lLT5wYXJlbnRGcmFtZSgpOwogICAg
IHdoaWxlIChhbmNlc3RvclBhcnQgJiYgc2hvdWxkTG9hZEFzRW1wdHlEb2N1bWVudChhbmNlc3Rv
clBhcnQtPnVybCgpKSkgewotICAgICAgYW5jZXN0b3JQYXJ0ID0gYW5jZXN0b3JQYXJ0LT5wYXJl
bnRQYXJ0KCk7CisgICAgICBhbmNlc3RvclBhcnQgPSBhbmNlc3RvclBhcnQtPnBhcmVudEZyYW1l
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChhbmNlc3RvclBhcnQpCkBAIC0xMzMwLDcgKzEzMzAs
NyBAQCBib29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KEV4ZWNTdGF0ZSAqZXhlCiAgIFFTdHJpbmcg
bWVzc2FnZTsKICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRv
IGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5z
IG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICAgICAgIHRoaXNEb2N1bWVudC0+VVJMKCku
bGF0aW4xKCksIGFjdERvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSk7Ci0gIEtXUShtX3BhcnQpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKERPTVN0cmluZyhtZXNzYWdlKSwgMSwgRE9NU3RyaW5nKCkpOwor
ICBNYWMobV9mcmFtZSktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoRE9NU3RyaW5nKG1lc3NhZ2UpLCAx
LCBET01TdHJpbmcoKSk7CiAgIAogICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzM5LDcgKzEzMzks
NyBAQCB2b2lkIFdpbmRvdzo6c2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjCiB7CiAgIGlmICgh
aXNTYWZlU2NyaXB0KGV4ZWMpKQogICAgIHJldHVybjsKLSAgRE9NOjpEb2N1bWVudEltcGwgKmRv
YyA9IG1fcGFydC0+eG1sRG9jSW1wbCgpOworICBET006OkRvY3VtZW50SW1wbCAqZG9jID0gbV9m
cmFtZS0+eG1sRG9jSW1wbCgpOwogICBpZiAoIWRvYykKICAgICByZXR1cm47CiAKQEAgLTEzNTAs
NyArMTM1MCw3IEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0TGlzdGVuZXIoRXhlY1N0YXRlICoKIHsK
ICAgaWYgKCFpc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
IERPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgaWYgKCFkb2MpCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTE0MTYsNyArMTQxNiw3IEBAIHZvaWQgV2lu
ZG93OjpjbGVhciggRXhlY1N0YXRlICpleGVjICkKIHZvaWQgV2luZG93OjpzZXRDdXJyZW50RXZl
bnQoRXZlbnRJbXBsICpldnQpCiB7CiAgIG1fZXZ0ID0gZXZ0OwotICAvL2tkRGVidWcoNjA3MCkg
PDwgIldpbmRvdyAiIDw8IHRoaXMgPDwgIiAocGFydD0iIDw8IG1fcGFydCA8PCAiKTo6c2V0Q3Vy
cmVudEV2ZW50IG1fZXZ0PSIgPDwgZXZ0IDw8IGVuZGw7CisgIC8va2REZWJ1Zyg2MDcwKSA8PCAi
V2luZG93ICIgPDwgdGhpcyA8PCAiIChmcmFtZT0iIDw8IG1fZnJhbWUgPDwgIik6OnNldEN1cnJl
bnRFdmVudCBtX2V2dD0iIDw8IGV2dCA8PCBlbmRsOwogfQogCiBzdGF0aWMgdm9pZCBzZXRXaW5k
b3dGZWF0dXJlKGNvbnN0IFFTdHJpbmcmIGtleVN0cmluZywgY29uc3QgUVN0cmluZyYgdmFsdWVT
dHJpbmcsIFdpbmRvd0FyZ3MmIHdpbmRvd0FyZ3MpCkBAIC0xNTY0LDExICsxNTY0LDExIEBAIEpT
VmFsdWUgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmV2luZG93OjppbmZvKSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogICBXaW5kb3cgKndpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPih0aGlzT2Jq
KTsKLSAgS0hUTUxQYXJ0ICpwYXJ0ID0gd2luZG93LT5tX3BhcnQ7Ci0gIGlmICghcGFydCkKKyAg
RnJhbWUgKmZyYW1lID0gd2luZG93LT5tX2ZyYW1lOworICBpZiAoIWZyYW1lKQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gIEtIVE1MVmlldyAqd2lkZ2V0ID0gcGFydC0+dmlldygpOwor
ICBLSFRNTFZpZXcgKndpZGdldCA9IGZyYW1lLT52aWV3KCk7CiAgIEpTVmFsdWUgKnYgPSBhcmdz
WzBdOwogICBVU3RyaW5nIHMgPSB2LT50b1N0cmluZyhleGVjKTsKICAgRE9NU3RyaW5nIHN0ciA9
IHMuZG9tU3RyaW5nKCk7CkBAIC0xNTc2LDIwICsxNTc2LDIwIEBAIEpTVmFsdWUgKldpbmRvd0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgV2luZG93
OjpBbGVydDoKLSAgICBpZiAocGFydCAmJiBwYXJ0LT54bWxEb2NJbXBsKCkpCi0gICAgICBwYXJ0
LT54bWxEb2NJbXBsKCktPnVwZGF0ZVJlbmRlcmluZygpOwotICAgIEtXUShwYXJ0KS0+cnVuSmF2
YVNjcmlwdEFsZXJ0KHN0cik7CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT54bWxEb2NJbXBsKCkp
CisgICAgICBmcmFtZS0+eG1sRG9jSW1wbCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICBNYWMo
ZnJhbWUpLT5ydW5KYXZhU2NyaXB0QWxlcnQoc3RyKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgY2FzZSBXaW5kb3c6OkNvbmZpcm06Ci0gICAgaWYgKHBhcnQgJiYgcGFydC0+eG1sRG9j
SW1wbCgpKQotICAgICAgcGFydC0+eG1sRG9jSW1wbCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKLSAg
ICByZXR1cm4ganNCb29sZWFuKEtXUShwYXJ0KS0+cnVuSmF2YVNjcmlwdENvbmZpcm0oc3RyKSk7
CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT54bWxEb2NJbXBsKCkpCisgICAgICBmcmFtZS0+eG1s
RG9jSW1wbCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICByZXR1cm4ganNCb29sZWFuKE1hYyhm
cmFtZSktPnJ1bkphdmFTY3JpcHRDb25maXJtKHN0cikpOwogICBjYXNlIFdpbmRvdzo6UHJvbXB0
OgogICB7Ci0gICAgaWYgKHBhcnQgJiYgcGFydC0+eG1sRG9jSW1wbCgpKQotICAgICAgcGFydC0+
eG1sRG9jSW1wbCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUt
PnhtbERvY0ltcGwoKSkKKyAgICAgIGZyYW1lLT54bWxEb2NJbXBsKCktPnVwZGF0ZVJlbmRlcmlu
ZygpOwogICAgIERPTVN0cmluZyBtZXNzYWdlID0gYXJncy5zaXplKCkgPj0gMiA/IGFyZ3NbMV0t
PnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpIDogRE9NU3RyaW5nKCk7Ci0gICAgYm9vbCBvayA9
IEtXUShwYXJ0KS0+cnVuSmF2YVNjcmlwdFByb21wdChzdHIsIG1lc3NhZ2UsIHN0cjIpOworICAg
IGJvb2wgb2sgPSBNYWMoZnJhbWUpLT5ydW5KYXZhU2NyaXB0UHJvbXB0KHN0ciwgbWVzc2FnZSwg
c3RyMik7CiAgICAgaWYgKG9rKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoc3RyMik7CiAgICAg
ZWxzZQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgSlNWYWx1ZSAqV2luZG93RnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlYwogICBjYXNlIFdpbmRvdzo6T3BlbjoKICAgewogICAgICAgUVN0cmluZyBmcmFt
ZU5hbWUgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gUVN0cmluZygiX2JsYW5rIikg
OiBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBpZiAoIWFsbG93UG9w
VXAoZXhlYywgd2luZG93KSAmJiAhKHBhcnQtPmZpbmRGcmFtZShmcmFtZU5hbWUpKSkKKyAgICAg
IGlmICghYWxsb3dQb3BVcChleGVjLCB3aW5kb3cpICYmICEoZnJhbWUtPmZpbmRGcmFtZShmcmFt
ZU5hbWUpKSkKICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIGlmIChmcmFt
ZU5hbWUgPT0gIl90b3AiIHx8IGZyYW1lTmFtZSA9PSAiX3BhcmVudCIgfHwgZnJhbWVOYW1lID09
ICJfc2VsZiIpCiAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNjEyLDc0ICsx
NjEyLDc0IEBAIEpTVmFsdWUgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKICAgICAg
IAogICAgICAgLy8gcHJlcGFyZSBhcmd1bWVudHMKICAgICAgIEtVUkwgdXJsOwotICAgICAgS0hU
TUxQYXJ0KiBhY3RpdmVQYXJ0ID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+bV9wYXJ0
OworICAgICAgRnJhbWUqIGFjdGl2ZVBhcnQgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMp
LT5tX2ZyYW1lOwogICAgICAgaWYgKCFzdHIuaXNFbXB0eSgpICYmIGFjdGl2ZVBhcnQpCiAgICAg
ICAgICAgdXJsID0gYWN0aXZlUGFydC0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTChzdHIucXN0
cmluZygpKTsKIAogICAgICAgS1BhcnRzOjpVUkxBcmdzIHVhcmdzOwogICAgICAgdWFyZ3MuZnJh
bWVOYW1lID0gZnJhbWVOYW1lOwogICAgICAgaWYgKHVhcmdzLmZyYW1lTmFtZSA9PSAiX3RvcCIp
IHsKLSAgICAgICAgICB3aGlsZSAocGFydC0+cGFyZW50UGFydCgpKQotICAgICAgICAgICAgICBw
YXJ0ID0gcGFydC0+cGFyZW50UGFydCgpOworICAgICAgICAgIHdoaWxlIChmcmFtZS0+cGFyZW50
RnJhbWUoKSkKKyAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS0+cGFyZW50RnJhbWUoKTsKICAg
ICAgICAgICAKLSAgICAgICAgICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3cocGFydCk7CisgICAgICAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6
OnJldHJpZXZlV2luZG93KGZyYW1lKTsKICAgICAgICAgICBpZiAoIXVybC51cmwoKS5zdGFydHNX
aXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdpbmRvdy0+aXNTYWZlU2Ny
aXB0KGV4ZWMpKSkgewogICAgICAgICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gc3RhdGljX2Nh
c3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53YXNS
dW5CeVVzZXJHZXN0dXJlKCk7Ci0gICAgICAgICAgICAgIHBhcnQtPnNjaGVkdWxlTG9jYXRpb25D
aGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCBmYWxzZS8qZG9uJ3QgbG9j
ayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgICAgICAgZnJhbWUtPnNjaGVkdWxl
TG9jYXRpb25DaGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCBmYWxzZS8q
ZG9uJ3QgbG9jayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKICAgICAgICAgICB9Ci0gICAgICAg
ICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUocGFydCk7CisgICAgICAgICAgcmV0dXJuIFdpbmRv
dzo6cmV0cmlldmUoZnJhbWUpOwogICAgICAgfQogICAgICAgaWYgKHVhcmdzLmZyYW1lTmFtZSA9
PSAiX3BhcmVudCIpIHsKLSAgICAgICAgICBpZiAocGFydC0+cGFyZW50UGFydCgpKQotICAgICAg
ICAgICAgICBwYXJ0ID0gcGFydC0+cGFyZW50UGFydCgpOworICAgICAgICAgIGlmIChmcmFtZS0+
cGFyZW50RnJhbWUoKSkKKyAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS0+cGFyZW50RnJhbWUo
KTsKICAgICAgICAgICAKLSAgICAgICAgICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6
cmV0cmlldmVXaW5kb3cocGFydCk7CisgICAgICAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBX
aW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKICAgICAgICAgICBpZiAoIXVybC51cmwoKS5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdpbmRvdy0+aXNT
YWZlU2NyaXB0KGV4ZWMpKSkgewogICAgICAgICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gc3Rh
dGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkp
LT53YXNSdW5CeVVzZXJHZXN0dXJlKCk7Ci0gICAgICAgICAgICAgIHBhcnQtPnNjaGVkdWxlTG9j
YXRpb25DaGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCBmYWxzZS8qZG9u
J3QgbG9jayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgICAgICAgZnJhbWUtPnNj
aGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCBm
YWxzZS8qZG9uJ3QgbG9jayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKICAgICAgICAgICB9Ci0g
ICAgICAgICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUocGFydCk7CisgICAgICAgICAgcmV0dXJu
IFdpbmRvdzo6cmV0cmlldmUoZnJhbWUpOwogICAgICAgfQogICAgICAgdWFyZ3Muc2VydmljZVR5
cGUgPSAidGV4dC9odG1sIjsKICAgICAgIAogICAgICAgLy8gcmVxdWVzdCB3aW5kb3cgKG5ldyBv
ciBleGlzdGluZyBpZiBmcmFtZW5hbWUgaXMgc2V0KQogICAgICAgS1BhcnRzOjpSZWFkT25seVBh
cnQgKm5ld1BhcnQgPSAwTDsKICAgICAgIHVhcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBh
Y3RpdmVQYXJ0LT5yZWZlcnJlcigpOwotICAgICAgcGFydC0+YnJvd3NlckV4dGVuc2lvbigpLT5j
cmVhdGVOZXdXaW5kb3coIiIsIHVhcmdzLCB3aW5kb3dBcmdzLCBuZXdQYXJ0KTsKLSAgICAgIGlm
ICghbmV3UGFydCB8fCAhbmV3UGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQorICAgICAgZnJh
bWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+Y3JlYXRlTmV3V2luZG93KCIiLCB1YXJncywgd2luZG93
QXJncywgbmV3UGFydCk7CisgICAgICBpZiAoIW5ld1BhcnQgfHwgIW5ld1BhcnQtPmluaGVyaXRz
KCJGcmFtZSIpKQogICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgS0hUTUxQ
YXJ0ICpraHRtbHBhcnQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnQqPihuZXdQYXJ0KTsKLSAgICAg
IC8vcURlYnVnKCJvcGVuZXIgc2V0IHRvICVwICh0aGlzIFdpbmRvdydzIHBhcnQpIGluIG5ldyBX
aW5kb3cgJXAgICh0aGlzIFdpbmRvdz0lcCkiLHBhcnQsd2luLHdpbmRvdyk7Ci0gICAgICBraHRt
bHBhcnQtPnNldE9wZW5lcihwYXJ0KTsKLSAgICAgIGtodG1scGFydC0+c2V0T3BlbmVkQnlKUyh0
cnVlKTsKKyAgICAgIEZyYW1lICpmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lKj4obmV3UGFydCk7
CisgICAgICAvL3FEZWJ1Zygib3BlbmVyIHNldCB0byAlcCAodGhpcyBXaW5kb3cncyBmcmFtZSkg
aW4gbmV3IFdpbmRvdyAlcCAgKHRoaXMgV2luZG93PSVwKSIsIGZyYW1lLHdpbix3aW5kb3cpOwor
ICAgICAgZnJhbWUtPnNldE9wZW5lcihmcmFtZSk7CisgICAgICBmcmFtZS0+c2V0T3BlbmVkQnlK
Uyh0cnVlKTsKICAgICAgIAotICAgICAgaWYgKCFraHRtbHBhcnQtPnhtbERvY0ltcGwoKSkgewot
ICAgICAgICAgIERvY3VtZW50SW1wbCAqb2xkRG9jID0gcGFydC0+eG1sRG9jSW1wbCgpOworICAg
ICAgaWYgKCFmcmFtZS0+eG1sRG9jSW1wbCgpKSB7CisgICAgICAgICAgRG9jdW1lbnRJbXBsICpv
bGREb2MgPSBmcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgICAgICAgIGlmIChvbGREb2MgJiYgb2xk
RG9jLT5iYXNlVVJMKCkgIT0gMCkKLSAgICAgICAgICAgICAga2h0bWxwYXJ0LT5iZWdpbihvbGRE
b2MtPmJhc2VVUkwoKSk7CisgICAgICAgICAgICAgIGZyYW1lLT5iZWdpbihvbGREb2MtPmJhc2VV
UkwoKSk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBraHRtbHBhcnQtPmJlZ2luKCk7
CisgICAgICAgICAgICAgIGZyYW1lLT5iZWdpbigpOwogICAgICAgICAgIAotICAgICAgICAgIGto
dG1scGFydC0+d3JpdGUoIjxIVE1MPjxCT0RZPiIpOwotICAgICAgICAgIGtodG1scGFydC0+ZW5k
KCk7CisgICAgICAgICAgZnJhbWUtPndyaXRlKCI8SFRNTD48Qk9EWT4iKTsKKyAgICAgICAgICBm
cmFtZS0+ZW5kKCk7CiAgICAgICAgICAgCiAgICAgICAgICAgaWYgKG9sZERvYykgewogICAgICAg
ICAgICAgICBrZERlYnVnKDYwNzApIDw8ICJTZXR0aW5nIGRvbWFpbiB0byAiIDw8IG9sZERvYy0+
ZG9tYWluKCkucXN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgICAgICAgIGtodG1scGFydC0+eG1s
RG9jSW1wbCgpLT5zZXREb21haW4oIG9sZERvYy0+ZG9tYWluKCksIHRydWUgKTsKLSAgICAgICAg
ICAgICAga2h0bWxwYXJ0LT54bWxEb2NJbXBsKCktPnNldEJhc2VVUkwoIG9sZERvYy0+YmFzZVVS
TCgpICk7CisgICAgICAgICAgICAgIGZyYW1lLT54bWxEb2NJbXBsKCktPnNldERvbWFpbiggb2xk
RG9jLT5kb21haW4oKSwgdHJ1ZSApOworICAgICAgICAgICAgICBmcmFtZS0+eG1sRG9jSW1wbCgp
LT5zZXRCYXNlVVJMKCBvbGREb2MtPmJhc2VVUkwoKSApOwogICAgICAgICAgIH0KICAgICAgIH0K
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICAgIGNvbnN0IFdpbmRvdyogd2lu
ZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhraHRtbHBhcnQpOworICAgICAgICAgIGNvbnN0
IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7CiAgICAgICAg
ICAgaWYgKCF1cmwudXJsKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgKHdp
bmRvdyAmJiB3aW5kb3ctPmlzU2FmZVNjcmlwdChleGVjKSkpIHsKICAgICAgICAgICAgICAgYm9v
bCB1c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5
bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2VzdHVyZSgpOwotICAgICAgICAgICAg
ICBraHRtbHBhcnQtPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0
LT5yZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICAgICAgICBmcmFtZS0+
c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwudXJsKCksIGFjdGl2ZVBhcnQtPnJlZmVycmVyKCks
IGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgICAgfSAKICAgICAgIH0KLSAgICAgIHJldHVy
biBXaW5kb3c6OnJldHJpZXZlKGtodG1scGFydCk7IC8vIGdsb2JhbCBvYmplY3QKKyAgICAgIHJl
dHVybiBXaW5kb3c6OnJldHJpZXZlKGZyYW1lKTsgLy8gZ2xvYmFsIG9iamVjdAogICB9CiAgIGNh
c2UgV2luZG93OjpQcmludDoKLSAgICBwYXJ0LT5wcmludCgpOworICAgIGZyYW1lLT5wcmludCgp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICBjYXNlIFdpbmRvdzo6U2Nyb2xsQnk6CiAg
ICAgd2luZG93LT51cGRhdGVMYXlvdXQoKTsKQEAgLTE4MTEsNyArMTgxMSw3IEBAIEpTVmFsdWUg
KldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgcmV0dXJuIHdpbmRvdy0+c2VsZWN0aW9uKCk7CiAgIGNhc2UgV2luZG93OjpC
bHVyOgotICAgIEtXUShwYXJ0KS0+dW5mb2N1c1dpbmRvdygpOworICAgIE1hYyhmcmFtZSktPnVu
Zm9jdXNXaW5kb3coKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgY2FzZSBXaW5kb3c6
OkNsb3NlOgogICAgIC8qIEZyb20gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20vZG9jcy9t
YW51YWxzL2pzL2NsaWVudC9qc3JlZi93aW5kb3cuaHRtIDoKQEAgLTE4MjQsMTEgKzE4MjQsMTEg
QEAgSlNWYWx1ZSAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlYwogICAgICAgIHNwZWNp
YWwgY2FzZSBmb3Igb25lLW9mZiB3aW5kb3dzIHRoYXQgbmVlZCB0byBvcGVuIG90aGVyIHdpbmRv
d3MgYW5kCiAgICAgICAgdGhlbiBkaXNwb3NlIG9mIHRoZW1zZWx2ZXMuCiAgICAgKi8KLSAgICBp
ZiAoIXBhcnQtPm9wZW5lZEJ5SlMoKSkKKyAgICBpZiAoIWZyYW1lLT5vcGVuZWRCeUpTKCkpCiAg
ICAgewogICAgICAgLy8gVG8gY29uZm9ybSB0byB0aGUgU1BFQywgd2Ugb25seSBhc2sgaWYgdGhl
IHdpbmRvdwogICAgICAgLy8gaGFzIG1vcmUgdGhhbiBvbmUgZW50cnkgaW4gdGhlIGhpc3Rvcnkg
KE5TIGRvZXMgdGhhdCB0b28pLgotICAgICAgSGlzdG9yeSBoaXN0b3J5KGV4ZWMscGFydCk7Cisg
ICAgICBIaXN0b3J5IGhpc3RvcnkoZXhlYywgZnJhbWUpOwogICAgICAgaWYgKCBoaXN0b3J5Lmdl
dCggZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lICktPnRvSW50MzIoZXhlYykgPD0gMQogICAgICAg
ICAgICAvLyBGSVhNRTogSG93IGFyZSB3ZSBnb2luZyB0byBoYW5kbGUgdGhpcz8KICAgICAgICAg
ICAgKQpAQCAtMTg1MSwxNCArMTg1MSwxNCBAQCBKU1ZhbHVlICpXaW5kb3dGdW5jOjpjYWxsQXNG
dW5jdGlvbihFeGVjCiAgICAgICAgIGlmICghd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAJ
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBpZiAoSlNFdmVudExpc3RlbmVyICps
aXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTRXZlbnRMaXN0ZW5l
cihhcmdzWzFdKSkKLSAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwgKmRvYyA9IHBhcnQtPnht
bERvY0ltcGwoKSkKKyAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwgKmRvYyA9IGZyYW1lLT54
bWxEb2NJbXBsKCkpCiAgICAgICAgICAgICAgICAgZG9jLT5hZGRXaW5kb3dFdmVudExpc3RlbmVy
KEF0b21pY1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSksIGxpc3Rl
bmVyLCBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgY2FzZSBXaW5kb3c6OlJlbW92ZUV2ZW50TGlzdGVuZXI6CiAgICAgICAgIGlmICgh
d2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAJICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICBpZiAoSlNFdmVudExpc3RlbmVyICpsaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVB
Y3RpdmUoZXhlYyktPmdldEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKSkKLSAgICAgICAgICAgIGlm
IChEb2N1bWVudEltcGwgKmRvYyA9IHBhcnQtPnhtbERvY0ltcGwoKSkKKyAgICAgICAgICAgIGlm
IChEb2N1bWVudEltcGwgKmRvYyA9IGZyYW1lLT54bWxEb2NJbXBsKCkpCiAgICAgICAgICAgICAg
ICAgZG9jLT5yZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKEF0b21pY1N0cmluZyhhcmdzWzBdLT50
b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSksIGxpc3RlbmVyLCBhcmdzWzJdLT50b0Jvb2xlYW4o
ZXhlYykpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgY2FzZSBXaW5kb3c6OlNo
b3dNb2RhbERpYWxvZzoKQEAgLTE4NjksNyArMTg2OSw3IEBAIEpTVmFsdWUgKldpbmRvd0Z1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKIAogdm9pZCBXaW5kb3c6OnVwZGF0ZUxheW91dCgpIGNvbnN0
CiB7Ci0gIERPTTo6RG9jdW1lbnRJbXBsKiBkb2NpbXBsID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7
CisgIERPTTo6RG9jdW1lbnRJbXBsKiBkb2NpbXBsID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwog
ICBpZiAoZG9jaW1wbCkKICAgICBkb2NpbXBsLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIH0KQEAgLTE4NzgsNyArMTg3OCw3IEBAIHZvaWQgV2luZG93Ojp1cGRhdGVM
YXlvdXQoKSBjb25zdAogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXaW5kb3cgKndp
bmRvdykKIHsKLSAgICBpZiAoIXdpbmRvdy0+bV9wYXJ0KQorICAgIGlmICghd2luZG93LT5tX2Zy
YW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJwcmV0
ZXIgPSB3aW5kb3ctPmludGVycHJldGVyKCk7CkBAIC0xODk4LDE1ICsxODk4LDE1IEBAIHZvaWQg
U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFdpbmRvdyAqd2kKICAgICAgICAgICAgICAgICBpbnQg
bGluZU51bWJlciA9IGV4Y2VwdGlvbi0+Z2V0KGV4ZWMsICJsaW5lIiktPnRvSW50MzIoZXhlYyk7
CiAgICAgICAgICAgICAgICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMo
KSkKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIodGltZXIpOiVzXG4iLCBtZXNzYWdlLnFz
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBLV1Eod2luZG93LT5tX3Bh
cnQpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIsIERPTVN0cmluZygp
KTsKKyAgICAgICAgICAgICAgICBNYWMod2luZG93LT5tX2ZyYW1lKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBET01TdHJpbmcoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgd2luZG93LT5tX3BhcnQtPmV4ZWN1dGVTY3Jp
cHQobV9jb2RlKTsKKyAgICAgICAgd2luZG93LT5tX2ZyYW1lLT5leGVjdXRlU2NyaXB0KG1fY29k
ZSk7CiAgIAogICAgIC8vIFVwZGF0ZSBvdXIgZG9jdW1lbnQncyByZW5kZXJpbmcgZm9sbG93aW5n
IHRoZSBleGVjdXRpb24gb2YgdGhlIHRpbWVvdXQgY2FsbGJhY2suCiAgICAgLy8gRklYTUU6IFdo
eT8gV2h5IG5vdCBvdGhlciBkb2N1bWVudHMsIGZvciBleGFtcGxlPwotICAgIERvY3VtZW50SW1w
bCAqZG9jID0gd2luZG93LT5tX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwg
KmRvYyA9IHdpbmRvdy0+bV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIGlmIChkb2MpCiAgICAg
ICAgIGRvYy0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgIApAQCAtMTkxOCw3ICsxOTE4LDcgQEAgdm9p
ZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoV2luZG93ICp3aQogV2luZG93UU9iamVjdDo6V2lu
ZG93UU9iamVjdChXaW5kb3cgKncpCiAgICAgOiBtX3BhcmVudCh3KQogewotICAgIGNvbm5lY3Qo
dy0+bV9wYXJ0LCBTSUdOQUwoZGVzdHJveWVkKCkpLCB0aGlzLCBTTE9UKHBhcmVudERlc3Ryb3ll
ZCgpKSk7CisgICAgY29ubmVjdCh3LT5tX2ZyYW1lLCBTSUdOQUwoZGVzdHJveWVkKCkpLCB0aGlz
LCBTTE9UKHBhcmVudERlc3Ryb3llZCgpKSk7CiB9CiAKIHZvaWQgV2luZG93UU9iamVjdDo6cGFy
ZW50RGVzdHJveWVkKCkKQEAgLTIwMjMsMTMgKzIwMjMsMTMgQEAgSlNWYWx1ZSAqRnJhbWVBcnJh
eTo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgTGVu
Z3RoOiB7Ci0gICAgUVB0ckxpc3Q8S1BhcnRzOjpSZWFkT25seVBhcnQ+IGZyYW1lcyA9IHBhcnQt
PmZyYW1lcygpOworICAgIFFQdHJMaXN0PEtQYXJ0czo6UmVhZE9ubHlQYXJ0PiBmcmFtZXMgPSBt
X2ZyYW1lLT5mcmFtZXMoKTsKICAgICB1bnNpZ25lZCBpbnQgbGVuID0gZnJhbWVzLmNvdW50KCk7
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGxlbik7CiAgIH0KICAgY2FzZSBMb2NhdGlvbjoKICAgICAv
LyBub24tc3RhbmRhcmQgcHJvcGVydHksIGJ1dCB3b3JrcyBpbiBOUyBhbmQgSUUKLSAgICBpZiAo
SlNPYmplY3QgKm9iaiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCkpCisgICAgaWYgKEpT
T2JqZWN0ICpvYmogPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fZnJhbWUpKQogICAgICAgcmV0
dXJuIG9iai0+Z2V0KGV4ZWMsICJsb2NhdGlvbiIpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICBkZWZhdWx0OgpAQCAtMjA0MSwxMCArMjA0MSwxMCBAQCBKU1ZhbHVlICpGcmFtZUFycmF5
OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiBKU1ZhbHVlICpGcmFtZUFycmF5OjppbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEZyYW1lQXJy
YXkgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxGcmFtZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7
Ci0gIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpmcmFtZSA9IHRoaXNPYmotPnBhcnQtPmZyYW1lcygp
LmF0KHNsb3QuaW5kZXgoKSk7CisgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpmcmFtZSA9IHRoaXNP
YmotPm1fZnJhbWUtPmZyYW1lcygpLmF0KHNsb3QuaW5kZXgoKSk7CiAKLSAgaWYgKGZyYW1lICYm
IGZyYW1lLT5pbmhlcml0cygiS0hUTUxQYXJ0IikpIHsKLSAgICBLSFRNTFBhcnQgKmtodG1sID0g
c3RhdGljX2Nhc3Q8S0hUTUxQYXJ0Kj4oZnJhbWUpOworICBpZiAoZnJhbWUgJiYgZnJhbWUtPmlu
aGVyaXRzKCJGcmFtZSIpKSB7CisgICAgRnJhbWUgKmtodG1sID0gc3RhdGljX2Nhc3Q8RnJhbWUq
PihmcmFtZSk7CiAgICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUoa2h0bWwpOwogICB9CiAKQEAg
LTIwNTQsMTAgKzIwNTQsMTAgQEAgSlNWYWx1ZSAqRnJhbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YQogSlNWYWx1ZSAqRnJhbWVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpT
T2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEZyYW1lQXJyYXkgKnRoaXNPYmogPSBzdGF0
aWNfY2FzdDxGcmFtZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEtQYXJ0czo6UmVhZE9u
bHlQYXJ0ICpmcmFtZSA9IHRoaXNPYmotPnBhcnQtPmZpbmRGcmFtZShwcm9wZXJ0eU5hbWUucXN0
cmluZygpKTsKKyAgS1BhcnRzOjpSZWFkT25seVBhcnQgKmZyYW1lID0gdGhpc09iai0+bV9mcmFt
ZS0+ZmluZEZyYW1lKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpOwogCi0gIGlmIChmcmFtZSAmJiBm
cmFtZS0+aW5oZXJpdHMoIktIVE1MUGFydCIpKSB7Ci0gICAgS0hUTUxQYXJ0ICpraHRtbCA9IHN0
YXRpY19jYXN0PEtIVE1MUGFydCo+KGZyYW1lKTsKKyAgaWYgKGZyYW1lICYmIGZyYW1lLT5pbmhl
cml0cygiRnJhbWUiKSkgeworICAgIEZyYW1lICpraHRtbCA9IHN0YXRpY19jYXN0PEZyYW1lKj4o
ZnJhbWUpOwogICAgIHJldHVybiAgV2luZG93OjpyZXRyaWV2ZShraHRtbCk7CiAgIH0KIApAQCAt
MjA2Niw3ICsyMDY2LDcgQEAgSlNWYWx1ZSAqRnJhbWVBcnJheTo6bmFtZUdldHRlcihFeGVjU3Rh
dAogCiBib29sIEZyYW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICBpZiAocGFydC5pc051bGwoKSkgeworICBpZiAobV9mcmFtZS5pc051bGwoKSkgewogICAgIHNs
b3Quc2V0VW5kZWZpbmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogICB9CkBAIC0yMDc4LDcg
KzIwNzgsNyBAQCBib29sIEZyYW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAgIH0K
IAogICAvLyBjaGVjayBmb3IgdGhlIG5hbWUgb3IgbnVtYmVyCi0gIEtQYXJ0czo6UmVhZE9ubHlQ
YXJ0ICpmcmFtZSA9IHBhcnQtPmZpbmRGcmFtZShwcm9wZXJ0eU5hbWUucXN0cmluZygpKTsKKyAg
S1BhcnRzOjpSZWFkT25seVBhcnQgKmZyYW1lID0gbV9mcmFtZS0+ZmluZEZyYW1lKHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkpOwogICBpZiAoZnJhbWUpIHsKICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBuYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwODYsNyArMjA4Niw3IEBAIGJv
b2wgRnJhbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWMKIAogICBib29sIG9rOwogICB1
bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKLSAgaWYgKG9r
ICYmIGkgPCBwYXJ0LT5mcmFtZXMoKS5jb3VudCgpKSB7CisgIGlmIChvayAmJiBpIDwgbV9mcmFt
ZS0+ZnJhbWVzKCkuY291bnQoKSkgewogICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwg
aW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwogICB9CkBAIC0yMTIwLDEzICsyMTIwLDEz
IEBAIGNvbnN0IENsYXNzSW5mbyBMb2NhdGlvbjo6aW5mbyA9IHsgIkxvY2EKIEBlbmQKICovCiBL
SlNfSU1QTEVNRU5UX1BST1RPRlVOQyhMb2NhdGlvbkZ1bmMpCi1Mb2NhdGlvbjo6TG9jYXRpb24o
S0hUTUxQYXJ0ICpwKSA6IG1fcGFydChwKQorTG9jYXRpb246OkxvY2F0aW9uKEZyYW1lICpwKSA6
IG1fZnJhbWUocCkKIHsKIH0KIAogSlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIEtVUkwgdXJsID0gbV9wYXJ0
LT51cmwoKTsKKyAgS1VSTCB1cmwgPSBtX2ZyYW1lLT51cmwoKTsKICAgc3dpdGNoICh0b2tlbikg
ewogICBjYXNlIEhhc2g6CiAgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5yZWYoKS5pc051bGwoKSA/
IFFTdHJpbmcoIiIpIDogIiMiICsgdXJsLnJlZigpKTsKQEAgLTIxNjIsMTAgKzIxNjIsMTAgQEAg
SlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlYwogCiBib29sIExvY2F0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgCiB7Ci0gIGlmIChtX3BhcnQuaXNOdWxs
KCkpCisgIGlmIChtX2ZyYW1lLmlzTnVsbCgpKQogICAgIHJldHVybiBmYWxzZTsKICAgCi0gIGNv
bnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX3BhcnQpOworICBj
b25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cobV9mcmFtZSk7CiAg
IGlmICghd2luZG93IHx8ICF3aW5kb3ctPmlzU2FmZVNjcmlwdChleGVjKSkgewogICAgICAgc2xv
dC5zZXRVbmRlZmluZWQodGhpcyk7CiAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNzYsMTYgKzIx
NzYsMTYgQEAgYm9vbCBMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdAogCiB2b2lk
IExvY2F0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwLCBKU1Zh
bHVlICp2LCBpbnQgYXR0cikKIHsKLSAgaWYgKG1fcGFydC5pc051bGwoKSkKKyAgaWYgKG1fZnJh
bWUuaXNOdWxsKCkpCiAgICAgcmV0dXJuOwogCiAgIFFTdHJpbmcgc3RyID0gdi0+dG9TdHJpbmco
ZXhlYykucXN0cmluZygpOwotICBLVVJMIHVybCA9IG1fcGFydC0+dXJsKCk7CisgIEtVUkwgdXJs
ID0gbV9mcmFtZS0+dXJsKCk7CiAgIGNvbnN0IEhhc2hFbnRyeSAqZW50cnkgPSBMb29rdXA6OmZp
bmRFbnRyeSgmTG9jYXRpb25UYWJsZSwgcCk7CiAgIGlmIChlbnRyeSkKICAgICBzd2l0Y2ggKGVu
dHJ5LT52YWx1ZSkgewogICAgIGNhc2UgSHJlZjogewotICAgICAgS0hUTUxQYXJ0KiBwID0gV2lu
ZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+cGFydCgpOworICAgICAgRnJhbWUqIHAgPSBXaW5k
b3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5mcmFtZSgpOwogICAgICAgaWYgKCBwICkKICAgICAg
ICAgdXJsID0gcC0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTCggc3RyICk7CiAgICAgICBlbHNl
CkBAIC0yMjIzLDEyICsyMjIzLDEyIEBAIHZvaWQgTG9jYXRpb246OnB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnMKICAgICByZXR1cm47CiAgIH0KIAotICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdp
bmRvdzo6cmV0cmlldmVXaW5kb3cobV9wYXJ0KTsKLSAgS0hUTUxQYXJ0KiBhY3RpdmVQYXJ0ID0g
V2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+cGFydCgpOworICBjb25zdCBXaW5kb3cqIHdp
bmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cobV9mcmFtZSk7CisgIEZyYW1lKiBhY3RpdmVQ
YXJ0ID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKTsKICAgaWYgKCF1cmwu
dXJsKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgKHdpbmRvdyAmJiB3aW5k
b3ctPmlzU2FmZVNjcmlwdChleGVjKSkpIHsKICAgICBib29sIHVzZXJHZXN0dXJlID0gc3RhdGlj
X2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53
YXNSdW5CeVVzZXJHZXN0dXJlKCk7CiAgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0g
aWYgdGhpcyBKUyB3YXMgY2FsbGVkIHZpYSBhIHVzZXIgZ2VzdHVyZQotICAgIG1fcGFydC0+c2No
ZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwudXJsKCksIGFjdGl2ZVBhcnQtPnJlZmVycmVyKCksICF1
c2VyR2VzdHVyZSwgdXNlckdlc3R1cmUpOworICAgIG1fZnJhbWUtPnNjaGVkdWxlTG9jYXRpb25D
aGFuZ2UodXJsLnVybCgpLCBhY3RpdmVQYXJ0LT5yZWZlcnJlcigpLCAhdXNlckdlc3R1cmUsIHVz
ZXJHZXN0dXJlKTsKICAgfQogfQogCkBAIC0yMjM5LDEwICsyMjM5LDEwIEBAIEpTVmFsdWUgKkxv
Y2F0aW9uOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUKIAogVVN0cmluZyBMb2NhdGlvbjo6dG9TdHJp
bmcoRXhlY1N0YXRlICopIGNvbnN0CiB7Ci0gIGlmICghbV9wYXJ0LT51cmwoKS5oYXNQYXRoKCkp
Ci0gICAgcmV0dXJuIG1fcGFydC0+dXJsKCkucHJldHR5VVJMKCkrIi8iOworICBpZiAoIW1fZnJh
bWUtPnVybCgpLmhhc1BhdGgoKSkKKyAgICByZXR1cm4gbV9mcmFtZS0+dXJsKCkucHJldHR5VVJM
KCkrIi8iOwogICBlbHNlCi0gICAgcmV0dXJuIG1fcGFydC0+dXJsKCkucHJldHR5VVJMKCk7Cisg
ICAgcmV0dXJuIG1fZnJhbWUtPnVybCgpLnByZXR0eVVSTCgpOwogfQogCiBKU1ZhbHVlICpMb2Nh
dGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCkBAIC0yMjUwLDEwICsyMjUwLDEwIEBAIEpTVmFsdWUgKkxv
Y2F0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXgKICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
TG9jYXRpb246OmluZm8pKQogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgIExvY2F0aW9uICpsb2NhdGlvbiA9IHN0YXRpY19jYXN0PExvY2F0aW9uICo+KHRoaXNPYmop
OwotICBLSFRNTFBhcnQgKnBhcnQgPSBsb2NhdGlvbi0+cGFydCgpOwotICBpZiAocGFydCkgewor
ICBGcmFtZSAqZnJhbWUgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKKyAgaWYgKGZyYW1lKSB7CiAgICAg
ICAKLSAgICBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7Cisg
ICAgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKICAgICBp
ZiAoIXdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpICYmIGlkICE9IExvY2F0aW9uOjpSZXBsYWNl
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIApAQCAtMjI2MSwzNiArMjI2
MSwzNiBAQCBKU1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4CiAgICAgY2Fz
ZSBMb2NhdGlvbjo6UmVwbGFjZToKICAgICB7CiAgICAgICBRU3RyaW5nIHN0ciA9IGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKLSAgICAgIEtIVE1MUGFydCogcCA9IFdpbmRvdzo6
cmV0cmlldmVBY3RpdmUoZXhlYyktPnBhcnQoKTsKKyAgICAgIEZyYW1lKiBwID0gV2luZG93Ojpy
ZXRyaWV2ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKTsKICAgICAgIGlmICggcCApIHsKLSAgICAgICAg
Y29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBhcnQpOworICAg
ICAgICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUp
OwogICAgICAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAo
d2luZG93ICYmIHdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpKSkgewogICAgICAgICAgIGJvb2wg
dXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihleGVjLT5keW5h
bWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdlc3R1cmUoKTsKLSAgICAgICAgICBwYXJ0
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHAtPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoc3Ry
KSwgcC0+cmVmZXJyZXIoKSwgdHJ1ZSAvKmxvY2sgaGlzdG9yeSovLCB1c2VyR2VzdHVyZSk7Cisg
ICAgICAgICAgZnJhbWUtPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UocC0+eG1sRG9jSW1wbCgpLT5j
b21wbGV0ZVVSTChzdHIpLCBwLT5yZWZlcnJlcigpLCB0cnVlIC8qbG9jayBoaXN0b3J5Ki8sIHVz
ZXJHZXN0dXJlKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTG9jYXRpb246OlJlbG9hZDoKICAgICB7Ci0gICAgICBjb25zdCBXaW5kb3cqIHdpbmRv
dyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7Ci0gICAgICBLSFRNTFBhcnQqIGFjdGl2
ZVBhcnQgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5wYXJ0KCk7Ci0gICAgICBpZiAo
IXBhcnQtPnVybCgpLnVybCgpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3
aW5kb3cgJiYgd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpKSB7CisgICAgICBjb25zdCBXaW5k
b3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOworICAgICAgRnJhbWUq
IGFjdGl2ZVBhcnQgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5mcmFtZSgpOworICAg
ICAgaWYgKCFmcmFtZS0+dXJsKCkudXJsKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxz
ZSkgfHwgKHdpbmRvdyAmJiB3aW5kb3ctPmlzU2FmZVNjcmlwdChleGVjKSkpIHsKICAgICAgICAg
Ym9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMt
PmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2VzdHVyZSgpOwotICAgICAgICBw
YXJ0LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHBhcnQtPnVybCgpLnVybCgpLCBhY3RpdmVQYXJ0
LT5yZWZlcnJlcigpLCB0cnVlLypsb2NrIGhpc3RvcnkqLywgdXNlckdlc3R1cmUpOworICAgICAg
ICBmcmFtZS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShmcmFtZS0+dXJsKCkudXJsKCksIGFjdGl2
ZVBhcnQtPnJlZmVycmVyKCksIHRydWUvKmxvY2sgaGlzdG9yeSovLCB1c2VyR2VzdHVyZSk7CiAg
ICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMb2NhdGlvbjo6QXNzaWduOgog
ICAgIHsKLSAgICAgICAgS0hUTUxQYXJ0ICpwID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVj
KS0+cGFydCgpOworICAgICAgICBGcmFtZSAqcCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhl
YyktPmZyYW1lKCk7CiAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICBjb25zdCBXaW5kb3cg
KndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7CisgICAgICAgICAgICBjb25z
dCBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOwogICAgICAg
ICAgICAgUVN0cmluZyBkc3RVcmwgPSBwLT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAoIWRzdFVybC5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdpbmRvdy0+aXNT
YWZlU2NyaXB0KGV4ZWMpKSkgewogICAgICAgICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBz
dGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIo
KSktPndhc1J1bkJ5VXNlckdlc3R1cmUoKTsKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IGEg
bmV3IGhpc3RvcnkgaXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJl
Ci0gICAgICAgICAgICAgICAgcGFydC0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShkc3RVcmwsIHAt
PnJlZmVycmVyKCksICF1c2VyR2VzdHVyZSwgdXNlckdlc3R1cmUpOworICAgICAgICAgICAgICAg
IGZyYW1lLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGRzdFVybCwgcC0+cmVmZXJyZXIoKSwgIXVz
ZXJHZXN0dXJlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC0yMjk5LDcgKzIyOTksNyBAQCBKU1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4CiAgICAgICByZXR1cm4ganNTdHJpbmcobG9jYXRpb24tPnRvU3RyaW5n
KGV4ZWMpKTsKICAgICB9CiAgIH0gZWxzZQotICAgIGtkRGVidWcoNjA3MCkgPDwgIkxvY2F0aW9u
RnVuYzo6dHJ5RXhlY3V0ZSAtIG5vIHBhcnQhIiA8PCBlbmRsOworICAgIGtkRGVidWcoNjA3MCkg
PDwgIkxvY2F0aW9uRnVuYzo6dHJ5RXhlY3V0ZSAtIG5vIGZyYW1lISIgPDwgZW5kbDsKICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTIzMzEsMTQgKzIzMzEsMTQgQEAgY29uc3QgQ2xh
c3NJbmZvIFNlbGVjdGlvbjo6aW5mbyA9IHsgIlNlbAogQGVuZAogKi8KIEtKU19JTVBMRU1FTlRf
UFJPVE9GVU5DKFNlbGVjdGlvbkZ1bmMpCi1TZWxlY3Rpb246OlNlbGVjdGlvbihLSFRNTFBhcnQg
KnApIDogbV9wYXJ0KHApCitTZWxlY3Rpb246OlNlbGVjdGlvbihGcmFtZSAqcCkgOiBtX2ZyYW1l
KHApCiB7CiB9CiAKIEpTVmFsdWUgKlNlbGVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMg
PSBtX3BhcnQtPnNlbGVjdGlvbigpOwotICAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93
OjpyZXRyaWV2ZVdpbmRvdyhtX3BhcnQpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpOworICAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93Ojpy
ZXRyaWV2ZVdpbmRvdyhtX2ZyYW1lKTsKICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtMjM3MSw3ICsyMzcxLDcgQEAgSlNWYWx1ZSAq
U2VsZWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCiBib29sIFNlbGVjdGlvbjo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gIGlmIChtX3BhcnQuaXNOdWxsKCkpCisgIGlm
IChtX2ZyYW1lLmlzTnVsbCgpKQogICAgICAgcmV0dXJuIGZhbHNlOwogCiAgIHJldHVybiBnZXRT
dGF0aWNQcm9wZXJ0eVNsb3Q8U2VsZWN0aW9uRnVuYywgU2VsZWN0aW9uLCBKU09iamVjdD4oZXhl
YywgJlNlbGVjdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwpAQCAtMjM4NCw3
ICsyMzg0LDcgQEAgSlNWYWx1ZSAqU2VsZWN0aW9uOjp0b1ByaW1pdGl2ZShFeGVjU3RhdAogCiBV
U3RyaW5nIFNlbGVjdGlvbjo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFVTdHJpbmcoKG1fcGFydC0+c2VsZWN0aW9uKCkpLnRvU3RyaW5nKCkpOworICAgIHJldHVy
biBVU3RyaW5nKChtX2ZyYW1lLT5zZWxlY3Rpb24oKSkudG9TdHJpbmcoKSk7CiB9CiAKIEpTVmFs
dWUgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmpl
Y3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCkBAIC0yMzkyLDkgKzIzOTIsOSBAQCBKU1Zh
bHVlICpTZWxlY3Rpb25GdW5jOjpjYWxsQXNGdW5jdGlvbihFCiAgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmU2VsZWN0aW9uOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgICBTZWxlY3Rpb24gKnNlbGVjdGlvbiA9IHN0YXRpY19jYXN0PFNl
bGVjdGlvbiAqPih0aGlzT2JqKTsKLSAgICBLSFRNTFBhcnQgKnBhcnQgPSBzZWxlY3Rpb24tPnBh
cnQoKTsKLSAgICBpZiAocGFydCkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBw
YXJ0LT5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZSAqZnJhbWUgPSBzZWxlY3Rpb24tPmZyYW1lKCk7
CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IGZyYW1l
LT5zZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpDb2xsYXBzZToKQEAgLTI0MjQsNyArMjQyNCw3IEBAIEpTVmFs
dWUgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEUKICAgICAgICAgICAgICAgICByZXR1
cm4ganNTdHJpbmcocy50b1N0cmluZygpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
cGFydC0+c2V0U2VsZWN0aW9uKHMpOworICAgICAgICBmcmFtZS0+c2V0U2VsZWN0aW9uKHMpOwog
ICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMjQzOCw5ICsyNDM4LDkgQEAg
Y29uc3QgQ2xhc3NJbmZvIEJhckluZm86OmluZm8gPSB7ICJCYXJJbgogICB2aXNpYmxlICAgICAg
ICAgICAgICAgIEJhckluZm86OlZpc2libGUJCSAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkK
IEBlbmQKICovCi1CYXJJbmZvOjpCYXJJbmZvKEV4ZWNTdGF0ZSAqZXhlYywgS0hUTUxQYXJ0ICpw
LCBUeXBlIGJhclR5cGUpIAorQmFySW5mbzo6QmFySW5mbyhFeGVjU3RhdGUgKmV4ZWMsIEZyYW1l
ICpwLCBUeXBlIGJhclR5cGUpIAogICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpCi0gICwgbV9wYXJ0KHApCisgICwgbV9mcmFt
ZShwKQogICAsIG1fdHlwZShiYXJUeXBlKQogewogfQpAQCAtMjQ1MCwxNyArMjQ1MCwxNyBAQCBK
U1ZhbHVlICpCYXJJbmZvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgICAgYXNzZXJ0KHRva2Vu
ID09IFZpc2libGUpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBMb2NhdGlvbmJh
cjoKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihLV1EobV9wYXJ0KS0+bG9jYXRpb25iYXJWaXNp
YmxlKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKE1hYyhtX2ZyYW1lKS0+bG9jYXRpb25i
YXJWaXNpYmxlKCkpOwogICAgIGNhc2UgTWVudWJhcjogCi0gICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oS1dRKG1fcGFydCktPmxvY2F0aW9uYmFyVmlzaWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbihNYWMobV9mcmFtZSktPmxvY2F0aW9uYmFyVmlzaWJsZSgpKTsKICAgICBjYXNlIFBl
cnNvbmFsYmFyOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKEtXUShtX3BhcnQpLT5wZXJzb25h
bGJhclZpc2libGUoKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oTWFjKG1fZnJhbWUpLT5w
ZXJzb25hbGJhclZpc2libGUoKSk7CiAgICAgY2FzZSBTY3JvbGxiYXJzOiAKLSAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihLV1EobV9wYXJ0KS0+c2Nyb2xsYmFyc1Zpc2libGUoKSk7CisgICAgICAg
IHJldHVybiBqc0Jvb2xlYW4oTWFjKG1fZnJhbWUpLT5zY3JvbGxiYXJzVmlzaWJsZSgpKTsKICAg
ICBjYXNlIFN0YXR1c2JhcjoKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihLV1EobV9wYXJ0KS0+
c3RhdHVzYmFyVmlzaWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihNYWMobV9mcmFt
ZSktPnN0YXR1c2JhclZpc2libGUoKSk7CiAgICAgY2FzZSBUb29sYmFyOgotICAgICAgICByZXR1
cm4ganNCb29sZWFuKEtXUShtX3BhcnQpLT50b29sYmFyVmlzaWJsZSgpKTsKKyAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihNYWMobV9mcmFtZSktPnRvb2xiYXJWaXNpYmxlKCkpOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIH0KQEAgLTI0NjgsNyAr
MjQ2OCw3IEBAIEpTVmFsdWUgKkJhckluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1MKIAogYm9v
bCBCYXJJbmZvOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgaWYgKG1fcGFy
dC5pc051bGwoKSkKKyAgaWYgKG1fZnJhbWUuaXNOdWxsKCkpCiAgICAgcmV0dXJuIGZhbHNlOwog
ICAKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxCYXJJbmZvLCBKU09iamVjdD4oZXhlYywg
JkJhckluZm9UYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKQEAgLTI0OTcsNyArMjQ5
Nyw3IEBAIEpTVmFsdWUgKkhpc3Rvcnk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1MKICAgc3dpdGNo
ICh0b2tlbikgewogICBjYXNlIExlbmd0aDoKICAgewotICAgIEtQYXJ0czo6QnJvd3NlckV4dGVu
c2lvbiAqZXh0ID0gcGFydC0+YnJvd3NlckV4dGVuc2lvbigpOworICAgIEtQYXJ0czo6QnJvd3Nl
ckV4dGVuc2lvbiAqZXh0ID0gbV9mcmFtZS0+YnJvd3NlckV4dGVuc2lvbigpOwogICAgIGlmICgg
IWV4dCApCiAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKQEAgLTI1NDQsNyArMjU0NCw3IEBA
IEpTVmFsdWUgKkhpc3RvcnlGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgfQogCi0gIGhpc3RvcnktPnBhcnQtPnNjaGVkdWxlSGlzdG9yeU5hdmln
YXRpb24oc3RlcHMpOworICBoaXN0b3J5LT5tX2ZyYW1lLT5zY2hlZHVsZUhpc3RvcnlOYXZpZ2F0
aW9uKHN0ZXBzKTsKICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IGtodG1sL2Vj
bWEva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX2JpbmRpbmcu
Y3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxOSArNzYsMTkgQEAgc3RhdGljIE5vZGVQZXJEb2NNYXAgKmRvbU5v
ZGVzUGVyRG9jdW1lbgogfQogCiAKLVNjcmlwdEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRl
ciggSlNPYmplY3QgKmdsb2JhbCwgS0hUTUxQYXJ0KiBwYXJ0ICkKLSAgOiBJbnRlcnByZXRlcigg
Z2xvYmFsICksIG1fcGFydCggcGFydCApLAorU2NyaXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVy
cHJldGVyKCBKU09iamVjdCAqZ2xvYmFsLCBGcmFtZSAqZnJhbWUgKQorICA6IEludGVycHJldGVy
KCBnbG9iYWwgKSwgbV9mcmFtZShmcmFtZSksCiAgICAgbV9ldnQoIDBMICksIG1faW5saW5lQ29k
ZShmYWxzZSksIG1fdGltZXJDYWxsYmFjayhmYWxzZSkKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJTY3JpcHRJbnRlcnByZXRlcjo6U2NyaXB0SW50ZXJwcmV0ZXIg
IiA8PCB0aGlzIDw8ICIgZm9yIHBhcnQ9IiA8PCBtX3BhcnQgPDwgZW5kbDsKKyAga2REZWJ1Zyg2
MDcwKSA8PCAiU2NyaXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVycHJldGVyICIgPDwgdGhpcyA8
PCAiIGZvciBmcmFtZT0iIDw8IG1fZnJhbWUgPDwgZW5kbDsKICNlbmRpZgogfQogCiBTY3JpcHRJ
bnRlcnByZXRlcjo6flNjcmlwdEludGVycHJldGVyKCkKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJTY3JpcHRJbnRlcnByZXRlcjo6flNjcmlwdEludGVycHJldGVy
ICIgPDwgdGhpcyA8PCAiIGZvciBwYXJ0PSIgPDwgbV9wYXJ0IDw8IGVuZGw7CisgIGtkRGVidWco
NjA3MCkgPDwgIlNjcmlwdEludGVycHJldGVyOjp+U2NyaXB0SW50ZXJwcmV0ZXIgIiA8PCB0aGlz
IDw8ICIgZm9yIGZyYW1lPSIgPDwgbV9mcmFtZSA8PCBlbmRsOwogI2VuZGlmCiB9CiAKSW5kZXg6
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX3dp
bmRvdy5oCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2VjbWEva2pzX3dpbmRvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIGNsYXNzIFFUaW1lcjsKIGNsYXNzIEtIVE1M
VmlldzsKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNzIEZyYW1lOwogCiBuYW1lc3BhY2UgRE9NIHsK
ICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CkBAIC0xMDgsMzEgKzEwOCwzMSBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgfTsKIAogICBjbGFzcyBXaW5kb3cgOiBwdWJsaWMgSlNPYmplY3QgewotICAgIGZy
aWVuZCBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IGdldEluc3RhbmNlKCk7CisgICAgZnJpZW5kIFFH
dWFyZGVkUHRyPEZyYW1lPiBnZXRJbnN0YW5jZSgpOwogICAgIGZyaWVuZCBjbGFzcyBMb2NhdGlv
bjsKICAgICBmcmllbmQgY2xhc3MgV2luZG93RnVuYzsKICAgICBmcmllbmQgY2xhc3MgV2luZG93
UU9iamVjdDsKICAgICBmcmllbmQgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogICBwdWJsaWM6Ci0g
ICAgV2luZG93KEtIVE1MUGFydCAqcCk7CisgICAgV2luZG93KEZyYW1lICpwKTsKICAgcHVibGlj
OgogICAgIH5XaW5kb3coKTsKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuZCByZWdpc3RlcnMg
YSB3aW5kb3cgb2JqZWN0LiBJbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBhIFdpbmRvdwotICAgICAq
IGZvciB0aGUgc3BlY2lmaWVkIHBhcnQgcCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIg
dG8gaGF2ZSB1bmlxdWUKKyAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZSBwIHRoaXMgd2ls
bCBiZSByZXR1cm5lZCBpbiBvcmRlciB0byBoYXZlIHVuaXF1ZQogICAgICAqIGJpbmRpbmdzLgog
ICAgICAqLwotICAgIHN0YXRpYyBKU1ZhbHVlICpyZXRyaWV2ZShLSFRNTFBhcnQgKnApOworICAg
IHN0YXRpYyBKU1ZhbHVlICpyZXRyaWV2ZShGcmFtZSAqcCk7CiAgICAgLyoqCi0gICAgICogUmV0
dXJucyB0aGUgV2luZG93IG9iamVjdCBmb3IgYSBnaXZlbiBIVE1MIHBhcnQKKyAgICAgKiBSZXR1
cm5zIHRoZSBXaW5kb3cgb2JqZWN0IGZvciBhIGdpdmVuIEhUTUwgZnJhbWUKICAgICAgKi8KLSAg
ICBzdGF0aWMgV2luZG93ICpyZXRyaWV2ZVdpbmRvdyhLSFRNTFBhcnQgKnApOworICAgIHN0YXRp
YyBXaW5kb3cgKnJldHJpZXZlV2luZG93KEZyYW1lICpwKTsKICAgICAvKioKICAgICAgKiByZXR1
cm5zIGEgcG9pbnRlciB0byB0aGUgV2luZG93IG9iamVjdCB0aGlzIGphdmFzY3JpcHQgaW50ZXJw
cmV0aW5nIGluc3RhbmNlCiAgICAgICogd2FzIGNhbGxlZCBmcm9tLgogICAgICAqLwogICAgIHN0
YXRpYyBXaW5kb3cgKnJldHJpZXZlQWN0aXZlKEV4ZWNTdGF0ZSopOwotICAgIFFHdWFyZGVkUHRy
PEtIVE1MUGFydD4gcGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFydDsgfQorICAgIFFHdWFyZGVk
UHRyPEZyYW1lPiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbWFyaygpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU1ZhbHVlICpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKQEAgLTIw
Miw3ICsyMDIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkg
Y29uc3Q7CiAKLSAgICBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IG1fcGFydDsKKyAgICBRR3VhcmRl
ZFB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICBtdXRhYmxlIFNjcmVlbiAqc2NyZWVuOwogICAgIG11
dGFibGUgSGlzdG9yeSAqaGlzdG9yeTsKICAgICBtdXRhYmxlIEZyYW1lQXJyYXkgKmZyYW1lczsK
QEAgLTI0OSwxMyArMjQ5LDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICBlbnVtIHsgSGFzaCwgSHJlZiwgSG9z
dG5hbWUsIEhvc3QsIFBhdGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2VhcmNoLCBFcXVhbEVxdWFs
LAogICAgICAgICAgICBSZXBsYWNlLCBSZWxvYWQsIFRvU3RyaW5nLCBBc3NpZ24gfTsKLSAgICBL
SFRNTFBhcnQgKnBhcnQoKSBjb25zdCB7IHJldHVybiBtX3BhcnQ7IH0KKyAgICBGcmFtZSAqZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXaW5kb3c7Ci0g
ICAgTG9jYXRpb24oS0hUTUxQYXJ0ICpwKTsKLSAgICBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IG1f
cGFydDsKKyAgICBMb2NhdGlvbihGcmFtZSAqcCk7CisgICAgUUd1YXJkZWRQdHI8RnJhbWU+IG1f
ZnJhbWU7CiAgIH07CiAKICAgY2xhc3MgU2VsZWN0aW9uIDogcHVibGljIEpTT2JqZWN0IHsKQEAg
LTI2NywxMyArMjY3LDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0geyBBbmNob3JOb2Rl
LCBBbmNob3JPZmZzZXQsIEZvY3VzTm9kZSwgRm9jdXNPZmZzZXQsIEJhc2VOb2RlLCBCYXNlT2Zm
c2V0LCBFeHRlbnROb2RlLCBFeHRlbnRPZmZzZXQsIAogICAgICAgICAgICBJc0NvbGxhcHNlZCwg
X1R5cGUsIEVxdWFsRXF1YWwsIENvbGxhcHNlLCBDb2xsYXBzZVRvRW5kLCBDb2xsYXBzZVRvU3Rh
cnQsIEVtcHR5LCBUb1N0cmluZywgCiAgICAgICAgICAgIFNldEJhc2VBbmRFeHRlbnQsIFNldFBv
c2l0aW9uLCBNb2RpZnksIEdldFJhbmdlQXQgfTsKLSAgICBLSFRNTFBhcnQgKnBhcnQoKSBjb25z
dCB7IHJldHVybiBtX3BhcnQ7IH0KKyAgICBGcmFtZSAqZnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lOyB9CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXaW5kb3c7Ci0gICAgU2VsZWN0aW9uKEtIVE1MUGFy
dCAqcCk7Ci0gICAgUUd1YXJkZWRQdHI8S0hUTUxQYXJ0PiBtX3BhcnQ7CisgICAgU2VsZWN0aW9u
KEZyYW1lICpwKTsKKyAgICBRR3VhcmRlZFB0cjxGcmFtZT4gbV9mcmFtZTsKICAgfTsKIAogICBj
bGFzcyBCYXJJbmZvIDogcHVibGljIEpTT2JqZWN0IHsKQEAgLTI4MiwxMyArMjgyLDEzIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIGVudW0geyBWaXNpYmxlIH07CiAgICAgZW51bSBU
eXBlIHsgTG9jYXRpb25iYXIsIE1lbnViYXIsIFBlcnNvbmFsYmFyLCBTY3JvbGxiYXJzLCBTdGF0
dXNiYXIsIFRvb2xiYXIgfTsKLSAgICBLSFRNTFBhcnQgKnBhcnQoKSBjb25zdCB7IHJldHVybiBt
X3BhcnQ7IH0KKyAgICBGcmFtZSAqZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBXaW5kb3c7Ci0gICAgQmFySW5mbyhFeGVjU3RhdGUgKmV4ZWMsIEtIVE1M
UGFydCAqcCwgVHlwZSBiYXJUeXBlKTsKLSAgICBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IG1fcGFy
dDsKKyAgICBCYXJJbmZvKEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUgKnAsIFR5cGUgYmFyVHlwZSk7
CisgICAgUUd1YXJkZWRQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgVHlwZSBtX3R5cGU7CiAgIH07
CiAKSW5kZXg6IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNt
YS9ranNfZG9tLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9lY21hL2tqc19kb20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
CiAjaW5jbHVkZSA8a2RlYnVnLmg+Ci0jaW5jbHVkZSA8a2h0bWxfcGFydC5oPgorI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSA8a2h0bWx2aWV3Lmg+CiAjaW5jbHVkZSAieG1sL2RvbTJfZXZl
bnRzaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3ZpZXdzaW1wbC5oIgpAQCAtOTY1LDggKzk2
NSw4IEBAIEpTVmFsdWUgKkRPTURvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEUKICAgICAgIHJl
dHVybiBqc1N0cmluZyhkZWNvZGVyLT5lbmNvZGluZygpKTsKICAgICByZXR1cm4ganNOdWxsKCk7
CiAgIGNhc2UgRGVmYXVsdENoYXJzZXQ6Ci0gICAgaWYgKEtIVE1MUGFydCogcGFydCA9IGRvYy5w
YXJ0KCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhwYXJ0LT5zZXR0aW5ncygpLT5lbmNvZGlu
ZygpKTsKKyAgICBpZiAoRnJhbWUgKmZyYW1lID0gZG9jLmZyYW1lKCkpCisgICAgICAgIHJldHVy
biBqc1N0cmluZyhmcmFtZS0+c2V0dGluZ3MoKS0+ZW5jb2RpbmcoKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgIGNhc2UgU3R5bGVTaGVldHM6CiAgICAgLy9rZERlYnVnKCkgPDwgIkRP
TURvY3VtZW50OjpTdHlsZVNoZWV0cywgcmV0dXJuaW5nICIgPDwgZG9jLnN0eWxlU2hlZXRzKCku
bGVuZ3RoKCkgPDwgIiBzdHlsZXNoZWV0cyIgPDwgZW5kbDsKQEAgLTk3Niw4ICs5NzYsOCBAQCBK
U1ZhbHVlICpET01Eb2N1bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAgIGNhc2UgU2VsZWN0ZWRT
dHlsZXNoZWV0U2V0OgogICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChkb2Muc2VsZWN0ZWRTdHls
ZXNoZWV0U2V0KCkpOwogICBjYXNlIFJlYWR5U3RhdGU6Ci0gICAgaWYgKEtIVE1MUGFydCogcGFy
dCA9IGRvYy5wYXJ0KCkpIHsKLSAgICAgIGlmIChwYXJ0LT5kLT5tX2JDb21wbGV0ZSkgcmV0dXJu
IGpzU3RyaW5nKCJjb21wbGV0ZSIpOworICAgIGlmIChGcmFtZSAqZnJhbWUgPSBkb2MuZnJhbWUo
KSkgeworICAgICAgaWYgKGZyYW1lLT5kLT5tX2JDb21wbGV0ZSkgcmV0dXJuIGpzU3RyaW5nKCJj
b21wbGV0ZSIpOwogICAgICAgaWYgKGRvYy5wYXJzaW5nKCkpIHJldHVybiBqc1N0cmluZygibG9h
ZGluZyIpOwogICAgICAgcmV0dXJuIGpzU3RyaW5nKCJsb2FkZWQiKTsKICAgICAgIC8vIFdoYXQg
ZG9lcyB0aGUgaW50ZXJhY3RpdmUgdmFsdWUgbWVhbiA/CkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBK
U1ZhbHVlICpnZXRET01Eb2N1bWVudE5vZGUoRXhlY1N0YXRlICplCiAgIC8vIE1ha2Ugc3VyZSB0
aGUgZG9jdW1lbnQgaXMga2VwdCBhcm91bmQgYnkgdGhlIHdpbmRvdyBvYmplY3QsIGFuZCB3b3Jr
cyByaWdodCB3aXRoIHRoZQogICAvLyBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgIGlmIChuLT52aWV3
KCkpCi0gICAgV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhuLT52aWV3KCktPnBhcnQoKSktPnB1dERp
cmVjdCgiZG9jdW1lbnQiLCByZXQsIERvbnREZWxldGV8UmVhZE9ubHkpOworICAgIFdpbmRvdzo6
cmV0cmlldmVXaW5kb3cobi0+dmlldygpLT5mcmFtZSgpKS0+cHV0RGlyZWN0KCJkb2N1bWVudCIs
IHJldCwgRG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgaW50ZXJwLT5wdXRET01PYmplY3Qobiwg
cmV0KTsKIApAQCAtMTY2NywxMCArMTY2NywxMCBAQCBib29sIGNoZWNrTm9kZVNlY3VyaXR5KEV4
ZWNTdGF0ZSAqZXhlYywgCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnRlcnByZXRlciBpcyBhbGxvd2VkIHRvIGFjY2Vz
cyB0aGUgc3BlY2lmaWVkIG5vZGUKLSAgS0hUTUxQYXJ0ICpwYXJ0ID0gbi0+Z2V0RG9jdW1lbnQo
KS0+cGFydCgpOwotICBpZiAoIXBhcnQpCisgIEZyYW1lICpmcmFtZSA9IG4tPmdldERvY3VtZW50
KCktPmZyYW1lKCk7CisgIGlmICghZnJhbWUpCiAgICAgcmV0dXJuIGZhbHNlOwotICBXaW5kb3cg
KndpbiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7CisgIFdpbmRvdyAqd2luID0gV2lu
ZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7CiAgIHJldHVybiB3aW4gJiYgd2luLT5pc1NhZmVT
Y3JpcHQoZXhlYyk7CiB9CiAKSW5kZXg6IGtodG1sL2VjbWEva2pzX2JpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBraHRtbC9lY21hL2tqc19iaW5kaW5nLmgJKHJldmlzaW9uIDExOTYwKQorKysga2h0
bWwvZWNtYS9ranNfYmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lLmg+CiAKLWNsYXNzIEtIVE1MUGFydDsK
K2NsYXNzIEZyYW1lOwogCiBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBEb2N1bWVudEltcGw7
CkBAIC03MSw3ICs3MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBTY3JpcHRJbnRlcnBy
ZXRlciA6IHB1YmxpYyBJbnRlcnByZXRlcgogICB7CiAgIHB1YmxpYzoKLSAgICBTY3JpcHRJbnRl
cnByZXRlcihKU09iamVjdCAqZ2xvYmFsLCBLSFRNTFBhcnQqIHBhcnQpOworICAgIFNjcmlwdElu
dGVycHJldGVyKEpTT2JqZWN0ICpnbG9iYWwsIEZyYW1lICpmcmFtZSk7CiAgICAgdmlydHVhbCB+
U2NyaXB0SW50ZXJwcmV0ZXIoKTsKIAogICAgIHN0YXRpYyBET01PYmplY3QqIGdldERPTU9iamVj
dCh2b2lkKiBvYmplY3RIYW5kbGUpOwpAQCAtODQsNyArODQsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBzdGF0aWMgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERPTTo6RG9jdW1l
bnRJbXBsICpkb2N1bWVudCk7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlRE9NTm9kZURvY3VtZW50
KERPTTo6Tm9kZUltcGwgKm5vZGVIYW5kbGUsIERPTTo6RG9jdW1lbnRJbXBsICpvbGREb2MsIERP
TTo6RG9jdW1lbnRJbXBsICpuZXdEb2MpOwogCi0gICAgS0hUTUxQYXJ0KiBwYXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJ0OyB9CisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQogCiAgICAgdmlydHVhbCBpbnQgcnR0aSgpIHsgcmV0dXJuIDE7IH0KIApAQCAtMTEw
LDcgKzExMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgKmNyZWF0ZU9iamNJbnN0YW5j
ZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp2YWx1ZSwgY29uc3QgQmluZGlu
Z3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJl
bnQpOwogCiAgIHByaXZhdGU6Ci0gICAgS0hUTUxQYXJ0KiBtX3BhcnQ7CisgICAgRnJhbWUqIG1f
ZnJhbWU7CiAKICAgICBET006OkV2ZW50SW1wbCAqbV9ldnQ7CiAgICAgYm9vbCBtX2lubGluZUNv
ZGU7CkluZGV4OiBraHRtbC9lY21hL2tqc19wcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwv
ZWNtYS9ranNfcHJveHkuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL2VjbWEva2pzX3By
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTYgKzIzLDE2IEBACiAKICNpbmNsdWRlICJr
anNfd2luZG93LmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgotI2luY2x1ZGUgPGtodG1sX3Bh
cnQuaD4KKyNpbmNsdWRlICJNYWNGcmFtZS5oIgogI2luY2x1ZGUgPGtqcy9jb2xsZWN0b3IuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKLUtKU1Byb3h5
SW1wbDo6S0pTUHJveHlJbXBsKEtIVE1MUGFydCAqcGFydCkKK0tKU1Byb3h5SW1wbDo6S0pTUHJv
eHlJbXBsKEZyYW1lICpmcmFtZSkKIHsKICAgICBtX3NjcmlwdCA9IDA7Ci0gICAgbV9wYXJ0ID0g
cGFydDsKKyAgICBtX2ZyYW1lID0gZnJhbWU7CiAgICAgbV9oYW5kbGVyTGluZW5vID0gMDsKIH0K
IApAQCAtNTgsNyArNTgsNyBAQCBRVmFyaWFudCBLSlNQcm94eUltcGw6OmV2YWx1YXRlKGNvbnN0
IERPCiAKICAgSlNMb2NrIGxvY2s7CiAKLSAgS0pTOjpKU1ZhbHVlKiB0aGlzTm9kZSA9IG4gPyBX
aW5kb3c6OnJldHJpZXZlKG1fcGFydCkgOiBnZXRET01Ob2RlKG1fc2NyaXB0LT5nbG9iYWxFeGVj
KCksIG4pOworICBLSlM6OkpTVmFsdWUqIHRoaXNOb2RlID0gbiA/IFdpbmRvdzo6cmV0cmlldmUo
bV9mcmFtZSkgOiBnZXRET01Ob2RlKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksIG4pOwogICBDb21w
bGV0aW9uIGNvbXAgPSBtX3NjcmlwdC0+ZXZhbHVhdGUoZmlsZW5hbWUsIGJhc2VMaW5lLCByZWlu
dGVycHJldF9jYXN0PEtKUzo6VUNoYXIgKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSwg
dGhpc05vZGUpOwogCiAgIGJvb2wgc3VjY2VzcyA9ICggY29tcC5jb21wbFR5cGUoKSA9PSBOb3Jt
YWwgKSB8fCAoIGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUgKTsgIApAQCAtNzIsMTcg
KzcyLDE3IEBAIFFWYXJpYW50IEtKU1Byb3h5SW1wbDo6ZXZhbHVhdGUoY29uc3QgRE8KICAgICBp
bnQgbGluZU51bWJlciA9ICBjb21wLnZhbHVlKCktPnRvT2JqZWN0KG1fc2NyaXB0LT5nbG9iYWxF
eGVjKCkpLT5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgImxpbmUiKS0+dG9JbnQzMihtX3Nj
cmlwdC0+Z2xvYmFsRXhlYygpKTsKICAgICBVU3RyaW5nIHNvdXJjZVVSTCA9IGNvbXAudmFsdWUo
KS0+dG9PYmplY3QobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSktPmdldChtX3NjcmlwdC0+Z2xvYmFs
RXhlYygpLCAic291cmNlVVJMIiktPnRvU3RyaW5nKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpOwog
Ci0gICAgS1dRKG1fcGFydCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoZXJyb3JNZXNzYWdlLmRvbVN0
cmluZygpLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwuZG9tU3RyaW5nKCkpOworICAgIE1hYyhtX2Zy
YW1lKS0+YWRkTWVzc2FnZVRvQ29uc29sZShlcnJvck1lc3NhZ2UuZG9tU3RyaW5nKCksIGxpbmVO
dW1iZXIsIHNvdXJjZVVSTC5kb21TdHJpbmcoKSk7CiAgIH0KICAgcmV0dXJuIFFWYXJpYW50KCk7
CiB9CiAKIHZvaWQgS0pTUHJveHlJbXBsOjpjbGVhcigpIHsKICAgLy8gY2xlYXIgcmVzb3VyY2Vz
IGFsbG9jYXRlZCBieSB0aGUgaW50ZXJwcmV0ZXIsIGFuZCBtYWtlIGl0IHJlYWR5IHRvIGJlIHVz
ZWQgYnkgYW5vdGhlciBwYWdlCi0gIC8vIFdlIGhhdmUgdG8ga2VlcCBpdCwgc28gdGhhdCB0aGUg
V2luZG93IG9iamVjdCBmb3IgdGhlIHBhcnQgcmVtYWlucyB0aGUgc2FtZS4KKyAgLy8gV2UgaGF2
ZSB0byBrZWVwIGl0LCBzbyB0aGF0IHRoZSBXaW5kb3cgb2JqZWN0IGZvciB0aGUgZnJhbWUgcmVt
YWlucyB0aGUgc2FtZS4KICAgLy8gKHdlIHVzZWQgdG8gZGVsZXRlIGFuZCByZS1jcmVhdGUgaXQs
IHByZXZpb3VzbHkpCiAgIGlmIChtX3NjcmlwdCkgewotICAgIFdpbmRvdyAqd2luID0gV2luZG93
OjpyZXRyaWV2ZVdpbmRvdyhtX3BhcnQpOworICAgIFdpbmRvdyAqd2luID0gV2luZG93OjpyZXRy
aWV2ZVdpbmRvdyhtX2ZyYW1lKTsKICAgICBpZiAod2luKQogICAgICAgICB3aW4tPmNsZWFyKCBt
X3NjcmlwdC0+Z2xvYmFsRXhlYygpICk7CiAgIH0KQEAgLTkyLDcgKzkyLDcgQEAgRXZlbnRMaXN0
ZW5lciAqS0pTUHJveHlJbXBsOjpjcmVhdGVIVE1MRQogewogICAgIGluaXRTY3JpcHQoKTsKICAg
ICBKU0xvY2sgbG9jazsKLSAgICByZXR1cm4gS0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93KG1f
cGFydCktPmdldEpTTGF6eUV2ZW50TGlzdGVuZXIoY29kZSwgbm9kZSwgbV9oYW5kbGVyTGluZW5v
KTsKKyAgICByZXR1cm4gS0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fZnJhbWUpLT5nZXRK
U0xhenlFdmVudExpc3RlbmVyKGNvZGUsIG5vZGUsIG1faGFuZGxlckxpbmVubyk7CiB9CiAKIHZv
aWQgS0pTUHJveHlJbXBsOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudEltcGwgKmV2ZW50KQpAQCAt
MTA4LDcgKzEwOCw3IEBAIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXIgKktKU1Byb3h5SW1wbDo6aW4K
IHsKICAgaWYgKCFtX3NjcmlwdCkKICAgICBpbml0U2NyaXB0KCk7Ci0gIG1fcGFydC0+a2VlcEFs
aXZlKCk7CisgIG1fZnJhbWUtPmtlZXBBbGl2ZSgpOwogICByZXR1cm4gbV9zY3JpcHQ7CiB9CiAK
QEAgLTEzMywxMyArMTMzLDEzIEBAIHZvaWQgS0pTUHJveHlJbXBsOjppbml0U2NyaXB0KCkKIAog
ICAvLyBCdWlsZCB0aGUgZ2xvYmFsIG9iamVjdCAtIHdoaWNoIGlzIGEgV2luZG93IGluc3RhbmNl
CiAgIEtKUzo6SlNMb2NrIGxvY2s7Ci0gIEpTT2JqZWN0ICpnbG9iYWxPYmplY3QoIG5ldyBXaW5k
b3cobV9wYXJ0KSApOworICBKU09iamVjdCAqZ2xvYmFsT2JqZWN0KCBuZXcgV2luZG93KG1fZnJh
bWUpICk7CiAKLSAgLy8gQ3JlYXRlIGEgS0pTIGludGVycHJldGVyIGZvciB0aGlzIHBhcnQKLSAg
bV9zY3JpcHQgPSBuZXcgS0pTOjpTY3JpcHRJbnRlcnByZXRlcihnbG9iYWxPYmplY3QsIG1fcGFy
dCk7CisgIC8vIENyZWF0ZSBhIEtKUyBpbnRlcnByZXRlciBmb3IgdGhpcyBmcmFtZQorICBtX3Nj
cmlwdCA9IG5ldyBLSlM6OlNjcmlwdEludGVycHJldGVyKGdsb2JhbE9iamVjdCwgbV9mcmFtZSk7
CiAgIGdsb2JhbE9iamVjdC0+cHV0KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksICJkZWJ1ZyIsIG5l
dyBUZXN0RnVuY3Rpb25JbXAoKSwgSW50ZXJuYWwpOwogCi0gIFFTdHJpbmcgdXNlckFnZW50ID0g
S1dRKG1fcGFydCktPnVzZXJBZ2VudCgpOworICBRU3RyaW5nIHVzZXJBZ2VudCA9IE1hYyhtX2Zy
YW1lKS0+dXNlckFnZW50KCk7CiAgIGlmICh1c2VyQWdlbnQuZmluZChRU3RyaW5nOjpmcm9tTGF0
aW4xKCJNaWNyb3NvZnQiKSkgPj0gMCB8fAogICAgICAgdXNlckFnZW50LmZpbmQoUVN0cmluZzo6
ZnJvbUxhdGluMSgiTVNJRSIpKSA+PSAwKQogICAgIG1fc2NyaXB0LT5zZXRDb21wYXRNb2RlKElu
dGVycHJldGVyOjpJRUNvbXBhdCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19wcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX3Byb3h5LmgJKHJldmlzaW9uIDExOTYwKQorKysga2h0
bWwvZWNtYS9ranNfcHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogCiAj
aW5jbHVkZSA8cXZhcmlhbnQuaD4KIAotY2xhc3MgS0hUTUxQYXJ0OworY2xhc3MgRnJhbWU7CiBj
bGFzcyBRU3RyaW5nOwogCiBuYW1lc3BhY2UgRE9NIHsKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAKIGNsYXNzIEtKU1Byb3h5SW1wbCB7CiBwdWJsaWM6Ci0gICAgS0pTUHJveHlJ
bXBsKEtIVE1MUGFydCopOworICAgIEtKU1Byb3h5SW1wbChGcmFtZSopOwogICAgIH5LSlNQcm94
eUltcGwoKTsKICAgICBRVmFyaWFudCBldmFsdWF0ZShjb25zdCBET006OkRPTVN0cmluZyYgZmls
ZW5hbWUsIGludCBiYXNlTGluZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIGNvZGUsIERPTTo6Tm9k
ZUltcGwqKTsKICAgICB2b2lkIGNsZWFyKCk7CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBLSlM6OlNjcmlwdEludGVycHJldGVyKiBtX3NjcmlwdDsKLSAgICBLSFRN
TFBhcnQgKm1fcGFydDsKKyAgICBGcmFtZSAqbV9mcmFtZTsKICAgICBpbnQgbV9oYW5kbGVyTGlu
ZW5vOwogfTsKIApJbmRleDoga2h0bWwveHNsL3hzbHRfcHJvY2Vzc29yaW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwveHNsL3hzbHRfcHJvY2Vzc29yaW1wbC5jcHAJKHJldmlzaW9uIDExOTYw
KQorKysga2h0bWwveHNsL3hzbHRfcHJvY2Vzc29yaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAu
aCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJLV1FMb2FkZXIuaCIKIAogI2luY2x1ZGUgPGtpby9q
b2IuaD4KQEAgLTIwMyw4ICsyMDMsOCBAQCBSZWZQdHI8RG9jdW1lbnRJbXBsPiBYU0xUUHJvY2Vz
c29ySW1wbDo6CiAgICAgLy8gaW4gcGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBvbmx5IGlmIHdl
J3JlIHJlbmRlcmluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgogICAgIGlmICh2aWV3KSB7CiAgICAg
ICAgIHZpZXctPmNsZWFyKCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291cmNlRG9j
dW1lbnQodmlldy0+cGFydCgpLT54bWxEb2NJbXBsKCkpOwotICAgICAgICB2aWV3LT5wYXJ0KCkt
PnJlcGxhY2VEb2NJbXBsKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VHJhbnNm
b3JtU291cmNlRG9jdW1lbnQodmlldy0+ZnJhbWUoKS0+eG1sRG9jSW1wbCgpKTsKKyAgICAgICAg
dmlldy0+ZnJhbWUoKS0+cmVwbGFjZURvY0ltcGwocmVzdWx0LmdldCgpKTsKICAgICB9CiAgICAg
CiAgICAgcmVzdWx0LT5vcGVuKCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgUmVmUHRyPERvY3VtZW50
SW1wbD4gWFNMVFByb2Nlc3NvckltcGw6OgogICAgIHJlc3VsdC0+ZmluaXNoUGFyc2luZygpOwog
ICAgIHJlc3VsdC0+c2V0UGFyc2luZyhmYWxzZSk7CiAgICAgaWYgKHZpZXcpCi0gICAgICAgIHZp
ZXctPnBhcnQoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKyAgICAgICAgdmlldy0+ZnJhbWUoKS0+Y2hl
Y2tDb21wbGV0ZWQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdC0+Y2xvc2UoKTsgLy8gRklY
TUU6IEV2ZW4gdmlld2xlc3MgZG9jcyBjYW4gbG9hZCBzdWJyZXNvdXJjZXMuIG9ubG9hZCB3aWxs
IGZpcmUgdG9vIGVhcmx5LgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJv
YmFibHkgYSBidWcgaW4gWE1MSHR0cFJlcXVlc3RPYmplY3RzIGFzIHdlbGwuCkluZGV4OiBraHRt
bC9raHRtbHBhcnRfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2todG1scGFydF9wLmgJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwva2h0bWxwYXJ0X3AuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4
LDIwICsxNDgsMjAgQEAgcHVibGljOgogICAgIG1fY2FuY2VsV2l0aExvYWRJblByb2dyZXNzID0g
ZmFsc2U7CiAgICAgCiAgICAgLy8gaW5oZXJpdCBzZXR0aW5ncyBmcm9tIHBhcmVudAotICAgIGlm
KHBhcmVudCAmJiBwYXJlbnQtPmluaGVyaXRzKCJLSFRNTFBhcnQiKSkKKyAgICBpZihwYXJlbnQg
JiYgcGFyZW50LT5pbmhlcml0cygiRnJhbWUiKSkKICAgICB7Ci0gICAgICAgIEtIVE1MUGFydCog
cGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCo+KHBhcmVudCk7Ci0gICAgICAgIGlmKHBhcnQt
PmQpCisgICAgICAgIEZyYW1lICpmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lKj4ocGFyZW50KTsK
KyAgICAgICAgaWYoZnJhbWUtPmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYkpTY3JpcHRG
b3JjZSA9IHBhcnQtPmQtPm1fYkpTY3JpcHRGb3JjZTsKLSAgICAgICAgICAgIG1fYkpTY3JpcHRP
dmVycmlkZSA9IHBhcnQtPmQtPm1fYkpTY3JpcHRPdmVycmlkZTsKLSAgICAgICAgICAgIG1fYkph
dmFGb3JjZSA9IHBhcnQtPmQtPm1fYkphdmFGb3JjZTsKLSAgICAgICAgICAgIG1fYkphdmFPdmVy
cmlkZSA9IHBhcnQtPmQtPm1fYkphdmFPdmVycmlkZTsKLSAgICAgICAgICAgIG1fYlBsdWdpbnNG
b3JjZSA9IHBhcnQtPmQtPm1fYlBsdWdpbnNGb3JjZTsKLSAgICAgICAgICAgIG1fYlBsdWdpbnNP
dmVycmlkZSA9IHBhcnQtPmQtPm1fYlBsdWdpbnNPdmVycmlkZTsKKyAgICAgICAgICAgIG1fYkpT
Y3JpcHRGb3JjZSA9IGZyYW1lLT5kLT5tX2JKU2NyaXB0Rm9yY2U7CisgICAgICAgICAgICBtX2JK
U2NyaXB0T3ZlcnJpZGUgPSBmcmFtZS0+ZC0+bV9iSlNjcmlwdE92ZXJyaWRlOworICAgICAgICAg
ICAgbV9iSmF2YUZvcmNlID0gZnJhbWUtPmQtPm1fYkphdmFGb3JjZTsKKyAgICAgICAgICAgIG1f
YkphdmFPdmVycmlkZSA9IGZyYW1lLT5kLT5tX2JKYXZhT3ZlcnJpZGU7CisgICAgICAgICAgICBt
X2JQbHVnaW5zRm9yY2UgPSBmcmFtZS0+ZC0+bV9iUGx1Z2luc0ZvcmNlOworICAgICAgICAgICAg
bV9iUGx1Z2luc092ZXJyaWRlID0gZnJhbWUtPmQtPm1fYlBsdWdpbnNPdmVycmlkZTsKICAgICAg
ICAgICAgIC8vIFNhbWUgZm9yIFNTTCBzZXR0aW5ncwotICAgICAgICAgICAgbV9vbmx5TG9jYWxS
ZWZlcmVuY2VzID0gcGFydC0+ZC0+bV9vbmx5TG9jYWxSZWZlcmVuY2VzOwotICAgICAgICAgICAg
bV96b29tRmFjdG9yID0gcGFydC0+ZC0+bV96b29tRmFjdG9yOworICAgICAgICAgICAgbV9vbmx5
TG9jYWxSZWZlcmVuY2VzID0gZnJhbWUtPmQtPm1fb25seUxvY2FsUmVmZXJlbmNlczsKKyAgICAg
ICAgICAgIG1fem9vbUZhY3RvciA9IGZyYW1lLT5kLT5tX3pvb21GYWN0b3I7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTI5NCw3ICsyOTQsNyBAQCBwdWJsaWM6CiAKICAgLy9RR3VhcmRlZFB0cjxL
UGFydHM6OlBhcnQ+IG1fYWN0aXZlRnJhbWU7CiAgIEtQYXJ0czo6UGFydCAqIG1fYWN0aXZlRnJh
bWU7Ci0gIFFHdWFyZGVkUHRyPEtIVE1MUGFydD4gbV9vcGVuZXI7CisgIFFHdWFyZGVkUHRyPEZy
YW1lPiBtX29wZW5lcjsKICAgYm9vbCBtX29wZW5lZEJ5SlM7CiAgIGJvb2wgbV9uZXdKU0ludGVy
cHJldGVyRXhpc3RzOyAvLyBzZXQgdG8gMSBieSBzZXRPcGVuZWRCeUpTLCBmb3Igd2luZG93Lm9w
ZW4KIApJbmRleDoga2h0bWwvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL0ZyYW1lLmNw
cAkocmV2aXNpb24gMTE5NDYpCisrKyBraHRtbC9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAia2h0
bWxfcGFydC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAKICNkZWZpbmUgUVRfTk9fQ0xJUEJPQVJE
CiAjZGVmaW5lIFFUX05PX0RSQUdBTkREUk9QCkBAIC01MSw2ICs1MSw5IEBACiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5oIgorI2luY2x1ZGUgIm1pc2MvQ2FjaGUuaCIK
KyNpbmNsdWRlICJtaXNjL0NhY2hlZENTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJtaXNjL0Rv
Y0xvYWRlci5oIgogI2luY2x1ZGUgIm1pc2MvbG9hZGVyLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJf
ZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgpAQCAtNzksNyAr
ODIsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogI2luY2x1ZGUgPGtpby9nbG9iYWwu
aD4KICNpbmNsdWRlIDxrZGVidWcuaD4KICNpbmNsdWRlIDxrbG9jYWxlLmg+Ci0jaW5jbHVkZSA8
a2NoYXJzZXRzLmg+CiAjaW5jbHVkZSA8a2dsb2JhbHNldHRpbmdzLmg+CiAjaWYgIWRlZmluZWQo
UVRfTk9fRFJBR0FORERST1ApCiAjaW5jbHVkZSA8a211bHRpcGxlZHJhZy5oPgpAQCAtMTI0LDkg
KzEyNiw5IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUGFydFN0eWxlU2hlZXRMb2Fk
ZXIgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50CiAgICAgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgUGFydFN0eWxlU2hlZXRMb2FkZXIoS0hUTUxQYXJ0ICpwYXJ0LCBET006OkRPTVN0cmluZyB1
cmwsIERvY0xvYWRlciogZGwpCisgICAgICAgIFBhcnRTdHlsZVNoZWV0TG9hZGVyKEZyYW1lICpm
cmFtZSwgRE9NOjpET01TdHJpbmcgdXJsLCBEb2NMb2FkZXIqIGRsKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX3BhcnQgPSBwYXJ0OworICAgICAgICAgICAgbV9mcmFtZSA9IGZyYW1lOwogICAg
ICAgICAgICAgbV9jYWNoZWRTaGVldCA9IENhY2hlOjpyZXF1ZXN0U3R5bGVTaGVldChkbCwgdXJs
ICk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKIAkJbV9jYWNoZWRTaGVldC0+cmVm
KCB0aGlzICk7CkBAIC0xMzcsMTIgKzEzOSwxMiBAQCBuYW1lc3BhY2Uga2h0bWwgewogICAgICAg
ICB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiwgY29uc3QgRE9NOjpET01TdHJpbmcgJnNoZWV0KQogICAgICAgICB7Ci0gICAgICAgICAg
aWYgKCBtX3BhcnQgKQotICAgICAgICAgICAgbV9wYXJ0LT5zZXRVc2VyU3R5bGVTaGVldCggc2hl
ZXQucXN0cmluZygpICk7CisgICAgICAgICAgaWYgKCBtX2ZyYW1lICkKKyAgICAgICAgICAgIG1f
ZnJhbWUtPnNldFVzZXJTdHlsZVNoZWV0KCBzaGVldC5xc3RyaW5nKCkgKTsKIAogICAgICAgICAg
ICAgZGVsZXRlIHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAgUUd1YXJkZWRQdHI8S0hUTUxQYXJ0
PiBtX3BhcnQ7CisgICAgICAgIFFHdWFyZGVkUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAgICAgICBr
aHRtbDo6Q2FjaGVkQ1NTU3R5bGVTaGVldCAqbV9jYWNoZWRTaGVldDsKICAgICB9OwogfQpAQCAt
MTU5LDEyICsxNjEsMTIgQEAgRnJhbWVMaXN0OjpJdGVyYXRvciBGcmFtZUxpc3Q6OmZpbmQoIGNv
bgogICAgIHJldHVybiBpdDsKIH0KIAotS0hUTUxQYXJ0OjpLSFRNTFBhcnQoUVdpZGdldCAqcGFy
ZW50V2lkZ2V0LCBjb25zdCBjaGFyICp3aWRnZXRuYW1lLCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUpCitGcmFtZTo6RnJhbWUoUVdpZGdldCAqcGFyZW50V2lkZ2V0LCBjb25zdCBj
aGFyICp3aWRnZXRuYW1lLCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCiAgICAg
OiBLUGFydHM6OlJlYWRPbmx5UGFydChwYXJlbnQsIG5hbWUpLCBkKDApCiB7CiB9CiAKLXZvaWQg
S0hUTUxQYXJ0Ojppbml0KEtIVE1MVmlldyAqdmlldykKK3ZvaWQgRnJhbWU6OmluaXQoS0hUTUxW
aWV3ICp2aWV3KQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKICAgUXVhbGlmaWVkTmFtZTo6
aW5pdCgpOwpAQCAtMTgzLDcgKzE4NSw2IEBAIHZvaWQgS0hUTUxQYXJ0Ojppbml0KEtIVE1MVmll
dyAqdmlldykKICAgc2V0V2lkZ2V0KCBkLT5tX3ZpZXcgKTsKICAgCiAgIGQtPm1fZXh0ZW5zaW9u
ID0gbmV3IEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb24oIHRoaXMgKTsKLSAgZC0+bV9ob3N0RXh0
ZW5zaW9uID0gbmV3IEtIVE1MUGFydEJyb3dzZXJIb3N0RXh0ZW5zaW9uKCB0aGlzICk7CiAKICAg
ZC0+bV9iU2VjdXJpdHlJblF1ZXN0aW9uID0gZmFsc2U7CiAgIGQtPm1fYk1vdXNlUHJlc3NlZCA9
IGZhbHNlOwpAQCAtMjA3LDcgKzIwOCw3IEBAIHZvaWQgS0hUTUxQYXJ0Ojppbml0KEtIVE1MVmll
dyAqdmlldykKICAgY29ubmVjdCgmZC0+bV9saWZlU3VwcG9ydFRpbWVyLCBTSUdOQUwodGltZW91
dCgpKSwgdGhpcywgU0xPVChzbG90RW5kTGlmZVN1cHBvcnQoKSkpOwogfQogCi1LSFRNTFBhcnQ6
On5LSFRNTFBhcnQoKQorRnJhbWU6On5GcmFtZSgpCiB7CiAgIHN0b3BBdXRvU2Nyb2xsKCk7CiAg
IGNhbmNlbFJlZGlyZWN0aW9uKCk7CkBAIC0yMjgsMTcgKzIyOSwxNSBAQCBLSFRNTFBhcnQ6On5L
SFRNTFBhcnQoKQogICB7CiAgICAgZC0+bV92aWV3LT5oaWRlKCk7CiAgICAgZC0+bV92aWV3LT52
aWV3cG9ydCgpLT5oaWRlKCk7Ci0gICAgZC0+bV92aWV3LT5tX3BhcnQgPSAwOworICAgIGQtPm1f
dmlldy0+bV9mcmFtZSA9IDA7CiAgIH0KICAgCi0gIGRlbGV0ZSBkLT5tX2hvc3RFeHRlbnNpb247
Ci0KICAgZGVsZXRlIGQ7IGQgPSAwOwogfQogCi1ib29sIEtIVE1MUGFydDo6cmVzdG9yZVVSTCgg
Y29uc3QgS1VSTCAmdXJsICkKK2Jvb2wgRnJhbWU6OnJlc3RvcmVVUkwoIGNvbnN0IEtVUkwgJnVy
bCApCiB7Ci0gIGtkRGVidWcoIDYwNTAgKSA8PCAiS0hUTUxQYXJ0OjpyZXN0b3JlVVJMICIgPDwg
dXJsLnVybCgpIDw8IGVuZGw7CisgIGtkRGVidWcoIDYwNTAgKSA8PCAiRnJhbWU6OnJlc3RvcmVV
UkwgIiA8PCB1cmwudXJsKCkgPDwgZW5kbDsKIAogICBjYW5jZWxSZWRpcmVjdGlvbigpOwogCkBA
IC0yNjksOSArMjY4LDkgQEAgYm9vbCBLSFRNTFBhcnQ6OnJlc3RvcmVVUkwoIGNvbnN0IEtVUkwg
JgogfQogCiAKLWJvb2wgS0hUTUxQYXJ0OjpkaWRPcGVuVVJMKGNvbnN0IEtVUkwgJnVybCkKK2Jv
b2wgRnJhbWU6OmRpZE9wZW5VUkwoY29uc3QgS1VSTCAmdXJsKQogewotICBrZERlYnVnKCA2MDUw
ICkgPDwgIktIVE1MUGFydCgiIDw8IHRoaXMgPDwgIik6Om9wZW5VUkwgIiA8PCB1cmwudXJsKCkg
PDwgZW5kbDsKKyAga2REZWJ1ZyggNjA1MCApIDw8ICJGcmFtZSgiIDw8IHRoaXMgPDwgIik6Om9w
ZW5VUkwgIiA8PCB1cmwudXJsKCkgPDwgZW5kbDsKIAogICBpZiAoZC0+bV9zY2hlZHVsZWRSZWRp
cmVjdGlvbiA9PSBsb2NhdGlvbkNoYW5nZVNjaGVkdWxlZER1cmluZ0xvYWQpIHsKICAgICAvLyBX
ZSdyZSBhYm91dCB0byBnZXQgYSByZWRpcmVjdCB0aGF0IGhhcHBlbmVkIGJlZm9yZSB0aGUgZG9j
dW1lbnQgd2FzCkBAIC0yODQsNyArMjgzLDcgQEAgYm9vbCBLSFRNTFBhcnQ6OmRpZE9wZW5VUkwo
Y29uc3QgS1VSTCAmdQogICAKICAgLy8gY2xlYXIgbGFzdCBlZGl0IGNvbW1hbmQKICAgZC0+bV9s
YXN0RWRpdENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0cigpOwotICBLV1EodGhpcyktPmNsZWFyVW5k
b1JlZG9PcGVyYXRpb25zKCk7CisgIE1hYyh0aGlzKS0+Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMo
KTsKICAgCiAKICAgS1BhcnRzOjpVUkxBcmdzIGFyZ3MoIGQtPm1fZXh0ZW5zaW9uLT51cmxBcmdz
KCkgKTsKQEAgLTM0Niw3ICszNDUsNyBAQCBib29sIEtIVE1MUGFydDo6ZGlkT3BlblVSTChjb25z
dCBLVVJMICZ1CiAgIC8vIGNvcHkgdG8gbV93b3JraW5nVVJMIGFmdGVyIGZpeGluZyBtX3VybCBh
Ym92ZQogICBkLT5tX3dvcmtpbmdVUkwgPSBtX3VybDsKIAotICBrZERlYnVnKCA2MDUwICkgPDwg
IktIVE1MUGFydDo6b3BlblVSTCBub3cgKGJlZm9yZSBzdGFydGVkKSBtX3VybCA9ICIgPDwgbV91
cmwudXJsKCkgPDwgZW5kbDsKKyAga2REZWJ1ZyggNjA1MCApIDw8ICJGcmFtZTo6b3BlblVSTCBu
b3cgKGJlZm9yZSBzdGFydGVkKSBtX3VybCA9ICIgPDwgbV91cmwudXJsKCkgPDwgZW5kbDsKIAog
ICBjb25uZWN0KCBkLT5tX2pvYiwgU0lHTkFMKCBzcGVlZCggS0lPOjpKb2IqLCB1bnNpZ25lZCBs
b25nICkgKSwKICAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdEpvYlNwZWVkKCBLSU86OkpvYios
IHVuc2lnbmVkIGxvbmcgKSApICk7CkBAIC0zNTksNyArMzU4LDcgQEAgYm9vbCBLSFRNTFBhcnQ6
OmRpZE9wZW5VUkwoY29uc3QgS1VSTCAmdQogICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLSFRN
TFBhcnQ6OmRpZEV4cGxpY2l0T3BlbigpCit2b2lkIEZyYW1lOjpkaWRFeHBsaWNpdE9wZW4oKQog
ewogICBkLT5tX2JDb21wbGV0ZSA9IGZhbHNlOwogICBkLT5tX2JMb2FkRXZlbnRFbWl0dGVkID0g
ZmFsc2U7CkBAIC0zNzEsNyArMzcwLDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmRpZEV4cGxpY2l0T3Bl
bigpCiAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7IAogfQogCi12b2lkIEtIVE1MUGFydDo6c3RvcExv
YWRpbmcoYm9vbCBzZW5kVW5sb2FkKQordm9pZCBGcmFtZTo6c3RvcExvYWRpbmcoYm9vbCBzZW5k
VW5sb2FkKQogewogICBpZiAoZC0+bV9kb2MgJiYgZC0+bV9kb2MtPnRva2VuaXplcigpKQogICAg
IGQtPm1fZG9jLT50b2tlbml6ZXIoKS0+c3RvcFBhcnNpbmcoKTsKQEAgLTQyNCwxMiArNDIzLDEy
IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmwKICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCApIHsKICAgICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpwYXJ0ID0gKCpp
dCkubV9wYXJ0OwogICAgICAgaWYgKHBhcnQpIHsKLSAgICAgICAgICBLSFRNTFBhcnQgKmtodG1s
X3BhcnQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnQgKj4ocGFydCk7CisgICAgICAgICAgRnJhbWUg
KmZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4ocGFydCk7CiAKLSAgICAgICAgICBpZiAoa2h0
bWxfcGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQotICAgICAgICAgICAgICBraHRtbF9wYXJ0
LT5zdG9wTG9hZGluZyhzZW5kVW5sb2FkKTsKKyAgICAgICAgICBpZiAoZnJhbWUtPmluaGVyaXRz
KCJGcmFtZSIpKQorICAgICAgICAgICAgICBmcmFtZS0+c3RvcExvYWRpbmcoc2VuZFVubG9hZCk7
CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwYXJ0LT5jbG9zZVVSTCgpOworICAgICAg
ICAgICAgICBmcmFtZS0+Y2xvc2VVUkwoKTsKICAgICAgIH0KICAgfQogCkBAIC00MzksMjQgKzQz
OCwyNCBAQCB2b2lkIEtIVE1MUGFydDo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sCiAgIGNhbmNl
bFJlZGlyZWN0aW9uKCk7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpjbG9zZVVSTCgpCitib29sIEZy
YW1lOjpjbG9zZVVSTCgpCiB7ICAgIAogICBzdG9wTG9hZGluZyh0cnVlKTsKIAogICByZXR1cm4g
dHJ1ZTsKIH0KIAotS1BhcnRzOjpCcm93c2VyRXh0ZW5zaW9uICpLSFRNTFBhcnQ6OmJyb3dzZXJF
eHRlbnNpb24oKSBjb25zdAorS1BhcnRzOjpCcm93c2VyRXh0ZW5zaW9uICpGcmFtZTo6YnJvd3Nl
ckV4dGVuc2lvbigpIGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX2V4dGVuc2lvbjsKIH0KIAotS0hU
TUxWaWV3ICpLSFRNTFBhcnQ6OnZpZXcoKSBjb25zdAorS0hUTUxWaWV3ICpGcmFtZTo6dmlldygp
IGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX3ZpZXc7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZXRK
U2NyaXB0RW5hYmxlZCggYm9vbCBlbmFibGUgKQordm9pZCBGcmFtZTo6c2V0SlNjcmlwdEVuYWJs
ZWQoIGJvb2wgZW5hYmxlICkKIHsKICAgaWYgKCAhZW5hYmxlICYmIGpTY3JpcHRFbmFibGVkKCkg
JiYgZC0+bV9qc2NyaXB0ICkgewogICAgIGQtPm1fanNjcmlwdC0+Y2xlYXIoKTsKQEAgLTQ2NSwy
NCArNDY0LDI0IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXRKU2NyaXB0RW5hYmxlZCggYm9vbCAKICAg
ZC0+bV9iSlNjcmlwdE92ZXJyaWRlID0gdHJ1ZTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OmpTY3Jp
cHRFbmFibGVkKCkgY29uc3QKK2Jvb2wgRnJhbWU6OmpTY3JpcHRFbmFibGVkKCkgY29uc3QKIHsK
ICAgaWYgKCBkLT5tX2JKU2NyaXB0T3ZlcnJpZGUgKQogICAgICAgcmV0dXJuIGQtPm1fYkpTY3Jp
cHRGb3JjZTsKICAgcmV0dXJuIGQtPm1fYkpTY3JpcHRFbmFibGVkOwogfQogCi12b2lkIEtIVE1M
UGFydDo6c2V0TWV0YVJlZnJlc2hFbmFibGVkKCBib29sIGVuYWJsZSApCit2b2lkIEZyYW1lOjpz
ZXRNZXRhUmVmcmVzaEVuYWJsZWQoIGJvb2wgZW5hYmxlICkKIHsKICAgZC0+bV9tZXRhUmVmcmVz
aEVuYWJsZWQgPSBlbmFibGU7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjptZXRhUmVmcmVzaEVuYWJs
ZWQoKSBjb25zdAorYm9vbCBGcmFtZTo6bWV0YVJlZnJlc2hFbmFibGVkKCkgY29uc3QKIHsKICAg
cmV0dXJuIGQtPm1fbWV0YVJlZnJlc2hFbmFibGVkOwogfQogCi1LSlNQcm94eUltcGwgKktIVE1M
UGFydDo6alNjcmlwdCgpCitLSlNQcm94eUltcGwgKkZyYW1lOjpqU2NyaXB0KCkKIHsKICAgICBp
ZiAoIWpTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDkzLDcgKzQ5Miw3
IEBAIEtKU1Byb3h5SW1wbCAqS0hUTUxQYXJ0OjpqU2NyaXB0KCkKICAgICByZXR1cm4gZC0+bV9q
c2NyaXB0OwogfQogCi12b2lkIEtIVE1MUGFydDo6cmVwbGFjZUNvbnRlbnRzV2l0aFNjcmlwdFJl
c3VsdCggY29uc3QgS1VSTCAmdXJsICkKK3ZvaWQgRnJhbWU6OnJlcGxhY2VDb250ZW50c1dpdGhT
Y3JpcHRSZXN1bHQoIGNvbnN0IEtVUkwgJnVybCApCiB7CiAgIFFTdHJpbmcgc2NyaXB0ID0gS1VS
TDo6ZGVjb2RlX3N0cmluZyh1cmwudXJsKCkubWlkKHN0cmxlbigiamF2YXNjcmlwdDoiKSkpOwog
ICBRVmFyaWFudCByZXQgPSBleGVjdXRlU2NyaXB0KHNjcmlwdCk7CkBAIC01MDUsMTIgKzUwNCwx
MiBAQCB2b2lkIEtIVE1MUGFydDo6cmVwbGFjZUNvbnRlbnRzV2l0aFNjcmlwCiAgIH0KIH0KIAot
UVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBjb25zdCBRU3RyaW5nICZzY3JpcHQs
IGJvb2wgZm9yY2VVc2VyR2VzdHVyZSApCitRVmFyaWFudCBGcmFtZTo6ZXhlY3V0ZVNjcmlwdCgg
Y29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUgKQogewogICAgIHJl
dHVybiBleGVjdXRlU2NyaXB0KCAwLCBzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUgKTsKIH0KIAot
UVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBET006Ok5vZGVJbXBsICpuLCBjb25z
dCBRU3RyaW5nICZzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSApCitRVmFyaWFudCBGcmFt
ZTo6ZXhlY3V0ZVNjcmlwdCggRE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0
LCBib29sIGZvcmNlVXNlckdlc3R1cmUgKQogewogICBLSlNQcm94eUltcGwgKnByb3h5ID0galNj
cmlwdCgpOwogCkBAIC01MjksOSArNTI4LDkgQEAgUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRl
U2NyaXB0KCBET006OgogICByZXR1cm4gcmV0OwogfQogCi1ib29sIEtIVE1MUGFydDo6c2NoZWR1
bGVTY3JpcHQoRE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQorYm9vbCBG
cmFtZTo6c2NoZWR1bGVTY3JpcHQoRE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgUVN0cmluZyYgc2Ny
aXB0KQogewotICAgIC8va2REZWJ1Zyg2MDUwKSA8PCAiS0hUTUxQYXJ0OjpzY2hlZHVsZVNjcmlw
dCAiPDwgc2NyaXB0IDw8IGVuZGw7CisgICAgLy9rZERlYnVnKDYwNTApIDw8ICJGcmFtZTo6c2No
ZWR1bGVTY3JpcHQgIjw8IHNjcmlwdCA8PCBlbmRsOwogCiAgICAgZC0+c2NoZWR1bGVkU2NyaXB0
ID0gc2NyaXB0OwogICAgIGQtPnNjaGVkdWxlZFNjcmlwdE5vZGUgPSBuOwpAQCAtNTM5LDcgKzUz
OCw3IEBAIGJvb2wgS0hUTUxQYXJ0OjpzY2hlZHVsZVNjcmlwdChET006Ok5vZGUKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NoZWR1bGVkU2NyaXB0
KCkKK1FWYXJpYW50IEZyYW1lOjpleGVjdXRlU2NoZWR1bGVkU2NyaXB0KCkKIHsKICAgaWYoIGQt
PnNjaGVkdWxlZFNjcmlwdC5pc0VtcHR5KCkgKQogICAgIHJldHVybiBRVmFyaWFudCgpOwpAQCAt
NTUzLDEzICs1NTIsMTMgQEAgUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NoZWR1bGVkU2Ny
aQogICByZXR1cm4gcmV0OwogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0SmF2YUVuYWJsZWQoIGJv
b2wgZW5hYmxlICkKK3ZvaWQgRnJhbWU6OnNldEphdmFFbmFibGVkKCBib29sIGVuYWJsZSApCiB7
CiAgIGQtPm1fYkphdmFGb3JjZSA9IGVuYWJsZTsKICAgZC0+bV9iSmF2YU92ZXJyaWRlID0gdHJ1
ZTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OmphdmFFbmFibGVkKCkgY29uc3QKK2Jvb2wgRnJhbWU6
OmphdmFFbmFibGVkKCkgY29uc3QKIHsKICNpZm5kZWYgUV9XU19RV1MKICAgaWYoIGQtPm1fYkph
dmFPdmVycmlkZSApCkBAIC01NzAsMzQgKzU2OSwxMyBAQCBib29sIEtIVE1MUGFydDo6amF2YUVu
YWJsZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKLUtKYXZhQXBwbGV0Q29udGV4dCAqS0hUTUxQYXJ0
OjpqYXZhQ29udGV4dCgpCi17Ci0jaWZuZGVmIFFfV1NfUVdTCi0gIHJldHVybiBkLT5tX2phdmFD
b250ZXh0OwotI2Vsc2UKLSAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotS0phdmFBcHBsZXRDb250
ZXh0ICpLSFRNTFBhcnQ6OmNyZWF0ZUphdmFDb250ZXh0KCkKLXsKLSNpZm5kZWYgUV9XU19RV1MK
LSAgaWYgKCFkLT5tX2phdmFDb250ZXh0KQotICAgICAgZC0+bV9qYXZhQ29udGV4dCA9IG5ldyBL
SmF2YUFwcGxldENvbnRleHQodGhpcyk7Ci0KLSAgcmV0dXJuIGQtPm1famF2YUNvbnRleHQ7Ci0j
ZWxzZQotICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIEtIVE1MUGFydDo6c2V0UGx1Z2lu
c0VuYWJsZWQoIGJvb2wgZW5hYmxlICkKK3ZvaWQgRnJhbWU6OnNldFBsdWdpbnNFbmFibGVkKCBi
b29sIGVuYWJsZSApCiB7CiAgIGQtPm1fYlBsdWdpbnNGb3JjZSA9IGVuYWJsZTsKICAgZC0+bV9i
UGx1Z2luc092ZXJyaWRlID0gdHJ1ZTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnBsdWdpbnNFbmFi
bGVkKCkgY29uc3QKK2Jvb2wgRnJhbWU6OnBsdWdpbnNFbmFibGVkKCkgY29uc3QKIHsKICAgaWYg
KCBkLT5tX2JQbHVnaW5zT3ZlcnJpZGUgKQogICAgICAgcmV0dXJuIGQtPm1fYlBsdWdpbnNGb3Jj
ZTsKQEAgLTYwNSwxMyArNTgzLDEzIEBAIGJvb2wgS0hUTUxQYXJ0OjpwbHVnaW5zRW5hYmxlZCgp
IGNvbnN0CiB9CiAKIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3REZWJ1Z0RPTVRyZWUoKQordm9pZCBG
cmFtZTo6c2xvdERlYnVnRE9NVHJlZSgpCiB7CiAgIGlmICggZC0+bV9kb2MgJiYgZC0+bV9kb2Mt
PmZpcnN0Q2hpbGQoKSApCiAgICAgcURlYnVnKCIlcyIsIGNyZWF0ZU1hcmt1cChkLT5tX2RvYy0+
Zmlyc3RDaGlsZCgpKS5sYXRpbjEoKSk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzbG90RGVidWdS
ZW5kZXJUcmVlKCkKK3ZvaWQgRnJhbWU6OnNsb3REZWJ1Z1JlbmRlclRyZWUoKQogewogI2lmbmRl
ZiBOREVCVUcKICAgaWYgKCBkLT5tX2RvYyApCkBAIC02MTksNyArNTk3LDcgQEAgdm9pZCBLSFRN
TFBhcnQ6OnNsb3REZWJ1Z1JlbmRlclRyZWUoKQogI2VuZGlmCiB9CiAKLXZvaWQgS0hUTUxQYXJ0
OjpzZXRBdXRvbG9hZEltYWdlcyggYm9vbCBlbmFibGUgKQordm9pZCBGcmFtZTo6c2V0QXV0b2xv
YWRJbWFnZXMoIGJvb2wgZW5hYmxlICkKIHsKICAgaWYgKCBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+
ZG9jTG9hZGVyKCktPmF1dG9sb2FkSW1hZ2VzKCkgPT0gZW5hYmxlICkKICAgICByZXR1cm47CkBA
IC02MjksNyArNjA3LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldEF1dG9sb2FkSW1hZ2VzKCBib29s
IAogCiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjphdXRvbG9hZEltYWdlcygpIGNvbnN0Citib29sIEZy
YW1lOjphdXRvbG9hZEltYWdlcygpIGNvbnN0CiB7CiAgIGlmICggZC0+bV9kb2MgKQogICAgIHJl
dHVybiBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPmF1dG9sb2FkSW1hZ2VzKCk7CkBAIC02MzcsNyAr
NjE1LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OmF1dG9sb2FkSW1hZ2VzKCkgY29uc3QKICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpjbGVhcigpCit2b2lkIEZyYW1lOjpjbGVhcigp
CiB7CiAgIGlmICggZC0+bV9iQ2xlYXJlZCApCiAgICAgcmV0dXJuOwpAQCAtNjg2LDcgKzY2NCw3
IEBAIHZvaWQgS0hUTUxQYXJ0OjpjbGVhcigpCiAgICAgQ29uc3RGcmFtZUl0IGVuZCA9IGQtPm1f
b2JqZWN0cy5lbmQoKTsKICAgICBmb3IoOyBpdCAhPSBlbmQ7ICsraXQgKQogICAgIHsKLSAgICAg
IGlmICggKCppdCkubV9wYXJ0ICkKKyAgICAgIGlmICggKCppdCkubV9mcmFtZSApCiAgICAgICB7
CiAgICAgICAgICgqaXQpLm1fcGFydC0+ZGVyZWYoKTsKICAgICAgIH0KQEAgLTY5NCwxMSArNjcy
LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OmNsZWFyKCkKICAgfQogICBkLT5tX29iamVjdHMuY2xlYXIo
KTsKIAotI2lmbmRlZiBRX1dTX1FXUwotICBkZWxldGUgZC0+bV9qYXZhQ29udGV4dDsKLSAgZC0+
bV9qYXZhQ29udGV4dCA9IDA7Ci0jZW5kaWYKLQogICBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9u
ID0gbm9SZWRpcmVjdGlvblNjaGVkdWxlZDsKICAgZC0+bV9kZWxheVJlZGlyZWN0ID0gMDsKICAg
ZC0+bV9yZWRpcmVjdFVSTCA9IFFTdHJpbmc6Om51bGw7CkBAIC03MjQsMTkgKzY5NywxOSBAQCB2
b2lkIEtIVE1MUGFydDo6Y2xlYXIoKQogI2VuZGlmCiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpvcGVu
RmlsZSgpCitib29sIEZyYW1lOjpvcGVuRmlsZSgpCiB7CiAgIHJldHVybiB0cnVlOwogfQogCi1E
T006OkRvY3VtZW50SW1wbCAqS0hUTUxQYXJ0Ojp4bWxEb2NJbXBsKCkgY29uc3QKK0RPTTo6RG9j
dW1lbnRJbXBsICpGcmFtZTo6eG1sRG9jSW1wbCgpIGNvbnN0CiB7CiAgICAgaWYgKCBkICkKICAg
ICAgICAgcmV0dXJuIGQtPm1fZG9jOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEtIVE1MUGFy
dDo6cmVwbGFjZURvY0ltcGwoRG9jdW1lbnRJbXBsKiBuZXdEb2MpCit2b2lkIEZyYW1lOjpyZXBs
YWNlRG9jSW1wbChEb2N1bWVudEltcGwqIG5ld0RvYykKIHsKICAgICBpZiAoZCkgewogICAgICAg
ICBpZiAoZC0+bV9kb2MpIHsKQEAgLTc1MSwxMiArNzI0LDEyIEBAIHZvaWQgS0hUTUxQYXJ0Ojpy
ZXBsYWNlRG9jSW1wbChEb2N1bWVudEkKICAgICB9CiB9CiAKLS8qYm9vbCBLSFRNTFBhcnQ6Omlz
U1NMSW5Vc2UoKSBjb25zdAorLypib29sIEZyYW1lOjppc1NTTEluVXNlKCkgY29uc3QKIHsKICAg
cmV0dXJuIGQtPm1fc3NsX2luX3VzZTsKIH0qLwogCi12b2lkIEtIVE1MUGFydDo6cmVjZWl2ZWRG
aXJzdERhdGEoKQordm9pZCBGcmFtZTo6cmVjZWl2ZWRGaXJzdERhdGEoKQogewogICAgIC8vIExl
YXZlIGluZGVudGVkIG9uZSBleHRyYSBmb3IgZWFzaWVyIG1lcmdpbmcuCiAgICAgCkBAIC04MjAs
MTEgKzc5MywxMSBAQCB2b2lkIEtIVE1MUGFydDo6cmVjZWl2ZWRGaXJzdERhdGEoKQogCiAgICAg
Ly8gU3VwcG9ydCBmb3IgaHR0cCBsYXN0LW1vZGlmaWVkCiAgICAgZC0+bV9sYXN0TW9kaWZpZWQg
PSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgibW9kaWZpZWQiKTsKLSAgICAvL2tkRGVidWcoKSA8
PCAiS0hUTUxQYXJ0OjpzbG90RGF0YSBtZXRhZGF0YSBtb2RpZmllZDogIiA8PCBkLT5tX2xhc3RN
b2RpZmllZCA8PCBlbmRsOworICAgIC8va2REZWJ1ZygpIDw8ICJGcmFtZTo6c2xvdERhdGEgbWV0
YWRhdGEgbW9kaWZpZWQ6ICIgPDwgZC0+bV9sYXN0TW9kaWZpZWQgPDwgZW5kbDsKIH0KIAogCi12
b2lkIEtIVE1MUGFydDo6c2xvdEZpbmlzaGVkKCBLSU86OkpvYiAqIGpvYiApCit2b2lkIEZyYW1l
OjpzbG90RmluaXNoZWQoIEtJTzo6Sm9iICogam9iICkKIHsKICAgaWYgKGpvYi0+ZXJyb3IoKSkK
ICAgewpAQCAtODQxLDcgKzgxNCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90RmluaXNoZWQoIEtJ
Tzo6Sm9iICoKICAgICAgIGVuZCgpOyAvL3dpbGwgZW1pdCBjb21wbGV0ZWQoKQogfQogCi12b2lk
IEtIVE1MUGFydDo6Y2hpbGRCZWdpbigpCit2b2lkIEZyYW1lOjpjaGlsZEJlZ2luKCkKIHsKICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgd2hlbiB0aGUgY2hpbGQgaXMgY3JlYXRlZCBzbyBhcyB0
byBhdm9pZCB0aGUgYm9ndXMgc3RhdGUgb2YgdGhlIHBhcmVudCdzCiAgICAgLy8gY2hpbGQtPm1f
YkNvbXBsZXRlZCBiZWluZyBmYWxzZSBidXQgdGhlIGNoaWxkJ3MgbV9iQ29tcGxldGUgYmVpbmcg
dHJ1ZS4gIElmIHRoZSBjaGlsZCBnZXRzCkBAIC04NTEsMTggKzgyNCwxOCBAQCB2b2lkIEtIVE1M
UGFydDo6Y2hpbGRCZWdpbigpCiAgICAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsKIH0KIAotdm9p
ZCBLSFRNTFBhcnQ6OmJlZ2luKCBjb25zdCBLVVJMICZ1cmwsIGludCB4T2Zmc2V0LCBpbnQgeU9m
ZnNldCApCit2b2lkIEZyYW1lOjpiZWdpbiggY29uc3QgS1VSTCAmdXJsLCBpbnQgeE9mZnNldCwg
aW50IHlPZmZzZXQgKQogewogICAvLyBJZiB3ZSBhcmVuJ3QgbG9hZGluZyBhbiBhY3R1YWwgVVJM
LCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgIC8vIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBh
biBlbXB0eSBkb2N1bWVudC4gY3JlYXRlRW1wdHlEb2N1bWVudCB3aWxsCiAgIC8vIGRvIHRoYXQg
aWYgd2UgZG9uJ3QgaGF2ZSBhIGRvY3VtZW50IGFscmVhZHkuCiAgIGlmIChkLT5tX3dvcmtpbmdV
UkwuaXNFbXB0eSgpKSB7Ci0gICAgS1dRKHRoaXMpLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7Cisg
ICAgTWFjKHRoaXMpLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7CiAgIH0KIAogICBjbGVhcigpOwog
Ci0gIEtXUSh0aGlzKS0+cGFydENsZWFyZWRJbkJlZ2luKCk7CisgIE1hYyh0aGlzKS0+cGFydENs
ZWFyZWRJbkJlZ2luKCk7CiAKICAgLy8gT25seSBkbyB0aGlzIGFmdGVyIGNsZWFyaW5nIHRoZSBw
YXJ0LCBzbyB0aGF0IEphdmFTY3JpcHQgY2FuCiAgIC8vIGNsZWFuIHVwIHByb3Blcmx5IGlmIGl0
IHdhcyBvbiBmb3IgdGhlIGxhc3QgbG9hZC4KQEAgLTkwNiw3ICs4NzksNyBAQCB2b2lkIEtIVE1M
UGFydDo6YmVnaW4oIGNvbnN0IEtVUkwgJnVybCwgCiAgICAgZC0+bV9kb2MtPnNldERlY29kZXIo
ZC0+bV9kZWNvZGVyLmdldCgpKTsKICAgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5zZXRTaG93QW5p
bWF0aW9ucyggZC0+bV9zZXR0aW5ncy0+c2hvd0FuaW1hdGlvbnMoKSApOwogCi0gIEtXUSh0aGlz
KS0+dXBkYXRlUG9saWN5QmFzZVVSTCgpOworICBNYWModGhpcyktPnVwZGF0ZVBvbGljeUJhc2VV
UkwoKTsKIAogICBzZXRBdXRvbG9hZEltYWdlcyggZC0+bV9zZXR0aW5ncy0+YXV0b0xvYWRJbWFn
ZXMoKSApOwogICBRU3RyaW5nIHVzZXJTdHlsZVNoZWV0ID0gZC0+bV9zZXR0aW5ncy0+dXNlclN0
eWxlU2hlZXQoKTsKQEAgLTkxNCw3ICs4ODcsNyBAQCB2b2lkIEtIVE1MUGFydDo6YmVnaW4oIGNv
bnN0IEtVUkwgJnVybCwgCiAgIGlmICggIXVzZXJTdHlsZVNoZWV0LmlzRW1wdHkoKSApCiAgICAg
c2V0VXNlclN0eWxlU2hlZXQoIEtVUkwoIHVzZXJTdHlsZVNoZWV0ICkgKTsKIAotICBLV1EodGhp
cyktPnJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CisgIE1hYyh0aGlzKS0+cmVzdG9yZURvY3VtZW50
U3RhdGUoKTsKIAogICBkLT5tX2RvYy0+aW1wbGljaXRPcGVuKCk7CiAgIC8vIGNsZWFyIHdpZGdl
dApAQCAtOTIzLDcgKzg5Niw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpiZWdpbiggY29uc3QgS1VSTCAm
dXJsLCAKICAgY29ubmVjdChkLT5tX2RvYyxTSUdOQUwoZmluaXNoZWRQYXJzaW5nKCkpLHRoaXMs
U0xPVChzbG90RmluaXNoZWRQYXJzaW5nKCkpKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OndyaXRl
KCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4gKQordm9pZCBGcmFtZTo6d3JpdGUoIGNvbnN0IGNo
YXIgKnN0ciwgaW50IGxlbiApCiB7CiAgICAgaWYgKCAhZC0+bV9kZWNvZGVyICkgewogICAgICAg
ICBkLT5tX2RlY29kZXIgPSBuZXcgRGVjb2RlcjsKQEAgLTk2MCw3ICs5MzMsNyBAQCB2b2lkIEtI
VE1MUGFydDo6d3JpdGUoIGNvbnN0IGNoYXIgKnN0ciwgCiAgICAgICB0LT53cml0ZSggZGVjb2Rl
ZCwgdHJ1ZSApOwogfQogCi12b2lkIEtIVE1MUGFydDo6d3JpdGUoIGNvbnN0IFFTdHJpbmcgJnN0
ciApCit2b2lkIEZyYW1lOjp3cml0ZSggY29uc3QgUVN0cmluZyAmc3RyICkKIHsKICAgaWYgKCBz
dHIuaXNOdWxsKCkgKQogICAgIHJldHVybjsKQEAgLTk3NSwxMyArOTQ4LDEzIEBAIHZvaWQgS0hU
TUxQYXJ0Ojp3cml0ZSggY29uc3QgUVN0cmluZyAmc3QKICAgICB0LT53cml0ZSggc3RyLCB0cnVl
ICk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjplbmQoKQordm9pZCBGcmFtZTo6ZW5kKCkKIHsKICAg
ICBkLT5tX2JMb2FkaW5nTWFpblJlc291cmNlID0gZmFsc2U7CiAgICAgZW5kSWZOb3RMb2FkaW5n
KCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjplbmRJZk5vdExvYWRpbmcoKQordm9pZCBGcmFtZTo6
ZW5kSWZOb3RMb2FkaW5nKCkKIHsKICAgICBpZiAoZC0+bV9iTG9hZGluZ01haW5SZXNvdXJjZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTk5LDcgKzk3Miw3IEBAIHZvaWQgS0hUTUxQYXJ0OjplbmRJ
Zk5vdExvYWRpbmcoKQogICAgICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCi12b2lkIEtIVE1M
UGFydDo6c3RvcCgpCit2b2lkIEZyYW1lOjpzdG9wKCkKIHsKICAgICAvLyBtYWtlIHN1cmUgbm90
aGluZydzIGxlZnQgaW4gdGhlcmUuLi4KICAgICBpZiAoZC0+bV9kb2MpIHsKQEAgLTEwMTYsNyAr
OTg5LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnN0b3AoKQogfQogCiAKLXZvaWQgS0hUTUxQYXJ0Ojpz
dG9wQW5pbWF0aW9ucygpCit2b2lkIEZyYW1lOjpzdG9wQW5pbWF0aW9ucygpCiB7CiAgIGlmICgg
ZC0+bV9kb2MgKQogICAgIGQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+c2V0U2hvd0FuaW1hdGlvbnMo
IEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25EaXNhYmxlZCApOwpAQCAtMTAyNCwxMyArOTk3LDEz
IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdG9wQW5pbWF0aW9ucygpCiAgIENvbnN0RnJhbWVJdCBpdCA9
IGQtPm1fZnJhbWVzLmJlZ2luKCk7CiAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5l
bmQoKTsKICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCApCi0gICAgaWYgKCAhKCAqaXQgKS5tX3Bh
cnQuaXNOdWxsKCkgJiYgKCAqaXQgKS5tX3BhcnQtPmluaGVyaXRzKCAiS0hUTUxQYXJ0IiApICkg
eworICAgIGlmICggISggKml0ICkubV9mcmFtZS5pc051bGwoKSAmJiAoICppdCApLm1fZnJhbWUt
PmluaGVyaXRzKCAiRnJhbWUiICkgKSB7CiAgICAgICBLUGFydHM6OlJlYWRPbmx5UGFydCogcCA9
ICggKml0ICkubV9wYXJ0OwotICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0Kj4oIHAgKS0+c3Rv
cEFuaW1hdGlvbnMoKTsKKyAgICAgIHN0YXRpY19jYXN0PEZyYW1lKj4oIHAgKS0+c3RvcEFuaW1h
dGlvbnMoKTsKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJ0Ojpnb3RvQW5jaG9yKCkKK3ZvaWQg
RnJhbWU6OmdvdG9BbmNob3IoKQogewogICAgIC8vIElmIG91ciBVUkwgaGFzIG5vIHJlZiwgdGhl
biB3ZSBoYXZlIG5vIHBsYWNlIHdlIG5lZWQgdG8ganVtcCB0by4KICAgICBpZiAoIW1fdXJsLmhh
c1JlZigpKQpAQCAtMTA0NiwxNCArMTAxOSwxNCBAQCB2b2lkIEtIVE1MUGFydDo6Z290b0FuY2hv
cigpCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6c2xvdEZpbmlzaGVkUGFyc2luZygpCit2
b2lkIEZyYW1lOjpzbG90RmluaXNoZWRQYXJzaW5nKCkKIHsKICAgZC0+bV9kb2MtPnNldFBhcnNp
bmcoZmFsc2UpOwogCiAgIGlmICghZC0+bV92aWV3KQogICAgIHJldHVybjsgLy8gV2UgYXJlIHBy
b2JhYmx5IGJlaW5nIGRlc3RydWN0ZWQuCiAKLSAgUmVmUHRyPEtIVE1MUGFydD4gcHJvdGVjdG9y
KHRoaXMpOworICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcih0aGlzKTsKICAgY2hlY2tDb21wbGV0
ZWQoKTsKIAogICBpZiAoIWQtPm1fdmlldykKQEAgLTEwNjYsMTEgKzEwMzksMTEgQEAgdm9pZCBL
SFRNTFBhcnQ6OnNsb3RGaW5pc2hlZFBhcnNpbmcoKQogICBnb3RvQW5jaG9yKCk7CiB9CiAKLXZv
aWQgS0hUTUxQYXJ0OjpzbG90TG9hZGVyUmVxdWVzdFN0YXJ0ZWQoIGtodG1sOjpEb2NMb2FkZXIq
IGRsLCBraHRtbDo6Q2FjaGVkT2JqZWN0ICpvYmogKQordm9pZCBGcmFtZTo6c2xvdExvYWRlclJl
cXVlc3RTdGFydGVkKCBraHRtbDo6RG9jTG9hZGVyKiBkbCwga2h0bWw6OkNhY2hlZE9iamVjdCAq
b2JqICkKIHsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3RMb2FkZXJSZXF1ZXN0RG9uZSgga2h0
bWw6OkRvY0xvYWRlciogZGwsIGtodG1sOjpDYWNoZWRPYmplY3QgKm9iaiApCit2b2lkIEZyYW1l
OjpzbG90TG9hZGVyUmVxdWVzdERvbmUoIGtodG1sOjpEb2NMb2FkZXIqIGRsLCBraHRtbDo6Q2Fj
aGVkT2JqZWN0ICpvYmogKQogewogICAvLyBXZSByZWFsbHkgb25seSBuZWVkIHRvIGNhbGwgY2hl
Y2tDb21wbGV0ZWQgd2hlbiBvdXIgb3duIHJlc291cmNlcyBhcmUgZG9uZSBsb2FkaW5nLgogICAv
LyBTbyB3ZSBzaG91bGQgY2hlY2sgdGhhdCBkLT5tX2RvYy0+ZG9jTG9hZGVyKCkgPT0gZGwgaGVy
ZS4KQEAgLTEwODMsOSArMTA1Niw5IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90TG9hZGVyUmVxdWVz
dERvbmUoIGsKIH0KIAogCi12b2lkIEtIVE1MUGFydDo6Y2hlY2tDb21wbGV0ZWQoKQordm9pZCBG
cmFtZTo6Y2hlY2tDb21wbGV0ZWQoKQogewotLy8gICBrZERlYnVnKCA2MDUwICkgPDwgIktIVE1M
UGFydDo6Y2hlY2tDb21wbGV0ZWQoKSBwYXJzaW5nOiAiIDw8IGQtPm1fZG9jLT5wYXJzaW5nKCkg
PDwgZW5kbDsKKy8vICAga2REZWJ1ZyggNjA1MCApIDw8ICJGcmFtZTo6Y2hlY2tDb21wbGV0ZWQo
KSBwYXJzaW5nOiAiIDw8IGQtPm1fZG9jLT5wYXJzaW5nKCkgPDwgZW5kbDsKIC8vICAga2REZWJ1
ZyggNjA1MCApIDw8ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogIiA8PCBk
LT5tX2JDb21wbGV0ZSA8PCBlbmRsOwogCiAKQEAgLTExMjMsNyArMTA5Niw3IEBAIHZvaWQgS0hU
TUxQYXJ0OjpjaGVja0NvbXBsZXRlZCgpCiAgIHsKICAgICAvLyBEbyBub3Qgc3RhcnQgcmVkaXJl
Y3Rpb24gZm9yIGZyYW1lcyBoZXJlISBUaGF0IGFjdGlvbiBpcwogICAgIC8vIGRlZmVycmVkIHVu
dGlsIHRoZSBwYXJlbnQgZW1pdHMgYSBjb21wbGV0ZWQgc2lnbmFsLgotICAgIGlmICggcGFyZW50
UGFydCgpID09IDAgKQorICAgIGlmICggcGFyZW50RnJhbWUoKSA9PSAwICkKICAgICAgIGQtPm1f
cmVkaXJlY3Rpb25UaW1lci5zdGFydCggKGludCkoMTAwMCAqIGQtPm1fZGVsYXlSZWRpcmVjdCks
IHRydWUgKTsKIAogICAgIGVtaXQgY29tcGxldGVkKCB0cnVlICk7CkBAIC0xMTQyLDcgKzExMTUs
NyBAQCB2b2lkIEtIVE1MUGFydDo6Y2hlY2tDb21wbGV0ZWQoKQogI2VuZGlmCiB9CiAKLXZvaWQg
S0hUTUxQYXJ0OjpjaGVja0VtaXRMb2FkRXZlbnQoKQordm9pZCBGcmFtZTo6Y2hlY2tFbWl0TG9h
ZEV2ZW50KCkKIHsKICAgaWYgKCBkLT5tX2JMb2FkRXZlbnRFbWl0dGVkIHx8ICFkLT5tX2RvYyB8
fCBkLT5tX2RvYy0+cGFyc2luZygpICkgcmV0dXJuOwogCkBAIC0xMTYyLDggKzExMzUsOCBAQCB2
b2lkIEtIVE1MUGFydDo6Y2hlY2tFbWl0TG9hZEV2ZW50KCkKICAgICBDb25zdEZyYW1lSXQgZW5k
ID0gZC0+bV9mcmFtZXMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCApIHsKICAg
ICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpwID0gKCppdCkubV9wYXJ0OwotICAgICAgaWYgKHAg
JiYgcC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKSB7Ci0gICAgICAgIEtIVE1MUGFydCogaHRtbEZy
YW1lID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KHApOworICAgICAgaWYgKHAgJiYgcC0+aW5o
ZXJpdHMoIkZyYW1lIikpIHsKKyAgICAgICAgRnJhbWUqIGh0bWxGcmFtZSA9IHN0YXRpY19jYXN0
PEZyYW1lICo+KHApOwogICAgICAgICBpZiAoaHRtbEZyYW1lLT5kLT5tX2RvYykKICAgICAgICAg
ICBodG1sRnJhbWUtPmQtPm1fZG9jLT5zZXREb21haW4oZG9tYWluKTsKICAgICAgIH0KQEAgLTEx
NzYsMjAgKzExNDksMjAgQEAgdm9pZCBLSFRNTFBhcnQ6OmNoZWNrRW1pdExvYWRFdmVudCgpCiAg
ICAgZC0+bV9kb2MtPmltcGxpY2l0Q2xvc2UoKTsKIH0KIAotY29uc3QgS0hUTUxTZXR0aW5ncyAq
S0hUTUxQYXJ0OjpzZXR0aW5ncygpIGNvbnN0Citjb25zdCBLSFRNTFNldHRpbmdzICpGcmFtZTo6
c2V0dGluZ3MoKSBjb25zdAogewogICByZXR1cm4gZC0+bV9zZXR0aW5nczsKIH0KIAogI2lmbmRl
ZiBLREVfTk9fQ09NUEFUCi1LVVJMIEtIVE1MUGFydDo6YmFzZVVSTCgpIGNvbnN0CitLVVJMIEZy
YW1lOjpiYXNlVVJMKCkgY29uc3QKIHsKICAgaWYgKCAhZC0+bV9kb2MgKSByZXR1cm4gS1VSTCgp
OwogCiAgIHJldHVybiBkLT5tX2RvYy0+YmFzZVVSTCgpOwogfQogCi1RU3RyaW5nIEtIVE1MUGFy
dDo6YmFzZVRhcmdldCgpIGNvbnN0CitRU3RyaW5nIEZyYW1lOjpiYXNlVGFyZ2V0KCkgY29uc3QK
IHsKICAgaWYgKCAhZC0+bV9kb2MgKSByZXR1cm4gUVN0cmluZzo6bnVsbDsKIApAQCAtMTE5Nyw3
ICsxMTcwLDcgQEAgUVN0cmluZyBLSFRNTFBhcnQ6OmJhc2VUYXJnZXQoKSBjb25zdAogfQogI2Vu
ZGlmCiAKLUtVUkwgS0hUTUxQYXJ0Ojpjb21wbGV0ZVVSTCggY29uc3QgUVN0cmluZyAmdXJsICkK
K0tVUkwgRnJhbWU6OmNvbXBsZXRlVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwgKQogewogICBpZiAo
ICFkLT5tX2RvYyApIHJldHVybiB1cmw7CiAKQEAgLTEyMDUsOSArMTE3OCw5IEBAIEtVUkwgS0hU
TUxQYXJ0Ojpjb21wbGV0ZVVSTCggY29uc3QgUVN0cmkKICAgcmV0dXJuIEtVUkwoIGQtPm1fZG9j
LT5jb21wbGV0ZVVSTCggdXJsICkgKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNjaGVkdWxlUmVk
aXJlY3Rpb24oIGRvdWJsZSBkZWxheSwgY29uc3QgUVN0cmluZyAmdXJsLCBib29sIGRvTG9ja0hp
c3RvcnkpCit2b2lkIEZyYW1lOjpzY2hlZHVsZVJlZGlyZWN0aW9uKCBkb3VibGUgZGVsYXksIGNv
bnN0IFFTdHJpbmcgJnVybCwgYm9vbCBkb0xvY2tIaXN0b3J5KQogewotICAgIGtkRGVidWcoNjA1
MCkgPDwgIktIVE1MUGFydDo6c2NoZWR1bGVSZWRpcmVjdGlvbiBkZWxheT0iIDw8IGRlbGF5IDw8
ICIgdXJsPSIgPDwgdXJsIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDUwKSA8PCAiRnJhbWU6OnNj
aGVkdWxlUmVkaXJlY3Rpb24gZGVsYXk9IiA8PCBkZWxheSA8PCAiIHVybD0iIDw8IHVybCA8PCBl
bmRsOwogICAgIGlmIChkZWxheSA8IDAgfHwgZGVsYXkgPiBJTlRfTUFYIC8gMTAwMCkKICAgICAg
IHJldHVybjsKICAgICBpZiAoIGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gPT0gbm9SZWRpcmVj
dGlvblNjaGVkdWxlZCB8fCBkZWxheSA8PSBkLT5tX2RlbGF5UmVkaXJlY3QgKQpAQCAtMTIyNSw3
ICsxMTk4LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNjaGVkdWxlUmVkaXJlY3Rpb24oIGRvdQogICAg
IH0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29uc3QgUVN0
cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZyZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9v
bCB1c2VyR2VzdHVyZSkKK3ZvaWQgRnJhbWU6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29uc3Qg
UVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZyZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCB1c2VyR2VzdHVyZSkKIHsKICAgICAvLyBIYW5kbGUgYSBsb2NhdGlvbiBjaGFuZ2Ugb2Yg
YSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBzcGVjaWFsIGNhc2UuCiAgICAgLy8gVGhpcyBt
YXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2VzIHRoZSBsb2NhdGlvbiBvZiBhbm90aGVyIGZy
YW1lLgpAQCAtMTI0OCw3ICsxMjIxLDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2UoYwogICAgICAgICBkLT5tX3JlZGlyZWN0aW9uVGltZXIuc3RhcnQoMCwgdHJ1ZSk7
CiB9CiAKLWJvb2wgS0hUTUxQYXJ0Ojppc1NjaGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVuZGluZygp
IGNvbnN0Citib29sIEZyYW1lOjppc1NjaGVkdWxlZExvY2F0aW9uQ2hhbmdlUGVuZGluZygpIGNv
bnN0CiB7CiAgICAgc3dpdGNoIChkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uKSB7CiAgICAgICAg
IGNhc2Ugbm9SZWRpcmVjdGlvblNjaGVkdWxlZDoKQEAgLTEyNjIsMTEgKzEyMzUsMTEgQEAgYm9v
bCBLSFRNTFBhcnQ6OmlzU2NoZWR1bGVkTG9jYXRpb25DaGFuZwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNjaGVkdWxlSGlzdG9yeU5hdmlnYXRpb24oIGludCBzdGVw
cyApCit2b2lkIEZyYW1lOjpzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKCBpbnQgc3RlcHMgKQog
ewogICAgIC8vIG5hdmlnYXRpb24gd2lsbCBhbHdheXMgYmUgYWxsb3dlZCBpbiB0aGUgMCBzdGVw
cyBjYXNlLCB3aGljaCBpcyBPSyBiZWNhdXNlCiAgICAgLy8gdGhhdCdzIHN1cHBvc2VkIHRvIGZv
cmNlIGEgcmVsb2FkLgotICAgIGlmICghS1dRKHRoaXMpLT5jYW5Hb0JhY2tPckZvcndhcmQoc3Rl
cHMpKSB7CisgICAgaWYgKCFNYWModGhpcyktPmNhbkdvQmFja09yRm9yd2FyZChzdGVwcykpIHsK
ICAgICAgICAgY2FuY2VsUmVkaXJlY3Rpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTEyODEsNyArMTI1NCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0
aW8KICAgICAgICAgZC0+bV9yZWRpcmVjdGlvblRpbWVyLnN0YXJ0KDAsIHRydWUpOwogfQogCi12
b2lkIEtIVE1MUGFydDo6Y2FuY2VsUmVkaXJlY3Rpb24oYm9vbCBjYW5jZWxXaXRoTG9hZEluUHJv
Z3Jlc3MpCit2b2lkIEZyYW1lOjpjYW5jZWxSZWRpcmVjdGlvbihib29sIGNhbmNlbFdpdGhMb2Fk
SW5Qcm9ncmVzcykKIHsKICAgICBpZiAoZCkgewogICAgICAgICBkLT5tX2NhbmNlbFdpdGhMb2Fk
SW5Qcm9ncmVzcyA9IGNhbmNlbFdpdGhMb2FkSW5Qcm9ncmVzczsKQEAgLTEyOTAsNyArMTI2Myw3
IEBAIHZvaWQgS0hUTUxQYXJ0OjpjYW5jZWxSZWRpcmVjdGlvbihib29sIGMKICAgICB9CiB9CiAK
LXZvaWQgS0hUTUxQYXJ0OjpjaGFuZ2VMb2NhdGlvbihjb25zdCBRU3RyaW5nICZVUkwsIGNvbnN0
IFFTdHJpbmcgJnJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5LCBib29sIHVzZXJHZXN0dXJlKQor
dm9pZCBGcmFtZTo6Y2hhbmdlTG9jYXRpb24oY29uc3QgUVN0cmluZyAmVVJMLCBjb25zdCBRU3Ry
aW5nICZyZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCB1c2VyR2VzdHVyZSkKIHsKICAg
ICBpZiAoVVJMLmZpbmQoImphdmFzY3JpcHQ6IiwgMCwgZmFsc2UpID09IDApIHsKICAgICAgICAg
UVN0cmluZyBzY3JpcHQgPSBLVVJMOjpkZWNvZGVfc3RyaW5nKFVSTC5taWQoMTEpKTsKQEAgLTEz
MTIsNyArMTI4NSw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpjaGFuZ2VMb2NhdGlvbihjb25zdCBRU3QK
ICAgICB1cmxTZWxlY3RlZChVUkwsIDAsIDAsICJfc2VsZiIsIGFyZ3MpOwogfQogCi12b2lkIEtI
VE1MUGFydDo6c2xvdFJlZGlyZWN0KCkKK3ZvaWQgRnJhbWU6OnNsb3RSZWRpcmVjdCgpCiB7CiAg
ICAgaWYgKGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gPT0gaGlzdG9yeU5hdmlnYXRpb25TY2hl
ZHVsZWQpIHsKICAgICAgICAgZC0+bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9IG5vUmVkaXJlY3Rp
b25TY2hlZHVsZWQ7CkBAIC0xMzIxLDcgKzEyOTQsNyBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdFJl
ZGlyZWN0KCkKICAgICAgICAgLy8gZ28oaSE9MCkgZnJvbSBhIGZyYW1lIG5hdmlnYXRlcyBpbnRv
IHRoZSBoaXN0b3J5IG9mIHRoZSBmcmFtZSBvbmx5LAogICAgICAgICAvLyBpbiBib3RoIElFIGFu
ZCBOUyAoYnV0IG5vdCBpbiBNb3ppbGxhKS4uLi4gd2UgY2FuJ3QgZWFzaWx5IGRvIHRoYXQKICAg
ICAgICAgLy8gaW4gS29ucXVlcm9yLi4uCi0gICAgICAgIGlmIChkLT5tX3NjaGVkdWxlZEhpc3Rv
cnlOYXZpZ2F0aW9uU3RlcHMgPT0gMCkgLy8gYWRkICYmIHBhcmVudFBhcnQoKSB0byBnZXQgb25s
eSBmcmFtZXMsIGJ1dCBkb2Vzbid0IG1hdHRlcgorICAgICAgICBpZiAoZC0+bV9zY2hlZHVsZWRI
aXN0b3J5TmF2aWdhdGlvblN0ZXBzID09IDApIC8vIGFkZCAmJiBwYXJlbnRGcmFtZSgpIHRvIGdl
dCBvbmx5IGZyYW1lcywgYnV0IGRvZXNuJ3QgbWF0dGVyCiAgICAgICAgICAgICBvcGVuVVJMKCB1
cmwoKSApOyAvLy8gIyMgbmVlZCBhcmdzLnJlbG9hZD10cnVlPwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIGlmIChkLT5tX2V4dGVuc2lvbikgewpAQCAtMTM0NiwxMiArMTMxOSwxMiBAQCB2
b2lkIEtIVE1MUGFydDo6c2xvdFJlZGlyZWN0KCkKICAgICBjaGFuZ2VMb2NhdGlvbihVUkwsIHJl
ZmVycmVyLCBsb2NrSGlzdG9yeSwgdXNlckdlc3R1cmUpOwogfQogCi12b2lkIEtIVE1MUGFydDo6
c2xvdFJlZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBGcmFtZTo6
c2xvdFJlZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIGQtPm1f
d29ya2luZ1VSTCA9IHVybDsKIH0KIAotUVN0cmluZyBLSFRNTFBhcnQ6OmVuY29kaW5nKCkgY29u
c3QKK1FTdHJpbmcgRnJhbWU6OmVuY29kaW5nKCkgY29uc3QKIHsKICAgICBpZihkLT5tX2hhdmVF
bmNvZGluZyAmJiAhZC0+bV9lbmNvZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBkLT5t
X2VuY29kaW5nOwpAQCAtMTM2MiwxOSArMTMzNSwxOSBAQCBRU3RyaW5nIEtIVE1MUGFydDo6ZW5j
b2RpbmcoKSBjb25zdAogICAgIHJldHVybihzZXR0aW5ncygpLT5lbmNvZGluZygpKTsKIH0KIAot
dm9pZCBLSFRNTFBhcnQ6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IEtVUkwgJnVybCkKK3ZvaWQg
RnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IEtVUkwgJnVybCkKIHsKICAgaWYgKCBkLT5t
X2RvYyAmJiBkLT5tX2RvYy0+ZG9jTG9hZGVyKCkgKQogICAgICh2b2lkKSBuZXcga2h0bWw6OlBh
cnRTdHlsZVNoZWV0TG9hZGVyKHRoaXMsIHVybC51cmwoKSwgZC0+bV9kb2MtPmRvY0xvYWRlcigp
KTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcg
JnN0eWxlU2hlZXQpCit2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5n
ICZzdHlsZVNoZWV0KQogewogICBpZiAoIGQtPm1fZG9jICkKICAgICBkLT5tX2RvYy0+c2V0VXNl
clN0eWxlU2hlZXQoIHN0eWxlU2hlZXQgKTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OmdvdG9BbmNo
b3IoIGNvbnN0IFFTdHJpbmcgJm5hbWUgKQorYm9vbCBGcmFtZTo6Z290b0FuY2hvciggY29uc3Qg
UVN0cmluZyAmbmFtZSApCiB7CiAgIGlmICghZC0+bV9kb2MpCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTM5Miw3ICsxMzY1LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OmdvdG9BbmNob3IoIGNvbnN0IFFT
dHJpbgogICAKICAgLy8gSW1wbGVtZW50IHRoZSBydWxlIHRoYXQgIiIgYW5kICJ0b3AiIGJvdGgg
bWVhbiB0b3Agb2YgcGFnZSBhcyBpbiBvdGhlciBicm93c2Vycy4KICAgaWYgKCFuICYmICEobmFt
ZS5pc0VtcHR5KCkgfHwgbmFtZS5sb3dlcigpID09ICJ0b3AiKSkgewotICAgIGtkRGVidWcoNjA1
MCkgPDwgIktIVE1MUGFydDo6Z290b0FuY2hvciBub2RlICciIDw8IG5hbWUgPDwgIicgbm90IGZv
dW5kIiA8PCBlbmRsOworICAgIGtkRGVidWcoNjA1MCkgPDwgIkZyYW1lOjpnb3RvQW5jaG9yIG5v
ZGUgJyIgPDwgbmFtZSA8PCAiJyBub3QgZm91bmQiIDw8IGVuZGw7CiAgICAgcmV0dXJuIGZhbHNl
OwogICB9CiAKQEAgLTE0MjYsMTggKzEzOTksMTggQEAgYm9vbCBLSFRNTFBhcnQ6OmdvdG9BbmNo
b3IoIGNvbnN0IFFTdHJpbgogICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNl
dFN0YW5kYXJkRm9udCggY29uc3QgUVN0cmluZyAmbmFtZSApCit2b2lkIEZyYW1lOjpzZXRTdGFu
ZGFyZEZvbnQoIGNvbnN0IFFTdHJpbmcgJm5hbWUgKQogewogICAgIGQtPm1fc2V0dGluZ3MtPnNl
dFN0ZEZvbnROYW1lKG5hbWUpOwogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0Rml4ZWRGb250KCBj
b25zdCBRU3RyaW5nICZuYW1lICkKK3ZvaWQgRnJhbWU6OnNldEZpeGVkRm9udCggY29uc3QgUVN0
cmluZyAmbmFtZSApCiB7CiAgICAgZC0+bV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250TmFtZShuYW1l
KTsKIH0KIAogCi1RQ3Vyc29yIEtIVE1MUGFydDo6dXJsQ3Vyc29yKCkgY29uc3QKK1FDdXJzb3Ig
RnJhbWU6OnVybEN1cnNvcigpIGNvbnN0CiB7CiAgIC8vIERvbid0IGxvYWQgdGhlIGxpbmsgY3Vy
c29yIHVudGlsIGl0J3MgYWN0dWFsbHkgdXNlZC4KICAgLy8gQWxzbywgd2UgZG9uJ3QgbmVlZCBz
ZXRVUkxDdXJzb3IuCkBAIC0xNDQ1LDU3ICsxNDE4LDU3IEBAIFFDdXJzb3IgS0hUTUxQYXJ0Ojp1
cmxDdXJzb3IoKSBjb25zdAogICByZXR1cm4gS0N1cnNvcjo6aGFuZEN1cnNvcigpOwogfQogCi1i
b29sIEtIVE1MUGFydDo6b25seUxvY2FsUmVmZXJlbmNlcygpIGNvbnN0Citib29sIEZyYW1lOjpv
bmx5TG9jYWxSZWZlcmVuY2VzKCkgY29uc3QKIHsKICAgcmV0dXJuIGQtPm1fb25seUxvY2FsUmVm
ZXJlbmNlczsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldE9ubHlMb2NhbFJlZmVyZW5jZXMoYm9v
bCBlbmFibGUpCit2b2lkIEZyYW1lOjpzZXRPbmx5TG9jYWxSZWZlcmVuY2VzKGJvb2wgZW5hYmxl
KQogewogICBkLT5tX29ubHlMb2NhbFJlZmVyZW5jZXMgPSBlbmFibGU7CiB9CiAKLVFTdHJpbmcg
S0hUTUxQYXJ0OjpzZWxlY3RlZFRleHQoKSBjb25zdAorUVN0cmluZyBGcmFtZTo6c2VsZWN0ZWRU
ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhaW5UZXh0KHNlbGVjdGlvbigpLnRvUmFuZ2Uo
KS5nZXQoKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpoYXNTZWxlY3Rpb24oKSBjb25zdAorYm9v
bCBGcmFtZTo6aGFzU2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9zZWxlY3Rp
b24uaXNDYXJldE9yUmFuZ2UoKTsKIH0KIAotY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmS0hU
TUxQYXJ0OjpzZWxlY3Rpb24oKSBjb25zdAorY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmRnJh
bWU6OnNlbGVjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uOwogfQog
Ci1FVGV4dEdyYW51bGFyaXR5IEtIVE1MUGFydDo6c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25z
dAorRVRleHRHcmFudWxhcml0eSBGcmFtZTo6c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdAog
ewogICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5OwogfQogCi12b2lkIEtIVE1M
UGFydDo6c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkgY29uc3QKK3ZvaWQgRnJhbWU6OnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KEVUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0CiB7CiAgICAgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0
eSA9IGdyYW51bGFyaXR5OwogfQogCi1jb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZLSFRNTFBh
cnQ6OmRyYWdDYXJldCgpIGNvbnN0Citjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZGcmFtZTo6
ZHJhZ0NhcmV0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9kcmFnQ2FyZXQ7CiB9CiAKLWNv
bnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJktIVE1MUGFydDo6bWFyaygpIGNvbnN0Citjb25zdCBT
ZWxlY3Rpb25Db250cm9sbGVyICZGcmFtZTo6bWFyaygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQt
Pm1fbWFyazsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldE1hcmsoY29uc3QgU2VsZWN0aW9uQ29u
dHJvbGxlciAmcykKK3ZvaWQgRnJhbWU6OnNldE1hcmsoY29uc3QgU2VsZWN0aW9uQ29udHJvbGxl
ciAmcykKIHsKICAgICBkLT5tX21hcmsgPSBzOwogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0U2Vs
ZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMsIGJvb2wgY2xvc2VUeXBpbmcsIGJv
b2wga2VlcFR5cGluZ1N0eWxlKQordm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVj
dGlvbkNvbnRyb2xsZXIgJnMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wga2VlcFR5cGluZ1N0eWxl
KQogewogICAgIGlmIChkLT5tX3NlbGVjdGlvbiA9PSBzKSB7CiAgICAgICAgIHJldHVybjsKQEAg
LTE1MjEsMTAgKzE0OTQsMTAgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldFNlbGVjdGlvbihjb25zdCBT
ZWxlYwogICAgIGlmICgha2VlcFR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5cGluZ1N0eWxl
KCk7CiAgICAgCi0gICAgS1dRKHRoaXMpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbiwgY2xvc2VUeXBpbmcpOworICAgIE1hYyh0aGlzKS0+cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihvbGRTZWxlY3Rpb24sIGNsb3NlVHlwaW5nKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6
OnNldERyYWdDYXJldChjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZkcmFnQ2FyZXQpCit2b2lk
IEZyYW1lOjpzZXREcmFnQ2FyZXQoY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmZHJhZ0NhcmV0
KQogewogICAgIGlmIChkLT5tX2RyYWdDYXJldCAhPSBkcmFnQ2FyZXQpIHsKICAgICAgICAgZC0+
bV9kcmFnQ2FyZXQubmVlZHNDYXJldFJlcGFpbnQoKTsKQEAgLTE1MzMsMTkgKzE1MDYsMTkgQEAg
dm9pZCBLSFRNTFBhcnQ6OnNldERyYWdDYXJldChjb25zdCBTZWxlYwogICAgIH0KIH0KIAotdm9p
ZCBLSFRNTFBhcnQ6OmNsZWFyU2VsZWN0aW9uKCkKK3ZvaWQgRnJhbWU6OmNsZWFyU2VsZWN0aW9u
KCkKIHsKICAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcigpKTsKIH0KIAotdm9p
ZCBLSFRNTFBhcnQ6OmludmFsaWRhdGVTZWxlY3Rpb24oKQordm9pZCBGcmFtZTo6aW52YWxpZGF0
ZVNlbGVjdGlvbigpCiB7CiAgICAgY2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwogICAgIGQtPm1f
c2VsZWN0aW9uLnNldE5lZWRzTGF5b3V0KCk7CiAgICAgc2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgp
OwogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKK3ZvaWQg
RnJhbWU6OnNldENhcmV0VmlzaWJsZShib29sIGZsYWcpCiB7CiAgICAgaWYgKGQtPm1fY2FyZXRW
aXNpYmxlID09IGZsYWcpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTcsNyArMTUzMCw3IEBAIHZv
aWQgS0hUTUxQYXJ0OjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGEKIH0KIAogCi12b2lkIEtIVE1M
UGFydDo6Y2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpCit2b2lkIEZyYW1lOjpjbGVhckNhcmV0UmVj
dElmTmVlZGVkKCkKIHsKICAgICBpZiAoZC0+bV9jYXJldFBhaW50KSB7CiAgICAgICAgIGQtPm1f
Y2FyZXRQYWludCA9IGZhbHNlOwpAQCAtMTU2Niw4ICsxNTM5LDggQEAgdm9pZCBLSFRNTFBhcnQ6
OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0
ZWxscyB3aGV0aGVyIGEgcGFydGljdWxhciBub2RlIGlzIGFuIGVsZW1lbnQgdGhhdCBoYXMgYW4g
ZW50aXJlCi0vLyBLSFRNTFBhcnQgYW5kIEtIVE1MVmlldywgYSA8ZnJhbWU+LCA8aWZyYW1lPiwg
b3IgPG9iamVjdD4uCi1zdGF0aWMgYm9vbCBpc0ZyYW1lKGNvbnN0IE5vZGVJbXBsICpuKQorLy8g
RnJhbWUgYW5kIEtIVE1MVmlldywgYSA8ZnJhbWU+LCA8aWZyYW1lPiwgb3IgPG9iamVjdD4uCitz
dGF0aWMgYm9vbCBpc0ZyYW1lRWxlbWVudChjb25zdCBOb2RlSW1wbCAqbikKIHsKICAgICBpZiAo
IW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NzgsNyArMTU1MSw3IEBAIHN0YXRpYyBi
b29sIGlzRnJhbWUoY29uc3QgTm9kZUltcGwgKm4pCiAgICAgcmV0dXJuIHdpZGdldCAmJiB3aWRn
ZXQtPmluaGVyaXRzKCJLSFRNTFZpZXciKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldEZvY3Vz
Tm9kZUlmTmVlZGVkKCkKK3ZvaWQgRnJhbWU6OnNldEZvY3VzTm9kZUlmTmVlZGVkKCkKIHsKICAg
ICBpZiAoIXhtbERvY0ltcGwoKSB8fCBkLT5tX3NlbGVjdGlvbi5pc05vbmUoKSB8fCAhZC0+bV9p
c0ZvY3VzZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1ODksOSArMTU2Miw5IEBAIHZvaWQgS0hU
TUxQYXJ0OjpzZXRGb2N1c05vZGVJZk5lZWRlZCgpCiAgICAgaWYgKHRhcmdldCkgewogICAgICAg
ICBmb3IgKCA7IHRhcmdldDsgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2V0IGZvY3VzIG9uIGEgc3ViZnJhbWUgd2hlbiBz
ZWxlY3RpbmcgaW4gYSBwYXJlbnQgZnJhbWUsCi0gICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFp
c0ZyYW1lIGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2Ug
dGhpcworICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVy
ZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAgICAg
ICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0
IHRoaXMgdGltZS4KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAm
JiAhaXNGcmFtZSh0YXJnZXQpKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9j
dXNhYmxlKCkgJiYgITo6aXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewogICAgICAgICAgICAgICAg
IHhtbERvY0ltcGwoKS0+c2V0Rm9jdXNOb2RlKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQpAQCAtMTYwMCw3ICsxNTczLDcgQEAgdm9pZCBLSFRNTFBhcnQ6
OnNldEZvY3VzTm9kZUlmTmVlZGVkKCkKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZWxl
Y3Rpb25MYXlvdXRDaGFuZ2VkKCkKK3ZvaWQgRnJhbWU6OnNlbGVjdGlvbkxheW91dENoYW5nZWQo
KQogewogICAgIC8vIGtpbGwgYW55IGNhcmV0IGJsaW5rIHRpbWVyIG5vdyBydW5uaW5nCiAgICAg
aWYgKGQtPm1fY2FyZXRCbGlua1RpbWVyID49IDApIHsKQEAgLTE2MjAsMTcgKzE1OTMsMTcgQEAg
dm9pZCBLSFRNTFBhcnQ6OnNlbGVjdGlvbkxheW91dENoYW5nZWQoKQogICAgICAgICBkLT5tX2Rv
Yy0+dXBkYXRlU2VsZWN0aW9uKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZXRYUG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oaW50IHgpCit2b2lkIEZyYW1lOjpzZXRYUG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oaW50IHgpCiB7CiAgICAgZC0+bV94UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24gPSB4OwogfQogCi1pbnQgS0hUTUxQYXJ0Ojp4UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24oKSBjb25zdAoraW50IEZyYW1lOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKmUp
Cit2b2lkIEZyYW1lOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICplKQogewogICAgIGlmIChlLT50
aW1lcklkKCkgPT0gZC0+bV9jYXJldEJsaW5rVGltZXIgJiYgCiAgICAgICAgIGQtPm1fY2FyZXRW
aXNpYmxlICYmIApAQCAtMTY0OSwxOSArMTYyMiwxOSBAQCB2b2lkIEtIVE1MUGFydDo6dGltZXJF
dmVudChRVGltZXJFdmVudCAqCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6cGFpbnRDYXJl
dChRUGFpbnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpIGNvbnN0Cit2b2lkIEZyYW1lOjpwYWlu
dENhcmV0KFFQYWludGVyICpwLCBjb25zdCBRUmVjdCAmcmVjdCkgY29uc3QKIHsKICAgICBpZiAo
ZC0+bV9jYXJldFBhaW50KQogICAgICAgICBkLT5tX3NlbGVjdGlvbi5wYWludENhcmV0KHAsIHJl
Y3QpOwogfQogCi12b2lkIEtIVE1MUGFydDo6cGFpbnREcmFnQ2FyZXQoUVBhaW50ZXIgKnAsIGNv
bnN0IFFSZWN0ICZyZWN0KSBjb25zdAordm9pZCBGcmFtZTo6cGFpbnREcmFnQ2FyZXQoUVBhaW50
ZXIgKnAsIGNvbnN0IFFSZWN0ICZyZWN0KSBjb25zdAogewogICAgIGQtPm1fZHJhZ0NhcmV0LnBh
aW50Q2FyZXQocCwgcmVjdCk7CiB9CiAKIAotdm9pZCBLSFRNTFBhcnQ6OnVybFNlbGVjdGVkKCBj
b25zdCBRU3RyaW5nICZ1cmwsIGludCBidXR0b24sIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAm
X3RhcmdldCwKK3ZvaWQgRnJhbWU6OnVybFNlbGVjdGVkKCBjb25zdCBRU3RyaW5nICZ1cmwsIGlu
dCBidXR0b24sIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAmX3RhcmdldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgS1BhcnRzOjpVUkxBcmdzIGFyZ3MgKQogewogICBib29sIGhhc1Rh
cmdldCA9IGZhbHNlOwpAQCAtMTY5OCwxMSArMTY3MSwxMSBAQCB2b2lkIEtIVE1MUGFydDo6dXJs
U2VsZWN0ZWQoIGNvbnN0IFFTdHJpCiAKICAgaWYgKCFkLT5tX3JlZmVycmVyLmlzRW1wdHkoKSkK
ICAgICBhcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwotICBLV1Eo
dGhpcyktPnVybFNlbGVjdGVkKGNVUkwsIGJ1dHRvbiwgc3RhdGUsIGFyZ3MpOworICBNYWModGhp
cyktPnVybFNlbGVjdGVkKGNVUkwsIGJ1dHRvbiwgc3RhdGUsIGFyZ3MpOwogfQogCiAKLWJvb2wg
S0hUTUxQYXJ0OjpyZXF1ZXN0RnJhbWUoIGtodG1sOjpSZW5kZXJQYXJ0ICpmcmFtZSwgY29uc3Qg
UVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZmcmFtZU5hbWUsCitib29sIEZyYW1lOjpyZXF1
ZXN0RnJhbWUoIGtodG1sOjpSZW5kZXJQYXJ0ICpwYXJ0LCBjb25zdCBRU3RyaW5nICZ1cmwsIGNv
bnN0IFFTdHJpbmcgJmZyYW1lTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1
ZXMsIGJvb2wgaXNJRnJhbWUgKQogewogICBGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuZmluZCgg
ZnJhbWVOYW1lICk7CkBAIC0xNzEzLDcgKzE2ODYsNyBAQCBib29sIEtIVE1MUGFydDo6cmVxdWVz
dEZyYW1lKCBraHRtbDo6UmVuCiAgIH0KIAogICAoKml0KS5tX3R5cGUgPSBpc0lGcmFtZSA/IGto
dG1sOjpDaGlsZEZyYW1lOjpJRnJhbWUgOiBraHRtbDo6Q2hpbGRGcmFtZTo6RnJhbWU7Ci0gICgq
aXQpLm1fZnJhbWUgPSBmcmFtZTsKKyAgKCppdCkubV9mcmFtZSA9IHBhcnQ7CiAgICgqaXQpLm1f
cGFyYW1WYWx1ZXMgPSBwYXJhbU5hbWVzOwogICAoKml0KS5tX3BhcmFtTmFtZXMgPSBwYXJhbVZh
bHVlczsKIApAQCAtMTcyMiw3ICsxNjk1LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnJlcXVlc3RGcmFt
ZSgga2h0bWw6OlJlbgogICAgIGlmICghcHJvY2Vzc09iamVjdFJlcXVlc3QoJigqaXQpLCAiYWJv
dXQ6YmxhbmsiLCAidGV4dC9odG1sIiApKQogICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS0hU
TUxQYXJ0ICpuZXdQYXJ0ID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KCYqKCppdCkubV9wYXJ0
KTsgCisgICAgRnJhbWUgKm5ld1BhcnQgPSBzdGF0aWNfY2FzdDxGcmFtZSAqPigmKigqaXQpLm1f
cGFydCk7IAogICAgIG5ld1BhcnQtPnJlcGxhY2VDb250ZW50c1dpdGhTY3JpcHRSZXN1bHQoIHVy
bCApOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzMxLDEyICsxNzA0LDEyIEBAIGJvb2wgS0hU
TUxQYXJ0OjpyZXF1ZXN0RnJhbWUoIGtodG1sOjpSZW4KICAgcmV0dXJuIHJlcXVlc3RPYmplY3Qo
ICYoKml0KSwgY29tcGxldGVVUkwoIHVybCApKTsKIH0KIAotUVN0cmluZyBLSFRNTFBhcnQ6OnJl
cXVlc3RGcmFtZU5hbWUoKQorUVN0cmluZyBGcmFtZTo6cmVxdWVzdEZyYW1lTmFtZSgpCiB7Ci0g
ICAgcmV0dXJuIEtXUSh0aGlzKS0+Z2VuZXJhdGVGcmFtZU5hbWUoKTsKKyAgICByZXR1cm4gTWFj
KHRoaXMpLT5nZW5lcmF0ZUZyYW1lTmFtZSgpOwogfQogCi1ib29sIEtIVE1MUGFydDo6cmVxdWVz
dE9iamVjdCgga2h0bWw6OlJlbmRlclBhcnQgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZ1cmwsIGNv
bnN0IFFTdHJpbmcgJnNlcnZpY2VUeXBlLAorYm9vbCBGcmFtZTo6cmVxdWVzdE9iamVjdCgga2h0
bWw6OlJlbmRlclBhcnQgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcg
JnNlcnZpY2VUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMgKQogewog
ICBraHRtbDo6Q2hpbGRGcmFtZSBjaGlsZDsKQEAgLTE3NTYsMTMgKzE3MjksMTMgQEAgYm9vbCBL
SFRNTFBhcnQ6OnJlcXVlc3RPYmplY3QoIGtodG1sOjpSZQogICByZXR1cm4gcmVxdWVzdE9iamVj
dCggJigqaXQpLCBjb21wbGV0ZWRVUkwsIGFyZ3MgKTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnJl
cXVlc3RPYmplY3QoIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VSTCAmdXJsLCBj
b25zdCBLUGFydHM6OlVSTEFyZ3MgJl9hcmdzICkKK2Jvb2wgRnJhbWU6OnJlcXVlc3RPYmplY3Qo
IGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VSTCAmdXJsLCBjb25zdCBLUGFydHM6
OlVSTEFyZ3MgJl9hcmdzICkKIHsKICAgaWYgKCBjaGlsZC0+bV9iUHJlbG9hZGVkICkKICAgewot
ICAgIC8vIGtkRGVidWcoNjAwNSkgPDwgIktIVE1MUGFydDo6cmVxdWVzdE9iamVjdCBwcmVsb2Fk
IiA8PCBlbmRsOwotICAgIGlmICggY2hpbGQtPm1fZnJhbWUgJiYgY2hpbGQtPm1fcGFydCAmJiBj
aGlsZC0+bV9wYXJ0LT53aWRnZXQoKSApCi0gICAgICBjaGlsZC0+bV9mcmFtZS0+c2V0V2lkZ2V0
KCBjaGlsZC0+bV9wYXJ0LT53aWRnZXQoKSApOworICAgIC8vIGtkRGVidWcoNjAwNSkgPDwgIkZy
YW1lOjpyZXF1ZXN0T2JqZWN0IHByZWxvYWQiIDw8IGVuZGw7CisgICAgaWYgKCBjaGlsZC0+bV9m
cmFtZSAmJiBjaGlsZC0+bV9mcmFtZSAmJiBjaGlsZC0+bV9mcmFtZS0+d2lkZ2V0KCkgKQorICAg
ICAgY2hpbGQtPm1fZnJhbWUtPnNldFdpZGdldCggY2hpbGQtPm1fZnJhbWUtPndpZGdldCgpICk7
CiAKICAgICBjaGlsZC0+bV9iUHJlbG9hZGVkID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xNzcxLDcgKzE3NDQsNyBAQCBib29sIEtIVE1MUGFydDo6cmVxdWVzdE9iamVjdCgga2h0bWw6
OkNoCiAgIEtQYXJ0czo6VVJMQXJncyBhcmdzKCBfYXJncyApOwogCiAKLSAgaWYgKCBjaGlsZC0+
bV9wYXJ0ICYmICFhcmdzLnJlbG9hZCAmJiB1cmxjbXAoIGNoaWxkLT5tX3BhcnQtPnVybCgpLnVy
bCgpLCB1cmwudXJsKCksIHRydWUsIHRydWUgKSApCisgIGlmICggY2hpbGQtPm1fZnJhbWUgJiYg
IWFyZ3MucmVsb2FkICYmIHVybGNtcCggY2hpbGQtPm1fcGFydC0+dXJsKCkudXJsKCksIHVybC51
cmwoKSwgdHJ1ZSwgdHJ1ZSApICkKICAgICBhcmdzLnNlcnZpY2VUeXBlID0gY2hpbGQtPm1fc2Vy
dmljZVR5cGU7CiAKICAgY2hpbGQtPm1fYXJncyA9IGFyZ3M7CkBAIC0xNzgxLDE2ICsxNzU0LDE2
IEBAIGJvb2wgS0hUTUxQYXJ0OjpyZXF1ZXN0T2JqZWN0KCBraHRtbDo6Q2gKICAgICBjaGlsZC0+
bV9hcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwogCiAKLSAgLy8g
V2Ugd2FudCBhIEtIVE1MUGFydCBpZiB0aGUgSFRNTCBzYXlzIDxmcmFtZSBzcmM9IiI+IG9yIDxm
cmFtZSBzcmM9ImFib3V0OmJsYW5rIj4KKyAgLy8gV2Ugd2FudCBhIEZyYW1lIGlmIHRoZSBIVE1M
IHNheXMgPGZyYW1lIHNyYz0iIj4gb3IgPGZyYW1lIHNyYz0iYWJvdXQ6YmxhbmsiPgogICBpZiAo
KHVybC5pc0VtcHR5KCkgfHwgdXJsLnVybCgpID09ICJhYm91dDpibGFuayIpICYmIGFyZ3Muc2Vy
dmljZVR5cGUuaXNFbXB0eSgpKQogICAgIGFyZ3Muc2VydmljZVR5cGUgPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKCAidGV4dC9odG1sIiApOwogCiAgIHJldHVybiBwcm9jZXNzT2JqZWN0UmVxdWVzdCgg
Y2hpbGQsIHVybCwgYXJncy5zZXJ2aWNlVHlwZSApOwogfQogCi1ib29sIEtIVE1MUGFydDo6cHJv
Y2Vzc09iamVjdFJlcXVlc3QoIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VSTCAm
X3VybCwgY29uc3QgUVN0cmluZyAmbWltZXR5cGUgKQorYm9vbCBGcmFtZTo6cHJvY2Vzc09iamVj
dFJlcXVlc3QoIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VSTCAmX3VybCwgY29u
c3QgUVN0cmluZyAmbWltZXR5cGUgKQogewotICAvL2tkRGVidWcoIDYwNTAgKSA8PCAiS0hUTUxQ
YXJ0Ojpwcm9jZXNzT2JqZWN0UmVxdWVzdCB0cnlpbmcgdG8gY3JlYXRlIHBhcnQgZm9yICIgPDwg
bWltZXR5cGUgPDwgZW5kbDsKKyAgLy9rZERlYnVnKCA2MDUwICkgPDwgIkZyYW1lOjpwcm9jZXNz
T2JqZWN0UmVxdWVzdCB0cnlpbmcgdG8gY3JlYXRlIHBhcnQgZm9yICIgPDwgbWltZXR5cGUgPDwg
ZW5kbDsKIAogICAvLyBJTVBPUlRBTlQ6IGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHVybCBoZXJlLCBi
ZWNhdXNlIGl0IGlzIGp1c3QgYSByZWZlcmVuY2UsIHdoaWNoIHdhcyBsaWtlbHkgdG8gYmUgZ2l2
ZW4KICAgLy8gYnkgYW4gZW1pdHRpbmcgZnJhbWUgcGFydCAoZW1pdCBvcGVuVVJMUmVxdWVzdCgg
YmxhaHVybCwgLi4uICkgLiBBIGZldyBsaW5lcyBiZWxvdyB3ZSBkZWxldGUgdGhlIHBhcnQKQEAg
LTE4MTIsMjIgKzE3ODUsMjIgQEAgYm9vbCBLSFRNTFBhcnQ6OnByb2Nlc3NPYmplY3RSZXF1ZXN0
KCBraAogICAgICAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPm9wZW5VUkxOb3RpZnkoKTsKICAg
fQogCi0gIGlmICggY2hpbGQtPm1fcGFydCApCisgIGlmICggY2hpbGQtPm1fZnJhbWUgKQogICB7
Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KCYqY2hpbGQt
Pm1fcGFydCk7Ci0gICAgaWYgKHBhcnQgJiYgcGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKSB7
CisgICAgRnJhbWUgKmZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oJipjaGlsZC0+bV9wYXJ0
KTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmluaGVyaXRzKCJGcmFtZSIpKSB7CiAgICAgICBL
UGFydHM6OlVSTEFyZ3MgYXJnczsKICAgICAgIGlmICghZC0+bV9yZWZlcnJlci5pc0VtcHR5KCkp
CiAgICAgICAgIGFyZ3MubWV0YURhdGEoKVsicmVmZXJyZXIiXSA9IGQtPm1fcmVmZXJyZXI7Ci0g
ICAgICBLV1EocGFydCktPm9wZW5VUkxSZXF1ZXN0KHVybCwgYXJncyk7CisgICAgICBNYWMoZnJh
bWUpLT5vcGVuVVJMUmVxdWVzdCh1cmwsIGFyZ3MpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsK
LSAgICBLUGFydHM6OlJlYWRPbmx5UGFydCAqcGFydCA9IEtXUSh0aGlzKS0+Y3JlYXRlUGFydCgq
Y2hpbGQsIHVybCwgbWltZXR5cGUpOwotICAgIEtIVE1MUGFydCAqa2h0bWxfcGFydCA9IHN0YXRp
Y19jYXN0PEtIVE1MUGFydCAqPihwYXJ0KTsKLSAgICBpZiAoa2h0bWxfcGFydCAmJiBraHRtbF9w
YXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCi0gICAgICBraHRtbF9wYXJ0LT5jaGlsZEJlZ2lu
KCk7CisgICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKnBhcnQgPSBNYWModGhpcyktPmNyZWF0ZVBh
cnQoKmNoaWxkLCB1cmwsIG1pbWV0eXBlKTsKKyAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2Fz
dDxGcmFtZSAqPihwYXJ0KTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmluaGVyaXRzKCJGcmFt
ZSIpKQorICAgICAgZnJhbWUtPmNoaWxkQmVnaW4oKTsKIAogICAgIGlmICghcGFydCkgewogICAg
ICAgICBjaGVja0VtaXRMb2FkRXZlbnQoKTsKQEAgLTE4NDIsOCArMTgxNSw4IEBAIGJvb2wgS0hU
TUxQYXJ0Ojpwcm9jZXNzT2JqZWN0UmVxdWVzdCgga2gKICAgICB9CiAKICAgICBjaGlsZC0+bV9z
ZXJ2aWNlVHlwZSA9IG1pbWV0eXBlOwotICAgIGlmICggY2hpbGQtPm1fZnJhbWUgJiYgcGFydC0+
d2lkZ2V0KCkgKQotICAgICAgY2hpbGQtPm1fZnJhbWUtPnNldFdpZGdldCggcGFydC0+d2lkZ2V0
KCkgKTsKKyAgICBpZiAoIGNoaWxkLT5tX2ZyYW1lICYmIGZyYW1lLT53aWRnZXQoKSApCisgICAg
ICBjaGlsZC0+bV9mcmFtZS0+c2V0V2lkZ2V0KCBmcmFtZS0+d2lkZ2V0KCkgKTsKIAogCiAgICAg
Y2hpbGQtPm1fcGFydCA9IHBhcnQ7CkBAIC0xODU2LDEzICsxODI5LDEzIEBAIGJvb2wgS0hUTUxQ
YXJ0Ojpwcm9jZXNzT2JqZWN0UmVxdWVzdCgga2gKICAgY2hlY2tFbWl0TG9hZEV2ZW50KCk7CiAg
IC8vIFNvbWUgSlMgY29kZSBpbiB0aGUgbG9hZCBldmVudCBtYXkgaGF2ZSBkZXN0cm95ZWQgdGhl
IHBhcnQKICAgLy8gSW4gdGhhdCBjYXNlLCBhYm9ydAotICBpZiAoICFjaGlsZC0+bV9wYXJ0ICkK
KyAgaWYgKCAhY2hpbGQtPm1fZnJhbWUgKQogICAgIHJldHVybiBmYWxzZTsKIAogICBpZiAoIGNo
aWxkLT5tX2JQcmVsb2FkZWQgKQogICB7Ci0gICAgaWYgKCBjaGlsZC0+bV9mcmFtZSAmJiBjaGls
ZC0+bV9wYXJ0ICkKLSAgICAgIGNoaWxkLT5tX2ZyYW1lLT5zZXRXaWRnZXQoIGNoaWxkLT5tX3Bh
cnQtPndpZGdldCgpICk7CisgICAgaWYgKCBjaGlsZC0+bV9mcmFtZSAmJiBjaGlsZC0+bV9mcmFt
ZSApCisgICAgICBjaGlsZC0+bV9mcmFtZS0+c2V0V2lkZ2V0KCBjaGlsZC0+bV9mcmFtZS0+d2lk
Z2V0KCkgKTsKIAogICAgIGNoaWxkLT5tX2JQcmVsb2FkZWQgPSBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE4ODMsMzQgKzE4NTYsMzQgQEAgYm9vbCBLSFRNTFBhcnQ6OnByb2Nlc3NPYmpl
Y3RSZXF1ZXN0KCBraAogICAvLyBJbiB0aGVzZSBjYXNlcywgdGhlIHN5bmNocm9ub3VzIGxvYWQg
d291bGQgaGF2ZSBmaW5pc2hlZAogICAvLyBiZWZvcmUgd2UgY291bGQgY29ubmVjdCB0aGUgc2ln
bmFscywgc28gbWFrZSBzdXJlIHRvIHNlbmQgdGhlIAogICAvLyBjb21wbGV0ZWQoKSBzaWduYWwg
Zm9yIHRoZSBjaGlsZCBieSBoYW5kCi0gIC8vIEZJWE1FOiBJbiB0aGlzIGNhc2UgdGhlIEtIVE1M
UGFydCB3aWxsIGhhdmUgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgCisgIC8vIEZJWE1FOiBJbiB0
aGlzIGNhc2UgdGhlIEZyYW1lIHdpbGwgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSAKICAg
Ly8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUgY2hpbGQgbGlzdC4gIEl0IHdvdWxkIGJlIGEgZ29v
ZCBpZGVhIHRvCiAgIC8vIGNyZWF0ZSB0aGUgY2hpbGQgZmlyc3QsIHRoZW4gaW52b2tlIHRoZSBs
b2FkZXIgc2VwYXJhdGVseSAgCiAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IHVybC51cmwoKSA9PSAi
YWJvdXQ6YmxhbmsiKSB7CiAgICAgICBSZWFkT25seVBhcnQgKnJlYWRPbmx5UGFydCA9IGNoaWxk
LT5tX3BhcnQ7Ci0gICAgICBLSFRNTFBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnQg
Kj4ocmVhZE9ubHlQYXJ0KTsKLSAgICAgIGlmIChwYXJ0ICYmIHBhcnQtPmluaGVyaXRzKCJLSFRN
TFBhcnQiKSkgewotICAgICAgICAgIHBhcnQtPmNvbXBsZXRlZCgpOwotICAgICAgICAgIHBhcnQt
PmNoZWNrQ29tcGxldGVkKCk7CisgICAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFt
ZSAqPihyZWFkT25seVBhcnQpOworICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pbmhlcml0cygi
RnJhbWUiKSkgeworICAgICAgICAgIGZyYW1lLT5jb21wbGV0ZWQoKTsKKyAgICAgICAgICBmcmFt
ZS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICAgIH0KICAgfQogICAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIAotdm9pZCBLSFRNTFBhcnQ6OnN1Ym1pdEZvcm1BZ2FpbigpCit2b2lkIEZyYW1lOjpzdWJt
aXRGb3JtQWdhaW4oKQogewogICBpZiggZC0+bV9kb2MgJiYgIWQtPm1fZG9jLT5wYXJzaW5nKCkg
JiYgZC0+bV9zdWJtaXRGb3JtKQotICAgIEtIVE1MUGFydDo6c3VibWl0Rm9ybSggZC0+bV9zdWJt
aXRGb3JtLT5zdWJtaXRBY3Rpb24sIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0VXJsLCBkLT5tX3N1
Ym1pdEZvcm0tPnN1Ym1pdEZvcm1EYXRhLCBkLT5tX3N1Ym1pdEZvcm0tPnRhcmdldCwgZC0+bV9z
dWJtaXRGb3JtLT5zdWJtaXRDb250ZW50VHlwZSwgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRCb3Vu
ZGFyeSApOworICAgIEZyYW1lOjpzdWJtaXRGb3JtKCBkLT5tX3N1Ym1pdEZvcm0tPnN1Ym1pdEFj
dGlvbiwgZC0+bV9zdWJtaXRGb3JtLT5zdWJtaXRVcmwsIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0
Rm9ybURhdGEsIGQtPm1fc3VibWl0Rm9ybS0+dGFyZ2V0LCBkLT5tX3N1Ym1pdEZvcm0tPnN1Ym1p
dENvbnRlbnRUeXBlLCBkLT5tX3N1Ym1pdEZvcm0tPnN1Ym1pdEJvdW5kYXJ5ICk7CiAKICAgZGVs
ZXRlIGQtPm1fc3VibWl0Rm9ybTsKICAgZC0+bV9zdWJtaXRGb3JtID0gMDsKICAgZGlzY29ubmVj
dCh0aGlzLCBTSUdOQUwoY29tcGxldGVkKCkpLCB0aGlzLCBTTE9UKHN1Ym1pdEZvcm1BZ2Fpbigp
KSk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKCBjb25zdCBjaGFyICphY3Rpb24s
IGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgRm9ybURhdGEgJmZvcm1EYXRhLCBjb25zdCBRU3Ry
aW5nICZfdGFyZ2V0LCBjb25zdCBRU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgUVN0cmluZyYg
Ym91bmRhcnkgKQordm9pZCBGcmFtZTo6c3VibWl0Rm9ybSggY29uc3QgY2hhciAqYWN0aW9uLCBj
b25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IEZvcm1EYXRhICZmb3JtRGF0YSwgY29uc3QgUVN0cmlu
ZyAmX3RhcmdldCwgY29uc3QgUVN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFFTdHJpbmcmIGJv
dW5kYXJ5ICkKIHsKLSAga2REZWJ1Zyg2MDAwKSA8PCB0aGlzIDw8ICI6IEtIVE1MUGFydDo6c3Vi
bWl0Rm9ybSB0YXJnZXQ9IiA8PCBfdGFyZ2V0IDw8ICIgdXJsPSIgPDwgdXJsIDw8IGVuZGw7Cisg
IGtkRGVidWcoNjAwMCkgPDwgdGhpcyA8PCAiOiBGcmFtZTo6c3VibWl0Rm9ybSB0YXJnZXQ9IiA8
PCBfdGFyZ2V0IDw8ICIgdXJsPSIgPDwgdXJsIDw8IGVuZGw7CiAgIEtVUkwgdSA9IGNvbXBsZXRl
VVJMKCB1cmwgKTsKIAogICBpZiAoIXUuaXNWYWxpZCgpKQpAQCAtMTk5MCw3ICsxOTYzLDcgQEAg
dm9pZCBLSFRNTFBhcnQ6OnN1Ym1pdEZvcm0oIGNvbnN0IGNoYXIgKgogCiAgIGlmICggZC0+bV9k
b2MtPnBhcnNpbmcoKSB8fCBkLT5tX3J1bm5pbmdTY3JpcHRzID4gMCApIHsKICAgICBpZiggZC0+
bV9zdWJtaXRGb3JtICkgewotICAgICAga2REZWJ1Zyg2MDAwKSA8PCAiS0hUTUxQYXJ0OjpzdWJt
aXRGb3JtIEFCT1JUSU5HISIgPDwgZW5kbDsKKyAgICAgIGtkRGVidWcoNjAwMCkgPDwgIkZyYW1l
OjpzdWJtaXRGb3JtIEFCT1JUSU5HISIgPDwgZW5kbDsKICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgZC0+bV9zdWJtaXRGb3JtID0gbmV3IEtIVE1MUGFydFByaXZhdGU6OlN1Ym1pdEZvcm07CkBA
IC0yMDA0LDEyICsxOTc3LDEyIEBAIHZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKCBjb25zdCBj
aGFyICoKICAgfQogICBlbHNlCiAgIHsKLSAgICBLV1EodGhpcyktPnN1Ym1pdEZvcm0oIHUsIGFy
Z3MpOworICAgIE1hYyh0aGlzKS0+c3VibWl0Rm9ybSggdSwgYXJncyk7CiAgIH0KIH0KIAogCi12
b2lkIEtIVE1MUGFydDo6c2xvdFBhcmVudENvbXBsZXRlZCgpCit2b2lkIEZyYW1lOjpzbG90UGFy
ZW50Q29tcGxldGVkKCkKIHsKICAgaWYgKCBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uICE9IG5v
UmVkaXJlY3Rpb25TY2hlZHVsZWQgJiYgIWQtPm1fcmVkaXJlY3Rpb25UaW1lci5pc0FjdGl2ZSgp
ICkKICAgewpAQCAtMjAxOCw3ICsxOTkxLDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJlbnRD
b21wbGV0ZWQoKQogICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzbG90Q2hpbGRTdGFydGVkKCBL
SU86OkpvYiAqam9iICkKK3ZvaWQgRnJhbWU6OnNsb3RDaGlsZFN0YXJ0ZWQoIEtJTzo6Sm9iICpq
b2IgKQogewogICBraHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQgPSBjaGlsZEZyYW1lKCBzZW5kZXIo
KSApOwogCkBAIC0yMDMzLDEyICsyMDA2LDEyIEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90Q2hpbGRT
dGFydGVkKCBLSU86OkoKICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6c2xvdENoaWxkQ29tcGxl
dGVkKCkKK3ZvaWQgRnJhbWU6OnNsb3RDaGlsZENvbXBsZXRlZCgpCiB7CiAgIHNsb3RDaGlsZENv
bXBsZXRlZCggZmFsc2UgKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3RDaGlsZENvbXBsZXRl
ZCggYm9vbCBjb21wbGV0ZSApCit2b2lkIEZyYW1lOjpzbG90Q2hpbGRDb21wbGV0ZWQoIGJvb2wg
Y29tcGxldGUgKQogewogICBraHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQgPSBjaGlsZEZyYW1lKCBz
ZW5kZXIoKSApOwogCkBAIC0yMDQ3LDE0ICsyMDIwLDE0IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90
Q2hpbGRDb21wbGV0ZWQoIGJvb2wKICAgY2hpbGQtPm1fYkNvbXBsZXRlZCA9IHRydWU7CiAgIGNo
aWxkLT5tX2FyZ3MgPSBLUGFydHM6OlVSTEFyZ3MoKTsKIAotICBpZiAoIGNvbXBsZXRlICYmIHBh
cmVudFBhcnQoKSA9PSAwICkKKyAgaWYgKCBjb21wbGV0ZSAmJiBwYXJlbnRGcmFtZSgpID09IDAg
KQogICAgIGQtPm1fYlBlbmRpbmdDaGlsZFJlZGlyZWN0aW9uID0gdHJ1ZTsKIAogICBjaGVja0Nv
bXBsZXRlZCgpOwogfQogCiAKLWtodG1sOjpDaGlsZEZyYW1lICpLSFRNTFBhcnQ6OmNoaWxkRnJh
bWUoIGNvbnN0IFFPYmplY3QgKm9iaiApCitraHRtbDo6Q2hpbGRGcmFtZSAqRnJhbWU6OmNoaWxk
RnJhbWUoIGNvbnN0IFFPYmplY3QgKm9iaiApCiB7CiAgICAgYXNzZXJ0KCBvYmotPmluaGVyaXRz
KCAiS1BhcnRzOjpSZWFkT25seVBhcnQiICkgKTsKICAgICBjb25zdCBSZWFkT25seVBhcnQgKnBh
cnQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZWFkT25seVBhcnQgKj4oIG9iaiApOwpAQCAtMjA3NCwy
MiArMjA0NywyMiBAQCBraHRtbDo6Q2hpbGRGcmFtZSAqS0hUTUxQYXJ0OjpjaGlsZEZyYW1lCiAg
ICAgcmV0dXJuIDBMOwogfQogCi1LSFRNTFBhcnQgKktIVE1MUGFydDo6ZmluZEZyYW1lKCBjb25z
dCBRU3RyaW5nICZmICkKK0ZyYW1lICpGcmFtZTo6ZmluZEZyYW1lKCBjb25zdCBRU3RyaW5nICZm
ICkKIHsKIAogICAvLyAjIyMgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvYXBwZW5kaXgvbm90
ZXMuaHRtbCNub3Rlcy1mcmFtZXMKICAgQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuZmlu
ZCggZiApOwogICBpZiAoIGl0ID09IGQtPm1fZnJhbWVzLmVuZCgpICkKICAgewotICAgIC8va2RE
ZWJ1ZygpIDw8ICJLSFRNTFBhcnQ6OmZpbmRGcmFtZSBmcmFtZSAiIDw8IGYgPDwgIiBub3QgZm91
bmQiIDw8IGVuZGw7CisgICAgLy9rZERlYnVnKCkgPDwgIkZyYW1lOjpmaW5kRnJhbWUgZnJhbWUg
IiA8PCBmIDw8ICIgbm90IGZvdW5kIiA8PCBlbmRsOwogICAgIHJldHVybiAwTDsKICAgfQogICBl
bHNlIHsKICAgICBLUGFydHM6OlJlYWRPbmx5UGFydCAqcCA9ICgqaXQpLm1fcGFydDsKLSAgICBp
ZiAoIHAgJiYgcC0+aW5oZXJpdHMoICJLSFRNTFBhcnQiICkpCisgICAgaWYgKCBwICYmIHAtPmlu
aGVyaXRzKCAiRnJhbWUiICkpCiAgICAgewotICAgICAgLy9rZERlYnVnKCkgPDwgIktIVE1MUGFy
dDo6ZmluZEZyYW1lIGZyYW1lICIgPDwgZiA8PCAiIGlzIGEgS0hUTUxQYXJ0LCBvayIgPDwgZW5k
bDsKLSAgICAgIHJldHVybiAoS0hUTUxQYXJ0KilwOworICAgICAgLy9rZERlYnVnKCkgPDwgIkZy
YW1lOjpmaW5kRnJhbWUgZnJhbWUgIiA8PCBmIDw8ICIgaXMgYSBGcmFtZSwgb2siIDw8IGVuZGw7
CisgICAgICByZXR1cm4gKEZyYW1lKilwOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMjA5
OSw3ICsyMDcyLDcgQEAgS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6OmZpbmRGcmFtZSggY29uc3QgUQog
fQogCiAKLWJvb2wgS0hUTUxQYXJ0OjpmcmFtZUV4aXN0cyggY29uc3QgUVN0cmluZyAmZnJhbWVO
YW1lICkKK2Jvb2wgRnJhbWU6OmZyYW1lRXhpc3RzKCBjb25zdCBRU3RyaW5nICZmcmFtZU5hbWUg
KQogewogICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5maW5kKCBmcmFtZU5hbWUgKTsK
ICAgaWYgKCBpdCA9PSBkLT5tX2ZyYW1lcy5lbmQoKSApCkBAIC0yMTExLDE1ICsyMDg0LDE1IEBA
IGJvb2wgS0hUTUxQYXJ0OjpmcmFtZUV4aXN0cyggY29uc3QgUVN0cmkKICAgcmV0dXJuICghKCpp
dCkubV9mcmFtZS5pc051bGwoKSk7CiB9CiAKLUtIVE1MUGFydCAqS0hUTUxQYXJ0OjpwYXJlbnRQ
YXJ0KCkgY29uc3QKK0ZyYW1lICpGcmFtZTo6cGFyZW50RnJhbWUoKSBjb25zdAogewotICBpZiAo
ICFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmluaGVyaXRzKCAiS0hUTUxQYXJ0IiApICkKKyAgaWYg
KCAhcGFyZW50KCkgfHwgIXBhcmVudCgpLT5pbmhlcml0cyggIkZyYW1lIiApICkKICAgICByZXR1
cm4gMEw7CiAKLSAgcmV0dXJuIChLSFRNTFBhcnQgKilwYXJlbnQoKTsKKyAgcmV0dXJuIChGcmFt
ZSAqKXBhcmVudCgpOwogfQogCi1pbnQgS0hUTUxQYXJ0Ojp6b29tRmFjdG9yKCkgY29uc3QKK2lu
dCBGcmFtZTo6em9vbUZhY3RvcigpIGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX3pvb21GYWN0b3I7
CiB9CkBAIC0yMTMwLDcgKzIxMDMsNyBAQCBzdGF0aWMgY29uc3QgaW50IHpvb21TaXplQ291bnQg
PSAoc2l6ZW9mCiBzdGF0aWMgY29uc3QgaW50IG1pblpvb20gPSAyMDsKIHN0YXRpYyBjb25zdCBp
bnQgbWF4Wm9vbSA9IDMwMDsKIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3RJbmNab29tKCkKK3ZvaWQg
RnJhbWU6OnNsb3RJbmNab29tKCkKIHsKICAgaW50IHpvb21GYWN0b3IgPSBkLT5tX3pvb21GYWN0
b3I7CiAKQEAgLTIxNDUsNyArMjExOCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90SW5jWm9vbSgp
CiAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3REZWNab29tKCkKK3ZvaWQgRnJhbWU6OnNs
b3REZWNab29tKCkKIHsKICAgICBpbnQgem9vbUZhY3RvciA9IGQtPm1fem9vbUZhY3RvcjsKICAg
ICBpZiAoem9vbUZhY3RvciA+IG1pblpvb20pIHsKQEAgLTIxNTksNyArMjEzMiw3IEBAIHZvaWQg
S0hUTUxQYXJ0OjpzbG90RGVjWm9vbSgpCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0
Wm9vbUZhY3RvciAoaW50IHBlcmNlbnQpCit2b2lkIEZyYW1lOjpzZXRab29tRmFjdG9yIChpbnQg
cGVyY2VudCkKIHsKICAgCiAgIGlmIChkLT5tX3pvb21GYWN0b3IgPT0gcGVyY2VudCkgcmV0dXJu
OwpAQCAtMjE3Miw5ICsyMTQ1LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldFpvb21GYWN0b3IgKGlu
dCBwZXJjZQogICBDb25zdEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5iZWdpbigpOwogICBDb25z
dEZyYW1lSXQgZW5kID0gZC0+bV9mcmFtZXMuZW5kKCk7CiAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQgKQotICAgIGlmICggISggKml0ICkubV9wYXJ0LmlzTnVsbCgpICYmICggKml0ICkubV9wYXJ0
LT5pbmhlcml0cyggIktIVE1MUGFydCIgKSApIHsKKyAgICBpZiAoICEoICppdCApLm1fcGFydC5p
c051bGwoKSAmJiAoICppdCApLm1fcGFydC0+aW5oZXJpdHMoICJGcmFtZSIgKSApIHsKICAgICAg
IEtQYXJ0czo6UmVhZE9ubHlQYXJ0KiBwID0gKCAqaXQgKS5tX3BhcnQ7Ci0gICAgICBzdGF0aWNf
Y2FzdDxLSFRNTFBhcnQqPiggcCApLT5zZXRab29tRmFjdG9yKGQtPm1fem9vbUZhY3Rvcik7Cisg
ICAgICBzdGF0aWNfY2FzdDxGcmFtZSo+KCBwICktPnNldFpvb21GYWN0b3IoZC0+bV96b29tRmFj
dG9yKTsKICAgICB9CiAKIApAQCAtMjE4Miw0MCArMjE1NSw0MCBAQCB2b2lkIEtIVE1MUGFydDo6
c2V0Wm9vbUZhY3RvciAoaW50IHBlcmNlCiAgICAgdmlldygpLT5sYXlvdXQoKTsKIH0KIAotdm9p
ZCBLSFRNTFBhcnQ6OnNldEpTU3RhdHVzQmFyVGV4dCggY29uc3QgUVN0cmluZyAmdGV4dCApCit2
b2lkIEZyYW1lOjpzZXRKU1N0YXR1c0JhclRleHQoIGNvbnN0IFFTdHJpbmcgJnRleHQgKQogewog
ICAgZC0+bV9ranNTdGF0dXNCYXJUZXh0ID0gdGV4dDsKICAgIGVtaXQgc2V0U3RhdHVzQmFyVGV4
dCggZC0+bV9ranNTdGF0dXNCYXJUZXh0ICk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZXRKU0Rl
ZmF1bHRTdGF0dXNCYXJUZXh0KCBjb25zdCBRU3RyaW5nICZ0ZXh0ICkKK3ZvaWQgRnJhbWU6OnNl
dEpTRGVmYXVsdFN0YXR1c0JhclRleHQoIGNvbnN0IFFTdHJpbmcgJnRleHQgKQogewogICAgZC0+
bV9ranNEZWZhdWx0U3RhdHVzQmFyVGV4dCA9IHRleHQ7CiAgICBlbWl0IHNldFN0YXR1c0JhclRl
eHQoIGQtPm1fa2pzRGVmYXVsdFN0YXR1c0JhclRleHQgKTsKIH0KIAotUVN0cmluZyBLSFRNTFBh
cnQ6OmpzU3RhdHVzQmFyVGV4dCgpIGNvbnN0CitRU3RyaW5nIEZyYW1lOjpqc1N0YXR1c0JhclRl
eHQoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2tqc1N0YXR1c0JhclRleHQ7CiB9CiAKLVFT
dHJpbmcgS0hUTUxQYXJ0Ojpqc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkgY29uc3QKK1FTdHJpbmcg
RnJhbWU6OmpzRGVmYXVsdFN0YXR1c0JhclRleHQoKSBjb25zdAogewogICAgcmV0dXJuIGQtPm1f
a2pzRGVmYXVsdFN0YXR1c0JhclRleHQ7CiB9CiAKLVFTdHJpbmcgS0hUTUxQYXJ0OjpyZWZlcnJl
cigpIGNvbnN0CitRU3RyaW5nIEZyYW1lOjpyZWZlcnJlcigpIGNvbnN0CiB7CiAgICByZXR1cm4g
ZC0+bV9yZWZlcnJlcjsKIH0KIAotUVN0cmluZyBLSFRNTFBhcnQ6Omxhc3RNb2RpZmllZCgpIGNv
bnN0CitRU3RyaW5nIEZyYW1lOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewogICByZXR1cm4gZC0+
bV9sYXN0TW9kaWZpZWQ7CiB9CiAKIAotdm9pZCBLSFRNTFBhcnQ6OnJlcGFyc2VDb25maWd1cmF0
aW9uKCkKK3ZvaWQgRnJhbWU6OnJlcGFyc2VDb25maWd1cmF0aW9uKCkKIHsKICAgc2V0QXV0b2xv
YWRJbWFnZXMoIGQtPm1fc2V0dGluZ3MtPmF1dG9Mb2FkSW1hZ2VzKCkgKTsKICAgaWYgKGQtPm1f
ZG9jKQpAQCAtMjIzNCw3ICsyMjA3LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnJlcGFyc2VDb25maWd1
cmF0aW9uKCkKICAgaWYoZC0+bV9kb2MpIGQtPm1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7
CiB9CiAKLVFTdHJpbmdMaXN0IEtIVE1MUGFydDo6ZnJhbWVOYW1lcygpIGNvbnN0CitRU3RyaW5n
TGlzdCBGcmFtZTo6ZnJhbWVOYW1lcygpIGNvbnN0CiB7CiAgIFFTdHJpbmdMaXN0IHJlczsKIApA
QCAtMjI0Nyw3ICsyMjIwLDcgQEAgUVN0cmluZ0xpc3QgS0hUTUxQYXJ0OjpmcmFtZU5hbWVzKCkg
Y29ucwogICByZXR1cm4gcmVzOwogfQogCi1RUHRyTGlzdDxLUGFydHM6OlJlYWRPbmx5UGFydD4g
S0hUTUxQYXJ0OjpmcmFtZXMoKSBjb25zdAorUVB0ckxpc3Q8S1BhcnRzOjpSZWFkT25seVBhcnQ+
IEZyYW1lOjpmcmFtZXMoKSBjb25zdAogewogICBRUHRyTGlzdDxLUGFydHM6OlJlYWRPbmx5UGFy
dD4gcmVzOwogCkBAIC0yMjYwLDMzICsyMjMzLDMzIEBAIFFQdHJMaXN0PEtQYXJ0czo6UmVhZE9u
bHlQYXJ0PiBLSFRNTFBhcnQKICAgcmV0dXJuIHJlczsKIH0KIAotS0hUTUxQYXJ0ICpLSFRNTFBh
cnQ6OmNoaWxkRnJhbWVOYW1lZChjb25zdCBRU3RyaW5nICZuYW1lKSBjb25zdAorRnJhbWUgKkZy
YW1lOjpjaGlsZEZyYW1lTmFtZWQoY29uc3QgUVN0cmluZyAmbmFtZSkgY29uc3QKIHsKICAgRnJh
bWVMaXN0OjpJdGVyYXRvciBpdCA9IGQtPm1fZnJhbWVzLmZpbmQobmFtZSk7CiAgIGlmIChpdCAh
PSBkLT5tX2ZyYW1lcy5lbmQoKSkKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+
KCYqKCppdCkubV9wYXJ0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oJiooKml0
KS5tX3BhcnQpOwogICByZXR1cm4gTlVMTDsKIH0KIAogCiAKLXZvaWQgS0hUTUxQYXJ0OjpzZXRE
TkRFbmFibGVkKCBib29sIGIgKQordm9pZCBGcmFtZTo6c2V0RE5ERW5hYmxlZCggYm9vbCBiICkK
IHsKICAgZC0+bV9iRG5kID0gYjsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OmRuZEVuYWJsZWQoKSBj
b25zdAorYm9vbCBGcmFtZTo6ZG5kRW5hYmxlZCgpIGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX2JE
bmQ7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUoRE9NOjpOb2RlSW1w
bCAqbm9kZSwgaW50IHgsIGludCB5KSBjb25zdAorYm9vbCBGcmFtZTo6c2hvdWxkRHJhZ0F1dG9O
b2RlKERPTTo6Tm9kZUltcGwgKm5vZGUsIGludCB4LCBpbnQgeSkgY29uc3QKIHsKICAgICAvLyBO
byBLREUgaW1wbCB5ZXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0Ojpj
dXN0b21FdmVudCggUUN1c3RvbUV2ZW50ICpldmVudCApCit2b2lkIEZyYW1lOjpjdXN0b21FdmVu
dCggUUN1c3RvbUV2ZW50ICpldmVudCApCiB7CiAgIGlmICgga2h0bWw6Ok1vdXNlUHJlc3NFdmVu
dDo6dGVzdCggZXZlbnQgKSApCiAgIHsKQEAgLTIzMjEsNyArMjI5NCw3IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpjdXN0b21FdmVudCggUUN1c3RvbUV2ZW4KICAgS1BhcnRzOjpSZWFkT25seVBhcnQ6OmN1
c3RvbUV2ZW50KCBldmVudCApOwogfQogCi1ib29sIEtIVE1MUGFydDo6aXNQb2ludEluc2lkZVNl
bGVjdGlvbihpbnQgeCwgaW50IHkpCitib29sIEZyYW1lOjppc1BvaW50SW5zaWRlU2VsZWN0aW9u
KGludCB4LCBpbnQgeSkKIHsKICAgICAvLyBUcmVhdCBhIGNvbGxhcHNlZCBzZWxlY3Rpb24gbGlr
ZSBubyBzZWxlY3Rpb24uCiAgICAgaWYgKCFkLT5tX3NlbGVjdGlvbi5pc1JhbmdlKCkpCkBAIC0y
MzU2LDcgKzIzMjksNyBAQCBib29sIEtIVE1MUGFydDo6aXNQb2ludEluc2lkZVNlbGVjdGlvbihp
CiAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RDbG9zZXN0V29y
ZEZyb21Nb3VzZUV2ZW50KFFNb3VzZUV2ZW50ICptb3VzZSwgTm9kZUltcGwgKmlubmVyTm9kZSwg
aW50IHgsIGludCB5KQordm9pZCBGcmFtZTo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VFdmVu
dChRTW91c2VFdmVudCAqbW91c2UsIE5vZGVJbXBsICppbm5lck5vZGUsIGludCB4LCBpbnQgeSkK
IHsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKIApAQCAtMjM3OSw3ICsyMzUy
LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdQogICAgIH0KIH0K
IAotdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlUHJlc3NFdmVudERvdWJsZUNsaWNrKGtodG1s
OjpNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQordm9pZCBGcmFtZTo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50RG91YmxlQ2xpY2soa2h0bWw6Ok1vdXNlUHJlc3NFdmVudCAqZXZlbnQpCiB7CiAgICAgaWYg
KGV2ZW50LT5xbW91c2VFdmVudCgpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKQEAgLTIzOTUsNyArMjM2OCw3IEBAIHZvaWQg
S0hUTUxQYXJ0OjpoYW5kbGVNb3VzZVByZXNzRXZlbnREb3UKICAgICB9CiB9CiAKLXZvaWQgS0hU
TUxQYXJ0OjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhraHRtbDo6TW91c2VQcmVz
c0V2ZW50ICpldmVudCkKK3ZvaWQgRnJhbWU6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNs
aWNrKGtodG1sOjpNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQogewogICAgIFFNb3VzZUV2ZW50ICpt
b3VzZSA9IGV2ZW50LT5xbW91c2VFdmVudCgpOwogICAgIE5vZGVJbXBsICppbm5lck5vZGUgPSBl
dmVudC0+aW5uZXJOb2RlKCk7CkBAIC0yNDIwLDcgKzIzOTMsNyBAQCB2b2lkIEtIVE1MUGFydDo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soa2h0bWw6Ok1vdXNlUHJlc3NFdmVudCAqZXZl
bnQpCit2b2lkIEZyYW1lOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhraHRtbDo6
TW91c2VQcmVzc0V2ZW50ICpldmVudCkKIHsKICAgICBRTW91c2VFdmVudCAqbW91c2UgPSBldmVu
dC0+cW1vdXNlRXZlbnQoKTsKICAgICBOb2RlSW1wbCAqaW5uZXJOb2RlID0gZXZlbnQtPmlubmVy
Tm9kZSgpOwpAQCAtMjQ3NSw3ICsyNDQ4LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNl
UHJlc3NFdmVudFNpbgogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VQcmVz
c0V2ZW50KGtodG1sOjpNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQordm9pZCBGcmFtZTo6a2h0bWxN
b3VzZVByZXNzRXZlbnQoa2h0bWw6Ok1vdXNlUHJlc3NFdmVudCAqZXZlbnQpCiB7CiAgICAgRE9N
OjpET01TdHJpbmcgdXJsID0gZXZlbnQtPnVybCgpOwogICAgIFFNb3VzZUV2ZW50ICptb3VzZSA9
IGV2ZW50LT5xbW91c2VFdmVudCgpOwpAQCAtMjUxNiwxMiArMjQ4OSwxMiBAQCB2b2lkIEtIVE1M
UGFydDo6a2h0bWxNb3VzZVByZXNzRXZlbnQoa2h0CiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFy
dDo6a2h0bWxNb3VzZURvdWJsZUNsaWNrRXZlbnQoIGtodG1sOjpNb3VzZURvdWJsZUNsaWNrRXZl
bnQgKmV2ZW50KQordm9pZCBGcmFtZTo6a2h0bWxNb3VzZURvdWJsZUNsaWNrRXZlbnQoIGtodG1s
OjpNb3VzZURvdWJsZUNsaWNrRXZlbnQgKmV2ZW50KQogewogfQogCiAKLXZvaWQgS0hUTUxQYXJ0
OjpoYW5kbGVNb3VzZU1vdmVFdmVudFNlbGVjdGlvbihraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2
ZW50KQordm9pZCBGcmFtZTo6aGFuZGxlTW91c2VNb3ZlRXZlbnRTZWxlY3Rpb24oa2h0bWw6Ok1v
dXNlTW92ZUV2ZW50ICpldmVudCkKIHsKICAgICAvLyBNb3VzZSBub3QgcHJlc3NlZC4gRG8gbm90
aGluZy4KICAgICBpZiAoIWQtPm1fYk1vdXNlUHJlc3NlZCkKQEAgLTI1NzMsMTIgKzI1NDYsMTIg
QEAgdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlTW92ZUV2ZW50U2VsZQogI2VuZGlmIC8vIEtI
VE1MX05PX1NFTEVDVElPTgogfQogCi12b2lkIEtIVE1MUGFydDo6a2h0bWxNb3VzZU1vdmVFdmVu
dChraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2ZW50KQordm9pZCBGcmFtZTo6a2h0bWxNb3VzZU1v
dmVFdmVudChraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2ZW50KQogewogICAgIGhhbmRsZU1vdXNl
TW92ZUV2ZW50U2VsZWN0aW9uKGV2ZW50KTsJCQogfQogCi12b2lkIEtIVE1MUGFydDo6a2h0bWxN
b3VzZVJlbGVhc2VFdmVudCgga2h0bWw6Ok1vdXNlUmVsZWFzZUV2ZW50ICpldmVudCApCit2b2lk
IEZyYW1lOjpraHRtbE1vdXNlUmVsZWFzZUV2ZW50KCBraHRtbDo6TW91c2VSZWxlYXNlRXZlbnQg
KmV2ZW50ICkKIHsKICAgICBpZiAoZC0+bV9iTW91c2VQcmVzc2VkKQogICAgICAgICBzdG9wQXV0
b1Njcm9sbCgpOwpAQCAtMjY1MywyMSArMjYyNiwyMSBAQCB2b2lkIEtIVE1MUGFydDo6a2h0bWxN
b3VzZVJlbGVhc2VFdmVudCggCiAjZW5kaWYgLy8gS0hUTUxfTk9fU0VMRUNUSU9OCiB9CiAKLXZv
aWQgS0hUTUxQYXJ0OjpraHRtbERyYXdDb250ZW50c0V2ZW50KCBraHRtbDo6RHJhd0NvbnRlbnRz
RXZlbnQgKiApCit2b2lkIEZyYW1lOjpraHRtbERyYXdDb250ZW50c0V2ZW50KCBraHRtbDo6RHJh
d0NvbnRlbnRzRXZlbnQgKiApCiB7CiB9CiAKIAotdm9pZCBLSFRNTFBhcnQ6OnN0YXJ0QXV0b1Nj
cm9sbCgpCit2b2lkIEZyYW1lOjpzdGFydEF1dG9TY3JvbGwoKQogewogfQogCi12b2lkIEtIVE1M
UGFydDo6c3RvcEF1dG9TY3JvbGwoKQordm9pZCBGcmFtZTo6c3RvcEF1dG9TY3JvbGwoKQogewog
fQogCiAKLXZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RBbGwoKQordm9pZCBGcmFtZTo6c2VsZWN0QWxs
KCkKIHsKICAgICBpZiAoIWQtPm1fZG9jKQogICAgICAgICByZXR1cm47CkBAIC0yNjc5LDcgKzI2
NTIsNyBAQCB2b2lkIEtIVE1MUGFydDo6c2VsZWN0QWxsKCkKICAgICBzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogfQogCi1ib29sIEtIVE1MUGFydDo6c2VsZWN0
Q29udGVudHNPZk5vZGUoTm9kZUltcGwqIG5vZGUpCitib29sIEZyYW1lOjpzZWxlY3RDb250ZW50
c09mTm9kZShOb2RlSW1wbCogbm9kZSkKIHsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9
IFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCksIGtodG1sOjpET1dOU1RSRUFN
LCBQb3NpdGlvbihub2RlLCBub2RlLT5tYXhEZWVwT2Zmc2V0KCkpLCBraHRtbDo6RE9XTlNUUkVB
TSk7ICAgIAogICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgewpAQCAtMjY4OSwz
NCArMjY2MiwzNCBAQCBib29sIEtIVE1MUGFydDo6c2VsZWN0Q29udGVudHNPZk5vZGUoTm9kCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld3NlbGVjdGlvbikgY29uc3QKK2Jvb2wg
RnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZu
ZXdzZWxlY3Rpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5zdGFy
dEFmZmluaXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gTWFjKHRoaXMpLT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oZC0+bV9zZWxlY3Rpb24sIG5ld3NlbGVjdGlvbiwgbmV3c2VsZWN0aW9uLnN0YXJ0
QWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCi1ib29sIEtIVE1MUGFydDo6c2hvdWxkQmVnaW5FZGl0
aW5nKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpIGNvbnN0Citib29sIEZyYW1lOjpzaG91bGRCZWdp
bkVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgUmFuZ2VJbXBs
ICpyYW5nZSkgY29uc3QKK2Jvb2wgRnJhbWU6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgUmFuZ2VJ
bXBsICpyYW5nZSkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBLSFRNTFBh
cnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgCitib29sIEZyYW1lOjppc0NvbnRlbnRFZGl0
YWJsZSgpIGNvbnN0IAogewogICAgIGlmICghZC0+bV9kb2MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gZC0+bV9kb2MtPmluRGVzaWduTW9kZSgpOwogfQogCi1FZGl0Q29tbWFu
ZFB0ciBLSFRNTFBhcnQ6Omxhc3RFZGl0Q29tbWFuZCgpCitFZGl0Q29tbWFuZFB0ciBGcmFtZTo6
bGFzdEVkaXRDb21tYW5kKCkKIHsKICAgICByZXR1cm4gZC0+bV9sYXN0RWRpdENvbW1hbmQ7CiB9
CiAKLXZvaWQgS0hUTUxQYXJ0OjphcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAmY21kKQor
dm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkKIHsKICAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSkpIHsKICAgICAg
ICAgc2V0U2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOwpAQCAtMjc0MCwz
OCArMjcxMywzOCBAQCB2b2lkIEtIVE1MUGFydDo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hCiAg
ICAgZWxzZSB7CiAgICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgYSBuZXcgdW5kbyBjb21tYW5kIGlm
IHRoZSBjb21tYW5kIHBhc3NlZCBpbiBpcwogICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUg
bGFzdCBjb21tYW5kCi0gICAgICAgIEtXUSh0aGlzKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhj
bWQpOworICAgICAgICBNYWModGhpcyktPnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY21kKTsKICAg
ICAgICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBjbWQ7CiAgICAgfQotICAgIEtXUSh0aGlzKS0+
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CisgICAgTWFjKHRoaXMpLT5yZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnVuYXBwbGllZEVkaXRpbmcoRWRp
dENvbW1hbmRQdHIgJmNtZCkKK3ZvaWQgRnJhbWU6OnVuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1h
bmRQdHIgJmNtZCkKIHsKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5zdGFydGlu
Z1NlbGVjdGlvbigpKSkgewogICAgICAgICBzZXRTZWxlY3Rpb24oY21kLnN0YXJ0aW5nU2VsZWN0
aW9uKCksIHRydWUpOwogICAgIH0KLSAgICBLV1EodGhpcyktPnJlZ2lzdGVyQ29tbWFuZEZvclJl
ZG8oY21kKTsKLSAgICBLV1EodGhpcyktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOworICAg
IE1hYyh0aGlzKS0+cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjbWQpOworICAgIE1hYyh0aGlzKS0+
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiAgICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBF
ZGl0Q29tbWFuZFB0cjo6ZW1wdHlDb21tYW5kKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpyZWFw
cGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kUHRyICZjbWQpCit2b2lkIEZyYW1lOjpyZWFwcGxpZWRF
ZGl0aW5nKEVkaXRDb21tYW5kUHRyICZjbWQpCiB7CiAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVj
dGlvbihjbWQuZW5kaW5nU2VsZWN0aW9uKCkpKSB7CiAgICAgICAgIHNldFNlbGVjdGlvbihjbWQu
ZW5kaW5nU2VsZWN0aW9uKCksIHRydWUpOwogICAgIH0KLSAgICBLV1EodGhpcyktPnJlZ2lzdGVy
Q29tbWFuZEZvclVuZG8oY21kKTsKLSAgICBLV1EodGhpcyktPnJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cygpOworICAgIE1hYyh0aGlzKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjbWQpOworICAg
IE1hYyh0aGlzKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiAgICAgZC0+bV9sYXN0RWRp
dENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0cjo6ZW1wdHlDb21tYW5kKCk7CiB9CiAKLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqS0hUTUxQYXJ0Ojp0eXBpbmdTdHlsZSgpIGNvbnN0CitD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkZyYW1lOjp0eXBpbmdTdHlsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGQtPm1fdHlwaW5nU3R5bGU7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0Ojpz
ZXRUeXBpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKQordm9p
ZCBGcmFtZTo6c2V0VHlwaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpz
dHlsZSkKIHsKICAgICBpZiAoZC0+bV90eXBpbmdTdHlsZSA9PSBzdHlsZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjc4NCwxMyArMjc1NywxMyBAQCB2b2lkIEtIVE1MUGFydDo6c2V0VHlwaW5nU3R5
bGUoQ1NTTXV0YWJsCiAgICAgICAgIG9sZC0+ZGVyZWYoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6
OmNsZWFyVHlwaW5nU3R5bGUoKQordm9pZCBGcmFtZTo6Y2xlYXJUeXBpbmdTdHlsZSgpCiB7CiAg
ICAgc2V0VHlwaW5nU3R5bGUoMCk7CiB9CiAKIAotUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRl
U2NyaXB0KFFTdHJpbmcgZmlsZW5hbWUsIGludCBiYXNlTGluZSwgTm9kZUltcGwgKm4sIGNvbnN0
IFFTdHJpbmcgJnNjcmlwdCkKK1FWYXJpYW50IEZyYW1lOjpleGVjdXRlU2NyaXB0KFFTdHJpbmcg
ZmlsZW5hbWUsIGludCBiYXNlTGluZSwgTm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlw
dCkKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQogICBrZERlYnVnKDYwNzApIDw8ICJleGVjdXRlU2Ny
aXB0OiBmaWxlbmFtZT0iIDw8IGZpbGVuYW1lIDw8ICIgYmFzZUxpbmU9IiA8PCBiYXNlTGluZSA8
PCAiIHNjcmlwdD0iIDw8IHNjcmlwdCA8PCBlbmRsOwpAQCAtMjgwNCwxMjcgKzI3NzcsMTI3IEBA
IFFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdChRU3RyaW4KICAgcmV0dXJuIHJldDsK
IH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJ0UmVtb3ZlZChLUGFydHM6OlBhcnQgKnBhcnQp
Cit2b2lkIEZyYW1lOjpzbG90UGFydFJlbW92ZWQoS1BhcnRzOjpQYXJ0ICpwYXJ0KQogewogICAg
IGlmIChwYXJ0ID09IGQtPm1fYWN0aXZlRnJhbWUpCiAgICAgICAgIGQtPm1fYWN0aXZlRnJhbWUg
PSAwOwogfQogCi1ET006OkV2ZW50TGlzdGVuZXIgKktIVE1MUGFydDo6Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nJiBjb2RlLCBOb2RlSW1wbCAqbm9kZSkKK0RPTTo6RXZl
bnRMaXN0ZW5lciAqRnJhbWU6OmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmlu
ZyYgY29kZSwgTm9kZUltcGwgKm5vZGUpCiB7CiAgICAgaWYgKEtKU1Byb3h5SW1wbCAqcHJveHkg
PSBqU2NyaXB0KCkpCiAgICAgICAgIHJldHVybiBwcm94eS0+Y3JlYXRlSFRNTEV2ZW50SGFuZGxl
cihjb2RlLCBub2RlKTsKICAgICByZXR1cm4gMDsKIH0KIAotS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6
Om9wZW5lcigpCitGcmFtZSAqRnJhbWU6Om9wZW5lcigpCiB7CiAgICAgcmV0dXJuIGQtPm1fb3Bl
bmVyOwogfQogCi12b2lkIEtIVE1MUGFydDo6c2V0T3BlbmVyKEtIVE1MUGFydCAqX29wZW5lcikK
K3ZvaWQgRnJhbWU6OnNldE9wZW5lcihGcmFtZSAqX29wZW5lcikKIHsKICAgICBkLT5tX29wZW5l
ciA9IF9vcGVuZXI7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpvcGVuZWRCeUpTKCkKK2Jvb2wgRnJh
bWU6Om9wZW5lZEJ5SlMoKQogewogICAgIHJldHVybiBkLT5tX29wZW5lZEJ5SlM7CiB9CiAKLXZv
aWQgS0hUTUxQYXJ0OjpzZXRPcGVuZWRCeUpTKGJvb2wgX29wZW5lZEJ5SlMpCit2b2lkIEZyYW1l
OjpzZXRPcGVuZWRCeUpTKGJvb2wgX29wZW5lZEJ5SlMpCiB7CiAgICAgZC0+bV9vcGVuZWRCeUpT
ID0gX29wZW5lZEJ5SlM7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpwcmVsb2FkU3R5bGVTaGVldChj
b25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnN0eWxlc2hlZXQpCit2b2lkIEZyYW1l
OjpwcmVsb2FkU3R5bGVTaGVldChjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnN0
eWxlc2hlZXQpCiB7CiAgICAga2h0bWw6OkNhY2hlOjpwcmVsb2FkU3R5bGVTaGVldCh1cmwsIHN0
eWxlc2hlZXQpOwogfQogCi12b2lkIEtIVE1MUGFydDo6cHJlbG9hZFNjcmlwdChjb25zdCBRU3Ry
aW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCkKK3ZvaWQgRnJhbWU6OnByZWxvYWRTY3Jp
cHQoY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZzY3JpcHQpCiB7CiAgICAga2h0
bWw6OkNhY2hlOjpwcmVsb2FkU2NyaXB0KHVybCwgc2NyaXB0KTsKIH0KIAogCi1ib29sIEtIVE1M
UGFydDo6cmVzdG9yZWQoKSBjb25zdAorYm9vbCBGcmFtZTo6cmVzdG9yZWQoKSBjb25zdAogewog
ICByZXR1cm4gZC0+bV9yZXN0b3JlZDsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OmluY3JlbWVudEZy
YW1lQ291bnQoKQordm9pZCBGcmFtZTo6aW5jcmVtZW50RnJhbWVDb3VudCgpCiB7CiAgIGZyYW1l
Q291bnQrKzsKLSAgaWYgKHBhcmVudFBhcnQoKSkgewotICAgIHBhcmVudFBhcnQoKS0+aW5jcmVt
ZW50RnJhbWVDb3VudCgpOworICBpZiAocGFyZW50RnJhbWUoKSkgeworICAgIHBhcmVudEZyYW1l
KCktPmluY3JlbWVudEZyYW1lQ291bnQoKTsKICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6ZGVj
cmVtZW50RnJhbWVDb3VudCgpCit2b2lkIEZyYW1lOjpkZWNyZW1lbnRGcmFtZUNvdW50KCkKIHsK
ICAgZnJhbWVDb3VudC0tOwotICBpZiAocGFyZW50UGFydCgpKSB7Ci0gICAgcGFyZW50UGFydCgp
LT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7CisgIGlmIChwYXJlbnRGcmFtZSgpKSB7CisgICAgcGFy
ZW50RnJhbWUoKS0+ZGVjcmVtZW50RnJhbWVDb3VudCgpOwogICB9CiB9CiAKLWludCBLSFRNTFBh
cnQ6OnRvcExldmVsRnJhbWVDb3VudCgpCitpbnQgRnJhbWU6OnRvcExldmVsRnJhbWVDb3VudCgp
CiB7Ci0gIGlmIChwYXJlbnRQYXJ0KCkpIHsKLSAgICByZXR1cm4gcGFyZW50UGFydCgpLT50b3BM
ZXZlbEZyYW1lQ291bnQoKTsKKyAgaWYgKHBhcmVudEZyYW1lKCkpIHsKKyAgICByZXR1cm4gcGFy
ZW50RnJhbWUoKS0+dG9wTGV2ZWxGcmFtZUNvdW50KCk7CiAgIH0KIAogICByZXR1cm4gZnJhbWVD
b3VudDsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnRhYnNUb0xpbmtzKCkgY29uc3QKK2Jvb2wgRnJh
bWU6OnRhYnNUb0xpbmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBL
SFRNTFBhcnQ6OnRhYnNUb0FsbENvbnRyb2xzKCkgY29uc3QKK2Jvb2wgRnJhbWU6OnRhYnNUb0Fs
bENvbnRyb2xzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLSFRNTFBh
cnQ6OmNvcHlUb1Bhc3RlYm9hcmQoKQordm9pZCBGcmFtZTo6Y29weVRvUGFzdGVib2FyZCgpCiB7
Ci0gICAgS1dRKHRoaXMpLT5pc3N1ZUNvcHlDb21tYW5kKCk7CisgICAgTWFjKHRoaXMpLT5pc3N1
ZUNvcHlDb21tYW5kKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpjdXRUb1Bhc3RlYm9hcmQoKQor
dm9pZCBGcmFtZTo6Y3V0VG9QYXN0ZWJvYXJkKCkKIHsKLSAgICBLV1EodGhpcyktPmlzc3VlQ3V0
Q29tbWFuZCgpOworICAgIE1hYyh0aGlzKS0+aXNzdWVDdXRDb21tYW5kKCk7CiB9CiAKLXZvaWQg
S0hUTUxQYXJ0OjpwYXN0ZUZyb21QYXN0ZWJvYXJkKCkKK3ZvaWQgRnJhbWU6OnBhc3RlRnJvbVBh
c3RlYm9hcmQoKQogewotICAgIEtXUSh0aGlzKS0+aXNzdWVQYXN0ZUNvbW1hbmQoKTsKKyAgICBN
YWModGhpcyktPmlzc3VlUGFzdGVDb21tYW5kKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpwYXN0
ZUFuZE1hdGNoU3R5bGUoKQordm9pZCBGcmFtZTo6cGFzdGVBbmRNYXRjaFN0eWxlKCkKIHsKLSAg
ICBLV1EodGhpcyktPmlzc3VlUGFzdGVBbmRNYXRjaFN0eWxlQ29tbWFuZCgpOworICAgIE1hYyh0
aGlzKS0+aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCk7CiB9CiAKLXZvaWQgS0hUTUxQ
YXJ0Ojp0cmFuc3Bvc2UoKQordm9pZCBGcmFtZTo6dHJhbnNwb3NlKCkKIHsKLSAgICBLV1EodGhp
cyktPmlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOworICAgIE1hYyh0aGlzKS0+aXNzdWVUcmFuc3Bv
c2VDb21tYW5kKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpyZWRvKCkKK3ZvaWQgRnJhbWU6OnJl
ZG8oKQogewotICAgIEtXUSh0aGlzKS0+aXNzdWVSZWRvQ29tbWFuZCgpOworICAgIE1hYyh0aGlz
KS0+aXNzdWVSZWRvQ29tbWFuZCgpOwogfQogCi12b2lkIEtIVE1MUGFydDo6dW5kbygpCit2b2lk
IEZyYW1lOjp1bmRvKCkKIHsKLSAgICBLV1EodGhpcyktPmlzc3VlVW5kb0NvbW1hbmQoKTsKKyAg
ICBNYWModGhpcyktPmlzc3VlVW5kb0NvbW1hbmQoKTsKIH0KIAogCi12b2lkIEtIVE1MUGFydDo6
Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBGcmFtZTo6Y29tcHV0ZUFuZFNldFR5cGlu
Z1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKQogewogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmxlbmd0aCgpID09IDApIHsKICAg
ICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwpAQCAtMjk2MCw3ICsyOTMzLDcgQEAgdm9pZCBLSFRN
TFBhcnQ6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZQogICAgIG11dGFibGVTdHlsZS0+ZGVyZWYo
KTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbklt
cGwgKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit2b2lkIEZyYW1lOjphcHBseVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewogICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkgewogICAgICAgICBjYXNl
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6CkBAIC0yOTc5LDcgKzI5NTIsNyBAQCB2b2lkIEtI
VE1MUGFydDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhCiAgICAgfQogfQogCi12b2lkIEtIVE1M
UGFydDo6YXBwbHlQYXJhZ3JhcGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUs
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3ZvaWQgRnJhbWU6OmFwcGx5UGFyYWdyYXBoU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiB7CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7CiAgICAgICAgIGNhc2Ug
U2VsZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKQEAgLTI5OTUsMjYgKzI5NjgsMjYgQEAgdm9pZCBL
SFRNTFBhcnQ6OmFwcGx5UGFyYWdyYXBoU3R5bGUoQ1NTUwogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgdXBkYXRlU3RhdGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpkZXNpcmVkU3R5
bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmNvbXB1dGVkU3R5bGUsIGJvb2wg
JmF0U3RhcnQsIEtIVE1MUGFydDo6VHJpU3RhdGUgJnN0YXRlKQorc3RhdGljIHZvaWQgdXBkYXRl
U3RhdGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpkZXNpcmVkU3R5bGUsIENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwgKmNvbXB1dGVkU3R5bGUsIGJvb2wgJmF0U3RhcnQs
IEZyYW1lOjpUcmlTdGF0ZSAmc3RhdGUpCiB7CiAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGVuZDsKICAgICBmb3IgKFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1By
b3BlcnR5PiBpdCA9IGRlc2lyZWRTdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIGludCBwcm9wZXJ0eUlEID0gKCppdCkuaWQoKTsKICAgICAgICAgRE9N
U3RyaW5nIGRlc2lyZWRQcm9wZXJ0eSA9IGRlc2lyZWRTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShw
cm9wZXJ0eUlEKTsKICAgICAgICAgRE9NU3RyaW5nIGNvbXB1dGVkUHJvcGVydHkgPSBjb21wdXRl
ZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBLSFRNTFBhcnQ6
OlRyaVN0YXRlIHByb3BlcnR5U3RhdGUgPSBlcXVhbElnbm9yaW5nQ2FzZShkZXNpcmVkUHJvcGVy
dHksIGNvbXB1dGVkUHJvcGVydHkpCi0gICAgICAgICAgICA/IEtIVE1MUGFydDo6dHJ1ZVRyaVN0
YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0YXRlOworICAgICAgICBGcmFtZTo6VHJpU3RhdGUg
cHJvcGVydHlTdGF0ZSA9IGVxdWFsSWdub3JpbmdDYXNlKGRlc2lyZWRQcm9wZXJ0eSwgY29tcHV0
ZWRQcm9wZXJ0eSkKKyAgICAgICAgICAgID8gRnJhbWU6OnRydWVUcmlTdGF0ZSA6IEZyYW1lOjpm
YWxzZVRyaVN0YXRlOwogICAgICAgICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUg
PSBwcm9wZXJ0eVN0YXRlOwogICAgICAgICAgICAgYXRTdGFydCA9IGZhbHNlOwogICAgICAgICB9
IGVsc2UgaWYgKHN0YXRlICE9IHByb3BlcnR5U3RhdGUpIHsKLSAgICAgICAgICAgIHN0YXRlID0g
S0hUTUxQYXJ0OjptaXhlZFRyaVN0YXRlOworICAgICAgICAgICAgc3RhdGUgPSBGcmFtZTo6bWl4
ZWRUcmlTdGF0ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogfQogCi1L
SFRNTFBhcnQ6OlRyaVN0YXRlIEtIVE1MUGFydDo6c2VsZWN0aW9uSGFzU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKnN0eWxlKSBjb25zdAorRnJhbWU6OlRyaVN0YXRlIEZyYW1lOjpzZWxl
Y3Rpb25IYXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUpIGNvbnN0CiB7CiAg
ICAgYm9vbCBhdFN0YXJ0ID0gdHJ1ZTsKICAgICBUcmlTdGF0ZSBzdGF0ZSA9IGZhbHNlVHJpU3Rh
dGU7CkBAIC0zMDUzLDcgKzMwMjYsNyBAQCBLSFRNTFBhcnQ6OlRyaVN0YXRlIEtIVE1MUGFydDo6
c2VsZWN0aW9uCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1ib29sIEtIVE1MUGFydDo6c2VsZWN0
aW9uU3RhcnRIYXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUpIGNvbnN0Citi
b29sIEZyYW1lOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBs
ICpzdHlsZSkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwogICAgIENTU1N0
eWxlRGVjbGFyYXRpb25JbXBsICpzZWxlY3Rpb25TdHlsZSA9IHNlbGVjdGlvbkNvbXB1dGVkU3R5
bGUobm9kZVRvUmVtb3ZlKTsKQEAgLTMwODQsNyArMzA1Nyw3IEBAIGJvb2wgS0hUTUxQYXJ0Ojpz
ZWxlY3Rpb25TdGFydEhhc1N0eWxlKEMKICAgICByZXR1cm4gbWF0Y2g7CiB9CiAKLURPTVN0cmlu
ZyBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKGludCBzdHlsZVBy
b3BlcnR5SUQpIGNvbnN0CitET01TdHJpbmcgRnJhbWU6OnNlbGVjdGlvblN0YXJ0U3R5bGVQcm9w
ZXJ0eVZhbHVlKGludCBzdHlsZVByb3BlcnR5SUQpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKm5v
ZGVUb1JlbW92ZTsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc2VsZWN0aW9uU3R5bGUg
PSBzZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CkBAIC0zMTA0LDcgKzMwNzcs
NyBAQCBET01TdHJpbmcgS0hUTUxQYXJ0OjpzZWxlY3Rpb25TdGFydFN0eWxlCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi1DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhcnQ6
OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZUltcGwgKiZub2RlVG9SZW1vdmUpIGNvbnN0CitD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRT
dHlsZShOb2RlSW1wbCAqJm5vZGVUb1JlbW92ZSkgY29uc3QKIHsKICAgICBub2RlVG9SZW1vdmUg
PSAwOwogCkBAIC0zMTcwLDcgKzMxNDMsNyBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25JbXBsICplCiAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZTsKIH0KIAotdm9pZCBLSFRNTFBh
cnQ6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Cit2b2lkIEZyYW1lOjph
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAogewogICAgIGlmICghZC0+bV9k
b2MpCiAgICAgICAgIHJldHVybjsKQEAgLTMxODIsNyArMzE1NSw3IEBAIHZvaWQgS0hUTUxQYXJ0
OjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUUKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJ0Ojpy
ZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKSBjb25zdAordm9pZCBGcmFtZTo6cmVt
b3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWQtPm1f
ZG9jKQogICAgICAgICByZXR1cm47CkBAIC0zMTk0LDcgKzMxNjcsNyBAQCB2b2lkIEtIVE1MUGFy
dDo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6
YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudEltcGwgKmVsZW1lbnQpIGNvbnN0Cit2
b2lkIEZyYW1lOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50SW1wbCAqZWxlbWVu
dCkgY29uc3QKIHsKICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzIxMSw3ICszMTg0LDcgQEAgdm9pZCBLSFRNTFBhcnQ6
OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZQogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnJl
bW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KEVsZW1lbnRJbXBsICplbGVtZW50KSBjb25zdAor
dm9pZCBGcmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQoRWxlbWVudEltcGwgKmVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMzIsMTMgKzMyMDUsMTMgQEAgdm9pZCBLSFRN
TFBhcnQ6OnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbAogfQogCiAKLWJvb2wgS0hUTUxQYXJ0Ojpp
c0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChjb25zdCBRQ2hhciAmLCBib29sKQorYm9vbCBG
cmFtZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoY29uc3QgUUNoYXIgJiwgYm9vbCkK
IHsKICAgICAvLyBubyBzbWFydCByZXBsYWNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
S0hUTUxQYXJ0Ojpjb25uZWN0Q2hpbGQoY29uc3Qga2h0bWw6OkNoaWxkRnJhbWUgKmNoaWxkKSBj
b25zdAordm9pZCBGcmFtZTo6Y29ubmVjdENoaWxkKGNvbnN0IGtodG1sOjpDaGlsZEZyYW1lICpj
aGlsZCkgY29uc3QKIHsKICAgICBSZWFkT25seVBhcnQgKnBhcnQgPSBjaGlsZC0+bV9wYXJ0Owog
ICAgIGlmIChwYXJ0ICYmIGNoaWxkLT5tX3R5cGUgIT0gQ2hpbGRGcmFtZTo6T2JqZWN0KQpAQCAt
MzI1OCw3ICszMjMxLDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmNvbm5lY3RDaGlsZChjb25zdCBraHRt
bAogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OmRpc2Nvbm5lY3RDaGlsZChjb25zdCBraHRt
bDo6Q2hpbGRGcmFtZSAqY2hpbGQpIGNvbnN0Cit2b2lkIEZyYW1lOjpkaXNjb25uZWN0Q2hpbGQo
Y29uc3Qga2h0bWw6OkNoaWxkRnJhbWUgKmNoaWxkKSBjb25zdAogewogICAgIFJlYWRPbmx5UGFy
dCAqcGFydCA9IGNoaWxkLT5tX3BhcnQ7CiAgICAgaWYgKHBhcnQgJiYgY2hpbGQtPm1fdHlwZSAh
PSBDaGlsZEZyYW1lOjpPYmplY3QpCkBAIC0zMjc4LDcgKzMyNTEsNyBAQCB2b2lkIEtIVE1MUGFy
dDo6ZGlzY29ubmVjdENoaWxkKGNvbnN0IGtoCiAgICAgfQogfQogCi12b2lkIEtIVE1MUGFydDo6
a2VlcEFsaXZlKCkKK3ZvaWQgRnJhbWU6OmtlZXBBbGl2ZSgpCiB7CiAgICAgaWYgKGQtPm1fbGlm
ZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0zMjg2LDcgKzMy
NTksNyBAQCB2b2lkIEtIVE1MUGFydDo6a2VlcEFsaXZlKCkKICAgICBkLT5tX2xpZmVTdXBwb3J0
VGltZXIuc3RhcnQoMCwgdHJ1ZSk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzbG90RW5kTGlmZVN1
cHBvcnQoKQordm9pZCBGcmFtZTo6c2xvdEVuZExpZmVTdXBwb3J0KCkKIHsKICAgICBkLT5tX2xp
ZmVTdXBwb3J0VGltZXIuc3RvcCgpOwogICAgIGRlcmVmKCk7CkBAIC0zMjk3LDEwICszMjcwLDEw
IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90RW5kTGlmZVN1cHBvcnQoKQogLy8gQ2FuJ3QgZG8gdGhp
cyBpbXBsaWNpdGx5IGFzIHBhcnQgb2YgZXZlcnkgc2V0U2VsZWN0aW9uIGNhbGwgYmVjYXVzZSBp
biBzb21lIGNvbnRleHRzIGl0IG1pZ2h0IG5vdCBiZSBnb29kCiAvLyBmb3IgdGhlIGZvY3VzIHRv
IG1vdmUgdG8gYW5vdGhlciBmcmFtZS4gU28gaW5zdGVhZCB3ZSBjYWxsIGl0IGZyb20gcGxhY2Vz
IHdoZXJlIHdlIGFyZSBzZWxlY3Rpbmcgd2l0aCB0aGUKIC8vIG1vdXNlIG9yIHRoZSBrZXlib2Fy
ZCBhZnRlciBzZXR0aW5nIHRoZSBzZWxlY3Rpb24uCi12b2lkIEtIVE1MUGFydDo6c2VsZWN0RnJh
bWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQordm9pZCBGcmFtZTo6c2VsZWN0RnJh
bWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogewogICAgIC8vIEZpbmQgdGhlIHBh
cmVudCBmcmFtZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
Ci0gICAgS0hUTUxQYXJ0ICpwYXJlbnQgPSBwYXJlbnRQYXJ0KCk7CisgICAgRnJhbWUgKnBhcmVu
dCA9IHBhcmVudEZyYW1lKCk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKICAg
ICBLSFRNTFZpZXcgKnBhcmVudFZpZXcgPSBwYXJlbnQtPnZpZXcoKTsKQEAgLTMzMzgsOSArMzMx
MSw5IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmUKICAgICB9CiB9
CiAKLXZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVGYWxsYmFja0NvbnRlbnQoKQordm9pZCBGcmFtZTo6
aGFuZGxlRmFsbGJhY2tDb250ZW50KCkKIHsKLSAgICBLSFRNTFBhcnQgKnBhcmVudCA9IHBhcmVu
dFBhcnQoKTsKKyAgICBGcmFtZSAqcGFyZW50ID0gcGFyZW50RnJhbWUoKTsKICAgICBpZiAoIXBh
cmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENoaWxkRnJhbWUgKmNoaWxkRnJhbWUgPSBwYXJl
bnQtPmNoaWxkRnJhbWUodGhpcyk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtodG1sL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBLSFRNTF9JbmxpbmVUZXh0Qm94X0gKICNk
ZWZpbmUgS0hUTUxfSW5saW5lVGV4dEJveF9ICiAKLSNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIK
KyNpbmNsdWRlICJNYWNGcmFtZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGluZS5o
IgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTExOSw3
ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihRUGFpbnRlciogcCwg
aW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCogZm9udCk7CiAg
ICAgdm9pZCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKFFQYWludGVyKiBwLCBpbnQgdHgsIGlu
dCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250KiBmb250LCBpbnQgc3RhcnRQb3Ms
IGludCBlbmRQb3MpOwogICAgIHZvaWQgcGFpbnRNYXJrZXIoUVBhaW50ZXIqIHAsIGludCBfdHgs
IGludCBfdHksIERPTTo6RG9jdW1lbnRNYXJrZXIgbWFya2VyKTsKLSAgICB2b2lkIHBhaW50TWFy
a2VkVGV4dFVuZGVybGluZShRUGFpbnRlciAqcHQsIGludCBfdHgsIGludCBfdHksIEtXUUtIVE1M
UGFydDo6TWFya2VkVGV4dFVuZGVybGluZSB1bmRlcmxpbmUpOworICAgIHZvaWQgcGFpbnRNYXJr
ZWRUZXh0VW5kZXJsaW5lKFFQYWludGVyICpwdCwgaW50IF90eCwgaW50IF90eSwgTWFjRnJhbWU6
Ok1hcmtlZFRleHRVbmRlcmxpbmUgdW5kZXJsaW5lKTsKICAgICB2aXJ0dWFsIGludCBjYXJldE1p
bk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7Cklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkocmV2aXNpb24gMTE5NjApCisrKyBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QAogI2luY2x1ZGUgPHFzY3JvbGxiYXIuaD4KICNpbmNsdWRlIDxxcHRydmVjdG9yLmg+CiAKLSNp
bmNsdWRlICJLV1FLSFRNTFBhcnQuaCIgLy8gRm9yIERhc2hib2FyZC4KKyNpbmNsdWRlICJNYWNG
cmFtZS5oIiAvLyBGb3IgRGFzaGJvYXJkLgogCiAvLyBUaGVzZSBtYXRjaCB0aGUgbnVtYmVycyB3
ZSB1c2Ugb3ZlciBpbiBXZWJLaXQgKFdlYkZyYW1lVmlldy5tKS4KICNkZWZpbmUgTElORV9TVEVQ
ICAgNDAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDExOTYwKQor
Kysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInht
bC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAia2h0bWxf
cGFydC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAK
ICNpbmNsdWRlIDxrY3Vyc29yLmg+CkBAIC03MzcsMTYgKzczNywxNiBAQCBzdGF0aWMgYm9vbCBp
c1VSTEFsbG93ZWQoRE9NOjpEb2N1bWVudEltCiAgICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0
ZVVSTCh1cmwpKTsKICAgICBuZXdVUkwuc2V0UmVmKFFTdHJpbmc6Om51bGwpOwogICAgIAotICAg
IGlmIChkb2MtPnBhcnQoKS0+dG9wTGV2ZWxGcmFtZUNvdW50KCkgPj0gMjAwKQorICAgIGlmIChk
b2MtPmZyYW1lKCktPnRvcExldmVsRnJhbWVDb3VudCgpID49IDIwMCkKIAlyZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBXZSBhbGxvdyBvbmUgbGV2ZWwgb2Ygc2VsZi1yZWZlcmVuY2UgYmVjYXVzZSBz
b21lIHNpdGVzIGRlcGVuZCBvbiB0aGF0LgogICAgIC8vIEJ1dCB3ZSBkb24ndCBhbGxvdyBtb3Jl
IHRoYW4gb25lLgogICAgIGJvb2wgZm91bmRTZWxmUmVmZXJlbmNlID0gZmFsc2U7Ci0gICAgZm9y
IChLSFRNTFBhcnQgKnBhcnQgPSBkb2MtPnBhcnQoKTsgcGFydDsgcGFydCA9IHBhcnQtPnBhcmVu
dFBhcnQoKSkgewotICAgICAgICBLVVJMIHBhcnRVUkwgPSBwYXJ0LT51cmwoKTsKLSAgICAgICAg
cGFydFVSTC5zZXRSZWYoUVN0cmluZzo6bnVsbCk7Ci0gICAgICAgIGlmIChwYXJ0VVJMID09IG5l
d1VSTCkgeworICAgIGZvciAoRnJhbWUgKmZyYW1lID0gZG9jLT5mcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+cGFyZW50RnJhbWUoKSkgeworICAgICAgICBLVVJMIGZyYW1lVVJMID0gZnJh
bWUtPnVybCgpOworICAgICAgICBmcmFtZVVSTC5zZXRSZWYoUVN0cmluZzo6bnVsbCk7CisgICAg
ICAgIGlmIChmcmFtZVVSTCA9PSBuZXdVUkwpIHsKICAgICAgICAgICAgIGlmIChmb3VuZFNlbGZS
ZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm91
bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgIFFTdHJpbmcgc2VydmljZVR5cGU7CiAgIFFTdHJp
bmdMaXN0IHBhcmFtTmFtZXM7CiAgIFFTdHJpbmdMaXN0IHBhcmFtVmFsdWVzOwotICBLSFRNTFBh
cnQgKnBhcnQgPSBtX3ZpZXctPnBhcnQoKTsKKyAgRnJhbWUgKmZyYW1lID0gbV92aWV3LT5mcmFt
ZSgpOwogCiAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiAKQEAgLTkwMyw3ICs5
MDMsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAgICAg
ICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFzdGF0aWNfY2FzdDxUZXh0SW1wbCo+KGNoaWxk
KS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFj
a0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQotICAgICAgYm9vbCBzdWNjZXNzID0gcGFydC0+cmVx
dWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMgKTsKKyAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5yZXF1ZXN0T2JqZWN0KCB0aGlzLCB1
cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwogICAgICAgaWYgKCFz
dWNjZXNzICYmIG1faGFzRmFsbGJhY2tDb250ZW50KQogICAgICAgICAgIG8tPnJlbmRlckZhbGxi
YWNrQ29udGVudCgpOwogICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShlbWJlZFRh
ZykpIHsKQEAgLTkyNiw3ICs5MjYsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdp
ZGdldCgpCiAgICAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFsdWUoKS5xc3Ry
aW5nKCkpOwogICAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIHBhcnQtPnJlcXVlc3RPYmplY3Qo
IHRoaXMsIHVybCwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzICk7CisgICAg
ICBmcmFtZS0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMgKTsKICAgfSBlbHNlIHsKICAgICAgIGFzc2VydChlbGVtZW50KCktPmhh
c1RhZ05hbWUoaWZyYW1lVGFnKSk7CiAgICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBz
dGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKQEAgLTkzNiwx
MSArOTM2LDExIEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAg
IGlmICh1cmwuaXNFbXB0eSgpKQogCSAgdXJsID0gImFib3V0OmJsYW5rIjsKICAgICAgIEtIVE1M
VmlldyAqdiA9IHN0YXRpY19jYXN0PEtIVE1MVmlldyAqPihtX3ZpZXcpOwotICAgICAgYm9vbCBy
ZXF1ZXN0U3VjY2VlZGVkID0gdi0+cGFydCgpLT5yZXF1ZXN0RnJhbWUoIHRoaXMsIHVybCwgby0+
bV9uYW1lLnFzdHJpbmcoKSwgUVN0cmluZ0xpc3QoKSwgUVN0cmluZ0xpc3QoKSwgdHJ1ZSApOwor
ICAgICAgYm9vbCByZXF1ZXN0U3VjY2VlZGVkID0gdi0+ZnJhbWUoKS0+cmVxdWVzdEZyYW1lKCB0
aGlzLCB1cmwsIG8tPm1fbmFtZS5xc3RyaW5nKCksIFFTdHJpbmdMaXN0KCksIFFTdHJpbmdMaXN0
KCksIHRydWUgKTsKICAgICAgIGlmIChyZXF1ZXN0U3VjY2VlZGVkICYmIHVybCA9PSAiYWJvdXQ6
YmxhbmsiKSB7Ci0JICBLSFRNTFBhcnQgKm5ld1BhcnQgPSB2LT5wYXJ0KCktPmZpbmRGcmFtZSgg
by0+bV9uYW1lLnFzdHJpbmcoKSApOworCSAgRnJhbWUgKm5ld1BhcnQgPSB2LT5mcmFtZSgpLT5m
aW5kRnJhbWUoIG8tPm1fbmFtZS5xc3RyaW5nKCkgKTsKIAkgIGlmIChuZXdQYXJ0ICYmIG5ld1Bh
cnQtPnhtbERvY0ltcGwoKSkgewotCSAgICAgIG5ld1BhcnQtPnhtbERvY0ltcGwoKS0+c2V0QmFz
ZVVSTCggdi0+cGFydCgpLT5iYXNlVVJMKCkudXJsKCkgKTsKKwkgICAgICBuZXdQYXJ0LT54bWxE
b2NJbXBsKCktPnNldEJhc2VVUkwoIHYtPmZyYW1lKCktPmJhc2VVUkwoKS51cmwoKSApOwogCSAg
fQogICAgICAgfQogICB9CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2h0bWwvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lv
biAxMTk2MCkKKysrIGtodG1sL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU2LDEwICsyNTYsMTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5k
ZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBv
ciBub3Qgd2UgaGF2ZSBtYXJrZWQgdGV4dC4KLSAgICBSYW5nZUltcGwgKm1hcmtlZFRleHRSYW5n
ZSA9IEtXUShvYmplY3QoKS0+ZG9jdW1lbnQoKS0+cGFydCgpKS0+bWFya2VkVGV4dFJhbmdlKCk7
CisgICAgUmFuZ2VJbXBsICptYXJrZWRUZXh0UmFuZ2UgPSBNYWMob2JqZWN0KCktPmRvY3VtZW50
KCktPmZyYW1lKCkpLT5tYXJrZWRUZXh0UmFuZ2UoKTsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsK
ICAgICBib29sIGhhdmVNYXJrZWRUZXh0ID0gbWFya2VkVGV4dFJhbmdlICYmIG1hcmtlZFRleHRS
YW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSA9PSBvYmplY3QoKS0+bm9kZSgpOwotICAg
IGJvb2wgbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzID0gS1dRKG9iamVjdCgpLT5kb2N1bWVudCgp
LT5wYXJ0KCkpLT5tYXJrZWRUZXh0VXNlc1VuZGVybGluZXMoKTsKKyAgICBib29sIG1hcmtlZFRl
eHRVc2VzVW5kZXJsaW5lcyA9IE1hYyhvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSktPm1h
cmtlZFRleHRVc2VzVW5kZXJsaW5lcygpOwogCiAgICAgLy8gU2V0IG91ciBmb250LgogICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gb2JqZWN0KCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKQEAg
LTI4MywxMSArMjgzLDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0
OjoKICAgICBRVmFsdWVMaXN0PERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gb2JqZWN0KCktPmRv
Y3VtZW50KCktPm1hcmtlcnNGb3JOb2RlKG9iamVjdCgpLT5ub2RlKCkpOwogICAgIFFWYWx1ZUxp
c3RJdGVyYXRvciA8RG9jdW1lbnRNYXJrZXI+IG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigpOwog
Ci0gICAgUVZhbHVlTGlzdDxLV1FLSFRNTFBhcnQ6Ok1hcmtlZFRleHRVbmRlcmxpbmU+IHVuZGVy
bGluZXM7CisgICAgUVZhbHVlTGlzdDxNYWNGcmFtZTo6TWFya2VkVGV4dFVuZGVybGluZT4gdW5k
ZXJsaW5lczsKICAgICBpZiAoaGF2ZU1hcmtlZFRleHQgJiYgbWFya2VkVGV4dFVzZXNVbmRlcmxp
bmVzKSB7Ci0gICAgICAgIHVuZGVybGluZXMgPSBLV1Eob2JqZWN0KCktPmRvY3VtZW50KCktPnBh
cnQoKSktPm1hcmtlZFRleHRVbmRlcmxpbmVzKCk7CisgICAgICAgIHVuZGVybGluZXMgPSBNYWMo
b2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCkpLT5tYXJrZWRUZXh0VW5kZXJsaW5lcygpOwog
ICAgIH0KLSAgICBRVmFsdWVMaXN0SXRlcmF0b3I8S1dRS0hUTUxQYXJ0OjpNYXJrZWRUZXh0VW5k
ZXJsaW5lPiB1bmRlcmxpbmVJdCA9IHVuZGVybGluZXMuYmVnaW4oKTsKKyAgICBRVmFsdWVMaXN0
SXRlcmF0b3I8TWFjRnJhbWU6Ok1hcmtlZFRleHRVbmRlcmxpbmU+IHVuZGVybGluZUl0ID0gdW5k
ZXJsaW5lcy5iZWdpbigpOwogCiAgICAgUUNvbG9yIHRleHRDb2xvciA9IHN0eWxlVG9Vc2UtPmNv
bG9yKCk7CiAgICAgCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChSZW5kZXJPYmplY3Q6OgogCiAKICAgICAgICAgZm9yICggOyB1bmRlcmxpbmVJdCAhPSB1bmRl
cmxpbmVzLmVuZCgpOyB1bmRlcmxpbmVJdCsrKSB7Ci0gICAgICAgICAgICBLV1FLSFRNTFBhcnQ6
Ok1hcmtlZFRleHRVbmRlcmxpbmUgdW5kZXJsaW5lID0gKnVuZGVybGluZUl0OworICAgICAgICAg
ICAgTWFjRnJhbWU6Ok1hcmtlZFRleHRVbmRlcmxpbmUgdW5kZXJsaW5lID0gKnVuZGVybGluZUl0
OwogCiAgICAgICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSBzdGFydCgpKQogICAg
ICAgICAgICAgICAgIC8vIHVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4g
IFRoaXMgbWlnaHQgYmUgYW4gdW5kZXJsaW5ldGhhdCBzaXRzCkBAIC01ODUsNyArNTg1LDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlcihRUGFpbnRlcgogICAgIHB0LT5kcmF3TGlu
ZUZvck1pc3NwZWxsaW5nKF90eCArIHN0YXJ0LCBfdHkgKyB1bmRlcmxpbmVPZmZzZXQsIHdpZHRo
KTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRVbmRlcmxpbmUoUVBh
aW50ZXIgKnB0LCBpbnQgX3R4LCBpbnQgX3R5LCBLV1FLSFRNTFBhcnQ6Ok1hcmtlZFRleHRVbmRl
cmxpbmUgdW5kZXJsaW5lKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRVbmRl
cmxpbmUoUVBhaW50ZXIgKnB0LCBpbnQgX3R4LCBpbnQgX3R5LCBNYWNGcmFtZTo6TWFya2VkVGV4
dFVuZGVybGluZSB1bmRlcmxpbmUpCiB7CiAgICAgX3R4ICs9IG1feDsKICAgICBfdHkgKz0gbV95
OwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw3ICs1MzEs
NyBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpzZXRTdHlsZShSZW5kZXJTdHlsCiBSZW5kZXJGaWxl
QnV0dG9uOjpSZW5kZXJGaWxlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KQog
ICAgIDogUmVuZGVyRm9ybUVsZW1lbnQoZWxlbWVudCkKIHsKLSAgICBLV1FGaWxlQnV0dG9uICp3
ID0gbmV3IEtXUUZpbGVCdXR0b24odmlldygpLT5wYXJ0KCkpOworICAgIEtXUUZpbGVCdXR0b24g
KncgPSBuZXcgS1dRRmlsZUJ1dHRvbih2aWV3KCktPmZyYW1lKCkpOwogICAgIGNvbm5lY3Qodywg
U0lHTkFMKHRleHRDaGFuZ2VkKGNvbnN0IFFTdHJpbmcgJikpLHRoaXMsU0xPVChzbG90VGV4dENo
YW5nZWQoY29uc3QgRE9NU3RyaW5nICYpKSk7CiAgICAgY29ubmVjdCh3LCBTSUdOQUwoY2xpY2tl
ZCgpKSwgdGhpcywgU0xPVChzbG90Q2xpY2tlZCgpKSk7CiAgICAgc2V0UVdpZGdldCh3KTsKSW5k
ZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiAjaW5jbHVkZSA8cXBhaW50ZXIuaD4KICNpbmNsdWRlIDxxcGVuLmg+CiAjaW5jbHVkZSAi
a2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAjaW5jbHVkZSAicmVuZGVyX2lubGluZS5oIgog
I2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgRE9NOjpOb2Rl
SW1wbCogUmVuZGVyT2JqZWN0OjpkcmFnZ2FibGVObwogICAgICAgICBpZiAoZWx0ICYmIGVsdC0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpIHsKICAgICAgICAgICAgIC8vIFNpbmNlIHRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgYXV0aG9yIHRvIGFkZHJlc3MgdGhlIC1raHRtbC11c2VyLWRy
YWcgc3R5bGUgZm9yIGEgdGV4dCBub2RlLAogICAgICAgICAgICAgLy8gd2UgdXNlIG91ciBvd24g
anVkZ2VtZW50LgotICAgICAgICAgICAgaWYgKHVhT0sgJiYgY2FudmFzKCktPnZpZXcoKS0+cGFy
dCgpLT5zaG91bGREcmFnQXV0b05vZGUoY3Vyci0+bm9kZSgpLCB4LCB5KSkgeworICAgICAgICAg
ICAgaWYgKHVhT0sgJiYgY2FudmFzKCktPnZpZXcoKS0+ZnJhbWUoKS0+c2hvdWxkRHJhZ0F1dG9O
b2RlKGN1cnItPm5vZGUoKSwgeCwgeSkpIHsKICAgICAgICAgICAgICAgICBkaHRtbFdpbGxEcmFn
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPm5vZGUoKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3Vyci0+c2hvdWxkU2VsZWN0KCkpIHsKQEAgLTE2ODYsNyArMTY4Niw3
IEBAIERPTTo6Tm9kZUltcGwqIFJlbmRlck9iamVjdDo6ZHJhZ2dhYmxlTm8KICAgICAgICAgICAg
ICAgICBkaHRtbFdpbGxEcmFnID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+
bm9kZSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmICh1YU9LICYmIGRyYWdNb2RlID09IERSQUdf
QVVUTwotICAgICAgICAgICAgICAgICAgICAgICAmJiBjYW52YXMoKS0+dmlldygpLT5wYXJ0KCkt
PnNob3VsZERyYWdBdXRvTm9kZShjdXJyLT5ub2RlKCksIHgsIHkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAmJiBjYW52YXMoKS0+dmlldygpLT5mcmFtZSgpLT5zaG91bGREcmFnQXV0b05vZGUo
Y3Vyci0+bm9kZSgpLCB4LCB5KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkaHRt
bFdpbGxEcmFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPm5vZGUoKTsK
SW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsy
Nyw2IEBACiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKLSNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8jZGVm
aW5lIEJPWF9ERUJVRwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAJKHJldmlz
aW9uIDExOTYwKQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJraHRtbF9leHQuaCIKICNpbmNs
dWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5j
bHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIiAvLyAjIyMg
cmVtb3ZlIGRlcGVuZGVuY3kKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAieG1sL0V2ZW50TmFtZXMuaCIKQEAgLTQyMSwxMCArNDIwLDYgQEAgYm9vbCBSZW5kZXJXaWRn
ZXQ6OmV2ZW50RmlsdGVyKFFPYmplY3QqIAogICAgICAgICAgICAvL2tkRGVidWcoNjAwMCkgPDwg
IlJlbmRlcldpZGdldDo6ZXZlbnRGaWx0ZXIgY2FwdHVyZXMgRm9jdXNPdXQiIDw8IGVuZGw7CiAg
ICAgICAgICAgICBpZiAoZWxlbS0+Z2V0RG9jdW1lbnQoKS0+Zm9jdXNOb2RlKCkgPT0gZWxlbSkK
ICAgICAgICAgICAgICAgICBlbGVtLT5nZXREb2N1bWVudCgpLT5zZXRGb2N1c05vZGUoMCk7Ci0v
LyAgICAgICAgICAgICBpZiAoICBlbGVtLT5pc0VkaXRhYmxlKCkgKSB7Ci0vLyAgICAgICAgICAg
ICAgICAgS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiAqZXh0ID0gc3RhdGljX2Nhc3Q8S0hUTUxQ
YXJ0QnJvd3NlckV4dGVuc2lvbiAqPiggZWxlbS0+dmlldy0+cGFydCgpLT5icm93c2VyRXh0ZW5z
aW9uKCkgKTsKLS8vICAgICAgICAgICAgICAgICBpZiAoIGV4dCApICBleHQtPmVkaXRhYmxlV2lk
Z2V0Qmx1cnJlZCggbV93aWRnZXQgKTsKLS8vICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGhh
bmRsZUZvY3VzT3V0KCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkluZGV4OiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9hcHBsZXQuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYXBwbGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAKICNpZm5kZWYgUV9XU19RV1MgLy8gV2UgZG9uJ3QgaGF2ZSBKYXZh
IGluIFF0IEVtYmVkZGVkCiAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNy
ZWF0ZVdpZGdldElmTmVjZXNzYQogICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAgICAgc2V0UVdpZGdl
dChuZXcgS0phdmFBcHBsZXRXaWRnZXQoUVNpemUod2lkdGgsIGhlaWdodCksIGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+cGFydCgpLCBtX2FyZ3MpKTsKKyAgICAgICAgICAgIHNldFFXaWRnZXQo
bmV3IEtKYXZhQXBwbGV0V2lkZ2V0KFFTaXplKHdpZHRoLCBoZWlnaHQpLCBlbGVtZW50KCktPmdl
dERvY3VtZW50KCktPmZyYW1lKCksIG1fYXJncykpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRl
eDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJKHJldmlzaW9uIDExOTYwKQorKysga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAK
ICNpbmNsdWRlICJyZW5kZXJfdGhlbWUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEyNjQsMTQgKzEyNjQsMTQg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogCiB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgaSwgQ2FyZXRUeXBlIHR5cGUpCiB7Ci0gICAg
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmcyA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBkb2N1
bWVudCgpLT5wYXJ0KCktPnNlbGVjdGlvbigpIDogZG9jdW1lbnQoKS0+cGFydCgpLT5kcmFnQ2Fy
ZXQoKTsKKyAgICBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzID0gdHlwZSA9PSBDdXJzb3JD
YXJldCA/IGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpIDogZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZHJhZ0NhcmV0KCk7CiAgICAgTm9kZUltcGwgKmNhcmV0Tm9kZSA9IHMuc3RhcnQoKS5u
b2RlKCk7CiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGNhcmV0Tm9kZSA/IGNhcmV0Tm9k
ZS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlciA9PSB0aGlz
IHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKSA9PSB0aGlzKSAmJiBjYXJldE5vZGUgJiYg
Y2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIGlmICh0eXBlID09IEN1
cnNvckNhcmV0KSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5wYXJ0KCktPnBhaW50Q2FyZXQo
aS5wLCBpLnIpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDYXJldChp
LnAsIGkucik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5wYXJ0
KCktPnBhaW50RHJhZ0NhcmV0KGkucCwgaS5yKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPnBhaW50RHJhZ0NhcmV0KGkucCwgaS5yKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5k
ZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExOTYwKQorKysgV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSwx
MSBAQAogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogZG9tX3FuYW1lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3
MzUzRDYgLyogZG9tX3FuYW1lLmggKi87IH07CiAJCTU1MEEwQkNEMDg1RjYwNEQwMDczNTNENiAv
KiBodG1sbmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2IC8qIGh0bWxuYW1lcy5jcHAgKi87IH07CiAJ
CTU1MEEwQkNFMDg1RjYwNEQwMDczNTNENiAvKiBodG1sbmFtZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkNDMDg1RjYwNEQwMDczNTNENiAv
KiBodG1sbmFtZXMuaCAqLzsgfTsKKwkJNjUxRTdENUQwOTcyNzlFRjAwNjRGMDU0IC8qIEZyYW1l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUU3
RDVCMDk3Mjc5RUYwMDY0RjA1NCAvKiBGcmFtZS5jcHAgKi87IH07CisJCTY1MUU3RDVFMDk3Mjc5
RUYwMDY0RjA1NCAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjUxRTdENUMwOTcyNzlFRjAwNjRGMDU0IC8qIEZyYW1lLmggKi87IH07CisJ
CTY1MUU3RDYyMDk3MjdCQUIwMDY0RjA1NCAvKiBNYWNGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTFFN0Q1RjA5NzI3QkFCMDA2NEYwNTQg
LyogTWFjRnJhbWUuY3BwICovOyB9OworCQk2NTFFN0Q2MzA5NzI3QkFCMDA2NEYwNTQgLyogTWFj
RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
MUU3RDYwMDk3MjdCQUIwMDY0RjA1NCAvKiBNYWNGcmFtZS5oICovOyB9OworCQk2NTFFN0Q2NDA5
NzI3QkFCMDA2NEYwNTQgLyogTWFjRnJhbWUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTFFN0Q2MTA5NzI3QkFCMDA2NEYwNTQgLyogTWFjRnJhbWUu
bW0gKi87IH07CiAJCTY1MkM2RTlCMDgzMzFBRTQwMDcxNDk2OSAvKiBkZWxldGVfZnJvbV90ZXh0
X25vZGVfY29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTJDNkU5NzA4MzMxQUU0MDA3MTQ5NjkgLyogZGVsZXRlX2Zyb21fdGV4dF9ub2Rl
X2NvbW1hbmQuY3BwICovOyB9OwogCQk2NTJDNkU5QzA4MzMxQUU0MDA3MTQ5NjkgLyogZGVsZXRl
X2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MkM2RTk4MDgzMzFBRTQwMDcxNDk2OSAvKiBkZWxldGVfZnJvbV90
ZXh0X25vZGVfY29tbWFuZC5oICovOyB9OwogCQk2NTJDNkU5RDA4MzMxQUU0MDA3MTQ5NjkgLyog
ZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkM2RTk5MDgzMzFBRTQwMDcxNDk2OSAvKiBkZWxldGVfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwICovOyB9OwpAQCAtMTIyLDcgKzEyNyw2IEBACiAJCTkzRjE5OEVG
MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1scGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbHBh
cnNlci5oICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbHRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NTMwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWx0b2tlbml6ZXIuaCAqLzsgfTsKIAkJOTNGMTk4RjEw
ODI0NUU1OTAwMUU5QUJDIC8qIGtodG1sX2V2ZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNTIwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1s
X2V2ZW50cy5oICovOyB9OwotCQk5M0YxOThGMjA4MjQ1RTU5MDAxRTlBQkMgLyoga2h0bWxfcGFy
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qx
NTQwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX3BhcnQuaCAqLzsgfTsKIAkJOTNGMTk4RjMwODI0
NUU1OTAwMUU5QUJDIC8qIGtodG1scGFydF9wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE1NjAyREU0MkFEMDE4NjM1Q0EgLyoga2h0bWxwYXJ0
X3AuaCAqLzsgfTsKIAkJOTNGMTk4RjQwODI0NUU1OTAwMUU5QUJDIC8qIGtodG1sdmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNTgwMkRF
NDJBRDAxODYzNUNBIC8qIGtodG1sdmlldy5oICovOyB9OwogCQk5M0YxOThGNTA4MjQ1RTU5MDAx
RTlBQkMgLyogYXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzI5NEY4MDM4MDRCM0MwMEE4MDE2NiAvKiBhcmVuYS5oICovOyB9OwpAQCAtMTk3
LDcgKzIwMSw2IEBACiAJCTkzRjE5OTQ3MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLRGVidWcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NUY0MDJE
RTM4MjAwMUVBNDEyMiAvKiBLV1FLRGVidWcuaCAqLzsgfTsKIAkJOTNGMTk5NDkwODI0NUU1OTAw
MUU5QUJDIC8qIEtXUUtHbG9iYWxTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1RjYwMkRFMzgyMDAxRUE0MTIyIC8qIEtXUUtHbG9i
YWxTZXR0aW5ncy5oICovOyB9OwogCQk5M0YxOTk0QTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0hU
TUxGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTg3ODYzNDAyREUzQTE0MDFFQTQxMjIgLyogS1dRS0hUTUxGYWN0b3J5LmggKi87IH07Ci0J
CTkzRjE5OTREMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLSFRNTFBhcnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEZBMDJERTM3NTkwMUVBNDEy
MiAvKiBLV1FLSFRNTFBhcnQuaCAqLzsgfTsKIAkJOTNGMTk5NEUwODI0NUU1OTAwMUU5QUJDIC8q
IEtXUUtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjMzMDJERTNBMTQwMUVBNDEyMiAvKiBLV1FLSFRN
TFBhcnRCcm93c2VyRXh0ZW5zaW9uLmggKi87IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFC
QyAvKiBLV1FLSFRNTFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTg3ODYzQTAyREUzQTE0MDFFQTQxMjIgLyogS1dRS0hUTUxTZXR0aW5n
cy5oICovOyB9OwogCQk5M0YxOTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0lPR2xvYmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY0OTAy
REUzQTlBMDFFQTQxMjIgLyogS1dRS0lPR2xvYmFsLmggKi87IH07CkBAIC0zODUsNyArMzg4LDYg
QEAKIAkJOTNGMTlBMjYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtDdXJzb3IubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRGMDAyREUzNzU5MDFF
QTQxMjIgLyogS1dRS0N1cnNvci5tbSAqLzsgfTsKIAkJOTNGMTlBMjkwODI0NUU1OTAwMUU5QUJD
IC8qIEtXUUtIaXN0b3J5UHJvdmlkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRGNjAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0hpc3RvcnlQ
cm92aWRlci5tbSAqLzsgfTsKIAkJOTNGMTlBMkEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1M
RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTg3ODRGNzAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0hUTUxGYWN0b3J5LmNwcCAqLzsgfTsK
LQkJOTNGMTlBMkIwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1MUGFydC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEY4MDJERTM3NTkwMUVB
NDEyMiAvKiBLV1FLSFRNTFBhcnQubW0gKi87IH07CiAJCTkzRjE5QTJDMDgyNDVFNTkwMDFFOUFC
QyAvKiBLV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RjkwMkRFMzc1OTAxRUE0MTIyIC8qIEtX
UUtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb24ubW0gKi87IH07CiAJCTkzRjE5QTJEMDgyNDVFNTkw
MDFFOUFCQyAvKiBLV1FLSFRNTFZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RkMwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtIVE1MVmll
dy5jcHAgKi87IH07CiAJCTkzRjE5QTJFMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLSmF2YUFwcGxl
dFdpZGdldC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1ODc4NEZGMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FLSmF2YUFwcGxldFdpZGdldC5tbSAqLzsg
fTsKQEAgLTQzMyw3ICs0MzUsNiBAQAogCQk5M0YxOUE1RTA4MjQ1RTU5MDAxRTlBQkMgLyogV2Vi
Q29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU1MzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVRleHRS
ZW5kZXJlckZhY3RvcnkubW0gKi87IH07CiAJCTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFCQyAvKiBX
ZWJDb3JlVmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3Rvcnku
bSAqLzsgfTsKIAkJOTNGMTlBNjAwODI0NUU1OTAwMUU5QUJDIC8qIGtodG1sX2V2ZW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE1MTAy
REU0MkFEMDE4NjM1Q0EgLyoga2h0bWxfZXZlbnRzLmNwcCAqLzsgfTsKLQkJOTNGMTlBNjEwODI0
NUU1OTAwMUU5QUJDIC8qIGtodG1sX3BhcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNTMwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX3Bh
cnQuY3BwICovOyB9OwogCQk5M0YxOUE2MjA4MjQ1RTU5MDAxRTlBQkMgLyoga2h0bWx2aWV3LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTU3
MDJERTQyQUQwMTg2MzVDQSAvKiBraHRtbHZpZXcuY3BwICovOyB9OwogCQk5M0YxOUE2MzA4MjQ1
RTU5MDAxRTlBQkMgLyogY3NzX3J1bGVpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTY0MDJERTQyRTYwMTg2MzVDQSAvKiBjc3NfcnVs
ZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE2NDA4MjQ1RTU5MDAxRTlBQkMgLyogY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMTY2MDJERTQyRTYwMTg2MzVDQSAvKiBjc3Nfc3R5bGVzaGVldGltcGwuY3BwICov
OyB9OwpAQCAtNTAxLDcgKzUwMiw2IEBACiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiB4
bWxfdG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiB4bWxfdG9rZW5pemVyLmNwcCAqLzsg
fTsKIAkJOTNGMTlBQkUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVDYWNoZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QjJBNEZEMDJFMjIyMEYw
MTg2MzVDQiAvKiBXZWJDb3JlQ2FjaGUubW0gKi87IH07CiAJCTkzRjE5QUJGMDgyNDVFNTkwMDFF
OUFCQyAvKiBXZWJDb3JlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1QjJBNTJDMDJFMjI1NzMwMTg2MzVDQiAvKiBXZWJDb3JlSmF2
YVNjcmlwdC5tbSAqLzsgfTsKLQkJOTNGMTlBQzAwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1M
UGFydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTRBNjFEMzAyRTM1MjNCMDFBODAxODAgLyogS1dRS0hUTUxQYXJ0LmNwcCAqLzsgfTsKIAkJOTNG
MTlBQzEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1N0IwRUUwMDJFQkM3OEIwMTg2MzVDQSAvKiBL
V1FTdHlsZS5jcHAgKi87IH07CiAJCTkzRjE5QUMyMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3Jl
U2V0dGluZ3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTY1QUU4NjAyRUNBNTgzMDE4NjM1Q0EgLyogV2ViQ29yZVNldHRpbmdzLm1tICovOyB9Owog
CQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRU2lnbmFsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNF
IC8qIEtXUVNpZ25hbC5tbSAqLzsgfTsKQEAgLTY4MSw3ICs2ODEsNiBAQAogCQlBODhBRDEzRDA5
NTI0ODBBMDAxREQxOTYgLyogaHRtbHBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxwYXJz
ZXIuaCAqLzsgfTsKIAkJQTg4QUQxM0UwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWx0b2tlbml6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUz
MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sdG9rZW5pemVyLmggKi87IH07CiAJCUE4OEFEMTNGMDk1
MjQ4MEEwMDFERDE5NiAvKiBraHRtbF9ldmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTUyMDJERTQyQUQwMTg2MzVDQSAvKiBraHRtbF9l
dmVudHMuaCAqLzsgfTsKLQkJQTg4QUQxNDAwOTUyNDgwQTAwMUREMTk2IC8qIGtodG1sX3BhcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTU0
MDJERTQyQUQwMTg2MzVDQSAvKiBraHRtbF9wYXJ0LmggKi87IH07CiAJCUE4OEFEMTQxMDk1MjQ4
MEEwMDFERDE5NiAvKiBraHRtbHBhcnRfcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNTYwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1scGFydF9w
LmggKi87IH07CiAJCUE4OEFEMTQyMDk1MjQ4MEEwMDFERDE5NiAvKiBraHRtbHZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTU4MDJERTQy
QUQwMTg2MzVDQSAvKiBraHRtbHZpZXcuaCAqLzsgfTsKIAkJQTg4QUQxNDMwOTUyNDgwQTAwMURE
MTk2IC8qIGFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzcyOTRGODAzODA0QjNDMDBBODAxNjYgLyogYXJlbmEuaCAqLzsgfTsKQEAgLTc1Niw3
ICs3NTUsNiBAQAogCQlBODhBRDE4RDA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0RlYnVnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODVGNDAyREUz
ODIwMDFFQTQxMjIgLyogS1dRS0RlYnVnLmggKi87IH07CiAJCUE4OEFEMThGMDk1MjQ4MEEwMDFE
RDE5NiAvKiBLV1FLR2xvYmFsU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NUY2MDJERTM4MjAwMUVBNDEyMiAvKiBLV1FLR2xvYmFs
U2V0dGluZ3MuaCAqLzsgfTsKIAkJQTg4QUQxOTAwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUtIVE1M
RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg2MzQwMkRFM0ExNDAxRUE0MTIyIC8qIEtXUUtIVE1MRmFjdG9yeS5oICovOyB9OwotCQlB
ODhBRDE5MjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0hUTUxQYXJ0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRGQTAyREUzNzU5MDFFQTQxMjIg
LyogS1dRS0hUTUxQYXJ0LmggKi87IH07CiAJCUE4OEFEMTkzMDk1MjQ4MEEwMDFERDE5NiAvKiBL
V1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODYzMzAyREUzQTE0MDFFQTQxMjIgLyogS1dRS0hUTUxQ
YXJ0QnJvd3NlckV4dGVuc2lvbi5oICovOyB9OwogCQlBODhBRDE5NDA5NTI0ODBBMDAxREQxOTYg
LyogS1dRS0hUTUxTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIyIC8qIEtXUUtIVE1MU2V0dGluZ3Mu
aCAqLzsgfTsKIAkJQTg4QUQxOTUwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUtJT0dsb2JhbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2NDkwMkRF
M0E5QTAxRUE0MTIyIC8qIEtXUUtJT0dsb2JhbC5oICovOyB9OwpAQCAtOTg2LDcgKzk4NCw2IEBA
CiAJCUE4OEFEMjgzMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLQ3Vyc29yLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RjAwMkRFMzc1OTAxRUE0
MTIyIC8qIEtXUUtDdXJzb3IubW0gKi87IH07CiAJCUE4OEFEMjg2MDk1MjQ4MEEwMDFERDE5NiAv
KiBLV1FLSGlzdG9yeVByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjU4Nzg0RjYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtIaXN0b3J5UHJv
dmlkZXIubW0gKi87IH07CiAJCUE4OEFEMjg3MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLSFRNTEZh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg0RjcwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtIVE1MRmFjdG9yeS5jcHAgKi87IH07Ci0J
CUE4OEFEMjg4MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLSFRNTFBhcnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRGODAyREUzNzU5MDFFQTQx
MjIgLyogS1dRS0hUTUxQYXJ0Lm1tICovOyB9OwogCQlBODhBRDI4OTA5NTI0ODBBMDAxREQxOTYg
LyogS1dRS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEY5MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FL
SFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1tICovOyB9OwogCQlBODhBRDI4QTA5NTI0ODBBMDAx
REQxOTYgLyogS1dRS0hUTUxWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1ODc4NEZDMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FLSFRNTFZpZXcu
Y3BwICovOyB9OwogCQlBODhBRDI4QjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0phdmFBcHBsZXRX
aWRnZXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODRGRjAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0phdmFBcHBsZXRXaWRnZXQubW0gKi87IH07
CkBAIC0xMDM0LDcgKzEwMzEsNiBAQAogCQlBODhBRDJCOTA5NTI0ODBBMDAxREQxOTYgLyogV2Vi
Q29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU1MzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVRleHRS
ZW5kZXJlckZhY3RvcnkubW0gKi87IH07CiAJCUE4OEFEMkJBMDk1MjQ4MEEwMDFERDE5NiAvKiBX
ZWJDb3JlVmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3Rvcnku
bSAqLzsgfTsKIAkJQTg4QUQyQkIwOTUyNDgwQTAwMUREMTk2IC8qIGtodG1sX2V2ZW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE1MTAy
REU0MkFEMDE4NjM1Q0EgLyoga2h0bWxfZXZlbnRzLmNwcCAqLzsgfTsKLQkJQTg4QUQyQkMwOTUy
NDgwQTAwMUREMTk2IC8qIGtodG1sX3BhcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNTMwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX3Bh
cnQuY3BwICovOyB9OwogCQlBODhBRDJCRDA5NTI0ODBBMDAxREQxOTYgLyoga2h0bWx2aWV3LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTU3
MDJERTQyQUQwMTg2MzVDQSAvKiBraHRtbHZpZXcuY3BwICovOyB9OwogCQlBODhBRDJCRTA5NTI0
ODBBMDAxREQxOTYgLyogY3NzX3J1bGVpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTY0MDJERTQyRTYwMTg2MzVDQSAvKiBjc3NfcnVs
ZWltcGwuY3BwICovOyB9OwogCQlBODhBRDJCRjA5NTI0ODBBMDAxREQxOTYgLyogY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMTY2MDJERTQyRTYwMTg2MzVDQSAvKiBjc3Nfc3R5bGVzaGVldGltcGwuY3BwICov
OyB9OwpAQCAtMTEwMiw3ICsxMDk4LDYgQEAKIAkJQTg4QUQyRkUwOTUyNDgwQTAwMUREMTk2IC8q
IHhtbF90b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tlbml6ZXIuY3BwICov
OyB9OwogCQlBODhBRDJGRjA5NTI0ODBBMDAxREQxOTYgLyogV2ViQ29yZUNhY2hlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVCMkE0RkQwMkUyMjIw
RjAxODYzNUNCIC8qIFdlYkNvcmVDYWNoZS5tbSAqLzsgfTsKIAkJQTg4QUQzMDAwOTUyNDgwQTAw
MUREMTk2IC8qIFdlYkNvcmVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjVCMkE1MkMwMkUyMjU3MzAxODYzNUNCIC8qIFdlYkNvcmVK
YXZhU2NyaXB0Lm1tICovOyB9OwotCQlBODhBRDMwMTA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0hU
TUxQYXJ0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1NEE2MUQzMDJFMzUyM0IwMUE4MDE4MCAvKiBLV1FLSFRNTFBhcnQuY3BwICovOyB9OwogCQlB
ODhBRDMwMjA5NTI0ODBBMDAxREQxOTYgLyogS1dRU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU3QjBFRTAwMkVCQzc4QjAxODYzNUNBIC8q
IEtXUVN0eWxlLmNwcCAqLzsgfTsKIAkJQTg4QUQzMDMwOTUyNDgwQTAwMUREMTk2IC8qIFdlYkNv
cmVTZXR0aW5ncy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1NjVBRTg2MDJFQ0E1ODMwMTg2MzVDQSAvKiBXZWJDb3JlU2V0dGluZ3MubW0gKi87IH07
CiAJCUE4OEFEMzA0MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FTaWduYWwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTExN0JDQTAyRjlGRkVGMDE4NjM1
Q0UgLyogS1dRU2lnbmFsLm1tICovOyB9OwpAQCAtMTY3NCw2ICsxNjY5LDExIEBACiAJCTU1OTk4
QTVCMDUyQjU5Q0MwMDE3QTZDMSAvKiBLV1FBY2NPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FBY2NPYmplY3QubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQk1NTk5OEE1QzA1MkI1OUNDMDAxN0E2QzEgLyogS1dRQWNjT2JqZWN0Q2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRQWNjT2JqZWN0
Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTU1OTk4QTVEMDUyQjU5Q0MwMDE3QTZDMSAvKiBLV1FBY2NPYmplY3RDYWNoZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEtXUUFjY09iamVjdENhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJNjUxRTdENUIwOTcyNzlFRjAwNjRGMDU0IC8qIEZy
YW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1MUU3RDVDMDk3Mjc5RUYwMDY0RjA1NCAv
KiBGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjUxRTdENUYwOTcyN0JBQjAwNjRGMDU0IC8qIE1h
Y0ZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNGcmFt
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1MUU3RDYwMDk3MjdCQUIwMDY0
RjA1NCAvKiBNYWNGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFj
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjUxRTdENjEwOTcyN0JBQjAw
NjRGMDU0IC8qIE1hY0ZyYW1lLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE1hY0ZyYW1lLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTJDNkU5
NzA4MzMxQUU0MDA3MTQ5NjkgLyogZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZGVs
ZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwOyBwYXRoID0gZWRpdGluZy9kZWxldGVfZnJv
bV90ZXh0X25vZGVfY29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NTJDNkU5ODA4MzMxQUU0MDA3MTQ5NjkgLyogZGVs
ZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaDsg
cGF0aCA9IGVkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1MkM2RTk5
MDgzMzFBRTQwMDcxNDk2OSAvKiBkZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZGVsZXRlX3Nl
bGVjdGlvbl9jb21tYW5kLmNwcDsgcGF0aCA9IGVkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21t
YW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CkBAIC0yNDE1LDggKzI0MTUsNiBAQAogCQlGNTExN0JDQzAyRjlGRkVGMDE4NjM1Q0Ug
LyogS1dRU2xvdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBL
V1FTbG90Lm1tOyBwYXRoID0ga3dxL0tXUVNsb3QubW07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKIAkJRjUyM0QxNTEwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX2V2ZW50cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBraHRt
bF9ldmVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJRjUyM0QxNTIwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX2V2ZW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBraHRt
bF9ldmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07Ci0JCUY1MjNEMTUzMDJERTQyQUQwMTg2MzVDQSAvKiBraHRtbF9wYXJ0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGto
dG1sX3BhcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QxNTQwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sX3BhcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2h0bWxf
cGFydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJRjUyM0QxNTYwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1scGFydF9wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtodG1scGFydF9w
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNTIzRDE1NzAyREU0MkFEMDE4NjM1Q0EgLyoga2h0bWx2aWV3LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtodG1sdmlldy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNTIzRDE1ODAyREU0MkFEMDE4NjM1Q0EgLyoga2h0bWx2aWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtodG1sdmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTI1
NTksNyArMjU1Nyw2IEBACiAJCUY1MjNEMzA4MDJERTQ0NzYwMTg2MzVDQSAvKiBkb20yX3ZpZXdz
aW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBkb20yX3ZpZXdzaW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tl
bml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0geG1sX3Rva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EgLyog
eG1sX3Rva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSB4bWxfdG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTRBNjFEMzAyRTM1MjNCMDFBODAxODAgLyog
S1dRS0hUTUxQYXJ0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEtXUUtIVE1MUGFydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTUwRDcwQjAyRTEzMjgxMDE4NjM1
Q0EgLyogbWFjLWVuY29kaW5ncy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gIm1hYy1lbmNvZGluZ3MudHh0Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1NTBENzBDMDJFMTMyODEwMTg2MzVDQSAv
KiBtYWtlLWNoYXJzZXQtdGFibGUucGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5wZXJsOyBwYXRoID0gIm1ha2UtY2hhcnNldC10YWJsZS5wbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTUxN0RDMjAz
MUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkNvcmVIaXN0b3J5Lmg7IHBhdGggPSBrd3EvV2ViQ29yZUhpc3Rvcnku
aDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwpAQCAtMjU5OCw5ICsyNTk1LDcgQEAKIAkJ
RjU4Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtDdXJzb3IubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FLQ3Vyc29yLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJRjU4Nzg0RjYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtIaXN0b3J5UHJvdmlkZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBL
V1FLSGlzdG9yeVByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg0RjcwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtI
VE1MRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBLV1FLSFRNTEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjU4Nzg0RjgwMkRFMzc1OTAxRUE0
MTIyIC8qIEtXUUtIVE1MUGFydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtIVE1MUGFydC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NEY5MDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRS0hUTUxQ
YXJ0QnJvd3NlckV4dGVuc2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NEZBMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FL
SFRNTFBhcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS1dRS0hUTUxQYXJ0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODRGQzAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0hU
TUxWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEtXUUtIVE1MVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODRGRjAyREUzNzU5MDFFQTQxMjIgLyog
S1dRS0phdmFBcHBsZXRXaWRnZXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FLSmF2YUFwcGxldFdpZGdldC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4
NTAxMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FLSm9iQ2xhc3Nlcy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtKb2JDbGFzc2Vz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKQEAgLTM2MTMsOSArMzYwOCw5IEBACiAJCQkJOTNEMUZFRjYwNjdFQkY4OTAwOUNFNjhBIC8q
IEtXUUZvdW5kYXRpb25FeHRyYXMuaCAqLywKIAkJCQlGNTg3ODRFRTAyREUzNzU5MDFFQTQxMjIg
LyogS1dRS0Nvb2tpZUphci5oICovLAogCQkJCUY1ODc4NEVGMDJERTM3NTkwMUVBNDEyMiAvKiBL
V1FLQ29va2llSmFyLm1tICovLAotCQkJCUY1ODc4NEZBMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FL
SFRNTFBhcnQuaCAqLywKLQkJCQlGNTg3ODRGODAyREUzNzU5MDFFQTQxMjIgLyogS1dRS0hUTUxQ
YXJ0Lm1tICovLAotCQkJCUY1NEE2MUQzMDJFMzUyM0IwMUE4MDE4MCAvKiBLV1FLSFRNTFBhcnQu
Y3BwICovLAorCQkJCTY1MUU3RDVGMDk3MjdCQUIwMDY0RjA1NCAvKiBNYWNGcmFtZS5jcHAgKi8s
CisJCQkJNjUxRTdENjAwOTcyN0JBQjAwNjRGMDU0IC8qIE1hY0ZyYW1lLmggKi8sCisJCQkJNjUx
RTdENjEwOTcyN0JBQjAwNjRGMDU0IC8qIE1hY0ZyYW1lLm1tICovLAogCQkJCUY1ODc4NEZDMDJE
RTM3NTkwMUVBNDEyMiAvKiBLV1FLSFRNTFZpZXcuY3BwICovLAogCQkJCUY1ODc4NTE3MDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FMb2FkZXIuaCAqLywKIAkJCQlGNTg3ODUwMzAyREUzNzU5MDFFQTQx
MjIgLyogS1dRTG9hZGVyLm1tICovLApAQCAtMzY1OCwxMSArMzY1MywxMSBAQAogCQkJCUY1MjNE
MzI0MDJERTQ0NzgwMTg2MzVDQSAvKiB4bWwgKi8sCiAJCQkJQkMwNkYyNDQwNkQxOEEzNTAwNEE2
RkEzIC8qIHhzbCAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmgg
Ki8sCisJCQkJNjUxRTdENUIwOTcyNzlFRjAwNjRGMDU0IC8qIEZyYW1lLmNwcCAqLywKKwkJCQk2
NTFFN0Q1QzA5NzI3OUVGMDA2NEYwNTQgLyogRnJhbWUuaCAqLywKIAkJCQlGNTIzRDE1MjAyREU0
MkFEMDE4NjM1Q0EgLyoga2h0bWxfZXZlbnRzLmggKi8sCiAJCQkJRjUyM0QxNTEwMkRFNDJBRDAx
ODYzNUNBIC8qIGtodG1sX2V2ZW50cy5jcHAgKi8sCi0JCQkJRjUyM0QxNTQwMkRFNDJBRDAxODYz
NUNBIC8qIGtodG1sX3BhcnQuaCAqLywKIAkJCQlGNTIzRDE1NjAyREU0MkFEMDE4NjM1Q0EgLyog
a2h0bWxwYXJ0X3AuaCAqLywKLQkJCQlGNTIzRDE1MzAyREU0MkFEMDE4NjM1Q0EgLyoga2h0bWxf
cGFydC5jcHAgKi8sCiAJCQkJRjUyM0QxNTcwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sdmlldy5j
cHAgKi8sCiAJCQkJRjUyM0QxNTgwMkRFNDJBRDAxODYzNUNBIC8qIGtodG1sdmlldy5oICovLAog
CQkJKTsKQEAgLTQyOTIsNyArNDI4Nyw2IEBACiAJCQkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJD
IC8qIGh0bWxwYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEYwMDgyNDVFNTkwMDFF
OUFCQyAvKiBodG1sdG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThGMTA4MjQ1
RTU5MDAxRTlBQkMgLyoga2h0bWxfZXZlbnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOThG
MjA4MjQ1RTU5MDAxRTlBQkMgLyoga2h0bWxfcGFydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk4RjMwODI0NUU1OTAwMUU5QUJDIC8qIGtodG1scGFydF9wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOThGNDA4MjQ1RTU5MDAxRTlBQkMgLyoga2h0bWx2aWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0YxOThGNTA4MjQ1RTU5MDAxRTlBQkMgLyogYXJlbmEuaCBpbiBIZWFkZXJzICovLApA
QCAtNDM2Nyw3ICs0MzYxLDYgQEAKIAkJCQk5M0YxOTk0NzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dR
S0RlYnVnLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk0OTA4MjQ1RTU5MDAxRTlBQkMgLyog
S1dRS0dsb2JhbFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk0QTA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRS0hUTUxGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTk0
RDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0hUTUxQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTk0RTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1M
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFCQyAv
KiBLV1FLSU9HbG9iYWwuaCBpbiBIZWFkZXJzICovLApAQCAtNDc0NCw2ICs0NzM3LDggQEAKIAkJ
CQlBODJCOENBQzA5NzEyQzJDMDAyN0UzREUgLyogUmVuZGVyVGV4dEZyYWdtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODJCOENBRTA5NzEyQzJDMDAyN0UzREUgLyogUmVuZGVyVGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgyQjhDQUYwOTcxMkMyQzAwMjdFM0RFIC8qIElubGluZVRleHRC
b3guaCBpbiBIZWFkZXJzICovLAorCQkJCTY1MUU3RDVFMDk3Mjc5RUYwMDY0RjA1NCAvKiBGcmFt
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjUxRTdENjMwOTcyN0JBQjAwNjRGMDU0IC8qIE1hY0Zy
YW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODEzNUI4QzA5NzI0MDNBMDBENzQ0NjMgLyogQ2Fj
aGVkQ1NTU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzVCOEUwOTcyNDAzQTAw
RDc0NDYzIC8qIENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODEzNUI5MDA5NzI0MDNBMDBE
NzQ0NjMgLyogRG9jTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4MDEsNyArNDc5Niw2IEBA
CiAJCQkJQTg4QUQxM0QwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxwYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4OEFEMTNFMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sdG9rZW5pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODhBRDEzRjA5NTI0ODBBMDAxREQxOTYgLyoga2h0bWxfZXZlbnRz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBODhBRDE0MDA5NTI0ODBBMDAxREQxOTYgLyoga2h0bWxf
cGFydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQxNDEwOTUyNDgwQTAwMUREMTk2IC8qIGto
dG1scGFydF9wLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDE0MjA5NTI0ODBBMDAxREQxOTYg
Lyoga2h0bWx2aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDE0MzA5NTI0ODBBMDAxREQx
OTYgLyogYXJlbmEuaCBpbiBIZWFkZXJzICovLApAQCAtNDg3Niw3ICs0ODcwLDYgQEAKIAkJCQlB
ODhBRDE4RDA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0RlYnVnLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODhBRDE4RjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0dsb2JhbFNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODhBRDE5MDA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0hUTUxGYWN0b3J5
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBODhBRDE5MjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0hU
TUxQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDE5MzA5NTI0ODBBMDAxREQxOTYgLyog
S1dRS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQx
OTQwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUtIVE1MU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OEFEMTk1MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLSU9HbG9iYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjE5Nyw3ICs2MTkwLDYgQEAKIAkJCQk5M0YxOUEyNjA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRS0N1cnNvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTI5MDgyNDVFNTkwMDFF
OUFCQyAvKiBLV1FLSGlzdG9yeVByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
MkEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1MRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5M0YxOUEyQjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS0hUTUxQYXJ0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTlBMkMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtIVE1MUGFydEJyb3dz
ZXJFeHRlbnNpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUEyRDA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRS0hUTUxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTJFMDgyNDVF
NTkwMDFFOUFCQyAvKiBLV1FLSmF2YUFwcGxldFdpZGdldC5tbSBpbiBTb3VyY2VzICovLApAQCAt
NjI0NSw3ICs2MjM3LDYgQEAKIAkJCQk5M0YxOUE1RTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29y
ZVRleHRSZW5kZXJlckZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE1RjA4MjQ1
RTU5MDAxRTlBQkMgLyogV2ViQ29yZVZpZXdGYWN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5
M0YxOUE2MDA4MjQ1RTU5MDAxRTlBQkMgLyoga2h0bWxfZXZlbnRzLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTkzRjE5QTYxMDgyNDVFNTkwMDFFOUFCQyAvKiBraHRtbF9wYXJ0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTYyMDgyNDVFNTkwMDFFOUFCQyAvKiBraHRtbHZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBNjMwODI0NUU1OTAwMUU5QUJDIC8qIGNzc19ydWxlaW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE2NDA4MjQ1RTU5MDAxRTlBQkMgLyogY3Nz
X3N0eWxlc2hlZXRpbXBsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjMxMyw3ICs2MzA0LDYgQEAK
IAkJCQk5M0YxOUFCQzA4MjQ1RTU5MDAxRTlBQkMgLyogeG1sX3Rva2VuaXplci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5M0YxOUFCRTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUNhY2hlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBQkYwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVK
YXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBQzAwODI0NUU1OTAwMUU5QUJD
IC8qIEtXUUtIVE1MUGFydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFDMTA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBQzIwODI0
NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVTZXR0aW5ncy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkz
RjE5QUM0MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FTaWduYWwubW0gaW4gU291cmNlcyAqLywKQEAg
LTY1OTgsNiArNjU4OCw5IEBACiAJCQkJQTgyQjhDQUQwOTcxMkMyQzAwMjdFM0RFIC8qIFJlbmRl
clRleHRGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODJCOENCMDA5NzEyQzJDMDAy
N0UzREUgLyogSW5saW5lVGV4dEJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODJCOENCMTA5
NzEyQzJDMDAyN0UzREUgLyogUmVuZGVyVGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2NTFF
N0Q1RDA5NzI3OUVGMDA2NEYwNTQgLyogRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjUx
RTdENjIwOTcyN0JBQjAwNjRGMDU0IC8qIE1hY0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTY1MUU3RDY0MDk3MjdCQUIwMDY0RjA1NCAvKiBNYWNGcmFtZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4MTM1QjhEMDk3MjQwM0EwMEQ3NDQ2MyAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MTM1QjhGMDk3MjQwM0EwMEQ3NDQ2MyAvKiBDYWNoZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODEzNUI5MjA5NzI0MDNBMDBENzQ0NjMgLyogUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTY2NDAsNyArNjYzMyw2IEBACiAJCQkJQTg4QUQyODMwOTUy
NDgwQTAwMUREMTk2IC8qIEtXUUtDdXJzb3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDI4
NjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0hpc3RvcnlQcm92aWRlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE4OEFEMjg3MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLSFRNTEZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTg4QUQyODgwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUtIVE1MUGFy
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMjg5MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FL
SFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQyOEEw
OTUyNDgwQTAwMUREMTk2IC8qIEtXUUtIVE1MVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODhBRDI4QjA5NTI0ODBBMDAxREQxOTYgLyogS1dRS0phdmFBcHBsZXRXaWRnZXQubW0gaW4gU291
cmNlcyAqLywKQEAgLTY2ODgsNyArNjY4MCw2IEBACiAJCQkJQTg4QUQyQjkwOTUyNDgwQTAwMURE
MTk2IC8qIFdlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg4QUQyQkEwOTUyNDgwQTAwMUREMTk2IC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTg4QUQyQkIwOTUyNDgwQTAwMUREMTk2IC8qIGtodG1sX2V2ZW50cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBODhBRDJCQzA5NTI0ODBBMDAxREQxOTYgLyoga2h0bWxfcGFy
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDJCRDA5NTI0ODBBMDAxREQxOTYgLyoga2h0
bWx2aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMkJFMDk1MjQ4MEEwMDFERDE5NiAv
KiBjc3NfcnVsZWltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQyQkYwOTUyNDgwQTAw
MUREMTk2IC8qIGNzc19zdHlsZXNoZWV0aW1wbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY3NTYs
NyArNjc0Nyw2IEBACiAJCQkJQTg4QUQyRkUwOTUyNDgwQTAwMUREMTk2IC8qIHhtbF90b2tlbml6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQyRkYwOTUyNDgwQTAwMUREMTk2IC8qIFdl
YkNvcmVDYWNoZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMzAwMDk1MjQ4MEEwMDFERDE5
NiAvKiBXZWJDb3JlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFEMzAxMDk1
MjQ4MEEwMDFERDE5NiAvKiBLV1FLSFRNTFBhcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4
QUQzMDIwOTUyNDgwQTAwMUREMTk2IC8qIEtXUVN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4OEFEMzAzMDk1MjQ4MEEwMDFERDE5NiAvKiBXZWJDb3JlU2V0dGluZ3MubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBODhBRDMwNDA5NTI0ODBBMDAxREQxOTYgLyogS1dRU2lnbmFsLm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMTk2MCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMjYg
QEAKKzIwMDYtMDEtMDkgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlbmFtZWQgS0hU
TUxQYXJ0IHRvIEZyYW1lIChhbmQgS1dRS0hUTUxQYXJ0IHRvIE1hY0ZyYW1lIGZvciBub3cpCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9rc3ZnMi9LU1ZHUGFydC5oOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBraHRtbC9GcmFt
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoa2h0bWw6OlBhcnRTdHlsZVNoZWV0TG9hZGVyOjpQYXJ0
U3R5bGVTaGVldExvYWRlcik6CisgICAgICAgIChraHRtbDo6UGFydFN0eWxlU2hlZXRMb2FkZXI6
OnNldFN0eWxlU2hlZXQpOgorICAgICAgICAoRnJhbWU6OkZyYW1lKToKKyAgICAgICAgKEZyYW1l
Ojppbml0KToKKyAgICAgICAgKEZyYW1lOjp+RnJhbWUpOgorICAgICAgICAoRnJhbWU6OnJlc3Rv
cmVVUkwpOgorICAgICAgICAoRnJhbWU6OmRpZE9wZW5VUkwpOgorICAgICAgICAoRnJhbWU6OmRp
ZEV4cGxpY2l0T3Blbik6CisgICAgICAgIChGcmFtZTo6c3RvcExvYWRpbmcpOgorICAgICAgICAo
RnJhbWU6OmNsb3NlVVJMKToKKyAgICAgICAgKEZyYW1lOjpicm93c2VyRXh0ZW5zaW9uKToKKyAg
ICAgICAgKEZyYW1lOjp2aWV3KToKKyAgICAgICAgKEZyYW1lOjpzZXRKU2NyaXB0RW5hYmxlZCk6
CisgICAgICAgIChGcmFtZTo6alNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoRnJhbWU6OnNldE1l
dGFSZWZyZXNoRW5hYmxlZCk6CisgICAgICAgIChGcmFtZTo6bWV0YVJlZnJlc2hFbmFibGVkKToK
KyAgICAgICAgKEZyYW1lOjpqU2NyaXB0KToKKyAgICAgICAgKEZyYW1lOjpyZXBsYWNlQ29udGVu
dHNXaXRoU2NyaXB0UmVzdWx0KToKKyAgICAgICAgKEZyYW1lOjpleGVjdXRlU2NyaXB0KToKKyAg
ICAgICAgKEZyYW1lOjpzY2hlZHVsZVNjcmlwdCk6CisgICAgICAgIChGcmFtZTo6ZXhlY3V0ZVNj
aGVkdWxlZFNjcmlwdCk6CisgICAgICAgIChGcmFtZTo6c2V0SmF2YUVuYWJsZWQpOgorICAgICAg
ICAoRnJhbWU6OmphdmFFbmFibGVkKToKKyAgICAgICAgKEZyYW1lOjpzZXRQbHVnaW5zRW5hYmxl
ZCk6CisgICAgICAgIChGcmFtZTo6cGx1Z2luc0VuYWJsZWQpOgorICAgICAgICAoRnJhbWU6OnNs
b3REZWJ1Z0RPTVRyZWUpOgorICAgICAgICAoRnJhbWU6OnNsb3REZWJ1Z1JlbmRlclRyZWUpOgor
ICAgICAgICAoRnJhbWU6OnNldEF1dG9sb2FkSW1hZ2VzKToKKyAgICAgICAgKEZyYW1lOjphdXRv
bG9hZEltYWdlcyk6CisgICAgICAgIChGcmFtZTo6Y2xlYXIpOgorICAgICAgICAoRnJhbWU6Om9w
ZW5GaWxlKToKKyAgICAgICAgKEZyYW1lOjp4bWxEb2NJbXBsKToKKyAgICAgICAgKEZyYW1lOjpy
ZXBsYWNlRG9jSW1wbCk6CisgICAgICAgIChGcmFtZTo6cmVjZWl2ZWRGaXJzdERhdGEpOgorICAg
ICAgICAoRnJhbWU6OnNsb3RGaW5pc2hlZCk6CisgICAgICAgIChGcmFtZTo6Y2hpbGRCZWdpbik6
CisgICAgICAgIChGcmFtZTo6YmVnaW4pOgorICAgICAgICAoRnJhbWU6OndyaXRlKToKKyAgICAg
ICAgKEZyYW1lOjplbmQpOgorICAgICAgICAoRnJhbWU6OmVuZElmTm90TG9hZGluZyk6CisgICAg
ICAgIChGcmFtZTo6c3RvcCk6CisgICAgICAgIChGcmFtZTo6c3RvcEFuaW1hdGlvbnMpOgorICAg
ICAgICAoRnJhbWU6OmdvdG9BbmNob3IpOgorICAgICAgICAoRnJhbWU6OnNsb3RGaW5pc2hlZFBh
cnNpbmcpOgorICAgICAgICAoRnJhbWU6OnNsb3RMb2FkZXJSZXF1ZXN0U3RhcnRlZCk6CisgICAg
ICAgIChGcmFtZTo6c2xvdExvYWRlclJlcXVlc3REb25lKToKKyAgICAgICAgKEZyYW1lOjpjaGVj
a0NvbXBsZXRlZCk6CisgICAgICAgIChGcmFtZTo6Y2hlY2tFbWl0TG9hZEV2ZW50KToKKyAgICAg
ICAgKEZyYW1lOjpzZXR0aW5ncyk6CisgICAgICAgIChGcmFtZTo6YmFzZVVSTCk6CisgICAgICAg
IChGcmFtZTo6YmFzZVRhcmdldCk6CisgICAgICAgIChGcmFtZTo6Y29tcGxldGVVUkwpOgorICAg
ICAgICAoRnJhbWU6OnNjaGVkdWxlUmVkaXJlY3Rpb24pOgorICAgICAgICAoRnJhbWU6OnNjaGVk
dWxlTG9jYXRpb25DaGFuZ2UpOgorICAgICAgICAoRnJhbWU6OmlzU2NoZWR1bGVkTG9jYXRpb25D
aGFuZ2VQZW5kaW5nKToKKyAgICAgICAgKEZyYW1lOjpzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9u
KToKKyAgICAgICAgKEZyYW1lOjpjYW5jZWxSZWRpcmVjdGlvbik6CisgICAgICAgIChGcmFtZTo6
Y2hhbmdlTG9jYXRpb24pOgorICAgICAgICAoRnJhbWU6OnNsb3RSZWRpcmVjdCk6CisgICAgICAg
IChGcmFtZTo6c2xvdFJlZGlyZWN0aW9uKToKKyAgICAgICAgKEZyYW1lOjplbmNvZGluZyk6Cisg
ICAgICAgIChGcmFtZTo6c2V0VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoRnJhbWU6OnNldFN0
YW5kYXJkRm9udCk6CisgICAgICAgIChGcmFtZTo6c2V0Rml4ZWRGb250KToKKyAgICAgICAgKEZy
YW1lOjp1cmxDdXJzb3IpOgorICAgICAgICAoRnJhbWU6Om9ubHlMb2NhbFJlZmVyZW5jZXMpOgor
ICAgICAgICAoRnJhbWU6OnNldE9ubHlMb2NhbFJlZmVyZW5jZXMpOgorICAgICAgICAoRnJhbWU6
OnNlbGVjdGVkVGV4dCk6CisgICAgICAgIChGcmFtZTo6aGFzU2VsZWN0aW9uKToKKyAgICAgICAg
KEZyYW1lOjpzZWxlY3Rpb24pOgorICAgICAgICAoRnJhbWU6OnNlbGVjdGlvbkdyYW51bGFyaXR5
KToKKyAgICAgICAgKEZyYW1lOjpzZXRTZWxlY3Rpb25HcmFudWxhcml0eSk6CisgICAgICAgIChG
cmFtZTo6ZHJhZ0NhcmV0KToKKyAgICAgICAgKEZyYW1lOjptYXJrKToKKyAgICAgICAgKEZyYW1l
OjpzZXRNYXJrKToKKyAgICAgICAgKEZyYW1lOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoRnJh
bWU6OnNldERyYWdDYXJldCk6CisgICAgICAgIChGcmFtZTo6Y2xlYXJTZWxlY3Rpb24pOgorICAg
ICAgICAoRnJhbWU6OmludmFsaWRhdGVTZWxlY3Rpb24pOgorICAgICAgICAoRnJhbWU6OnNldENh
cmV0VmlzaWJsZSk6CisgICAgICAgIChGcmFtZTo6Y2xlYXJDYXJldFJlY3RJZk5lZWRlZCk6Cisg
ICAgICAgIChpc0ZyYW1lRWxlbWVudCk6CisgICAgICAgIChGcmFtZTo6c2V0Rm9jdXNOb2RlSWZO
ZWVkZWQpOgorICAgICAgICAoRnJhbWU6OnNlbGVjdGlvbkxheW91dENoYW5nZWQpOgorICAgICAg
ICAoRnJhbWU6OnNldFhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbik6CisgICAgICAgIChG
cmFtZTo6eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgKEZyYW1lOjp0
aW1lckV2ZW50KToKKyAgICAgICAgKEZyYW1lOjpwYWludENhcmV0KToKKyAgICAgICAgKEZyYW1l
OjpwYWludERyYWdDYXJldCk6CisgICAgICAgIChGcmFtZTo6dXJsU2VsZWN0ZWQpOgorICAgICAg
ICAoRnJhbWU6OnJlcXVlc3RGcmFtZSk6CisgICAgICAgIChGcmFtZTo6cmVxdWVzdEZyYW1lTmFt
ZSk6CisgICAgICAgIChGcmFtZTo6cmVxdWVzdE9iamVjdCk6CisgICAgICAgIChGcmFtZTo6cHJv
Y2Vzc09iamVjdFJlcXVlc3QpOgorICAgICAgICAoRnJhbWU6OnN1Ym1pdEZvcm1BZ2Fpbik6Cisg
ICAgICAgIChGcmFtZTo6c3VibWl0Rm9ybSk6CisgICAgICAgIChGcmFtZTo6c2xvdFBhcmVudENv
bXBsZXRlZCk6CisgICAgICAgIChGcmFtZTo6c2xvdENoaWxkU3RhcnRlZCk6CisgICAgICAgIChG
cmFtZTo6c2xvdENoaWxkQ29tcGxldGVkKToKKyAgICAgICAgKEZyYW1lOjpjaGlsZEZyYW1lKToK
KyAgICAgICAgKEZyYW1lOjpmaW5kRnJhbWUpOgorICAgICAgICAoRnJhbWU6OmZyYW1lRXhpc3Rz
KToKKyAgICAgICAgKEZyYW1lOjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChGcmFtZTo6em9vbUZh
Y3Rvcik6CisgICAgICAgIChGcmFtZTo6c2xvdEluY1pvb20pOgorICAgICAgICAoRnJhbWU6OnNs
b3REZWNab29tKToKKyAgICAgICAgKEZyYW1lOjpzZXRab29tRmFjdG9yKToKKyAgICAgICAgKEZy
YW1lOjpzZXRKU1N0YXR1c0JhclRleHQpOgorICAgICAgICAoRnJhbWU6OnNldEpTRGVmYXVsdFN0
YXR1c0JhclRleHQpOgorICAgICAgICAoRnJhbWU6OmpzU3RhdHVzQmFyVGV4dCk6CisgICAgICAg
IChGcmFtZTo6anNEZWZhdWx0U3RhdHVzQmFyVGV4dCk6CisgICAgICAgIChGcmFtZTo6cmVmZXJy
ZXIpOgorICAgICAgICAoRnJhbWU6Omxhc3RNb2RpZmllZCk6CisgICAgICAgIChGcmFtZTo6cmVw
YXJzZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRnJhbWU6OmZyYW1lTmFtZXMpOgorICAgICAg
ICAoRnJhbWU6OmZyYW1lcyk6CisgICAgICAgIChGcmFtZTo6Y2hpbGRGcmFtZU5hbWVkKToKKyAg
ICAgICAgKEZyYW1lOjpzZXRETkRFbmFibGVkKToKKyAgICAgICAgKEZyYW1lOjpkbmRFbmFibGVk
KToKKyAgICAgICAgKEZyYW1lOjpzaG91bGREcmFnQXV0b05vZGUpOgorICAgICAgICAoRnJhbWU6
OmN1c3RvbUV2ZW50KToKKyAgICAgICAgKEZyYW1lOjppc1BvaW50SW5zaWRlU2VsZWN0aW9uKToK
KyAgICAgICAgKEZyYW1lOjpzZWxlY3RDbG9zZXN0V29yZEZyb21Nb3VzZUV2ZW50KToKKyAgICAg
ICAgKEZyYW1lOjpoYW5kbGVNb3VzZVByZXNzRXZlbnREb3VibGVDbGljayk6CisgICAgICAgIChG
cmFtZTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2spOgorICAgICAgICAoRnJhbWU6
OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKEZyYW1lOjpraHRt
bE1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChGcmFtZTo6a2h0bWxNb3VzZURvdWJsZUNsaWNr
RXZlbnQpOgorICAgICAgICAoRnJhbWU6OmhhbmRsZU1vdXNlTW92ZUV2ZW50U2VsZWN0aW9uKToK
KyAgICAgICAgKEZyYW1lOjpraHRtbE1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKEZyYW1lOjpr
aHRtbE1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKEZyYW1lOjpraHRtbERyYXdDb250ZW50
c0V2ZW50KToKKyAgICAgICAgKEZyYW1lOjpzdGFydEF1dG9TY3JvbGwpOgorICAgICAgICAoRnJh
bWU6OnN0b3BBdXRvU2Nyb2xsKToKKyAgICAgICAgKEZyYW1lOjpzZWxlY3RBbGwpOgorICAgICAg
ICAoRnJhbWU6OnNlbGVjdENvbnRlbnRzT2ZOb2RlKToKKyAgICAgICAgKEZyYW1lOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24pOgorICAgICAgICAoRnJhbWU6OnNob3VsZEJlZ2luRWRpdGluZyk6Cisg
ICAgICAgIChGcmFtZTo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChGcmFtZTo6aXNDb250
ZW50RWRpdGFibGUpOgorICAgICAgICAoRnJhbWU6Omxhc3RFZGl0Q29tbWFuZCk6CisgICAgICAg
IChGcmFtZTo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoRnJhbWU6OnVuYXBwbGllZEVkaXRp
bmcpOgorICAgICAgICAoRnJhbWU6OnJlYXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoRnJhbWU6
OnR5cGluZ1N0eWxlKToKKyAgICAgICAgKEZyYW1lOjpzZXRUeXBpbmdTdHlsZSk6CisgICAgICAg
IChGcmFtZTo6Y2xlYXJUeXBpbmdTdHlsZSk6CisgICAgICAgIChGcmFtZTo6c2xvdFBhcnRSZW1v
dmVkKToKKyAgICAgICAgKEZyYW1lOjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChGcmFtZTo6b3BlbmVyKToKKyAgICAgICAgKEZyYW1lOjpzZXRPcGVuZXIpOgorICAgICAgICAo
RnJhbWU6Om9wZW5lZEJ5SlMpOgorICAgICAgICAoRnJhbWU6OnNldE9wZW5lZEJ5SlMpOgorICAg
ICAgICAoRnJhbWU6OnByZWxvYWRTdHlsZVNoZWV0KToKKyAgICAgICAgKEZyYW1lOjpwcmVsb2Fk
U2NyaXB0KToKKyAgICAgICAgKEZyYW1lOjpyZXN0b3JlZCk6CisgICAgICAgIChGcmFtZTo6aW5j
cmVtZW50RnJhbWVDb3VudCk6CisgICAgICAgIChGcmFtZTo6ZGVjcmVtZW50RnJhbWVDb3VudCk6
CisgICAgICAgIChGcmFtZTo6dG9wTGV2ZWxGcmFtZUNvdW50KToKKyAgICAgICAgKEZyYW1lOjp0
YWJzVG9MaW5rcyk6CisgICAgICAgIChGcmFtZTo6dGFic1RvQWxsQ29udHJvbHMpOgorICAgICAg
ICAoRnJhbWU6OmNvcHlUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoRnJhbWU6OmN1dFRvUGFzdGVi
b2FyZCk6CisgICAgICAgIChGcmFtZTo6cGFzdGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChG
cmFtZTo6cGFzdGVBbmRNYXRjaFN0eWxlKToKKyAgICAgICAgKEZyYW1lOjp0cmFuc3Bvc2UpOgor
ICAgICAgICAoRnJhbWU6OnJlZG8pOgorICAgICAgICAoRnJhbWU6OnVuZG8pOgorICAgICAgICAo
RnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChGcmFtZTo6YXBwbHlT
dHlsZSk6CisgICAgICAgIChGcmFtZTo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgICh1
cGRhdGVTdGF0ZSk6CisgICAgICAgIChGcmFtZTo6c2VsZWN0aW9uSGFzU3R5bGUpOgorICAgICAg
ICAoRnJhbWU6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUpOgorICAgICAgICAoRnJhbWU6OnNlbGVj
dGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKEZyYW1lOjpzZWxlY3Rpb25D
b21wdXRlZFN0eWxlKToKKyAgICAgICAgKEZyYW1lOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVs
ZW1lbnQpOgorICAgICAgICAoRnJhbWU6OnJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVu
dCk6CisgICAgICAgIChGcmFtZTo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQpOgorICAgICAg
ICAoRnJhbWU6OnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KToKKyAgICAgICAgKEZyYW1l
Ojppc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdCk6CisgICAgICAgIChGcmFtZTo6Y29ubmVj
dENoaWxkKToKKyAgICAgICAgKEZyYW1lOjpkaXNjb25uZWN0Q2hpbGQpOgorICAgICAgICAoRnJh
bWU6OmtlZXBBbGl2ZSk6CisgICAgICAgIChGcmFtZTo6c2xvdEVuZExpZmVTdXBwb3J0KToKKyAg
ICAgICAgKEZyYW1lOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCk6
CisgICAgICAgIChGcmFtZTo6aGFuZGxlRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKiBraHRt
bC9GcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5j
cHA6CisgICAgICAgIChraHRtbDo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6
CisgICAgICAgIChraHRtbDo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6
CisgICAgICAgIChraHRtbDo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3Rvcik6Cisg
ICAgICAgIChraHRtbDo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAg
IChraHRtbDo6Q1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUpOgorICAgICAgICAqIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmg6CisgICAgICAgICog
a2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHA6CisgICAgICAgIChLSlM6OlNjcmlwdEludGVycHJl
dGVyOjpTY3JpcHRJbnRlcnByZXRlcik6CisgICAgICAgIChLSlM6OlNjcmlwdEludGVycHJldGVy
Ojp+U2NyaXB0SW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2JpbmRpbmcu
aDoKKyAgICAgICAgKEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXI6OmZyYW1lKToKKyAgICAgICAgKiBr
aHRtbC9lY21hL2tqc19kb20uY3BwOgorICAgICAgICAoS0pTOjpET01Eb2N1bWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OmdldERPTURvY3VtZW50Tm9kZSk6CisgICAgICAg
IChLSlM6OmNoZWNrTm9kZVNlY3VyaXR5KToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19ldmVu
dHMuY3BwOgorICAgICAgICAoS0pTOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAoS0pTOjpKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUpOgorICAg
ICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpLSlM6OkhUTUxE
b2NGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpIVE1MRG9jdW1lbnQ6
Om5hbWVkSXRlbUdldHRlcik6CisgICAgICAgIChLSlM6OkhUTUxEb2N1bWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eSk6CisgICAgICAgIChLSlM6OktKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZVByb3Bl
cnR5KToKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OmZyYW1lc2V0TmFtZUdldHRlcik6Cisg
ICAgICAgIChLSlM6OkhUTUxFbGVtZW50OjpmcmFtZVdpbmRvd1Byb3BlcnR5R2V0dGVyKToKKyAg
ICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChL
SlM6OktKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKToKKyAgICAgICAgKEtKUzo6SW1h
Z2U6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19uYXZpZ2F0b3Iu
Y3BwOgorICAgICAgICAoS0pTOjpOYXZpZ2F0b3I6Ok5hdmlnYXRvcik6CisgICAgICAgIChLSlM6
Ok5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Ok5hdmlnYXRvckZ1
bmM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19uYXZpZ2F0b3Iu
aDoKKyAgICAgICAgKEtKUzo6TmF2aWdhdG9yOjpmcmFtZSk6CisgICAgICAgICoga2h0bWwvZWNt
YS9ranNfcHJveHkuY3BwOgorICAgICAgICAoS0pTUHJveHlJbXBsOjpLSlNQcm94eUltcGwpOgor
ICAgICAgICAoS0pTUHJveHlJbXBsOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlNQcm94eUltcGw6
OmNsZWFyKToKKyAgICAgICAgKEtKU1Byb3h5SW1wbDo6Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChLSlNQcm94eUltcGw6OmludGVycHJldGVyKToKKyAgICAgICAgKEtKU1Byb3h5
SW1wbDo6aW5pdFNjcmlwdCk6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfcHJveHkuaDoKKyAg
ICAgICAgKiBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwOgorICAgICAgICAoS0pTOjpKU05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pz
X3dpbmRvdy5jcHA6CisgICAgICAgIChLSlM6Okhpc3Rvcnk6Okhpc3RvcnkpOgorICAgICAgICAo
S0pTOjpGcmFtZUFycmF5OjpGcmFtZUFycmF5KToKKyAgICAgICAgKEtKUzo6U2NyZWVuOjpnZXRW
YWx1ZVByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6V2luZG93OjpXaW5kb3cpOgorICAgICAgICAo
S0pTOjpXaW5kb3c6OmludGVycHJldGVyKToKKyAgICAgICAgKEtKUzo6V2luZG93OjpyZXRyaWV2
ZVdpbmRvdyk6CisgICAgICAgIChLSlM6OldpbmRvdzo6cmV0cmlldmUpOgorICAgICAgICAoS0pT
OjpXaW5kb3c6OmxvY2F0aW9uKToKKyAgICAgICAgKEtKUzo6V2luZG93OjpzZWxlY3Rpb24pOgor
ICAgICAgICAoS0pTOjpXaW5kb3c6OmxvY2F0aW9uYmFyKToKKyAgICAgICAgKEtKUzo6V2luZG93
OjptZW51YmFyKToKKyAgICAgICAgKEtKUzo6V2luZG93OjpwZXJzb25hbGJhcik6CisgICAgICAg
IChLSlM6OldpbmRvdzo6c3RhdHVzYmFyKToKKyAgICAgICAgKEtKUzo6V2luZG93Ojp0b29sYmFy
KToKKyAgICAgICAgKEtKUzo6V2luZG93OjpzY3JvbGxiYXJzKToKKyAgICAgICAgKEtKUzo6YWxs
b3dQb3BVcCk6CisgICAgICAgIChLSlM6OmNyZWF0ZU5ld1dpbmRvdyk6CisgICAgICAgIChLSlM6
OmNhblNob3dNb2RhbERpYWxvZyk6CisgICAgICAgIChLSlM6OmNhblNob3dNb2RhbERpYWxvZ05v
dyk6CisgICAgICAgIChLSlM6OnNob3dNb2RhbERpYWxvZyk6CisgICAgICAgIChLSlM6OldpbmRv
dzo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OldpbmRvdzo6Y2hpbGRGcmFtZUdl
dHRlcik6CisgICAgICAgIChLSlM6OldpbmRvdzo6bmFtZWRGcmFtZUdldHRlcik6CisgICAgICAg
IChLSlM6OldpbmRvdzo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpXaW5kb3c6Om5hbWVk
SXRlbUdldHRlcik6CisgICAgICAgIChLSlM6OldpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEtKUzo6V2luZG93OjpwdXQpOgorICAgICAgICAoS0pTOjpXaW5kb3c6OnRvQm9v
bGVhbik6CisgICAgICAgIChLSlM6OldpbmRvdzo6c2NoZWR1bGVDbG9zZSk6CisgICAgICAgIChL
SlM6OldpbmRvdzo6aXNTYWZlU2NyaXB0KToKKyAgICAgICAgKEtKUzo6V2luZG93OjpzZXRMaXN0
ZW5lcik6CisgICAgICAgIChLSlM6OldpbmRvdzo6Z2V0TGlzdGVuZXIpOgorICAgICAgICAoS0pT
OjpXaW5kb3c6OnNldEN1cnJlbnRFdmVudCk6CisgICAgICAgIChLSlM6OldpbmRvd0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6V2luZG93Ojp1cGRhdGVMYXlvdXQpOgorICAg
ICAgICAoS0pTOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAoS0pTOjpXaW5k
b3dRT2JqZWN0OjpXaW5kb3dRT2JqZWN0KToKKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6Z2V0
VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkZyYW1lQXJyYXk6OmluZGV4R2V0dGVyKToK
KyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgIChLSlM6OkZy
YW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChLSlM6OkxvY2F0aW9uOjpM
b2NhdGlvbik6CisgICAgICAgIChLSlM6OkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KToKKyAg
ICAgICAgKEtKUzo6TG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChLSlM6
OkxvY2F0aW9uOjpwdXQpOgorICAgICAgICAoS0pTOjpMb2NhdGlvbjo6dG9TdHJpbmcpOgorICAg
ICAgICAoS0pTOjpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6
U2VsZWN0aW9uOjpTZWxlY3Rpb24pOgorICAgICAgICAoS0pTOjpTZWxlY3Rpb246OmdldFZhbHVl
UHJvcGVydHkpOgorICAgICAgICAoS0pTOjpTZWxlY3Rpb246OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgIChLSlM6OlNlbGVjdGlvbjo6dG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpTZWxl
Y3Rpb25GdW5jOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChLSlM6OkJhckluZm86OkJhcklu
Zm8pOgorICAgICAgICAoS0pTOjpCYXJJbmZvOjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAg
KEtKUzo6QmFySW5mbzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEtKUzo6SGlzdG9y
eTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Okhpc3RvcnlGdW5jOjpjYWxsQXNG
dW5jdGlvbik6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfd2luZG93Lmg6CisgICAgICAgIChL
SlM6OldpbmRvdzo6ZnJhbWUpOgorICAgICAgICAoS0pTOjpMb2NhdGlvbjo6ZnJhbWUpOgorICAg
ICAgICAoS0pTOjpTZWxlY3Rpb246OmZyYW1lKToKKyAgICAgICAgKEtKUzo6QmFySW5mbzo6ZnJh
bWUpOgorICAgICAgICAqIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwOgorICAgICAgICAo
S0pTOjpYTUxIdHRwUmVxdWVzdDo6Y2hhbmdlU3RhdGUpOgorICAgICAgICAoS0pTOjpYTUxIdHRw
UmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIGtodG1sL2VkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6bW9kaWZ5KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjp4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmZyYW1lKToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9lZGl0
X2NvbW1hbmQuY3BwOgorICAgICAgICAoa2h0bWw6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6
CisgICAgICAgIChraHRtbDo6RWRpdENvbW1hbmQ6OmFwcGx5KToKKyAgICAgICAgKGtodG1sOjpF
ZGl0Q29tbWFuZDo6dW5hcHBseSk6CisgICAgICAgIChraHRtbDo6RWRpdENvbW1hbmQ6OnJlYXBw
bHkpOgorICAgICAgICAoa2h0bWw6OkVkaXRDb21tYW5kOjpzdHlsZUF0UG9zaXRpb24pOgorICAg
ICAgICAqIGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAqIGtodG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6SW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9p
bnNlcnRfdGV4dF9jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpJbnNlcnRUZXh0Q29tbWFu
ZDo6aW5wdXQpOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcDoKKyAgICAg
ICAgKERPTTo6SlNFZGl0b3I6OmV4ZWNDb21tYW5kKToKKyAgICAgICAgKERPTTo6SlNFZGl0b3I6
OnF1ZXJ5Q29tbWFuZEVuYWJsZWQpOgorICAgICAgICAoRE9NOjpKU0VkaXRvcjo6cXVlcnlDb21t
YW5kSW5kZXRlcm0pOgorICAgICAgICAoRE9NOjpKU0VkaXRvcjo6cXVlcnlDb21tYW5kU3RhdGUp
OgorICAgICAgICAoRE9NOjpKU0VkaXRvcjo6cXVlcnlDb21tYW5kVmFsdWUpOgorICAgICAgICAq
IGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmg6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9yZXBs
YWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy90ZXh0X2dyYW51
bGFyaXR5Lmg6CisgICAgICAgICoga2h0bWwvZWRpdGluZy90eXBpbmdfY29tbWFuZC5jcHA6Cisg
ICAgICAgIChraHRtbDo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAg
IChraHRtbDo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAoa2h0bWw6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoa2h0bWw6OlR5
cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChraHRtbDo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KToKKyAgICAgICAg
KGtodG1sOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAg
ICAoa2h0bWw6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyk6Cisg
ICAgICAgIChraHRtbDo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKToK
KyAgICAgICAgKGtodG1sOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKToKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwOgorICAgICAgICAo
SFRNTEZyYW1lRWxlbWVudEltcGw6OmlzVVJMQWxsb3dlZCk6CisgICAgICAgIChIVE1MRnJhbWVF
bGVtZW50SW1wbDo6b3BlblVSTCk6CisgICAgICAgIChIVE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0
YWNoKToKKyAgICAgICAgKEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpjbG9zZSk6CisgICAgICAgIChI
VE1MRnJhbWVFbGVtZW50SW1wbDo6Y29udGVudFBhcnQpOgorICAgICAgICAoSFRNTEZyYW1lRWxl
bWVudEltcGw6OmNvbnRlbnREb2N1bWVudCk6CisgICAgICAgIChIVE1MSUZyYW1lRWxlbWVudElt
cGw6OmF0dGFjaCk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmg6CisgICAg
ICAgICoga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwOgorICAgICAgICAqIGtodG1sL2h0
bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MRG9jdW1lbnRJbXBs
OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5j
cHA6CisgICAgICAgIChIVE1MRWxlbWVudEltcGw6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAg
ICAgKEhUTUxFbGVtZW50SW1wbDo6c2V0Q29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKiBraHRt
bC9odG1sL2h0bWxfZm9ybWltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpmb3JtRGF0YSk6CisgICAgICAgIChET006OkhUTUxGb3JtRWxlbWVudEltcGw6OnByZXBh
cmVTdWJtaXQpOgorICAgICAgICAoRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQpOgor
ICAgICAgICAoRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpyZXNldCk6CisgICAgICAgIChET006
OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjppc0tleWJvYXJkRm9jdXNhYmxlKToKKyAgICAg
ICAgKERPTTo6SFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
ICoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcDoKKyAgICAgICAgKEhUTUxCYXNlRWxlbWVu
dEltcGw6OnByb2Nlc3MpOgorICAgICAgICAoSFRNTExpbmtFbGVtZW50SW1wbDo6cHJvY2Vzcyk6
CisgICAgICAgIChIVE1MU2NyaXB0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgor
ICAgICAgICAoSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpldmFsdWF0ZVNjcmlwdCk6CisgICAgICAg
ICoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MQW5jaG9yRWxlbWVudEltcGw6
OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAgICAgICAoRE9NOjpIVE1MQW5jaG9yRWxlbWVudElt
cGw6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9vYmpl
Y3RpbXBsLmNwcDoKKyAgICAgICAgKERPTTo6SFRNTEFwcGxldEVsZW1lbnRJbXBsOjpjcmVhdGVS
ZW5kZXJlcik6CisgICAgICAgIChET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Z2V0QXBwbGV0
SW5zdGFuY2UpOgorICAgICAgICAoRE9NOjpIVE1MRW1iZWRFbGVtZW50SW1wbDo6Z2V0RW1iZWRJ
bnN0YW5jZSk6CisgICAgICAgIChET006OkhUTUxFbWJlZEVsZW1lbnRJbXBsOjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOjpnZXRPYmplY3RJ
bnN0YW5jZSk6CisgICAgICAgIChET006OkhUTUxPYmplY3RFbGVtZW50SW1wbDo6cmVuZGVyZXJJ
c05lZWRlZCk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHA6CisgICAg
ICAgICoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcDoKKyAgICAgICAgKEhUTUxQYXJzZXI6Om5v
c2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sdG9rZW5p
emVyLmNwcDoKKyAgICAgICAgKGtodG1sOjpIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKToK
KyAgICAgICAgKGtodG1sOjpIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRpb24pOgorICAgICAg
ICAoa2h0bWw6OkhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKToKKyAgICAgICAgKGtodG1sOjpIVE1M
VG9rZW5pemVyOjp3cml0ZSk6CisgICAgICAgIChraHRtbDo6SFRNTFRva2VuaXplcjo6c3RvcFBh
cnNpbmcpOgorICAgICAgICAoa2h0bWw6OkhUTUxUb2tlbml6ZXI6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoa2h0bWw6OkhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbik6CisgICAgICAgICoga2h0
bWwva2h0bWxfcGFydC5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2h0bWwva2h0bWxfcGFydC5o
OiBSZW1vdmVkLgorICAgICAgICAqIGtodG1sL2todG1scGFydF9wLmg6CisgICAgICAgIChLSFRN
TFBhcnRQcml2YXRlOjpLSFRNTFBhcnRQcml2YXRlKToKKyAgICAgICAgKiBraHRtbC9raHRtbHZp
ZXcuY3BwOgorICAgICAgICAoS0hUTUxWaWV3OjpLSFRNTFZpZXcpOgorICAgICAgICAoS0hUTUxW
aWV3Ojp+S0hUTUxWaWV3KToKKyAgICAgICAgKEtIVE1MVmlldzo6Y2xlYXJQYXJ0KToKKyAgICAg
ICAgKEtIVE1MVmlldzo6Y2xlYXIpOgorICAgICAgICAoS0hUTUxWaWV3OjpyZXNpemVFdmVudCk6
CisgICAgICAgIChLSFRNTFZpZXc6OmFkanVzdFZpZXdTaXplKToKKyAgICAgICAgKEtIVE1MVmll
dzo6bGF5b3V0KToKKyAgICAgICAgKEtIVE1MVmlldzo6dXBkYXRlRGFzaGJvYXJkUmVnaW9ucyk6
CisgICAgICAgIChLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAg
KEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAgICAgICAoc2Vs
ZWN0Q3Vyc29yKToKKyAgICAgICAgKEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCk6
CisgICAgICAgIChLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAg
ICAoS0hUTUxWaWV3OjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKEtIVE1MVmlldzo6ZGlzcGF0
Y2hEcmFnRXZlbnQpOgorICAgICAgICAoS0hUTUxWaWV3Ojp1cGRhdGVEcmFnQW5kRHJvcCk6Cisg
ICAgICAgIChLSFRNTFZpZXc6OmZvY3VzTmV4dFByZXZOb2RlKToKKyAgICAgICAgKEtIVE1MVmll
dzo6bWVkaWFUeXBlKToKKyAgICAgICAgKEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KToK
KyAgICAgICAgKEtIVE1MVmlldzo6dmlld3BvcnRXaGVlbEV2ZW50KToKKyAgICAgICAgKEtIVE1M
Vmlldzo6Zm9jdXNJbkV2ZW50KToKKyAgICAgICAgKEtIVE1MVmlldzo6Zm9jdXNPdXRFdmVudCk6
CisgICAgICAgIChLSFRNTFZpZXc6OnRpbWVyRXZlbnQpOgorICAgICAgICAoS0hUTUxWaWV3Ojpz
Y2hlZHVsZVJlbGF5b3V0KToKKyAgICAgICAgKEtIVE1MVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0
KToKKyAgICAgICAgKiBraHRtbC9raHRtbHZpZXcuaDoKKyAgICAgICAgKEtIVE1MVmlldzo6ZnJh
bWUpOgorICAgICAgICAqIGtodG1sL21pc2MvQ2FjaGVkSW1hZ2VDYWxsYmFjay5jcHA6CisgICAg
ICAgIChraHRtbDo6Q2FjaGVkSW1hZ2VDYWxsYmFjazo6bm90aWZ5VXBkYXRlKToKKyAgICAgICAg
KGtodG1sOjpDYWNoZWRJbWFnZUNhbGxiYWNrOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChr
aHRtbDo6Q2FjaGVkSW1hZ2VDYWxsYmFjazo6Y2xlYXIpOgorICAgICAgICAqIGtodG1sL21pc2Mv
Q2FjaGVkT2JqZWN0Lmg6CisgICAgICAgICoga2h0bWwvbWlzYy9Eb2NMb2FkZXIuY3BwOgorICAg
ICAgICAoa2h0bWw6OkRvY0xvYWRlcjo6RG9jTG9hZGVyKToKKyAgICAgICAgKGtodG1sOjpEb2NM
b2FkZXI6OnJlcXVlc3RJbWFnZSk6CisgICAgICAgIChraHRtbDo6RG9jTG9hZGVyOjpyZXF1ZXN0
U3R5bGVTaGVldCk6CisgICAgICAgIChraHRtbDo6RG9jTG9hZGVyOjpyZXF1ZXN0U2NyaXB0KToK
KyAgICAgICAgKGtodG1sOjpEb2NMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KToKKyAgICAg
ICAgKGtodG1sOjpEb2NMb2FkZXI6OnJlcXVlc3RYQkxEb2N1bWVudCk6CisgICAgICAgICoga2h0
bWwvbWlzYy9Eb2NMb2FkZXIuaDoKKyAgICAgICAgKGtodG1sOjpEb2NMb2FkZXI6OmZyYW1lKToK
KyAgICAgICAgKiBraHRtbC9taXNjL2xvYWRlci5jcHA6CisgICAgICAgIChraHRtbDo6TG9hZGVy
OjpzbG90UmVjZWl2ZWRSZXNwb25zZSk6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwOgorICAgICAgICAoa2h0bWw6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAg
ICAgICAgKGtodG1sOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRVbmRlcmxpbmUpOgor
ICAgICAgICAqIGtodG1sL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICoga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwOgorICAgICAgICAoUmVuZGVyQXBwbGV0Ojpj
cmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSk6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9ibG9jay5jcHA6CisgICAgICAgIChraHRtbDo6UmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQpOgor
ICAgICAgICAqIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzLmNwcDoKKyAgICAgICAgKiBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAgICAgICAoUmVuZGVyRmlsZUJ1dHRv
bjo6UmVuZGVyRmlsZUJ1dHRvbik6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
cmFtZXMuY3BwOgorICAgICAgICAoaXNVUkxBbGxvd2VkKToKKyAgICAgICAgKFJlbmRlclBhcnRP
YmplY3Q6OnVwZGF0ZVdpZGdldCk6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9s
YXllci5jcHA6CisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwOgor
ICAgICAgICAoUmVuZGVyT2JqZWN0OjpkcmFnZ2FibGVOb2RlKToKKyAgICAgICAgKiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcDoKKyAgICAgICAgKFJlbmRlcldpZGdldDo6ZXZl
bnRGaWx0ZXIpOgorICAgICAgICAqIGtodG1sL3htbC9kb20yX2V2ZW50c2ltcGwuaDoKKyAgICAg
ICAgKiBraHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwOgorICAgICAgICAoRG9jdW1lbnRJbXBsOjpE
b2N1bWVudEltcGwpOgorICAgICAgICAoRG9jdW1lbnRJbXBsOjp1cGRhdGVUaXRsZSk6CisgICAg
ICAgIChEb2N1bWVudEltcGw6OmZyYW1lKToKKyAgICAgICAgKERvY3VtZW50SW1wbDo6cmVjYWxj
U3R5bGUpOgorICAgICAgICAoRG9jdW1lbnRJbXBsOjp1cGRhdGVTZWxlY3Rpb24pOgorICAgICAg
ICAoRG9jdW1lbnRJbXBsOjpvcGVuKToKKyAgICAgICAgKERvY3VtZW50SW1wbDo6Y2xvc2UpOgor
ICAgICAgICAoRG9jdW1lbnRJbXBsOjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKERvY3VtZW50
SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAgIChEb2N1bWVudEltcGw6OnNlbGVjdGVk
U3R5bGVzaGVldFNldCk6CisgICAgICAgIChEb2N1bWVudEltcGw6OnNldFNlbGVjdGVkU3R5bGVz
aGVldFNldCk6CisgICAgICAgIChEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgor
ICAgICAgICAoRG9jdW1lbnRJbXBsOjpyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMpOgorICAgICAg
ICAoRG9jdW1lbnRJbXBsOjphY2NlcHRzRWRpdGluZ0ZvY3VzKToKKyAgICAgICAgKERvY3VtZW50
SW1wbDo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgIChEb2N1bWVudEltcGw6OmNy
ZWF0ZUhUTUxFdmVudExpc3RlbmVyKToKKyAgICAgICAgKERvY3VtZW50SW1wbDo6b3duZXJFbGVt
ZW50KToKKyAgICAgICAgKERvY3VtZW50SW1wbDo6cmVmZXJyZXIpOgorICAgICAgICAoRG9jdW1l
bnRJbXBsOjpwYXJlbnREb2N1bWVudCk6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9kb2NpbXBs
Lmg6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHA6CisgICAgICAgIChF
bGVtZW50SW1wbDo6Zm9jdXMpOgorICAgICAgICAqIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3Bw
OgorICAgICAgICAoRE9NOjpOb2RlSW1wbDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICoga2h0
bWwveG1sL2RvbV94bWxpbXBsLmNwcDoKKyAgICAgICAgKERPTTo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uSW1wbDo6Y2hlY2tTdHlsZVNoZWV0KToKKyAgICAgICAgKiBraHRtbC94bWwveG1sX3Rva2Vu
aXplci5jcHA6CisgICAgICAgIChraHRtbDo6WE1MVG9rZW5pemVyOjpwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24pOgorICAgICAgICAoa2h0bWw6OlhNTFRva2VuaXplcjo6ZXhlY3V0ZVNjcmlwdHMpOgor
ICAgICAgICAoa2h0bWw6OlhNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAq
IGtodG1sL3hzbC94c2x0X3Byb2Nlc3NvcmltcGwuY3BwOgorICAgICAgICAoRE9NOjpYU0xUUHJv
Y2Vzc29ySW1wbDo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQUVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFNWR0FFbGVtZW50SW1wbDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudEltcGwu
Y3BwOgorICAgICAgICAoU1ZHSW1hZ2VFbGVtZW50SW1wbDo6bm90aWZ5RmluaXNoZWQpOgorICAg
ICAgICAqIGt3cS9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgS0pTOjpCaW5kaW5nczo6XSk6
CisgICAgICAgICoga3dxL0RPTUhUTUwubW06CisgICAgICAgICoga3dxL0RPTUludGVybmFsLm1t
OgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX2luaXRpYWxpemVTY3JpcHRET01Ob2RlSW1w
XSk6CisgICAgICAgICoga3dxL0tXUUFjY09iamVjdC5tbToKKyAgICAgICAgKC1bS1dRQWNjT2Jq
ZWN0IHRleHRVbmRlckVsZW1lbnRdKToKKyAgICAgICAgKC1bS1dRQWNjT2JqZWN0IHZhbHVlXSk6
CisgICAgICAgICgtW0tXUUFjY09iamVjdCBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpdKToK
KyAgICAgICAgKC1bS1dRQWNjT2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToK
KyAgICAgICAgKC1bS1dRQWNjT2JqZWN0IGRvQVhUZXh0TWFya2VyRm9yUG9zaXRpb246XSk6Cisg
ICAgICAgICgtW0tXUUFjY09iamVjdCByZW5kZXJlckZvclZpZXc6XSk6CisgICAgICAgICgtW0tX
UUFjY09iamVjdCBkb1NldEFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICog
a3dxL0tXUUNsaXBib2FyZC5oOgorICAgICAgICAqIGt3cS9LV1FDbGlwYm9hcmQubW06CisgICAg
ICAgIChLV1FDbGlwYm9hcmQ6OktXUUNsaXBib2FyZCk6CisgICAgICAgIChLV1FDbGlwYm9hcmQ6
OmRyYWdOU0ltYWdlKToKKyAgICAgICAgKiBrd3EvS1dRQ29tYm9Cb3gubW06CisgICAgICAgICgt
W0tXUVBvcFVwQnV0dG9uQ2VsbCB0cmFja01vdXNlOmluUmVjdDpvZlZpZXc6dW50aWxNb3VzZVVw
Ol0pOgorICAgICAgICAoLVtLV1FQb3BVcEJ1dHRvbiBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgor
ICAgICAgICAoLVtLV1FQb3BVcEJ1dHRvbiByZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAg
ICAoLVtLV1FQb3BVcEJ1dHRvbiBuZXh0S2V5Vmlld10pOgorICAgICAgICAoLVtLV1FQb3BVcEJ1
dHRvbiBwcmV2aW91c0tleVZpZXddKToKKyAgICAgICAgKiBrd3EvS1dRRmlsZUJ1dHRvbi5oOgor
ICAgICAgICAqIGt3cS9LV1FGaWxlQnV0dG9uLm1tOgorICAgICAgICAoS1dRRmlsZUJ1dHRvbjo6
S1dRRmlsZUJ1dHRvbik6CisgICAgICAgIChLV1FGaWxlQnV0dG9uOjpmb2N1c1BvbGljeSk6Cisg
ICAgICAgIChLV1FGaWxlQnV0dG9uOjpmb2N1c0NoYW5nZWQpOgorICAgICAgICAqIGt3cS9LV1FG
cmFtZS5tbToKKyAgICAgICAgKFFGcmFtZTo6c2V0RnJhbWVTdHlsZSk6CisgICAgICAgICoga3dx
L0tXUUtIVE1MRmFjdG9yeS5oOgorICAgICAgICAqIGt3cS9LV1FLSFRNTFBhcnQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGt3cS9LV1FLSFRNTFBhcnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBr
d3EvS1dRS0hUTUxQYXJ0Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIGt3cS9LV1FLSFRNTFBhcnRC
cm93c2VyRXh0ZW5zaW9uLmg6CisgICAgICAgICoga3dxL0tXUUtIVE1MUGFydEJyb3dzZXJFeHRl
bnNpb24ubW06CisgICAgICAgIChLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpLSFRNTFBhcnRC
cm93c2VyRXh0ZW5zaW9uKToKKyAgICAgICAgKEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246Om9w
ZW5VUkxSZXF1ZXN0KToKKyAgICAgICAgKEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OmNyZWF0
ZU5ld1dpbmRvdyk6CisgICAgICAgIChLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpzZXRJY29u
VVJMKToKKyAgICAgICAgKEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OnNldFR5cGVkSWNvblVS
TCk6CisgICAgICAgIChLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpjYW5SdW5Nb2RhbCk6Cisg
ICAgICAgIChLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpjYW5SdW5Nb2RhbE5vdyk6CisgICAg
ICAgIChLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpydW5Nb2RhbCk6CisgICAgICAgICoga3dx
L0tXUUtIVE1MVmlldy5jcHA6CisgICAgICAgIChLSFRNTFZpZXc6OnRvcExldmVsV2lkZ2V0KToK
KyAgICAgICAgKiBrd3EvS1dRS0phdmFBcHBsZXRXaWRnZXQuaDoKKyAgICAgICAgKiBrd3EvS1dR
S0phdmFBcHBsZXRXaWRnZXQubW06CisgICAgICAgIChLSmF2YUFwcGxldFdpZGdldDo6S0phdmFB
cHBsZXRXaWRnZXQpOgorICAgICAgICAqIGt3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLmg6
CisgICAgICAgIChLUGFydHM6OkJyb3dzZXJJbnRlcmZhY2U6OkJyb3dzZXJJbnRlcmZhY2UpOgor
ICAgICAgICAqIGt3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLm1tOgorICAgICAgICAoS1Bh
cnRzOjpCcm93c2VySW50ZXJmYWNlOjpwcm9wZXJ0eSk6CisgICAgICAgIChLUGFydHM6OkJyb3dz
ZXJJbnRlcmZhY2U6OmNhbGxNZXRob2QpOgorICAgICAgICAqIGt3cS9LV1FMaW5lRWRpdC5tbToK
KyAgICAgICAgKiBrd3EvS1dRTGlzdEJveC5tbToKKyAgICAgICAgKC1bS1dRTGlzdEJveFNjcm9s
bFZpZXcgYmVjb21lRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bS1dRVGFibGVWaWV3IGtl
eURvd246XSk6CisgICAgICAgICgtW0tXUVRhYmxlVmlldyBrZXlVcDpdKToKKyAgICAgICAgKC1b
S1dRVGFibGVWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW0tXUVRhYmxl
VmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtLV1FUYWJsZVZpZXcgbmV4
dEtleVZpZXddKToKKyAgICAgICAgKC1bS1dRVGFibGVWaWV3IHByZXZpb3VzS2V5Vmlld10pOgor
ICAgICAgICAqIGt3cS9LV1FMb2FkZXIubW06CisgICAgICAgIChLV1FTZXJ2ZVJlcXVlc3QpOgor
ICAgICAgICAoS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QpOgorICAgICAgICAoS1dRQ2hlY2tJ
ZlJlbG9hZGluZyk6CisgICAgICAgIChLV1FDaGVja0NhY2hlT2JqZWN0U3RhdHVzKToKKyAgICAg
ICAgKEtXUUNhY2hlT2JqZWN0RXhwaXJlc1RpbWUpOgorICAgICAgICAqIGt3cS9LV1FPYmplY3Qu
Y3BwOgorICAgICAgICAoUU9iamVjdDo6aW5oZXJpdHMpOgorICAgICAgICAoUU9iamVjdDo6aXNG
cmFtZSk6CisgICAgICAgICoga3dxL0tXUU9iamVjdC5oOgorICAgICAgICAqIGt3cS9LV1FQYWdl
U3RhdGUubW06CisgICAgICAgICgtW0tXUVBhZ2VTdGF0ZSBkZWFsbG9jXSk6CisgICAgICAgICgt
W0tXUVBhZ2VTdGF0ZSBmaW5hbGl6ZV0pOgorICAgICAgICAqIGt3cS9LV1FSZWdFeHAuY3BwOgor
ICAgICAgICAoUVJlZ0V4cDo6S1dRUmVnRXhwUHJpdmF0ZTo6Y29tcGlsZSk6CisgICAgICAgICog
a3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHA6CisgICAgICAgICh3cml0ZSk6CisgICAgICAgICh3
cml0ZVNlbGVjdGlvbik6CisgICAgICAgICoga3dxL0tXUVNsaWRlci5tbToKKyAgICAgICAgKC1b
S1dRU2xpZGVyIGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW0tXUVNsaWRlciBy
ZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtLV1FTbGlkZXIgbmV4dEtleVZpZXdd
KToKKyAgICAgICAgKC1bS1dRU2xpZGVyIHByZXZpb3VzS2V5Vmlld10pOgorICAgICAgICAoLVtL
V1FTbGlkZXIgY2FuQmVjb21lS2V5Vmlld10pOgorICAgICAgICAoUVNsaWRlcjo6Zm9jdXNQb2xp
Y3kpOgorICAgICAgICAqIGt3cS9LV1FTbG90Lm1tOgorICAgICAgICAoS1dRU2xvdDo6S1dRU2xv
dCk6CisgICAgICAgIChLV1FTbG90OjpjYWxsKToKKyAgICAgICAgKiBrd3EvS1dRVGV4dEFyZWEu
bW06CisgICAgICAgICgtW0tXUVRleHRBcmVhVGV4dFZpZXcgdGV4dERpZENoYW5nZTpdKToKKyAg
ICAgICAgKC1bS1dRVGV4dEFyZWFUZXh0VmlldyBfaXNSZXNpemFibGVCeVVzZXJdKToKKyAgICAg
ICAgKC1bS1dRVGV4dEFyZWFUZXh0VmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAg
ICAoLVtLV1FUZXh0QXJlYVRleHRWaWV3IG5leHRLZXlWaWV3XSk6CisgICAgICAgICgtW0tXUVRl
eHRBcmVhVGV4dFZpZXcgcHJldmlvdXNLZXlWaWV3XSk6CisgICAgICAgICgtW0tXUVRleHRBcmVh
VGV4dFZpZXcgX3RyYWNrUmVzaXplRnJvbU1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bS1dRVGV4
dEFyZWFUZXh0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKC1bS1dRVGV4dEFyZWFUZXh0Vmll
dyBpbnNlcnRUYWI6XSk6CisgICAgICAgICgtW0tXUVRleHRBcmVhVGV4dFZpZXcgaW5zZXJ0QmFj
a3RhYjpdKToKKyAgICAgICAgKC1bS1dRVGV4dEFyZWFUZXh0VmlldyByZXNpZ25GaXJzdFJlc3Bv
bmRlcl0pOgorICAgICAgICAoLVtLV1FUZXh0QXJlYVRleHRWaWV3IHNob3VsZERyYXdJbnNlcnRp
b25Qb2ludF0pOgorICAgICAgICAoLVtLV1FUZXh0QXJlYVRleHRWaWV3IHNlbGVjdGVkVGV4dEF0
dHJpYnV0ZXNdKToKKyAgICAgICAgKC1bS1dRVGV4dEFyZWFUZXh0VmlldyBrZXlEb3duOl0pOgor
ICAgICAgICAoLVtLV1FUZXh0QXJlYVRleHRWaWV3IGtleVVwOl0pOgorICAgICAgICAqIGt3cS9L
V1FUZXh0RmllbGQubW06CisgICAgICAgICgtW0tXUVRleHRGaWVsZENvbnRyb2xsZXIgY29udHJv
bFRleHREaWRCZWdpbkVkaXRpbmc6XSk6CisgICAgICAgICgtW0tXUVRleHRGaWVsZENvbnRyb2xs
ZXIgY29udHJvbFRleHREaWRFbmRFZGl0aW5nOl0pOgorICAgICAgICAoLVtLV1FUZXh0RmllbGRD
b250cm9sbGVyIGNvbnRyb2xUZXh0RGlkQ2hhbmdlOl0pOgorICAgICAgICAoLVtLV1FUZXh0Rmll
bGRDb250cm9sbGVyIGNvbnRyb2w6dGV4dFZpZXc6ZG9Db21tYW5kQnlTZWxlY3RvcjpdKToKKyAg
ICAgICAgKC1bS1dRVGV4dEZpZWxkQ29udHJvbGxlciB0ZXh0VmlldzpzaG91bGRIYW5kbGVFdmVu
dDpdKToKKyAgICAgICAgKC1bS1dRVGV4dEZpZWxkQ29udHJvbGxlciBzZXRIYXNGb2N1czpdKToK
KyAgICAgICAgKC1bS1dRVGV4dEZpZWxkIG5leHRLZXlWaWV3XSk6CisgICAgICAgICgtW0tXUVRl
eHRGaWVsZCBwcmV2aW91c0tleVZpZXddKToKKyAgICAgICAgKC1bS1dRU2VjdXJlVGV4dEZpZWxk
IG5leHRLZXlWaWV3XSk6CisgICAgICAgICgtW0tXUVNlY3VyZVRleHRGaWVsZCBwcmV2aW91c0tl
eVZpZXddKToKKyAgICAgICAgKC1bS1dRU2VhcmNoRmllbGQgbmV4dEtleVZpZXddKToKKyAgICAg
ICAgKC1bS1dRU2VhcmNoRmllbGQgcHJldmlvdXNLZXlWaWV3XSk6CisgICAgICAgICoga3dxL0tX
UVRpbWVyLmg6CisgICAgICAgICoga3dxL0tXUVdpZGdldC5tbToKKyAgICAgICAgKFFXaWRnZXQ6
OnNldEFjdGl2ZVdpbmRvdyk6CisgICAgICAgIChRV2lkZ2V0OjpoYXNGb2N1cyk6CisgICAgICAg
IChRV2lkZ2V0OjpzZXRGb2N1cyk6CisgICAgICAgIChRV2lkZ2V0OjpjbGVhckZvY3VzKToKKyAg
ICAgICAgKFFXaWRnZXQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChRV2lkZ2V0OjptYXBGcm9tR2xv
YmFsKToKKyAgICAgICAgKFFXaWRnZXQ6OnNldElzU2VsZWN0ZWQpOgorICAgICAgICAqIGt3cS9N
YWNGcmFtZS5jcHA6IEFkZGVkLgorICAgICAgICAoTWFjRnJhbWU6OmlzRnJhbWVTZXQpOgorICAg
ICAgICAqIGt3cS9NYWNGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKE1hY0ZyYW1lOjppbnN0YW5j
ZXMpOgorICAgICAgICAoTWFjKToKKyAgICAgICAgKiBrd3EvTWFjRnJhbWUubW06IEFkZGVkLgor
ICAgICAgICAoRnJhbWU6OmNvbXBsZXRlZCk6CisgICAgICAgIChGcmFtZTo6b3BlblVSTCk6Cisg
ICAgICAgIChGcmFtZTo6b25VUkwpOgorICAgICAgICAoRnJhbWU6OnNldFN0YXR1c0JhclRleHQp
OgorICAgICAgICAoRnJhbWU6OnN0YXJ0ZWQpOgorICAgICAgICAocmVkaXJlY3Rpb25UaW1lck1v
bml0b3IpOgorICAgICAgICAoTWFjRnJhbWU6Ok1hY0ZyYW1lKToKKyAgICAgICAgKE1hY0ZyYW1l
Ojp+TWFjRnJhbWUpOgorICAgICAgICAoTWFjRnJhbWU6OmZyZWVDbGlwYm9hcmQpOgorICAgICAg
ICAoTWFjRnJhbWU6OnNldFNldHRpbmdzKToKKyAgICAgICAgKE1hY0ZyYW1lOjpnZW5lcmF0ZUZy
YW1lTmFtZSk6CisgICAgICAgIChNYWNGcmFtZTo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6Cisg
ICAgICAgIChNYWNGcmFtZTo6dXNlckdlc3R1cmVIaW50KToKKyAgICAgICAgKE1hY0ZyYW1lOjpv
cGVuVVJMKToKKyAgICAgICAgKE1hY0ZyYW1lOjpvcGVuVVJMUmVxdWVzdCk6CisgICAgICAgIChN
YWNGcmFtZTo6ZGlkTm90T3BlblVSTCk6CisgICAgICAgIChNYWNGcmFtZTo6Y3VycmVudEZvcm0p
OgorICAgICAgICAoTWFjRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbCk6CisgICAgICAg
IChNYWNGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChNYWNG
cmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudCk6CisgICAgICAgIChNYWNGcmFtZTo6Zmlu
ZFN0cmluZyk6CisgICAgICAgIChNYWNGcmFtZTo6Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMpOgor
ICAgICAgICAoTWFjRnJhbWU6OnJlY29yZEZvcm1WYWx1ZSk6CisgICAgICAgIChNYWNGcmFtZTo6
c3VibWl0Rm9ybSk6CisgICAgICAgIChNYWNGcmFtZTo6c2V0RW5jb2RpbmcpOgorICAgICAgICAo
TWFjRnJhbWU6OmFkZERhdGEpOgorICAgICAgICAoRnJhbWU6OmZyYW1lRGV0YWNoZWQpOgorICAg
ICAgICAoTWFjRnJhbWU6OnVybFNlbGVjdGVkKToKKyAgICAgICAgKE1hY0ZyYW1lOjpjcmVhdGVQ
YXJ0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpzZXRWaWV3KToKKyAgICAgICAgKE1hY0ZyYW1lOjp2
aWV3KToKKyAgICAgICAgKE1hY0ZyYW1lOjpzZXRUaXRsZSk6CisgICAgICAgIChNYWNGcmFtZTo6
c2V0U3RhdHVzQmFyVGV4dCk6CisgICAgICAgIChNYWNGcmFtZTo6c2NoZWR1bGVDbG9zZSk6Cisg
ICAgICAgIChNYWNGcmFtZTo6dW5mb2N1c1dpbmRvdyk6CisgICAgICAgIChNYWNGcmFtZTo6cmV2
ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKE1hY0ZyYW1lOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxp
bmcpOgorICAgICAgICAoTWFjRnJhbWU6OnNjcm9sbE92ZXJmbG93KToKKyAgICAgICAgKE1hY0Zy
YW1lOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKE1hY0ZyYW1lOjpyZWRpcmVjdGlvblRpbWVyU3Rh
cnRlZE9yU3RvcHBlZCk6CisgICAgICAgIChNYWNGcmFtZTo6cGFpbnQpOgorICAgICAgICAoTWFj
RnJhbWU6OmFkanVzdFBhZ2VIZWlnaHQpOgorICAgICAgICAoTWFjRnJhbWU6OnJlbmRlcmVyKToK
KyAgICAgICAgKE1hY0ZyYW1lOjp1c2VyQWdlbnQpOgorICAgICAgICAoTWFjRnJhbWU6Om1pbWVU
eXBlRm9yRmlsZU5hbWUpOgorICAgICAgICAoTWFjRnJhbWU6Om5leHRLZXlWaWV3SW5GcmFtZSk6
CisgICAgICAgIChNYWNGcmFtZTo6bmV4dEtleVZpZXdJbkZyYW1lSGllcmFyY2h5KToKKyAgICAg
ICAgKE1hY0ZyYW1lOjpuZXh0S2V5Vmlldyk6CisgICAgICAgIChNYWNGcmFtZTo6bmV4dEtleVZp
ZXdGb3JXaWRnZXQpOgorICAgICAgICAoTWFjRnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3du
SW5XaWRnZXQpOgorICAgICAgICAoTWFjRnJhbWU6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRp
b25UYWIpOgorICAgICAgICAoTWFjRnJhbWU6OmhhbmRsZUtleWJvYXJkT3B0aW9uVGFiSW5WaWV3
KToKKyAgICAgICAgKE1hY0ZyYW1lOjp0YWJzVG9MaW5rcyk6CisgICAgICAgIChNYWNGcmFtZTo6
dGFic1RvQWxsQ29udHJvbHMpOgorICAgICAgICAoTWFjRnJhbWU6OmV4ZWN1dGlvbkNvbnRleHRG
b3JET00pOgorICAgICAgICAoTWFjRnJhbWU6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAg
KE1hY0ZyYW1lOjp3aW5kb3dTY3JpcHRPYmplY3QpOgorICAgICAgICAoTWFjRnJhbWU6OndpbmRv
d1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpwYXJ0Q2xlYXJlZEluQmVnaW4p
OgorICAgICAgICAoTWFjRnJhbWU6OnBhdXNlVGltZW91dHMpOgorICAgICAgICAoTWFjRnJhbWU6
OnJlc3VtZVRpbWVvdXRzKToKKyAgICAgICAgKE1hY0ZyYW1lOjpjYW5DYWNoZVBhZ2UpOgorICAg
ICAgICAoTWFjRnJhbWU6OnNhdmVXaW5kb3dQcm9wZXJ0aWVzKToKKyAgICAgICAgKE1hY0ZyYW1l
OjpzYXZlTG9jYXRpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKE1hY0ZyYW1lOjpyZXN0b3JlV2lu
ZG93UHJvcGVydGllcyk6CisgICAgICAgIChNYWNGcmFtZTo6cmVzdG9yZUxvY2F0aW9uUHJvcGVy
dGllcyk6CisgICAgICAgIChNYWNGcmFtZTo6c2F2ZUludGVycHJldGVyQnVpbHRpbnMpOgorICAg
ICAgICAoTWFjRnJhbWU6OnJlc3RvcmVJbnRlcnByZXRlckJ1aWx0aW5zKToKKyAgICAgICAgKE1h
Y0ZyYW1lOjpvcGVuVVJMRnJvbVBhZ2VDYWNoZSk6CisgICAgICAgIChNYWNGcmFtZTo6ZnJhbWVG
b3JXaWRnZXQpOgorICAgICAgICAoTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCk6CisgICAgICAg
IChNYWNGcmFtZTo6ZnJhbWVGb3JOb2RlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpkb2N1bWVudFZp
ZXdGb3JOb2RlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpub2RlRm9yV2lkZ2V0KToKKyAgICAgICAg
KE1hY0ZyYW1lOjpzZXREb2N1bWVudEZvY3VzKToKKyAgICAgICAgKE1hY0ZyYW1lOjpjbGVhckRv
Y3VtZW50Rm9jdXMpOgorICAgICAgICAoTWFjRnJhbWU6OnNhdmVEb2N1bWVudFN0YXRlKToKKyAg
ICAgICAgKE1hY0ZyYW1lOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6CisgICAgICAgIChNYWNGcmFt
ZTo6bXV0YWJsZUluc3RhbmNlcyk6CisgICAgICAgIChNYWNGcmFtZTo6dXBkYXRlUG9saWN5QmFz
ZVVSTCk6CisgICAgICAgIChNYWNGcmFtZTo6c2V0UG9saWN5QmFzZVVSTCk6CisgICAgICAgIChN
YWNGcmFtZTo6cmVxdWVzdGVkVVJMU3RyaW5nKToKKyAgICAgICAgKE1hY0ZyYW1lOjppbmNvbWlu
Z1JlZmVycmVyKToKKyAgICAgICAgKE1hY0ZyYW1lOjpmb3JjZUxheW91dCk6CisgICAgICAgIChN
YWNGcmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UpOgorICAgICAgICAoTWFjRnJh
bWU6OnNlbmRSZXNpemVFdmVudCk6CisgICAgICAgIChNYWNGcmFtZTo6c2VuZFNjcm9sbEV2ZW50
KToKKyAgICAgICAgKE1hY0ZyYW1lOjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoTWFj
RnJhbWU6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKE1hY0ZyYW1lOjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpsb2NhdGlvbmJhclZpc2libGUpOgor
ICAgICAgICAoTWFjRnJhbWU6Om1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpw
ZXJzb25hbGJhclZpc2libGUpOgorICAgICAgICAoTWFjRnJhbWU6OnNjcm9sbGJhcnNWaXNpYmxl
KToKKyAgICAgICAgKE1hY0ZyYW1lOjpzdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKE1hY0Zy
YW1lOjp0b29sYmFyVmlzaWJsZSk6CisgICAgICAgIChNYWNGcmFtZTo6YWRkTWVzc2FnZVRvQ29u
c29sZSk6CisgICAgICAgIChNYWNGcmFtZTo6Y3JlYXRlRW1wdHlEb2N1bWVudCk6CisgICAgICAg
IChNYWNGcmFtZTo6YWRkTWV0YURhdGEpOgorICAgICAgICAoTWFjRnJhbWU6OmtleUV2ZW50KToK
KyAgICAgICAgKE1hY0ZyYW1lOjpzY3JvbGxUb0FuY2hvcik6CisgICAgICAgIChNYWNGcmFtZTo6
Y2xvc2VVUkwpOgorICAgICAgICAoTWFjRnJhbWU6OmNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KToK
KyAgICAgICAgKE1hY0ZyYW1lOjpraHRtbE1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChNYWNG
cmFtZTo6a2h0bWxNb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAgICAgICAoTWFjRnJhbWU6OnBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpsYXN0
RXZlbnRJc01vdXNlVXApOgorICAgICAgICAoTWFjRnJhbWU6Om1vdXNlRG93blZpZXdJZlN0aWxs
R29vZCk6CisgICAgICAgIChNYWNGcmFtZTo6ZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZCk6CisgICAg
ICAgIChNYWNGcmFtZTo6ZGlzcGF0Y2hEcmFnU3JjRXZlbnQpOgorICAgICAgICAoTWFjRnJhbWU6
OmV2ZW50TWF5U3RhcnREcmFnKToKKyAgICAgICAgKE1hY0ZyYW1lOjpraHRtbE1vdXNlTW92ZUV2
ZW50KToKKyAgICAgICAgKE1hY0ZyYW1lOjpkcmFnU291cmNlTW92ZWRUbyk6CisgICAgICAgIChN
YWNGcmFtZTo6ZHJhZ1NvdXJjZUVuZGVkQXQpOgorICAgICAgICAoTWFjRnJhbWU6OmRpc3BhdGNo
Q1BQRXZlbnQpOgorICAgICAgICAoTWFjRnJhbWU6Om1heUN1dCk6CisgICAgICAgIChNYWNGcmFt
ZTo6bWF5Q29weSk6CisgICAgICAgIChNYWNGcmFtZTo6bWF5UGFzdGUpOgorICAgICAgICAoTWFj
RnJhbWU6OnRyeUN1dCk6CisgICAgICAgIChNYWNGcmFtZTo6dHJ5Q29weSk6CisgICAgICAgIChN
YWNGcmFtZTo6dHJ5UGFzdGUpOgorICAgICAgICAoTWFjRnJhbWU6OmtodG1sTW91c2VSZWxlYXNl
RXZlbnQpOgorICAgICAgICAoTWFjRnJhbWU6OmNsZWFyVGltZXJzKToKKyAgICAgICAgKE1hY0Zy
YW1lOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoTWFjRnJhbWU6OnBh
c3NXaGVlbEV2ZW50VG9DaGlsZFdpZGdldCk6CisgICAgICAgIChNYWNGcmFtZTo6bW91c2VEb3du
KToKKyAgICAgICAgKE1hY0ZyYW1lOjptb3VzZURyYWdnZWQpOgorICAgICAgICAoTWFjRnJhbWU6
Om1vdXNlVXApOgorICAgICAgICAoTWFjRnJhbWU6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaWRnZXRU
cmFja2luZyk6CisgICAgICAgIChNYWNGcmFtZTo6bW91c2VNb3ZlZCk6CisgICAgICAgIChNYWNG
cmFtZTo6c2hvdWxkRHJhZ0F1dG9Ob2RlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpzZW5kQ29udGV4
dE1lbnVFdmVudCk6CisgICAgICAgIChNYWNGcmFtZTo6ZmlsZVdyYXBwZXJGb3JFbGVtZW50KToK
KyAgICAgICAgKE1hY0ZyYW1lOjphdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKE1hY0ZyYW1l
OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKE1hY0ZyYW1lOjp2aXNpYmxlU2VsZWN0aW9uUmVj
dCk6CisgICAgICAgIChNYWNGcmFtZTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSk6Cisg
ICAgICAgIChNYWNGcmFtZTo6aW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChNYWNGcmFtZTo6c2Vs
ZWN0aW9uSW1hZ2UpOgorICAgICAgICAoTWFjRnJhbWU6OnNuYXBzaG90RHJhZ0ltYWdlKToKKyAg
ICAgICAgKE1hY0ZyYW1lOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKE1hY0Zy
YW1lOjpmb250Rm9yU2VsZWN0aW9uKToKKyAgICAgICAgKE1hY0ZyYW1lOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKE1hY0ZyYW1lOjp0b3BMZXZlbFdpZGdl
dCk6CisgICAgICAgIChNYWNGcmFtZTo6dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSk6CisgICAgICAg
IChNYWNGcmFtZTo6c2VsZWN0aW9uU3RhcnRPZmZzZXQpOgorICAgICAgICAoTWFjRnJhbWU6OnNl
bGVjdGlvbkVuZE9mZnNldCk6CisgICAgICAgIChNYWNGcmFtZTo6c2VsZWN0aW9uU3RhcnQpOgor
ICAgICAgICAoTWFjRnJhbWU6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChNYWNGcmFtZTo6c2V0
QnJpZGdlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpvdmVycmlkZU1lZGlhVHlwZSk6CisgICAgICAg
IChNYWNGcmFtZTo6c2V0TWVkaWFUeXBlKToKKyAgICAgICAgKE1hY0ZyYW1lOjpzZXRTZWxlY3Rp
b25Gcm9tTm9uZSk6CisgICAgICAgIChNYWNGcmFtZTo6c2V0RGlzcGxheXNXaXRoRm9jdXNBdHRy
aWJ1dGVzKToKKyAgICAgICAgKE1hY0ZyYW1lOjpkaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMp
OgorICAgICAgICAoTWFjRnJhbWU6OnNldFdpbmRvd0hhc0ZvY3VzKToKKyAgICAgICAgKE1hY0Zy
YW1lOjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKToKKyAgICAgICAgKE1hY0ZyYW1lOjpib2R5
QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKE1hY0ZyYW1lOjprZXlib2FyZFVJTW9kZSk6Cisg
ICAgICAgIChNYWNGcmFtZTo6c2V0TmFtZSk6CisgICAgICAgIChNYWNGcmFtZTo6ZGlkVGVsbEJy
aWRnZUFib3V0TG9hZCk6CisgICAgICAgIChNYWNGcmFtZTo6aGF2ZVRvbGRCcmlkZ2VBYm91dExv
YWQpOgorICAgICAgICAoTWFjRnJhbWU6OmNsZWFyKToKKyAgICAgICAgKEZyYW1lOjpwcmludCk6
CisgICAgICAgIChNYWNGcmFtZTo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAg
ICAoTWFjRnJhbWU6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoTWFjRnJh
bWU6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKE1hY0ZyYW1lOjphZGRQ
bHVnaW5Sb290T2JqZWN0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpjbGVhbnVwUGx1Z2luUm9vdE9i
amVjdHMpOgorICAgICAgICAoTWFjRnJhbWU6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG9PclJlZG8p
OgorICAgICAgICAoTWFjRnJhbWU6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8pOgorICAgICAgICAo
TWFjRnJhbWU6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8pOgorICAgICAgICAoTWFjRnJhbWU6OmNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKE1hY0ZyYW1lOjppc3N1ZVVuZG9Db21t
YW5kKToKKyAgICAgICAgKE1hY0ZyYW1lOjppc3N1ZVJlZG9Db21tYW5kKToKKyAgICAgICAgKE1h
Y0ZyYW1lOjppc3N1ZUN1dENvbW1hbmQpOgorICAgICAgICAoTWFjRnJhbWU6Omlzc3VlQ29weUNv
bW1hbmQpOgorICAgICAgICAoTWFjRnJhbWU6Omlzc3VlUGFzdGVDb21tYW5kKToKKyAgICAgICAg
KE1hY0ZyYW1lOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQpOgorICAgICAgICAoTWFj
RnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCk6CisgICAgICAgIChGcmFtZTo6Y2FuVW5kbyk6
CisgICAgICAgIChGcmFtZTo6Y2FuUmVkbyk6CisgICAgICAgIChGcmFtZTo6Y2FuUGFzdGUpOgor
ICAgICAgICAoTWFjRnJhbWU6Om1hcmtNaXNzcGVsbGluZ3NJbkFkamFjZW50V29yZHMpOgorICAg
ICAgICAoTWFjRnJhbWU6Om1hcmtNaXNzcGVsbGluZ3MpOgorICAgICAgICAoTWFjRnJhbWU6OnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoTWFjRnJhbWU6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbik6CisgICAgICAgIChNYWNGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KToKKyAgICAgICAgKE1hY0ZyYW1lOjppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgIChNYWNG
cmFtZTo6c2hvdWxkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKE1hY0ZyYW1lOjpzaG91bGRFbmRF
ZGl0aW5nKToKKyAgICAgICAgKGNvbnZlcnRBdHRyaWJ1dGVzVG9VbmRlcmxpbmVzKToKKyAgICAg
ICAgKE1hY0ZyYW1lOjpzZXRNYXJrZWRUZXh0UmFuZ2UpOgorICAgICAgICAoTWFjRnJhbWU6Om1h
cmtlZFRleHRVc2VzVW5kZXJsaW5lcyk6CisgICAgICAgIChNYWNGcmFtZTo6bWFya2VkVGV4dFVu
ZGVybGluZXMpOgorICAgICAgICAoTWFjRnJhbWU6OmNhbkdvQmFja09yRm9yd2FyZCk6CisgICAg
ICAgIChNYWNGcmFtZTo6cHJlcGFyZUZvclVzZXJBY3Rpb24pOgorICAgICAgICAoTWFjRnJhbWU6
OmRpZEZpcnN0TGF5b3V0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpkYXNoYm9hcmRSZWdpb25zRGlj
dGlvbmFyeSk6CisgICAgICAgIChNYWNGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQpOgor
ICAgICAgICAoTWFjRnJhbWU6OmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KToKKyAgICAg
ICAgKE1hY0ZyYW1lOjppc0ZyYW1lKToKKyAgICAgICAgKE1hY0ZyYW1lOjptb3VzZVByZXNzTm9k
ZSk6CisgICAgICAgIChNYWNGcmFtZTo6aGFuZGxlZE9ubG9hZEV2ZW50cyk6CisgICAgICAgIChN
YWNGcmFtZTo6c2hvdWxkQ2xvc2UpOgorICAgICAgICAqIGt3cS9XZWJDb3JlQnJpZGdlLmg6Cisg
ICAgICAgICoga3dxL1dlYkNvcmVCcmlkZ2UubW06CisgICAgICAgICh1cGRhdGVSZW5kZXJpbmdG
b3JCaW5kaW5ncyk6CisgICAgICAgIChmcmFtZUhhc1NlbGVjdGlvbik6CisgICAgICAgICgrW1dl
YkNvcmVCcmlkZ2UgYnJpZGdlRm9yRE9NRG9jdW1lbnQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVC
cmlkZ2UgaW5pdF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGluaXRpYWxpemVTZXR0aW5n
czpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBkZWFsbG9jXSk6CisgICAgICAgICgtW1dl
YkNvcmVCcmlkZ2UgZmluYWxpemVdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBwYXJ0XSk6
CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2V0UGFyZW50Ol0pOgorICAgICAgICAoLVtXZWJD
b3JlQnJpZGdlIHBhcmVudF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWRdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBvcGVuVVJMOnJlbG9hZDpj
b250ZW50VHlwZTpyZWZyZXNoOmxhc3RNb2RpZmllZDpwYWdlQ2FjaGU6XSk6CisgICAgICAgICgt
W1dlYkNvcmVCcmlkZ2Ugc2V0RW5jb2Rpbmc6dXNlckNob3NlbjpdKToKKyAgICAgICAgKC1bV2Vi
Q29yZUJyaWRnZSBhZGREYXRhOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGNsb3NlVVJM
XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc3RvcExvYWRpbmddKToKKyAgICAgICAgKC1b
V2ViQ29yZUJyaWRnZSBkaWROb3RPcGVuVVJMOnBhZ2VDYWNoZTpdKToKKyAgICAgICAgKC1bV2Vi
Q29yZUJyaWRnZSBzYXZlRG9jdW1lbnRTdGF0ZV0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdl
IHJlc3RvcmVEb2N1bWVudFN0YXRlXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2Nyb2xs
VG9BbmNob3JXaXRoVVJMOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHNjcm9sbE92ZXJm
bG93SW5EaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
c2VuZFNjcm9sbFdoZWVsRXZlbnQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2F2ZURv
Y3VtZW50VG9QYWdlQ2FjaGVdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBjYW5DYWNoZVBh
Z2VdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBjbGVhcl0pOgorICAgICAgICAoLVtXZWJD
b3JlQnJpZGdlIGVuZF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHN0b3BdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSBoYW5kbGVGYWxsYmFja0NvbnRlbnRdKToKKyAgICAgICAgKC1b
V2ViQ29yZUJyaWRnZSBjcmVhdGVLSFRNTFZpZXdXaXRoTlNWaWV3Om1hcmdpbldpZHRoOm1hcmdp
bkhlaWdodDpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzY3JvbGxUb0FuY2hvcjpdKToK
KyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBpc1NlbGVjdGlvbkVkaXRhYmxlXSk6CisgICAgICAg
ICgtW1dlYkNvcmVCcmlkZ2Ugc2VsZWN0aW9uU3RhdGVdKToKKyAgICAgICAgKC1bV2ViQ29yZUJy
aWRnZSBfZG9jdW1lbnRUeXBlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2Vs
ZWN0ZWRTdHJpbmddKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzdHJpbmdGb3JSYW5nZTpd
KToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZWxlY3RBbGxdKToKKyAgICAgICAgKC1bV2Vi
Q29yZUJyaWRnZSBkZXNlbGVjdEFsbF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGRlc2Vs
ZWN0VGV4dF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGlzRnJhbWVTZXRdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSByZWFwcGx5U3R5bGVzRm9yRGV2aWNlVHlwZTpdKToKKyAgICAg
ICAgKG5vd1ByaW50aW5nKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBfc2V0dXBSb290Rm9y
UHJpbnRpbmc6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgZm9yY2VMYXlvdXRBZGp1c3Rp
bmdWaWV3U2l6ZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBmb3JjZUxheW91dFdpdGhN
aW5pbXVtUGFnZVdpZHRoOm1heGltdW1QYWdlV2lkdGg6YWRqdXN0aW5nVmlld1NpemU6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2VuZFJlc2l6ZUV2ZW50XSk6CisgICAgICAgICgtW1dl
YkNvcmVCcmlkZ2Ugc2VuZFNjcm9sbEV2ZW50XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
ZHJhd1JlY3Q6d2l0aFBhaW50ZXI6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgZHJhd1Jl
Y3Q6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmlu
dFdpZHRoU2NhbGVGYWN0b3I6cHJpbnRIZWlnaHQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2UgYWRqdXN0UGFnZUhlaWdodE5ldzp0b3A6Ym90dG9tOmxpbWl0Ol0pOgorICAgICAgICAoLVtX
ZWJDb3JlQnJpZGdlIGNvcHlET01UcmVlOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGNv
cHlSZW5kZXJUcmVlOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHJlbW92ZUZyb21GcmFt
ZV0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGluc3RhbGxJbkZyYW1lOl0pOgorICAgICAg
ICAoLVtXZWJDb3JlQnJpZGdlIHNldEFjdGl2YXRpb25FdmVudE51bWJlcjpdKToKKyAgICAgICAg
KC1bV2ViQ29yZUJyaWRnZSBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
bW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIG1vdXNlVXA6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgbW91c2VNb3ZlZDpdKToKKyAgICAgICAgKC1bV2ViQ29y
ZUJyaWRnZSBzZW5kQ29udGV4dE1lbnVFdmVudDpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRn
ZSBjdXJyZW50Rm9ybV0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHNlYXJjaEZvckxhYmVs
czpiZWZvcmVFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIG1hdGNoTGFiZWxz
OmFnYWluc3RFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGVsZW1lbnRBdFBv
aW50Ol0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIFVSTFdpdGhBdHRyaWJ1dGVTdHJpbmc6
XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2VhcmNoRm9yOmRpcmVjdGlvbjpjYXNlU2Vu
c2l0aXZlOndyYXA6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgYWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgYWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nU3RhcnRpbmdKdXN0QmVmb3JlU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkNvcmVC
cmlkZ2UgdW5tYXJrQWxsTWlzc3BlbGxpbmdzXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
c2V0VGV4dFNpemVNdWx0aXBsaWVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHRleHRF
bmNvZGluZ10pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIG5leHRLZXlWaWV3XSk6CisgICAg
ICAgICgtW1dlYkNvcmVCcmlkZ2UgcHJldmlvdXNLZXlWaWV3XSk6CisgICAgICAgICgtW1dlYkNv
cmVCcmlkZ2UgbmV4dEtleVZpZXdJbnNpZGVXZWJGcmFtZVZpZXdzXSk6CisgICAgICAgICgtW1dl
YkNvcmVCcmlkZ2UgcHJldmlvdXNLZXlWaWV3SW5zaWRlV2ViRnJhbWVWaWV3c10pOgorICAgICAg
ICAoLVtXZWJDb3JlQnJpZGdlIHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
OmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugd2luZG93U2Ny
aXB0T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugd2luZG93U2NyaXB0TlBPYmpl
Y3RdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBET01Eb2N1bWVudF0pOgorICAgICAgICAo
LVtXZWJDb3JlQnJpZGdlIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOgorICAgICAgICAoLVtX
ZWJDb3JlQnJpZGdlIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNl
dDpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZWxlY3Rpb25SZWN0XSk6CisgICAgICAg
ICgtW1dlYkNvcmVCcmlkZ2UgdmlzaWJsZVNlbGVjdGlvblJlY3RdKToKKyAgICAgICAgKC1bV2Vi
Q29yZUJyaWRnZSBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhXSk6CisgICAgICAgICgtW1dl
YkNvcmVCcmlkZ2Ugc2VsZWN0aW9uSW1hZ2VdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBz
ZXROYW1lOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIG5hbWVdKToKKyAgICAgICAgKC1b
V2ViQ29yZUJyaWRnZSBVUkxdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBiYXNlVVJMXSk6
CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgcmVmZXJyZXJdKToKKyAgICAgICAgKC1bV2ViQ29y
ZUJyaWRnZSBkb21haW5dKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBvcGVuZXJdKToKKyAg
ICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZXRPcGVuZXI6XSk6CisgICAgICAgICgtW1dlYkNvcmVC
cmlkZ2UgbmVlZHNMYXlvdXRdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZXROZWVkc0xh
eW91dF0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGludGVyY2VwdEtleUV2ZW50OnRvVmll
dzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJl
c2VudGF0aW9uXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2V0U2VsZWN0aW9uRnJvbU5v
bmVdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZXREaXNwbGF5c1dpdGhGb2N1c0F0dHJp
YnV0ZXM6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2V0V2luZG93SGFzRm9jdXM6XSk6
CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgbnVtUGVuZGluZ09yTG9hZGluZ1JlcXVlc3RzXSk6
CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgZG9uZVByb2Nlc3NpbmdEYXRhXSk6CisgICAgICAg
ICgtW1dlYkNvcmVCcmlkZ2Ugc2hvdWxkQ2xvc2VdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRn
ZSBib2R5QmFja2dyb3VuZENvbG9yXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2VsZWN0
aW9uQ29sb3JdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBhZGp1c3RWaWV3U2l6ZV0pOgor
ICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGFjY2Vzc2liaWxpdHlUcmVlXSk6CisgICAgICAgICgt
W1dlYkNvcmVCcmlkZ2Ugc2V0RHJhd3NCYWNrZ3JvdW5kOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
QnJpZGdlIHJhbmdlQnlFeHBhbmRpbmdTZWxlY3Rpb25XaXRoR3JhbnVsYXJpdHk6XSk6CisgICAg
ICAgICgtW1dlYkNvcmVCcmlkZ2UgcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpkaXJl
Y3Rpb246Z3JhbnVsYXJpdHk6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgYWx0ZXJDdXJy
ZW50U2VsZWN0aW9uOmRpcmVjdGlvbjpncmFudWxhcml0eTpdKToKKyAgICAgICAgKC1bV2ViQ29y
ZUJyaWRnZSByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOnZlcnRpY2FsRGlzdGFuY2U6
XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgYWx0ZXJDdXJyZW50U2VsZWN0aW9uOnZlcnRp
Y2FsRGlzdGFuY2U6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2VsZWN0aW9uR3JhbnVs
YXJpdHldKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOmFm
ZmluaXR5OmNsb3NlVHlwaW5nOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHNlbGVjdGVk
RE9NUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBjb252ZXJ0VG9OU1JhbmdlOkRP
TTo6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgY29udmVydFRvRE9NUmFuZ2U6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2VsZWN0TlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2Vi
Q29yZUJyaWRnZSBzZWxlY3RlZE5TUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBz
ZWxlY3Rpb25BZmZpbml0eV0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHNldE1hcmtET01S
YW5nZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBtYXJrRE9NUmFuZ2VdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSBzZXRNYXJrZWRUZXh0RE9NUmFuZ2U6Y3VzdG9tQXR0cmlidXRl
czpyYW5nZXM6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgbWFya2VkVGV4dERPTVJhbmdl
XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgbWFya2VkVGV4dE5TUmFuZ2VdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSByZXBsYWNlTWFya2VkVGV4dFdpdGhUZXh0Ol0pOgorICAgICAg
ICAoLVtXZWJDb3JlQnJpZGdlIHNtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOl0pOgor
ICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHNtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnJlcGxhY2luZ1Jh
bmdlOmJlZm9yZVN0cmluZzphZnRlclN0cmluZzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRn
ZSBkb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpiYXNlVVJMU3RyaW5nOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlQnJpZGdlIGRvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSBkb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhz
Ol0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQ6c2VsZWN0UmVwbGFjZW1lbnQ6c21hcnRSZXBsYWNlOm1hdGNoU3R5bGU6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVCcmlkZ2UgaW5zZXJ0TGluZUJyZWFrXSk6CisgICAgICAgICgtW1dlYkNvcmVC
cmlkZ2UgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2UgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50XSk6CisgICAgICAgICgt
W1dlYkNvcmVCcmlkZ2UgaW5zZXJ0VGV4dDpzZWxlY3RJbnNlcnRlZFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVCcmlkZ2Ugc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXRdKToKKyAgICAgICAgKC1b
V2ViQ29yZUJyaWRnZSBtb3ZlU2VsZWN0aW9uVG9EcmFnQ2FyZXQ6c21hcnRNb3ZlOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlQnJpZGdlIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUJyaWRnZSBtb3ZlRHJhZ0NhcmV0VG9Qb2ludDpdKToKKyAgICAgICAgKC1b
V2ViQ29yZUJyaWRnZSByZW1vdmVEcmFnQ2FyZXRdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRn
ZSBkcmFnQ2FyZXRET01SYW5nZV0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGRlbGV0ZVNl
bGVjdGlvbldpdGhTbWFydERlbGV0ZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBkZWxl
dGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdl
IGZvcndhcmREZWxldGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOl0pOgorICAgICAgICAoLVtX
ZWJDb3JlQnJpZGdlIHR5cGluZ1N0eWxlXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ugc2V0
VHlwaW5nU3R5bGU6d2l0aFVuZG9BY3Rpb246XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
YXBwbHlTdHlsZTp3aXRoVW5kb0FjdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBh
cHBseVBhcmFncmFwaFN0eWxlOndpdGhVbmRvQWN0aW9uOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
QnJpZGdlIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGU6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2Ugc2VsZWN0aW9uSGFzU3R5bGU6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgYXBwbHlF
ZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgcmVt
b3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2UgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2UgcmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVC
cmlkZ2UgZm9udEZvclNlbGVjdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBmb250
QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2Ug
YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydF0pOgorICAgICAgICAoLVtXZWJD
b3JlQnJpZGdlIGVuc3VyZVNlbGVjdGlvblZpc2libGVdKToKKyAgICAgICAgKC1bV2ViQ29yZUJy
aWRnZSBldmVudE1heVN0YXJ0RHJhZzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBkcmFn
T3BlcmF0aW9uRm9yRHJhZ2dpbmdJbmZvOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGRy
YWdFeGl0ZWRXaXRoRHJhZ2dpbmdJbmZvOl0pOgorICAgICAgICAoLVtXZWJDb3JlQnJpZGdlIGNv
bmNsdWRlRHJhZ0ZvckRyYWdnaW5nSW5mbzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBk
cmFnU291cmNlTW92ZWRUbzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBkcmFnU291cmNl
RW5kZWRBdDpvcGVyYXRpb246XSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlkZ2UgbWF5REhUTUxD
dXRdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBtYXlESFRNTENvcHldKToKKyAgICAgICAg
KC1bV2ViQ29yZUJyaWRnZSBtYXlESFRNTFBhc3RlXSk6CisgICAgICAgICgtW1dlYkNvcmVCcmlk
Z2UgdHJ5REhUTUxDdXRdKToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSB0cnlESFRNTENvcHld
KToKKyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSB0cnlESFRNTFBhc3RlXSk6CisgICAgICAgICgt
W1dlYkNvcmVCcmlkZ2UgcmFuZ2VPZkNoYXJhY3RlcnNBcm91bmRDYXJldF0pOgorICAgICAgICAo
LVtXZWJDb3JlQnJpZGdlIGRhc2hib2FyZFJlZ2lvbnNdKToKKyAgICAgICAgKC1bV2ViQ29yZUJy
aWRnZSBleGVjdXRpb25Db250ZXh0Rm9yVmlldzpdKToKKyAgICAgICAgKiBrd3EvV2ViQ29yZVNl
dHRpbmdzLm1tOgorICAgICAgICAoLVtXZWJDb3JlU2V0dGluZ3MgX3VwZGF0ZUFsbFZpZXdzXSk6
CisgICAgICAgICoga3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tOgorICAgICAgICAo
LVtXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBjbGVhckNhY2hlc10pOgorCiAyMDA2LTAxLTA4
ICBBbGV4YW5kZXIgS2VsbGV0dCAgPGx5cGFub3ZAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBlc2VpZGVsLiAgQ29tbWl0dGVkIGJ5IGVzZWlkZWwuCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
SW1hZ2VFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ltYWdlRWxl
bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1l
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDkgKzIwOCw2IEBAIHZvaWQgU1ZHSW1h
Z2VFbGVtZW50SW1wbDo6bm90aWZ5RmluaXNoZWQKICNlbmRpZgogICAgIGlmKGZpbmlzaGVkT2Jq
ID09IG1fY2FjaGVkSW1hZ2UpCiAgICAgewotICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIg
KmZpbGxQYWludGVyID0gY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCk7Ci0gICAgICAgIEFTU0VS
VChmaWxsUGFpbnRlcik7Ci0KICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFp
bnRTZXJ2ZXIgPSBjYW52YXNTdHlsZS0+ZmlsbFBhaW50U2VydmVyKGNhbnZhc1N0eWxlLT5yZW5k
ZXJTdHlsZSgpLCBpbWFnZVBhdGgpOwogICAgICAgICBBU1NFUlQoZmlsbFBhaW50U2VydmVyLT50
eXBlKCkgPT0gUFNfSU1BR0UpOwogICAgICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBRWxlbWVudEltcGwuY3BwCShy
ZXZpc2lvbiAxMTk2MCkKKysrIGtzdmcyL3N2Zy9TVkdBRWxlbWVudEltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8a2RvbS9ldmVudHMvTW91c2VFdmVu
dEltcGwuaD4KICNpbmNsdWRlIDxrZG9tL2V2ZW50cy9rZG9tZXZlbnRzLmg+CiAjaW5jbHVkZSA8
a2RvbS9IZWxwZXIuaD4KKyNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVk
ZSAiY3NzaGVscGVyLmgiCiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CkBA
IC0xMjUsMTAgKzEyNiwxMCBAQCB2b2lkIFNWR0FFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlCiAgICAgICAgICAgICAgICAgZWxzZSBpZihlLT5idXR0b24oKSA9PSAyKQogICAgICAgICAg
ICAgICAgICAgICBidXR0b24gPSBRdDo6UmlnaHRCdXR0b247CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZihvd25lckRvY3VtZW50KCkgJiYgb3duZXJEb2N1bWVudCgpLT52aWV3KCkgJiYg
b3duZXJEb2N1bWVudCgpLT5wYXJ0KCkpCisgICAgICAgICAgICBpZihvd25lckRvY3VtZW50KCkg
JiYgb3duZXJEb2N1bWVudCgpLT52aWV3KCkgJiYgb3duZXJEb2N1bWVudCgpLT5mcmFtZSgpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vZ2V0RG9jdW1lbnQoKS0+dmlldygpLT5y
ZXNldEN1cnNvcigpOwotICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPnBhcnQoKS0+dXJs
U2VsZWN0ZWQodXJsLCBidXR0b24sIHN0YXRlLCB1dGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBn
ZXREb2N1bWVudCgpLT5mcmFtZSgpLT51cmxTZWxlY3RlZCh1cmwsIGJ1dHRvbiwgc3RhdGUsIHV0
YXJnZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IEZvcndhcmRpbmdIZWFk
ZXJzL2tzdmcyL0tTVkdQYXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRm9yd2FyZGluZ0hlYWRlcnMva3N2
ZzIvS1NWR1BhcnQuaAkocmV2aXNpb24gMTE5NjApCisrKyBGb3J3YXJkaW5nSGVhZGVycy9rc3Zn
Mi9LU1ZHUGFydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAotI2luY2x1ZGUgImto
dG1sL2todG1sX3BhcnQuaCIKLWNsYXNzIEtIVE1MUGFydDsKKyNpbmNsdWRlICJraHRtbC9GcmFt
ZS5oIgorY2xhc3MgRnJhbWU7CiBuYW1lc3BhY2UgS0RPTSB7Ci0gICAgdXNpbmcgOjpLSFRNTFBh
cnQ7CisgICAgdXNpbmcgOjpGcmFtZTsKIH0KIG5hbWVzcGFjZSBLU1ZHIHsKLSAgICB1c2luZyA6
OktIVE1MUGFydDsKKyAgICB1c2luZyA6OkZyYW1lOwogfQpJbmRleDoga3dxL01hY0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrd3EvTWFjRnJhbWUuY3BwCShyZXZpc2lvbiAxMTk0NikKKysrIGt3
cS9NYWNGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS1dRS0hUTUxQYXJ0LmgiCisjaW5jbHVkZSAi
TWFjRnJhbWUuaCIKIAogI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbF9lbGVtZW50aW1wbC5oIgpAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBET006OkhUTUxEb2N1
bWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogCiAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0
aCBpcyB0aGlzIHNpbmdsZSB0aW55IGZpbGUgd2l0aCBvbmx5IHRoaXMgbWV0aG9kIGRvaW5nIGhl
cmU/Ci1ib29sIEtXUUtIVE1MUGFydDo6aXNGcmFtZVNldCgpIGNvbnN0Citib29sIE1hY0ZyYW1l
Ojppc0ZyYW1lU2V0KCkgY29uc3QKIHsKICAgICBEb2N1bWVudEltcGwgKmRvY3VtZW50ID0gZC0+
bV9kb2M7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkp
CkluZGV4OiBrd3EvS1dRTG9hZGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FMb2FkZXIubW0J
KHJldmlzaW9uIDExOTYwKQorKysga3dxL0tXUUxvYWRlci5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogI2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogI2ltcG9ydCAiS1dRUmVzb3Vy
Y2VMb2FkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIKLSNpbXBvcnQgImtodG1sX3Bh
cnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1lLmgiCiAjaW1wb3J0ICJsb2FkZXIuaCIKICNpbmNsdWRl
ICJDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgpAQCAtNTAsNyArNTAsNyBAQCB1
c2luZyBLSU86OlRyYW5zZmVySm9iOwogYm9vbCBLV1FTZXJ2ZVJlcXVlc3QoTG9hZGVyICpsb2Fk
ZXIsIFJlcXVlc3QgKnJlcXVlc3QsIFRyYW5zZmVySm9iICpqb2IpCiB7CiAgICAgTE9HKExvYWRp
bmcsICJTZXJ2aW5nIHJlcXVlc3QgZm9yIGJhc2UgJXMsIHVybCAlcyIsIAotICAgICAgICByZXF1
ZXN0LT5tX2RvY0xvYWRlci0+cGFydCgpLT5iYXNlVVJMKCkudXJsKCkubGF0aW4xKCksCisgICAg
ICAgIHJlcXVlc3QtPm1fZG9jTG9hZGVyLT5mcmFtZSgpLT5iYXNlVVJMKCkudXJsKCkubGF0aW4x
KCksCiAgICAgICAgIHJlcXVlc3QtPm9iamVjdC0+dXJsKCkucXN0cmluZygpLmxhdGluMSgpKTsK
ICAgICAKICAgICByZXR1cm4gS1dRU2VydmVSZXF1ZXN0KGxvYWRlciwgcmVxdWVzdC0+bV9kb2NM
b2FkZXIsIGpvYik7CkBAIC0xMTMsMTAgKzExMywxMCBAQCBib29sIEtXUVNlcnZlUmVxdWVzdChM
b2FkZXIgKmxvYWRlciwgUmVxCiAKIGJvb2wgS1dRU2VydmVSZXF1ZXN0KExvYWRlciAqbG9hZGVy
LCBEb2NMb2FkZXIgKmRvY0xvYWRlciwgVHJhbnNmZXJKb2IgKmpvYikKIHsKLSAgICBLV1FLSFRN
TFBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxLV1FLSFRNTFBhcnQgKj4oZG9jTG9hZGVyLT5wYXJ0
KCkpOwotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IHBhcnQtPmJyaWRnZSgpOworICAgIE1h
Y0ZyYW1lICpmcmFtZSA9IHN0YXRpY19jYXN0PE1hY0ZyYW1lICo+KGRvY0xvYWRlci0+ZnJhbWUo
KSk7CisgICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0gZnJhbWUtPmJyaWRnZSgpOwogCi0gICAg
cGFydC0+ZGlkVGVsbEJyaWRnZUFib3V0TG9hZChqb2ItPnVybCgpLnVybCgpKTsKKyAgICBmcmFt
ZS0+ZGlkVGVsbEJyaWRnZUFib3V0TG9hZChqb2ItPnVybCgpLnVybCgpKTsKIAogICAgIEtXUV9C
TE9DS19FWENFUFRJT05TOwogICAgIEtXUVJlc291cmNlTG9hZGVyICpyZXNvdXJjZUxvYWRlciA9
IFtbS1dRUmVzb3VyY2VMb2FkZXIgYWxsb2NdIGluaXRXaXRoSm9iOmpvYl07CkBAIC0xNzAsMTAg
KzE3MCwxMCBAQCBOU1N0cmluZyAqS1dRSGVhZGVyU3RyaW5nRnJvbURpY3Rpb25hcnkoCiAKIFFC
eXRlQXJyYXkgS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyICpsb2FkZXIsIERvY0xv
YWRlciAqZG9jTG9hZGVyLCBUcmFuc2ZlckpvYiAqam9iLCBLVVJMICZmaW5hbFVSTCwgUVN0cmlu
ZyAmcmVzcG9uc2VIZWFkZXJzKQogewotICAgIEtXUUtIVE1MUGFydCAqcGFydCA9IHN0YXRpY19j
YXN0PEtXUUtIVE1MUGFydCAqPihkb2NMb2FkZXItPnBhcnQoKSk7Ci0gICAgV2ViQ29yZUJyaWRn
ZSAqYnJpZGdlID0gcGFydC0+YnJpZGdlKCk7CisgICAgTWFjRnJhbWUgKmZyYW1lID0gc3RhdGlj
X2Nhc3Q8TWFjRnJhbWUgKj4oZG9jTG9hZGVyLT5mcmFtZSgpKTsKKyAgICBXZWJDb3JlQnJpZGdl
ICpicmlkZ2UgPSBmcmFtZS0+YnJpZGdlKCk7CiAKLSAgICBwYXJ0LT5kaWRUZWxsQnJpZGdlQWJv
dXRMb2FkKGpvYi0+dXJsKCkudXJsKCkpOworICAgIGZyYW1lLT5kaWRUZWxsQnJpZGdlQWJvdXRM
b2FkKGpvYi0+dXJsKCkudXJsKCkpOwogCiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAKQEAg
LTIxOSw3ICsyMTksNyBAQCBpbnQgS1dRTnVtYmVyT2ZQZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMo
CiBib29sIEtXUUNoZWNrSWZSZWxvYWRpbmcoRG9jTG9hZGVyICpsb2FkZXIpCiB7CiAgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxLV1FLSFRNTFBhcnQg
Kj4obG9hZGVyLT5wYXJ0KCkpLT5icmlkZ2UoKSBpc1JlbG9hZGluZ107CisgICAgcmV0dXJuIFtz
dGF0aWNfY2FzdDxNYWNGcmFtZSAqPihsb2FkZXItPmZyYW1lKCkpLT5icmlkZ2UoKSBpc1JlbG9h
ZGluZ107CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIAogICAgIHJldHVybiBmYWxzZTsK
QEAgLTI0NSwxMCArMjQ1LDEwIEBAIHZvaWQgS1dRQ2hlY2tDYWNoZU9iamVjdFN0YXR1cyhEb2NM
b2FkZXIKICAgICBBU1NFUlQoY2FjaGVkT2JqZWN0LT5yZXNwb25zZSgpKTsKICAgICAKICAgICAv
LyBOb3RpZnkgdGhlIGNhbGxlciB0aGF0IHdlICJsb2FkZWQiLgotICAgIEtXUUtIVE1MUGFydCAq
cGFydCA9IHN0YXRpY19jYXN0PEtXUUtIVE1MUGFydCAqPihsb2FkZXItPnBhcnQoKSk7CisgICAg
TWFjRnJhbWUgKmZyYW1lID0gc3RhdGljX2Nhc3Q8TWFjRnJhbWUgKj4obG9hZGVyLT5mcmFtZSgp
KTsKIAotICAgIGlmICghcGFydC0+aGF2ZVRvbGRCcmlkZ2VBYm91dExvYWQoY2FjaGVkT2JqZWN0
LT51cmwoKS5xc3RyaW5nKCkpKSB7Ci0gICAgICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IHBh
cnQtPmJyaWRnZSgpOworICAgIGlmICghZnJhbWUtPmhhdmVUb2xkQnJpZGdlQWJvdXRMb2FkKGNh
Y2hlZE9iamVjdC0+dXJsKCkucXN0cmluZygpKSkgeworICAgICAgICBXZWJDb3JlQnJpZGdlICpi
cmlkZ2UgPSBmcmFtZS0+YnJpZGdlKCk7CiAgICAgICAgIAogICAgICAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKICAgICAgICAgW2JyaWRnZSBvYmplY3RMb2FkZWRGcm9tQ2FjaGVXaXRoVVJMOktV
UkwoY2FjaGVkT2JqZWN0LT51cmwoKS5xc3RyaW5nKCkpLmdldE5TVVJMKCkKQEAgLTI1Niw3ICsy
NTYsNyBAQCB2b2lkIEtXUUNoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTooTlNEYXRhICopY2FjaGVkT2Jq
ZWN0LT5hbGxEYXRhKCldOwogICAgICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogCi0gICAg
ICAgIHBhcnQtPmRpZFRlbGxCcmlkZ2VBYm91dExvYWQoY2FjaGVkT2JqZWN0LT51cmwoKS5xc3Ry
aW5nKCkpOworICAgICAgICBmcmFtZS0+ZGlkVGVsbEJyaWRnZUFib3V0TG9hZChjYWNoZWRPYmpl
Y3QtPnVybCgpLnFzdHJpbmcoKSk7CiAgICAgfQogfQogCkBAIC0zMzEsOCArMzMxLDggQEAgdGlt
ZV90IEtXUUNhY2hlT2JqZWN0RXhwaXJlc1RpbWUoa2h0bWw6OgogewogICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwogICAgIAotICAgIEtXUUtIVE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PEtX
UUtIVE1MUGFydCAqPihkb2NMb2FkZXItPnBhcnQoKSk7Ci0gICAgV2ViQ29yZUJyaWRnZSAqYnJp
ZGdlID0gcGFydC0+YnJpZGdlKCk7CisgICAgTWFjRnJhbWUgKmZyYW1lID0gc3RhdGljX2Nhc3Q8
TWFjRnJhbWUgKj4oZG9jTG9hZGVyLT5mcmFtZSgpKTsKKyAgICBXZWJDb3JlQnJpZGdlICpicmlk
Z2UgPSBmcmFtZS0+YnJpZGdlKCk7CiAgICAgcmV0dXJuIFticmlkZ2UgZXhwaXJlc1RpbWVGb3JS
ZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlXTsKICAgICAKICAgICBLV1FfVU5CTE9D
S19FWENFUFRJT05TOwpJbmRleDoga3dxL0tXUVRleHRGaWVsZC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
d3EvS1dRVGV4dEZpZWxkLm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FUZXh0RmllbGQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbXBvcnQgIktXUVRleHRGaWVs
ZC5oIgogCiAjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0ICJLV1FLSFRN
TFBhcnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1lLmgiCiAjaW1wb3J0ICJLV1FMaW5lRWRpdC5oIgog
I2ltcG9ydCAiS1dRVmlldy5oIgogI2ltcG9ydCAiV2ViQ29yZUJyaWRnZS5oIgpAQCAtMTY4LDcg
KzE2OCw3IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJMYXllcjsKICAgICAKICAgICBbW2ZpZWxkIF9L
V1FfY3VycmVudEVkaXRvcl0gc2V0V2FudHNOb3RpZmljYXRpb25Gb3JNYXJrZWRUZXh0OllFU107
CiAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldp
ZGdldCh3aWRnZXQpOworICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IE1hY0ZyYW1lOjpicmlk
Z2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBbYnJpZGdlIHRleHRGaWVsZERpZEJlZ2luRWRpdGlu
ZzooRE9NSFRNTElucHV0RWxlbWVudCAqKVticmlkZ2UgZWxlbWVudEZvclZpZXc6ZmllbGRdXTsK
IH0KIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJMYXllcjsKICAgICBp
ZiAoIXdpZGdldCkKIAlyZXR1cm47CiAgICAgCi0gICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0g
S1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKKyAgICBXZWJDb3JlQnJpZGdl
ICpicmlkZ2UgPSBNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgW2JyaWRn
ZSB0ZXh0RmllbGREaWRFbmRFZGl0aW5nOihET01IVE1MSW5wdXRFbGVtZW50ICopW2JyaWRnZSBl
bGVtZW50Rm9yVmlldzpmaWVsZF1dOwogICAgIAogICAgIGlmICh3aWRnZXQgJiYgW1tbbm90aWZp
Y2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJOU1RleHRNb3ZlbWVudCJdIGludFZhbHVl
XSA9PSBOU1JldHVyblRleHRNb3ZlbWVudCkKQEAgLTE4OSwxMSArMTg5LDExIEBAIHVzaW5nIGto
dG1sOjpSZW5kZXJMYXllcjsKICAgICBpZiAoIXdpZGdldCkKIAlyZXR1cm47CiAgICAgCi0gICAg
aWYgKEtXUUtIVE1MUGFydDo6aGFuZGxlS2V5Ym9hcmRPcHRpb25UYWJJblZpZXcoZmllbGQpKQor
ICAgIGlmIChNYWNGcmFtZTo6aGFuZGxlS2V5Ym9hcmRPcHRpb25UYWJJblZpZXcoZmllbGQpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCFbW2ZpZWxkIF9LV1FfY3VycmVudEVkaXRv
cl0gaGFzTWFya2VkVGV4dF0pIHsKLSAgICAgICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0gS1dR
S0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKKyAgICAgICAgV2ViQ29yZUJyaWRn
ZSAqYnJpZGdlID0gTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpOwogICAgICAgICBb
YnJpZGdlIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZDooRE9NSFRNTElucHV0RWxlbWVudCAqKVti
cmlkZ2UgZWxlbWVudEZvclZpZXc6ZmllbGRdXTsKICAgICB9CiAgICAgCkBAIC0yMzUsNyArMjM1
LDcgQEAgdXNpbmcga2h0bWw6OlJlbmRlckxheWVyOwogICAgIGlmICghd2lkZ2V0KQogCXJldHVy
biBOTzsKICAgICAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBLV1FLSFRNTFBhcnQ6OmJy
aWRnZUZvcldpZGdldCh3aWRnZXQpOworICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IE1hY0Zy
YW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICByZXR1cm4gW2JyaWRnZSB0ZXh0Rmll
bGQ6KERPTUhUTUxJbnB1dEVsZW1lbnQgKilbYnJpZGdlIGVsZW1lbnRGb3JWaWV3OmZpZWxkXSBk
b0NvbW1hbmRCeVNlbGVjdG9yOmNvbW1hbmRTZWxlY3Rvcl07CiB9CiAKQEAgLTI4Miw3ICsyODIs
NyBAQCB1c2luZyBraHRtbDo6UmVuZGVyTGF5ZXI7CiAgICAgCiAgICAgTlNFdmVudFR5cGUgdHlw
ZSA9IFtldmVudCB0eXBlXTsKICAgICBpZiAoKHR5cGUgPT0gTlNLZXlEb3duIHx8IHR5cGUgPT0g
TlNLZXlVcCkgJiYgIVtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl0gaGFzTWFy
a2VkVGV4dF0pIHsKLSAgICAgICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0gS1dRS0hUTUxQYXJ0
OjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKKyAgICAgICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdl
ID0gTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpOwogCiAgICAgICAgIFFXaWRnZXQ6
OnNldERlZmVyRmlyc3RSZXNwb25kZXJDaGFuZ2VzKHRydWUpOwogCkBAIC0zOTcsNyArMzk3LDcg
QEAgdXNpbmcga2h0bWw6OlJlbmRlckxheWVyOwogICAgICAgICAKICAgICAgICAgaGFzRm9jdXNB
bmRTZWxlY3Rpb25TZXQgPSBZRVM7CiAKLSAgICAgICAgaWYgKCFLV1FLSFRNTFBhcnQ6OmN1cnJl
bnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQod2lkZ2V0KSAmJiB3aWRnZXQpIHsKKyAgICAgICAg
aWYgKCFNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCh3aWRnZXQpICYm
IHdpZGdldCkgewogICAgICAgICAgICAgUmVuZGVyV2lkZ2V0ICp3ID0gY29uc3RfY2FzdDxSZW5k
ZXJXaWRnZXQgKj4gKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAqPih3aWRnZXQtPmV2
ZW50RmlsdGVyT2JqZWN0KCkpKTsKICAgICAgICAgICAgIFJlbmRlckxheWVyICpsYXllciA9IHct
PmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgICAgICBpZiAobGF5ZXIpCkBAIC00MjgsNyArNDI4
LDcgQEAgdXNpbmcga2h0bWw6OlJlbmRlckxheWVyOwogICAgICAgICAgICAgUUZvY3VzRXZlbnQg
ZXZlbnQoUUV2ZW50OjpGb2N1c091dCk7CiAgICAgICAgICAgICBpZiAod2lkZ2V0LT5ldmVudEZp
bHRlck9iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxRT2JqZWN0ICo+KHdp
ZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSktPmV2ZW50RmlsdGVyKHdpZGdldCwgJmV2ZW50KTsK
LSAgICAgICAgICAgICAgICBbS1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KSBm
b3JtQ29udHJvbElzUmVzaWduaW5nRmlyc3RSZXNwb25kZXI6ZmllbGRdOworICAgICAgICAgICAg
ICAgIFtNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZm9ybUNvbnRyb2xJc1Jlc2ln
bmluZ0ZpcnN0UmVzcG9uZGVyOmZpZWxkXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTU0OSw3ICs1NDksNyBAQCB1c2luZyBraHRtbDo6UmVuZGVyTGF5ZXI7CiAgICAgUVdp
ZGdldCogd2lkZ2V0ID0gW2NvbnRyb2xsZXIgd2lkZ2V0XTsKICAgICBpZiAoIXdpZGdldCkKIAly
ZXR1cm4gW3N1cGVyIG5leHRLZXlWaWV3XTsKLSAgICByZXR1cm4gS1dRS0hUTUxQYXJ0OjpuZXh0
S2V5Vmlld0ZvcldpZGdldCh3aWRnZXQsIEtXUVNlbGVjdGluZ05leHQpOworICAgIHJldHVybiBN
YWNGcmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdOZXh0KTsK
IH0KIAogLSAoTlNWaWV3ICopcHJldmlvdXNLZXlWaWV3CkBAIC01NTksNyArNTU5LDcgQEAgdXNp
bmcga2h0bWw6OlJlbmRlckxheWVyOwogICAgIFFXaWRnZXQqIHdpZGdldCA9IFtjb250cm9sbGVy
IHdpZGdldF07CiAgICAgaWYgKCF3aWRnZXQpCiAJcmV0dXJuIFtzdXBlciBwcmV2aW91c0tleVZp
ZXddOwotICAgIHJldHVybiBLV1FLSFRNTFBhcnQ6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHdpZGdl
dCwgS1dRU2VsZWN0aW5nUHJldmlvdXMpOworICAgIHJldHVybiBNYWNGcmFtZTo6bmV4dEtleVZp
ZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdQcmV2aW91cyk7CiB9CiAKIC0gKE5TVmll
dyAqKW5leHRWYWxpZEtleVZpZXcKQEAgLTcxNSw3ICs3MTUsNyBAQCB1c2luZyBraHRtbDo6UmVu
ZGVyTGF5ZXI7CiAgICAgUVdpZGdldCogd2lkZ2V0ID0gW2NvbnRyb2xsZXIgd2lkZ2V0XTsKICAg
ICBpZiAoIXdpZGdldCkKIAlyZXR1cm4gW3N1cGVyIG5leHRLZXlWaWV3XTsKLSAgICByZXR1cm4g
S1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0ZvcldpZGdldCh3aWRnZXQsIEtXUVNlbGVjdGluZ05l
eHQpOworICAgIHJldHVybiBNYWNGcmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBL
V1FTZWxlY3RpbmdOZXh0KTsKIH0KIAogLSAoTlNWaWV3ICopcHJldmlvdXNLZXlWaWV3CkBAIC03
MjUsNyArNzI1LDcgQEAgdXNpbmcga2h0bWw6OlJlbmRlckxheWVyOwogICAgIFFXaWRnZXQqIHdp
ZGdldCA9IFtjb250cm9sbGVyIHdpZGdldF07CiAgICAgaWYgKCF3aWRnZXQpCiAJcmV0dXJuIFtz
dXBlciBwcmV2aW91c0tleVZpZXddOwotICAgIHJldHVybiBLV1FLSFRNTFBhcnQ6Om5leHRLZXlW
aWV3Rm9yV2lkZ2V0KHdpZGdldCwgS1dRU2VsZWN0aW5nUHJldmlvdXMpOworICAgIHJldHVybiBN
YWNGcmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdQcmV2aW91
cyk7CiB9CiAKIC0gKE5TVmlldyAqKW5leHRWYWxpZEtleVZpZXcKQEAgLTk0Myw3ICs5NDMsNyBA
QCB1c2luZyBraHRtbDo6UmVuZGVyTGF5ZXI7CiAgICAgUVdpZGdldCogd2lkZ2V0ID0gW2NvbnRy
b2xsZXIgd2lkZ2V0XTsKICAgICBpZiAoIXdpZGdldCkKIAlyZXR1cm4gW3N1cGVyIG5leHRLZXlW
aWV3XTsKLSAgICByZXR1cm4gS1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0ZvcldpZGdldCh3aWRn
ZXQsIEtXUVNlbGVjdGluZ05leHQpOworICAgIHJldHVybiBNYWNGcmFtZTo6bmV4dEtleVZpZXdG
b3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdOZXh0KTsKIH0KIAogLSAoTlNWaWV3ICopcHJl
dmlvdXNLZXlWaWV3CkBAIC05NTMsNyArOTUzLDcgQEAgdXNpbmcga2h0bWw6OlJlbmRlckxheWVy
OwogICAgIFFXaWRnZXQqIHdpZGdldCA9IFtjb250cm9sbGVyIHdpZGdldF07CiAgICAgaWYgKCF3
aWRnZXQpCiAJcmV0dXJuIFtzdXBlciBwcmV2aW91c0tleVZpZXddOwotICAgIHJldHVybiBLV1FL
SFRNTFBhcnQ6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHdpZGdldCwgS1dRU2VsZWN0aW5nUHJldmlv
dXMpOworICAgIHJldHVybiBNYWNGcmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBL
V1FTZWxlY3RpbmdQcmV2aW91cyk7CiB9CiAKIC0gKE5TVmlldyAqKW5leHRWYWxpZEtleVZpZXcK
SW5kZXg6IGt3cS9LV1FDbGlwYm9hcmQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUNsaXBib2Fy
ZC5tbQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRQ2xpcGJvYXJkLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIKICNpbXBvcnQg
PGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIK
LSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIKICNpbXBvcnQg
IktXUVN0cmluZ0xpc3QuaCIKICNpbXBvcnQgIldlYkNvcmVHcmFwaGljc0JyaWRnZS5oIgogI2lt
cG9ydCAiV2ViQ29yZUltYWdlUmVuZGVyZXIuaCIKQEAgLTM3LDkgKzM3LDkgQEAKIHVzaW5nIERP
TTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIAotS1dRQ2xpcGJvYXJkOjpLV1FD
bGlwYm9hcmQoYm9vbCBmb3JEcmFnZ2luZywgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBBY2Nl
c3NQb2xpY3kgcG9saWN5LCBLV1FLSFRNTFBhcnQgKnBhcnQpCitLV1FDbGlwYm9hcmQ6OktXUUNs
aXBib2FyZChib29sIGZvckRyYWdnaW5nLCBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQsIEFjY2Vz
c1BvbGljeSBwb2xpY3ksIE1hY0ZyYW1lICpmcmFtZSkKICAgOiBtX3Bhc3RlYm9hcmQoS1dRUmV0
YWluKHBhc3RlYm9hcmQpKSwgbV9mb3JEcmFnZ2luZyhmb3JEcmFnZ2luZyksCi0gICAgbV9wb2xp
Y3kocG9saWN5KSwgbV9kcmFnU3RhcnRlZChmYWxzZSksIG1fcGFydChwYXJ0KQorICAgIG1fcG9s
aWN5KHBvbGljeSksIG1fZHJhZ1N0YXJ0ZWQoZmFsc2UpLCBtX2ZyYW1lKGZyYW1lKQogewogICAg
IG1fY2hhbmdlQ291bnQgPSBbbV9wYXN0ZWJvYXJkIGNoYW5nZUNvdW50XTsKIH0KQEAgLTMzMiwx
MCArMzMyLDEwIEBAIE5TSW1hZ2UgKktXUUNsaXBib2FyZDo6ZHJhZ05TSW1hZ2UoTlNQb2kKIHsK
ICAgICBOU0ltYWdlICpyZXN1bHQgPSBuaWw7CiAgICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVudCkg
ewotICAgICAgICBpZiAobV9wYXJ0KSB7CisgICAgICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAg
ICAgICBOU1JlY3QgaW1hZ2VSZWN0OwogICAgICAgICAgICAgTlNSZWN0IGVsZW1lbnRSZWN0Owot
ICAgICAgICAgICAgcmVzdWx0ID0gbV9wYXJ0LT5zbmFwc2hvdERyYWdJbWFnZShtX2RyYWdJbWFn
ZUVsZW1lbnQuZ2V0KCksICZpbWFnZVJlY3QsICZlbGVtZW50UmVjdCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBtX2ZyYW1lLT5zbmFwc2hvdERyYWdJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0
KCksICZpbWFnZVJlY3QsICZlbGVtZW50UmVjdCk7CiAgICAgICAgICAgICBpZiAobG9jKSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ2xpZW50IHNwZWNpZmllcyBwb2ludCByZWxhdGl2ZSB0byBlbGVt
ZW50LCBub3QgdGhlIHdob2xlIGltYWdlLCB3aGljaCBtYXkgaW5jbHVkZSBjaGlsZAogICAgICAg
ICAgICAgICAgIC8vIGxheWVycyBzcHJlYWQgb3V0IGFsbCBvdmVyIHRoZSBwbGFjZS4KSW5kZXg6
IGt3cS9LV1FSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FSZWdFeHAuY3BwCShyZXZp
c2lvbiAxMTk2MCkKKysrIGt3cS9LV1FSZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgUVJlZ0V4cDo6S1dRUmVnRXhwUHJpdmF0ZTo6Y29tcGlsZSgKICAgICB9
CiAgICAgLy8gTm90ZSB3ZSBkb24ndCBob25vciB0aGUgUXQgc3ludGF4IGZvciB2YXJpb3VzIGNo
YXJhY3RlciBjbGFzc2VzLiAgSWYgd2UgY29udmVydAogICAgIC8vIHRvIGEgZGlmZmVyZW50IHVu
ZGVybHlpbmcgZW5naW5lLCB3ZSBtYXkgbmVlZCB0byBjaGFuZ2UgY2xpZW50IGNvZGUgdGhhdCBy
ZWxpZXMKLSAgICAvLyBvbiB0aGUgcmVnZXggc3ludGF4IChzZWUgS1dRS0hUTUxQYXJ0Lm1tIGZv
ciBhIGNvdXBsZSBleGFtcGxlcykuCisgICAgLy8gb24gdGhlIHJlZ2V4IHN5bnRheCAoc2VlIE1h
Y0ZyYW1lLm1tIGZvciBhIGNvdXBsZSBleGFtcGxlcykuCiAgICAgCiAgICAgY29uc3QgY2hhciAq
ZXJyb3JNZXNzYWdlOwogICAgIGludCBlcnJvck9mZnNldDsKSW5kZXg6IGt3cS9LV1FGaWxlQnV0
dG9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FGaWxlQnV0dG9uLm1tCShyZXZpc2lvbiAxMTk2
MCkKKysrIGt3cS9LV1FGaWxlQnV0dG9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUV4Y2Vw
dGlvbnMuaCIKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIK
ICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2Uu
aCIKICNpbXBvcnQgInJlbmRlcl9mb3JtLmgiCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIGtodG1s
OjpSZW5kZXJMYXllcjsKIAogQGVuZAogCi1LV1FGaWxlQnV0dG9uOjpLV1FGaWxlQnV0dG9uKEtI
VE1MUGFydCAqcGFydCkKK0tXUUZpbGVCdXR0b246OktXUUZpbGVCdXR0b24oRnJhbWUgKmZyYW1l
KQogICAgIDogX2NsaWNrZWQodGhpcywgU0lHTkFMKGNsaWNrZWQoKSkpCiAgICAgLCBfdGV4dENo
YW5nZWQodGhpcywgU0lHTkFMKHRleHRDaGFuZ2VkKGNvbnN0IFFTdHJpbmcgJikpKQogICAgICwg
X2FkYXB0ZXIoMCkKQEAgLTU4LDcgKzU4LDcgQEAgS1dRRmlsZUJ1dHRvbjo6S1dRRmlsZUJ1dHRv
bihLSFRNTFBhcnQgKgogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogCiAgICAgX2FkYXB0ZXIg
PSBLV1FSZXRhaW5OU1JlbGVhc2UoW1tLV1FGaWxlQnV0dG9uQWRhcHRlciBhbGxvY10gaW5pdFdp
dGhLV1FGaWxlQnV0dG9uOnRoaXNdKTsKLSAgICBzZXRWaWV3KFtLV1EocGFydCktPmJyaWRnZSgp
IGZpbGVCdXR0b25XaXRoRGVsZWdhdGU6X2FkYXB0ZXJdKTsKKyAgICBzZXRWaWV3KFtNYWMoZnJh
bWUpLT5icmlkZ2UoKSBmaWxlQnV0dG9uV2l0aERlbGVnYXRlOl9hZGFwdGVyXSk7CiAKICAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOwogfQpAQCAtMTM4LDcgKzEzOCw3IEBAIFFXaWRnZXQ6OkZv
Y3VzUG9saWN5IEtXUUZpbGVCdXR0b246OmZvY3UKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKICAgICAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBLV1FLSFRNTFBhcnQ6OmJyaWRn
ZUZvcldpZGdldCh0aGlzKTsKKyAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBNYWNGcmFtZTo6
YnJpZGdlRm9yV2lkZ2V0KHRoaXMpOwogICAgIGlmICghYnJpZGdlIHx8ICFbYnJpZGdlIHBhcnRd
IHx8ICFbYnJpZGdlIHBhcnRdLT50YWJzVG9BbGxDb250cm9scygpKSB7CiAgICAgICAgIHJldHVy
biBOb0ZvY3VzOwogICAgIH0KQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEtXUUZpbGVCdXR0b246
OmZpbGVuYW1lQ2hhbmdlZChjb25zCiB2b2lkIEtXUUZpbGVCdXR0b246OmZvY3VzQ2hhbmdlZChi
b29sIG5vd0hhc0ZvY3VzKQogewogICAgIGlmIChub3dIYXNGb2N1cykgewotICAgICAgICBpZiAo
IUtXUUtIVE1MUGFydDo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCh0aGlzKSkgewor
ICAgICAgICBpZiAoIU1hY0ZyYW1lOjpjdXJyZW50RXZlbnRJc01vdXNlRG93bkluV2lkZ2V0KHRo
aXMpKSB7CiAgICAgICAgICAgICBSZW5kZXJXaWRnZXQgKndpZGdldCA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyV2lkZ2V0ICo+IChzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJXaWRnZXQgKj4oZXZlbnRGaWx0
ZXJPYmplY3QoKSkpOwogICAgICAgICAgICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gd2lkZ2V0LT5l
bmNsb3NpbmdMYXllcigpOwogICAgICAgICAgICAgbGF5ZXIgPSBsYXllci0+cmVuZGVyZXIoKS0+
ZW5jbG9zaW5nTGF5ZXIoKTsKSW5kZXg6IGt3cS9LV1FDb21ib0JveC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrd3EvS1dRQ29tYm9Cb3gubW0JKHJldmlzaW9uIDExOTYwKQorKysga3dxL0tXUUNvbWJvQm94
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0IDxreG1sY29yZS9B
c3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FMaW5lRWRpdC5oIgogI2ltcG9ydCAiS1dRRXhjZXB0
aW9ucy5oIgotI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCisjaW1wb3J0ICJNYWNGcmFtZS5oIgog
I2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiS1dRVmlldy5oIgogI2lt
cG9ydCAiV2ViQ29yZUJyaWRnZS5oIgpAQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgUUNvbWJvQm94
Ojpwb3B1bGF0ZSgpCiAKIC0gKEJPT0wpdHJhY2tNb3VzZTooTlNFdmVudCAqKWV2ZW50IGluUmVj
dDooTlNSZWN0KXJlY3Qgb2ZWaWV3OihOU1ZpZXcgKil2aWV3IHVudGlsTW91c2VVcDooQk9PTClm
bGFnCiB7Ci0gICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0gYm94ID8gW0tXUUtIVE1MUGFydDo6
YnJpZGdlRm9yV2lkZ2V0KGJveCkgcmV0YWluXSA6IG5pbDsKKyAgICBXZWJDb3JlQnJpZGdlICpi
cmlkZ2UgPSBib3ggPyBbTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldChib3gpIHJldGFpbl0gOiBu
aWw7CiAKICAgICAvLyB3ZSBuZWVkIHRvIHJldGFpbiB0aGUgZXZlbnQgYmVjYXVzZSBpdCBpcyB0
aGUgW05TQXBwIGN1cnJlbnRFdmVudF0sIHdoaWNoIGNhbiBjaGFuZ2UKICAgICAvLyBhbmQgdGhl
cmVmb3JlIGJlIHJlbGVhc2VkIGR1cmluZyBbc3VwZXIgdHJhY2tNb3VzZTouLi5dCkBAIC00OTEs
NyArNDkxLDcgQEAgdm9pZCBRQ29tYm9Cb3g6OnBvcHVsYXRlKCkKICAgICBpZiAoYmVjb21lKSB7
CiAgICAgICAgIFFXaWRnZXQgKndpZGdldCA9IFtzZWxmIHdpZGdldF07CiAgICAgICAgIGlmICh3
aWRnZXQpIHsKLSAgICAgICAgICAgIGlmICghS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc01v
dXNlRG93bkluV2lkZ2V0KHdpZGdldCkpIHsKKyAgICAgICAgICAgIGlmICghTWFjRnJhbWU6OmN1
cnJlbnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQod2lkZ2V0KSkgewogICAgICAgICAgICAgICAg
IFJlbmRlcldpZGdldCAqdyA9IGNvbnN0X2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+IChzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJXaWRnZXQgKj4od2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpKSk7CiAg
ICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gdy0+ZW5jbG9zaW5nTGF5ZXIoKTsK
ICAgICAgICAgICAgICAgICBpZiAobGF5ZXIpCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBRQ29t
Ym9Cb3g6OnBvcHVsYXRlKCkKICAgICAgICAgICAgIFFGb2N1c0V2ZW50IGV2ZW50KFFFdmVudDo6
Rm9jdXNPdXQpOwogICAgICAgICAgICAgaWYgKHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkg
ewogICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UU9iamVjdCAqPih3aWRnZXQtPmV2ZW50Rmls
dGVyT2JqZWN0KCkpLT5ldmVudEZpbHRlcih3aWRnZXQsICZldmVudCk7Ci0gICAgICAgICAgICAg
ICAgW0tXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZm9ybUNvbnRyb2xJc1Jl
c2lnbmluZ0ZpcnN0UmVzcG9uZGVyOnNlbGZdOworICAgICAgICAgICAgICAgIFtNYWNGcmFtZTo6
YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZm9ybUNvbnRyb2xJc1Jlc2lnbmluZ0ZpcnN0UmVzcG9u
ZGVyOnNlbGZdOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTM4LDcgKzUz
OCw3IEBAIHZvaWQgUUNvbWJvQm94Ojpwb3B1bGF0ZSgpCiB7CiAgICAgUVdpZGdldCAqd2lkZ2V0
ID0gW3NlbGYgd2lkZ2V0XTsKICAgICByZXR1cm4gd2lkZ2V0ICYmIGluTmV4dFZhbGlkS2V5Vmll
dwotICAgICAgICA/IEtXUUtIVE1MUGFydDo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBL
V1FTZWxlY3RpbmdOZXh0KQorICAgICAgICA/IE1hY0ZyYW1lOjpuZXh0S2V5Vmlld0ZvcldpZGdl
dCh3aWRnZXQsIEtXUVNlbGVjdGluZ05leHQpCiAgICAgICAgIDogW3N1cGVyIG5leHRLZXlWaWV3
XTsKIH0KIApAQCAtNTQ2LDcgKzU0Niw3IEBAIHZvaWQgUUNvbWJvQm94Ojpwb3B1bGF0ZSgpCiB7
CiAgICAgUVdpZGdldCAqd2lkZ2V0ID0gW3NlbGYgd2lkZ2V0XTsKICAgICByZXR1cm4gd2lkZ2V0
ICYmIGluTmV4dFZhbGlkS2V5VmlldwotICAgICAgICA/IEtXUUtIVE1MUGFydDo6bmV4dEtleVZp
ZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdQcmV2aW91cykKKyAgICAgICAgPyBNYWNG
cmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdQcmV2aW91cykK
ICAgICAgICAgOiBbc3VwZXIgcHJldmlvdXNLZXlWaWV3XTsKIH0KIApJbmRleDoga3dxL1dlYkNv
cmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9XZWJDb3JlVGV4dFJl
bmRlcmVyRmFjdG9yeS5tbQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvV2ViQ29yZVRleHRSZW5k
ZXJlckZhY3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbXBvcnQg
IldlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgiCiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIK
ICNpbXBvcnQgIktXUUxpc3RCb3guaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIKICNpbXBv
cnQgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgV2Vi
Q29yZVRleHRSZW5kZXJlckZhY3RvcnkgKnNoYXJlCiAtICh2b2lkKWNsZWFyQ2FjaGVzCiB7CiAg
ICAgUUxpc3RCb3g6OmNsZWFyQ2FjaGVkVGV4dFJlbmRlcmVycygpOwotICAgIGZvciAoUVB0ckxp
c3RJdGVyYXRvcjxLV1FLSFRNTFBhcnQ+IGl0KEtXUUtIVE1MUGFydDo6aW5zdGFuY2VzKCkpOyBp
dC5jdXJyZW50KCk7ICsraXQpIHsKKyAgICBmb3IgKFFQdHJMaXN0SXRlcmF0b3I8TWFjRnJhbWU+
IGl0KE1hY0ZyYW1lOjppbnN0YW5jZXMoKSk7IGl0LmN1cnJlbnQoKTsgKytpdCkgewogICAgICAg
ICBbaXQuY3VycmVudCgpLT5icmlkZ2UoKSBzZXROZWVkc1JlYXBwbHlTdHlsZXNdOwogICAgIH0K
IH0KSW5kZXg6IGt3cS9LV1FTbGlkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVNsaWRlci5t
bQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRU2xpZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbXBvcnQgIktXUUxpbmVFZGl0LmgiCiAjaW1wb3J0ICJLV1FF
eGNlcHRpb25zLmgiCi0jaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1l
LmgiCiAjaW1wb3J0ICJLV1FWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3JlQnJpZGdlLmgiCiAjaW1w
b3J0ICJyZW5kZXJfZm9ybS5oIgpAQCAtMTAyLDcgKzEwMiw3IEBAIHVzaW5nIGtodG1sOjpSZW5k
ZXJMYXllcjsKIHsKICAgICBCT09MIGJlY29tZSA9IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRl
cl07CiAgICAgaWYgKGJlY29tZSAmJiBzbGlkZXIpIHsKLSAgICAgICAgaWYgKCFLV1FLSFRNTFBh
cnQ6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQoc2xpZGVyKSkgeworICAgICAgICBp
ZiAoIU1hY0ZyYW1lOjpjdXJyZW50RXZlbnRJc01vdXNlRG93bkluV2lkZ2V0KHNsaWRlcikpIHsK
ICAgICAgICAgICAgIFJlbmRlcldpZGdldCAqd2lkZ2V0ID0gY29uc3RfY2FzdDxSZW5kZXJXaWRn
ZXQgKj4gKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldpZGdldCAqPihzbGlkZXItPmV2ZW50Rmls
dGVyT2JqZWN0KCkpKTsKICAgICAgICAgICAgIFJlbmRlckxheWVyICpsYXllciA9IHdpZGdldC0+
ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgICAgIGlmIChsYXllcikKQEAgLTEyNSw3ICsxMjUs
NyBAQCB1c2luZyBraHRtbDo6UmVuZGVyTGF5ZXI7CiAgICAgICAgIFFGb2N1c0V2ZW50IGV2ZW50
KFFFdmVudDo6Rm9jdXNPdXQpOwogICAgICAgICBpZiAoc2xpZGVyLT5ldmVudEZpbHRlck9iamVj
dCgpKSB7CiAgICAgICAgICAgICBjb25zdF9jYXN0PFFPYmplY3QgKj4oc2xpZGVyLT5ldmVudEZp
bHRlck9iamVjdCgpKS0+ZXZlbnRGaWx0ZXIoc2xpZGVyLCAmZXZlbnQpOwotICAgICAgICAgICAg
W0tXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lkZ2V0KHNsaWRlcikgZm9ybUNvbnRyb2xJc1Jlc2ln
bmluZ0ZpcnN0UmVzcG9uZGVyOnNlbGZdOworICAgICAgICAgICAgW01hY0ZyYW1lOjpicmlkZ2VG
b3JXaWRnZXQoc2xpZGVyKSBmb3JtQ29udHJvbElzUmVzaWduaW5nRmlyc3RSZXNwb25kZXI6c2Vs
Zl07CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc2lnbjsKQEAgLTE0MSw3ICsxNDEs
NyBAQCB1c2luZyBraHRtbDo6UmVuZGVyTGF5ZXI7CiAgICAgICAgIC8vIHdlIHRhYiB0byBpdAog
ICAgICAgICBbc2VsZiByZXNpZ25GaXJzdFJlc3BvbmRlcl07CiAgICAgICAgIGlmIChzbGlkZXIp
IHsKLSAgICAgICAgICAgIHZpZXcgPSBLV1FLSFRNTFBhcnQ6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0
KHNsaWRlciwgS1dRU2VsZWN0aW5nTmV4dCk7CisgICAgICAgICAgICB2aWV3ID0gTWFjRnJhbWU6
Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHNsaWRlciwgS1dRU2VsZWN0aW5nTmV4dCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICB2aWV3ID0gW3N1cGVyIG5leHRLZXlWaWV3XTsKICAgICAg
ICAgfQpAQCAtMTYxLDcgKzE2MSw3IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJMYXllcjsKICAgICAg
ICAgLy8gd2UgdGFiIHRvIGl0CiAgICAgICAgIFtzZWxmIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsK
ICAgICAgICAgaWYgKHNsaWRlcikgewotICAgICAgICAgICAgdmlldyA9IEtXUUtIVE1MUGFydDo6
bmV4dEtleVZpZXdGb3JXaWRnZXQoc2xpZGVyLCBLV1FTZWxlY3RpbmdQcmV2aW91cyk7CisgICAg
ICAgICAgICB2aWV3ID0gTWFjRnJhbWU6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHNsaWRlciwgS1dR
U2VsZWN0aW5nUHJldmlvdXMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdmlldyA9
IFtzdXBlciBwcmV2aW91c0tleVZpZXddOwogICAgICAgICB9CkBAIC0xNzUsNyArMTc1LDcgQEAg
dXNpbmcga2h0bWw6OlJlbmRlckxheWVyOwogewogICAgIC8vIFNpbXBsaWZpZWQgbWV0aG9kIGZy
b20gTlNWaWV3OyBvdmVycmlkZGVuIHRvIHJlcGxhY2UgTlNWaWV3J3Mgd2F5IG9mIGNoZWNraW5n
CiAgICAgLy8gZm9yIGZ1bGwga2V5Ym9hcmQgYWNjZXNzIHdpdGggb3Vycy4KLSAgICBpZiAoc2xp
ZGVyICYmICFLV1FLSFRNTFBhcnQ6OnBhcnRGb3JXaWRnZXQoc2xpZGVyKS0+dGFic1RvQWxsQ29u
dHJvbHMoKSkgeworICAgIGlmIChzbGlkZXIgJiYgIU1hY0ZyYW1lOjpmcmFtZUZvcldpZGdldChz
bGlkZXIpLT50YWJzVG9BbGxDb250cm9scygpKSB7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9
CiAgICAgcmV0dXJuIChbc2VsZiB3aW5kb3ddICE9IG5pbCkgJiYgIVtzZWxmIGlzSGlkZGVuT3JI
YXNIaWRkZW5BbmNlc3Rvcl0gJiYgW3NlbGYgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXTsKQEAgLTI0
MSw3ICsyNDEsNyBAQCBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRU2xpZGVyOjpmb2N1c1BvbGljCiB7
CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgCi0gICAgV2ViQ29yZUJyaWRnZSAqYnJp
ZGdlID0gS1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQodGhpcyk7CisgICAgV2ViQ29yZUJy
aWRnZSAqYnJpZGdlID0gTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh0aGlzKTsKICAgICBpZiAo
IWJyaWRnZSB8fCAhW2JyaWRnZSBwYXJ0XSB8fCAhW2JyaWRnZSBwYXJ0XS0+dGFic1RvQWxsQ29u
dHJvbHMoKSkgewogICAgICAgICByZXR1cm4gTm9Gb2N1czsKICAgICB9CkluZGV4OiBrd3EvS1dR
RmlsZUJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FGaWxlQnV0dG9uLmgJKHJldmlzaW9u
IDExOTYwKQorKysga3dxL0tXUUZpbGVCdXR0b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2RlZmluZSBLV1FGSUxFQlVUVE9OX0gKIAogI2luY2x1ZGUgIktXUVdpZGdldC5o
IgotI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiAjaWZkZWYg
X19PQkpDX18KIEBjbGFzcyBLV1FGaWxlQnV0dG9uQWRhcHRlcjsKQEAgLTM1LDkgKzM1LDExIEBA
CiBjbGFzcyBLV1FGaWxlQnV0dG9uQWRhcHRlcjsKICNlbmRpZgogCitjbGFzcyBGcmFtZTsKKwog
Y2xhc3MgS1dRRmlsZUJ1dHRvbiA6IHB1YmxpYyBRV2lkZ2V0IHsKIHB1YmxpYzoKLSAgICBLV1FG
aWxlQnV0dG9uKEtIVE1MUGFydCAqcGFydCk7CisgICAgS1dRRmlsZUJ1dHRvbihGcmFtZSAqZnJh
bWUpOwogICAgIH5LV1FGaWxlQnV0dG9uKCk7CiAgICAgCiAgICAgdm9pZCBzZXRGaWxlbmFtZShj
b25zdCBRU3RyaW5nICYpOwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FLSFRNTFBh
cnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIK
LQotI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiS1dRQ2xpcGJvYXJkLmgiCi0j
aW1wb3J0ICJLV1FFZGl0Q29tbWFuZC5oIgotI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgotI2lt
cG9ydCAiS1dRRm9ybURhdGEuaCIKLSNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKLSNp
bXBvcnQgIktXUUtKb2JDbGFzc2VzLmgiCi0jaW1wb3J0ICJLV1FMb2dnaW5nLmgiCi0jaW1wb3J0
ICJLV1FQYWdlU3RhdGUuaCIKLSNpbXBvcnQgIktXUVByaW50ZXIuaCIKLSNpbXBvcnQgIktXUVJl
Z0V4cC5oIgotI2ltcG9ydCAiS1dRU2Nyb2xsQmFyLmgiCi0jaW1wb3J0ICJLV1FXaW5kb3dXaWRn
ZXQuaCIKLSNpbXBvcnQgIktXUVRleHRDb2RlYy5oIgotCi0jaW1wb3J0ICJXZWJDb3JlQnJpZGdl
LmgiCi0jaW1wb3J0ICJXZWJDb3JlR3JhcGhpY3NCcmlkZ2UuaCIKLSNpbXBvcnQgIldlYkNvcmVJ
bWFnZVJlbmRlcmVyLmgiCi0jaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKLSNpbXBvcnQg
IldlYkRhc2hib2FyZFJlZ2lvbi5oIgotCi0jaW1wb3J0ICJjc3NfY29tcHV0ZWRzdHlsZS5oIgot
I2ltcG9ydCAiY3NzaGVscGVyLmgiCi0jaW1wb3J0ICJkb20yX2V2ZW50c2ltcGwuaCIKLSNpbXBv
cnQgImRvbTJfcmFuZ2VpbXBsLmgiCi0jaW1wb3J0ICJkb21fcG9zaXRpb24uaCIKLSNpbXBvcnQg
ImRvbV90ZXh0aW1wbC5oIgotI2ltcG9ydCAiRXZlbnROYW1lcy5oIgotI2ltcG9ydCAiaHRtbF9k
b2N1bWVudGltcGwuaCIKLSNpbXBvcnQgImh0bWxfZm9ybWltcGwuaCIKLSNpbXBvcnQgImh0bWxf
dGFibGVpbXBsLmgiCi0jaW1wb3J0ICJraHRtbHBhcnRfcC5oIgotI2ltcG9ydCAia2h0bWx2aWV3
LmgiCi0jaW1wb3J0ICJranNfYmluZGluZy5oIgotI2ltcG9ydCAia2pzX3dpbmRvdy5oIgotI2lt
cG9ydCAicmVuZGVyX2NhbnZhcy5oIgotI2ltcG9ydCAicmVuZGVyX2ZyYW1lcy5oIgotI2ltcG9y
dCAicmVuZGVyX2ltYWdlLmgiCi0jaW1wb3J0ICJyZW5kZXJfbGlzdC5oIgotI2ltcG9ydCAicmVu
ZGVyX3N0eWxlLmgiCi0jaW1wb3J0ICJyZW5kZXJfdGFibGUuaCIKLSNpbXBvcnQgIklubGluZVRl
eHRCb3guaCIKLSNpbXBvcnQgInJlbmRlcl90aGVtZS5oIgotI2ltcG9ydCAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgotI2ltcG9ydCAidmlzaWJsZV9wb3NpdGlvbi5oIgotI2ltcG9ydCAidmlzaWJs
ZV90ZXh0LmgiCi0jaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCi0jaW1wb3J0ICJDYWNoZS5oIgot
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9pZGVudGlmaWVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9wcm9wZXJ0eV9tYXAuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9ydW50aW1lX3Jvb3QuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYlNj
cmlwdE9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL05QX2pzb2JqZWN0
Lmg+Ci0KLSNpZiBBUFBMRV9DSEFOR0VTCi0jaW1wb3J0ICJLV1FBY2NPYmplY3RDYWNoZS5oIgot
I2VuZGlmCi0KLSN1bmRlZiBfS1dRX1RJTUlORwotCi11c2luZyBuYW1lc3BhY2UgRE9NOwotdXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi11
c2luZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFtZXNwYWNlIEJpbmRpbmdzOwotCi11c2luZyBu
YW1lc3BhY2Uga2h0bWw7Ci0KLXVzaW5nIG5hbWVzcGFjZSBLSU87Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBLUGFydHM7Ci0KLU5TRXZlbnQgKktXUUtIVE1MUGFydDo6X2N1cnJlbnRFdmVudCA9IG5pbDsK
LQotdm9pZCBLSFRNTFBhcnQ6OmNvbXBsZXRlZCgpCi17Ci0gICAgS1dRKHRoaXMpLT5fY29tcGxl
dGVkLmNhbGwoKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmNvbXBsZXRlZChib29sIGFyZykKLXsK
LSAgICBLV1EodGhpcyktPl9jb21wbGV0ZWQuY2FsbChhcmcpOwotfQotCi1ib29sIEtIVE1MUGFy
dDo6b3BlblVSTChjb25zdCBLVVJMICZVUkwpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpvblVSTChjb25zdCBRU3Ry
aW5nICYpCi17Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRTdGF0dXNCYXJUZXh0KGNvbnN0IFFT
dHJpbmcgJnN0YXR1cykKLXsKLSAgICBLV1EodGhpcyktPnNldFN0YXR1c0JhclRleHQoc3RhdHVz
KTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnN0YXJ0ZWQoSm9iICpqKQotewotICAgIEtXUSh0aGlz
KS0+X3N0YXJ0ZWQuY2FsbChqKTsKLX0KLQotYm9vbCBLSFRNTFZpZXc6OmlzS0hUTUxWaWV3KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgcmVkaXJlY3Rpb25U
aW1lck1vbml0b3Iodm9pZCAqY29udGV4dCkKLXsKLSAgICBLV1FLSFRNTFBhcnQgKmt3cSA9IHN0
YXRpY19jYXN0PEtXUUtIVE1MUGFydCAqPihjb250ZXh0KTsKLSAgICBrd3EtPnJlZGlyZWN0aW9u
VGltZXJTdGFydGVkT3JTdG9wcGVkKCk7Ci19Ci0KLUtXUUtIVE1MUGFydDo6S1dRS0hUTUxQYXJ0
KCkKLSAgICA6IF9zdGFydGVkKHRoaXMsIFNJR05BTChzdGFydGVkKEtJTzo6Sm9iICopKSkKLSAg
ICAsIF9jb21wbGV0ZWQodGhpcywgU0lHTkFMKGNvbXBsZXRlZCgpKSkKLSAgICAsIF9jb21wbGV0
ZWRXaXRoQm9vbCh0aGlzLCBTSUdOQUwoY29tcGxldGVkKGJvb2wpKSkKLSAgICAsIF9tb3VzZURv
d25WaWV3KG5pbCkKLSAgICAsIF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcoZmFsc2UpCi0gICAgLCBf
bW91c2VEb3duTWF5U3RhcnREcmFnKGZhbHNlKQotICAgICwgX21vdXNlRG93bk1heVN0YXJ0U2Vs
ZWN0KGZhbHNlKQotICAgICwgX2FjdGl2YXRpb25FdmVudE51bWJlcigwKQotICAgICwgX2Zvcm1W
YWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQobmlsKQotICAgICwgX2Zvcm1BYm91dFRvQmVTdWJtaXR0
ZWQobmlsKQotICAgICwgX3dpbmRvd1dpZGdldChOVUxMKQotICAgICwgX2RyYXdTZWxlY3Rpb25P
bmx5KGZhbHNlKQotICAgICwgX2JpbmRpbmdSb290KDApCi0gICAgLCBfd2luZG93U2NyaXB0T2Jq
ZWN0KDApCi0gICAgLCBfd2luZG93U2NyaXB0TlBPYmplY3QoMCkKLSAgICAsIF9kcmFnQ2xpcGJv
YXJkKDApCi0gICAgLCBtX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lcyhmYWxzZSkKLSAgICAsIG1f
d2luZG93SGFzRm9jdXMoZmFsc2UpCi17Ci0gICAgLy8gTXVzdCBpbml0IHRoZSBjYWNoZSBiZWZv
cmUgY29ubmVjdGluZyB0byBhbnkgc2lnbmFscwotICAgIENhY2hlOjppbml0KCk7Ci0KLSAgICAv
LyBUaGUgd2lkZ2V0IGlzIG1hZGUgb3V0c2lkZSB0aGlzIGNsYXNzIGluIG91ciBjYXNlLgotICAg
IEtIVE1MUGFydDo6aW5pdCgwKTsKLQotICAgIG11dGFibGVJbnN0YW5jZXMoKS5wcmVwZW5kKHRo
aXMpOwotICAgIGQtPm1fcmVkaXJlY3Rpb25UaW1lci5zZXRNb25pdG9yKHJlZGlyZWN0aW9uVGlt
ZXJNb25pdG9yLCB0aGlzKTsKLX0KLQotS1dRS0hUTUxQYXJ0Ojp+S1dRS0hUTUxQYXJ0KCkKLXsK
LSAgICBzZXRWaWV3KDApOwotICAgIG11dGFibGVJbnN0YW5jZXMoKS5yZW1vdmUodGhpcyk7Ci0g
ICAgZnJlZUNsaXBib2FyZCgpOwotICAgIGNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7ICAgIAot
ICAgIAotICAgIGRlbGV0ZSBfd2luZG93V2lkZ2V0OwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6
ZnJlZUNsaXBib2FyZCgpCi17Ci0gICAgaWYgKF9kcmFnQ2xpcGJvYXJkKSB7Ci0gICAgICAgIF9k
cmFnQ2xpcGJvYXJkLT5zZXRBY2Nlc3NQb2xpY3koS1dRQ2xpcGJvYXJkOjpOdW1iKTsKLQlfZHJh
Z0NsaXBib2FyZC0+ZGVyZWYoKTsKLSAgICAgICAgX2RyYWdDbGlwYm9hcmQgPSAwOwotICAgIH0K
LX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNldFNldHRpbmdzIChLSFRNTFNldHRpbmdzICpzZXR0
aW5ncykKLXsKLSAgICBkLT5tX3NldHRpbmdzID0gc2V0dGluZ3M7Ci19Ci0KLVFTdHJpbmcgS1dR
S0hUTUxQYXJ0OjpnZW5lcmF0ZUZyYW1lTmFtZSgpCi17Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElP
TlM7Ci0gICAgcmV0dXJuIFFTdHJpbmc6OmZyb21OU1N0cmluZyhbX2JyaWRnZSBnZW5lcmF0ZUZy
YW1lTmFtZV0pOwotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gUVN0
cmluZygpOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgp
Ci17Ci0gICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB3YWl0IHVudGlsIHdlIGdldCBhbiBhY3R1YWwg
aHR0cCByZXNwb25zZSBiYWNrCi0gICAgLy8gdG8gY2FuY2VsIHBlbmRpbmcgcmVkaXJlY3RzLCBv
dGhlcndpc2UgdGhleSBtaWdodCBmaXJlIGJlZm9yZQotICAgIC8vIHRoYXQgaGFwcGVucy4KLSAg
ICBjYW5jZWxSZWRpcmVjdGlvbih0cnVlKTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OnVzZXJH
ZXN0dXJlSGludCgpCi17Ci0gICAgaWYgKGpTY3JpcHQoKSAmJiBqU2NyaXB0KCktPmludGVycHJl
dGVyKCkpIHsKLSAgICAgICAgS0hUTUxQYXJ0ICpyb290UGFydCA9IHRoaXM7Ci0gICAgICAgIHdo
aWxlIChyb290UGFydC0+cGFyZW50UGFydCgpICE9IDApCi0gICAgICAgICAgICByb290UGFydCA9
IHJvb3RQYXJ0LT5wYXJlbnRQYXJ0KCk7Ci0gICAgICAgIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXIg
KmludGVycHJldGVyID0gcm9vdFBhcnQtPmpTY3JpcHQoKS0+aW50ZXJwcmV0ZXIoKTsKLSAgICAg
ICAgcmV0dXJuIGludGVycHJldGVyLT53YXNSdW5CeVVzZXJHZXN0dXJlKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIC8vIGlmIG5vIEpTLCBhc3N1bWUgdGhlIHVzZXIgaW5pdGlhdGVkIHRoaXMgbmF2
Ci0gICAgICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6b3BlblVSTChj
b25zdCBLVVJMICZ1cmwpCi17Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICAvLyBG
SVhNRTogVGhlIGxhY2sgb2YgYXJncyBoZXJlIHRvIGdldCB0aGUgcmVsb2FkIGZsYWcgZnJvbQot
ICAgIC8vIGluZGljYXRlcyBhIHByb2JsZW0gaW4gaG93IHdlIHVzZSBLSFRNTFBhcnQ6OnByb2Nl
c3NPYmplY3RSZXF1ZXN0LAotICAgIC8vIHdoZXJlIHdlIGFyZSBvcGVuaW5nIHRoZSBVUkwgYmVm
b3JlIHRoZSBhcmdzIGFyZSBzZXQgdXAuCi0gICAgW19icmlkZ2UgbG9hZFVSTDp1cmwuZ2V0TlNV
UkwoKQotICAgICAgICAgICAgcmVmZXJyZXI6W19icmlkZ2UgcmVmZXJyZXJdCi0gICAgICAgICAg
ICAgIHJlbG9hZDpOTwotICAgICAgICAgdXNlckdlc3R1cmU6dXNlckdlc3R1cmVIaW50KCkKLSAg
ICAgICAgICAgICAgdGFyZ2V0Om5pbAotICAgICB0cmlnZ2VyaW5nRXZlbnQ6bmlsCi0gICAgICAg
ICAgICAgICAgZm9ybTpuaWwKLSAgICAgICAgICBmb3JtVmFsdWVzOm5pbF07Ci0KLSAgICBLV1Ff
VU5CTE9DS19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS1dRS0hU
TUxQYXJ0OjpvcGVuVVJMUmVxdWVzdChjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFVSTEFyZ3MgJmFy
Z3MpCi17Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1N0cmluZyAqcmVmZXJy
ZXI7Ci0gICAgUVN0cmluZyBhcmdzUmVmZXJyZXIgPSBhcmdzLm1ldGFEYXRhKClbInJlZmVycmVy
Il07Ci0gICAgaWYgKCFhcmdzUmVmZXJyZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlZmVycmVy
ID0gYXJnc1JlZmVycmVyLmdldE5TU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVm
ZXJyZXIgPSBbX2JyaWRnZSByZWZlcnJlcl07Ci0gICAgfQotCi0gICAgW19icmlkZ2UgbG9hZFVS
TDp1cmwuZ2V0TlNVUkwoKQotICAgICAgICAgICAgcmVmZXJyZXI6cmVmZXJyZXIKLSAgICAgICAg
ICAgICAgcmVsb2FkOmFyZ3MucmVsb2FkCi0gICAgICAgICB1c2VyR2VzdHVyZTp1c2VyR2VzdHVy
ZUhpbnQoKQotICAgICAgICAgICAgICB0YXJnZXQ6YXJncy5mcmFtZU5hbWUuZ2V0TlNTdHJpbmco
KQotICAgICB0cmlnZ2VyaW5nRXZlbnQ6bmlsCi0gICAgICAgICAgICAgICAgZm9ybTpuaWwKLSAg
ICAgICAgICBmb3JtVmFsdWVzOm5pbF07Ci0KLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwot
fQotCi12b2lkIEtXUUtIVE1MUGFydDo6ZGlkTm90T3BlblVSTChjb25zdCBLVVJMICZVUkwpCi17
Ci0gICAgaWYgKF9zdWJtaXR0ZWRGb3JtVVJMID09IFVSTCkgewotICAgICAgICBfc3VibWl0dGVk
Rm9ybVVSTCA9IEtVUkwoKTsKLSAgICB9Ci19Ci0KLS8vIFNjYW5zIGxvZ2ljYWxseSBmb3J3YXJk
IGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFtZXMKLXN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybShOb2RlSW1wbCAqc3RhcnQpCi17Ci0gICAgTm9kZUlt
cGwgKm47Ci0gICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICB9IGVs
c2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+
KG4pLT5mb3JtKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShmcmFtZVRhZykg
fHwgbi0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqY2hp
bGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudERv
Y3VtZW50KCk7Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJlc3VsdCA9
IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKLSAgICAgICAgICAgIGlmIChmcmFtZVJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZVJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gV2UgbG9vayBmb3IgZWl0aGVyIHRo
ZSBmb3JtIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZm9jdXMsIG9yIGZvciBvbmUgaW1tZWRpYXRl
bHkgYWZ0ZXIgaXQKLUhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFydDo6Y3VycmVudEZv
cm0oKSBjb25zdAotewotICAgIC8vIHN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBhY3RpdmUg
KGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlvbiBpcwotICAgIE5v
ZGVJbXBsICpzdGFydCA9IGQtPm1fZG9jID8gZC0+bV9kb2MtPmZvY3VzTm9kZSgpIDogMDsKLSAg
ICBpZiAoIXN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQoKTsKLSAgICB9
Ci0KLSAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVs
ZW1lbnQKLSAgICBOb2RlSW1wbCAqbjsKLSAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7Ci0g
ICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwgKj4obiktPmZvcm0oKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHRyeSB3
YWxraW5nIGZvcndhcmQgaW4gdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50Ci0g
ICAgcmV0dXJuIHN0YXJ0ID8gc2NhbkZvckZvcm0oc3RhcnQpIDogMDsKLX0KLQotLy8gRWl0aGVy
IGdldCBjYWNoZWQgcmVnZXhwIG9yIGJ1aWxkIG9uZSB0aGF0IG1hdGNoZXMgYW55IG9mIHRoZSBs
YWJlbHMuCi0vLyBUaGUgcmVnZXhwIHdlIGJ1aWxkIGlzIG9mIHRoZSBmb3JtOiAgKFNUUjF8U1RS
MnxTVFJOKQotUVJlZ0V4cCAqcmVnRXhwRm9yTGFiZWxzKE5TQXJyYXkgKmxhYmVscykKLXsKLSAg
ICAvLyBBbGwgdGhlIE9iakMgY2FsbHMgaW4gdGhpcyBtZXRob2QgYXJlIHNpbXBsZSBhcnJheSBh
bmQgc3RyaW5nCi0gICAgLy8gY2FsbHMgd2hpY2ggd2UgY2FuIGFzc3VtZSBkbyBub3QgcmFpc2Ug
ZXhjZXB0aW9ucwotCi0KLSAgICAvLyBQYXJhbGxlbCBhcnJheXMgdGhhdCB3ZSB1c2UgdG8gY2Fj
aGUgcmVnRXhwcy4gIEluIHByYWN0aWNlIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMKLSAgICAv
LyB0aGF0IHRoZSBhcHAgd2lsbCB1c2UgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBsb2NhbGVz
IGlzIHVzZWQgaW4gc2VhcmNoaW5nLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVn
RXhwQ2FjaGVTaXplID0gNDsKLSAgICBzdGF0aWMgTlNNdXRhYmxlQXJyYXkgKnJlZ0V4cExhYmVs
cyA9IG5pbDsKLSAgICBzdGF0aWMgUVB0ckxpc3QgPFFSZWdFeHA+IHJlZ0V4cHM7Ci0gICAgc3Rh
dGljIFFSZWdFeHAgd29yZFJlZ0V4cCA9IFFSZWdFeHAoIlxcdyIpOwotCi0gICAgUVJlZ0V4cCAq
cmVzdWx0OwotICAgIGlmICghcmVnRXhwTGFiZWxzKSB7Ci0gICAgICAgIHJlZ0V4cExhYmVscyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVnRXhwQ2FjaGVTaXpl
XTsKLSAgICB9Ci0gICAgdW5zaWduZWQgaW50IGNhY2hlSGl0ID0gW3JlZ0V4cExhYmVscyBpbmRl
eE9mT2JqZWN0OmxhYmVsc107Ci0gICAgaWYgKGNhY2hlSGl0ICE9IE5TTm90Rm91bmQpIHsKLSAg
ICAgICAgcmVzdWx0ID0gcmVnRXhwcy5hdChjYWNoZUhpdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgUVN0cmluZyBwYXR0ZXJuKCIoIik7Ci0gICAgICAgIHVuc2lnbmVkIGludCBudW1MYWJlbHMg
PSBbbGFiZWxzIGNvdW50XTsKLSAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgIGZvciAo
aSA9IDA7IGkgPCBudW1MYWJlbHM7IGkrKykgewotICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9
IFFTdHJpbmc6OmZyb21OU1N0cmluZygoTlNTdHJpbmcgKilbbGFiZWxzIG9iamVjdEF0SW5kZXg6
aV0pOwotCi0gICAgICAgICAgICBib29sIHN0YXJ0c1dpdGhXb3JkQ2hhciA9IGZhbHNlOwotICAg
ICAgICAgICAgYm9vbCBlbmRzV2l0aFdvcmRDaGFyID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
bGFiZWwubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICAgICAgICAgIHN0YXJ0c1dpdGhXb3JkQ2hh
ciA9IHdvcmRSZWdFeHAuc2VhcmNoKGxhYmVsLmF0KDApKSA+PSAwOwotICAgICAgICAgICAgICAg
IGVuZHNXaXRoV29yZENoYXIgPSB3b3JkUmVnRXhwLnNlYXJjaChsYWJlbC5hdChsYWJlbC5sZW5n
dGgoKSAtIDEpKSA+PSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQoInwiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNlYXJjaCBmb3Igd29yZCBib3VuZGFyaWVzIG9u
bHkgaWYgbGFiZWwgc3RhcnRzL2VuZHMgd2l0aCAid29yZCBjaGFyYWN0ZXJzIi4KLSAgICAgICAg
ICAgIC8vIElmIHdlIGFsd2F5cyBzZWFyY2hlZCBmb3Igd29yZCBib3VuZGFyaWVzLCB0aGlzIHdv
dWxkbid0IHdvcmsgZm9yIGxhbmd1YWdlcwotICAgICAgICAgICAgLy8gc3VjaCBhcyBKYXBhbmVz
ZS4KLSAgICAgICAgICAgIGlmIChzdGFydHNXaXRoV29yZENoYXIpIHsKLSAgICAgICAgICAgICAg
ICBwYXR0ZXJuLmFwcGVuZCgiXFxiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXR0
ZXJuLmFwcGVuZChsYWJlbCk7Ci0gICAgICAgICAgICBpZiAoZW5kc1dpdGhXb3JkQ2hhcikgewot
ICAgICAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKCJcXGIiKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBwYXR0ZXJuLmFwcGVuZCgiKSIpOwotICAgICAgICByZXN1bHQgPSBu
ZXcgUVJlZ0V4cChwYXR0ZXJuLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHJlZ2V4cCB0
byB0aGUgY2FjaGUsIG1ha2luZyBzdXJlIGl0IGlzIGF0IHRoZSBmcm9udCBmb3IgTFJVIG9yZGVy
aW5nCi0gICAgaWYgKGNhY2hlSGl0ICE9IDApIHsKLSAgICAgICAgaWYgKGNhY2hlSGl0ICE9IE5T
Tm90Rm91bmQpIHsKLSAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBzcG90Ci0gICAgICAg
ICAgICBbcmVnRXhwTGFiZWxzIHJlbW92ZU9iamVjdEF0SW5kZXg6Y2FjaGVIaXRdOwotICAgICAg
ICAgICAgcmVnRXhwcy5yZW1vdmUoY2FjaGVIaXQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGFk
ZCB0byBzdGFydAotICAgICAgICBbcmVnRXhwTGFiZWxzIGluc2VydE9iamVjdDpsYWJlbHMgYXRJ
bmRleDowXTsKLSAgICAgICAgcmVnRXhwcy5pbnNlcnQoMCwgcmVzdWx0KTsKLSAgICAgICAgLy8g
dHJpbSBpZiB0b28gYmlnCi0gICAgICAgIGlmIChbcmVnRXhwTGFiZWxzIGNvdW50XSA+IHJlZ0V4
cENhY2hlU2l6ZSkgewotICAgICAgICAgICAgW3JlZ0V4cExhYmVscyByZW1vdmVPYmplY3RBdElu
ZGV4OnJlZ0V4cENhY2hlU2l6ZV07Ci0gICAgICAgICAgICBRUmVnRXhwICpsYXN0ID0gcmVnRXhw
cy5sYXN0KCk7Ci0gICAgICAgICAgICByZWdFeHBzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAg
IGRlbGV0ZSBsYXN0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LU5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChRUmVnRXhw
ICpyZWdFeHAsIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqY2VsbCkKLXsKLSAgICBSZW5kZXJU
YWJsZUNlbGwgKmNlbGxSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCAqPihj
ZWxsLT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChjZWxsUmVuZGVyZXIpIHsKLSAgICAgICAgUmVu
ZGVyVGFibGVDZWxsICpjZWxsQWJvdmVSZW5kZXJlciA9IGNlbGxSZW5kZXJlci0+dGFibGUoKS0+
Y2VsbEFib3ZlKGNlbGxSZW5kZXJlcik7Ci0KLSAgICAgICAgaWYgKGNlbGxBYm92ZVJlbmRlcmVy
KSB7Ci0gICAgICAgICAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKmFib3ZlQ2VsbCA9Ci0g
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICo+KGNl
bGxBYm92ZVJlbmRlcmVyLT5lbGVtZW50KCkpOwotCi0gICAgICAgICAgICBpZiAoYWJvdmVDZWxs
KSB7Ci0gICAgICAgICAgICAgICAgLy8gc2VhcmNoIHdpdGhpbiB0aGUgYWJvdmUgY2VsbCB3ZSBm
b3VuZCBmb3IgYSBtYXRjaAotICAgICAgICAgICAgICAgIGZvciAoTm9kZUltcGwgKm4gPSBhYm92
ZUNlbGwtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxs
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRl
cmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBl
YWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCi0gICAgICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5xc3RyaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcG9zID0gcmVnRXhwLT5zZWFyY2hSZXYobm9kZVN0cmluZyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID49IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZVN0cmluZy5taWQocG9zLCByZWdFeHAtPm1hdGNoZWRMZW5n
dGgoKSkuZ2V0TlNTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAvLyBBbnkgcmVhc29uIGluIHByYWN0aWNlIHRvIHNlYXJjaCBhbGwgY2Vs
bHMgaW4gdGhhdCBhcmUgYWJvdmUgY2VsbD8KLSAgICByZXR1cm4gbmlsOwotfQotCi1OU1N0cmlu
ZyAqS1dRS0hUTUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KE5TQXJyYXkgKmxh
YmVscywgRWxlbWVudEltcGwgKmVsZW1lbnQpCi17Ci0gICAgUVJlZ0V4cCAqcmVnRXhwID0gcmVn
RXhwRm9yTGFiZWxzKGxhYmVscyk7Ci0gICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgYWZ0ZXIgd2Un
dmUgc2VlbiB0aGlzIG1hbnkgY2hhcnMKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2hhcnNTZWFy
Y2hlZFRocmVzaG9sZCA9IDUwMDsKLSAgICAvLyBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBtYXggd2Ug
c2VhcmNoLiAgV2UgYWxsb3cgYSBsaXR0bGUgbW9yZSBzbG9wIHRoYW4KLSAgICAvLyBjaGFyc1Nl
YXJjaGVkVGhyZXNob2xkLCB0byBtYWtlIGl0IG1vcmUgbGlrZWx5IHRoYXQgd2UnbGwgc2VhcmNo
IHdob2xlIG5vZGVzLgotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDaGFyc1NlYXJjaGVkID0g
NjAwOwotICAgIC8vIElmIHRoZSBzdGFydGluZyBlbGVtZW50IGlzIHdpdGhpbiBhIHRhYmxlLCB0
aGUgY2VsbCB0aGF0IGNvbnRhaW5zIGl0Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICpz
dGFydGluZ1RhYmxlQ2VsbCA9IDA7Ci0gICAgYm9vbCBzZWFyY2hlZENlbGxBYm92ZSA9IGZhbHNl
OwotCi0gICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhl
ciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQotICAgIGludCB1bnNpZ25lZCBsZW5n
dGhTZWFyY2hlZCA9IDA7Ci0gICAgTm9kZUltcGwgKm47Ci0gICAgZm9yIChuID0gZWxlbWVudC0+
dHJhdmVyc2VQcmV2aW91c05vZGUoKTsKLSAgICAgICAgIG4gJiYgbGVuZ3RoU2VhcmNoZWQgPCBj
aGFyc1NlYXJjaGVkVGhyZXNob2xkOwotICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNO
b2RlKCkpCi0gICAgewotICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShmb3JtVGFnKQotICAgICAg
ICAgICAgfHwgKG4tPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICYmIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIFdlIGhpdCBhbm90aGVyIGZvcm0gZWxlbWVudCBvciB0aGUg
c3RhcnQgb2YgdGhlIGZvcm0gLSBiYWlsIG91dAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7
Ci0gICAgICAgICAgICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKHRy
VGFnKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VhcmNoZWRDZWxsQWJvdmUgPSB0cnVlOwot
ICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4t
PnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4cAotICAg
ICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCkucXN0cmluZygpOwot
ICAgICAgICAgICAgLy8gYWRkIDEwMCBmb3Igc2xvcCwgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0
aGF0IHdlJ2xsIHNlYXJjaCB3aG9sZSBub2RlcwotICAgICAgICAgICAgaWYgKGxlbmd0aFNlYXJj
aGVkICsgbm9kZVN0cmluZy5sZW5ndGgoKSA+IG1heENoYXJzU2VhcmNoZWQpIHsKLSAgICAgICAg
ICAgICAgICBub2RlU3RyaW5nID0gbm9kZVN0cmluZy5yaWdodChjaGFyc1NlYXJjaGVkVGhyZXNo
b2xkIC0gbGVuZ3RoU2VhcmNoZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHBv
cyA9IHJlZ0V4cC0+c2VhcmNoUmV2KG5vZGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKHBvcyA+
PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVTdHJpbmcubWlkKHBvcywgcmVnRXhw
LT5tYXRjaGVkTGVuZ3RoKCkpLmdldE5TU3RyaW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGxlbmd0aFNlYXJjaGVkICs9IG5vZGVTdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBzdGFydGVkIGlu
IGEgY2VsbCwgYnV0IGJhaWxlZCBiZWNhdXNlIHdlIGZvdW5kIHRoZSBzdGFydCBvZiB0aGUgZm9y
bSBvciB0aGUKLSAgICAvLyBwcmV2aW91cyBlbGVtZW50LCB3ZSBzdGlsbCBtaWdodCBuZWVkIHRv
IHNlYXJjaCB0aGUgcm93IGFib3ZlIHVzIGZvciBhIGxhYmVsLgotICAgIGlmIChzdGFydGluZ1Rh
YmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUpIHsKLSAgICAgICAgIHJldHVybiBzZWFyY2hG
b3JMYWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci19Ci0KLU5TU3RyaW5nICpLV1FLSFRNTFBh
cnQ6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoTlNBcnJheSAqbGFiZWxzLCBFbGVtZW50SW1w
bCAqZWxlbWVudCkKLXsKLSAgICBRU3RyaW5nIG5hbWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpLnFzdHJpbmcoKTsKLSAgICAvLyBNYWtlIG51bWJlcnMgYW5kIF8ncyBpbiBmaWVs
ZCBuYW1lcyBiZWhhdmUgbGlrZSB3b3JkIGJvdW5kYXJpZXMsIGUuZy4sICJhZGRyZXNzMiIKLSAg
ICBuYW1lLnJlcGxhY2UoUVJlZ0V4cCgiW1s6ZGlnaXQ6XV0iKSwgIiAiKTsKLSAgICBuYW1lLnJl
cGxhY2UoJ18nLCAnICcpOwotICAgIAotICAgIFFSZWdFeHAgKnJlZ0V4cCA9IHJlZ0V4cEZvckxh
YmVscyhsYWJlbHMpOwotICAgIC8vIFVzZSB0aGUgbGFyZ2VzdCBtYXRjaCB3ZSBjYW4gZmluZCBp
biB0aGUgd2hvbGUgbmFtZSBzdHJpbmcKLSAgICBpbnQgcG9zOwotICAgIGludCBsZW5ndGg7Ci0g
ICAgaW50IGJlc3RQb3MgPSAtMTsKLSAgICBpbnQgYmVzdExlbmd0aCA9IC0xOwotICAgIGludCBz
dGFydCA9IDA7Ci0gICAgZG8gewotICAgICAgICBwb3MgPSByZWdFeHAtPnNlYXJjaChuYW1lLCBz
dGFydCk7Ci0gICAgICAgIGlmIChwb3MgIT0gLTEpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IHJl
Z0V4cC0+bWF0Y2hlZExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA+PSBiZXN0TGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgYmVzdFBvcyA9IHBvczsKLSAgICAgICAgICAgICAgICBi
ZXN0TGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhcnQgPSBw
b3MrMTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHBvcyAhPSAtMSk7Ci0KLSAgICBpZiAoYmVz
dFBvcyAhPSAtMSkgewotICAgICAgICByZXR1cm4gbmFtZS5taWQoYmVzdFBvcywgYmVzdExlbmd0
aCkuZ2V0TlNTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLy8gU2VhcmNo
ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5nIGlzIHNlbGVj
dGVkLgotYm9vbCBLV1FLSFRNTFBhcnQ6OmZpbmRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgYm9v
bCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnKQotewotICAgIFFTdHJpbmcg
dGFyZ2V0ID0gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKHN0cmluZyk7Ci0gICAgaWYgKHRhcmdldC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICAvLyBJ
bml0aWFsbHkgc2VhcmNoIGZyb20gdGhlIHN0YXJ0IChpZiBmb3J3YXJkKSBvciBlbmQgKGlmIGJh
Y2t3YXJkKSBvZiB0aGUgc2VsZWN0aW9uLCBhbmQgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQu
Ci0gICAgUmVmUHRyPFJhbmdlSW1wbD4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKHhtbERv
Y0ltcGwoKSkpOwotICAgIGlmIChzZWxlY3Rpb25TdGFydCgpKSB7Ci0gICAgICAgIGlmIChmb3J3
YXJkKSB7Ci0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmVuZEFmZmluaXR5KCkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwg
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5zdGFydEFmZmlu
aXR5KCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiByZXN1bHRS
YW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNh
c2VGbGFnKSk7Ci0gICAgCi0gICAgLy8gSWYgd2UgcmUtZm91bmQgdGhlIChub24tZW1wdHkpIHNl
bGVjdGVkIHJhbmdlLCB0aGVuIHNlYXJjaCBhZ2FpbiBzdGFydGluZyBqdXN0IHBhc3QgdGhlIHNl
bGVjdGVkIHJhbmdlLgotICAgIGlmIChzZWxlY3Rpb25TdGFydCgpICYmICpyZXN1bHRSYW5nZSA9
PSAqc2VsZWN0aW9uKCkudG9SYW5nZSgpKSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VP
ZkNvbnRlbnRzKHhtbERvY0ltcGwoKSk7Ci0gICAgICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAg
ICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlv
bigpLmVuZCgpLCBzZWxlY3Rpb24oKS5lbmRBZmZpbml0eSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIFZpc2libGVQb3NpdGlvbihz
ZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOwotICAgIH0KLSAgICAKLSAgICBpbnQgZXhj
ZXB0aW9uID0gMDsKLSAgICAKLSAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQg
d2UncmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlz
IHdpbGwKLSAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFy
Y2hlZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNl
cHRpb24pICYmIHdyYXBGbGFnKSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRl
bnRzKHhtbERvY0ltcGwoKSk7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChz
ZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7Ci0gICAgICAgIC8v
IFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2Ft
ZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAotICAgICAgICAvLyAoZS5nLiwgdGhlIHNlbGVj
dGlvbiB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2Ug
ZGVjaWRlZCB0aGF0Ci0gICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGlu
c3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KLSAgICB9Ci0K
LSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxl
cihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUp
KTsKLSAgICByZXZlYWxTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBL
V1FLSFRNTFBhcnQ6OmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCkKLXsKLSAgICAvLyBJdCdzIHNh
ZmUgdG8gYXNzdW1lIHRoYXQgb3VyIG93biBjbGFzc2VzIGFuZCBGb3VuZGF0aW9uIGRhdGEKLSAg
ICAvLyBzdHJ1Y3R1cmVzIHdvbid0IHJhaXNlIGV4Y2VwdGlvbnMgaW4gZGVhbGxvYwotCi0gICAg
S1dRUmVsZWFzZShfZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7Ci0gICAgX2Zvcm1WYWx1
ZXNBYm91dFRvQmVTdWJtaXR0ZWQgPSBuaWw7Ci0gICAgS1dRUmVsZWFzZShfZm9ybUFib3V0VG9C
ZVN1Ym1pdHRlZCk7Ci0gICAgX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBuaWw7Ci19Ci0KLXZv
aWQgS1dRS0hUTUxQYXJ0OjpyZWNvcmRGb3JtVmFsdWUoY29uc3QgUVN0cmluZyAmbmFtZSwgY29u
c3QgUVN0cmluZyAmdmFsdWUsIEhUTUxGb3JtRWxlbWVudEltcGwgKmVsZW1lbnQpCi17Ci0gICAg
Ly8gSXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IG91ciBvd24gY2xhc3NlcyBhbmQgYmFzaWMgRm91
bmRhdGlvbgotICAgIC8vIGRhdGEgc3RydWN0dXJlcyB3b24ndCByYWlzZSBleGNlcHRpb25zCi0K
LSAgICBpZiAoIV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkKSB7Ci0gICAgICAgIF9mb3Jt
VmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkID0gS1dRUmV0YWluTlNSZWxlYXNlKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICBBU1NFUlQoIV9mb3JtQWJvdXRUb0Jl
U3VibWl0dGVkKTsKLSAgICAgICAgX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBLV1FSZXRhaW4o
W0RPTUVsZW1lbnQgX2VsZW1lbnRXaXRoSW1wbDplbGVtZW50XSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKFtfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCBfZWxlbWVudEltcGxdID09IGVs
ZW1lbnQpOwotICAgIH0KLSAgICBbX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQgc2V0T2Jq
ZWN0OnZhbHVlLmdldE5TU3RyaW5nKCkgZm9yS2V5Om5hbWUuZ2V0TlNTdHJpbmcoKV07Ci19Ci0K
LXZvaWQgS1dRS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJM
QXJncyAmYXJncykKLXsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIC8vIEZJWE1F
OiBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYWx0b2dldGhlciBhbmQgZml4IHRoZSBtdWx0aXBs
ZSBmb3JtIHN1Ym1pc3Npb24gaXNzdWUgYW5vdGhlciB3YXkuCi0gICAgLy8gV2UgZG8gbm90IHdh
bnQgdG8gc3VibWl0IG1vcmUgdGhhbiBvbmUgZm9ybSBmcm9tIHRoZSBzYW1lIHBhZ2UsCi0gICAg
Ly8gbm9yIGRvIHdlIHdhbnQgdG8gc3VibWl0IGEgc2luZ2xlIGZvcm0gbW9yZSB0aGFuIG9uY2Uu
Ci0gICAgLy8gVGhpcyBmbGFnIHByZXZlbnRzIHRoZXNlIGZyb20gaGFwcGVuaW5nOyBub3Qgc3Vy
ZSBob3cgb3RoZXIgYnJvd3NlcnMgcHJldmVudCB0aGlzLgotICAgIC8vIFRoZSBmbGFnIGlzIHJl
c2V0IGluIGVhY2ggdGltZSB3ZSBzdGFydCBoYW5kbGUgYSBuZXcgbW91c2Ugb3Iga2V5IGRvd24g
ZXZlbnQsIGFuZAotICAgIC8vIGFsc28gaW4gc2V0VmlldyBzaW5jZSB0aGlzIHBhcnQgbWF5IGdl
dCByZXVzZWQgZm9yIGEgcGFnZSBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgLy8g
VGhlIGZvcm0gbXVsdGktc3VibWl0IGxvZ2ljIGhlcmUgaXMgb25seSBuZWVkZWQgd2hlbiB3ZSBh
cmUgc3VibWl0dGluZyBhIGZvcm0gdGhhdCBhZmZlY3RzIHRoaXMgZnJhbWUuCi0gICAgLy8gRklY
TUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5IG9uZSBvZiB0aGUgd2F5cyB0aGUgc3VibWlzc2lv
biBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRoaW5nIG90aGVyCi0gICAgLy8gdGhhbiByZXBsYWNp
bmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNvIHRoaXMgY2hlY2sgaXMgZmxhd2VkLiBPbiB0aGUg
b3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhhcmRseQotICAgIC8vIG5lZWRlZCBhbnkgbW9yZSBu
b3cgdGhhdCB3ZSByZXNldCBfc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBk
b3duIGV2ZW50LgotICAgIFdlYkNvcmVCcmlkZ2UgKnRhcmdldCA9IGFyZ3MuZnJhbWVOYW1lLmlz
RW1wdHkoKSA/IF9icmlkZ2UgOiBbX2JyaWRnZSBmaW5kRnJhbWVOYW1lZDphcmdzLmZyYW1lTmFt
ZS5nZXROU1N0cmluZygpXTsKLSAgICBLSFRNTFBhcnQgKnRhcmdldFBhcnQgPSBbdGFyZ2V0IHBh
cnRdOwotICAgIGJvb2wgd2lsbFJlcGxhY2VUaGlzRnJhbWUgPSBmYWxzZTsKLSAgICBmb3IgKEtI
VE1MUGFydCAqcCA9IHRoaXM7IHA7IHAgPSBwLT5wYXJlbnRQYXJ0KCkpIHsKLSAgICAgICAgaWYg
KHAgPT0gdGFyZ2V0UGFydCkgewotICAgICAgICAgICAgd2lsbFJlcGxhY2VUaGlzRnJhbWUgPSB0
cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHdpbGxS
ZXBsYWNlVGhpc0ZyYW1lKSB7Ci0gICAgICAgIGlmIChfc3VibWl0dGVkRm9ybVVSTCA9PSB1cmwp
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBfc3VibWl0dGVkRm9y
bVVSTCA9IHVybDsKLSAgICB9Ci0KLSAgICBpZiAoIWFyZ3MuZG9Qb3N0KCkpIHsKLSAgICAgICAg
W19icmlkZ2UgbG9hZFVSTDp1cmwuZ2V0TlNVUkwoKQotCSAgICAgICAgcmVmZXJyZXI6W19icmlk
Z2UgcmVmZXJyZXJdIAotICAgICAgICAgICAgICAgICAgcmVsb2FkOmFyZ3MucmVsb2FkCi0gICAg
ICAgICAgICAgdXNlckdlc3R1cmU6dHJ1ZQotICAJICAgICAgICAgIHRhcmdldDphcmdzLmZyYW1l
TmFtZS5nZXROU1N0cmluZygpCi0gICAgICAgICB0cmlnZ2VyaW5nRXZlbnQ6X2N1cnJlbnRFdmVu
dAotICAgICAgICAgICAgICAgICAgICBmb3JtOl9mb3JtQWJvdXRUb0JlU3VibWl0dGVkCi0gICAg
ICAgICAgICAgIGZvcm1WYWx1ZXM6X2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWRdOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChhcmdzLmNvbnRlbnRUeXBlKCkuc3RhcnRzV2l0aCgi
Q29udGVudC1UeXBlOiAiKSk7Ci0gICAgICAgIFtfYnJpZGdlIHBvc3RXaXRoVVJMOnVybC5nZXRO
U1VSTCgpCi0JICAgICAgICAgICAgcmVmZXJyZXI6W19icmlkZ2UgcmVmZXJyZXJdIAotICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldDphcmdzLmZyYW1lTmFtZS5nZXROU1N0cmluZygpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhOmFycmF5RnJvbUZvcm1EYXRhKGFyZ3MucG9zdERhdGEp
Ci0gICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOmFyZ3MuY29udGVudFR5cGUoKS5taWQoMTQp
LmdldE5TU3RyaW5nKCkKLSAgICAgICAgICAgICB0cmlnZ2VyaW5nRXZlbnQ6X2N1cnJlbnRFdmVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTpfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZAot
ICAgICAgICAgICAgICAgICAgZm9ybVZhbHVlczpfZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRl
ZF07Ci0gICAgfQotICAgIGNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0KLSAgICBLV1FfVU5C
TE9DS19FWENFUFRJT05TOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0RW5jb2RpbmcoY29u
c3QgUVN0cmluZyAmbmFtZSwgYm9vbCB1c2VyQ2hvc2VuKQotewotICAgIGlmICghZC0+bV93b3Jr
aW5nVVJMLmlzRW1wdHkoKSkgewotICAgICAgICByZWNlaXZlZEZpcnN0RGF0YSgpOwotICAgIH0K
LSAgICBkLT5tX2VuY29kaW5nID0gbmFtZTsKLSAgICBkLT5tX2hhdmVFbmNvZGluZyA9IHVzZXJD
aG9zZW47Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjphZGREYXRhKGNvbnN0IGNoYXIgKmJ5dGVz
LCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChkLT5tX3dvcmtpbmdVUkwuaXNFbXB0eSgpKTsK
LSAgICBBU1NFUlQoZC0+bV9kb2MpOwotICAgIEFTU0VSVChkLT5tX2RvYy0+cGFyc2luZygpKTsK
LSAgICB3cml0ZShieXRlcywgbGVuZ3RoKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OmZyYW1lRGV0
YWNoZWQoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZpcnR1YWwgZnVuY3Rp
b24sIHdpdGggdGhlIGZpcnN0IHBhcnQgaW4gS1dRS0hUTUxQYXJ0LCBhbmQgdGhlIHNlY29uZAot
ICAgIC8vIHBhcnQgaW4gS0hUTUxQYXJ0LCBzbyBpdCB3b3JrcyBmb3IgS0hUTUwgdG9vLgotCi0g
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW0tXUSh0aGlzKS0+YnJpZGdlKCkgZnJhbWVE
ZXRhY2hlZF07Ci0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIEtIVE1MUGFydCAq
cGFyZW50ID0gcGFyZW50UGFydCgpOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgICAgRnJhbWVM
aXN0JiBwYXJlbnRGcmFtZXMgPSBwYXJlbnQtPmQtPm1fZnJhbWVzOwotICAgICAgICBGcmFtZUl0
IGVuZCA9IHBhcmVudEZyYW1lcy5lbmQoKTsKLSAgICAgICAgZm9yIChGcmFtZUl0IGl0ID0gcGFy
ZW50RnJhbWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQ2hpbGRG
cmFtZSAmY2hpbGQgPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoY2hpbGQubV9wYXJ0ID09IHRoaXMp
IHsKLSAgICAgICAgICAgICAgICBwYXJlbnQtPmRpc2Nvbm5lY3RDaGlsZCgmY2hpbGQpOwotICAg
ICAgICAgICAgICAgIHBhcmVudEZyYW1lcy5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgIGRl
cmVmKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojp1cmxTZWxlY3RlZChjb25zdCBLVVJMICZ1
cmwsIGludCBidXR0b24sIGludCBzdGF0ZSwgY29uc3QgVVJMQXJncyAmYXJncykKLXsKLSAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIE5TU3RyaW5nICpyZWZlcnJlcjsKLSAgICBRU3Ry
aW5nIGFyZ3NSZWZlcnJlciA9IGFyZ3MubWV0YURhdGEoKVsicmVmZXJyZXIiXTsKLSAgICBpZiAo
IWFyZ3NSZWZlcnJlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVmZXJyZXIgPSBhcmdzUmVmZXJy
ZXIuZ2V0TlNTdHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZWZlcnJlciA9IFtfYnJp
ZGdlIHJlZmVycmVyXTsKLSAgICB9Ci0KLSAgICBbX2JyaWRnZSBsb2FkVVJMOnVybC5nZXROU1VS
TCgpCi0gICAgICAgICAgICByZWZlcnJlcjpyZWZlcnJlcgotICAgICAgICAgICAgICByZWxvYWQ6
YXJncy5yZWxvYWQKLSAgICAgICAgIHVzZXJHZXN0dXJlOnRydWUKLSAgICAgICAgICAgICAgdGFy
Z2V0OmFyZ3MuZnJhbWVOYW1lLmdldE5TU3RyaW5nKCkKLSAgICAgdHJpZ2dlcmluZ0V2ZW50Ol9j
dXJyZW50RXZlbnQKLSAgICAgICAgICAgICAgICBmb3JtOm5pbAotICAgICAgICAgIGZvcm1WYWx1
ZXM6bmlsXTsKLQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci19Ci0KLWNsYXNzIEtXUVBs
dWdpblBhcnQgOiBwdWJsaWMgUmVhZE9ubHlQYXJ0Ci17Ci0gICAgdmlydHVhbCBib29sIG9wZW5V
UkwoY29uc3QgS1VSTCAmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGNsb3Nl
VVJMKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotUmVhZE9ubHlQYXJ0ICpLV1FLSFRNTFBhcnQ6
OmNyZWF0ZVBhcnQoY29uc3QgQ2hpbGRGcmFtZSAmY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29u
c3QgUVN0cmluZyAmbWltZVR5cGUpCi17Ci0gICAgUmVhZE9ubHlQYXJ0ICpwYXJ0OwotICAgIEtX
UV9CTE9DS19FWENFUFRJT05TOwotCi0gICAgT2JqZWN0RWxlbWVudFR5cGUgb2JqZWN0VHlwZSA9
IE9iamVjdEVsZW1lbnRGcmFtZTsKLSAgICBpZiAoY2hpbGQubV90eXBlID09IENoaWxkRnJhbWU6
Ok9iamVjdCkKLSAgICAgICAgb2JqZWN0VHlwZSA9IFtfYnJpZGdlIGRldGVybWluZU9iamVjdEZy
b21NSU1FVHlwZTptaW1lVHlwZS5nZXROU1N0cmluZygpIFVSTDp1cmwuZ2V0TlNVUkwoKV07Ci0g
ICAgCi0gICAgaWYgKG9iamVjdFR5cGUgPT0gT2JqZWN0RWxlbWVudE5vbmUpIHsKLSAgICAgICAg
aWYgKGNoaWxkLm1faGFzRmFsbGJhY2tDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgICAgIG9iamVjdFR5cGUgPSBPYmplY3RFbGVtZW50UGx1Z2luOyAvLyBTaW5jZSBubyBm
YWxsYmFjayBjb250ZW50IGV4aXN0cywgd2UnbGwgbWFrZSBhIHBsdWdpbiBhbmQgc2hvdyB0aGUg
ZXJyb3IgZGlhbG9nLgotICAgIH0KLQotICAgIGlmIChvYmplY3RUeXBlID09IE9iamVjdEVsZW1l
bnRQbHVnaW4pIHsKLSAgICAgICAgS1dRUGx1Z2luUGFydCAqbmV3UGFydCA9IG5ldyBLV1FQbHVn
aW5QYXJ0OwotICAgICAgICBuZXdQYXJ0LT5zZXRXaWRnZXQobmV3IFFXaWRnZXQoW19icmlkZ2Ug
dmlld0ZvclBsdWdpbldpdGhVUkw6dXJsLmdldE5TVVJMKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOmNoaWxkLm1f
cGFyYW1OYW1lcy5nZXROU0FycmF5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOmNoaWxkLm1fcGFyYW1WYWx1ZXMu
Z2V0TlNBcnJheSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6Y2hpbGQubV9hcmdzLnNlcnZpY2VUeXBlLmdldE5T
U3RyaW5nKCldKSk7Ci0gICAgICAgIHBhcnQgPSBuZXdQYXJ0OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIExPRyhGcmFtZXMsICJuYW1lICVzIiwgY2hpbGQubV9uYW1lLmFzY2lpKCkpOwotICAgICAg
ICBCT09MIGFsbG93c1Njcm9sbGluZyA9IFlFUzsKLSAgICAgICAgaW50IG1hcmdpbldpZHRoID0g
LTE7Ci0gICAgICAgIGludCBtYXJnaW5IZWlnaHQgPSAtMTsKLSAgICAgICAgaWYgKGNoaWxkLm1f
dHlwZSAhPSBDaGlsZEZyYW1lOjpPYmplY3QpIHsKLSAgICAgICAgICAgIEhUTUxGcmFtZUVsZW1l
bnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4oY2hpbGQubV9m
cmFtZS0+ZWxlbWVudCgpKTsKLSAgICAgICAgICAgIGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9s
bGluZ01vZGUoKSAhPSBRU2Nyb2xsVmlldzo6QWx3YXlzT2ZmOwotICAgICAgICAgICAgbWFyZ2lu
V2lkdGggPSBvLT5nZXRNYXJnaW5XaWR0aCgpOwotICAgICAgICAgICAgbWFyZ2luSGVpZ2h0ID0g
by0+Z2V0TWFyZ2luSGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViQ29yZUJyaWRnZSAq
Y2hpbGRCcmlkZ2UgPSBbX2JyaWRnZSBjcmVhdGVDaGlsZEZyYW1lTmFtZWQ6Y2hpbGQubV9uYW1l
LmdldE5TU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhVUkw6dXJsLmdldE5TVVJMKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6Y2hp
bGQubV9hcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0uZ2V0TlNTdHJpbmcoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUGFy
dDpjaGlsZC5tX2ZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsb3dzU2Nyb2xsaW5nOmFsbG93c1Njcm9sbGluZwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5XaWR0aDpt
YXJnaW5XaWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmdpbkhlaWdodDptYXJnaW5IZWlnaHRdOwotCS8vIFRoaXMgY2FsbCBuZWVk
cyB0byByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSByZWYsIHNpbmNlIHRoZSBjYWxsZXIgd2lsbCBl
eHBlY3QgdG8gb3duIGl0LgotCS8vIGNoaWxkQnJpZGdlIG93bnMgdGhlIG9ubHkgcmVmIHNvIGZh
ci4KLSAgICAgICAgcGFydCA9IFtjaGlsZEJyaWRnZSBwYXJ0XTsKLSAgICAgICAgaWYgKHBhcnQp
Ci0gICAgICAgICAgICBwYXJ0LT5yZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFydDsKLQot
ICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9p
ZCBLV1FLSFRNTFBhcnQ6OnNldFZpZXcoS0hUTUxWaWV3ICp2aWV3KQotewotICAgIC8vIERldGFj
aCB0aGUgZG9jdW1lbnQgbm93LCBzbyBhbnkgb25VbmxvYWQgaGFuZGxlcnMgZ2V0IHJ1biAtIGlm
Ci0gICAgLy8gd2Ugd2FpdCB1bnRpbCB0aGUgdmlldyBpcyBkZXN0cm95ZWQsIHRoZW4gdGhpbmdz
IHdvbid0IGJlCi0gICAgLy8gaG9va2VkIHVwIGVub3VnaCBmb3Igc29tZSBKYXZhU2NyaXB0IGNh
bGxzIHRvIHdvcmsuCi0gICAgaWYgKGQtPm1fZG9jICYmIHZpZXcgPT0gMCkKLQlkLT5tX2RvYy0+
ZGV0YWNoKCk7Ci0gICAgCi0gICAgaWYgKHZpZXcpCi0Jdmlldy0+cmVmKCk7Ci0gICAgaWYgKGQt
Pm1fdmlldykKLQlkLT5tX3ZpZXctPmRlcmVmKCk7Ci0gICAgZC0+bV92aWV3ID0gdmlldzsKLSAg
ICBzZXRXaWRnZXQodmlldyk7Ci0gICAgCi0gICAgLy8gRGVsZXRlIG9sZCBQbHVnSW4gZGF0YSBz
dHJ1Y3R1cmVzCi0gICAgY2xlYW51cFBsdWdpblJvb3RPYmplY3RzKCk7Ci0gICAgX2JpbmRpbmdS
b290ID0gMDsKLSAgICBLV1FSZWxlYXNlKF93aW5kb3dTY3JpcHRPYmplY3QpOwotICAgIF93aW5k
b3dTY3JpcHRPYmplY3QgPSAwOwotICAgIF93aW5kb3dTY3JpcHROUE9iamVjdCA9IDA7Ci0gICAg
Ci0gICAgLy8gT25seSBvbmUgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQgcGVyIHZpZXcgb2Yg
YSBwYXJ0LgotICAgIC8vIFNpbmNlIHRoaXMgcGFydCBtYXkgYmUgZ2V0dGluZyByZXVzZWQgYXMg
YSByZXN1bHQgb2YgYmVpbmcKLSAgICAvLyBwdWxsZWQgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLCByZXNldCB0aGlzIGZsYWcuCi0gICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7Ci19
Ci0KLUtIVE1MVmlldyAqS1dRS0hUTUxQYXJ0Ojp2aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZC0+bV92aWV3OwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0VGl0bGUoY29uc3QgRE9NU3Ry
aW5nICZ0aXRsZSkKLXsKLSAgICBRU3RyaW5nIHRleHQgPSB0aXRsZS5xc3RyaW5nKCk7Ci0gICAg
dGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwot
Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW19icmlkZ2Ugc2V0VGl0bGU6dGV4dC5n
ZXROU1N0cmluZygpXTsKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotfQotCi12b2lkIEtX
UUtIVE1MUGFydDo6c2V0U3RhdHVzQmFyVGV4dChjb25zdCBRU3RyaW5nICZzdGF0dXMpCi17Ci0g
ICAgUVN0cmluZyB0ZXh0ID0gc3RhdHVzOwotICAgIHRleHQucmVwbGFjZShRQ2hhcignXFwnKSwg
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKLQotICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OwotICAgIFtfYnJpZGdlIHNldFN0YXR1c1RleHQ6dGV4dC5nZXROU1N0cmluZygpXTsKLSAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6c2NoZWR1bGVD
bG9zZSgpCi17Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW19icmlkZ2UgY2xvc2VX
aW5kb3dTb29uXTsKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotfQotCi12b2lkIEtXUUtI
VE1MUGFydDo6dW5mb2N1c1dpbmRvdygpCi17Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0g
ICAgW19icmlkZ2UgdW5mb2N1c1dpbmRvd107Ci0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsK
LX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnJldmVhbFNlbGVjdGlvbigpCi17Ci0gICAgUVJlY3Qg
cmVjdDsKLSAgICAKLSAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAg
Y2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05FOgotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FSRVQ6Ci0gICAg
ICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCkuY2FyZXRSZWN0KCk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJBTkdFOgotICAgICAgICAg
ICAgcmVjdCA9IHNlbGVjdGlvblJlY3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAKLSAgICBBU1NFUlQoZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSk7Ci0gICAg
aWYgKHNlbGVjdGlvblN0YXJ0KCkgJiYgc2VsZWN0aW9uU3RhcnQoKS0+cmVuZGVyZXIoKSkgewot
ICAgICAgICBSZW5kZXJMYXllciAqbGF5ZXIgPSBzZWxlY3Rpb25TdGFydCgpLT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIEFT
U0VSVCghc2VsZWN0aW9uRW5kKCkgfHwgIXNlbGVjdGlvbkVuZCgpLT5yZW5kZXJlcigpIHx8IChz
ZWxlY3Rpb25FbmQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA9PSBsYXllcikpOwot
ICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVFTdHJpbmcgS1dRS0hUTUxQYXJ0OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxp
bmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKLXsKLSAgICBpbnQgZXhjZXB0aW9uID0gMDsK
LQotICAgIC8vIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNlcyAt
IGZyb20gdGhlIHNlbGVjdGlvbiBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jLCBhbmQKLSAgICAv
LyB0aGVuIHdlIHdyYXAgYW5kIHNlYXJjaCBmcm9tIHRoZSBkb2Mgc3RhcnQgdG8gKGFwcHJveGlt
YXRlbHkpIHdoZXJlIHdlIHN0YXJ0ZWQuCi0gICAgCi0gICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0
IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2VzCi0gICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5n
IiBjb21tYW5kcyB3b3JrLgotICAgIFJlZlB0cjxSYW5nZUltcGw+IHNlYXJjaFJhbmdlKHJhbmdl
T2ZDb250ZW50cyh4bWxEb2NJbXBsKCkpKTsKLSAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9u
ID0gZmFsc2U7Ci0gICAgaWYgKHNlbGVjdGlvblN0YXJ0KCkpIHsKLSAgICAgICAgc3RhcnRlZFdp
dGhTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICBpZiAoc3RhcnRCZWZvcmVTZWxlY3Rpb24pIHsK
LSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24oKS5zdGFydCgpLCBz
ZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpOwotICAgICAgICAgICAgLy8gV2UgbWF0Y2ggQXBw
S2l0J3MgcnVsZTogU3RhcnQgMSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBzZWxlY3Rpb24uCi0gICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gb25lQmVmb3JlU3RhcnQgPSBzdGFydC5wcmV2aW91cygp
OwotICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIG9uZUJlZm9yZVN0YXJ0
LmlzTm90TnVsbCgpID8gb25lQmVmb3JlU3RhcnQgOiBzdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5lbmRBZmZpbml0eSgpKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgdHJ5
IHRvIGZpbmQgb25lLCBtYWtlIHRoYXQgb3VyIHJhbmdlIHRvIHdvcmsgaW4KLSAgICBOb2RlSW1w
bCAqZWRpdGFibGVOb2RlSW1wbCA9IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRp
b24pOwotICAgIGlmICghZWRpdGFibGVOb2RlSW1wbC0+aXNDb250ZW50RWRpdGFibGUoKSkgewot
ICAgICAgICBlZGl0YWJsZU5vZGVJbXBsID0gZWRpdGFibGVOb2RlSW1wbC0+bmV4dEVkaXRhYmxl
KCk7Ci0gICAgICAgIGlmICghZWRpdGFibGVOb2RlSW1wbCkgewotICAgICAgICAgICAgcmV0dXJu
IFFTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRCZWZv
cmUoZWRpdGFibGVOb2RlSW1wbCwgZXhjZXB0aW9uKTsKLSAgICAgICAgc3RhcnRlZFdpdGhTZWxl
Y3Rpb24gPSBmYWxzZTsgICAvLyB3b24ndCBuZWVkIHRvIHdyYXAKLSAgICB9Ci0gICAgCi0gICAg
Ly8gdG9wTm9kZSBkZWZpbmVzIHRoZSB3aG9sZSByYW5nZSB3ZSB3YW50IHRvIG9wZXJhdGUgb24g
Ci0gICAgTm9kZUltcGwgKnRvcE5vZGUgPSBlZGl0YWJsZU5vZGVJbXBsLT5yb290RWRpdGFibGVF
bGVtZW50KCk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldEVuZEFmdGVyKHRvcE5vZGUsIGV4Y2VwdGlv
bik7Ci0KLSAgICAvLyBNYWtlIHN1cmUgc3RhcnQgb2Ygc2VhcmNoUmFuZ2UgaXMgbm90IGluIHRo
ZSBtaWRkbGUgb2YgYSB3b3JkLiAgSnVtcGluZyBiYWNrIGEgY2hhciBhbmQgdGhlbgotICAgIC8v
IGZvcndhcmQgYnkgYSB3b3JkIGhhcHBlbnMgdG8gZG8gdGhlIHRyaWNrLgotICAgIGlmIChzdGFy
dGVkV2l0aFNlbGVjdGlvbikgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gb25lQmVmb3JlU3Rh
cnQgPSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFyY2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSku
cHJldmlvdXMoKTsKLSAgICAgICAgaWYgKG9uZUJlZm9yZVN0YXJ0LmlzTm90TnVsbCgpKSB7Ci0g
ICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgZW5kT2ZXb3JkKG9uZUJlZm9y
ZVN0YXJ0KSk7Ci0gICAgICAgIH0gLy8gZWxzZSB3ZSB3ZXJlIGFscmVhZHkgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBlZGl0YWJsZSBub2RlCi0gICAgfQotICAgIAotICAgIGlmIChzZWFyY2hSYW5nZS0+
Y29sbGFwc2VkKGV4Y2VwdGlvbikpIHsKLSAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsgICAgICAg
Ly8gbm90aGluZyB0byBzZWFyY2ggaW4KLSAgICB9Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBzcGVs
bCBjaGVja2VyIGlmIGl0IGlzIGF2YWlsYWJsZQotICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2Vy
ID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgaWYgKGNoZWNrZXIg
PT0gbmlsKQotICAgICAgICByZXR1cm4gUVN0cmluZygpOwotICAgICAgICAKLSAgICBXb3JkQXdh
cmVJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7Ci0gICAgYm9vbCB3cmFwcGVkID0gZmFs
c2U7Ci0gICAgCi0gICAgLy8gV2UgZ28gdG8gdGhlIGVuZCBvZiBvdXIgZmlyc3QgcmFuZ2UgaW5z
dGVhZCBvZiB0aGUgc3RhcnQgb2YgaXQsIGp1c3QgdG8gYmUgc3VyZQotICAgIC8vIHdlIGRvbid0
IGdldCBmb2lsZWQgYnkgYW55IHdvcmQgYm91bmRhcnkgcHJvYmxlbXMgYXQgdGhlIHN0YXJ0LiAg
SXQgbWVhbnMgd2UgbWlnaHQKLSAgICAvLyBkbyBhIHRpbnkgYml0IG1vcmUgc2VhcmNoaW5nLgot
ICAgIE5vZGVJbXBsICpzZWFyY2hFbmRBZnRlcldyYXBOb2RlID0gaXQucmFuZ2UoKS0+ZW5kQ29u
dGFpbmVyKGV4Y2VwdGlvbik7Ci0gICAgaW50IHNlYXJjaEVuZEFmdGVyV3JhcE9mZnNldCA9IGl0
LnJhbmdlKCktPmVuZE9mZnNldChleGNlcHRpb24pOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgaWYgKCFpdC5hdEVuZCgpKSB7ICAgICAgLy8gd2UgbWF5IGJlIHN0YXJ0aW5nIGF0IHRoZSBl
bmQgb2YgdGhlIGRvYywgYW5kIGFscmVhZHkgYnkgYXRFbmQKLSAgICAgICAgICAgIGNvbnN0IFFD
aGFyICpjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBpdC5s
ZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAxIHx8ICFjaGFyc1swXS5pc1NwYWNlKCkp
IHsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqY2h1bmsgPSBbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aENoYXJhY3RlcnNOb0NvcHk6KHVuaWNoYXIgKiljaGFycyBsZW5ndGg6bGVuIGZyZWVX
aGVuRG9uZTpOT107Ci0gICAgICAgICAgICAgICAgTlNSYW5nZSBtaXNzcGVsbGluZyA9IFtjaGVj
a2VyIGNoZWNrU3BlbGxpbmdPZlN0cmluZzpjaHVuayBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmls
IHdyYXA6Tk8gaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbX2JyaWRnZSBzcGVsbENoZWNrZXJEb2N1
bWVudFRhZ10gd29yZENvdW50Ok5VTExdOwotICAgICAgICAgICAgICAgIFtjaHVuayByZWxlYXNl
XTsKLSAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBCdWlsZCB1cCByZXN1bHQgcmFuZ2UgYW5kIHN0cmluZy4gIE5vdGUg
dGhlIG1pc3NwZWxsaW5nIG1heSBzcGFuIG1hbnkgdGV4dCBub2RlcywKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYnV0IHRoZSBDaGFySXRlcmF0b3IgaW5zdWxhdGVzIHVzIGZyb20gdGhpcyBjb21w
bGV4aXR5Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZUltcGw+IG1pc3NwZWxsaW5n
UmFuZ2UocmFuZ2VPZkNvbnRlbnRzKHhtbERvY0ltcGwoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhpdC5yYW5nZSgpLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZy5sb2NhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnNldFN0YXJ0KGNoYXJzLnJhbmdlKCktPnN0YXJ0
Q29udGFpbmVyKGV4Y2VwdGlvbiksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlv
biksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcmVzdWx0ID0gY2hh
cnMuc3RyaW5nKG1pc3NwZWxsaW5nLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRp
b24pLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChleGNlcHRpb24pLCBleGNlcHRpb24pOwot
Ci0gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKG1p
c3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxF
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbigpOwotICAgICAgICAgICAg
ICAgICAgICAvLyBNYXJrIG1pc3NwZWxsaW5nIGluIGRvY3VtZW50LgotICAgICAgICAgICAgICAg
ICAgICB4bWxEb2NJbXBsKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAg
ICBpdC5hZHZhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGl0LmF0RW5kKCkpIHsKLSAg
ICAgICAgICAgIGlmICh3cmFwcGVkIHx8ICFzdGFydGVkV2l0aFNlbGVjdGlvbikgewotICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgIC8vIGZpbmlzaGVkIHRoZSBzZWNvbmQgcmFuZ2UsIG9yIHdl
IGRpZCB0aGUgd2hvbGUgZG9jIHdpdGggdGhlIGZpcnN0IHJhbmdlCi0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGdvbmUgZnJvbSB0aGUgc2VsZWN0aW9uIHRv
IHRoZSBlbmQgb2YgZG9jLCBub3cgd3JhcCBhcm91bmQKLSAgICAgICAgICAgICAgICB3cmFwcGVk
ID0gWUVTOwotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEJlZm9yZSh0b3BO
b2RlLCBleGNlcHRpb24pOwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBlbmQg
b2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKLSAgICAgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZEFmdGVyV3JhcE5vZGUsIHNlYXJj
aEVuZEFmdGVyV3JhcE9mZnNldCwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpdCA9IFdv
cmRBd2FyZUl0ZXJhdG9yKHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi1ib29sIEtX
UUtIVE1MUGFydDo6c2Nyb2xsT3ZlcmZsb3coS1dRU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
S1dRU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgaWYgKCF4bWxEb2NJbXBs
KCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW1wbCAq
bm9kZSA9IHhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCk7Ci0gICAgaWYgKG5vZGUgPT0gMCkgewot
ICAgICAgICBub2RlID0gZC0+bV9tb3VzZVByZXNzTm9kZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKG5vZGUgIT0gMCkgewotICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBub2RlLT5yZW5k
ZXJlcigpOwotICAgICAgICBpZiAociAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OndoZWVsRXZlbnQoTlNFdmVu
dCAqZXZlbnQpCi17Ci0gICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3OwotCi0gICAgaWYgKHYp
IHsKLSAgICAgICAgTlNFdmVudCAqb2xkQ3VycmVudEV2ZW50ID0gX2N1cnJlbnRFdmVudDsKLSAg
ICAgICAgX2N1cnJlbnRFdmVudCA9IEtXUVJldGFpbihldmVudCk7Ci0KLSAgICAgICAgUVdoZWVs
RXZlbnQgcUV2ZW50KGV2ZW50KTsKLSAgICAgICAgdi0+dmlld3BvcnRXaGVlbEV2ZW50KCZxRXZl
bnQpOwotCi0gICAgICAgIEFTU0VSVChfY3VycmVudEV2ZW50ID09IGV2ZW50KTsKLSAgICAgICAg
S1dRUmVsZWFzZShldmVudCk7Ci0gICAgICAgIF9jdXJyZW50RXZlbnQgPSBvbGRDdXJyZW50RXZl
bnQ7Ci0KLSAgICAgICAgaWYgKHFFdmVudC5pc0FjY2VwdGVkKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUg
c2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAvLyBvZiB0aGUgZWxl
bWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLQotICAgIEtXUVNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb247Ci0gICAgZmxvYXQgbXVsdGlwbGllcjsKLSAgICBmbG9hdCBkZWx0YVgg
PSBbZXZlbnQgZGVsdGFYXTsKLSAgICBmbG9hdCBkZWx0YVkgPSBbZXZlbnQgZGVsdGFZXTsKLSAg
ICBpZiAoZGVsdGFYIDwgMCkgewotICAgICAgICBkaXJlY3Rpb24gPSBLV1FTY3JvbGxSaWdodDsK
LSAgICAgICAgbXVsdGlwbGllciA9IC1kZWx0YVg7Ci0gICAgfSBlbHNlIGlmIChkZWx0YVggPiAw
KSB7Ci0gICAgICAgIGRpcmVjdGlvbiA9IEtXUVNjcm9sbExlZnQ7Ci0gICAgICAgIG11bHRpcGxp
ZXIgPSBkZWx0YVg7Ci0gICAgfSBlbHNlIGlmIChkZWx0YVkgPCAwKSB7Ci0gICAgICAgIGRpcmVj
dGlvbiA9IEtXUVNjcm9sbERvd247Ci0gICAgICAgIG11bHRpcGxpZXIgPSAtZGVsdGFZOwotICAg
IH0gIGVsc2UgaWYgKGRlbHRhWSA+IDApIHsKLSAgICAgICAgZGlyZWN0aW9uID0gS1dRU2Nyb2xs
VXA7Ci0gICAgICAgIG11bHRpcGxpZXIgPSBkZWx0YVk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCk7
Ci0gICAgaWYgKHIgPT0gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIE5TUG9pbnQgcG9pbnQgPSBbZC0+bV92aWV3LT5nZXREb2N1bWVudFZpZXcoKSBjb252ZXJ0
UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgUmVuZGVy
T2JqZWN0OjpOb2RlSW5mbyBub2RlSW5mbyh0cnVlLCB0cnVlKTsKLSAgICByLT5sYXllcigpLT5o
aXRUZXN0KG5vZGVJbmZvLCAoaW50KXBvaW50LngsIChpbnQpcG9pbnQueSk7ICAgIAotICAgIAot
ICAgIE5vZGVJbXBsICpub2RlID0gbm9kZUluZm8uaW5uZXJOb2RlKCk7Ci0gICAgaWYgKG5vZGUg
PT0gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgIGlmIChyID09IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gci0+c2Nyb2xsKGRpcmVjdGlvbiwgS1dRU2Nyb2xsV2hl
ZWwsIG11bHRpcGxpZXIpOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6cmVkaXJlY3Rpb25UaW1l
clN0YXJ0ZWRPclN0b3BwZWQoKQotewotICAgIC8vIERvbid0IHJlcG9ydCBoaXN0b3J5IG5hdmln
YXRpb25zLCBqdXN0IGFjdHVhbCByZWRpcmVjdGlvbi4KLSAgICBpZiAoZC0+bV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbiA9PSBoaXN0b3J5TmF2aWdhdGlvblNjaGVkdWxlZCkgewotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIGlmIChkLT5t
X3JlZGlyZWN0aW9uVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBOU0RhdGUgKmZpcmVEYXRl
ID0gW1tOU0RhdGUgYWxsb2NdIGluaXRXaXRoVGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRl
OmQtPm1fcmVkaXJlY3Rpb25UaW1lci5maXJlRGF0ZSgpXTsKLSAgICAgICAgW19icmlkZ2UgcmVw
b3J0Q2xpZW50UmVkaXJlY3RUb1VSTDpLVVJMKGQtPm1fcmVkaXJlY3RVUkwpLmdldE5TVVJMKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTpkLT5tX2RlbGF5UmVk
aXJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlRGF0ZTpmaXJlRGF0
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tIaXN0b3J5OmQtPm1fcmVkaXJl
Y3RMb2NrSGlzdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSmF2YVNjcmlw
dEZvcm1BY3Rpb246ZC0+bV9leGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbl07Ci0gICAgICAg
IFtmaXJlRGF0ZSByZWxlYXNlXTsKLSAgICB9IGVsc2UgewotICAgICAgICBbX2JyaWRnZSByZXBv
cnRDbGllbnRSZWRpcmVjdENhbmNlbGxlZDpkLT5tX2NhbmNlbFdpdGhMb2FkSW5Qcm9ncmVzc107
Ci0gICAgfQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQ
YXJ0OjpwYWludChRUGFpbnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpCi17Ci0jaWZuZGVmIE5E
RUJVRwotICAgIGJvb2wgZmlsbFdpdGhSZWQ7Ci0gICAgaWYgKHAtPmRldmljZSgpLT5kZXZUeXBl
KCkgPT0gUUludGVybmFsOjpQcmludGVyKQotICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAv
LyBQcmludGluZywgZG9uJ3QgZmlsbCB3aXRoIHJlZCAoY2FuJ3QgcmVtZW1iZXIgd2h5KS4KLSAg
ICBlbHNlIGlmICgheG1sRG9jSW1wbCgpIHx8IHhtbERvY0ltcGwoKS0+b3duZXJFbGVtZW50KCkp
Ci0gICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFN1YmZyYW1lLCBkb24ndCBmaWxsIHdp
dGggcmVkLgotICAgIGVsc2UgaWYgKHZpZXcoKSAmJiB2aWV3KCktPmlzVHJhbnNwYXJlbnQoKSkK
LSAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gVHJhbnNwYXJlbnQsIGRvbid0IGZpbGwg
d2l0aCByZWQuCi0gICAgZWxzZSBpZiAoX2RyYXdTZWxlY3Rpb25Pbmx5KQotICAgICAgICBmaWxs
V2l0aFJlZCA9IGZhbHNlOyAvLyBTZWxlY3Rpb25zIGFyZSB0cmFuc3BhcmVudCwgZG9uJ3QgZmls
bCB3aXRoIHJlZC4KLSAgICBlbHNlIGlmIChfZWxlbWVudFRvRHJhdykKLSAgICAgICAgZmlsbFdp
dGhSZWQgPSBmYWxzZTsgLy8gRWxlbWVudCBpbWFnZXMgYXJlIHRyYW5zcGFyZW50LCBkb24ndCBm
aWxsIHdpdGggcmVkLgotICAgIGVsc2UKLSAgICAgICAgZmlsbFdpdGhSZWQgPSB0cnVlOwotCi0g
ICAgaWYgKGZpbGxXaXRoUmVkKSB7Ci0gICAgICAgIHAtPmZpbGxSZWN0KHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBRQ29sb3IoMHhGRiwgMCwgMCkpOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gX2VsZW1l
bnRUb0RyYXcgaXMgdXNlZCB0byBkcmF3IG9ubHkgb25lIGVsZW1lbnQKLSAgICAgICAgUmVuZGVy
T2JqZWN0ICplbHRSZW5kZXJlciA9IF9lbGVtZW50VG9EcmF3ID8gX2VsZW1lbnRUb0RyYXctPnJl
bmRlcmVyKCkgOiAwOwotICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5wYWludChwLCByZWN0
LCBfZHJhd1NlbGVjdGlvbk9ubHksIGVsdFJlbmRlcmVyKTsKLQotI2lmIEFQUExFX0NIQU5HRVMK
LSAgICAgICAgLy8gUmVnaW9ucyBtYXkgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB2
aXNpYmlsaXR5L3otaW5kZXggb2YgZWxlbWVudCBjaGFuZ2luZy4KLSAgICAgICAgaWYgKHJlbmRl
cmVyKCktPmRvY3VtZW50KCktPmRhc2hib2FyZFJlZ2lvbnNEaXJ0eSgpKXsKLSAgICAgICAgICAg
IHJlbmRlcmVyKCktPmNhbnZhcygpLT52aWV3KCktPnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgRVJST1IoImNhbGxlZCBL
V1FLSFRNTFBhcnQ6OnBhaW50IHdpdGggbmlsIHJlbmRlcmVyIik7Ci0gICAgfQotfQotCi12b2lk
IEtXUUtIVE1MUGFydDo6YWRqdXN0UGFnZUhlaWdodChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBv
bGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9tTGltaXQpCi17Ci0gICAgUmVuZGVy
Q2FudmFzICpyb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQ2FudmFzICo+KHhtbERvY0ltcGwoKS0+
cmVuZGVyZXIoKSk7Ci0gICAgaWYgKHJvb3QpIHsKLSAgICAgICAgLy8gVXNlIGEgcHJpbnRlciBk
ZXZpY2UsIHdpdGggcGFpbnRpbmcgZGlzYWJsZWQgZm9yIHRoZSBwYWdpbmF0aW9uIHBoYXNlCi0g
ICAgICAgIFFQYWludGVyIHBhaW50ZXIodHJ1ZSk7Ci0gICAgICAgIHBhaW50ZXIuc2V0UGFpbnRp
bmdEaXNhYmxlZCh0cnVlKTsKLQotICAgICAgICByb290LT5zZXRUcnVuY2F0ZWRBdCgoaW50KWZs
b29yKG9sZEJvdHRvbSkpOwotICAgICAgICBRUmVjdCBkaXJ0eVJlY3QoMCwgKGludClmbG9vcihv
bGRUb3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC0+ZG9jV2lkdGgoKSwgKGludClj
ZWlsKG9sZEJvdHRvbS1vbGRUb3ApKTsKLSAgICAgICAgcm9vdC0+bGF5ZXIoKS0+cGFpbnQoJnBh
aW50ZXIsIGRpcnR5UmVjdCk7Ci0gICAgICAgICpuZXdCb3R0b20gPSByb290LT5iZXN0VHJ1bmNh
dGVkQXQoKTsKLSAgICAgICAgaWYgKCpuZXdCb3R0b20gPT0gMCkgewotICAgICAgICAgICAgKm5l
d0JvdHRvbSA9IG9sZEJvdHRvbTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgICpu
ZXdCb3R0b20gPSBvbGRCb3R0b207Ci0gICAgfQotfQotCi1SZW5kZXJPYmplY3QgKktXUUtIVE1M
UGFydDo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9j
SW1wbCgpOwotICAgIHJldHVybiBkb2MgPyBkb2MtPnJlbmRlcmVyKCkgOiAwOwotfQotCi1RU3Ry
aW5nIEtXUUtIVE1MUGFydDo6dXNlckFnZW50KCkgY29uc3QKLXsKLSAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKFtfYnJpZGdlIHVzZXJB
Z2VudEZvclVSTDptX3VybC5nZXROU1VSTCgpXSk7Ci0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9O
UzsKLSAgICAgICAgIAotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLVFTdHJpbmcgS1dRS0hU
TUxQYXJ0OjptaW1lVHlwZUZvckZpbGVOYW1lKGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lKSBjb25z
dAotewotICAgIE5TU3RyaW5nICpucyA9IGZpbGVOYW1lLmdldE5TU3RyaW5nKCk7Ci0KLSAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKFtf
YnJpZGdlIE1JTUVUeXBlRm9yUGF0aDpuc10pOwotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7
Ci0KLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi1OU1ZpZXcgKktXUUtIVE1MUGFydDo6bmV4
dEtleVZpZXdJbkZyYW1lKE5vZGVJbXBsICpub2RlLCBLV1FTZWxlY3Rpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQotewotICAgIERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9jSW1wbCgpOwotICAgIGlm
ICghZG9jKSB7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIGZvciAoOzspIHsKLSAg
ICAgICAgbm9kZSA9IGRpcmVjdGlvbiA9PSBLV1FTZWxlY3RpbmdOZXh0Ci0gICAgICAgICAgICA/
IGRvYy0+bmV4dEZvY3VzTm9kZShub2RlKSA6IGRvYy0+cHJldmlvdXNGb2N1c05vZGUobm9kZSk7
Ci0gICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAg
fQotICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc1dpZGdldCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJXaWRn
ZXQgKnJlbmRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyZW5kZXJlcik7
Ci0gICAgICAgICAgICBRV2lkZ2V0ICp3aWRnZXQgPSByZW5kZXJXaWRnZXQtPndpZGdldCgpOwot
ICAgICAgICAgICAgS0hUTUxWaWV3ICpjaGlsZEZyYW1lV2lkZ2V0ID0gd2lkZ2V0LT5pc0tIVE1M
VmlldygpID8gc3RhdGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHdpZGdldCkgOiAwOwotICAgICAgICAg
ICAgTlNWaWV3ICp2aWV3ID0gbmlsOwotICAgICAgICAgICAgaWYgKGNoaWxkRnJhbWVXaWRnZXQp
IHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gS1dRKGNoaWxkRnJhbWVXaWRnZXQtPnBhcnQoKSkt
Pm5leHRLZXlWaWV3SW5GcmFtZSgwLCBkaXJlY3Rpb24pOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh3aWRnZXQpIHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgICAgIHJl
dHVybiB2aWV3OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSktPmZvY3VzKCk7IAotICAgICAgICB9IAot
ICAgICAgICBbX2JyaWRnZSBtYWtlRmlyc3RSZXNwb25kZXI6W19icmlkZ2UgZG9jdW1lbnRWaWV3
XV07Ci0gICAgICAgIHJldHVybiBbX2JyaWRnZSBkb2N1bWVudFZpZXddOwotICAgIH0KLX0KLQot
TlNWaWV3ICpLV1FLSFRNTFBhcnQ6Om5leHRLZXlWaWV3SW5GcmFtZUhpZXJhcmNoeShOb2RlSW1w
bCAqbm9kZSwgS1dRU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBOU1ZpZXcg
Km5leHQgPSBuZXh0S2V5Vmlld0luRnJhbWUobm9kZSwgZGlyZWN0aW9uKTsKLSAgICBpZiAoIW5l
eHQpIHsKLSAgICAgICAgS1dRS0hUTUxQYXJ0ICpwYXJlbnQgPSBLV1EocGFyZW50UGFydCgpKTsK
LSAgICAgICAgaWYgKHBhcmVudCkgewotICAgICAgICAgICAgbmV4dCA9IHBhcmVudC0+bmV4dEtl
eVZpZXdJbkZyYW1lSGllcmFyY2h5KHBhcmVudC0+Y2hpbGRGcmFtZSh0aGlzKS0+bV9mcmFtZS0+
ZWxlbWVudCgpLCBkaXJlY3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIHJl
bW92ZSBmb2N1cyBmcm9tIGN1cnJlbnRseSBmb2N1c2VkIG5vZGUgaWYgd2UncmUgZ2l2aW5nIGZv
Y3VzIHRvIGFub3RoZXIgdmlldwotICAgIGlmIChuZXh0ICYmIChuZXh0ICE9IFtfYnJpZGdlIGRv
Y3VtZW50Vmlld10pKSB7Ci0gICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9jSW1wbCgp
OwotICAgICAgICBpZiAoZG9jKSB7Ci0gICAgICAgICAgICBkb2MtPnNldEZvY3VzTm9kZSgwKTsK
LSAgICAgICAgfSAgICAgICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIG5leHQ7
Ci19Ci0KLU5TVmlldyAqS1dRS0hUTUxQYXJ0OjpuZXh0S2V5VmlldyhOb2RlSW1wbCAqbm9kZSwg
S1dRU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBOU1ZpZXcgKiBuZXh0Owot
ICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotCi0gICAgbmV4dCA9IG5leHRLZXlWaWV3SW5GcmFt
ZUhpZXJhcmNoeShub2RlLCBkaXJlY3Rpb24pOwotICAgIGlmIChuZXh0KSB7Ci0gICAgICAgIHJl
dHVybiBuZXh0OwotICAgIH0KLQotICAgIC8vIExvb2sgYXQgdmlld3MgZnJvbSB0aGUgdG9wIGxl
dmVsIHBhcnQgdXAsIGxvb2tpbmcgZm9yIGEgbmV4dCBrZXkgdmlldyB0aGF0IHdlIGNhbiB1c2Uu
Ci0KLSAgICBuZXh0ID0gZGlyZWN0aW9uID09IEtXUVNlbGVjdGluZ05leHQKLSAgICAgICAgPyBb
X2JyaWRnZSBuZXh0S2V5Vmlld091dHNpZGVXZWJGcmFtZVZpZXdzXQotICAgICAgICA6IFtfYnJp
ZGdlIHByZXZpb3VzS2V5Vmlld091dHNpZGVXZWJGcmFtZVZpZXdzXTsKLQotICAgIGlmIChuZXh0
KSB7Ci0gICAgICAgIHJldHVybiBuZXh0OwotICAgIH0KLQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQ
VElPTlM7Ci0gICAgCi0gICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIG1ha2UgYSBsb29wIGJ5IHN0
YXJ0aW5nIGZyb20gMC4KLSAgICByZXR1cm4gbmV4dEtleVZpZXdJbkZyYW1lSGllcmFyY2h5KDAs
IGRpcmVjdGlvbik7Ci19Ci0KLU5TVmlldyAqS1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0Zvcldp
ZGdldChRV2lkZ2V0ICpzdGFydGluZ1dpZGdldCwgS1dRU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbikKLXsKLSAgICAvLyBVc2UgdGhlIGV2ZW50IGZpbHRlciBvYmplY3QgdG8gZmlndXJlIG91
dCB3aGljaCBSZW5kZXJXaWRnZXQgb3ducyB0aGlzIFFXaWRnZXQgYW5kIGdldCB0byB0aGUgRE9N
LgotICAgIC8vIFRoZW4gZ2V0IHRoZSBuZXh0IGtleSB2aWV3IGluIHRoZSBvcmRlciBkZXRlcm1p
bmVkIGJ5IHRoZSBET00uCi0gICAgTm9kZUltcGwgKm5vZGUgPSBub2RlRm9yV2lkZ2V0KHN0YXJ0
aW5nV2lkZ2V0KTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgcmV0dXJuIHBhcnRGb3JOb2RlKG5v
ZGUpLT5uZXh0S2V5Vmlldyhub2RlLCBkaXJlY3Rpb24pOwotfQotCi1ib29sIEtXUUtIVE1MUGFy
dDo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldChRV2lkZ2V0ICpjYW5kaWRhdGUpCi17
Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgc3dpdGNoIChbW05TQXBwIGN1cnJlbnRF
dmVudF0gdHlwZV0pIHsKLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246Ci0gICAgICAgIGNh
c2UgTlNSaWdodE1vdXNlRG93bjoKLSAgICAgICAgY2FzZSBOU090aGVyTW91c2VEb3duOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgfQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgTm9kZUltcGwg
Km5vZGUgPSBub2RlRm9yV2lkZ2V0KGNhbmRpZGF0ZSk7Ci0gICAgQVNTRVJUKG5vZGUpOwotICAg
IHJldHVybiBwYXJ0Rm9yTm9kZShub2RlKS0+ZC0+bV92aWV3LT5ub2RlVW5kZXJNb3VzZSgpID09
IG5vZGU7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc0tleWJvYXJkT3B0
aW9uVGFiKCkKLXsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICBOU0V2ZW50ICpldnQg
PSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICBpZiAoW2V2dCB0eXBlXSAhPSBOU0tleURvd24p
IHsKLSAgICAgICAgcmV0dXJuIE5POwotICAgIH0KLQotICAgIGlmICgoW2V2dCBtb2RpZmllckZs
YWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaykgPT0gMCkgewotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgfQotICAgIAotICAgIE5TU3RyaW5nICpjaGFycyA9IFtldnQgY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzXTsKLSAgICBpZiAoW2NoYXJzIGxlbmd0aF0gIT0gMSkKLSAgICAgICAgcmV0dXJu
IE5POwotICAgIAotICAgIGNvbnN0IHVuaWNoYXIgdGFiS2V5ID0gMHgwMDA5OwotICAgIGNvbnN0
IHVuaWNoYXIgc2hpZnRUYWJLZXkgPSAweDAwMTk7Ci0gICAgdW5pY2hhciBjID0gW2NoYXJzIGNo
YXJhY3RlckF0SW5kZXg6MF07Ci0gICAgaWYgKGMgIT0gdGFiS2V5ICYmIGMgIT0gc2hpZnRUYWJL
ZXkpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05T
OwotICAgIHJldHVybiBZRVM7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpoYW5kbGVLZXlib2Fy
ZE9wdGlvblRhYkluVmlldyhOU1ZpZXcgKnZpZXcpCi17Ci0gICAgaWYgKEtXUUtIVE1MUGFydDo6
Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdGlvblRhYigpKSB7Ci0gICAgICAgIGlmICgoW1tOU0Fw
cCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2spICE9IDApIHsK
LSAgICAgICAgICAgIFtbdmlldyB3aW5kb3ddIHNlbGVjdEtleVZpZXdQcmVjZWRpbmdWaWV3OnZp
ZXddOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgW1t2aWV3IHdpbmRvd10gc2VsZWN0
S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6dmlld107Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFlF
UzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5POwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6
dGFic1RvTGlua3MoKSBjb25zdAotewotICAgIGlmIChbX2JyaWRnZSBrZXlib2FyZFVJTW9kZV0g
JiBXZWJDb3JlS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcykKLSAgICAgICAgcmV0dXJuICFLV1FL
SFRNTFBhcnQ6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiBLV1FLSFRNTFBhcnQ6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25U
YWIoKTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OnRhYnNUb0FsbENvbnRyb2xzKCkgY29uc3QK
LXsKLSAgICBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUgPSBbX2JyaWRnZSBr
ZXlib2FyZFVJTW9kZV07Ci0gICAgQk9PTCBoYW5kbGluZ09wdGlvblRhYiA9IEtXUUtIVE1MUGFy
dDo6Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdGlvblRhYigpOwotCi0gICAgLy8gSWYgdGFiLXRv
LWxpbmtzIGlzIG9mZiwgb3B0aW9uLXRhYiBhbHdheXMgaGlnaGxpZ2h0cyBhbGwgY29udHJvbHMK
LSAgICBpZiAoKGtleWJvYXJkVUlNb2RlICYgV2ViQ29yZUtleWJvYXJkQWNjZXNzVGFic1RvTGlu
a3MpID09IDAgJiYgaGFuZGxpbmdPcHRpb25UYWIpIHsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gSWYgc3lzdGVtIHByZWZlcmVuY2VzIHNheSB0byBpbmNsdWRlIGFs
bCBjb250cm9scywgd2UgYWx3YXlzIGluY2x1ZGUgYWxsIGNvbnRyb2xzCi0gICAgaWYgKGtleWJv
YXJkVUlNb2RlICYgV2ViQ29yZUtleWJvYXJkQWNjZXNzRnVsbCkgewotICAgICAgICByZXR1cm4g
WUVTOwotICAgIH0KLSAgICAKLSAgICAvLyBPdGhlcndpc2UgdGFiLXRvLWxpbmtzIGluY2x1ZGVz
IGFsbCBjb250cm9scywgdW5sZXNzIHRoZSBzZW5zZSBpcyBmbGlwcGVkIHZpYSBvcHRpb24tdGFi
LgotICAgIGlmIChrZXlib2FyZFVJTW9kZSAmIFdlYkNvcmVLZXlib2FyZEFjY2Vzc1RhYnNUb0xp
bmtzKSB7Ci0gICAgICAgIHJldHVybiAhaGFuZGxpbmdPcHRpb25UYWI7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBoYW5kbGluZ09wdGlvblRhYjsKLX0KLQotS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCAqS1dRS0hUTUxQYXJ0OjpleGVjdXRpb25Db250ZXh0Rm9yRE9NKCkKLXsKLSAgICByZXR1
cm4gYmluZGluZ1Jvb3RPYmplY3QoKTsKLX0KLQotS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAq
S1dRS0hUTUxQYXJ0OjpiaW5kaW5nUm9vdE9iamVjdCgpCi17Ci0gICAgaWYgKCFfYmluZGluZ1Jv
b3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2s7Ci0gICAgICAgIF9iaW5kaW5nUm9vdCA9IG5ldyBL
SlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KDApOyAgICAvLyBUaGUgcm9vdCBnZXRzIGRlbGV0ZWQg
YnkgSmF2YVNjcmlwdENvcmUuCi0gICAgICAgIEtKUzo6SlNPYmplY3QgKndpbiA9IEtKUzo6V2lu
ZG93OjpyZXRyaWV2ZVdpbmRvdyh0aGlzKTsKLSAgICAgICAgX2JpbmRpbmdSb290LT5zZXRSb290
T2JqZWN0SW1wICh3aW4pOwotICAgICAgICBfYmluZGluZ1Jvb3QtPnNldEludGVycHJldGVyKGpT
Y3JpcHQoKS0+aW50ZXJwcmV0ZXIoKSk7Ci0gICAgICAgIGFkZFBsdWdpblJvb3RPYmplY3QgKF9i
aW5kaW5nUm9vdCk7Ci0gICAgfQotICAgIHJldHVybiBfYmluZGluZ1Jvb3Q7Ci19Ci0KLVdlYlNj
cmlwdE9iamVjdCAqS1dRS0hUTUxQYXJ0Ojp3aW5kb3dTY3JpcHRPYmplY3QoKQotewotICAgIGlm
ICghX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBLSlM6OkpTTG9jayBsb2NrOwotICAg
ICAgICBLSlM6OkpTT2JqZWN0ICp3aW4gPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3codGhp
cyk7Ci0gICAgICAgIF93aW5kb3dTY3JpcHRPYmplY3QgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW1tX
ZWJTY3JpcHRPYmplY3QgYWxsb2NdIF9pbml0V2l0aEpTT2JqZWN0OndpbiBvcmlnaW5FeGVjdXRp
b25Db250ZXh0OmJpbmRpbmdSb290T2JqZWN0KCkgZXhlY3V0aW9uQ29udGV4dDpiaW5kaW5nUm9v
dE9iamVjdCgpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIF93aW5kb3dTY3JpcHRPYmplY3Q7Ci19
Ci0KLU5QT2JqZWN0ICpLV1FLSFRNTFBhcnQ6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKLXsKLSAg
ICBpZiAoIV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBLSlM6OkpTT2JqZWN0ICp3
aW4gPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3codGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBUaGUgd2luZG93IHNjcmlwdCBvYmplY3QgY2FuIGJlIDAgaWYgSmF2YVNjcmlwdCBpcyBk
aXNhYmxlZC4gIEhvd2V2ZXIsIGNhbGxlcnMgKGxpa2UgcGx1Z2lucykgZXhwZWN0IHVzIHRvCi0g
ICAgICAgIC8vIGFsd2F5cyByZXR1cm4gYSB3aW5kb3cgc2NyaXB0IG9iamVjdCBoZXJlLiAgQnkg
c3Vic3RpdHV0aW5nIGEgcGxhaW4gSlNPYmplY3QgZm9yIHRoZSB3aW5kb3cncyBKU09iamVjdCwK
LSAgICAgICAgLy8gd2UgY2FuIHNhdGlzZnkgY2FsbGVycycgYXNzdW1wdGlvbnMgYW5kIGxldCB0
aGVtIHRyeSB0byBtYW5pcHVsYXRlIHRoZSBkdW1teSBvYmplY3Qgd2hlbiBKYXZhU2NyaXB0IGlz
Ci0gICAgICAgIC8vIGRpc2FibGVkLgotICAgICAgICBpZiAoIXdpbikgewotICAgICAgICAgICAg
SlNMb2NrIGxvY2s7Ci0gICAgICAgICAgICB3aW4gPSBuZXcgS0pTOjpKU09iamVjdCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBfd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0Ny
ZWF0ZVNjcmlwdE9iamVjdCAoMCwgd2luLCBiaW5kaW5nUm9vdE9iamVjdCgpLCBiaW5kaW5nUm9v
dE9iamVjdCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gX3dpbmRvd1NjcmlwdE5QT2JqZWN0Owot
fQotCi12b2lkIEtXUUtIVE1MUGFydDo6cGFydENsZWFyZWRJbkJlZ2luKCkKLXsKLSAgICBbX2Jy
aWRnZSB3aW5kb3dPYmplY3RDbGVhcmVkXTsKLX0KLQotUGF1c2VkVGltZW91dHMgKktXUUtIVE1M
UGFydDo6cGF1c2VUaW1lb3V0cygpCi17Ci0gICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fanNjcmlw
dCkgewotICAgICAgICBXaW5kb3cgKncgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpOwot
ICAgICAgICBpZiAodykKLSAgICAgICAgICAgIHJldHVybiB3LT5wYXVzZVRpbWVvdXRzKCk7Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6cmVzdW1lVGltZW91
dHMoUGF1c2VkVGltZW91dHMgKnQpCi17Ci0gICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fanNjcmlw
dCAmJiBkLT5tX2JKU2NyaXB0RW5hYmxlZCkgewotICAgICAgICBXaW5kb3cgKncgPSBXaW5kb3c6
OnJldHJpZXZlV2luZG93KHRoaXMpOwotICAgICAgICBpZiAodykKLSAgICAgICAgICAgIHctPnJl
c3VtZVRpbWVvdXRzKHQpOwotICAgIH0KLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OmNhbkNhY2hl
UGFnZSgpCi17Ci0gICAgLy8gT25seSBzYXZlIHBhZ2Ugc3RhdGUgaWY6Ci0gICAgLy8gMS4gIFdl
J3JlIG5vdCBhIGZyYW1lIG9yIGZyYW1lc2V0LgotICAgIC8vIDIuICBUaGUgcGFnZSBoYXMgbm8g
dW5sb2FkIGhhbmRsZXIuCi0gICAgLy8gMy4gIFRoZSBwYWdlIGhhcyBubyBwYXNzd29yZCBmaWVs
ZHMuCi0gICAgLy8gNC4gIFRoZSBVUkwgZm9yIHRoZSBwYWdlIGlzIG5vdCBodHRwcy4KLSAgICAv
LyA1LiAgVGhlIHBhZ2UgaGFzIG5vIGFwcGxldHMuCi0gICAgaWYgKGQtPm1fZnJhbWVzLmNvdW50
KCkgfHwKLSAgICAgICAgcGFyZW50UGFydCgpIHx8Ci0gICAgICAgIG1fdXJsLnByb3RvY29sKCku
c3RhcnRzV2l0aCgiaHR0cHMiKSB8fCAKLQkoZC0+bV9kb2MgJiYgKGQtPm1fZG9jLT5hcHBsZXRz
KCktPmxlbmd0aCgpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICBkLT5tX2RvYy0+aGFz
V2luZG93RXZlbnRMaXN0ZW5lcih1bmxvYWRFdmVudCkgfHwKLQkJICAgICAgZC0+bV9kb2MtPmhh
c1Bhc3N3b3JkRmllbGQoKSkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpzYXZlV2luZG93UHJvcGVydGll
cyhTYXZlZFByb3BlcnRpZXMgKndpbmRvd1Byb3BlcnRpZXMpCi17Ci0gICAgV2luZG93ICp3aW5k
b3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpOwotICAgIGlmICh3aW5kb3cpCi0gICAg
ICAgIHdpbmRvdy0+c2F2ZVByb3BlcnRpZXMoKndpbmRvd1Byb3BlcnRpZXMpOwotfQotCi12b2lk
IEtXUUtIVE1MUGFydDo6c2F2ZUxvY2F0aW9uUHJvcGVydGllcyhTYXZlZFByb3BlcnRpZXMgKmxv
Y2F0aW9uUHJvcGVydGllcykKLXsKLSAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3codGhpcyk7Ci0gICAgaWYgKHdpbmRvdykgewotICAgICAgICBKU0xvY2sgbG9jazsK
LSAgICAgICAgTG9jYXRpb24gKmxvY2F0aW9uID0gd2luZG93LT5sb2NhdGlvbigpOwotICAgICAg
ICBsb2NhdGlvbi0+c2F2ZVByb3BlcnRpZXMoKmxvY2F0aW9uUHJvcGVydGllcyk7Ci0gICAgfQot
fQotCi12b2lkIEtXUUtIVE1MUGFydDo6cmVzdG9yZVdpbmRvd1Byb3BlcnRpZXMoU2F2ZWRQcm9w
ZXJ0aWVzICp3aW5kb3dQcm9wZXJ0aWVzKQotewotICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93
OjpyZXRyaWV2ZVdpbmRvdyh0aGlzKTsKLSAgICBpZiAod2luZG93KQotICAgICAgICB3aW5kb3ct
PnJlc3RvcmVQcm9wZXJ0aWVzKCp3aW5kb3dQcm9wZXJ0aWVzKTsKLX0KLQotdm9pZCBLV1FLSFRN
TFBhcnQ6OnJlc3RvcmVMb2NhdGlvblByb3BlcnRpZXMoU2F2ZWRQcm9wZXJ0aWVzICpsb2NhdGlv
blByb3BlcnRpZXMpCi17Ci0gICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2lu
ZG93KHRoaXMpOwotICAgIGlmICh3aW5kb3cpIHsKLSAgICAgICAgSlNMb2NrIGxvY2s7Ci0gICAg
ICAgIExvY2F0aW9uICpsb2NhdGlvbiA9IHdpbmRvdy0+bG9jYXRpb24oKTsKLSAgICAgICAgbG9j
YXRpb24tPnJlc3RvcmVQcm9wZXJ0aWVzKCpsb2NhdGlvblByb3BlcnRpZXMpOwotICAgIH0KLX0K
LQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNhdmVJbnRlcnByZXRlckJ1aWx0aW5zKFNhdmVkQnVpbHRp
bnMgJmludGVycHJldGVyQnVpbHRpbnMpCi17Ci0gICAgaWYgKGpTY3JpcHQoKSAmJiBqU2NyaXB0
KCktPmludGVycHJldGVyKCkpIHsKLQlqU2NyaXB0KCktPmludGVycHJldGVyKCktPnNhdmVCdWls
dGlucyhpbnRlcnByZXRlckJ1aWx0aW5zKTsKLSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0
OjpyZXN0b3JlSW50ZXJwcmV0ZXJCdWlsdGlucyhjb25zdCBTYXZlZEJ1aWx0aW5zICZpbnRlcnBy
ZXRlckJ1aWx0aW5zKQotewotICAgIGlmIChqU2NyaXB0KCkgJiYgalNjcmlwdCgpLT5pbnRlcnBy
ZXRlcigpKSB7Ci0JalNjcmlwdCgpLT5pbnRlcnByZXRlcigpLT5yZXN0b3JlQnVpbHRpbnMoaW50
ZXJwcmV0ZXJCdWlsdGlucyk7Ci0gICAgfQotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6b3BlblVS
TEZyb21QYWdlQ2FjaGUoS1dRUGFnZVN0YXRlICpzdGF0ZSkKLXsKLSAgICAvLyBJdCdzIHNhZmUg
dG8gYXNzdW1lIG5vbmUgb2YgdGhlIEtXUVBhZ2VTdGF0ZSBtZXRob2RzIHdpbGwgcmFpc2UKLSAg
ICAvLyBleGNlcHRpb25zLCBzaW5jZSBLV1FQYWdlU3RhdGUgaXMgaW1wbGVtZW50ZWQgYnkgV2Vi
Q29yZSBhbmQKLSAgICAvLyBkb2VzIG5vdCB0aHJvdwotCi0gICAgRG9jdW1lbnRJbXBsICpkb2Mg
PSBbc3RhdGUgZG9jdW1lbnRdOwotICAgIE5vZGVJbXBsICptb3VzZVByZXNzTm9kZSA9IFtzdGF0
ZSBtb3VzZVByZXNzTm9kZV07Ci0gICAgS1VSTCAqdXJsID0gW3N0YXRlIFVSTF07Ci0gICAgU2F2
ZWRQcm9wZXJ0aWVzICp3aW5kb3dQcm9wZXJ0aWVzID0gW3N0YXRlIHdpbmRvd1Byb3BlcnRpZXNd
OwotICAgIFNhdmVkUHJvcGVydGllcyAqbG9jYXRpb25Qcm9wZXJ0aWVzID0gW3N0YXRlIGxvY2F0
aW9uUHJvcGVydGllc107Ci0gICAgU2F2ZWRCdWlsdGlucyAqaW50ZXJwcmV0ZXJCdWlsdGlucyA9
IFtzdGF0ZSBpbnRlcnByZXRlckJ1aWx0aW5zXTsKLSAgICBQYXVzZWRUaW1lb3V0cyAqdGltZW91
dHMgPSBbc3RhdGUgcGF1c2VkVGltZW91dHNdOwotICAgIAotICAgIGNhbmNlbFJlZGlyZWN0aW9u
KCk7Ci0KLSAgICAvLyBXZSBzdGlsbCBoYXZlIHRvIGNsb3NlIHRoZSBwcmV2aW91cyBwYXJ0IHBh
Z2UuCi0gICAgaWYgKCFkLT5tX3Jlc3RvcmVkKQotICAgICAgICBjbG9zZVVSTCgpOwotICAgICAg
ICAgICAgCi0gICAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBEb24ndCBy
ZS1lbWl0IHRoZSBsb2FkIGV2ZW50LgotICAgIGQtPm1fYkxvYWRFdmVudEVtaXR0ZWQgPSB0cnVl
OwotICAgIAotICAgIC8vIGRlbGV0ZSBvbGQgc3RhdHVzIGJhciBtc2cncyBmcm9tIGtqcyAoaWYg
aXQgX3dhc18gYWN0aXZhdGVkIG9uIGxhc3QgVVJMKQotICAgIGlmIChkLT5tX2JKU2NyaXB0RW5h
YmxlZCkgewotICAgICAgICBkLT5tX2tqc1N0YXR1c0JhclRleHQgPSBRU3RyaW5nOjpudWxsOwot
ICAgICAgICBkLT5tX2tqc0RlZmF1bHRTdGF0dXNCYXJUZXh0ID0gUVN0cmluZzo6bnVsbDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQodXJsKTsKLSAgICAKLSAgICBtX3VybCA9ICp1cmw7Ci0gICAgCi0g
ICAgLy8gaW5pdGlhbGl6aW5nIG1fdXJsIHRvIHRoZSBuZXcgdXJsIGJyZWFrcyByZWxhdGl2ZSBs
aW5rcyB3aGVuIG9wZW5pbmcgc3VjaCBhIGxpbmsgYWZ0ZXIgdGhpcyBjYWxsIGFuZCBfYmVmb3Jl
XyBiZWdpbigpIGlzIGNhbGxlZCAod2hlbiB0aGUgZmlyc3QKLSAgICAvLyBkYXRhIGFycml2ZXMp
IChTaW1vbikKLSAgICBpZiAobV91cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJodHRwIikgJiYg
IW1fdXJsLmhvc3QoKS5pc0VtcHR5KCkgJiYgbV91cmwucGF0aCgpLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV91cmwuc2V0UGF0aCgiLyIpOwotICAgIAotICAgIC8vIGNvcHkgdG8gbV93b3JraW5nVVJM
IGFmdGVyIGZpeGluZyBtX3VybCBhYm92ZQotICAgIGQtPm1fd29ya2luZ1VSTCA9IG1fdXJsOwot
ICAgICAgICAKLSAgICBlbWl0IHN0YXJ0ZWQoTlVMTCk7Ci0gICAgCi0gICAgLy8gLS0tLS0tLS0t
LS1iZWdpbi0tLS0tLS0tLS0tCi0gICAgY2xlYXIoKTsKLQotICAgIGRvYy0+c2V0SW5QYWdlQ2Fj
aGUoTk8pOwotCi0gICAgZC0+bV9iQ2xlYXJlZCA9IGZhbHNlOwotICAgIGQtPm1fYkNvbXBsZXRl
ID0gZmFsc2U7Ci0gICAgZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9IGZhbHNlOwotICAgIGQtPm1f
cmVmZXJyZXIgPSBtX3VybC51cmwoKTsKLSAgICAKLSAgICBzZXRWaWV3KGRvYy0+dmlldygpKTsK
LSAgICAKLSAgICBkLT5tX2RvYyA9IGRvYzsKLSAgICBkLT5tX2RvYy0+cmVmKCk7Ci0gICAgCi0g
ICAgZC0+bV9tb3VzZVByZXNzTm9kZSA9IG1vdXNlUHJlc3NOb2RlOwotICAgIAotICAgIERlY29k
ZXIgKmRlY29kZXIgPSBkb2MtPmRlY29kZXIoKTsKLSAgICBpZiAoZGVjb2RlcikKLSAgICAgICAg
ZGVjb2Rlci0+cmVmKCk7Ci0gICAgaWYgKGQtPm1fZGVjb2RlcikKLSAgICAgICAgZC0+bV9kZWNv
ZGVyLT5kZXJlZigpOwotICAgIGQtPm1fZGVjb2RlciA9IGRlY29kZXI7Ci0KLSAgICBkb2MtPnNl
dFBhcnNlTW9kZShbc3RhdGUgcGFyc2VNb2RlXSk7Ci0gICAgCi0gICAgdXBkYXRlUG9saWN5QmFz
ZVVSTCgpOwotCi0gICAgeyAvLyBzY29wZSB0aGUgbG9jawotICAgICAgICBKU0xvY2sgbG9jazsK
LSAgICAgICAgcmVzdG9yZVdpbmRvd1Byb3BlcnRpZXMod2luZG93UHJvcGVydGllcyk7Ci0gICAg
ICAgIHJlc3RvcmVMb2NhdGlvblByb3BlcnRpZXMobG9jYXRpb25Qcm9wZXJ0aWVzKTsKLSAgICAg
ICAgcmVzdG9yZUludGVycHJldGVyQnVpbHRpbnMoKmludGVycHJldGVyQnVpbHRpbnMpOwotICAg
IH0KLQotICAgIHJlc3VtZVRpbWVvdXRzKHRpbWVvdXRzKTsKLSAgICAKLSAgICBjaGVja0NvbXBs
ZXRlZCgpOwotfQotCi1LV1FLSFRNTFBhcnQgKktXUUtIVE1MUGFydDo6cGFydEZvcldpZGdldChj
b25zdCBRV2lkZ2V0ICp3aWRnZXQpCi17Ci0gICAgQVNTRVJUX0FSRyh3aWRnZXQsIHdpZGdldCk7
Ci0gICAgCi0gICAgTm9kZUltcGwgKm5vZGUgPSBub2RlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAg
aWYgKG5vZGUpIHsKLQlyZXR1cm4gcGFydEZvck5vZGUobm9kZSk7Ci0gICAgfQotICAgIAotICAg
IC8vIEFzc3VtZSBhbGwgd2lkZ2V0cyBhcmUgZWl0aGVyIGZvcm0gY29udHJvbHMsIG9yIEtIVE1M
Vmlld3MuCi0gICAgQVNTRVJUKHdpZGdldC0+aXNLSFRNTFZpZXcoKSk7Ci0gICAgcmV0dXJuIEtX
UShzdGF0aWNfY2FzdDxjb25zdCBLSFRNTFZpZXcgKj4od2lkZ2V0KS0+cGFydCgpKTsKLX0KLQot
V2ViQ29yZUJyaWRnZSAqS1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQoY29uc3QgUVdpZGdl
dCAqd2lkZ2V0KQotewotICAgIEFTU0VSVF9BUkcod2lkZ2V0LCB3aWRnZXQpOwotICAgIAotICAg
IEtXUUtIVE1MUGFydCAqcGFydCA9IHBhcnRGb3JXaWRnZXQod2lkZ2V0KTsKLSAgICBBU1NFUlQo
cGFydCk7Ci0gICAgcmV0dXJuIHBhcnQtPmJyaWRnZSgpOwotfQotCi1LV1FLSFRNTFBhcnQgKktX
UUtIVE1MUGFydDo6cGFydEZvck5vZGUoTm9kZUltcGwgKm5vZGUpCi17Ci0gICAgQVNTRVJUX0FS
Ryhub2RlLCBub2RlKTsKLSAgICByZXR1cm4gS1dRKG5vZGUtPmdldERvY3VtZW50KCktPnBhcnQo
KSk7Ci19Ci0KLU5TVmlldyAqS1dRS0hUTUxQYXJ0Ojpkb2N1bWVudFZpZXdGb3JOb2RlKE5vZGVJ
bXBsICpub2RlKQotewotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IHBhcnRGb3JOb2RlKG5v
ZGUpLT5icmlkZ2UoKTsKLSAgICByZXR1cm4gW2JyaWRnZSBkb2N1bWVudFZpZXddOwotfQotCi1O
b2RlSW1wbCAqS1dRS0hUTUxQYXJ0Ojpub2RlRm9yV2lkZ2V0KGNvbnN0IFFXaWRnZXQgKndpZGdl
dCkKLXsKLSAgICBBU1NFUlRfQVJHKHdpZGdldCwgd2lkZ2V0KTsKLSAgICBjb25zdCBRT2JqZWN0
ICpvID0gd2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpOwotICAgIHJldHVybiBvID8gc3RhdGlj
X2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KG8pLT5lbGVtZW50KCkgOiAwOwotfQotCi12b2lk
IEtXUUtIVE1MUGFydDo6c2V0RG9jdW1lbnRGb2N1cyhRV2lkZ2V0ICp3aWRnZXQpCi17Ci0gICAg
Tm9kZUltcGwgKm5vZGUgPSBub2RlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgaWYgKG5vZGUpIHsK
LSAgICAgICAgbm9kZS0+Z2V0RG9jdW1lbnQoKS0+c2V0Rm9jdXNOb2RlKG5vZGUpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEVSUk9SKCJ1bmFibGUgdG8gY2xlYXIgZm9jdXMgYmVjYXVzZSB3aWRn
ZXQgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZSIpOwotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRN
TFBhcnQ6OmNsZWFyRG9jdW1lbnRGb2N1cyhRV2lkZ2V0ICp3aWRnZXQpCi17Ci0gICAgTm9kZUlt
cGwgKm5vZGUgPSBub2RlRm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgaWYgKG5vZGUpIHsKLSAgICAJ
bm9kZS0+Z2V0RG9jdW1lbnQoKS0+c2V0Rm9jdXNOb2RlKDApOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEVSUk9SKCJ1bmFibGUgdG8gY2xlYXIgZm9jdXMgYmVjYXVzZSB3aWRnZXQgaGFkIG5vIGNv
cnJlc3BvbmRpbmcgbm9kZSIpOwotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNhdmVE
b2N1bWVudFN0YXRlKCkKLXsKLSAgICAvLyBEbyBub3Qgc2F2ZSBkb2Mgc3RhdGUgaWYgdGhlIHBh
Z2UgaGFzIGEgcGFzc3dvcmQgZmllbGQgYW5kIGEgZm9ybSB0aGF0IHdvdWxkIGJlIHN1Ym1pdHRl
ZAotICAgIC8vIHZpYSBodHRwcwotICAgIGlmICghKGQtPm1fZG9jICYmIGQtPm1fZG9jLT5oYXNQ
YXNzd29yZEZpZWxkKCkgJiYgZC0+bV9kb2MtPmhhc1NlY3VyZUZvcm0oKSkpIHsKLQlLV1FfQkxP
Q0tfRVhDRVBUSU9OUzsKLSAgICAgICAgW19icmlkZ2Ugc2F2ZURvY3VtZW50U3RhdGVdOwotCUtX
UV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAgfQotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6cmVz
dG9yZURvY3VtZW50U3RhdGUoKQotewotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIFtf
YnJpZGdlIHJlc3RvcmVEb2N1bWVudFN0YXRlXTsKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05T
OwotfQotCi1RUHRyTGlzdDxLV1FLSFRNTFBhcnQ+ICZLV1FLSFRNTFBhcnQ6Om11dGFibGVJbnN0
YW5jZXMoKQotewotICAgIHN0YXRpYyBRUHRyTGlzdDxLV1FLSFRNTFBhcnQ+IGluc3RhbmNlc0xp
c3Q7Ci0gICAgcmV0dXJuIGluc3RhbmNlc0xpc3Q7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojp1
cGRhdGVQb2xpY3lCYXNlVVJMKCkKLXsKLSAgICBpZiAocGFyZW50UGFydCgpICYmIHBhcmVudFBh
cnQoKS0+eG1sRG9jSW1wbCgpKSB7Ci0gICAgICAgIHNldFBvbGljeUJhc2VVUkwocGFyZW50UGFy
dCgpLT54bWxEb2NJbXBsKCktPnBvbGljeUJhc2VVUkwoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgc2V0UG9saWN5QmFzZVVSTChtX3VybC51cmwoKSk7Ci0gICAgfQotfQotCi12b2lkIEtXUUtI
VE1MUGFydDo6c2V0UG9saWN5QmFzZVVSTChjb25zdCBET01TdHJpbmcgJnMpCi17Ci0gICAgaWYg
KHhtbERvY0ltcGwoKSkKLSAgICAgICAgeG1sRG9jSW1wbCgpLT5zZXRQb2xpY3lCYXNlVVJMKHMp
OwotICAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgICBmb3IgKENv
bnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBSZWFkT25seVBhcnQgKnN1YnBhcnQgPSAoKml0KS5tX3BhcnQ7Ci0gICAgICAgIHN0
YXRpY19jYXN0PEtXUUtIVE1MUGFydCAqPihzdWJwYXJ0KS0+c2V0UG9saWN5QmFzZVVSTChzKTsK
LSAgICB9Ci19Ci0KLVFTdHJpbmcgS1dRS0hUTUxQYXJ0OjpyZXF1ZXN0ZWRVUkxTdHJpbmcoKSBj
b25zdAotewotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIHJldHVybiBRU3RyaW5nOjpm
cm9tTlNTdHJpbmcoW19icmlkZ2UgcmVxdWVzdGVkVVJMU3RyaW5nXSk7Ci0gICAgS1dRX1VOQkxP
Q0tfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLVFTdHJpbmcgS1dR
S0hUTUxQYXJ0OjppbmNvbWluZ1JlZmVycmVyKCkgY29uc3QKLXsKLSAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKFtfYnJpZGdlIGluY29t
aW5nUmVmZXJyZXJdKTsKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotCi0gICAgcmV0dXJu
IFFTdHJpbmcoKTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OmZvcmNlTGF5b3V0KCkKLXsKLSAg
ICBLSFRNTFZpZXcgKnYgPSBkLT5tX3ZpZXc7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgdi0+bGF5
b3V0KCk7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCB1bnNjaGVkdWxlIGEgcGVuZGluZyByZWxheW91
dCwgc2luY2UgdGhlIGZvcmNlIGNhbiBiZSBjYWxsZWQgd2l0aAotICAgICAgICAvLyBhIHRpbnkg
cmVjdGFuZ2xlIGZyb20gYSBkcmF3UmVjdCB1cGRhdGUuICBCeSB1bnNjaGVkdWxpbmcgd2UgaW4g
ZWZmZWN0Ci0gICAgICAgIC8vICJ2YWxpZGF0ZSIgYW5kIHN0b3AgdGhlIG5lY2Vzc2FyeSBmdWxs
IHJlcGFpbnQgZnJvbSBvY2N1cnJpbmcuICBCYXNpY2FsbHkgYW55IGJhc2ljCi0gICAgICAgIC8v
IGFwcGVuZC9yZW1vdmUgREhUTUwgaXMgYnJva2VuIGJ5IHRoaXMgY2FsbC4gIEZvciBub3csIEkg
aGF2ZSByZW1vdmVkIHRoZSBvcHRpbWl6YXRpb24KLSAgICAgICAgLy8gdW50aWwgd2UgaGF2ZSBh
IGJldHRlciBpbnZhbGlkYXRpb24gc3RhdGVneS4gLWR3aAotICAgICAgICAvL3YtPnVuc2NoZWR1
bGVSZWxheW91dCgpOwotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OmZvcmNlTGF5b3V0
V2l0aFBhZ2VXaWR0aFJhbmdlKGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRo
KQotewotICAgIC8vIER1bXBpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihfcGFydC0+cmVuZGVy
ZXIoKSkuYXNjaWkoKSBpcyBhIGdvb2QgdHJpY2sgdG8gc2VlCi0gICAgLy8gdGhlIHN0YXRlIG9m
IHRoaW5ncyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsYXlvdXQKLSAgICBSZW5kZXJDYW52YXMgKnJv
b3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXMgKj4oeG1sRG9jSW1wbCgpLT5yZW5kZXJlcigp
KTsKLSAgICBpZiAocm9vdCkgewotICAgICAgICAvLyBUaGlzIG1hZ2ljIGlzIGJhc2ljYWxseSBj
b3BpZWQgZnJvbSBraHRtbHZpZXc6OnByaW50Ci0gICAgICAgIGludCBwYWdlVyA9IChpbnQpY2Vp
bChtaW5QYWdlV2lkdGgpOwotICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7Ci0gICAgICAg
IHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7Ci0gICAgICAgIGZvcmNlTGF5
b3V0KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaXQgaW4gdGhlIG1pbmlt
dW0gcGFnZSB3aWR0aCwgd2UnbGwgbGF5IG91dCBhZ2Fpbi4gSWYgd2UgZG9uJ3QgZml0IGluIHRo
ZQotICAgICAgICAvLyBtYXhpbXVtIHBhZ2Ugd2lkdGgsIHdlIHdpbGwgbGF5IG91dCB0byB0aGUg
bWF4aW11bSBwYWdlIHdpZHRoIGFuZCBjbGlwIGV4dHJhIGNvbnRlbnQuCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBhcmUgYXNzdW1pbmcgYSBzaHJpbmstdG8tZml0IHByaW50aW5nIGltcGxlbWVudGF0
aW9uLiAgQSBjcm9wcGluZwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGRv
IHRoaXMhCi0gICAgICAgIGludCByaWdodG1vc3RQb3MgPSByb290LT5yaWdodG1vc3RQb3NpdGlv
bigpOwotICAgICAgICBpZiAocmlnaHRtb3N0UG9zID4gbWluUGFnZVdpZHRoKSB7Ci0gICAgICAg
ICAgICBwYWdlVyA9IGtNaW4ocmlnaHRtb3N0UG9zLCAoaW50KWNlaWwobWF4UGFnZVdpZHRoKSk7
Ci0gICAgICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7Ci0gICAgICAgICAgICByb290LT5z
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwotICAgICAgICAgICAgZm9yY2VMYXlvdXQo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRSZXNpemVF
dmVudCgpCi17Ci0gICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3OwotICAgIGlmICh2KSB7Ci0J
UVJlc2l6ZUV2ZW50IGU7Ci0Jdi0+cmVzaXplRXZlbnQoJmUpOwotICAgIH0KLX0KLQotdm9pZCBL
V1FLSFRNTFBhcnQ6OnNlbmRTY3JvbGxFdmVudCgpCi17Ci0gICAgS0hUTUxWaWV3ICp2ID0gZC0+
bV92aWV3OwotICAgIGlmICh2KSB7Ci0gICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9j
SW1wbCgpOwotICAgICAgICBpZiAoIWRvYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZG9jLT5kaXNwYXRjaEhUTUxFdmVudChzY3JvbGxFdmVudCwgdHJ1ZSwgZmFsc2UpOwotICAgIH0K
LX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBET01TdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgRE9NU3RyaW5nIHRleHQgPSBtZXNzYWdlOwotICAgIHRleHQu
cmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKLSAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICBbX2JyaWRnZSBydW5KYXZhU2NyaXB0QWxlcnRQYW5l
bFdpdGhNZXNzYWdlOnRleHRdOwotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci19Ci0KLWJv
b2wgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBET01TdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgRE9NU3RyaW5nIHRleHQgPSBtZXNzYWdlOwotICAgIHRleHQucmVwbGFj
ZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKLQotICAgIEtXUV9C
TE9DS19FWENFUFRJT05TOwotICAgIHJldHVybiBbX2JyaWRnZSBydW5KYXZhU2NyaXB0Q29uZmly
bVBhbmVsV2l0aE1lc3NhZ2U6dGV4dF07Ci0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OnJ1bkphdmFTY3JpcHRQ
cm9tcHQoY29uc3QgRE9NU3RyaW5nJiBwcm9tcHQsIGNvbnN0IERPTVN0cmluZyYgZGVmYXVsdFZh
bHVlLCBET01TdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBET01TdHJpbmcgcHJvbXB0VGV4dCA9IHBy
b21wdDsKLSAgICBwcm9tcHRUZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSk7Ci0gICAgRE9NU3RyaW5nIGRlZmF1bHRWYWx1ZVRleHQgPSBkZWZhdWx0
VmFsdWU7Ci0gICAgZGVmYXVsdFZhbHVlVGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sKCkpOwotCi0gICAgYm9vbCBvazsKLSAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUzsKLSAgICBOU1N0cmluZyAqcmV0dXJuZWRUZXh0ID0gbmlsOwotCi0gICAgb2sgPSBb
X2JyaWRnZSBydW5KYXZhU2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0OnByb21wdAotCSAg
ICAgICBkZWZhdWx0VGV4dDpkZWZhdWx0VmFsdWUgcmV0dXJuaW5nVGV4dDomcmV0dXJuZWRUZXh0
XTsKLQotICAgIGlmIChvaykgewotICAgICAgICByZXN1bHQgPSBET01TdHJpbmcocmV0dXJuZWRU
ZXh0KTsKLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
LCBRQ2hhcignXFwnKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9rOwotICAgIEtXUV9VTkJMT0NL
X0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEtXUUtIVE1M
UGFydDo6bG9jYXRpb25iYXJWaXNpYmxlKCkKLXsKLSAgICByZXR1cm4gW19icmlkZ2UgYXJlVG9v
bGJhcnNWaXNpYmxlXTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6Om1lbnViYXJWaXNpYmxlKCkK
LXsKLSAgICAvLyBUaGUgbWVudWJhciBpcyBhbHdheXMgb24gaW4gTWFjIE9TIFggVUkKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OnBlcnNvbmFsYmFyVmlzaWJsZSgp
Ci17Ci0gICAgcmV0dXJuIFtfYnJpZGdlIGFyZVRvb2xiYXJzVmlzaWJsZV07Ci19Ci0KLWJvb2wg
S1dRS0hUTUxQYXJ0OjpzY3JvbGxiYXJzVmlzaWJsZSgpCi17Ci0gICAgaWYgKCF2aWV3KCkpCi0J
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZpZXcoKS0+aFNjcm9sbEJhck1vZGUoKSA9PSBRU2Ny
b2xsVmlldzo6QWx3YXlzT2ZmIHx8IHZpZXcoKS0+dlNjcm9sbEJhck1vZGUoKSA9PSBRU2Nyb2xs
Vmlldzo6QWx3YXlzT2ZmKQotCXJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEtXUUtIVE1MUGFydDo6c3RhdHVzYmFyVmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIFtf
YnJpZGdlIGlzU3RhdHVzYmFyVmlzaWJsZV07Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0Ojp0b29s
YmFyVmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIFtfYnJpZGdlIGFyZVRvb2xiYXJzVmlzaWJsZV07
Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjphZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IERPTVN0
cmluZyAmbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgRE9NU3RyaW5nICZzb3Vy
Y2VVUkwpCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgotICAgICAgICAoTlNTdHJpbmcgKiltZXNzYWdl
LCBAIm1lc3NhZ2UiLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDogbGluZU51bWJl
cl0sIEAibGluZU51bWJlciIsCi0gICAgICAgIChOU1N0cmluZyAqKXNvdXJjZVVSTCwgQCJzb3Vy
Y2VVUkwiLAotICAgICAgICBOVUxMXTsKLSAgICBbX2JyaWRnZSBhZGRNZXNzYWdlVG9Db25zb2xl
OmRpY3Rpb25hcnldOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6Y3JlYXRlRW1wdHlEb2N1bWVu
dCgpCi17Ci0gICAgLy8gQWx0aG91Z2ggaXQncyBub3QgY29tcGxldGVseSBjbGVhciBmcm9tIHRo
ZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24sCi0gICAgLy8gaXQgZG9lcyBub3RoaW5nIGlmIHdlIGFs
cmVhZHkgaGF2ZSBhIGRvY3VtZW50LCBhbmQganVzdCBjcmVhdGVzIGFuCi0gICAgLy8gZW1wdHkg
b25lIGlmIHdlIGhhdmUgbm8gZG9jdW1lbnQgYXQgYWxsLgotICAgIGlmICghZC0+bV9kb2MpIHsK
LQlLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICAgICAgW19icmlkZ2UgbG9hZEVtcHR5RG9jdW1l
bnRTeW5jaHJvbm91c2x5XTsKLQlLV1FfVU5CTE9DS19FWENFUFRJT05TOwotCi0JaWYgKHBhcmVu
dFBhcnQoKSAmJiAocGFyZW50UGFydCgpLT5jaGlsZEZyYW1lKHRoaXMpLT5tX3R5cGUgPT0gQ2hp
bGRGcmFtZTo6SUZyYW1lIHx8Ci0JCQkgICAgIHBhcmVudFBhcnQoKS0+Y2hpbGRGcmFtZSh0aGlz
KS0+bV90eXBlID09IENoaWxkRnJhbWU6Ok9iamVjdCkpIHsKLQkgICAgZC0+bV9kb2MtPnNldEJh
c2VVUkwocGFyZW50UGFydCgpLT5kLT5tX2RvYy0+YmFzZVVSTCgpKTsKLQl9Ci0gICAgfQotfQot
Ci12b2lkIEtXUUtIVE1MUGFydDo6YWRkTWV0YURhdGEoY29uc3QgUVN0cmluZyAma2V5LCBjb25z
dCBRU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBkLT5tX2pvYi0+YWRkTWV0YURhdGEoa2V5LCB2YWx1
ZSk7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjprZXlFdmVudChOU0V2ZW50ICpldmVudCkKLXsK
LSAgICBib29sIHJlc3VsdDsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIEFTU0VS
VChbZXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU0tleVVwKTsK
LQotICAgIC8vIENoZWNrIGZvciBjYXNlcyB3aGVyZSB3ZSBhcmUgdG9vIGVhcmx5IGZvciBldmVu
dHMgLS0gcG9zc2libGUgdW5tYXRjaGVkIGtleSB1cAotICAgIC8vIGZyb20gcHJlc3NpbmcgcmV0
dXJuIGluIHRoZSBsb2NhdGlvbiBiYXIuCi0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSB4bWxEb2NJ
bXBsKCk7Ci0gICAgaWYgKCFkb2MpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBOb2RlSW1wbCAqbm9kZSA9IGRvYy0+Zm9jdXNOb2RlKCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0J
bm9kZSA9IGRvYy0+Ym9keSgpOwotICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoW2V2ZW50IHR5cGVd
ID09IE5TS2V5RG93bikgewotICAgICAgICBwcmVwYXJlRm9yVXNlckFjdGlvbigpOwotICAgIH0K
LQotICAgIE5TRXZlbnQgKm9sZEN1cnJlbnRFdmVudCA9IF9jdXJyZW50RXZlbnQ7Ci0gICAgX2N1
cnJlbnRFdmVudCA9IEtXUVJldGFpbihldmVudCk7Ci0KLSAgICBRS2V5RXZlbnQgcUV2ZW50KGV2
ZW50KTsKLSAgICByZXN1bHQgPSAhbm9kZS0+ZGlzcGF0Y2hLZXlFdmVudCgmcUV2ZW50KTsKLQot
ICAgIC8vIFdlIHdhbnQgdG8gc2VuZCBib3RoIGEgZG93biBhbmQgYSBwcmVzcyBmb3IgdGhlIGlu
aXRpYWwga2V5IGV2ZW50LgotICAgIC8vIFRvIGdldCBLSFRNTCB0byBkbyB0aGlzLCB3ZSBzZW5k
IGEgc2Vjb25kIEtleVByZXNzIFFLZXlFdmVudCB3aXRoICJpcyByZXBlYXQiIHNldCB0byB0cnVl
LAotICAgIC8vIHdoaWNoIGNhdXNlcyBpdCB0byBzZW5kIGEgcHJlc3MgdG8gdGhlIERPTS4KLSAg
ICAvLyBUaGF0J3Mgbm90IGEgZ3JlYXQgaGFjazsgaXQgd291bGQgYmUgZ29vZCB0byBkbyB0aGlz
IGluIGEgYmV0dGVyIHdheS4KLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiAh
W2V2ZW50IGlzQVJlcGVhdF0pIHsKLQlRS2V5RXZlbnQgcmVwZWF0RXZlbnQoZXZlbnQsIHRydWUp
OwotICAgICAgICBpZiAoIW5vZGUtPmRpc3BhdGNoS2V5RXZlbnQoJnJlcGVhdEV2ZW50KSkgewot
CSAgICByZXN1bHQgPSB0cnVlOwotCX0KLSAgICB9Ci0KLSAgICBBU1NFUlQoX2N1cnJlbnRFdmVu
dCA9PSBldmVudCk7Ci0gICAgS1dRUmVsZWFzZShldmVudCk7Ci0gICAgX2N1cnJlbnRFdmVudCA9
IG9sZEN1cnJlbnRFdmVudDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBLV1FfVU5CTE9D
S19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBUaGlzIGRvZXMgdGhl
IHNhbWUga2luZCBvZiB3b3JrIHRoYXQgS0hUTUxQYXJ0OjpvcGVuVVJMIGRvZXMsIGV4Y2VwdCBp
dCByZWxpZXMgb24gdGhlIGZhY3QKLS8vIHRoYXQgYSBoaWdoZXIgbGV2ZWwgYWxyZWFkeSBjaGVj
a2VkIHRoYXQgdGhlIFVSTHMgbWF0Y2ggYW5kIHRoZSBzY3JvbGxpbmcgaXMgdGhlIHJpZ2h0IHRo
aW5nIHRvIGRvLgotdm9pZCBLV1FLSFRNTFBhcnQ6OnNjcm9sbFRvQW5jaG9yKGNvbnN0IEtVUkwg
JlVSTCkKLXsKLSAgICBtX3VybCA9IFVSTDsKLSAgICBzdGFydGVkKDApOwotCi0gICAgZ290b0Fu
Y2hvcigpOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbW9kZWwgdGhpcyBhcyBhIGxvYWQg
dGhhdCBzdGFydHMgYW5kIGltbWVkaWF0ZWx5IGZpbmlzaGVzLgotICAgIC8vIE90aGVyd2lzZSwg
dGhlIHBhcmVudCBmcmFtZSBtYXkgdGhpbmsgd2UgbmV2ZXIgZmluaXNoZWQgbG9hZGluZy4KLSAg
ICBkLT5tX2JDb21wbGV0ZSA9IGZhbHNlOwotICAgIGNoZWNrQ29tcGxldGVkKCk7Ci19Ci0KLWJv
b2wgS1dRS0hUTUxQYXJ0OjpjbG9zZVVSTCgpCi17Ci0gICAgc2F2ZURvY3VtZW50U3RhdGUoKTsK
LSAgICByZXR1cm4gS0hUTUxQYXJ0OjpjbG9zZVVSTCgpOwotfQotCi1ib29sIEtXUUtIVE1MUGFy
dDo6Y2FuTW91c2VEb3duU3RhcnRTZWxlY3QoTm9kZUltcGwqIG5vZGUpCi17Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IENoZWNrIHRvIHNlZSBpZiBraHRtbC11c2VyLXNlbGVjdCBoYXMgYmVlbiBzZXQgdG8gbm9uZQot
ICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKS0+Y2FuU2VsZWN0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNvbWUgY29udHJvbHMgYW5kIGltYWdlcyBjYW4ndCBzdGFydCBhIHNl
bGVjdCBvbiBhIG1vdXNlIGRvd24uCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2Rl
LT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KGN1cnItPnN0eWxlKCktPnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfSUdOT1JFKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtX
UUtIVE1MUGFydDo6a2h0bWxNb3VzZVByZXNzRXZlbnQoTW91c2VQcmVzc0V2ZW50ICpldmVudCkK
LXsKLSAgICBib29sIHNpbmdsZUNsaWNrID0gW19jdXJyZW50RXZlbnQgY2xpY2tDb3VudF0gPD0g
MTsKLQotICAgIC8vIElmIHdlIGdvdCB0aGUgZXZlbnQgYmFjaywgdGhhdCBtdXN0IG1lYW4gaXQg
d2Fzbid0IHByZXZlbnRlZCwKLSAgICAvLyBzbyBpdCdzIGFsbG93ZWQgdG8gc3RhcnQgYSBkcmFn
IG9yIHNlbGVjdGlvbi4KLSAgICBfbW91c2VEb3duTWF5U3RhcnRTZWxlY3QgPSBjYW5Nb3VzZURv
d25TdGFydFNlbGVjdChldmVudC0+aW5uZXJOb2RlKCkpOwotICAgIAotICAgIC8vIENhcmVmdWwg
dGhhdCB0aGUgZHJhZyBzdGFydGluZyBsb2dpYyBzdGF5cyBpbiBzeW5jIHdpdGggZXZlbnRNYXlT
dGFydERyYWcoKQotICAgIF9tb3VzZURvd25NYXlTdGFydERyYWcgPSBzaW5nbGVDbGljazsKLQot
ICAgIGQtPm1fbW91c2VQcmVzc05vZGUgPSBldmVudC0+aW5uZXJOb2RlKCk7Ci0gICAgCi0gICAg
aWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChldmVudCkpIHsKLSAgICAgICAg
Ly8gV2UgZG9uJ3QgZG8gdGhpcyBhdCB0aGUgc3RhcnQgb2YgbW91c2UgZG93biBoYW5kbGluZyAo
YmVmb3JlIGNhbGxpbmcgaW50byBXZWJDb3JlKSwKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24n
dCB3YW50IHRvIGRvIGl0IHVudGlsIHdlIGtub3cgd2UgZGlkbid0IGhpdCBhIHdpZGdldC4KLSAg
ICAgICAgTlNWaWV3ICp2aWV3ID0gZC0+bV92aWV3LT5nZXREb2N1bWVudFZpZXcoKTsKLQotICAg
ICAgICBpZiAoc2luZ2xlQ2xpY2spIHsKLSAgICAgICAgICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OwotICAgICAgICAgICAgaWYgKFtfYnJpZGdlIGZpcnN0UmVzcG9uZGVyXSAhPSB2aWV3KSB7Ci0g
ICAgICAgICAgICAgICAgW19icmlkZ2UgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXddOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICAgICAgfQot
Ci0gICAgICAgIEtIVE1MUGFydDo6a2h0bWxNb3VzZVByZXNzRXZlbnQoZXZlbnQpOwotICAgIH0K
LX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OmtodG1sTW91c2VEb3VibGVDbGlja0V2ZW50KE1vdXNl
RG91YmxlQ2xpY2tFdmVudCAqZXZlbnQpCi17Ci0gICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldChldmVudCkpIHsKLSAgICAgICAgS0hUTUxQYXJ0OjpraHRtbE1vdXNlRG91
YmxlQ2xpY2tFdmVudChldmVudCk7Ci0gICAgfQotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6cGFz
c1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoa2h0bWw6Ok1vdXNlRXZlbnQgKmV2ZW50KQot
ewotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAg
ICBSZW5kZXJPYmplY3QgKnRhcmdldCA9IGV2ZW50LT5pbm5lck5vZGUoKSA/IGV2ZW50LT5pbm5l
ck5vZGUoKS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFFXaWRnZXQqIHdpZGdldCA9IFJlbmRlckxheWVyOjpnU2Nyb2xsQmFy
OwotICAgIGlmICghd2lkZ2V0KSB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5pc1dpZGdldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB3aWRnZXQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJXaWRnZXQgKj4odGFyZ2V0KS0+d2lkZ2V0KCk7Ci0gICAgfQotCi0gICAgLy8gRG91Ymxl
Y2xpY2sgZXZlbnRzIGRvbid0IGV4aXN0IGluIENvY29hLiAgU2luY2UgcGFzc1dpZGdldE1vdXNl
RG93bkV2ZW50VG9XaWRnZXQgd2lsbAotICAgIC8vIGp1c3QgcGFzcyBfY3VycmVudEV2ZW50IGRv
d24gdG8gdGhlIHdpZGdldCwgIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBpdCBmb3IgZXZlbnRzIHRo
YXQKLSAgICAvLyBkb24ndCBjb3JyZXNwb25kIHRvIENvY29hIGV2ZW50cy4gIFRoZSBtb3VzZWRv
d24vdXBzIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gcGFzc2VkIG9uIGFzCi0gICAgLy8gcGFydCBv
ZiB0aGUgcHJlc3NlZC9yZWxlYXNlZCBoYW5kbGluZy4KLSAgICBpZiAoIU1vdXNlRG91YmxlQ2xp
Y2tFdmVudDo6dGVzdChldmVudCkpCi0gICAgICAgIHJldHVybiBwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldCh3aWRnZXQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChS
ZW5kZXJXaWRnZXQgKnJlbmRlcldpZGdldCkKLXsKLSAgICByZXR1cm4gcGFzc1dpZGdldE1vdXNl
RG93bkV2ZW50VG9XaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7Ci19Ci0KLWJvb2wgS1dR
S0hUTUxQYXJ0OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChRV2lkZ2V0KiB3aWRn
ZXQpCi17Ci0gICAgLy8gRklYTUU6IHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIHRydWUKLQot
ICAgIGlmICghd2lkZ2V0KSB7Ci0gICAgICAgIEVSUk9SKCJoaXQgYSBSZW5kZXJXaWRnZXQgd2l0
aG91dCBhIGNvcnJlc3BvbmRpbmcgUVdpZGdldCwgbWVhbnMgYSBmcmFtZSBpcyBoYWxmLWNvbnN0
cnVjdGVkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwotICAgIAotICAgIE5TVmlldyAqbm9kZVZpZXcgPSB3aWRnZXQtPmdldFZpZXco
KTsKLSAgICBBU1NFUlQobm9kZVZpZXcpOwotICAgIEFTU0VSVChbbm9kZVZpZXcgc3VwZXJ2aWV3
XSk7Ci0gICAgTlNWaWV3ICp2aWV3ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBl
cnZpZXddIGNvbnZlcnRQb2ludDpbX2N1cnJlbnRFdmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9t
VmlldzpuaWxdXTsKLSAgICBpZiAodmlldyA9PSBuaWwpIHsKLSAgICAgICAgRVJST1IoIktIVE1M
IHNheXMgd2UgaGl0IGEgUmVuZGVyV2lkZ2V0LCBidXQgQXBwS2l0IGRvZXNuJ3QgYWdyZWUgd2Ug
aGl0IHRoZSBjb3JyZXNwb25kaW5nIE5TVmlldyIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKFtfYnJpZGdlIGZpcnN0UmVzcG9uZGVyXSA9PSB2aWV3KSB7Ci0g
ICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHdlIGp1c3QgYmVjYW1lIGZpcnN0IHJlc3BvbmRl
ciwgd2Ugc2hvdWxkIHNlbmQgdGhlIG1vdXNlRG93bjoKLSAgICAgICAgLy8gdG8gdGhlIE5TVGV4
dEZpZWxkLCBub3QgdGhlIE5TVGV4dEZpZWxkJ3MgZWRpdG9yLiBUaGlzIGNvZGUgbWFrZXMgc3Vy
ZSB0aGF0IGhhcHBlbnMuCi0gICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHdlIHNlZSBh
IGZsYXNoIG9mIHNlbGVjdGVkIHRleHQgd2hlbiBjbGlja2luZyBpbiBhIHRleHQgZmllbGQuCi0g
ICAgICAgIGlmICghW19icmlkZ2Ugd2FzRmlyc3RSZXNwb25kZXJBdE1vdXNlRG93blRpbWU6dmll
d10gJiYgW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNUZXh0VmlldyBjbGFzc11dKSB7Ci0gICAgICAg
ICAgICBOU1ZpZXcgKnN1cGVydmlldyA9IHZpZXc7Ci0gICAgICAgICAgICB3aGlsZSAoc3VwZXJ2
aWV3ICE9IG5vZGVWaWV3KSB7Ci0gICAgICAgICAgICAgICAgc3VwZXJ2aWV3ID0gW3N1cGVydmll
dyBzdXBlcnZpZXddOwotICAgICAgICAgICAgICAgIEFTU0VSVChzdXBlcnZpZXcpOwotICAgICAg
ICAgICAgICAgIGlmIChbc3VwZXJ2aWV3IGlzS2luZE9mQ2xhc3M6W05TQ29udHJvbCBjbGFzc11d
KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TQ29udHJvbCAqY29udHJvbCA9IHN0YXRpY19jYXN0
PE5TQ29udHJvbCAqPihzdXBlcnZpZXcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoW2NvbnRy
b2wgY3VycmVudEVkaXRvcl0gPT0gdmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmll
dyA9IHN1cGVydmlldzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBOb3JtYWxseSBbTlNXaW5kb3cgc2VuZEV2ZW50Ol0gaGFu
ZGxlcyBzZXR0aW5nIHRoZSBmaXJzdCByZXNwb25kZXIuCi0gICAgICAgIC8vIEJ1dCBpbiBvdXIg
Y2FzZSwgdGhlIGV2ZW50IHdhcyBzZW50IHRvIHRoZSB2aWV3IHJlcHJlc2VudGluZyB0aGUgZW50
aXJlIHdlYiBwYWdlLgotICAgICAgICBpZiAoW19jdXJyZW50RXZlbnQgY2xpY2tDb3VudF0gPD0g
MSAmJiBbdmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdICYmIFt2aWV3IG5lZWRzUGFuZWxUb0Jl
Y29tZUtleV0pIHsKLSAgICAgICAgICAgIFtfYnJpZGdlIG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3
XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdlIG5lZWQgdG8gImRlZmVyIGxvYWRpbmci
IGFuZCBkZWZlciB0aW1lcnMgd2hpbGUgd2UgYXJlIHRyYWNraW5nIHRoZSBtb3VzZS4KLSAgICAv
LyBUaGF0J3MgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBuZXcgcGFnZSB0byBsb2FkIHdoaWxl
IHRoZSB1c2VyIGlzIGhvbGRpbmcgdGhlIG1vdXNlIGRvd24uCi0gICAgCi0gICAgQk9PTCB3YXNE
ZWZlcnJpbmdMb2FkaW5nID0gW19icmlkZ2UgZGVmZXJzTG9hZGluZ107Ci0gICAgaWYgKCF3YXNE
ZWZlcnJpbmdMb2FkaW5nKSB7Ci0gICAgICAgIFtfYnJpZGdlIHNldERlZmVyc0xvYWRpbmc6WUVT
XTsKLSAgICB9Ci0gICAgQk9PTCB3YXNEZWZlcnJpbmdUaW1lcnMgPSBRT2JqZWN0OjpkZWZlcnNU
aW1lcnMoKTsKLSAgICBpZiAoIXdhc0RlZmVycmluZ1RpbWVycykgewotICAgICAgICBRT2JqZWN0
OjpzZXREZWZlcnNUaW1lcnModHJ1ZSk7Ci0gICAgfQotICAgIEFTU0VSVCghX3NlbmRpbmdFdmVu
dFRvU3Vidmlldyk7Ci0gICAgX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0gICAgW3Zp
ZXcgbW91c2VEb3duOl9jdXJyZW50RXZlbnRdOwotICAgIF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcg
PSBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXdhc0RlZmVycmluZ1RpbWVycykgewotICAgICAgICBR
T2JqZWN0OjpzZXREZWZlcnNUaW1lcnMoZmFsc2UpOwotICAgIH0KLSAgICBpZiAoIXdhc0RlZmVy
cmluZ0xvYWRpbmcpIHsKLSAgICAgICAgW19icmlkZ2Ugc2V0RGVmZXJzTG9hZGluZzpOT107Ci0g
ICAgfQotCi0gICAgLy8gUmVtZW1iZXIgd2hpY2ggdmlldyB3ZSBzZW50IHRoZSBldmVudCB0bywg
c28gd2UgY2FuIGRpcmVjdCB0aGUgcmVsZWFzZSBldmVudCBwcm9wZXJseS4KLSAgICBfbW91c2VE
b3duVmlldyA9IHZpZXc7Ci0gICAgX21vdXNlRG93bldhc0luU3ViZnJhbWUgPSBmYWxzZTsKLQot
ICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBLV1FLSFRNTFBhcnQ6Omxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0Ci17Ci0gICAgLy8gTWFu
eSBBSyB3aWRnZXRzIHJ1biB0aGVpciBvd24gZXZlbnQgbG9vcHMgYW5kIGNvbnN1bWUgZXZlbnRz
IHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgotICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJl
bnRFdmVudCBpcyB0aGUgbW91c2VVcCB0aGF0IHRoZXkgZXhpdGVkIG9uLiAgV2UgbmVlZCB0byB1
cGRhdGUKLSAgICAvLyB0aGUga2h0bWwgc3RhdGUgd2l0aCB0aGlzIG1vdXNlVXAsIHdoaWNoIGto
dG1sIG5ldmVyIHNhdy4gIFRoaXMgbWV0aG9kIGxldHMgdXMgZGV0ZWN0Ci0gICAgLy8gdGhhdCBz
dGF0ZS4KLQotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIE5TRXZlbnQgKmN1cnJlbnRF
dmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICBp
ZiAoX2N1cnJlbnRFdmVudCAhPSBjdXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duKSB7
Ci0gICAgICAgIGlmIChbY3VycmVudEV2ZW50QWZ0ZXJIYW5kbGluZ01vdXNlRG93biB0eXBlXSA9
PSBOU0xlZnRNb3VzZVVwKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotICAgIAotLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyB0aGUgc2FtZSBraW5kIG9mIGNoZWNrIGFz
IFt0YXJnZXQgaXNEZXNjZW5kYW50T2Y6c3VwZXJ2aWV3XS4KLS8vIFRoZXJlIGFyZSB0d28gZGlm
ZmVyZW5jZXM6IFRoaXMgaXMgYSBsb3Qgc2xvd2VyIGJlY2F1c2UgaXQgaGFzIHRvIHdhbGsgdGhl
IHdob2xlCi0vLyB0cmVlLCBhbmQgdGhpcyB3b3JrcyBpbiBjYXNlcyB3aGVyZSB0aGUgdGFyZ2V0
IGhhcyBhbHJlYWR5IGJlZW4gZGVhbGxvY2F0ZWQuCi1zdGF0aWMgYm9vbCBmaW5kVmlld0luU3Vi
dmlld3MoTlNWaWV3ICpzdXBlcnZpZXcsIE5TVmlldyAqdGFyZ2V0KQotewotICAgIEtXUV9CTE9D
S19FWENFUFRJT05TOwotICAgIE5TRW51bWVyYXRvciAqZSA9IFtbc3VwZXJ2aWV3IHN1YnZpZXdz
XSBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU1ZpZXcgKnN1YnZpZXc7Ci0gICAgd2hpbGUgKChz
dWJ2aWV3ID0gW2UgbmV4dE9iamVjdF0pKSB7Ci0gICAgICAgIGlmIChzdWJ2aWV3ID09IHRhcmdl
dCB8fCBmaW5kVmlld0luU3Vidmlld3Moc3VidmlldywgdGFyZ2V0KSkgewotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0JfQotICAgIH0KLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotICAg
IAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTlNWaWV3ICpLV1FLSFRNTFBhcnQ6Om1vdXNlRG93
blZpZXdJZlN0aWxsR29vZCgpCi17Ci0gICAgLy8gU2luY2Ugd2UgaGF2ZSBubyB3YXkgb2YgdHJh
Y2tpbmcgdGhlIGxpZmV0aW1lIG9mIF9tb3VzZURvd25WaWV3LCB3ZSBoYXZlIHRvIGFzc3VtZSB0
aGF0Ci0gICAgLy8gaXQgY291bGQgYmUgZGVhbGxvY2F0ZWQgYWxyZWFkeS4gV2Ugc2VhcmNoIGZv
ciBpdCBpbiBvdXIgc3VidmlldyB0cmVlOyBpZiB3ZSBkb24ndCBmaW5kCi0gICAgLy8gaXQsIHdl
IHNldCBpdCB0byBuaWwuCi0gICAgTlNWaWV3ICptb3VzZURvd25WaWV3ID0gX21vdXNlRG93blZp
ZXc7Ci0gICAgaWYgKCFtb3VzZURvd25WaWV3KSB7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
fQotICAgIEtIVE1MVmlldyAqdG9wS0hUTUxWaWV3ID0gZC0+bV92aWV3OwotICAgIE5TVmlldyAq
dG9wVmlldyA9IHRvcEtIVE1MVmlldyA/IHRvcEtIVE1MVmlldy0+Z2V0VmlldygpIDogbmlsOwot
ICAgIGlmICghdG9wVmlldyB8fCAhZmluZFZpZXdJblN1YnZpZXdzKHRvcFZpZXcsIG1vdXNlRG93
blZpZXcpKSB7Ci0gICAgICAgIF9tb3VzZURvd25WaWV3ID0gbmlsOwotICAgICAgICByZXR1cm4g
bmlsOwotICAgIH0KLSAgICByZXR1cm4gbW91c2VEb3duVmlldzsKLX0KLQotLy8gVGhlIGxpbmsg
ZHJhZyBoeXN0ZXJlc2lzIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIG90aGVycyBiZWNhdXNlIHRo
ZXJlCi0vLyBuZWVkcyB0byBiZSBlbm91Z2ggc3BhY2UgdG8gY2FuY2VsIHRoZSBsaW5rIHByZXNz
IHdpdGhvdXQgc3RhcnRpbmcgYSBsaW5rIGRyYWcsCi0vLyBhbmQgYmVjYXVzZSBkcmFnZ2luZyBs
aW5rcyBpcyByYXJlLgotI2RlZmluZSBMaW5rRHJhZ0h5c3RlcmVzaXMgICAgICAgICAgICAgIDQw
LjAKLSNkZWZpbmUgSW1hZ2VEcmFnSHlzdGVyZXNpcyAgICAgICAgICAgICAgNS4wCi0jZGVmaW5l
IFRleHREcmFnSHlzdGVyZXNpcyAgICAgICAgICAgICAgIDMuMAotI2RlZmluZSBHZW5lcmFsRHJh
Z0h5c3RlcmVzaXMgICAgICAgICAgICAzLjAKLQotI2RlZmluZSBUZXh0RHJhZ0RlbGF5ICAgICAg
ICAgICAgICAgICAgICAwLjE1Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpkcmFnSHlzdGVyZXNpc0V4
Y2VlZGVkKGZsb2F0IGRyYWdMb2NhdGlvblgsIGZsb2F0IGRyYWdMb2NhdGlvblkpIGNvbnN0Ci17
Ci0gICAgaW50IGRyYWdYLCBkcmFnWTsKLSAgICBkLT5tX3ZpZXctPnZpZXdwb3J0VG9Db250ZW50
cygoaW50KWRyYWdMb2NhdGlvblgsIChpbnQpZHJhZ0xvY2F0aW9uWSwgZHJhZ1gsIGRyYWdZKTsK
LSAgICBmbG9hdCBkZWx0YVggPSBRQUJTKGRyYWdYIC0gX21vdXNlRG93blgpOwotICAgIGZsb2F0
IGRlbHRhWSA9IFFBQlMoZHJhZ1kgLSBfbW91c2VEb3duWSk7Ci0KLSAgICBmbG9hdCB0aHJlc2hv
bGQgPSBHZW5lcmFsRHJhZ0h5c3RlcmVzaXM7Ci0gICAgaWYgKF9kcmFnU3JjSXNJbWFnZSkgewot
ICAgICAgICB0aHJlc2hvbGQgPSBJbWFnZURyYWdIeXN0ZXJlc2lzOwotICAgIH0gZWxzZSBpZiAo
X2RyYWdTcmNJc0xpbmspIHsKLSAgICAgICAgdGhyZXNob2xkID0gTGlua0RyYWdIeXN0ZXJlc2lz
OwotICAgIH0gZWxzZSBpZiAoX2RyYWdTcmNJblNlbGVjdGlvbikgewotICAgICAgICB0aHJlc2hv
bGQgPSBUZXh0RHJhZ0h5c3RlcmVzaXM7Ci0gICAgfQotICAgIHJldHVybiBkZWx0YVggPj0gdGhy
ZXNob2xkIHx8IGRlbHRhWSA+PSB0aHJlc2hvbGQ7Ci19Ci0KLS8vIHJldHVybnMgaWYgd2Ugc2hv
dWxkIGNvbnRpbnVlICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpLmUuLCB3aGV0aGVyIGV2ZW50aGFu
ZGxlciBjYW5jZWxlZAotYm9vbCBLV1FLSFRNTFBhcnQ6OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBjb25zdCBRUG9pbnQgJmxvYykgY29uc3QKLXsK
LSAgICBib29sIG5vRGVmYXVsdFByb2MgPSBkLT5tX3ZpZXctPmRpc3BhdGNoRHJhZ0V2ZW50KGV2
ZW50VHlwZSwgX2RyYWdTcmMuZ2V0KCksIGxvYywgX2RyYWdDbGlwYm9hcmQpOwotICAgIHJldHVy
biAhbm9EZWZhdWx0UHJvYzsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6OmV2ZW50TWF5U3RhcnRE
cmFnKE5TRXZlbnQgKmV2ZW50KSBjb25zdAotewotICAgIC8vIFRoaXMgaXMgYSBwcmUtZmxpZ2h0
IGNoZWNrIG9mIHdoZXRoZXIgdGhlIGV2ZW50IG1pZ2h0IGxlYWQgdG8gYSBkcmFnIGJlaW5nIHN0
YXJ0ZWQuICBCZSBjYXJlZnVsCi0gICAgLy8gdGhhdCBpdHMgbG9naWMgbmVlZHMgdG8gc3RheSBp
biBzeW5jIHdpdGgga2h0bWxNb3VzZU1vdmVFdmVudCgpIGFuZCB0aGUgd2F5IHdlIHNldAotICAg
IC8vIF9tb3VzZURvd25NYXlTdGFydERyYWcgaW4ga2h0bWxNb3VzZVByZXNzRXZlbnQKLSAgICAK
LSAgICBpZiAoW2V2ZW50IHR5cGVdICE9IE5TTGVmdE1vdXNlRG93biB8fCBbZXZlbnQgY2xpY2tD
b3VudF0gIT0gMSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEJP
T0wgREhUTUxGbGFnLCBVQUZsYWc7Ci0gICAgW19icmlkZ2UgYWxsb3dESFRNTERyYWc6JkRIVE1M
RmxhZyBVQURyYWc6JlVBRmxhZ107Ci0gICAgaWYgKCFESFRNTEZsYWcgJiYgIVVBRmxhZykgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTlNQb2ludCBsb2MgPSBbZXZlbnQg
bG9jYXRpb25JbldpbmRvd107Ci0gICAgaW50IG1vdXNlRG93blgsIG1vdXNlRG93blk7Ci0gICAg
ZC0+bV92aWV3LT52aWV3cG9ydFRvQ29udGVudHMoKGludClsb2MueCwgKGludClsb2MueSwgbW91
c2VEb3duWCwgbW91c2VEb3duWSk7Ci0gICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyBub2RlSW5m
byh0cnVlLCBmYWxzZSk7Ci0gICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChub2RlSW5m
bywgbW91c2VEb3duWCwgbW91c2VEb3duWSk7Ci0gICAgYm9vbCBzcmNJc0RIVE1MOwotICAgIHJl
dHVybiBub2RlSW5mby5pbm5lck5vZGUoKS0+cmVuZGVyZXIoKS0+ZHJhZ2dhYmxlTm9kZShESFRN
TEZsYWcsIFVBRmxhZywgbW91c2VEb3duWCwgbW91c2VEb3duWSwgc3JjSXNESFRNTCk7Ci19Ci0K
LXZvaWQgS1dRS0hUTUxQYXJ0OjpraHRtbE1vdXNlTW92ZUV2ZW50KE1vdXNlTW92ZUV2ZW50ICpl
dmVudCkKLXsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIGlmIChbX2N1cnJlbnRF
dmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURyYWdnZWQpIHsKLSAgICAJTlNWaWV3ICp2aWV3ID0g
bW91c2VEb3duVmlld0lmU3RpbGxHb29kKCk7Ci0KLSAgICAgICAgaWYgKHZpZXcpIHsKLSAgICAg
ICAgICAgIF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwotICAgICAgICAgICAgW3ZpZXcg
bW91c2VEcmFnZ2VkOl9jdXJyZW50RXZlbnRdOwotICAgICAgICAgICAgX3NlbmRpbmdFdmVudFRv
U3VidmlldyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ2FyZWZ1bCB0aGF0IHRoZSBkcmFnIHN0YXJ0aW5nIGxvZ2ljIHN0YXlzIGluIHN5bmMg
d2l0aCBldmVudE1heVN0YXJ0RHJhZygpCi0gICAgCi0JaWYgKF9tb3VzZURvd25NYXlTdGFydERy
YWcgJiYgIV9kcmFnU3JjKSB7Ci0gICAgICAgICAgICBCT09MIHRlbXBGbGFnMSwgdGVtcEZsYWcy
OwotICAgICAgICAgICAgW19icmlkZ2UgYWxsb3dESFRNTERyYWc6JnRlbXBGbGFnMSBVQURyYWc6
JnRlbXBGbGFnMl07Ci0gICAgICAgICAgICBfZHJhZ1NyY01heUJlREhUTUwgPSB0ZW1wRmxhZzE7
Ci0gICAgICAgICAgICBfZHJhZ1NyY01heUJlVUEgPSB0ZW1wRmxhZzI7Ci0gICAgICAgICAgICBp
ZiAoIV9kcmFnU3JjTWF5QmVESFRNTCAmJiAhX2RyYWdTcmNNYXlCZVVBKSB7Ci0gICAgICAgICAg
ICAgICAgX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGZhbHNlOyAgICAgLy8gbm8gZWxlbWVudCBp
cyBkcmFnZ2FibGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKF9tb3VzZURvd25NYXlTdGFydERyYWcgJiYgIV9kcmFnU3JjKSB7Ci0gICAgICAgICAgICAv
LyB0cnkgdG8gZmluZCBhbiBlbGVtZW50IHRoYXQgd2FudHMgdG8gYmUgZHJhZ2dlZAotICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyBub2RlSW5mbyh0cnVlLCBmYWxzZSk7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KG5vZGVJbmZvLCBfbW91c2VEb3du
WCwgX21vdXNlRG93blkpOwotICAgICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBub2RlSW5mby5p
bm5lck5vZGUoKTsKLSAgICAgICAgICAgIF9kcmFnU3JjID0gKG5vZGUgJiYgbm9kZS0+cmVuZGVy
ZXIoKSkgPyBub2RlLT5yZW5kZXJlcigpLT5kcmFnZ2FibGVOb2RlKF9kcmFnU3JjTWF5QmVESFRN
TCwgX2RyYWdTcmNNYXlCZVVBLCBfbW91c2VEb3duWCwgX21vdXNlRG93blksIF9kcmFnU3JjSXNE
SFRNTCkgOiAwOwotICAgICAgICAgICAgaWYgKCFfZHJhZ1NyYykgewotICAgICAgICAgICAgICAg
IF9tb3VzZURvd25NYXlTdGFydERyYWcgPSBmYWxzZTsgICAgIC8vIG5vIGVsZW1lbnQgaXMgZHJh
Z2dhYmxlCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVy
IHNvbWUgZmFjdHMgYWJvdXQgdGhpcyBzb3VyY2UsIHdoaWxlIHdlIGhhdmUgYSBOb2RlSW5mbyBo
YW5keQotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlSW5mby5VUkxFbGVtZW50KCk7Ci0gICAg
ICAgICAgICAgICAgX2RyYWdTcmNJc0xpbmsgPSBub2RlICYmIG5vZGUtPmlzTGluaygpOwotCi0g
ICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVJbmZvLmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAg
ICAgICAgICAgICAgIF9kcmFnU3JjSXNJbWFnZSA9IG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSAm
JiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCk7Ci0KLSAgICAgICAgICAgICAgICBfZHJhZ1Ny
Y0luU2VsZWN0aW9uID0gaXNQb2ludEluc2lkZVNlbGVjdGlvbihfbW91c2VEb3duWCwgX21vdXNl
RG93blkpOwotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gRm9yIGRyYWdzIHN0YXJ0aW5nIGluIHRoZSBzZWxlY3Rpb24sIHRoZSB1
c2VyIG11c3Qgd2FpdCBiZXR3ZWVuIHRoZSBtb3VzZWRvd24gYW5kIG1vdXNlZHJhZywKLSAgICAg
ICAgLy8gb3IgZWxzZSB3ZSBiYWlsIG9uIHRoZSBkcmFnZ2luZyBzdHVmZiBhbmQgYWxsb3cgc2Vs
ZWN0aW9uIHRvIG9jY3VyCi0gICAgICAgIGlmIChfbW91c2VEb3duTWF5U3RhcnREcmFnICYmIF9k
cmFnU3JjSW5TZWxlY3Rpb24gJiYgW19jdXJyZW50RXZlbnQgdGltZXN0YW1wXSAtIF9tb3VzZURv
d25UaW1lc3RhbXAgPCBUZXh0RHJhZ0RlbGF5KSB7Ci0gICAgICAgICAgICBfbW91c2VEb3duTWF5
U3RhcnREcmFnID0gZmFsc2U7Ci0gICAgICAgICAgICAvLyAuLi5idXQgaWYgdGhpcyB3YXMgdGhl
IGZpcnN0IGNsaWNrIGluIHRoZSB3aW5kb3csIHdlIGRvbid0IGV2ZW4gd2FudCB0byBzdGFydCBz
ZWxlY3Rpb24KLSAgICAgICAgICAgIGlmIChfYWN0aXZhdGlvbkV2ZW50TnVtYmVyID09IFtfY3Vy
cmVudEV2ZW50IGV2ZW50TnVtYmVyXSkgewotICAgICAgICAgICAgICAgIF9tb3VzZURvd25NYXlT
dGFydFNlbGVjdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKF9tb3VzZURvd25NYXlTdGFydERyYWcpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBzdGFy
dGluZyBhIHRleHQvaW1hZ2UvdXJsIGRyYWcsIHNvIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGFuIGFy
cm93Ci0gICAgICAgICAgICBkLT5tX3ZpZXctPnZpZXdwb3J0KCktPnNldEN1cnNvcihRQ3Vyc29y
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOU1BvaW50IGRyYWdMb2NhdGlvbiA9IFtf
Y3VycmVudEV2ZW50IGxvY2F0aW9uSW5XaW5kb3ddOwotICAgICAgICAgICAgaWYgKGRyYWdIeXN0
ZXJlc2lzRXhjZWVkZWQoZHJhZ0xvY2F0aW9uLngsIGRyYWdMb2NhdGlvbi55KSkgewotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE9uY2Ugd2UncmUgcGFzdCB0aGUgaHlzdGVy
ZXNpcyBwb2ludCwgd2UgZG9uJ3Qgd2FudCB0byB0cmVhdCB0aGlzIGdlc3R1cmUgYXMgYSBjbGlj
awotICAgICAgICAgICAgICAgIGQtPm1fdmlldy0+aW52YWxpZGF0ZUNsaWNrKCk7Ci0KLSAgICAg
ICAgICAgICAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBuaWw7ICAgICAgIC8vIHdlIHVzZSB0aGVz
ZSB2YWx1ZXMgaWYgV0MgaXMgb3V0IG9mIHRoZSBsb29wCi0gICAgICAgICAgICAgICAgTlNQb2lu
dCBkcmFnTG9jID0gTlNaZXJvUG9pbnQ7Ci0gICAgICAgICAgICAgICAgTlNEcmFnT3BlcmF0aW9u
IHNyY09wID0gTlNEcmFnT3BlcmF0aW9uTm9uZTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQk9PTCB3Y1dyb3RlUGFzdGVib2FyZCA9IE5POwotICAgICAgICAgICAgICAgIGlmIChf
ZHJhZ1NyY01heUJlREhUTUwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJk
XTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBiZSBkb25lIGJlZm9yZSBvbmRyYWdzdGFy
dCBhZGRzIHR5cGVzIGFuZCBkYXRhIHRvIHRoZSBwYm9hcmQsCi0gICAgICAgICAgICAgICAgICAg
IC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0IGVyYXNlcyBkYXRhIGZyb20gdGhlIGxh
c3QgZHJhZwotICAgICAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6W05T
QXJyYXkgYXJyYXldIG93bmVyOm5pbF07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBmcmVlQ2xpcGJvYXJkKCk7ICAgIC8vIHdvdWxkIG9ubHkgaGFwcGVuIGlmIHdl
IG1pc3NlZCBhIGRyYWdFbmQuICBEbyBpdCBhbnl3YXksIGp1c3QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBudW1iaWZpZWQK
LSAgICAgICAgICAgICAgICAgICAgX2RyYWdDbGlwYm9hcmQgPSBuZXcgS1dRQ2xpcGJvYXJkKHRy
dWUsIHBhc3RlYm9hcmQsIEtXUUNsaXBib2FyZDo6V3JpdGFibGUsIHRoaXMpOwotICAgICAgICAg
ICAgICAgICAgICBfZHJhZ0NsaXBib2FyZC0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGRyYWcgb2YgYW4gZWxlbWVudCwgZ2V0
IHNldCB1cCB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgaW1hZ2UuICBPdGhlcndpc2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2ViS2l0IHdpbGwgZ2VuZXJhdGUgdGhlIGRlZmF1bHQsIHRoZSBlbGVt
ZW50IGRvZXNuJ3Qgb3ZlcnJpZGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChfZHJhZ1NyY0lz
REhUTUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNYLCBzcmNZOwotICAgICAg
ICAgICAgICAgICAgICAgICAgX2RyYWdTcmMtPnJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb24o
c3JjWCwgc3JjWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0NsaXBib2FyZC0+c2V0
RHJhZ0ltYWdlRWxlbWVudChfZHJhZ1NyYy5nZXQoKSwgUVBvaW50KF9tb3VzZURvd25YIC0gc3Jj
WCwgX21vdXNlRG93blkgLSBzcmNZKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIF9tb3VzZURvd25NYXlTdGFydERyYWcg
PSBkaXNwYXRjaERyYWdTcmNFdmVudChkcmFnc3RhcnRFdmVudCwgUVBvaW50KF9tb3VzZURvd25X
aW5YLCBfbW91c2VEb3duV2luWSkpOwotICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRl
IGNsaXBib2FyZCBoZXJlIGFnYWluc3QgYW55bW9yZSBwYXN0ZWJvYXJkIHdyaXRpbmcgZm9yIHNl
Y3VyaXR5LiAgVGhlIGRyYWcKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2UgY2FuIHN0aWxs
IGJlIGNoYW5nZWQgYXMgd2UgZHJhZywgYnV0IG5vdCB0aGUgcGFzdGVib2FyZCBkYXRhLgotICAg
ICAgICAgICAgICAgICAgICBfZHJhZ0NsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KEtXUUNsaXBi
b2FyZDo6SW1hZ2VXcml0YWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoX21vdXNlRG93bk1heVN0YXJ0RHJhZykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZ2F0aGVyIHZhbHVlcyBmcm9tIERIVE1MIGVsZW1lbnQsIGlmIGl0IHNldCBhbnkK
LSAgICAgICAgICAgICAgICAgICAgICAgIF9kcmFnQ2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24o
JnNyY09wKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgTlNBcnJheSAqdHlwZXMgPSBbcGFz
dGVib2FyZCB0eXBlc107Ci0gICAgICAgICAgICAgICAgICAgICAgICB3Y1dyb3RlUGFzdGVib2Fy
ZCA9IHR5cGVzICYmIFt0eXBlcyBjb3VudF0gPiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoX2RyYWdTcmNNYXlCZURIVE1MKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZHJhZ0ltYWdlID0gX2RyYWdDbGlwYm9hcmQtPmRyYWdOU0ltYWdlKCZkcmFnTG9jKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gWXVjaywgZHJhZ1NvdXJjZU1vdmVkVG8oKSBjYW4gYmUgY2FsbGVk
IGFzIGEgcmVzdWx0IG9mIGtpY2tpbmcgb2ZmIHRoZSBkcmFnIHdpdGgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGRyYWdJbWFnZSEgIEJlY2F1c2Ugb2YgdGhhdCBkdW1iIHJlZW50cmFuY3ks
IHdlIG1heSB0aGluayB3ZSd2ZSBub3Qgc3RhcnRlZCB0aGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGRyYWcgd2hlbiB0aGF0IGhhcHBlbnMuICBTbyB3ZSBoYXZlIHRvIGFzc3VtZSBpdCdz
IHN0YXJ0ZWQgYmVmb3JlIHdlIGtpY2sgaXQgb2ZmLgotICAgICAgICAgICAgICAgICAgICAgICAg
X2RyYWdDbGlwYm9hcmQtPnNldERyYWdIYXNTdGFydGVkKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKF9tb3VzZURvd25NYXlTdGFydERyYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgQk9PTCBz
dGFydGVkRHJhZyA9IFtfYnJpZGdlIHN0YXJ0RHJhZ2dpbmdJbWFnZTpkcmFnSW1hZ2UgYXQ6ZHJh
Z0xvYyBvcGVyYXRpb246c3JjT3AgZXZlbnQ6X2N1cnJlbnRFdmVudCBzb3VyY2VJc0RIVE1MOl9k
cmFnU3JjSXNESFRNTCBESFRNTFdyb3RlRGF0YTp3Y1dyb3RlUGFzdGVib2FyZF07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghc3RhcnRlZERyYWcgJiYgX2RyYWdTcmNNYXlCZURIVE1MKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJLaXQgY2FubmVkIHRoZSBkcmFnIGF0IHRoZSBs
YXN0IG1pbnV0ZSAtIHdlIG93ZSBfZHJhZ1NyYyBhIERSQUdFTkQgZXZlbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdlbmRFdmVudCwgUVBvaW50KGRy
YWdMb2NhdGlvbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgX21vdXNlRG93bk1heVN0YXJ0
RHJhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAK
LQotICAgICAgICAgICAgICAgIGlmICghX21vdXNlRG93bk1heVN0YXJ0RHJhZykgewotICAgICAg
ICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgZmFpbGVkIHRvIHN0YXJ0IHRoZSBkcmFnLCBjbGVh
bnVwCi0gICAgICAgICAgICAgICAgICAgIGZyZWVDbGlwYm9hcmQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgX2RyYWdTcmMgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gTm8gbW9yZSBkZWZhdWx0IGhhbmRsaW5nIChsaWtlIHNlbGVjdGlvbiks
IHdoZXRoZXIgd2UncmUgcGFzdCB0aGUgaHlzdGVyZXNpcyBib3VuZHMgb3Igbm90Ci0gICAgICAg
ICAgICByZXR1cm47Ci0JfQotICAgICAgICBpZiAoIV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG9uJ3QgYWxs
b3cgZHJhZ2dpbmcgb3IgY2xpY2sgaGFuZGxpbmcgYWZ0ZXIgd2UndmUgc3RhcnRlZCBzZWxlY3Rp
bmcuCi0gICAgICAgIF9tb3VzZURvd25NYXlTdGFydERyYWcgPSBmYWxzZTsKLSAgICAgICAgZC0+
bV92aWV3LT5pbnZhbGlkYXRlQ2xpY2soKTsKLQotICAgICAgICAvLyBXZSB1c2Uga2h0bWwncyBz
ZWxlY3Rpb24gYnV0IG91ciBvd24gYXV0b3Njcm9sbGluZy4KLSAgICAgICAgW19icmlkZ2UgaGFu
ZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJhZ2dlZDpfY3VycmVudEV2ZW50XTsKLSAgICB9IGVsc2Ug
ewotCS8vIElmIHdlIGFsbG93ZWQgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGJyaWRnZSB0byBoYW5k
bGUgYSBkcmFnCi0JLy8gbGFzdCB0aW1lLCB0aGVuIG1fYk1vdXNlUHJlc3NlZCBtaWdodCBzdGls
bCBiZSBzZXQuIFNvIHdlCi0JLy8gY2xlYXIgaXQgbm93IHRvIG1ha2Ugc3VyZSB0aGUgbmV4dCBt
b3ZlIGFmdGVyIGEgZHJhZwotCS8vIGRvZXNuJ3QgbG9vayBsaWtlIGEgZHJhZy4KLQlkLT5tX2JN
b3VzZVByZXNzZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBLSFRNTFBhcnQ6OmtodG1sTW91c2VN
b3ZlRXZlbnQoZXZlbnQpOwotCi0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLX0KLQotdm9p
ZCBLV1FLSFRNTFBhcnQ6OmRyYWdTb3VyY2VNb3ZlZFRvKGNvbnN0IFFQb2ludCAmbG9jKQotewot
ICAgIGlmIChfZHJhZ1NyYyAmJiBfZHJhZ1NyY01heUJlREhUTUwpIHsKLSAgICAgICAgLy8gZm9y
IG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRsZXIgY2FuY2VscyBkZWZhdWx0IGJlaGF2
aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCi0gICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRy
YWdFdmVudCwgbG9jKTsKLSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpkcmFnU291cmNl
RW5kZWRBdChjb25zdCBRUG9pbnQgJmxvYywgTlNEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbikKLXsK
LSAgICBpZiAoX2RyYWdTcmMgJiYgX2RyYWdTcmNNYXlCZURIVE1MKSB7Ci0gICAgICAgIF9kcmFn
Q2xpcGJvYXJkLT5zZXREZXN0aW5hdGlvbk9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgICAgICAv
LyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFuZGxlciBjYW5jZWxzIGRlZmF1bHQg
YmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKLSAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZl
bnQoZHJhZ2VuZEV2ZW50LCBsb2MpOwotICAgIH0KLSAgICBmcmVlQ2xpcGJvYXJkKCk7Ci0gICAg
X2RyYWdTcmMgPSAwOwotfQotCi0vLyBSZXR1cm5zIHdoZXRoZXIgY2FsbGVyIHNob3VsZCBjb250
aW51ZSB3aXRoICJ0aGUgZGVmYXVsdCBwcm9jZXNzaW5nIiwgd2hpY2ggaXMgdGhlIHNhbWUgYXMg
Ci0vLyB0aGUgZXZlbnQgaGFuZGxlciBOT1Qgc2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlIHRvIGZh
bHNlCi1ib29sIEtXUUtIVE1MUGFydDo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJmV2ZW50VHlwZSwgS1dRQ2xpcGJvYXJkOjpBY2Nlc3NQb2xpY3kgcG9saWN5KQotewotICAg
IE5vZGVJbXBsICp0YXJnZXQgPSBkLT5tX3NlbGVjdGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKLSAg
ICBpZiAoIXRhcmdldCAmJiB4bWxEb2NJbXBsKCkpIHsKLSAgICAgICAgdGFyZ2V0ID0geG1sRG9j
SW1wbCgpLT5ib2R5KCk7Ci0gICAgfQotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIEtXUUNsaXBib2FyZCAqY2xpcGJvYXJkID0gbmV3IEtXUUNs
aXBib2FyZChmYWxzZSwgW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0sIChLV1FDbGlw
Ym9hcmQ6OkFjY2Vzc1BvbGljeSlwb2xpY3kpOwotICAgIGNsaXBib2FyZC0+cmVmKCk7Ci0KLSAg
ICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgRXZlbnRJbXBsICpldnQgPSBuZXcgQ2xpcGJv
YXJkRXZlbnRJbXBsKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgY2xpcGJvYXJkKTsKLSAgICBldnQt
PnJlZigpOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldnQsIGV4Y2VwdGlvbmNvZGUsIHRy
dWUpOwotICAgIGJvb2wgbm9EZWZhdWx0UHJvY2Vzc2luZyA9IGV2dC0+ZGVmYXVsdFByZXZlbnRl
ZCgpOwotICAgIGV2dC0+ZGVyZWYoKTsKLQotICAgIC8vIGludmFsaWRhdGUgY2xpcGJvYXJkIGhl
cmUgZm9yIHNlY3VyaXR5Ci0gICAgY2xpcGJvYXJkLT5zZXRBY2Nlc3NQb2xpY3koS1dRQ2xpcGJv
YXJkOjpOdW1iKTsKLSAgICBjbGlwYm9hcmQtPmRlcmVmKCk7Ci0KLSAgICByZXR1cm4gIW5vRGVm
YXVsdFByb2Nlc3Npbmc7Ci19Ci0KLS8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQgYW5kIG9uYmVm
b3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1zLiAgVGhleQot
Ly8gYWxzbyBzZW5kIG9uYmVmb3JlY29weSwgYXBwYXJlbnRseSBmb3Igc3ltbWV0cnksIGJ1dCBp
dCBkb2Vzbid0IGFmZmVjdCB0aGUgbWVudSBpdGVtcy4KLS8vIFdlIG5lZWQgdG8gdXNlIG9uYmVm
b3JlY29weSBhcyBhIHJlYWwgbWVudSBlbmFibGVyIGJlY2F1c2Ugd2UgYWxsb3cgZWxlbWVudHMg
dGhhdCBhcmUgbm90Ci0vLyBub3JtYWxseSBzZWxlY3RhYmxlIHRvIGltcGxlbWVudCBjb3B5L3Bh
c3RlIChsaWtlIGRpdnMsIG9yIGEgZG9jdW1lbnQgYm9keSkuCi0KLWJvb2wgS1dRS0hUTUxQYXJ0
OjptYXlDdXQoKQotewotICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChiZWZvcmVjdXRFdmVu
dCwgS1dRQ2xpcGJvYXJkOjpOdW1iKTsKLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6Om1heUNvcHko
KQotewotICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChiZWZvcmVjb3B5RXZlbnQsIEtXUUNs
aXBib2FyZDo6TnVtYik7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjptYXlQYXN0ZSgpCi17Ci0g
ICAgcmV0dXJuICFkaXNwYXRjaENQUEV2ZW50KGJlZm9yZXBhc3RlRXZlbnQsIEtXUUNsaXBib2Fy
ZDo6TnVtYik7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0Ojp0cnlDdXQoKQotewotICAgIC8vIE11
c3QgYmUgZG9uZSBiZWZvcmUgb25jdXQgYWRkcyB0eXBlcyBhbmQgZGF0YSB0byB0aGUgcGJvYXJk
LAotICAgIC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0IGVyYXNlcyBkYXRhIGZyb20g
dGhlIGxhc3QgY29weS9wYXN0ZS4KLSAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2Fy
ZF0gZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5XSBvd25lcjpuaWxdOwotCi0gICAgcmV0dXJu
ICFkaXNwYXRjaENQUEV2ZW50KGN1dEV2ZW50LCBLV1FDbGlwYm9hcmQ6OldyaXRhYmxlKTsKLX0K
LQotYm9vbCBLV1FLSFRNTFBhcnQ6OnRyeUNvcHkoKQotewotICAgIC8vIE11c3QgYmUgZG9uZSBi
ZWZvcmUgb25jb3B5IGFkZHMgdHlwZXMgYW5kIGRhdGEgdG8gdGhlIHBib2FyZCwKLSAgICAvLyBh
bHNvIGRvbmUgZm9yIHNlY3VyaXR5LCBhcyBpdCBlcmFzZXMgZGF0YSBmcm9tIHRoZSBsYXN0IGNv
cHkvcGFzdGUuCi0gICAgW1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGRlY2xhcmVU
eXBlczpbTlNBcnJheSBhcnJheV0gb3duZXI6bmlsXTsKLQotICAgIHJldHVybiAhZGlzcGF0Y2hD
UFBFdmVudChjb3B5RXZlbnQsIEtXUUNsaXBib2FyZDo6V3JpdGFibGUpOwotfQotCi1ib29sIEtX
UUtIVE1MUGFydDo6dHJ5UGFzdGUoKQotewotICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChw
YXN0ZUV2ZW50LCBLV1FDbGlwYm9hcmQ6OlJlYWRhYmxlKTsKLX0KLQotdm9pZCBLV1FLSFRNTFBh
cnQ6OmtodG1sTW91c2VSZWxlYXNlRXZlbnQoTW91c2VSZWxlYXNlRXZlbnQgKmV2ZW50KQotewot
ICAgIE5TVmlldyAqdmlldyA9IG1vdXNlRG93blZpZXdJZlN0aWxsR29vZCgpOwotICAgIGlmICgh
dmlldykgewotICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgZmlyc3QgY2xpY2sgaW4gdGhlIHdp
bmRvdywgd2UgZG9uJ3QgZXZlbiB3YW50IHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24uCi0gICAgICAg
IC8vIFRoaXMgY2FzZSBvY2N1cnMgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSBkcmFnZ2FibGUg
ZWxlbWVudCwgc2luY2Ugd2UgaGF2ZSB0byBwcm9jZXNzCi0gICAgICAgIC8vIHRoZSBtb3VzZSBk
b3duIGFuZCBkcmFnIGV2ZW50cyB0byBzZWUgaWYgd2UgbWlnaHQgc3RhcnQgYSBkcmFnLiAgRm9y
IG90aGVyIGZpcnN0IGNsaWNrcwotICAgICAgICAvLyBpbiBhIHdpbmRvdywgd2UganVzdCBkb24n
dCBhY2NlcHRGaXJzdE1vdXNlLCBhbmQgdGhlIHdob2xlIGRvd24tZHJhZy11cCBzZXF1ZW5jZSBn
ZXRzCi0gICAgICAgIC8vIGlnbm9yZWQgdXBzdHJlYW0gb2YgdGhpcyBsYXllci4KLSAgICAgICAg
aWYgKF9hY3RpdmF0aW9uRXZlbnROdW1iZXIgIT0gW19jdXJyZW50RXZlbnQgZXZlbnROdW1iZXJd
KSB7Ci0gICAgICAgICAgICBLSFRNTFBhcnQ6OmtodG1sTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgX3NlbmRpbmdF
dmVudFRvU3VidmlldyA9IHRydWU7Ci0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW3Zp
ZXcgbW91c2VVcDpfY3VycmVudEV2ZW50XTsKLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwot
ICAgIF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKLX0KLQotdm9pZCBLV1FLSFRNTFBh
cnQ6OmNsZWFyVGltZXJzKEtIVE1MVmlldyAqdmlldykKLXsKLSAgICBpZiAodmlldykgewotICAg
ICAgICB2aWV3LT51bnNjaGVkdWxlUmVsYXlvdXQoKTsKLSAgICAgICAgaWYgKHZpZXctPnBhcnQo
KSkgewotICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9IHZpZXctPnBhcnQoKS0+
eG1sRG9jSW1wbCgpOwotICAgICAgICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5yZW5k
ZXJlcigpICYmIGRvY3VtZW50LT5yZW5kZXJlcigpLT5sYXllcigpKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50LT5yZW5kZXJlcigpLT5sYXllcigpLT5zdXNwZW5kTWFycXVlZXMoKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OmNsZWFyVGltZXJzKCkKLXsKLSAg
ICBjbGVhclRpbWVycyhkLT5tX3ZpZXcpOwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6cGFzc1N1
YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE5vZGVJbXBsOjpNb3VzZUV2ZW50ICZldmVudCkKLXsKLSAg
ICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIHN3aXRjaCAoW19jdXJyZW50RXZlbnQgdHlw
ZV0pIHsKLSAgICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbXBs
ICpub2RlID0gZXZlbnQuaW5uZXJOb2RlLmdldCgpOwotICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCAq
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+
KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0
LT5pc0tIVE1MVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIEtIVE1MUGFydCAqc3ViZnJhbWVQYXJ0ID0gc3RhdGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHdp
ZGdldCktPnBhcnQoKTsKLSAgICAgICAgICAgIGlmICghc3ViZnJhbWVQYXJ0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFtLV1Eoc3ViZnJhbWVQYXJ0KS0+YnJp
ZGdlKCkgbW91c2VNb3ZlZDpfY3VycmVudEV2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgIAljYXNlIE5TTGVmdE1vdXNlRG93bjogewotICAg
ICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBldmVudC5pbm5lck5vZGUuZ2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHJlbmRl
cmVyKS0+d2lkZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0tI
VE1MVmlldygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlm
ICghcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lk
Z2V0ICo+KHJlbmRlcmVyKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBfbW91c2VEb3duV2FzSW5TdWJmcmFtZSA9IHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5TTGVmdE1v
dXNlVXA6IHsKLSAgICAgICAgICAgIGlmICghX21vdXNlRG93bldhc0luU3ViZnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBO
U1ZpZXcgKnZpZXcgPSBtb3VzZURvd25WaWV3SWZTdGlsbEdvb2QoKTsKLSAgICAgICAgICAgIGlm
ICghdmlldykgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEFTU0VSVCghX3NlbmRpbmdFdmVudFRvU3Vidmlldyk7Ci0gICAgICAgICAg
ICBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gdHJ1ZTsKLQkgICAgW3ZpZXcgbW91c2VVcDpfY3Vy
cmVudEV2ZW50XTsKLQkgICAgX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNlOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURy
YWdnZWQ6IHsKLSAgICAgICAgICAgIGlmICghX21vdXNlRG93bldhc0luU3ViZnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBO
U1ZpZXcgKnZpZXcgPSBtb3VzZURvd25WaWV3SWZTdGlsbEdvb2QoKTsKLSAgICAgICAgICAgIGlm
ICghdmlldykgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEFTU0VSVCghX3NlbmRpbmdFdmVudFRvU3Vidmlldyk7Ci0gICAgICAgICAg
ICBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gdHJ1ZTsKLQkgICAgW3ZpZXcgbW91c2VEcmFnZ2Vk
Ol9jdXJyZW50RXZlbnRdOwotCSAgICBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05T
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6cGFzc1doZWVs
RXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGVJbXBsICpub2RlKQotewotICAgIEtXUV9CTE9DS19FWENF
UFRJT05TOwotICAgICAgICAKLSAgICBpZiAoW19jdXJyZW50RXZlbnQgdHlwZV0gIT0gTlNTY3Jv
bGxXaGVlbCB8fCBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3IHx8ICFub2RlKSAKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGVsc2UgewotICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlz
V2lkZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFFXaWRnZXQgKndp
ZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyZW5kZXJlciktPndpZGdldCgpOwot
ICAgICAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICBOU1ZpZXcgKm5vZGVWaWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7Ci0gICAg
ICAgIEFTU0VSVChub2RlVmlldyk7Ci0gICAgICAgIEFTU0VSVChbbm9kZVZpZXcgc3VwZXJ2aWV3
XSk7Ci0gICAgICAgIE5TVmlldyAqdmlldyA9IFtub2RlVmlldyBoaXRUZXN0Oltbbm9kZVZpZXcg
c3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6W19jdXJyZW50RXZlbnQgbG9jYXRpb25JbldpbmRvd10g
ZnJvbVZpZXc6bmlsXV07Ci0gICAgCi0gICAgICAgIEFTU0VSVCh2aWV3KTsKLSAgICAgICAgX3Nl
bmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0gICAgICAgIFt2aWV3IHNjcm9sbFdoZWVsOl9j
dXJyZW50RXZlbnRdOwotICAgICAgICBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAgICAgICAgIAotICAgIEtXUV9VTkJMT0NL
X0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6
bW91c2VEb3duKE5TRXZlbnQgKmV2ZW50KQotewotICAgIEtIVE1MVmlldyAqdiA9IGQtPm1fdmll
dzsKLSAgICBpZiAoIXYgfHwgX3NlbmRpbmdFdmVudFRvU3VidmlldykgewotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICBwcmVwYXJlRm9y
VXNlckFjdGlvbigpOwotCi0gICAgX21vdXNlRG93blZpZXcgPSBuaWw7Ci0gICAgX2RyYWdTcmMg
PSAwOwotICAgIAotICAgIE5TRXZlbnQgKm9sZEN1cnJlbnRFdmVudCA9IF9jdXJyZW50RXZlbnQ7
Ci0gICAgX2N1cnJlbnRFdmVudCA9IEtXUVJldGFpbihldmVudCk7Ci0gICAgTlNQb2ludCBsb2Mg
PSBbZXZlbnQgbG9jYXRpb25JbldpbmRvd107Ci0gICAgX21vdXNlRG93bldpblggPSAoaW50KWxv
Yy54OwotICAgIF9tb3VzZURvd25XaW5ZID0gKGludClsb2MueTsKLSAgICBkLT5tX3ZpZXctPnZp
ZXdwb3J0VG9Db250ZW50cyhfbW91c2VEb3duV2luWCwgX21vdXNlRG93bldpblksIF9tb3VzZURv
d25YLCBfbW91c2VEb3duWSk7Ci0gICAgX21vdXNlRG93blRpbWVzdGFtcCA9IFtldmVudCB0aW1l
c3RhbXBdOwotCi0gICAgX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGZhbHNlOwotICAgIF9tb3Vz
ZURvd25NYXlTdGFydFNlbGVjdCA9IGZhbHNlOwotCi0gICAgUU1vdXNlRXZlbnQga0V2ZW50KFFF
dmVudDo6TW91c2VCdXR0b25QcmVzcywgZXZlbnQpOwotICAgIHYtPnZpZXdwb3J0TW91c2VQcmVz
c0V2ZW50KCZrRXZlbnQpOwotICAgIAotICAgIEFTU0VSVChfY3VycmVudEV2ZW50ID09IGV2ZW50
KTsKLSAgICBLV1FSZWxlYXNlKGV2ZW50KTsKLSAgICBfY3VycmVudEV2ZW50ID0gb2xkQ3VycmVu
dEV2ZW50OwotCi0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLX0KLQotdm9pZCBLV1FLSFRN
TFBhcnQ6Om1vdXNlRHJhZ2dlZChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBLSFRNTFZpZXcgKnYg
PSBkLT5tX3ZpZXc7Ci0gICAgaWYgKCF2IHx8IF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotCi0gICAg
TlNFdmVudCAqb2xkQ3VycmVudEV2ZW50ID0gX2N1cnJlbnRFdmVudDsKLSAgICBfY3VycmVudEV2
ZW50ID0gS1dRUmV0YWluKGV2ZW50KTsKLQotICAgIFFNb3VzZUV2ZW50IGtFdmVudChRRXZlbnQ6
Ok1vdXNlTW92ZSwgZXZlbnQpOwotICAgIHYtPnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoJmtFdmVu
dCk7Ci0gICAgCi0gICAgQVNTRVJUKF9jdXJyZW50RXZlbnQgPT0gZXZlbnQpOwotICAgIEtXUVJl
bGVhc2UoZXZlbnQpOwotICAgIF9jdXJyZW50RXZlbnQgPSBvbGRDdXJyZW50RXZlbnQ7Ci0KLSAg
ICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6bW91c2VV
cChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBLSFRNTFZpZXcgKnYgPSBkLT5tX3ZpZXc7Ci0gICAg
aWYgKCF2IHx8IF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotCi0gICAgTlNFdmVudCAqb2xkQ3VycmVu
dEV2ZW50ID0gX2N1cnJlbnRFdmVudDsKLSAgICBfY3VycmVudEV2ZW50ID0gS1dRUmV0YWluKGV2
ZW50KTsKLQotICAgIC8vIE91ciBiZWhhdmlvciBoZXJlIGlzIGEgbGl0dGxlIGRpZmZlcmVudCB0
aGF0IFF0LiBRdCBhbHdheXMgc2VuZHMKLSAgICAvLyBhIG1vdXNlIHJlbGVhc2UgZXZlbnQsIGV2
ZW4gZm9yIGEgZG91YmxlIGNsaWNrLiBUbyBjb3JyZWN0IHByb2JsZW1zCi0gICAgLy8gaW4ga2h0
bWwncyBET00gY2xpY2sgZXZlbnQgaGFuZGxpbmcgd2UgZG8gbm90IHNlbmQgYSByZWxlYXNlIGhl
cmUKLSAgICAvLyBmb3IgYSBkb3VibGUgY2xpY2suIEluc3RlYWQgd2Ugc2VuZCB0aGF0IGV2ZW50
IGZyb20gS0hUTUxWaWV3J3MKLSAgICAvLyB2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2tFdmVudC4g
Tm90ZSBhbHNvIHRoYXQgdGhlIHRoaXJkIGNsaWNrIG9mCi0gICAgLy8gYSB0cmlwbGUgY2xpY2sg
aXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBjbGljaywgYnV0IHRoZSBmb3VydGggaXMgdGhlbgotICAg
IC8vIHRyZWF0ZWQgYXMgYW5vdGhlciBkb3VibGUgY2xpY2suIEhlbmNlIHRoZSAiJSAyIiBiZWxv
dy4KLSAgICBpbnQgY2xpY2tDb3VudCA9IFtldmVudCBjbGlja0NvdW50XTsKLSAgICBpZiAoY2xp
Y2tDb3VudCA+IDAgJiYgY2xpY2tDb3VudCAlIDIgPT0gMCkgewotICAgICAgICBRTW91c2VFdmVu
dCBkb3VibGVDbGlja0V2ZW50KFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaywgZXZlbnQpOwot
ICAgICAgICB2LT52aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2tFdmVudCgmZG91YmxlQ2xpY2tFdmVu
dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUU1vdXNlRXZlbnQgcmVsZWFzZUV2ZW50KFFFdmVu
dDo6TW91c2VCdXR0b25SZWxlYXNlLCBldmVudCk7Ci0gICAgICAgIHYtPnZpZXdwb3J0TW91c2VS
ZWxlYXNlRXZlbnQoJnJlbGVhc2VFdmVudCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChfY3Vy
cmVudEV2ZW50ID09IGV2ZW50KTsKLSAgICBLV1FSZWxlYXNlKGV2ZW50KTsKLSAgICBfY3VycmVu
dEV2ZW50ID0gb2xkQ3VycmVudEV2ZW50OwotICAgIAotICAgIF9tb3VzZURvd25WaWV3ID0gbmls
OwotCi0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLX0KLQotLyoKLSBBIGhhY2sgZm9yIHRo
ZSBiZW5lZml0IG9mIEFLJ3MgUG9wVXBCdXR0b24sIHdoaWNoIHVzZXMgdGhlIENhcmJvbiBtZW51
IG1hbmFnZXIsIHdoaWNoIHRodXMKLSBlYXRzIGFsbCBzdWJzZXF1ZW50IGV2ZW50cyBhZnRlciBp
dCBpcyBzdGFydHMgaXRzIG1vZGFsIHRyYWNraW5nIGxvb3AuICBBZnRlciB0aGUgaW50ZXJhY3Rp
b24KLSBpcyBkb25lLCB0aGlzIHJvdXRpbmUgaXMgdXNlZCB0byBmaXggdGhpbmdzIHVwLiAgV2hl
biBhIG1vdXNlIGRvd24gc3RhcnRlZCB1cyB0cmFja2luZyBpbgotIHRoZSB3aWRnZXQsIHdlIHBv
c3QgYSBmYWtlIG1vdXNlIHVwIHRvIGJhbGFuY2UgdGhlIG1vdXNlIGRvd24gd2Ugc3RhcnRlZCB3
aXRoLiBXaGVuIGEgCi0ga2V5IGRvd24gc3RhcnRlZCB1cyB0cmFja2luZyBpbiB0aGUgd2lkZ2V0
LCB3ZSBwb3N0IGEgZmFrZSBrZXkgdXAgdG8gYmFsYW5jZSB0aGluZ3Mgb3V0LgotIEluIGFkZGl0
aW9uLCB3ZSBwb3N0IGEgZmFrZSBtb3VzZU1vdmVkIHRvIGdldCB0aGUgY3Vyc29yIGluIHN5bmMg
d2l0aCB3aGF0ZXZlciB3ZSBoYXBwZW4gdG8gCi0gYmUgb3ZlciBhZnRlciB0aGUgdHJhY2tpbmcg
aXMgZG9uZS4KLSAqLwotdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaWRn
ZXRUcmFja2luZyhOU0V2ZW50ICppbml0aWF0aW5nRXZlbnQpCi17Ci0gICAgS1dRX0JMT0NLX0VY
Q0VQVElPTlM7Ci0KLSAgICBfc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7Ci0gICAgaW50
IGV2ZW50VHlwZSA9IFtpbml0aWF0aW5nRXZlbnQgdHlwZV07Ci0gICAgaWYgKGV2ZW50VHlwZSA9
PSBOU0xlZnRNb3VzZURvd24gfHwgZXZlbnRUeXBlID09IE5TS2V5RG93bikgewotCU5TRXZlbnQg
KmZha2VFdmVudCA9IG5pbDsKLQlpZiAoZXZlbnRUeXBlID09IE5TTGVmdE1vdXNlRG93bikgewot
CSAgICBmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VV
cAotCQkJCSAgICBsb2NhdGlvbjpbaW5pdGlhdGluZ0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddCi0J
CQkJbW9kaWZpZXJGbGFnczpbaW5pdGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxhZ3NdCi0JCQkJICAg
IHRpbWVzdGFtcDpbaW5pdGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KLQkJCQl3aW5kb3dOdW1iZXI6
W2luaXRpYXRpbmdFdmVudCB3aW5kb3dOdW1iZXJdCi0JCQkJCWNvbnRleHQ6W2luaXRpYXRpbmdF
dmVudCBjb250ZXh0XQotCQkJCSAgICBldmVudE51bWJlcjpbaW5pdGlhdGluZ0V2ZW50IGV2ZW50
TnVtYmVyXQotCQkJCSAgICBjbGlja0NvdW50Oltpbml0aWF0aW5nRXZlbnQgY2xpY2tDb3VudF0K
LQkJCQkgICAgcHJlc3N1cmU6W2luaXRpYXRpbmdFdmVudCBwcmVzc3VyZV1dOwotCQotCSAgICBt
b3VzZVVwKGZha2VFdmVudCk7Ci0JfQotCWVsc2UgeyAvLyBldmVudFR5cGUgPT0gTlNLZXlEb3du
Ci0JICAgIGZha2VFdmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6TlNLZXlVcAotCQkJ
CSAgICBsb2NhdGlvbjpbaW5pdGlhdGluZ0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddCi0JCQkgICAg
ICAgbW9kaWZpZXJGbGFnczpbaW5pdGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxhZ3NdCi0JCQkJICAg
dGltZXN0YW1wOltpbml0aWF0aW5nRXZlbnQgdGltZXN0YW1wXQotCQkJCXdpbmRvd051bWJlcjpb
aW5pdGlhdGluZ0V2ZW50IHdpbmRvd051bWJlcl0KLQkJCQkgICAgIGNvbnRleHQ6W2luaXRpYXRp
bmdFdmVudCBjb250ZXh0XQotCQkJCSAgY2hhcmFjdGVyczpbaW5pdGlhdGluZ0V2ZW50IGNoYXJh
Y3RlcnNdIAotCQkgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOltpbml0aWF0aW5nRXZlbnQg
Y2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXSAKLQkJCQkgICBpc0FSZXBlYXQ6W2luaXRpYXRp
bmdFdmVudCBpc0FSZXBlYXRdIAotCQkJCSAgICAga2V5Q29kZTpbaW5pdGlhdGluZ0V2ZW50IGtl
eUNvZGVdXTsKLQkgICAga2V5RXZlbnQoZmFrZUV2ZW50KTsKLQl9Ci0JLy8gRklYTUU6ICBXZSBz
aG91bGQgcmVhbGx5IGdldCB0aGUgY3VycmVudCBtb2RpZmllckZsYWdzIGhlcmUsIGJ1dCB0aGVy
ZSdzIG5vIHdheSB0byBwb2xsCi0JLy8gdGhlbSBpbiBDb2NvYSwgYW5kIGJlY2F1c2UgdGhlIGV2
ZW50IHN0cmVhbSB3YXMgc3RvbGVuIGJ5IHRoZSBDYXJib24gbWVudSBjb2RlIHdlIGhhdmUKLQkv
LyBubyB1cC10by1kYXRlIGNhY2hlIG9mIHRoZW0gYW55d2hlcmUuCi0JZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotCQkJCSAgICAgICBsb2NhdGlv
bjpbW19icmlkZ2Ugd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9j
YXRpb25dXQotCQkJCSAgbW9kaWZpZXJGbGFnczpbaW5pdGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxh
Z3NdCi0JCQkJICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZlbnQgdGltZXN0YW1wXQotCQkJ
CSAgIHdpbmRvd051bWJlcjpbaW5pdGlhdGluZ0V2ZW50IHdpbmRvd051bWJlcl0KLQkJCQkJY29u
dGV4dDpbaW5pdGlhdGluZ0V2ZW50IGNvbnRleHRdCi0JCQkJICAgIGV2ZW50TnVtYmVyOjAKLQkJ
CQkgICAgIGNsaWNrQ291bnQ6MAotCQkJCSAgICAgICBwcmVzc3VyZTowXTsKLQltb3VzZU1vdmVk
KGZha2VFdmVudCk7Ci0gICAgfQotICAgIAotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci19
Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojptb3VzZU1vdmVkKE5TRXZlbnQgKmV2ZW50KQotewotICAg
IEtIVE1MVmlldyAqdiA9IGQtPm1fdmlldzsKLSAgICAvLyBSZWplY3QgYSBtb3VzZSBtb3ZlZCBp
ZiB0aGUgYnV0dG9uIGlzIGRvd24gLSBzY3Jld3MgdXAgdHJhY2tpbmcgZHVyaW5nIGF1dG9zY3Jv
bGwKLSAgICAvLyBUaGVzZSBoYXBwZW4gYmVjYXVzZSBXZWJLaXQgc29tZXRpbWVzIGhhcyB0byBm
YWtlIHVwIG1vdmVkIGV2ZW50cy4KLSAgICBpZiAoIXYgfHwgZC0+bV9iTW91c2VQcmVzc2VkIHx8
IF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAgIE5TRXZlbnQgKm9sZEN1cnJlbnRFdmVu
dCA9IF9jdXJyZW50RXZlbnQ7Ci0gICAgX2N1cnJlbnRFdmVudCA9IEtXUVJldGFpbihldmVudCk7
Ci0gICAgCi0gICAgUU1vdXNlRXZlbnQga0V2ZW50KFFFdmVudDo6TW91c2VNb3ZlLCBldmVudCk7
Ci0gICAgdi0+dmlld3BvcnRNb3VzZU1vdmVFdmVudCgma0V2ZW50KTsKLSAgICAKLSAgICBBU1NF
UlQoX2N1cnJlbnRFdmVudCA9PSBldmVudCk7Ci0gICAgS1dRUmVsZWFzZShldmVudCk7Ci0gICAg
X2N1cnJlbnRFdmVudCA9IG9sZEN1cnJlbnRFdmVudDsKLQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQ
VElPTlM7Ci19Ci0KLS8vIENhbGxlZCBhcyB3ZSB3YWxrIHVwIHRoZSBlbGVtZW50IGNoYWluIGZv
ciBub2RlcyB3aXRoIENTUyBwcm9wZXJ0eSAta2h0bWwtdXNlci1kcmFnID09IGF1dG8KLWJvb2wg
S1dRS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUoTm9kZUltcGwqIG5vZGUsIGludCB4LCBp
bnQgeSkgY29uc3QKLXsKLSAgICAvLyBXZSBhc3N1bWUgdGhhdCBXZWJLaXQgb25seSBjYXJlcyBh
Ym91dCBkcmFnZ2luZyB0aGluZ3MgdGhhdCBjYW4gYmUgbGVhZiBub2RlcyAodGV4dCwgaW1hZ2Vz
LCB1cmxzKS4KLSAgICAvLyBUaGlzIHNhdmVzIGEgYnVuY2ggb2YgZXhwZW5zaXZlIGNhbGxzIChj
cmVhdGluZyBXQyBhbmQgV0sgZWxlbWVudCBkaWN0cykgYXMgd2Ugd2FsayBmYXJ0aGVyIHVwCi0g
ICAgLy8gdGhlIG5vZGUgaGllcmFyY2h5LCBhbmQgd2UgYWxzbyBkb24ndCBoYXZlIHRvIGNvb2sg
dXAgYSB3YXkgdG8gYXNrIFdLIGFib3V0IG5vbi1sZWFmIG5vZGVzCi0gICAgLy8gKHNpbmNlIHJp
Z2h0IG5vdyBXSyBqdXN0IGhpdC10ZXN0cyB1c2luZyBhIGNhY2hlZCBsYXN0TW91c2VEb3duKS4K
LSAgICBpZiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSAmJiBkLT5tX3ZpZXcpIHsKLSAgICAgICAg
aW50IHdpbmRvd1gsIHdpbmRvd1k7Ci0gICAgICAgIGQtPm1fdmlldy0+Y29udGVudHNUb1ZpZXdw
b3J0KHgsIHksIHdpbmRvd1gsIHdpbmRvd1kpOwotICAgICAgICBOU1BvaW50IGV2ZW50TG9jID0g
e3dpbmRvd1gsIHdpbmRvd1l9OwotICAgICAgICByZXR1cm4gW19icmlkZ2UgbWF5U3RhcnREcmFn
QXRFdmVudExvY2F0aW9uOmV2ZW50TG9jXTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4g
Tk87Ci0gICAgfQotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6c2VuZENvbnRleHRNZW51RXZlbnQo
TlNFdmVudCAqZXZlbnQpCi17Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBkLT5tX2RvYzsKLSAg
ICBLSFRNTFZpZXcgKnYgPSBkLT5tX3ZpZXc7Ci0gICAgaWYgKCFkb2MgfHwgIXYpIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgc3dhbGxvd0V2ZW50OwotICAgIEtX
UV9CTE9DS19FWENFUFRJT05TOwotCi0gICAgTlNFdmVudCAqb2xkQ3VycmVudEV2ZW50ID0gX2N1
cnJlbnRFdmVudDsKLSAgICBfY3VycmVudEV2ZW50ID0gS1dRUmV0YWluKGV2ZW50KTsKLSAgICAK
LSAgICBRTW91c2VFdmVudCBxZXYoUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzLCBldmVudCk7Ci0K
LSAgICBpbnQgeG0sIHltOwotICAgIHYtPnZpZXdwb3J0VG9Db250ZW50cyhxZXYueCgpLCBxZXYu
eSgpLCB4bSwgeW0pOwotCi0gICAgTm9kZUltcGw6Ok1vdXNlRXZlbnQgbWV2KHFldi5zdGF0ZUFm
dGVyKCksIE5vZGVJbXBsOjpNb3VzZVByZXNzKTsKLSAgICBkb2MtPnByZXBhcmVNb3VzZUV2ZW50
KGZhbHNlLCB4bSwgeW0sICZtZXYpOwotCi0gICAgc3dhbGxvd0V2ZW50ID0gdi0+ZGlzcGF0Y2hN
b3VzZUV2ZW50KGNvbnRleHRtZW51RXZlbnQsCi0gICAgICAgIG1ldi5pbm5lck5vZGUuZ2V0KCks
IHRydWUsIDAsICZxZXYsIHRydWUsIE5vZGVJbXBsOjpNb3VzZVByZXNzKTsKLSAgICBpZiAoIXN3
YWxsb3dFdmVudCAmJiAhaXNQb2ludEluc2lkZVNlbGVjdGlvbih4bSwgeW0pICYmCi0gICAgICAg
IChbX2JyaWRnZSBzZWxlY3RXb3JkQmVmb3JlTWVudUV2ZW50XSB8fCBbX2JyaWRnZSBpc0VkaXRh
YmxlXSB8fCBtZXYuaW5uZXJOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSkgewotICAgICAgICBz
ZWxlY3RDbG9zZXN0V29yZEZyb21Nb3VzZUV2ZW50KCZxZXYsIG1ldi5pbm5lck5vZGUuZ2V0KCks
IHhtLCB5bSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKF9jdXJyZW50RXZlbnQgPT0gZXZlbnQpOwot
ICAgIEtXUVJlbGVhc2UoZXZlbnQpOwotICAgIF9jdXJyZW50RXZlbnQgPSBvbGRDdXJyZW50RXZl
bnQ7Ci0KLSAgICByZXR1cm4gc3dhbGxvd0V2ZW50OwotCi0gICAgS1dRX1VOQkxPQ0tfRVhDRVBU
SU9OUzsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RydWN0IExpc3RJdGVtSW5mbyB7Ci0g
ICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotfTsKLQotTlNGaWxlV3JhcHBl
ciAqS1dRS0hUTUxQYXJ0OjpmaWxlV3JhcHBlckZvckVsZW1lbnQoRWxlbWVudEltcGwgKmUpCi17
Ci0gICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKLSAgICBLV1FfQkxPQ0tfRVhDRVBU
SU9OUzsKLSAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHIgPSBlLT5nZXRBdHRyaWJ1
dGUoc3JjQXR0cik7Ci0gICAgaWYgKCFhdHRyLmlzRW1wdHkoKSkgewotICAgICAgICBOU1VSTCAq
VVJMID0gY29tcGxldGVVUkwoYXR0ci5xc3RyaW5nKCkpLmdldE5TVVJMKCk7Ci0gICAgICAgIHdy
YXBwZXIgPSBbX2JyaWRnZSBmaWxlV3JhcHBlckZvclVSTDpVUkxdOwotICAgIH0gICAgCi0gICAg
aWYgKCF3cmFwcGVyKSB7Ci0gICAgICAgIFJlbmRlckltYWdlICpyZW5kZXJlciA9IHN0YXRpY19j
YXN0PFJlbmRlckltYWdlICo+KGUtPnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAocmVuZGVyZXIt
PmlzSW1hZ2UoKSkgewotICAgICAgICAgICAgd3JhcHBlciA9IFtbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOltyZW5kZXJlci0+cGl4bWFwKCkuaW1hZ2VS
ZW5kZXJlcigpIFRJRkZSZXByZXNlbnRhdGlvbl1dOwotICAgICAgICAgICAgW3dyYXBwZXIgc2V0
UHJlZmVycmVkRmlsZW5hbWU6QCJpbWFnZS50aWZmIl07Ci0gICAgICAgICAgICBbd3JhcHBlciBh
dXRvcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gd3JhcHBlcjsKLQot
ICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gbmlsOwotfQotCi1zdGF0
aWMgRWxlbWVudEltcGwgKmxpc3RQYXJlbnQoRWxlbWVudEltcGwgKml0ZW0pCi17Ci0gICAgd2hp
bGUgKCFpdGVtLT5oYXNUYWdOYW1lKHVsVGFnKSAmJiAhaXRlbS0+aGFzVGFnTmFtZShvbFRhZykp
IHsKLSAgICAgICAgaXRlbSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVu
dE5vZGUoKSk7Ci0gICAgICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gaXRlbTsKLX0KLQotc3RhdGljIE5vZGVJbXBsKiBpc1RleHRGaXJzdEluTGlz
dEl0ZW0oTm9kZUltcGwgKmUpCi17Ci0gICAgaWYgKCFlLT5pc1RleHROb2RlKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIE5vZGVJbXBsKiBwYXIgPSBlLT5wYXJlbnROb2RlKCk7Ci0gICAgd2hp
bGUgKHBhcikgewotICAgICAgICBpZiAocGFyLT5maXJzdENoaWxkKCkgIT0gZSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBpZiAocGFyLT5oYXNUYWdOYW1lKGxpVGFnKSkKLSAgICAg
ICAgICAgIHJldHVybiBwYXI7Ci0gICAgICAgIGUgPSBwYXI7Ci0gICAgICAgIHBhciA9IHBhci0+
cGFyZW50Tm9kZSgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gRklYTUU6IFRoaXMg
Y29sbG9zYWwgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVmYWN0b3JlZCBpbnRvIG1haW50YWluYWJs
ZSBzbWFsbGVyIGJpdHMuCi0KLSNkZWZpbmUgQlVMTEVUX0NIQVIgMHgyMDIyCi0jZGVmaW5lIFNR
VUFSRV9DSEFSIDB4MjVBQQotI2RlZmluZSBDSVJDTEVfQ0hBUiAweDI1RTYKLQotTlNBdHRyaWJ1
dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYnV0ZWRTdHJpbmcoTm9kZUltcGwgKl9zdGFy
dCwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlSW1wbCAqZW5kTm9kZSwgaW50IGVuZE9mZnNldCkKLXsK
LSAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQ7Ci0gICAgS1dRX0JMT0NLX0VY
Q0VQVElPTlM7Ci0KLSAgICBOb2RlSW1wbCAqIF9zdGFydE5vZGUgPSBfc3RhcnQ7Ci0KLSAgICBp
ZiAoX3N0YXJ0Tm9kZSA9PSBuaWwpIHsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAg
ICByZXN1bHQgPSBbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07Ci0KLSAgICBib29sIGhhc05ld0xpbmUgPSB0cnVlOwotICAgIGJvb2wgYWRkZWRT
cGFjZSA9IHRydWU7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwZW5kaW5nU3R5bGVkU3BhY2Ug
PSBuaWw7Ci0gICAgYm9vbCBoYXNQYXJhZ3JhcGhCcmVhayA9IHRydWU7Ci0gICAgY29uc3QgRWxl
bWVudEltcGwgKmxpbmtTdGFydE5vZGUgPSAwOwotICAgIHVuc2lnbmVkIGxpbmtTdGFydExvY2F0
aW9uID0gMDsKLSAgICBRUHRyTGlzdDxFbGVtZW50SW1wbD4gbGlzdEl0ZW1zOwotICAgIFFWYWx1
ZUxpc3Q8TGlzdEl0ZW1JbmZvPiBsaXN0SXRlbUxvY2F0aW9uczsKLSAgICBmbG9hdCBtYXhNYXJr
ZXJXaWR0aCA9IDA7Ci0gICAgCi0gICAgTm9kZUltcGwgKm4gPSBfc3RhcnROb2RlOwotICAgIAot
ICAgIC8vIElmIHRoZSBmaXJzdCBpdGVtIGlzIHRoZSBlbnRpcmUgdGV4dCBvZiBhIGxpc3QgaXRl
bSwgdXNlIHRoZSBsaXN0IGl0ZW0gbm9kZSBhcyB0aGUgc3RhcnQgb2YgdGhlIAotICAgIC8vIHNl
bGVjdGlvbiwgbm90IHRoZSB0ZXh0IG5vZGUuICBUaGUgdXNlcidzIGludGVudCB3YXMgcHJvYmFi
bHkgdG8gc2VsZWN0IHRoZSBsaXN0LgotICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgc3RhcnRP
ZmZzZXQgPT0gMCkgewotICAgICAgICBOb2RlSW1wbCAqc3RhcnRMaXN0Tm9kZSA9IGlzVGV4dEZp
cnN0SW5MaXN0SXRlbShfc3RhcnROb2RlKTsKLSAgICAgICAgaWYgKHN0YXJ0TGlzdE5vZGUpewot
ICAgICAgICAgICAgX3N0YXJ0Tm9kZSA9IHN0YXJ0TGlzdE5vZGU7Ci0gICAgICAgICAgICBuID0g
X3N0YXJ0Tm9kZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB3aGlsZSAobikgewotICAg
ICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKLSAgICAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLT5mb250KCkuZ2V0TlNG
b250KCk7Ci0gICAgICAgICAgICBib29sIG5lZWRTcGFjZSA9IHBlbmRpbmdTdHlsZWRTcGFjZSAh
PSBuaWw7Ci0gICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGhhc05ld0xpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkZWRTcGFjZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRTcGFjZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBbcGVuZGluZ1N0eWxlZFNwYWNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAg
ICBwZW5kaW5nU3R5bGVkU3BhY2UgPSBuaWw7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xp
bmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUVN0cmluZyB0
ZXh0OwotICAgICAgICAgICAgICAgIFFTdHJpbmcgc3RyID0gbi0+bm9kZVZhbHVlKCkucXN0cmlu
ZygpOwotICAgICAgICAgICAgICAgIGludCBzdGFydCA9IChuID09IF9zdGFydE5vZGUpID8gc3Rh
cnRPZmZzZXQgOiAtMTsKLSAgICAgICAgICAgICAgICBpbnQgZW5kID0gKG4gPT0gZW5kTm9kZSkg
PyBlbmRPZmZzZXQgOiAtMTsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZFNwYWNlICYmICFhZGRlZFNwYWNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpICYmIGxp
bmtTdGFydExvY2F0aW9uID09IFtyZXN1bHQgbGVuZ3RoXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJp
YnV0ZWRTdHJpbmc6cGVuZGluZ1N0eWxlZFNwYWNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBydW5TdGFydCA9IChzdGFydCA9PSAtMSkg
PyAwIDogc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnVuRW5kID0gKGVuZCA9
PSAtMSkgPyBzdHIubGVuZ3RoKCkgOiBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9IHN0ci5taWQocnVuU3RhcnQsIHJ1bkVuZC1ydW5TdGFydCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBbcGVuZGluZ1N0eWxlZFNwYWNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcGVuZGluZ1N0eWxlZFNwYWNlID0gbmlsOwotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkZWRTcGFjZSA9IHN0cltydW5FbmQtMV0uZGlyZWN0aW9uKCkgPT0gUUNoYXI6OkRpcldTOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQqPihyZW5kZXJlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHRPYmot
PmZpcnN0VGV4dEJveCgpICYmIHN0ci5sZW5ndGgoKSA+IDAgJiYgIWFkZGVkU3BhY2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vIHJ1bnMsIGJ1dCB3ZSBkbyBo
YXZlIGEgbGVuZ3RoLiAgVGhpcyBtZWFucyB3ZSBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2hpdGVzcGFjZSB0aGF0IGNvbGxhcHNlZCBhd2F5IGF0IHRoZSBlbmQgb2Yg
YSBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJyAnOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkZWRTcGFjZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dE9iai0+Zmlyc3RUZXh0Qm94KCk7
IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBydW5TdGFydCA9IChzdGFydCA9PSAtMSkgPyBib3gtPm1fc3RhcnQgOiBz
dGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ1bkVuZCA9IChlbmQg
PT0gLTEpID8gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbiA6IGVuZDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuRW5kID0ga01pbihydW5FbmQsIGJveC0+bV9zdGFydCArIGJv
eC0+bV9sZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVuU3RhcnQg
Pj0gYm94LT5tX3N0YXJ0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
dW5TdGFydCA8IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChib3ggPT0gdGV4dE9iai0+Zmlyc3RUZXh0Qm94KCkgJiYg
Ym94LT5tX3N0YXJ0ID09IHJ1blN0YXJ0ICYmIHJ1blN0YXJ0ID4gMCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRTcGFjZSA9IHRydWU7IC8vIGNvbGxhcHNl
ZCBzcGFjZSBhdCB0aGUgc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkU3BhY2UgJiYg
IWFkZGVkU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGVuZGluZ1N0eWxlZFNwYWNlICE9IG5pbCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgJiYgbGlua1N0YXJ0TG9jYXRp
b24gPT0gW3Jlc3VsdCBsZW5ndGhdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpwZW5kaW5nU3R5
bGVkU3BhY2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0g
JyAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgcnVuVGV4dCA9IHN0ci5taWQocnVuU3RhcnQsIHJ1bkVuZCAtIHJ1
blN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1blRleHQucmVw
bGFjZSgnXG4nLCAnICcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dCArPSBydW5UZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5l
eHRSdW5TdGFydCA9IGJveC0+bmV4dFRleHRCb3goKSA/IGJveC0+bmV4dFRleHRCb3goKS0+bV9z
dGFydCA6IHN0ci5sZW5ndGgoKTsgLy8gY29sbGFwc2VkIHNwYWNlIGJldHdlZW4gcnVucyBvciBh
dCB0aGUgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkU3BhY2Ug
PSBuZXh0UnVuU3RhcnQgPiBydW5FbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbcGVuZGluZ1N0eWxlZFNwYWNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGVuZGluZ1N0eWxlZFNwYWNlID0gbmlsOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkZWRTcGFjZSA9IHN0cltydW5FbmQtMV0uZGlyZWN0aW9u
KCkgPT0gUUNoYXI6OkRpcldTOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kICE9IC0xICYmIHJ1bkVuZCA+PSBlbmQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCByZW5kZXJlci0+YmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbCgpKTsKLSAgICAKLSAgICAgICAgICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA+
IDAgfHwgbmVlZFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKmF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAg
ICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5jb2xvcigpLmlz
VmFsaWQoKSAmJiBxQWxwaGEoc3R5bGUtPmNvbG9yKCkucmdiKCkpICE9IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmNvbG9yKCkpIGZv
cktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBxQWxw
aGEoc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLnJnYigpKSAhPSAwKQotICAgICAgICAgICAgICAg
ICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBoYXNQYXJhZ3JhcGhCcmVhayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzog
cGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
W3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBpZiAobmVlZFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBb
cGVuZGluZ1N0eWxlZFNwYWNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgcGVu
ZGluZ1N0eWxlZFNwYWNlID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiICIgYXR0cmlidXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG91ciBzaW1wbGUg
SFRNTCAtPiBBU0NJSSB0cmFuc2Zvcm1hdGlvbjoKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHRl
eHQ7Ci0gICAgICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoYVRhZykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2ls
bCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXR0
cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5l
eHQgc2libGluZyAKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgotICAgICAg
ICAgICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAg
ICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4o
bik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKGJyVGFnKSkgewot
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgIGhh
c05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFt
ZShsaVRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4dDsKLSAgICAg
ICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RUZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVu
dEltcGwqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOwotICAg
ICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAg
ICAgICAgICAgICBpbmZvLmVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9j
YXRpb25zLmFwcGVuZCAoaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBh
cmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0
ZW0qPihyZW5kZXJlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRo
ID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6RElTQzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2Uga2h0bWw6OkNJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFS
RToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilT
UVVBUkVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1hcmtlciA9
IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtp
dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2VyV2lkdGggPSBb
Zm9udCB3aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhN
YXJrZXJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RU
ZXh0ICs9ICdcdCc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKmF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNv
bG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUt
PmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbYXR0cnMgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpKSBmb3JL
ZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0cmli
dXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBh
cnRpYWxTdHJpbmddOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIFtw
YXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKG9sVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHVs
VGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xp
bmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZSh0ZFRh
ZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUodGhUYWcpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKGhyVGFnKSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShkZFRhZykgfHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoZGxUYWcpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKGR0VGFnKSB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShwcmVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKGRpdlRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAg
ICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG4tPmhhc1RhZ05hbWUocFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUodHJUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKGgxVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShoMlRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
aDNUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKGg0VGFn
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShoNVRhZykgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoaDZUYWcpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vIEluIGNlcnRhaW4gY2FzZXMsIGVtaXQgYSBwYXJhZ3JhcGggYnJlYWsuCi0gICAgICAgICAg
ICAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSByZW5kZXJlci0+Y29sbGFwc2VkTWFyZ2luQm90
dG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5odG1sRm9u
dCgpLmdldEZvbnREZWYoKS5jb21wdXRlZFBpeGVsU2l6ZSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFoYXNQYXJhZ3JhcGhCcmVhaykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJhZ3Jh
cGhCcmVhayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChuLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRp
bmdTdHlsZWRTcGFjZSAhPSBuaWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5r
U3RhcnRMb2NhdGlvbiA9PSBbcmVzdWx0IGxlbmd0aF0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOnBl
bmRpbmdTdHlsZWRTcGFjZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBbcGVuZGluZ1N0eWxl
ZFNwYWNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0eWxlZFNw
YWNlID0gbmlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIE5T
RmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKLSAgICAgICAgICAgICAgICAgICAgTlNUZXh0QXR0YWNo
bWVudCAqYXR0YWNobWVudCA9IFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhGaWxl
V3JhcHBlcjpmaWxlV3JhcHBlcl07Ci0gICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqaVN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhB
dHRhY2htZW50OmF0dGFjaG1lbnRdOwotICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVu
ZEF0dHJpYnV0ZWRTdHJpbmc6IGlTdHJpbmddOwotICAgICAgICAgICAgICAgICAgICBbYXR0YWNo
bWVudCByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygpXTsKLSAgICAgICAgICAgICAgICBb
cmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmddOwotICAgICAgICAg
ICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG4gPT0gZW5kTm9kZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIE5vZGVJbXBsICpuZXh0ID0gbi0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoIW5leHQp
IHsKLSAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgd2hpbGUgKCFuZXh0ICYmIG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgUVN0
cmluZyB0ZXh0OwotICAgICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAg
IGlmIChuID09IGVuZE5vZGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBu
ZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKLQotICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
YVRhZykpIHsKLSAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0
ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAg
ICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2Ug
Y3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCi0gICAgICAg
ICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4g
ZWxlbWVudHMuCi0gICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5r
U3RhcnROb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VV
UkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0
KCkpLT5jb21wbGV0ZVVSTChocmVmLnFzdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwotICAgICAg
ICAgICAgICAgICAgICBOU1JhbmdlIHRlbXBSYW5nZSA9IHsgbGlua1N0YXJ0TG9jYXRpb24sIFty
ZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbiB9OyAvLyB3b3JrYXJvdW5kIGZvciA0MjEz
MzE0Ci0gICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJp
YnV0ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOnRlbXBSYW5nZV07Ci0gICAgICAgICAgICAgICAgICAg
IGxpbmtTdGFydE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUob2xUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
dWxUYWcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAg
ICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUobGlUYWcpKSB7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0gbGlzdEl0ZW1zLmNvdW50
KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAgICAg
ICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4pewotICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnNbaV0uZW5kID0gW3Jlc3VsdCBsZW5ndGhdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRy
dWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUodGhUYWcpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoaHJUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoZGRUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoZGxUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoZHRU
YWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUocHJlVGFnKSB8fAot
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoZGl2VGFnKSkgewotICAgICAgICAg
ICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4n
OwotICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKHBUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUodHJUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
aDFUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoaDJUYWcpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoaDNUYWcpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoaDRUYWcpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoaDVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoaDZUYWcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQot
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgLy8gQW4g
ZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhl
c2UgdHlwZXMgb2YgdGFncywKLSAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhl
ciBoZXJlLgotICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxT
dHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5n
ZXROU1N0cmluZygpXTsKLSAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzpwYXJ0aWFsU3RyaW5nXTsKLSAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG5leHQ7Ci0gICAgfQotICAgIAotICAgIFtwZW5kaW5n
U3R5bGVkU3BhY2UgcmVsZWFzZV07Ci0gICAgCi0gICAgLy8gQXBwbHkgcGFyYWdyYXBoIHN0eWxl
cyBmcm9tIG91dHNpZGUgaW4uICBUaGlzIGVuc3VyZXMgdGhhdCBuZXN0ZWQgbGlzdHMgY29ycmVj
dGx5Ci0gICAgLy8gb3ZlcnJpZGUgdGhlaXIgcGFyZW50J3MgcGFyYWdyYXBoIHN0eWxlLgotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKLSAgICAg
ICAgRWxlbWVudEltcGwgKmU7Ci0gICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOwotCi0jaWZkZWYg
UE9TSVRJT05fTElTVAotICAgICAgICBOb2RlSW1wbCAqY29udGFpbmluZ0Jsb2NrOwotICAgICAg
ICBpbnQgY29udGFpbmluZ0Jsb2NrWCwgY29udGFpbmluZ0Jsb2NrWTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgdGhlIG91dGVybW9zdCBjb250YWluaW5n
IGJsb2NrLiAgQWxsIHBhcmFncmFwaAotICAgICAgICAvLyBzdHlsZXMgYW5kIHRhYnMgc2hvdWxk
IGJlIHJlbGF0aXZlIHRvIHRoaXMgcG9zaXRpb24uICBTbywgdGhlIGhvcml6b250YWwgcG9zaXRp
b24gb2YgCi0gICAgICAgIC8vIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCAoaW4gdGhlIHJlc3VsdGlu
ZyBhdHRyaWJ1dGVkIHN0cmluZykgd2lsbCBiZSByZWxhdGl2ZSB0byBwb3NpdGlvbiAKLSAgICAg
ICAgLy8gb2YgdGhlIG91dGVybW9zdCBjb250YWluaW5nIGJsb2NrLgotICAgICAgICBpZiAoY291
bnQgPiAwKXsKLSAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IF9zdGFydE5vZGU7Ci0gICAg
ICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKXsK
LSAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPnBhcmVu
dE5vZGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jay0+cmVu
ZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbihjb250YWluaW5nQmxvY2tYLCBjb250YWluaW5nQmxv
Y2tZKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgY291bnQ7IGkrKyl7Ci0gICAgICAgICAgICBlID0gbGlzdEl0ZW1zLmF0KGkpOwotICAgICAg
ICAgICAgaW5mbyA9IGxpc3RJdGVtTG9jYXRpb25zW2ldOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoaW5mby5lbmQgPCBpbmZvLnN0YXJ0KQotICAgICAgICAgICAgICAgIGluZm8uZW5k
ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0ICpyID0gZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHls
ZSA9IHItPnN0eWxlKCk7Ci0KLSAgICAgICAgICAgIGludCByeDsKLSAgICAgICAgICAgIE5TRm9u
dCAqZm9udCA9IHN0eWxlLT5mb250KCkuZ2V0TlNGb250KCk7Ci0gICAgICAgICAgICBmbG9hdCBw
b2ludFNpemUgPSBbZm9udCBwb2ludFNpemVdOwotCi0jaWZkZWYgUE9TSVRJT05fTElTVAotICAg
ICAgICAgICAgaW50IHJ5OwotICAgICAgICAgICAgci0+YWJzb2x1dGVQb3NpdGlvbihyeCwgcnkp
OwotICAgICAgICAgICAgcnggLT0gY29udGFpbmluZ0Jsb2NrWDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHRleHQgaXMgaW5kZW50ZWQgYXQgbGVhc3QgZW5v
dWdoIHRvIGFsbG93IGZvciB0aGUgbWFya2Vycy4KLSAgICAgICAgICAgIHJ4ID0gTUFYKHJ4LCAo
aW50KW1heE1hcmtlcldpZHRoKTsKLSNlbHNlCi0gICAgICAgICAgICByeCA9IChpbnQpTUFYKG1h
eE1hcmtlcldpZHRoLCBwb2ludFNpemUpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIC8vIFRoZSBi
dWxsZXQgdGV4dCB3aWxsIGJlIHJpZ2h0IGFsaWduZWQgYXQgdGhlIGZpcnN0IHRhYiBtYXJrZXIs
IGZvbGxvd2VkCi0gICAgICAgICAgICAvLyBieSBhIHNwYWNlLCBmb2xsb3dlZCBieSB0aGUgbGlz
dCBpdGVtIHRleHQuICBUaGUgc3BhY2UgaXMgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgIC8vIHBp
Y2tlZCBhcyBwb2ludFNpemUqMi8zLiAgVGhlIHNwYWNlIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRo
ZSB0ZXh0IGl0ZW0KLSAgICAgICAgICAgIC8vIGlzIGVzdGFibGlzaGVkIGJ5IGEgbGVmdCBhbGln
bmVkIHRhYiwgb24gc3Vic2VxdWVudCBsaW5lcyBpdCdzIGVzdGFibGlzaGVkCi0gICAgICAgICAg
ICAvLyBieSB0aGUgaGVhZCBpbmRlbnQuCi0gICAgICAgICAgICBOU011dGFibGVQYXJhZ3JhcGhT
dHlsZSAqbXBzID0gW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF07Ci0gICAg
ICAgICAgICBbbXBzIHNldEZpcnN0TGluZUhlYWRJbmRlbnQ6IDBdOwotICAgICAgICAgICAgW21w
cyBzZXRIZWFkSW5kZW50OiByeF07Ci0gICAgICAgICAgICBbbXBzIHNldFRhYlN0b3BzOltOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbW1tOU1RleHRU
YWIgYWxsb2NdIGluaXRXaXRoVHlwZTpOU1JpZ2h0VGFiU3RvcFR5cGUgbG9jYXRpb246cngtKHBv
aW50U2l6ZSoyLzMpXSBhdXRvcmVsZWFzZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbW1tO
U1RleHRUYWIgYWxsb2NdIGluaXRXaXRoVHlwZTpOU0xlZnRUYWJTdG9wVHlwZSBsb2NhdGlvbjpy
eF0gYXV0b3JlbGVhc2VdLAotICAgICAgICAgICAgICAgICAgICAgICAgbmlsXV07Ci0gICAgICAg
ICAgICBOU1JhbmdlIHRlbXBSYW5nZSA9IHsgaW5mby5zdGFydCwgaW5mby5lbmQtaW5mby5zdGFy
dCB9OyAvLyB3b3JrYXJvdW5kIGZvciA0MjEzMzE0Ci0gICAgICAgICAgICBbcmVzdWx0IGFkZEF0
dHJpYnV0ZTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZSB2YWx1ZTptcHMgcmFuZ2U6dGVt
cFJhbmdlXTsKLSAgICAgICAgICAgIFttcHMgcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKLQotICAg
IHJldHVybiBuaWw7Ci19Ci0KLVFSZWN0IEtXUUtIVE1MUGFydDo6c2VsZWN0aW9uUmVjdCgpIGNv
bnN0Ci17Ci0gICAgaWYoIXhtbERvY0ltcGwoKSl7Ci0gICAgICAgIHJldHVybiBRUmVjdCgpOwot
ICAgIH0KLQotICAgIFJlbmRlckNhbnZhcyAqcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlckNhbnZh
cyAqPih4bWxEb2NJbXBsKCktPnJlbmRlcmVyKCkpOwotICAgIGlmICghcm9vdCkgewotICAgICAg
ICByZXR1cm4gUVJlY3QoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcm9vdC0+c2VsZWN0aW9uUmVj
dCgpOwotfQotCi0vLyByZXR1cm5zIE5TUmVjdCBiZWNhdXNlIGdvaW5nIHRocm91Z2ggUVJlY3Qg
d291bGQgdHJ1bmNhdGUgYW55IGZsb2F0cwotTlNSZWN0IEtXUUtIVE1MUGFydDo6dmlzaWJsZVNl
bGVjdGlvblJlY3QoKSBjb25zdAotewotICAgIGlmICghZC0+bV92aWV3KSB7Ci0gICAgICAgIHJl
dHVybiBOU1plcm9SZWN0OwotICAgIH0KLSAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IGQtPm1f
dmlldy0+Z2V0RG9jdW1lbnRWaWV3KCk7Ci0gICAgaWYgKCFkb2N1bWVudFZpZXcpIHsKLSAgICAg
ICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0gICAgfQotICAgIHJldHVybiBOU0ludGVyc2VjdGlvblJl
Y3Qoc2VsZWN0aW9uUmVjdCgpLCBbZG9jdW1lbnRWaWV3IHZpc2libGVSZWN0XSk7ICAgICAKLX0K
LQotdm9pZCBLV1FLSFRNTFBhcnQ6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKSBjb25z
dAotewotICAgIFFSZWN0IHJlY3Q7Ci0gICAgCi0gICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0
ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNBUkVUOgotICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlvbigpLmNhcmV0UmVjdCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpS
QU5HRToKLSAgICAgICAgICAgIHJlY3QgPSBzZWxlY3Rpb25SZWN0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNO
b3ROdWxsKCkpOwotICAgIGlmIChzZWxlY3Rpb25TdGFydCgpICYmIHNlbGVjdGlvblN0YXJ0KCkt
PnJlbmRlcmVyKCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gc2VsZWN0aW9uU3Rh
cnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIXNlbGVjdGlvbkVuZCgpIHx8ICFzZWxlY3Rpb25FbmQoKS0+
cmVuZGVyZXIoKSB8fCAoc2VsZWN0aW9uRW5kKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCkgPT0gbGF5ZXIpKTsKLSAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJl
Y3QsIFJlbmRlckxheWVyOjpnQWxpZ25DZW50ZXJBbHdheXMsIFJlbmRlckxheWVyOjpnQWxpZ25D
ZW50ZXJBbHdheXMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1OU0ltYWdlICpLV1FLSFRNTFBh
cnQ6OmltYWdlRnJvbVJlY3QoTlNSZWN0IHJlY3QpIGNvbnN0Ci17Ci0gICAgTlNWaWV3ICp2aWV3
ID0gZC0+bV92aWV3LT5nZXREb2N1bWVudFZpZXcoKTsKLSAgICBpZiAoIXZpZXcpIHsKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgCi0gICAgTlNJbWFnZSAqcmVzdWx0SW1hZ2U7Ci0g
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgTlNSZWN0IGJvdW5kcyA9IFt2aWV3
IGJvdW5kc107Ci0gICAgcmVzdWx0SW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNp
emU6cmVjdC5zaXplXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBpZiAocmVjdC5zaXplLndpZHRoICE9
IDAgJiYgcmVjdC5zaXplLmhlaWdodCAhPSAwKSB7Ci0gICAgICAgIFtyZXN1bHRJbWFnZSBzZXRG
bGlwcGVkOllFU107Ci0gICAgICAgIFtyZXN1bHRJbWFnZSBsb2NrRm9jdXNdOwotCi0gICAgICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotCi0gICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBi
b3VuZHMub3JpZ2luLnggLSByZWN0Lm9yaWdpbi54LCBib3VuZHMub3JpZ2luLnkgLSByZWN0Lm9y
aWdpbi55KTsKLSAgICAgICAgW3ZpZXcgZHJhd1JlY3Q6cmVjdF07Ci0gICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAgICAgW3Jlc3VsdEltYWdlIHVubG9ja0Zv
Y3VzXTsKLSAgICAgICAgW3Jlc3VsdEltYWdlIHNldEZsaXBwZWQ6Tk9dOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHRJbWFnZTsKLQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAg
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotTlNJbWFnZSAqS1dRS0hUTUxQYXJ0OjpzZWxlY3Rpb25J
bWFnZSgpIGNvbnN0Ci17Ci0gICAgX2RyYXdTZWxlY3Rpb25Pbmx5ID0gdHJ1ZTsgIC8vIGludm9r
ZSBzcGVjaWFsIGRyYXdpbmcgbW9kZQotICAgIE5TSW1hZ2UgKnJlc3VsdCA9IGltYWdlRnJvbVJl
Y3QodmlzaWJsZVNlbGVjdGlvblJlY3QoKSk7Ci0gICAgX2RyYXdTZWxlY3Rpb25Pbmx5ID0gZmFs
c2U7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTlNJbWFnZSAqS1dRS0hUTUxQYXJ0OjpzbmFw
c2hvdERyYWdJbWFnZShOb2RlSW1wbCAqbm9kZSwgTlNSZWN0ICppbWFnZVJlY3QsIE5TUmVjdCAq
ZWxlbWVudFJlY3QpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikgewotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIH0KLSAgICAKLSAgICByZW5kZXJlci0+dXBkYXRlRHJhZ1N0YXRlKHRydWUpOyAgICAvLyBt
YXJrIGRyYWdnZWQgbm9kZXMgKHNvIHRoZXkgcGljayB1cCB0aGUgcmlnaHQgQ1NTKQotICAgIGQt
Pm1fZG9jLT51cGRhdGVMYXlvdXQoKTsgICAgICAgIC8vIGZvcmNlcyBzdHlsZSByZWNhbGMgLSBu
ZWVkZWQgc2luY2UgY2hhbmdpbmcgdGhlIGRyYWcgc3RhdGUgbWlnaHQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSBuZXcgc3R5bGVzLCBwbHVzIEpTIGNv
dWxkIGhhdmUgY2hhbmdlZCBvdGhlciB0aGluZ3MKLSAgICBRUmVjdCB0b3BMZXZlbFJlY3Q7Ci0g
ICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExl
dmVsUmVjdCk7Ci0KLSAgICBfZWxlbWVudFRvRHJhdyA9IG5vZGU7ICAgICAgICAgICAgICAvLyBp
bnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUKLSAgICBOU0ltYWdlICpyZXN1bHQg
PSBpbWFnZUZyb21SZWN0KHBhaW50aW5nUmVjdCk7Ci0gICAgcmVuZGVyZXItPnVwZGF0ZURyYWdT
dGF0ZShmYWxzZSk7Ci0gICAgZC0+bV9kb2MtPnVwZGF0ZUxheW91dCgpOwotICAgIF9lbGVtZW50
VG9EcmF3ID0gMDsKLQotICAgIGlmIChlbGVtZW50UmVjdCkgewotICAgICAgICAqZWxlbWVudFJl
Y3QgPSB0b3BMZXZlbFJlY3Q7Ci0gICAgfQotICAgIGlmIChpbWFnZVJlY3QpIHsKLSAgICAgICAg
KmltYWdlUmVjdCA9IHBhaW50aW5nUmVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUmVuZGVyU3R5bGUgKktXUUtIVE1MUGFydDo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2Rl
SW1wbCAqJm5vZGVUb1JlbW92ZSkgY29uc3QKLXsKLSAgICBub2RlVG9SZW1vdmUgPSAwOwotCi0g
ICAgaWYgKCF4bWxEb2NJbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChkLT5tX3Nl
bGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUG9zaXRpb24g
cG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0
aW9uLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAoIXBvcy5pblJl
bmRlcmVkQ29udGVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlSW1wbCAqbm9kZSA9
IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAg
ICBpZiAoIWQtPm1fdHlwaW5nU3R5bGUpCi0gICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpOwotCi0gICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBs
ICpzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVsZW1lbnROUyh4aHRtbE5hbWVz
cGFjZVVSSSwgInNwYW4iLCBleGNlcHRpb25Db2RlKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uQ29k
ZSA9PSAwKTsKLQotICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7Ci0KLSAgICBzdHlsZUVsZW1lbnQt
PnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGQtPm1fdHlwaW5nU3R5bGUtPmNzc1RleHQoKS5pbXBs
KCksIGV4Y2VwdGlvbkNvZGUpOwotICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwotICAg
IAotICAgIFRleHRJbXBsICp0ZXh0ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5v
ZGUoIiIpOwotICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQodGV4dCwgZXhjZXB0aW9uQ29k
ZSk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0KLSAgICBub2RlLT5wYXJlbnRO
b2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgQVNT
RVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7Ci0KLSAgICBzdHlsZUVsZW1lbnQtPmRlcmVmKCk7Ci0K
LSAgICBub2RlVG9SZW1vdmUgPSBzdHlsZUVsZW1lbnQ7ICAgIAotICAgIHJldHVybiBzdHlsZUVs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCk7Ci19Ci0KLU5TRm9udCAqS1dRS0hUTUxQYXJ0Ojpm
b250Rm9yU2VsZWN0aW9uKGJvb2wgKmhhc011bHRpcGxlRm9udHMpIGNvbnN0Ci17Ci0gICAgaWYg
KGhhc011bHRpcGxlRm9udHMpCi0gICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7Ci0K
LSAgICBpZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBOb2RlSW1wbCAq
bm9kZVRvUmVtb3ZlOwotICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCi0KLSAgICAgICAg
TlNGb250ICpyZXN1bHQgPSAwOwotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1
bHQgPSBzdHlsZS0+Zm9udCgpLmdldE5TRm9udCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGVUb1JlbW92ZSkgewotICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGU7Ci0gICAgICAgICAg
ICBub2RlVG9SZW1vdmUtPnJlbW92ZShleGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIEFTU0VS
VChleGNlcHRpb25Db2RlID09IDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7Ci0KLSAgICBSZWZQdHI8UmFuZ2VJ
bXBsPiByYW5nZSA9IGQtPm1fc2VsZWN0aW9uLnRvUmFuZ2UoKTsKLSAgICBOb2RlSW1wbCAqc3Rh
cnROb2RlID0gcmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCkubm9kZSgpOwotICAgIGlmIChz
dGFydE5vZGUgIT0gbmlsKSB7Ci0gICAgICAgIE5vZGVJbXBsICpwYXN0RW5kID0gcmFuZ2UtPnBh
c3RFbmROb2RlKCk7Ci0gICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVu
dHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBh
dCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRp
ZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBuaWwgYWxzby4KLSAgICAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IHN0YXJ0Tm9kZTsgbiAmJiBuICE9IHBhc3RFbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBuLT5yZW5kZXJl
cigpOwotICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBo
YXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAg
ICAgTlNGb250ICpmID0gcmVuZGVyZXItPnN0eWxlKCktPmZvbnQoKS5nZXROU0ZvbnQoKTsKLSAg
ICAgICAgICAgIGlmIChmb250ID09IG5pbCkgewotICAgICAgICAgICAgICAgIGZvbnQgPSBmOwot
ICAgICAgICAgICAgICAgIGlmICghaGFzTXVsdGlwbGVGb250cykKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbnQgIT0gZikgewotICAgICAgICAg
ICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmb250OwotfQot
Ci1OU0RpY3Rpb25hcnkgKktXUUtIVE1MUGFydDo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25T
dGFydCgpIGNvbnN0Ci17Ci0gICAgTm9kZUltcGwgKm5vZGVUb1JlbW92ZTsKLSAgICBSZW5kZXJT
dHlsZSAqc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7Ci0gICAg
aWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKnJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotCi0gICAgaWYg
KHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpLmFscGhhKCkgIT0gMCkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihz
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWVdOwotCi0gICAgaWYgKHN0eWxlLT5mb250KCkuZ2V0TlNGb250KCkpCi0gICAgICAgIFty
ZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdOwotCi0gICAgaWYgKHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSAmJiBzdHls
ZS0+Y29sb3IoKSAhPSBibGFjaykKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihz
dHlsZS0+Y29sb3IoKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0K
LSAgICBTaGFkb3dEYXRhICpzaGFkb3cgPSBzdHlsZS0+dGV4dFNoYWRvdygpOwotICAgIGlmIChz
aGFkb3cpIHsKLSAgICAgICAgTlNTaGFkb3cgKnMgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgW3Mgc2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoc2hhZG93LT54LCBzaGFkb3ct
PnkpXTsKLSAgICAgICAgW3Mgc2V0U2hhZG93Qmx1clJhZGl1czpzaGFkb3ctPmJsdXJdOwotICAg
ICAgICBbcyBzZXRTaGFkb3dDb2xvcjpuc0NvbG9yKHNoYWRvdy0+Y29sb3IpXTsKLSAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6cyBmb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKLSAgICB9
Ci0KLSAgICBpbnQgZGVjb3JhdGlvbiA9IHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgp
OwotICAgIGlmIChkZWNvcmF0aW9uICYga2h0bWw6OkxJTkVfVEhST1VHSCkKLSAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNp
bmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0KLSAgICBp
bnQgc3VwZXJzY3JpcHRJbnQgPSAwOwotICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24o
KSkgewotICAgICAgICBjYXNlIGtodG1sOjpCQVNFTElORToKLSAgICAgICAgY2FzZSBraHRtbDo6
Qk9UVE9NOgotICAgICAgICBjYXNlIGtodG1sOjpCQVNFTElORV9NSURETEU6Ci0gICAgICAgIGNh
c2Uga2h0bWw6OkxFTkdUSDoKLSAgICAgICAgY2FzZSBraHRtbDo6TUlERExFOgotICAgICAgICBj
YXNlIGtodG1sOjpURVhUX0JPVFRPTToKLSAgICAgICAgY2FzZSBraHRtbDo6VEVYVF9UT1A6Ci0g
ICAgICAgIGNhc2Uga2h0bWw6OlRPUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IGtodG1sOjpTVUI6Ci0gICAgICAgICAgICBzdXBlcnNjcmlwdEludCA9IC0xOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Uga2h0bWw6OlNVUEVSOgotICAgICAgICAgICAgc3VwZXJz
Y3JpcHRJbnQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChzdXBlcnNj
cmlwdEludCkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6c3VwZXJzY3JpcHRJbnRdIGZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07Ci0K
LSAgICBpZiAoZGVjb3JhdGlvbiAmIGtodG1sOjpVTkRFUkxJTkUpCi0gICAgICAgIFtyZXN1bHQg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVd
IGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07Ci0KLSAgICBpZiAobm9kZVRv
UmVtb3ZlKSB7Ci0gICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICAgICAgbm9kZVRv
UmVtb3ZlLT5yZW1vdmUoZXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb25D
b2RlID09IDApOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5TV3JpdGluZ0Rp
cmVjdGlvbiBLV1FLSFRNTFBhcnQ6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3Rh
cnQoKSBjb25zdAotewotICAgIE5TV3JpdGluZ0RpcmVjdGlvbiByZXN1bHQgPSBOU1dyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodDsKLQotICAgIFBvc2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlv
bihkLT5tX3NlbGVjdGlvbi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkp
LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZUltcGwgKm5vZGUgPSBwb3Mubm9kZSgpOwotICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVuZGVyZXIoKS0+Y29u
dGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgUmVuZGVyU3R5bGUg
KnN0eWxlID0gbm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCk7Ci0g
ICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgc3dp
dGNoIChzdHlsZS0+ZGlyZWN0aW9uKCkpIHsKLSAgICAgICAgY2FzZSBraHRtbDo6TFRSOgotICAg
ICAgICAgICAgcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBraHRtbDo6UlRMOgotICAgICAgICAgICAgcmVzdWx0
ID0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1LV1FXaW5kb3dXaWRnZXQgKktXUUtIVE1M
UGFydDo6dG9wTGV2ZWxXaWRnZXQoKQotewotICAgIHJldHVybiBfd2luZG93V2lkZ2V0OwotfQot
Ci12b2lkIEtXUUtIVE1MUGFydDo6dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpCi17Ci0gICAgaWYg
KGQtPm1fZG9jKSB7Ci0gICAgICAgIGNoZWNrQ29tcGxldGVkKCk7Ci0gICAgfQotICAgIFtfYnJp
ZGdlIHRva2VuaXplclByb2Nlc3NlZERhdGFdOwotfQotCi1pbnQgS1dRS0hUTUxQYXJ0OjpzZWxl
Y3Rpb25TdGFydE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uLnN0
YXJ0KCkub2Zmc2V0KCk7Ci19Ci0KLWludCBLV1FLSFRNTFBhcnQ6OnNlbGVjdGlvbkVuZE9mZnNl
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uLmVuZCgpLm9mZnNldCgpOwot
fQotCi1Ob2RlSW1wbCAqS1dRS0hUTUxQYXJ0OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOwotfQotCi1Ob2RlSW1wbCAq
S1dRS0hUTUxQYXJ0OjpzZWxlY3Rpb25FbmQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5tX3Nl
bGVjdGlvbi5lbmQoKS5ub2RlKCk7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRCcmlkZ2Uo
V2ViQ29yZUJyaWRnZSAqcCkKLXsgCi0gICAgaWYgKF9icmlkZ2UgIT0gcCkgewotCWRlbGV0ZSBf
d2luZG93V2lkZ2V0OwotICAgIH0KLSAgICBfYnJpZGdlID0gcDsKLSAgICBfd2luZG93V2lkZ2V0
ID0gbmV3IEtXUVdpbmRvd1dpZGdldChfYnJpZGdlKTsKLX0KLQotUVN0cmluZyBLV1FLSFRNTFBh
cnQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKLXsKLSAgICBOU1N0cmluZyAqb3ZlcnJpZGVU
eXBlID0gW19icmlkZ2Ugb3ZlcnJpZGVNZWRpYVR5cGVdOwotICAgIGlmIChvdmVycmlkZVR5cGUp
Ci0gICAgICAgIHJldHVybiBRU3RyaW5nOjpmcm9tTlNTdHJpbmcob3ZlcnJpZGVUeXBlKTsKLSAg
ICByZXR1cm4gUVN0cmluZygpOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0TWVkaWFUeXBl
KGNvbnN0IFFTdHJpbmcgJnR5cGUpCi17Ci0gICAgaWYgKGQtPm1fdmlldykgewotICAgICAgICBk
LT5tX3ZpZXctPnNldE1lZGlhVHlwZSh0eXBlKTsKLSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQ
YXJ0OjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCi17Ci0gICAgLy8gUHV0IHRoZSBjYXJldCBzb21l
cGxhY2UgaWYgdGhlIHNlbGVjdGlvbiBpcyBlbXB0eSBhbmQgdGhlIHBhcnQgaXMgZWRpdGFibGUu
Ci0gICAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBmbGFzaGluZyB0aGUgY2FyZXQgaW4gYSBj
b250ZW50RWRpdGFibGUgdmlldyBhdXRvbWF0aWNhbGx5IAotICAgIC8vIHdpdGhvdXQgcmVxdWly
aW5nIHRoZSBwcm9ncmFtbWVyIHRvIHNldCBhIHNlbGVjdGlvbiBleHBsaWNpdGx5LgotICAgIERv
Y3VtZW50SW1wbCAqZG9jID0geG1sRG9jSW1wbCgpOwotICAgIGlmIChkb2MgJiYgc2VsZWN0aW9u
KCkuaXNOb25lKCkgJiYgaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBOb2RlSW1wbCAq
bm9kZSA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0g
ICAgICAgICAgICAvLyBMb29rIGZvciBhIGJsb2NrIGZsb3csIGJ1dCBza2lwIG92ZXIgdGhlIEhU
TUwgZWxlbWVudCwgc2luY2Ugd2UgcmVhbGx5Ci0gICAgICAgICAgICAvLyB3YW50IHRvIGdldCBh
dCBsZWFzdCBhcyBmYXIgYXMgdGhlIHRoZSBCT0RZIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAg
ICAgICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmhhc1RhZ05hbWUoaHRt
bFRhZykpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlKQotICAgICAg
ICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCks
IERPV05TVFJFQU0pKTsKLSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXREaXNwbGF5
c1dpdGhGb2N1c0F0dHJpYnV0ZXMoYm9vbCBmbGFnKQotewotICAgIGlmIChkLT5tX2lzRm9jdXNl
ZCA9PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGQtPm1faXNGb2N1c2Vk
ID0gZmxhZzsKLQotICAgIC8vIFRoaXMgbWV0aG9kIGRvZXMgdGhlIGpvYiBvZiB1cGRhdGluZyB0
aGUgdmlldyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2aWV3IGlzICJhY3RpdmUiLgotICAgIC8vIFRo
aXMgaW52b2x2ZXMgZm91ciBraW5kcyBvZiBkcmF3aW5nIHVwZGF0ZXM6Ci0KLSAgICAvLyAxLiBU
aGUgYmFja2dyb3VuZCBjb2xvciB1c2VkIHRvIGRyYXcgYmVoaW5kIHNlbGVjdGVkIGNvbnRlbnQg
KGFjdGl2ZSB8IGluYWN0aXZlIGNvbG9yKQotICAgIGlmIChkLT5tX3ZpZXcpCi0gICAgICAgIGQt
Pm1fdmlldy0+dXBkYXRlQ29udGVudHMoUVJlY3QodmlzaWJsZVNlbGVjdGlvblJlY3QoKSkpOwot
Ci0gICAgLy8gMi4gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQotICAg
IGlmIChmbGFnKQotICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotICAgIHNldENhcmV0
VmlzaWJsZShmbGFnKTsKLSAgICAKLSAgICAvLyAzLiBUaGUgZHJhd2luZyBvZiBhIGZvY3VzIHJp
bmcgYXJvdW5kIGxpbmtzIGluIHdlYiBwYWdlcy4KLSAgICBEb2N1bWVudEltcGwgKmRvYyA9IHht
bERvY0ltcGwoKTsKLSAgICBpZiAoZG9jKSB7Ci0gICAgICAgIE5vZGVJbXBsICpub2RlID0gZG9j
LT5mb2N1c05vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIG5vZGUtPnNl
dENoYW5nZWQoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICB0aGVt
ZSgpLT5zdGF0ZUNoYW5nZWQobm9kZS0+cmVuZGVyZXIoKSwgRm9jdXNTdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgLy8gNC4gQ2hhbmdpbmcgdGhlIHRpbnQgb2YgY29udHJvbHMg
ZnJvbSBjbGVhciB0byBhcXVhL2dyYXBoaXRlIGFuZCB2aWNlIHZlcnNhLiAgV2UKLSAgICAvLyBk
byBhICJmYWtlIiBwYWludC4gIFdoZW4gdGhlIHRoZW1lIGdldHMgYSBwYWludCBjYWxsLCBpdCBj
YW4gdGhlbiBkbyBhbiBpbnZhbGlkYXRlLgotICAgIGlmICh0aGVtZSgpLT5zdXBwb3J0c0NvbnRy
b2xUaW50cygpKSB7Ci0gICAgICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gZC0+bV92aWV3ID8g
ZC0+bV92aWV3LT5nZXREb2N1bWVudFZpZXcoKSA6IDA7Ci0gICAgICAgIGlmIChkb2N1bWVudFZp
ZXcgJiYgcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXQoKTsgLy8g
RW5zdXJlIGxheW91dCBpcyB1cCB0byBkYXRlLgotICAgICAgICAgICAgUVJlY3QgdmlzaWJsZVJl
Y3QoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0pOwotICAgICAgICAgICAgUVBhaW50ZXIgcDsK
LSAgICAgICAgICAgIHAuc2V0VXBkYXRpbmdDb250cm9sVGludHModHJ1ZSk7Ci0gICAgICAgICAg
ICBwYWludCgmcCwgdmlzaWJsZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEtX
UUtIVE1MUGFydDo6ZGlzcGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZC0+bV9pc0ZvY3VzZWQ7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRXaW5kb3dI
YXNGb2N1cyhib29sIGZsYWcpCi17Ci0gICAgaWYgKG1fd2luZG93SGFzRm9jdXMgPT0gZmxhZykK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fd2luZG93SGFzRm9jdXMgPSBmbGFnOwotCi0gICAgaWYg
KERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9jSW1wbCgpKQotICAgICAgICBpZiAoTm9kZUltcGwg
KmJvZHkgPSBkb2MtPmJvZHkoKSkKLSAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoV2luZG93RXZl
bnQoZmxhZyA/IGZvY3VzRXZlbnQgOiBibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLVFD
aGFyIEtXUUtIVE1MUGFydDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0Ci17Ci0g
ICAgRG9jdW1lbnRJbXBsICpkb2MgPSB4bWxEb2NJbXBsKCk7Ci0gICAgaWYgKCFkb2MpIHsKLSAg
ICAgICAgcmV0dXJuICdcXCc7Ci0gICAgfQotICAgIERlY29kZXIgKmRlY29kZXIgPSBkb2MtPmRl
Y29kZXIoKTsKLSAgICBpZiAoIWRlY29kZXIpIHsKLSAgICAgICAgcmV0dXJuICdcXCc7Ci0gICAg
fQotICAgIGNvbnN0IFFUZXh0Q29kZWMgKmNvZGVjID0gZGVjb2Rlci0+Y29kZWMoKTsKLSAgICBp
ZiAoIWNvZGVjKSB7Ci0gICAgICAgIHJldHVybiAnXFwnOwotICAgIH0KLSAgICByZXR1cm4gY29k
ZWMtPmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKTsKLX0KLQotTlNDb2xvciAqS1dRS0hUTUxQ
YXJ0Ojpib2R5QmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBpZiAoeG1sRG9jSW1wbCgp
ICYmIHhtbERvY0ltcGwoKS0+Ym9keSgpICYmIHhtbERvY0ltcGwoKS0+Ym9keSgpLT5yZW5kZXJl
cigpKSB7Ci0gICAgICAgIFFDb2xvciBiZ0NvbG9yID0geG1sRG9jSW1wbCgpLT5ib2R5KCktPnJl
bmRlcmVyKCktPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwotICAgICAgICBpZiAoYmdDb2xv
ci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuc0NvbG9yKGJnQ29sb3IpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19Ci0KLVdlYkNvcmVLZXlib2FyZFVJTW9k
ZSBLV1FLSFRNTFBhcnQ6OmtleWJvYXJkVUlNb2RlKCkgY29uc3QKLXsKLSAgICBLV1FfQkxPQ0tf
RVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW19icmlkZ2Uga2V5Ym9hcmRVSU1vZGVdOwotICAgIEtX
UV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gV2ViQ29yZUtleWJvYXJkQWNjZXNz
RGVmYXVsdDsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNldE5hbWUoY29uc3QgUVN0cmluZyAm
bmFtZSkKLXsKLSAgICBRU3RyaW5nIG4gPSBuYW1lOwotCi0gICAgS1dRS0hUTUxQYXJ0ICpwYXJl
bnQgPSBLV1EocGFyZW50UGFydCgpKTsKLQotICAgIC8vIEZJWE1FOiBpcyB0aGUgYmxhbmsgcnVs
ZSBuZWVkZWQgb3IgdXNlZnVsPwotICAgIGlmIChwYXJlbnQgJiYgKG5hbWUuaXNFbXB0eSgpIHx8
IHBhcmVudC0+ZnJhbWVFeGlzdHMobmFtZSkgfHwgbmFtZSA9PSAiX2JsYW5rIikpCi0JbiA9IHBh
cmVudC0+cmVxdWVzdEZyYW1lTmFtZSgpOwotCi0gICAgS0hUTUxQYXJ0OjpzZXROYW1lKG4pOwot
fQotCi12b2lkIEtXUUtIVE1MUGFydDo6ZGlkVGVsbEJyaWRnZUFib3V0TG9hZChjb25zdCBRU3Ry
aW5nICZ1cmxTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNoYXIgZHVtbXk7Ci0gICAgdXJsc0JyaWRn
ZUtub3dzQWJvdXQuaW5zZXJ0KHVybFN0cmluZywgJmR1bW15KTsKLX0KLQotYm9vbCBLV1FLSFRN
TFBhcnQ6OmhhdmVUb2xkQnJpZGdlQWJvdXRMb2FkKGNvbnN0IFFTdHJpbmcgJnVybFN0cmluZykK
LXsKLSAgICByZXR1cm4gdXJsc0JyaWRnZUtub3dzQWJvdXQuZmluZCh1cmxTdHJpbmcpICE9IDA7
Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpjbGVhcigpCi17Ci0gICAgdXJsc0JyaWRnZUtub3dz
QWJvdXQuY2xlYXIoKTsKLSAgICBzZXRNYXJrZWRUZXh0UmFuZ2UoMCwgbmlsLCBuaWwpOwotICAg
IEtIVE1MUGFydDo6Y2xlYXIoKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnByaW50KCkKLXsKLSAg
ICBbS1dRKHRoaXMpLT5fYnJpZGdlIHByaW50XTsKLX0KLQotS0pTOjpCaW5kaW5nczo6SW5zdGFu
Y2UgKktXUUtIVE1MUGFydDo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoUVdpZGdldCAqd2lk
Z2V0KQotewotICAgIE5TVmlldyAqYVZpZXcgPSB3aWRnZXQtPmdldFZpZXcoKTsKLSAgICBpZiAo
IWFWaWV3KQotICAgICAgICByZXR1cm4gMDsKLSAgICBqb2JqZWN0IGFwcGxldDsKLSAgICAKLSAg
ICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3R1YWwgSmF2YSBhcHBsZXQgaW5zdGFuY2UuCi0g
ICAgaWYgKFtfYnJpZGdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZ2V0QXBwbGV0SW5W
aWV3OildKQotICAgICAgICBhcHBsZXQgPSBbX2JyaWRnZSBnZXRBcHBsZXRJblZpZXc6YVZpZXdd
OwotICAgIGVsc2UKLSAgICAgICAgYXBwbGV0ID0gW19icmlkZ2UgcG9sbEZvckFwcGxldEluVmll
dzphVmlld107Ci0gICAgCi0gICAgaWYgKGFwcGxldCkgewotICAgICAgICAvLyBXcmFwIHRoZSBK
YXZhIGluc3RhbmNlIGluIGEgbGFuZ3VhZ2UgbmV1dHJhbCBiaW5kaW5nIGFuZCBoYW5kCi0gICAg
ICAgIC8vIG9mZiBvd25lcnNoaXAgdG8gdGhlIEFQUExFVCBlbGVtZW50LgotICAgICAgICBLSlM6
OkJpbmRpbmdzOjpSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0ID0gS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdDo6ZmluZFJvb3RPYmplY3RGb3JOYXRpdmVIYW5kbGVGdW5jdGlvbiAoKShhVmll
dyk7Ci0gICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZSAoS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2U6OkphdmFMYW5ndWFnZSwgYXBwbGV0LCBleGVjdXRpb25Db250ZXh0
KTsgICAgICAgIAotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiAwOwotfQotCi1AaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJQbHVnSW4pCi0tIChpZClvYmpl
Y3RGb3JXZWJTY3JpcHQ7Ci0tICh2b2lkICopcGx1Z2luU2NyaXB0YWJsZU9iamVjdDsKLUBlbmQK
LQotc3RhdGljIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRJbnN0YW5jZUZvclZpZXcoTlNW
aWV3ICphVmlldykKLXsKLSAgICBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iob2JqZWN0Rm9yV2ViU2NyaXB0KV0pewotICAgICAgICBpZCBvYmplY3QgPSBbYVZpZXcgb2Jq
ZWN0Rm9yV2ViU2NyaXB0XTsKLSAgICAgICAgaWYgKG9iamVjdCkgewotCSAgICBLSlM6OkJpbmRp
bmdzOjpSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0ID0gS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdDo6ZmluZFJvb3RPYmplY3RGb3JOYXRpdmVIYW5kbGVGdW5jdGlvbiAoKShhVmlldyk7Ci0g
ICAgICAgICAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdG
b3JMYW5ndWFnZUluc3RhbmNlIChLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6T2JqZWN0aXZlQ0xh
bmd1YWdlLCBvYmplY3QsIGV4ZWN1dGlvbkNvbnRleHQpOwotCX0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU2NyaXB0YWJsZU9i
amVjdCldKXsKLSAgICAgICAgdm9pZCAqb2JqZWN0ID0gW2FWaWV3IHBsdWdpblNjcmlwdGFibGVP
YmplY3RdOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0JICAgIEtKUzo6QmluZGluZ3M6OlJvb3RP
YmplY3QgKmV4ZWN1dGlvbkNvbnRleHQgPSBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpmaW5k
Um9vdE9iamVjdEZvck5hdGl2ZUhhbmRsZUZ1bmN0aW9uICgpKGFWaWV3KTsKLSAgICAgICAgICAg
IHJldHVybiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1YWdl
SW5zdGFuY2UgKEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpDTGFuZ3VhZ2UsIG9iamVjdCwgZXhl
Y3V0aW9uQ29udGV4dCk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UgKktXUUtIVE1MUGFydDo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldChR
V2lkZ2V0ICp3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGdldEluc3RhbmNlRm9yVmlldyh3aWRnZXQt
PmdldFZpZXcoKSk7Ci19Ci0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpLV1FLSFRNTFBhcnQ6
OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFFXaWRnZXQgKndpZGdldCkKLXsKLSAgICByZXR1
cm4gZ2V0SW5zdGFuY2VGb3JWaWV3KHdpZGdldC0+Z2V0VmlldygpKTsKLX0KLQotdm9pZCBLV1FL
SFRNTFBhcnQ6OmFkZFBsdWdpblJvb3RPYmplY3QoY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCAqcm9vdCkKLXsKLSAgICByb290T2JqZWN0cy5hcHBlbmQgKHJvb3QpOwotfQotCi12b2lk
IEtXUUtIVE1MUGFydDo6Y2xlYW51cFBsdWdpblJvb3RPYmplY3RzKCkKLXsKLSAgICBKU0xvY2sg
bG9jazsKLQotICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKnJvb3Q7Ci0gICAgd2hpbGUg
KChyb290ID0gcm9vdE9iamVjdHMuZ2V0TGFzdCgpKSkgewotICAgICAgICByb290LT5yZW1vdmVB
bGxOYXRpdmVSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHJvb3RPYmplY3RzLnJlbW92ZUxhc3QoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JS
ZWRvKGNvbnN0IEVkaXRDb21tYW5kUHRyICZjbWQsIGJvb2wgaXNSZWRvKQotewotICAgIEFTU0VS
VChjbWQuZ2V0KCkpOwotICAgIEtXUUVkaXRDb21tYW5kICprd3EgPSBbS1dRRWRpdENvbW1hbmQg
Y29tbWFuZFdpdGhFZGl0Q29tbWFuZDpjbWQuZ2V0KCldOwotICAgIE5TVW5kb01hbmFnZXIgKnVu
ZG9NYW5hZ2VyID0gW19icmlkZ2UgdW5kb01hbmFnZXJdOwotICAgIFt1bmRvTWFuYWdlciByZWdp
c3RlclVuZG9XaXRoVGFyZ2V0Ol9icmlkZ2Ugc2VsZWN0b3I6KGlzUmVkbyA/IEBzZWxlY3Rvcihy
ZWRvRWRpdGluZzopIDogQHNlbGVjdG9yKHVuZG9FZGl0aW5nOikpIG9iamVjdDprd3FdOwotICAg
IE5TU3RyaW5nICphY3Rpb25OYW1lID0gW19icmlkZ2UgbmFtZUZvclVuZG9BY3Rpb246c3RhdGlj
X2Nhc3Q8V2ViVW5kb0FjdGlvbj4oY21kLmVkaXRpbmdBY3Rpb24oKSldOwotICAgIGlmIChhY3Rp
b25OYW1lICE9IG5pbCkgewotICAgICAgICBbdW5kb01hbmFnZXIgc2V0QWN0aW9uTmFtZTphY3Rp
b25OYW1lXTsKLSAgICB9Ci0gICAgX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMgPSBZRVM7Ci19Ci0K
LXZvaWQgS1dRS0hUTUxQYXJ0OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKGNvbnN0IEVkaXRDb21t
YW5kUHRyICZjbWQpCi17Ci0gICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhjbWQsIE5P
KTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29uc3Qg
RWRpdENvbW1hbmRQdHIgJmNtZCkKLXsKLSAgICByZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRv
KGNtZCwgWUVTKTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRp
b25zKCkKLXsKLSAgICBpZiAoX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMpIHsKLQlbW19icmlkZ2Ug
dW5kb01hbmFnZXJdIHJlbW92ZUFsbEFjdGlvbnNXaXRoVGFyZ2V0Ol9icmlkZ2VdOwotCV9oYXZl
VW5kb1JlZG9PcGVyYXRpb25zID0gTk87Ci0gICAgfQotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6
aXNzdWVVbmRvQ29tbWFuZCgpCi17Ci0gICAgaWYgKGNhblVuZG8oKSkKLSAgICAgICAgW1tfYnJp
ZGdlIHVuZG9NYW5hZ2VyXSB1bmRvXTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6Omlzc3VlUmVk
b0NvbW1hbmQoKQotewotICAgIGlmIChjYW5SZWRvKCkpCi0gICAgICAgIFtbX2JyaWRnZSB1bmRv
TWFuYWdlcl0gcmVkb107Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZUN1dENvbW1hbmQo
KQotewotICAgIFtfYnJpZGdlIGlzc3VlQ3V0Q29tbWFuZF07Ci19Ci0KLXZvaWQgS1dRS0hUTUxQ
YXJ0Ojppc3N1ZUNvcHlDb21tYW5kKCkKLXsKLSAgICBbX2JyaWRnZSBpc3N1ZUNvcHlDb21tYW5k
XTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6Omlzc3VlUGFzdGVDb21tYW5kKCkKLXsKLSAgICBb
X2JyaWRnZSBpc3N1ZVBhc3RlQ29tbWFuZF07Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1
ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKQotewotICAgIFtfYnJpZGdlIGlzc3VlUGFzdGVB
bmRNYXRjaFN0eWxlQ29tbWFuZF07Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZVRyYW5z
cG9zZUNvbW1hbmQoKQotewotICAgIFtfYnJpZGdlIGlzc3VlVHJhbnNwb3NlQ29tbWFuZF07Ci19
Ci0KLWJvb2wgS0hUTUxQYXJ0OjpjYW5VbmRvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW1tLV1Eo
dGhpcyktPl9icmlkZ2UgdW5kb01hbmFnZXJdIGNhblVuZG9dOwotfQotCi1ib29sIEtIVE1MUGFy
dDo6Y2FuUmVkbygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtbS1dRKHRoaXMpLT5fYnJpZGdlIHVu
ZG9NYW5hZ2VyXSBjYW5SZWRvXTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OmNhblBhc3RlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gW0tXUSh0aGlzKS0+X2JyaWRnZSBjYW5QYXN0ZV07Ci19Ci0KLXZv
aWQgS1dRS0hUTUxQYXJ0OjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmcCkKLXsKLSAgICBpZiAoIVtfYnJpZGdlIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkXSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1hcmtNaXNzcGVsbGluZ3Mo
U2VsZWN0aW9uQ29udHJvbGxlcihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSks
IGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSk7Ci19Ci0KLXZvaWQgS1dRS0hU
TUxQYXJ0OjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnNlbGVj
dGlvbikKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9u
IGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgotICAgIC8vIE1pZ2h0IGJlIG5p
Y2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KLQotICAgIGlmICghW19icmlkZ2UgaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmFu
Z2VJbXBsPiBzZWFyY2hSYW5nZShzZWxlY3Rpb24udG9SYW5nZSgpKTsKLSAgICBpZiAoIXNlYXJj
aFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5pc0RldGFjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KLSAgICBp
bnQgZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlSW1wbCAqZWRpdGFibGVOb2RlSW1wbCA9IHNlYXJj
aFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOwotICAgIGlmICghZWRpdGFibGVOb2Rl
SW1wbC0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8v
IEdldCB0aGUgc3BlbGwgY2hlY2tlciBpZiBpdCBpcyBhdmFpbGFibGUKLSAgICBOU1NwZWxsQ2hl
Y2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwotICAg
IGlmIChjaGVja2VyID09IG5pbCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFdvcmRBd2Fy
ZUl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICAKLSAgICB3aGlsZSAoIWl0LmF0
RW5kKCkpIHsgICAgICAvLyB3ZSBtYXkgYmUgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgZG9j
LCBhbmQgYWxyZWFkeSBieSBhdEVuZAotICAgICAgICBjb25zdCBRQ2hhciAqY2hhcnMgPSBpdC5j
aGFyYWN0ZXJzKCk7Ci0gICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgaWYg
KGxlbiA+IDEgfHwgIWNoYXJzWzBdLmlzU3BhY2UoKSkgewotICAgICAgICAgICAgTlNTdHJpbmcg
KmNodW5rID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5Oih1bmlj
aGFyICopY2hhcnMgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwotICAgICAgICAgICAgaW50
IHN0YXJ0SW5kZXggPSAwOwotICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSBjaHVuayB0byBm
aW5kIGVhY2ggbWlzc3BlbGxpbmcgaW4gaXQuCi0gICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRl
eCA8IGxlbikgewotICAgICAgICAgICAgICAgIE5TUmFuZ2UgbWlzc3BlbGxpbmcgPSBbY2hlY2tl
ciBjaGVja1NwZWxsaW5nT2ZTdHJpbmc6Y2h1bmsgc3RhcnRpbmdBdDpzdGFydEluZGV4IGxhbmd1
YWdlOm5pbCB3cmFwOk5PIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W19icmlkZ2Ugc3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWddIHdvcmRDb3VudDpOVUxMXTsKLSAgICAgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmcubGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBCdWlsZCB1cCByZXN1bHQgcmFuZ2UgYW5kIHN0cmluZy4gIE5vdGUgdGhlIG1pc3NwZWxs
aW5nIG1heSBzcGFuIG1hbnkgdGV4dCBub2RlcywKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0
IHRoZSBDaGFySXRlcmF0b3IgaW5zdWxhdGVzIHVzIGZyb20gdGhpcyBjb21wbGV4aXR5Ci0gICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZUltcGw+IG1pc3NwZWxsaW5nUmFuZ2UocmFuZ2VP
ZkNvbnRlbnRzKHhtbERvY0ltcGwoKSkpOwotICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJ
dGVyYXRvciBjaGFycyhpdC5yYW5nZSgpLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hh
cnMuYWR2YW5jZShtaXNzcGVsbGluZy5sb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIG1p
c3NwZWxsaW5nUmFuZ2UtPnNldFN0YXJ0KGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4
Y2VwdGlvbiksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmcubGVuZ3Ro
KTsKLSAgICAgICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c2V0RW5kKGNoYXJzLnJh
bmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zm
c2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsg
bWlzc3BlbGxpbmcgaW4gZG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIHhtbERvY0ltcGwo
KS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBtaXNzcGVsbGluZy5sb2Nh
dGlvbiArIG1pc3NwZWxsaW5nLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBbY2h1bmsgcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICAKLSAgICAg
ICAgaXQuYWR2YW5jZSgpOwotICAgIH0KLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmb2xkU2VsZWN0aW9u
LCBib29sIGNsb3NlVHlwaW5nKQotewotICAgIGlmICh4bWxEb2NJbXBsKCkpIHsKLSAgICAgICAg
aWYgKFtfYnJpZGdlIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkXSkgewotICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBvbGRBZGphY2VudFdvcmRzID0gU2VsZWN0aW9uQ29u
dHJvbGxlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hh
bmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sIG9sZFNl
bGVjdGlvbiBtYXkgbm8gbG9uZ2VyCi0gICAgICAgICAgICAvLyBiZSBpbiB0aGUgZG9jdW1lbnQu
Ci0gICAgICAgICAgICBpZiAob2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVj
dGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi5zdGFydCgpLCBvbGRTZWxlY3Rpb24u
c3RhcnRBZmZpbml0eSgpKTsKLSAgICAgICAgICAgICAgICBvbGRBZGphY2VudFdvcmRzID0gU2Vs
ZWN0aW9uQ29udHJvbGxlcihzdGFydE9mV29yZChvbGRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOyAgIAotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQoc2VsZWN0
aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKTsKLSAgICAgICAgICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXIgbmV3QWRqYWNlbnRXb3JkcyhzdGFydE9mV29yZChuZXdTdGFy
dCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElm
T25Cb3VuZGFyeSkpOwotCi0gICAgICAgICAgICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdB
ZGphY2VudFdvcmRzKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFyayBtaXNzcGVsbGluZ3MgaW4g
dGhlIHBvcnRpb24gdGhhdCB3YXMgcHJldmlvdXNseSB1bm1hcmtlZCBiZWNhdXNlIG9mCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIHByb3hpbWl0eSBvZiB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlv
bi4gV2Ugb25seSBzcGVsbCBjaGVjayB3b3JkcyBpbgotICAgICAgICAgICAgICAgIC8vIHRoZSB2
aWNpbml0eSBvZiB0aGUgc3RhcnQgb2YgdGhlIG9sZCBzZWxlY3Rpb24gYmVjYXVzZSB0aGUgc3Bl
bGxpbmcgY2hlY2tlcgotICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBmYXN0IGVub3VnaCB0byBk
byBhIGxvdCBvZiBzcGVsbGluZyBjaGVja2luZyBpbXBsaWNpdGx5LiBUaGlzIG1hdGNoZXMKLSAg
ICAgICAgICAgICAgICAvLyBBcHBLaXQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhbGx5IHRoZSBvbmx5
IGNvZGUgdGhhdCBrbm93cyB0aGF0IHJ1bGUuIFRoZQotICAgICAgICAgICAgICAgIC8vIG1hcmtN
aXNzcGVsbGluZ3MgZnVuY3Rpb24gaXMgcHJlcGFyZWQgdG8gaGFuZGxlciBsYXJnZXIgcmFuZ2Vz
LgotCi0gICAgICAgICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcgZWxz
ZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKGNsb3Nl
VHlwaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3Mob2xkQWRqYWNl
bnRXb3Jkcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBv
bmx5IGVyYXNlcyBhIG1hcmtlciBpbiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgc2VsZWN0aW9uLgot
ICAgICAgICAgICAgICAgIC8vIFBlcmhhcHMgcGVjdWxpYXIsIGJ1dCBpdCBtYXRjaGVzIEFwcEtp
dC4KLSAgICAgICAgICAgICAgICB4bWxEb2NJbXBsKCktPnJlbW92ZU1hcmtlcnMobmV3QWRqYWNl
bnRXb3Jkcy50b1JhbmdlKCkuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGNvbnRpbnVv
dXMgc3BlbGwgY2hlY2tpbmcgaXMgb2ZmLCBubyBtYXJrZXJzIGFwcGVhciBhZnRlciB0aGUgc2Vs
ZWN0aW9uIGNoYW5nZXMuCi0gICAgICAgICAgICB4bWxEb2NJbXBsKCktPnJlbW92ZU1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtfYnJp
ZGdlIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb25dOwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVj
dGlvbiwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAotewotICAgIHJldHVy
biBbX2JyaWRnZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltET01SYW5nZSBfcmFuZ2VX
aXRoSW1wbDpvbGRTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b0RPTVJhbmdlOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpu
ZXdTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFmZmluaXR5OnN0YXRpY19jYXN0PE5TU2VsZWN0aW9uQWZmaW5pdHk+KGFm
ZmluaXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsU2VsZWN0aW5n
OnN0aWxsU2VsZWN0aW5nXTsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5n
ZWRDb250ZW50cygpCi17Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIGlmIChLV1FBY2NPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICByZW5kZXJlcigpLT5kb2N1
bWVudCgpLT5nZXRBY2NPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uVG9Ub3BXZWJBcmVh
KHJlbmRlcmVyKCksICJBWFZhbHVlQ2hhbmdlZCIpOwotICAgIH0KLSNlbmRpZgotICAgIFtfYnJp
ZGdlIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50c107Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0Ojpp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEtIVE1MUGFydDo6aXNDb250
ZW50RWRpdGFibGUoKSB8fCBbX2JyaWRnZSBpc0VkaXRhYmxlXTsKLX0KLQotYm9vbCBLV1FLSFRN
TFBhcnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25zdAot
ewotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZEJlZ2luRWRp
dGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6Y29uc3RfY2FzdDxSYW5nZUltcGwgKj4ocmFu
Z2UpXV07Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFJh
bmdlSW1wbCAqcmFuZ2UpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJhbmdlKTsKLSAgICByZXR1cm4g
W19icmlkZ2Ugc2hvdWxkRW5kRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6Y29uc3Rf
Y2FzdDxSYW5nZUltcGwgKj4ocmFuZ2UpXV07Ci19Ci0KLXN0YXRpYyBRVmFsdWVMaXN0PEtXUUtI
VE1MUGFydDo6TWFya2VkVGV4dFVuZGVybGluZT4gY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGlu
ZXMoY29uc3QgUmFuZ2VJbXBsICptYXJrZWRUZXh0UmFuZ2UsIE5TQXJyYXkgKmF0dHJpYnV0ZXMs
IE5TQXJyYXkgKnJhbmdlcykKLXsKLSAgICBRVmFsdWVMaXN0PEtXUUtIVE1MUGFydDo6TWFya2Vk
VGV4dFVuZGVybGluZT4gcmVzdWx0OwotCi0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgaW50
IGJhc2VPZmZzZXQgPSBtYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbik7Ci0K
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXR0cmlidXRlcyBjb3VudF07Ci0gICAgQVNTRVJUKFty
YW5nZXMgY291bnRdID09IGxlbmd0aCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgTlNOdW1iZXIgKnN0eWxlID0gW1thdHRyaWJ1dGVzIG9i
amVjdEF0SW5kZXg6aV0gb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1l
XTsKLSAgICAgICAgaWYgKCFzdHlsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBO
U1JhbmdlIHJhbmdlID0gW1tyYW5nZXMgb2JqZWN0QXRJbmRleDppXSByYW5nZVZhbHVlXTsKLSAg
ICAgICAgTlNDb2xvciAqY29sb3IgPSBbW2F0dHJpYnV0ZXMgb2JqZWN0QXRJbmRleDppXSBvYmpl
Y3RGb3JLZXk6TlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBRQ29sb3Ig
cUNvbG9yID0gUXQ6OmJsYWNrOwotICAgICAgICBpZiAoY29sb3IpIHsKLSAgICAgICAgICAgIE5T
Q29sb3IqIGRldmljZUNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0Rl
dmljZVJHQkNvbG9yU3BhY2VdOwotICAgICAgICAgICAgcUNvbG9yID0gUUNvbG9yKHFSZ2JhKChp
bnQpKDI1NSAqIFtkZXZpY2VDb2xvciByZWRDb21wb25lbnRdKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoaW50KSgyNTUgKiBbZGV2aWNlQ29sb3IgYmx1ZUNvbXBvbmVudF0p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKDI1NSAqIFtkZXZpY2VD
b2xvciBncmVlbkNvbXBvbmVudF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChpbnQpKDI1NSAqIFtkZXZpY2VDb2xvciBhbHBoYUNvbXBvbmVudF0pKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXN1bHQuYXBwZW5kKEtXUUtIVE1MUGFydDo6TWFya2VkVGV4dFVuZGVybGlu
ZShyYW5nZS5sb2NhdGlvbiArIGJhc2VPZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiArIGJhc2VPZmZz
ZXQgKyByYW5nZS5sZW5ndGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBxQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZSBpbnRWYWx1ZV0gPiAxKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBLV1FLSFRNTFBhcnQ6OnNldE1hcmtl
ZFRleHRSYW5nZShjb25zdCBSYW5nZUltcGwgKnJhbmdlLCBOU0FycmF5ICphdHRyaWJ1dGVzLCBO
U0FycmF5ICpyYW5nZXMpCi17Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICBBU1NFUlQo
IXJhbmdlIHx8IHJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pID09IHJhbmdlLT5lbmRD
b250YWluZXIoZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCFyYW5nZSB8fCByYW5nZS0+Y29sbGFw
c2VkKGV4Y2VwdGlvbikgfHwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiktPm5vZGVU
eXBlKCkgPT0gRE9NOjpOb2RlOjpURVhUX05PREUpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMgPT0g
bmlsKSB7Ci0gICAgICAgIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzID0gZmFsc2U7Ci0gICAg
ICAgIG1fbWFya2VkVGV4dFVuZGVybGluZXMuY2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lcyA9IHRydWU7Ci0gICAgICAgIG1fbWFya2VkVGV4
dFVuZGVybGluZXMgPSBjb252ZXJ0QXR0cmlidXRlc1RvVW5kZXJsaW5lcyhyYW5nZSwgYXR0cmli
dXRlcywgcmFuZ2VzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXJrZWRUZXh0UmFuZ2UuZ2V0KCkg
JiYgeG1sRG9jSW1wbCgpICYmIG1fbWFya2VkVGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNl
cHRpb24pLT5yZW5kZXJlcigpKSB7Ci0JbV9tYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KGV4Y2VwdGlvbiktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJh
bmdlICYmIHJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSApIHsKLSAgICAgICAgbV9tYXJrZWRU
ZXh0UmFuZ2UgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbWFya2VkVGV4dFJhbmdlID0g
Y29uc3RfY2FzdDxSYW5nZUltcGwgKj4ocmFuZ2UpOwotICAgIH0KLQotICAgIGlmIChtX21hcmtl
ZFRleHRSYW5nZS5nZXQoKSAmJiB4bWxEb2NJbXBsKCkgJiYgbV9tYXJrZWRUZXh0UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiktPnJlbmRlcmVyKCkpIHsKLQltX21hcmtlZFRleHRSYW5n
ZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwotICAg
IH0KLX0KLQotYm9vbCBLV1FLSFRNTFBhcnQ6Om1hcmtlZFRleHRVc2VzVW5kZXJsaW5lcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzOwotfQotCi1RVmFs
dWVMaXN0PEtXUUtIVE1MUGFydDo6TWFya2VkVGV4dFVuZGVybGluZT4gS1dRS0hUTUxQYXJ0Ojpt
YXJrZWRUZXh0VW5kZXJsaW5lcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFya2VkVGV4dFVu
ZGVybGluZXM7Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0OjpjYW5Hb0JhY2tPckZvcndhcmQoaW50
IGRpc3RhbmNlKSBjb25zdAotewotICAgIHJldHVybiBbX2JyaWRnZSBjYW5Hb0JhY2tPckZvcndh
cmQ6ZGlzdGFuY2VdOwotfQotCi12b2lkIEtXUUtIVE1MUGFydDo6cHJlcGFyZUZvclVzZXJBY3Rp
b24oKQotewotICAgIC8vIFJlc2V0IHRoZSBtdWx0aXBsZSBmb3JtIHN1Ym1pc3Npb24gcHJvdGVj
dGlvbiBjb2RlLgotICAgIC8vIFdlJ2xsIGxldCB5b3Ugc3VibWl0IHRoZSBzYW1lIGZvcm0gdHdp
Y2UgaWYgeW91IGRvIHR3byBzZXBhcmF0ZSB1c2VyIGFjdGlvbnMuCi0gICAgX3N1Ym1pdHRlZEZv
cm1VUkwgPSBLVVJMKCk7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpkaWRGaXJzdExheW91dCgp
Ci17Ci0gICAgW19icmlkZ2UgZGlkRmlyc3RMYXlvdXRdOwotfQotCi1OU011dGFibGVEaWN0aW9u
YXJ5ICpLV1FLSFRNTFBhcnQ6OmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCkKLXsKLSAgICBE
b2N1bWVudEltcGwgKmRvYyA9IHhtbERvY0ltcGwoKTsKLSAgICBpZiAoIWRvYykgewotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIGNvbnN0IFFWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVn
aW9uVmFsdWU+IHJlZ2lvbnMgPSBkb2MtPmRhc2hib2FyZFJlZ2lvbnMoKTsKLSAgICB1aW50IGks
IGNvdW50ID0gcmVnaW9ucy5jb3VudCgpOwotCi0gICAgLy8gQ29udmVydCB0aGUgUVZhbHVlTGlz
dDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gaW50byBhIE5TRGljdGlvbmFyeSBvZiBXZWJEYXNoYm9h
cmRSZWdpb25zCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqd2ViUmVnaW9ucyA9IFtbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdIGF1dG9yZWxlYXNl
XTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBEYXNoYm9hcmRS
ZWdpb25WYWx1ZSByZWdpb24gPSByZWdpb25zW2ldOwotCi0gICAgICAgIGlmIChyZWdpb24udHlw
ZSA9PSBTdHlsZURhc2hib2FyZFJlZ2lvbjo6Tm9uZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgIE5TUmVjdCBjbGlwOwotICAgICAgICBjbGlwLm9yaWdpbi54
ID0gcmVnaW9uLmNsaXAueCgpOwotICAgICAgICBjbGlwLm9yaWdpbi55ID0gcmVnaW9uLmNsaXAu
eSgpOwotICAgICAgICBjbGlwLnNpemUud2lkdGggPSByZWdpb24uY2xpcC53aWR0aCgpOwotICAg
ICAgICBjbGlwLnNpemUuaGVpZ2h0ID0gcmVnaW9uLmNsaXAuaGVpZ2h0KCk7Ci0gICAgICAgIE5T
UmVjdCByZWN0OwotICAgICAgICByZWN0Lm9yaWdpbi54ID0gcmVnaW9uLmJvdW5kcy54KCk7Ci0g
ICAgICAgIHJlY3Qub3JpZ2luLnkgPSByZWdpb24uYm91bmRzLnkoKTsKLSAgICAgICAgcmVjdC5z
aXplLndpZHRoID0gcmVnaW9uLmJvdW5kcy53aWR0aCgpOwotICAgICAgICByZWN0LnNpemUuaGVp
Z2h0ID0gcmVnaW9uLmJvdW5kcy5oZWlnaHQoKTsKLSAgICAgICAgTlNTdHJpbmcgKmxhYmVsID0g
cmVnaW9uLmxhYmVsLmdldE5TU3RyaW5nKCk7Ci0gICAgICAgIFdlYkRhc2hib2FyZFJlZ2lvblR5
cGUgdHlwZSA9IFdlYkRhc2hib2FyZFJlZ2lvblR5cGVOb25lOwotICAgICAgICBpZiAocmVnaW9u
LnR5cGUgPT0gU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSkKLSAgICAgICAgICAgIHR5cGUg
PSBXZWJEYXNoYm9hcmRSZWdpb25UeXBlQ2lyY2xlOwotICAgICAgICBlbHNlIGlmIChyZWdpb24u
dHlwZSA9PSBTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlKQotICAgICAgICAgICAgdHlw
ZSA9IFdlYkRhc2hib2FyZFJlZ2lvblR5cGVSZWN0YW5nbGU7Ci0gICAgICAgIE5TTXV0YWJsZUFy
cmF5ICpyZWdpb25WYWx1ZXMgPSBbd2ViUmVnaW9ucyBvYmplY3RGb3JLZXk6bGFiZWxdOwotICAg
ICAgICBpZiAoIXJlZ2lvblZhbHVlcykgewotICAgICAgICAgICAgcmVnaW9uVmFsdWVzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgICAgIFt3ZWJSZWdpb25zIHNldE9iamVjdDpy
ZWdpb25WYWx1ZXMgZm9yS2V5OmxhYmVsXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
V2ViRGFzaGJvYXJkUmVnaW9uICp3ZWJSZWdpb24gPSBbW1tXZWJEYXNoYm9hcmRSZWdpb24gYWxs
b2NdIGluaXRXaXRoUmVjdDpyZWN0IGNsaXA6Y2xpcCB0eXBlOnR5cGVdIGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgW3JlZ2lvblZhbHVlcyBhZGRPYmplY3Q6d2ViUmVnaW9uXTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHdlYlJlZ2lvbnM7Ci19Ci0KLXZvaWQgS1dRS0hUTUxQYXJ0OjpkYXNoYm9h
cmRSZWdpb25zQ2hhbmdlZCgpCi17Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqd2ViUmVnaW9u
cyA9IGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7Ci0gICAgW19icmlkZ2UgZGFzaGJvYXJk
UmVnaW9uc0NoYW5nZWQ6d2ViUmVnaW9uc107Ci19Ci0KLWJvb2wgS1dRS0hUTUxQYXJ0Ojppc0No
YXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChjb25zdCBRQ2hhciAmYywgYm9vbCBpc1ByZXZpb3Vz
Q2hhcikKLXsKLSAgICByZXR1cm4gW19icmlkZ2UgaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVt
cHQ6Yy51bmljb2RlKCkgaXNQcmV2aW91c0NoYXJhY3Rlcjppc1ByZXZpb3VzQ2hhcl07Ci19Ci0K
LWJvb2wgS1dRS0hUTUxQYXJ0Ojppc0tIVE1MUGFydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLU5vZGVJbXBsICpLV1FLSFRNTFBhcnQ6Om1vdXNlUHJlc3NOb2RlKCkKLXsKLSAg
ICByZXR1cm4gZC0+bV9tb3VzZVByZXNzTm9kZS5nZXQoKTsKLX0KLQotdm9pZCBLV1FLSFRNTFBh
cnQ6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQotewotICAgIFtfYnJpZGdlIGhhbmRsZWRPbmxvYWRF
dmVudHNdOwotfQotCi1ib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkQ2xvc2UoKQotewotICAgIEtX
UV9CTE9DS19FWENFUFRJT05TOwotCi0gICAgaWYgKCFbX2JyaWRnZSBjYW5SdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWxdKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxEb2N1
bWVudEltcGw+IGRvY3VtZW50ID0geG1sRG9jSW1wbCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50
LT5ib2R5KCk7Ci0gICAgaWYgKCFib2R5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJl
ZlB0cjxCZWZvcmVVbmxvYWRFdmVudEltcGw+IGV2ZW50ID0gbmV3IEJlZm9yZVVubG9hZEV2ZW50
SW1wbDsKLSAgICBldmVudC0+c2V0VGFyZ2V0KGRvY3VtZW50LmdldCgpKTsKLSAgICBpbnQgZXhj
ZXB0aW9uID0gMDsKLSAgICBib2R5LT5kaXNwYXRjaEdlbmVyaWNFdmVudChldmVudC5nZXQoKSwg
ZXhjZXB0aW9uKTsKLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgZG9jdW1l
bnQpCi0gCWRvY3VtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICBp
ZiAoZXZlbnQtPnJlc3VsdCgpLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFFTdHJpbmcgdGV4dCA9IGV2ZW50LT5yZXN1bHQoKS5xc3RyaW5nKCk7Ci0gICAgdGV4dC5yZXBs
YWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwotCi0gICAgcmV0
dXJuIFtfYnJpZGdlIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOnRleHQu
Z2V0TlNTdHJpbmcoKV07Ci0KLSAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19CkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvRE9N
SFRNTC5tbQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiaHRtbF90YWJsZWltcGwuaCIKICNpbXBvcnQg
ImRvbV9lbGVtZW50aW1wbC5oIgogI2ltcG9ydCAiZG9tX25vZGVpbXBsLmgiCisjaW1wb3J0ICJk
b21fZG9jaW1wbC5oIgogI2ltcG9ydCAibWFya3VwLmgiCiAKICNpbXBvcnQgIkRPTUV4dGVuc2lv
bnMuaCIKSW5kZXg6IGt3cS9LV1FLSmF2YUFwcGxldFdpZGdldC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
d3EvS1dRS0phdmFBcHBsZXRXaWRnZXQubW0JKHJldmlzaW9uIDExOTYwKQorKysga3dxL0tXUUtK
YXZhQXBwbGV0V2lkZ2V0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaW1w
b3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIldl
YkNvcmVCcmlkZ2UuaCIKLSNpbXBvcnQgImtodG1sX3BhcnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1l
LmgiCiAKLUtKYXZhQXBwbGV0V2lkZ2V0OjpLSmF2YUFwcGxldFdpZGdldChjb25zdCBRU2l6ZSAm
c2l6ZSwgS0hUTUxQYXJ0ICpwYXJ0LCBjb25zdCBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+ICZhcmdz
KQorS0phdmFBcHBsZXRXaWRnZXQ6OktKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IFFTaXplICZzaXpl
LCBGcmFtZSAqZnJhbWUsIGNvbnN0IFFNYXA8UVN0cmluZywgUVN0cmluZz4gJmFyZ3MpCiB7CiAg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgCkBAIC01MCwxNSArNTAsMTYgQEAgS0phdmFB
cHBsZXRXaWRnZXQ6OktKYXZhQXBwbGV0V2lkZ2V0KGNvbgogICAgICAgICArK2l0OwogICAgIH0K
ICAgICAKLSAgICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2VVUkxT
dHJpbmcgPSBwYXJ0LT54bWxEb2NJbXBsKCktPmJhc2VVUkwoKTsKLSAgICBzZXRWaWV3KFtLV1Eo
cGFydCktPmJyaWRnZSgpIHZpZXdGb3JKYXZhQXBwbGV0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKQorICAgIGlmIChiYXNlVVJMU3RyaW5nLmlz
RW1wdHkoKSkgeworICAgICAgICBiYXNlVVJMU3RyaW5nID0gZnJhbWUtPnhtbERvY0ltcGwoKS0+
YmFzZVVSTCgpOworICAgIH0KKyAgICBzZXRWaWV3KFtNYWMoZnJhbWUpLT5icmlkZ2UoKSB2aWV3
Rm9ySmF2YUFwcGxldFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVOYW1lczphdHRyaWJ1dGVOYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJMOnBhcnQtPmNvbXBsZXRlVVJM
KGJhc2VVUkxTdHJpbmcpLmdldE5TVVJMKCldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpmcmFtZS0+Y29tcGxldGVVUkwoYmFzZVVSTFN0
cmluZykuZ2V0TlNVUkwoKV0pOwogICAgIFthdHRyaWJ1dGVOYW1lcyByZWxlYXNlXTsKICAgICBb
YXR0cmlidXRlVmFsdWVzIHJlbGVhc2VdOwotICAgIHBhcnQtPnZpZXcoKS0+YWRkQ2hpbGQodGhp
cyk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRkQ2hpbGQodGhpcyk7CiAgICAgCiAgICAgS1dRX1VO
QkxPQ0tfRVhDRVBUSU9OUzsKIH0KSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5z
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1t
CShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbXBvcnQgPGt4bWxjb3JlL0Fz
c2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIldlYkNvcmVC
cmlkZ2UuaCIKLSNpbXBvcnQgImtodG1sX3BhcnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1lLmgiCiAK
LUtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OktIVE1MUGFydEJyb3dzZXJFeHRlbnNpb24oS0hU
TUxQYXJ0ICpwYXJ0KQotICAgIDogX3BhcnQoS1dRKHBhcnQpKSwgX2Jyb3dzZXJJbnRlcmZhY2Uo
X3BhcnQpCitLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpLSFRNTFBhcnRCcm93c2VyRXh0ZW5z
aW9uKEZyYW1lICpmcmFtZSkKKyAgICA6IG1fZnJhbWUoTWFjKGZyYW1lKSksIF9icm93c2VySW50
ZXJmYWNlKG1fZnJhbWUpCiB7CiB9CiAKQEAgLTQwLDEwICs0MCwxMCBAQCB2b2lkIEtIVE1MUGFy
dEJyb3dzZXJFeHRlbnNpb246Om9wZW5VUkxSCiAJCQkJCSAgICAgICBjb25zdCBLUGFydHM6OlVS
TEFyZ3MgJmFyZ3MpCiB7CiAgICAgaWYgKHVybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImphdmFz
Y3JpcHQiKSB7Ci0JX3BhcnQtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLQlfcGFydC0+cmVwbGFj
ZUNvbnRlbnRzV2l0aFNjcmlwdFJlc3VsdCh1cmwpOworCW1fZnJhbWUtPmNyZWF0ZUVtcHR5RG9j
dW1lbnQoKTsKKwltX2ZyYW1lLT5yZXBsYWNlQ29udGVudHNXaXRoU2NyaXB0UmVzdWx0KHVybCk7
CiAgICAgIH0gZWxzZSB7Ci0JX3BhcnQtPm9wZW5VUkxSZXF1ZXN0KHVybCwgYXJncyk7CisJbV9m
cmFtZS0+b3BlblVSTFJlcXVlc3QodXJsLCBhcmdzKTsKICAgICB9CiB9CiAKQEAgLTc5LDE1ICs3
OSwxNSBAQCB2b2lkIEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OmNyZWF0ZU5lCiAKICAgICBO
U1N0cmluZyAqZnJhbWVOYW1lID0gdXJsQXJncy5mcmFtZU5hbWUubGVuZ3RoKCkgPT0gMCA/IG5p
bCA6IHVybEFyZ3MuZnJhbWVOYW1lLmdldE5TU3RyaW5nKCk7CiAgICAgaWYgKGZyYW1lTmFtZSkg
ewotICAgICAgICAvLyBGSVhNRTogQ2FuJ3QgeW91IGp1c3QgdXNlIF9wYXJ0LT5maW5kRnJhbWU/
Ci0gICAgICAgIGlmIChXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBbX3BhcnQtPmJyaWRnZSgpIGZp
bmRGcmFtZU5hbWVkOmZyYW1lTmFtZV0pIHsKKyAgICAgICAgLy8gRklYTUU6IENhbid0IHlvdSBq
dXN0IHVzZSBtX2ZyYW1lLT5maW5kRnJhbWU/CisgICAgICAgIGlmIChXZWJDb3JlQnJpZGdlICpi
cmlkZ2UgPSBbbV9mcmFtZS0+YnJpZGdlKCkgZmluZEZyYW1lTmFtZWQ6ZnJhbWVOYW1lXSkgewog
ICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmlu
ZyBhcmdzUmVmZXJyZXIgPSB1cmxBcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl07CiAgICAgICAg
ICAgICAgICAgTlNTdHJpbmcgKnJlZmVycmVyOwogICAgICAgICAgICAgICAgIGlmIChhcmdzUmVm
ZXJyZXIubGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgICAgICAgICByZWZlcnJlciA9IGFyZ3NS
ZWZlcnJlci5nZXROU1N0cmluZygpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVmZXJyZXIgPSBbX3BhcnQtPmJyaWRnZSgpIHJlZmVycmVyXTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVmZXJyZXIgPSBbbV9mcmFtZS0+YnJpZGdlKCkgcmVmZXJyZXJdOwogCiAg
ICAgICAgICAgICAgICAgW2JyaWRnZSBsb2FkVVJMOnVybC5nZXROU1VSTCgpIAogICAgICAgICAg
ICAgICAgICAgICAgICByZWZlcnJlcjpyZWZlcnJlciAKQEAgLTExMCw5ICsxMTAsOSBAQCB2b2lk
IEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OmNyZWF0ZU5lCiAgICAgCiAgICAgV2ViQ29yZUJy
aWRnZSAqYnJpZGdlOwogICAgIGlmICh3aW5BcmdzLmRpYWxvZykKLSAgICAgICAgYnJpZGdlID0g
W19wYXJ0LT5icmlkZ2UoKSBjcmVhdGVNb2RhbERpYWxvZ1dpdGhVUkw6dXJsLmdldE5TVVJMKCld
OworICAgICAgICBicmlkZ2UgPSBbbV9mcmFtZS0+YnJpZGdlKCkgY3JlYXRlTW9kYWxEaWFsb2dX
aXRoVVJMOnVybC5nZXROU1VSTCgpXTsKICAgICBlbHNlCi0gICAgICAgIGJyaWRnZSA9IFtfcGFy
dC0+YnJpZGdlKCkgY3JlYXRlV2luZG93V2l0aFVSTDp1cmwuZ2V0TlNVUkwoKSBmcmFtZU5hbWU6
ZnJhbWVOYW1lXTsKKyAgICAgICAgYnJpZGdlID0gW21fZnJhbWUtPmJyaWRnZSgpIGNyZWF0ZVdp
bmRvd1dpdGhVUkw6dXJsLmdldE5TVVJMKCkgZnJhbWVOYW1lOmZyYW1lTmFtZV07CiAKICAgICBp
ZiAoIWJyaWRnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5LDIxICsxNjksMjEgQEAgdm9pZCBL
SFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpjcmVhdGVOZQogdm9pZCBLSFRNTFBhcnRCcm93c2Vy
RXh0ZW5zaW9uOjpzZXRJY29uVVJMKGNvbnN0IEtVUkwgJnVybCkKIHsKICAgICBLV1FfQkxPQ0tf
RVhDRVBUSU9OUzsKLSAgICBbX3BhcnQtPmJyaWRnZSgpIHNldEljb25VUkw6dXJsLmdldE5TVVJM
KCldOworICAgIFttX2ZyYW1lLT5icmlkZ2UoKSBzZXRJY29uVVJMOnVybC5nZXROU1VSTCgpXTsK
ICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCiB2b2lkIEtIVE1MUGFydEJyb3dzZXJF
eHRlbnNpb246OnNldFR5cGVkSWNvblVSTChjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFFTdHJpbmcg
JnR5cGUpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW19wYXJ0LT5icmlkZ2Uo
KSBzZXRJY29uVVJMOnVybC5nZXROU1VSTCgpIHdpdGhUeXBlOnR5cGUuZ2V0TlNTdHJpbmcoKV07
CisgICAgW21fZnJhbWUtPmJyaWRnZSgpIHNldEljb25VUkw6dXJsLmdldE5TVVJMKCkgd2l0aFR5
cGU6dHlwZS5nZXROU1N0cmluZygpXTsKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQog
CiBib29sIEtIVE1MUGFydEJyb3dzZXJFeHRlbnNpb246OmNhblJ1bk1vZGFsKCkKIHsKICAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW19wYXJ0LT5icmlkZ2UoKSBjYW5SdW5N
b2RhbF07CisgICAgcmV0dXJuIFttX2ZyYW1lLT5icmlkZ2UoKSBjYW5SdW5Nb2RhbF07CiAgICAg
S1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xOTEsNyAr
MTkxLDcgQEAgYm9vbCBLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpjYW5SdW5NbwogYm9vbCBL
SFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uOjpjYW5SdW5Nb2RhbE5vdygpCiB7CiAgICAgS1dRX0JM
T0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtfcGFydC0+YnJpZGdlKCkgY2FuUnVuTW9kYWxO
b3ddOworICAgIHJldHVybiBbbV9mcmFtZS0+YnJpZGdlKCkgY2FuUnVuTW9kYWxOb3ddOwogICAg
IEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTk5LDYg
KzE5OSw2IEBAIGJvb2wgS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbjo6Y2FuUnVuTW8KIHZvaWQg
S0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbjo6cnVuTW9kYWwoKQogewogICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwotICAgIFtfcGFydC0+YnJpZGdlKCkgcnVuTW9kYWxdOworICAgIFttX2ZyYW1l
LT5icmlkZ2UoKSBydW5Nb2RhbF07CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KSW5k
ZXg6IGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FSZW5k
ZXJUcmVlRGVidWcuY3BwCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FSZW5kZXJUcmVlRGVi
dWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiS0NhbnZh
c0NvbnRhaW5lci5oIgogI2VuZGlmCiAKLSNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIKKyNpbmNs
dWRlICJNYWNGcmFtZS5oIgogI2luY2x1ZGUgIktXUVRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJL
V1FQdHJWZWN0b3IuaCIKIApAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgd3JpdGUoUVRleHRTdHJl
YW0gJnRzLCBjb25zdCBSZW5kZXIKICAgICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICY+KG8pLndpZGdldCgpOwogICAgICAgICBpZiAod2lkZ2V0
ICYmIHdpZGdldC0+aW5oZXJpdHMoIktIVE1MVmlldyIpKSB7CiAgICAgICAgICAgICBLSFRNTFZp
ZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcgKj4od2lkZ2V0KTsKLSAgICAgICAgICAg
IFJlbmRlck9iamVjdCAqcm9vdCA9IEtXUSh2aWV3LT5wYXJ0KCkpLT5yZW5kZXJlcigpOworICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0ICpyb290ID0gTWFjKHZpZXctPmZyYW1lKCkpLT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgaWYgKHJvb3QpIHsKICAgICAgICAgICAgICAgICB2aWV3LT5sYXlv
dXQoKTsKICAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogbCA9IHJvb3QtPmxheWVyKCk7CkBA
IC0zOTksMTEgKzM5OSwxMSBAQCBzdGF0aWMgdm9pZCB3cml0ZVNlbGVjdGlvbihRVGV4dFN0cmVh
bSAmCiAgICAgICAgIHJldHVybjsKIAogICAgIERvY3VtZW50SW1wbCAqZG9jID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnRJbXBsICo+KG4pOwotICAgIEtIVE1MUGFydCAqcGFydCA9IGRvYy0+cGFydCgp
OwotICAgIGlmICghcGFydCkKKyAgICBGcmFtZSAqZnJhbWUgPSBkb2MtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBz
ZWxlY3Rpb24gPSBwYXJ0LT5zZWxlY3Rpb24oKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNl
bGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQo
KSkgewogICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0
KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5u
b2RlKCkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSA9PSBVUFNUUkVB
TSkKSW5kZXg6IGt3cS9LV1FXaWRnZXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVdpZGdldC5t
bQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRV2lkZ2V0Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktX
UUZvdW5kYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAi
TWFjRnJhbWUuaCIKICNpbXBvcnQgIktXUUxvZ2dpbmcuaCIKICNpbXBvcnQgIktXUVN0eWxlLmgi
CiAjaW1wb3J0ICJLV1FWaWV3LmgiCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBRV2lkZ2V0Ojpy
ZXNpemUoaW50IHcsIGludCBoKSAKIHZvaWQgUVdpZGdldDo6c2V0QWN0aXZlV2luZG93KCkgCiB7
CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW0tXUUtIVE1MUGFydDo6YnJpZGdlRm9y
V2lkZ2V0KHRoaXMpIGZvY3VzV2luZG93XTsKKyAgICBbTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdl
dCh0aGlzKSBmb2N1c1dpbmRvd107CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIApA
QCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgUVdpZGdldDo6aGFzRm9jdXMoKSBjb25zdAogCiAgICAg
TlNWaWV3ICp2aWV3ID0gW2dldFZpZXcoKSBfd2ViY29yZV9lZmZlY3RpdmVGaXJzdFJlc3BvbmRl
cl07CiAKLSAgICBpZCBmaXJzdFJlc3BvbmRlciA9IFtLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldp
ZGdldCh0aGlzKSBmaXJzdFJlc3BvbmRlcl07CisgICAgaWQgZmlyc3RSZXNwb25kZXIgPSBbTWFj
RnJhbWU6OmJyaWRnZUZvcldpZGdldCh0aGlzKSBmaXJzdFJlc3BvbmRlcl07CiAKICAgICBpZiAo
IWZpcnN0UmVzcG9uZGVyKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0Nyw3ICsyNDcs
NyBAQCB2b2lkIFFXaWRnZXQ6OnNldEZvY3VzKCkKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsK
ICAgICBOU1ZpZXcgKnZpZXcgPSBbZ2V0VmlldygpIF93ZWJjb3JlX2VmZmVjdGl2ZUZpcnN0UmVz
cG9uZGVyXTsKICAgICBpZiAoW3ZpZXcgc3VwZXJ2aWV3XSAmJiBbdmlldyBhY2NlcHRzRmlyc3RS
ZXNwb25kZXJdKSB7Ci0gICAgICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IEtXUUtIVE1MUGFy
dDo6YnJpZGdlRm9yV2lkZ2V0KHRoaXMpOworICAgICAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2Ug
PSBNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHRoaXMpOwogICAgICAgICBOU1Jlc3BvbmRlciAq
b2xkRmlyc3RSZXNwb25kZXIgPSBbYnJpZGdlIGZpcnN0UmVzcG9uZGVyXTsKIAogICAgICAgICBb
YnJpZGdlIG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3XTsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lk
IFFXaWRnZXQ6OmNsZWFyRm9jdXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IEtXUUtIVE1MUGFydDo6Y2xlYXJEb2N1bWVudEZvY3VzKHRoaXMpOworICAgIE1hY0ZyYW1lOjpj
bGVhckRvY3VtZW50Rm9jdXModGhpcyk7CiB9CiAKIGJvb2wgUVdpZGdldDo6Y2hlY2tzRGVzY2Vu
ZGFudHNGb3JGb2N1cygpIGNvbnN0CkBAIC0zNDYsNyArMzQ2LDcgQEAgYm9vbCBRV2lkZ2V0Ojpp
c1Zpc2libGUoKSBjb25zdAogICAgIC8vIEZJWE1FIC0gcmV3cml0ZSBpbnRlcm1zIG9mIHRvcCBs
ZXZlbCB3aWRnZXQ/CiAgICAgCiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IFtbS1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQodGhpcykgd2luZG93XSBpc1Zpc2libGVd
OworICAgIHJldHVybiBbW01hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQodGhpcykgd2luZG93XSBp
c1Zpc2libGVdOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC00MTIsNyArNDEyLDcgQEAgUVBvaW50IFFXaWRnZXQ6Om1hcEZyb21HbG9iYWwoY29u
c3QgUVBvaQogICAgIE5TUG9pbnQgYnAgPSB7MCwwfTsKIAogICAgIEtXUV9CTE9DS19FWENFUFRJ
T05TOwotICAgIGJwID0gW1tLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldCh0aGlzKSB3aW5k
b3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W2RhdGEtPnZpZXcgY29udmVydFBvaW50OnAgdG9WaWV3
Om5pbF1dOworICAgIGJwID0gW1tNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHRoaXMpIHdpbmRv
d10gY29udmVydFNjcmVlblRvQmFzZTpbZGF0YS0+dmlldyBjb252ZXJ0UG9pbnQ6cCB0b1ZpZXc6
bmlsXV07CiAgICAgcmV0dXJuIFFQb2ludChicCk7CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9O
UzsKICAgICByZXR1cm4gUVBvaW50KCk7CkBAIC01MTYsNyArNTE2LDcgQEAgdm9pZCBRV2lkZ2V0
OjpzZW5kQ29uc3VtZWRNb3VzZVVwKCkKIAogdm9pZCBRV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJv
b2wgaXNTZWxlY3RlZCkKIHsKLSAgICBbS1dRS0hUTUxQYXJ0OjpicmlkZ2VGb3JXaWRnZXQodGhp
cykgc2V0SXNTZWxlY3RlZDppc1NlbGVjdGVkIGZvclZpZXc6Z2V0VmlldygpXTsKKyAgICBbTWFj
RnJhbWU6OmJyaWRnZUZvcldpZGdldCh0aGlzKSBzZXRJc1NlbGVjdGVkOmlzU2VsZWN0ZWQgZm9y
VmlldzpnZXRWaWV3KCldOwogfQogCiB2b2lkIFFXaWRnZXQ6OmFkZFRvU3VwZXJ2aWV3KE5TVmll
dyAqc3VwZXJ2aWV3KQpJbmRleDoga3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0JKHJldmlzaW9uIDEx
OTYwKQorKysga3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2lt
cG9ydCAiS1dRRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCisjaW1wb3J0
ICJNYWNGcmFtZS5oIgogI2ltcG9ydCAiV2ViQ29yZUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgS1Bh
cnRzIHsKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEtQYXJ0cyB7CiBRVmFyaWFudCBCcm93
c2VySW50ZXJmYWNlOjpwcm9wZXJ0eShjb25zdCBjaGFyICpuYW1lKSBjb25zdAogewogICAgIGlm
IChzdHJjbXAobmFtZSwgImhpc3RvcnlMZW5ndGgiKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBR
VmFyaWFudCgodWludClbX3BhcnQtPmJyaWRnZSgpIGhpc3RvcnlMZW5ndGhdKTsKKyAgICAgICAg
cmV0dXJuIFFWYXJpYW50KCh1aW50KVttX2ZyYW1lLT5icmlkZ2UoKSBoaXN0b3J5TGVuZ3RoXSk7
CiAgICAgfQogICAgIEVSUk9SKCJwcm9wZXJ0eSAlcyBub3QgaW1wbGVtZW50ZWQiLCBuYW1lKTsK
ICAgICByZXR1cm4gUVZhcmlhbnQoKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBCcm93c2VySW50
ZXJmYWNlOjpjYWxsTWV0aG9kKGNvbnN0IAogICAgIGlmIChzdHJjbXAobmFtZSwgImdvSGlzdG9y
eShpbnQpIikgPT0gMCkgewogICAgICAgICBpbnQgZGlzdGFuY2UgPSBhcmd1bWVudC50b0ludCgp
OwogCUtXUV9CTE9DS19FWENFUFRJT05TOwotCVtfcGFydC0+YnJpZGdlKCkgZ29CYWNrT3JGb3J3
YXJkOmRpc3RhbmNlXTsKKwlbbV9mcmFtZS0+YnJpZGdlKCkgZ29CYWNrT3JGb3J3YXJkOmRpc3Rh
bmNlXTsKIAlLV1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgICAgICByZXR1cm47CiAgICAgfQpJ
bmRleDoga3dxL0tXUVBhZ2VTdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRUGFnZVN0YXRl
Lm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FQYWdlU3RhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiS1dRS0hUTUxQYXJ0Lmgi
CisjaW1wb3J0ICJNYWNGcmFtZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogCkBAIC01Miw3
ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAgICAgZG9jLT5yZWYoKTsKICAgICBkb2N1
bWVudCA9IGRvYzsKICAgICBkb2MtPnNldEluUGFnZUNhY2hlKFlFUyk7Ci0gICAgbW91c2VQcmVz
c05vZGUgPSBzdGF0aWNfY2FzdDxLV1FLSFRNTFBhcnQgKj4oZG9jLT5wYXJ0KCkpLT5tb3VzZVBy
ZXNzTm9kZSgpOworICAgIG1vdXNlUHJlc3NOb2RlID0gc3RhdGljX2Nhc3Q8TWFjRnJhbWUgKj4o
ZG9jLT5mcmFtZSgpKS0+bW91c2VQcmVzc05vZGUoKTsKICAgICBpZiAobW91c2VQcmVzc05vZGUp
CiAgICAgICAgIG1vdXNlUHJlc3NOb2RlLT5yZWYoKTsKICAgICBVUkwgPSBuZXcgS1VSTCh1KTsK
QEAgLTEyNSw3ICsxMjUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiAgICAgICAgIEtIVE1M
VmlldyAqdmlldyA9IGRvY3VtZW50LT52aWV3KCk7CiAKLSAgICAgICAgS1dRS0hUTUxQYXJ0Ojpj
bGVhclRpbWVycyh2aWV3KTsKKyAgICAgICAgTWFjRnJhbWU6OmNsZWFyVGltZXJzKHZpZXcpOwog
CiAgICAgICAgIGJvb2wgZGV0YWNoZWQgPSBkb2N1bWVudC0+cmVuZGVyZXIoKSA9PSAwOwogICAg
ICAgICBkb2N1bWVudC0+c2V0SW5QYWdlQ2FjaGUoTk8pOwpAQCAtMTU4LDcgKzE1OCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiAKICAgICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jdW1lbnQt
PnZpZXcoKTsKIAotICAgICAgICBLV1FLSFRNTFBhcnQ6OmNsZWFyVGltZXJzKHZpZXcpOworICAg
ICAgICBNYWNGcmFtZTo6Y2xlYXJUaW1lcnModmlldyk7CiAKICAgICAgICAgYm9vbCBkZXRhY2hl
ZCA9IGRvY3VtZW50LT5yZW5kZXJlcigpID09IDA7CiAgICAgICAgIGRvY3VtZW50LT5zZXRJblBh
Z2VDYWNoZShOTyk7CkluZGV4OiBrd3EvS1dRVGV4dEFyZWEubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dx
L0tXUVRleHRBcmVhLm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FUZXh0QXJlYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAiRE9NSFRNTC5oIgogI2lt
cG9ydCAiRXZlbnROYW1lcy5oIgogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotI2lt
cG9ydCAiS1dRS0hUTUxQYXJ0LmgiCisjaW1wb3J0ICJNYWNGcmFtZS5oIgogI2ltcG9ydCAiS1dR
VGV4dEVkaXQuaCIKICNpbXBvcnQgInJlbmRlcl9yZXBsYWNlZC5oIgogI2ltcG9ydCAiV2ViQ29y
ZUJyaWRnZS5oIgpAQCAtMjE2LDcgKzIxNiw3IEBAIGNvbnN0IGZsb2F0IExhcmdlTnVtYmVyRm9y
VGV4dCA9IDEuMGU3OwogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+dGV4dENoYW5n
ZWQoKTsKICAgICAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBLV1FLSFRNTFBhcnQ6OmJy
aWRnZUZvcldpZGdldCh3aWRnZXQpOworICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IE1hY0Zy
YW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBbYnJpZGdlIHRleHREaWRDaGFuZ2VJ
blRleHRBcmVhOihET01IVE1MVGV4dEFyZWFFbGVtZW50ICopW2JyaWRnZSBlbGVtZW50Rm9yVmll
dzpzZWxmXV07CiB9CiAKQEAgLTM4OCw3ICszODgsNyBAQCBjb25zdCBmbG9hdCBMYXJnZU51bWJl
ckZvclRleHQgPSAxLjBlNzsKICAgICAvLyB0aGUgcGFydCBpc24ndCByZWFjaGFibGUsIGhlbmNl
IHRoZSBzZXR0aW5ncyBhcmVuJ3QgcmVhY2hhYmxlLCB1bnRpbCB0aGUgZXZlbnQgZmlsdGVyIGhh
cwogICAgIC8vIGJlZW4gaW5zdGFsbGVkLgogICAgIGlmICghcmVzaXphYmxlQnlVc2VyQ29tcHV0
ZWQpIHsKLSAgICAgICAgcmVzaXphYmxlQnlVc2VyID0gW0tXUUtIVE1MUGFydDo6YnJpZGdlRm9y
V2lkZ2V0KHdpZGdldCkgcGFydF0tPnNldHRpbmdzKCktPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgp
OworICAgICAgICByZXNpemFibGVCeVVzZXIgPSBbTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh3
aWRnZXQpIHBhcnRdLT5zZXR0aW5ncygpLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKTsKICAgICAg
ICAgcmVzaXphYmxlQnlVc2VyQ29tcHV0ZWQgPSBZRVM7CiAgICAgfQogICAgIHJldHVybiByZXNp
emFibGVCeVVzZXI7CkBAIC02MTYsMjEgKzYxNiwyMSBAQCBzdGF0aWMgTlNSYW5nZSBSYW5nZU9m
UGFyYWdyYXBoKE5TU3RyaW5nCiAtIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCiB7CiAgICAg
aWYgKHdpZGdldCkKLSAgICAgICAgW0tXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdl
dCkgbWFrZUZpcnN0UmVzcG9uZGVyOnRleHRWaWV3XTsKKyAgICAgICAgW01hY0ZyYW1lOjpicmlk
Z2VGb3JXaWRnZXQod2lkZ2V0KSBtYWtlRmlyc3RSZXNwb25kZXI6dGV4dFZpZXddOwogICAgIHJl
dHVybiBZRVM7CiB9CiAKIC0gKE5TVmlldyAqKW5leHRLZXlWaWV3CiB7CiAgICAgcmV0dXJuIGlu
TmV4dFZhbGlkS2V5VmlldyAmJiB3aWRnZXQKLSAgICAgICAgPyBLV1FLSFRNTFBhcnQ6Om5leHRL
ZXlWaWV3Rm9yV2lkZ2V0KHdpZGdldCwgS1dRU2VsZWN0aW5nTmV4dCkKKyAgICAgICAgPyBNYWNG
cmFtZTo6bmV4dEtleVZpZXdGb3JXaWRnZXQod2lkZ2V0LCBLV1FTZWxlY3RpbmdOZXh0KQogICAg
ICAgICA6IFtzdXBlciBuZXh0S2V5Vmlld107CiB9CiAKIC0gKE5TVmlldyAqKXByZXZpb3VzS2V5
VmlldwogewogICAgcmV0dXJuIGluTmV4dFZhbGlkS2V5VmlldyAmJiB3aWRnZXQKLSAgICAgICAg
PyBLV1FLSFRNTFBhcnQ6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHdpZGdldCwgS1dRU2VsZWN0aW5n
UHJldmlvdXMpCisgICAgICAgID8gTWFjRnJhbWU6Om5leHRLZXlWaWV3Rm9yV2lkZ2V0KHdpZGdl
dCwgS1dRU2VsZWN0aW5nUHJldmlvdXMpCiAgICAgICAgIDogW3N1cGVyIHByZXZpb3VzS2V5Vmll
d107CiB9CiAKQEAgLTY3NCw3ICs2NzQsNyBAQCBzdGF0aWMgTlNSYW5nZSBSYW5nZU9mUGFyYWdy
YXBoKE5TU3RyaW5nCiAgICAgLy8gSWYgdGhlIGN1cnNvciB0cmFja2luZyB3b3JrZWQgcGVyZmVj
dGx5LCB0aGlzIG5leHQgbGluZSB3b3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCBpdCB3b3VsZCBi
ZSBoYXJtbGVzcyBzdGlsbC4KICAgICBbW05TQ3Vyc29yIGFycm93Q3Vyc29yXSBzZXRdOwogICAg
IAotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IEtXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lk
Z2V0KHdpZGdldCk7CisgICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlID0gTWFjRnJhbWU6OmJyaWRn
ZUZvcldpZGdldCh3aWRnZXQpOwogICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQgKmVsZW1lbnQg
PSAoRE9NSFRNTFRleHRBcmVhRWxlbWVudCAqKVticmlkZ2UgZWxlbWVudEZvclZpZXc6c2VsZl07
CiAgICAgQVNTRVJUKFtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxUZXh0QXJlYUVsZW1l
bnQgY2xhc3NdXSk7CiAgICAgCkBAIC03NzgsNyArNzc4LDcgQEAgc3RhdGljIE5TUmFuZ2UgUmFu
Z2VPZlBhcmFncmFwaChOU1N0cmluZwogICAgICAgICAgICAgLy8gZmxvYXRpbmcgaW4gc3BhY2Uu
IE1heWJlIHdlIHdhbnQgdG8gdXNlIGEgc2xpZ2h0bHkgbGFyZ2VyIHJlc2l6ZSBpbWFnZSBoZXJl
IHRoYXQgZml0cyB0aGUgc2Nyb2xsZXIKICAgICAgICAgICAgIC8vIHdpZHRoIGJldHRlci4KICAg
ICAgICAgfQotICAgICAgICBpZiAod2lkZ2V0ICYmIFtLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldp
ZGdldCh3aWRnZXQpIGZpcnN0UmVzcG9uZGVyXSA9PSB0ZXh0VmlldykgeworICAgICAgICBpZiAo
d2lkZ2V0ICYmIFtNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZmlyc3RSZXNwb25k
ZXJdID09IHRleHRWaWV3KSB7CiAgICAgICAgICAgICBOU1NldEZvY3VzUmluZ1N0eWxlKE5TRm9j
dXNSaW5nT25seSk7CiAgICAgICAgICAgICBOU1JlY3RGaWxsKFtzZWxmIGJvdW5kc10pOwogICAg
ICAgICB9CkBAIC05MjksNyArOTI5LDcgQEAgc3RhdGljIE5TU3RyaW5nICpXZWJDb250aW51b3Vz
U3BlbGxDaGVjawogewogICAgIE5TVmlldyAqdmlldyA9IFtbc2VsZiBkZWxlZ2F0ZV0gbmV4dFZh
bGlkS2V5Vmlld107CiAgICAgaWYgKHZpZXcgJiYgdmlldyAhPSBzZWxmICYmIHZpZXcgIT0gW3Nl
bGYgZGVsZWdhdGVdICYmIHdpZGdldCkgewotICAgICAgICBbS1dRS0hUTUxQYXJ0OjpicmlkZ2VG
b3JXaWRnZXQod2lkZ2V0KSBtYWtlRmlyc3RSZXNwb25kZXI6dmlld107CisgICAgICAgIFtNYWNG
cmFtZTo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXddOwog
ICAgIH0KIH0KIApAQCAtOTM3LDcgKzkzNyw3IEBAIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29udGlu
dW91c1NwZWxsQ2hlY2sKIHsKICAgICBOU1ZpZXcgKnZpZXcgPSBbW3NlbGYgZGVsZWdhdGVdIHBy
ZXZpb3VzVmFsaWRLZXlWaWV3XTsKICAgICBpZiAodmlldyAmJiB2aWV3ICE9IHNlbGYgJiYgdmll
dyAhPSBbc2VsZiBkZWxlZ2F0ZV0gJiYgd2lkZ2V0KSB7Ci0gICAgICAgIFtLV1FLSFRNTFBhcnQ6
OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3XTsKKyAgICAg
ICAgW01hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KSBtYWtlRmlyc3RSZXNwb25kZXI6
dmlld107CiAgICAgfQogfQogCkBAIC05NjEsNyArOTYxLDcgQEAgc3RhdGljIE5TU3RyaW5nICpX
ZWJDb250aW51b3VzU3BlbGxDaGVjawogICAgIC0taW5SZXNwb25kZXJDaGFuZ2U7CiAKICAgICBp
ZiAoYmVjb21lKSB7Ci0gICAgICAgIGlmICghS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc01v
dXNlRG93bkluV2lkZ2V0KHdpZGdldCkpIHsKKyAgICAgICAgaWYgKCFNYWNGcmFtZTo6Y3VycmVu
dEV2ZW50SXNNb3VzZURvd25JbldpZGdldCh3aWRnZXQpKSB7CiAgICAgICAgICAgICBSZW5kZXJX
aWRnZXQgKncgPSBjb25zdF9jYXN0PFJlbmRlcldpZGdldCAqPiAoc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyV2lkZ2V0ICo+KHdpZGdldC0+ZXZlbnRGaWx0ZXJPYmplY3QoKSkpOwogICAgICAgICAg
ICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gdy0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgICAg
IGlmIChsYXllcikKQEAgLTk5Myw3ICs5OTMsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKldlYkNvbnRp
bnVvdXNTcGVsbENoZWNrCiAgICAgICAgICAgICBRRm9jdXNFdmVudCBldmVudChRRXZlbnQ6OkZv
Y3VzT3V0KTsKICAgICAgICAgICAgIGlmICh3aWRnZXQtPmV2ZW50RmlsdGVyT2JqZWN0KCkpIHsK
ICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PFFPYmplY3QgKj4od2lkZ2V0LT5ldmVudEZpbHRl
ck9iamVjdCgpKS0+ZXZlbnRGaWx0ZXIod2lkZ2V0LCAmZXZlbnQpOwotICAgICAgICAgICAgICAg
IFtLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIGZvcm1Db250cm9sSXNSZXNp
Z25pbmdGaXJzdFJlc3BvbmRlcjpzZWxmXTsKKyAgICAgICAgICAgICAgICBbTWFjRnJhbWU6OmJy
aWRnZUZvcldpZGdldCh3aWRnZXQpIGZvcm1Db250cm9sSXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRl
cjpzZWxmXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSAgICAgICAgCiAgICAgfQpAQCAtMTAw
MywxMiArMTAwMywxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKldlYkNvbnRpbnVvdXNTcGVsbENoZWNr
CiAKIC0gKEJPT0wpc2hvdWxkRHJhd0luc2VydGlvblBvaW50CiB7Ci0gICAgcmV0dXJuIHdpZGdl
dCAmJiBzZWxmID09IFtLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIGZpcnN0
UmVzcG9uZGVyXSAmJiBbc3VwZXIgc2hvdWxkRHJhd0luc2VydGlvblBvaW50XTsKKyAgICByZXR1
cm4gd2lkZ2V0ICYmIHNlbGYgPT0gW01hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KSBm
aXJzdFJlc3BvbmRlcl0gJiYgW3N1cGVyIHNob3VsZERyYXdJbnNlcnRpb25Qb2ludF07CiB9CiAK
IC0gKE5TRGljdGlvbmFyeSAqKXNlbGVjdGVkVGV4dEF0dHJpYnV0ZXMKIHsKLSAgICBpZiAod2lk
Z2V0ICYmIHNlbGYgIT0gW0tXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lkZ2V0KHdpZGdldCkgZmly
c3RSZXNwb25kZXJdKQorICAgIGlmICh3aWRnZXQgJiYgc2VsZiAhPSBbTWFjRnJhbWU6OmJyaWRn
ZUZvcldpZGdldCh3aWRnZXQpIGZpcnN0UmVzcG9uZGVyXSkKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICByZXR1cm4gW3N1cGVyIHNlbGVjdGVkVGV4dEF0dHJpYnV0ZXNdOwogfQpAQCAtMTEyMCwx
NCArMTEyMCwxNCBAQCBzdGF0aWMgTlNTdHJpbmcgKldlYkNvbnRpbnVvdXNTcGVsbENoZWNrCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBLV1FL
SFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpOworICAgIFdlYkNvcmVCcmlkZ2UgKmJy
aWRnZSA9IE1hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBpZiAoW2JyaWRn
ZSBpbnRlcmNlcHRLZXlFdmVudDpldmVudCB0b1ZpZXc6c2VsZl0pIHsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICAvLyBEb24ndCBsZXQgb3B0aW9uLXRhYiBpbnNlcnQgYSBjaGFy
YWN0ZXIgc2luY2Ugd2UgdXNlIGl0IGZvcgogICAgIC8vIHRhYmJpbmcgYmV0d2VlbiBsaW5rcwot
ICAgIGlmIChLV1FLSFRNTFBhcnQ6OmhhbmRsZUtleWJvYXJkT3B0aW9uVGFiSW5WaWV3KHNlbGYp
KSB7CisgICAgaWYgKE1hY0ZyYW1lOjpoYW5kbGVLZXlib2FyZE9wdGlvblRhYkluVmlldyhzZWxm
KSkgewogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTEzOSw3ICsxMTM5LDcgQEAg
c3RhdGljIE5TU3RyaW5nICpXZWJDb250aW51b3VzU3BlbGxDaGVjawogICAgIGlmIChkaXNhYmxl
ZCB8fCAhd2lkZ2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJDb3JlQnJpZGdlICpicmlk
Z2UgPSBLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpOworICAgIFdlYkNvcmVC
cmlkZ2UgKmJyaWRnZSA9IE1hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBp
ZiAoIVtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl0gaGFzTWFya2VkVGV4dF0p
IHsKIAlbYnJpZGdlIGludGVyY2VwdEtleUV2ZW50OmV2ZW50IHRvVmlldzpzZWxmXTsKICAgICB9
CkluZGV4OiBrd3EvS1dRVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRVGltZXIuaAkocmV2
aXNpb24gMTE5NjApCisrKyBrd3EvS1dRVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHZvaWQgc2luZ2xlU2hvdChpbnQgbXNl
YywgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcik7CiAKLSAgICAvLyBUaGlz
IGlzIGp1c3QgYSBoYWNrIHVzZWQgYnkgS1dRS0hUTUxQYXJ0LiBUaGUgbW9uaXRvciBmdW5jdGlv
bgorICAgIC8vIFRoaXMgaXMganVzdCBhIGhhY2sgdXNlZCBieSBNYWNGcmFtZS4gVGhlIG1vbml0
b3IgZnVuY3Rpb24KICAgICAvLyBnZXRzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBzdGFydHMgYW5k
IHdoZW4gaXQgaXMgc3RvcHBlZCBiZWZvcmUgZmlyaW5nLAogICAgIC8vIGJ1dCBub3Qgd2hlbiB0
aGUgdGltZXIgZmlyZXMuCiAgICAgdm9pZCBzZXRNb25pdG9yKHZvaWQgKCptb25pdG9yRnVuY3Rp
b24pKHZvaWQgKmNvbnRleHQpLCB2b2lkICpjb250ZXh0KTsKSW5kZXg6IGt3cS9LV1FLSFRNTFBh
cnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FLSFRNTFBhcnQuY3BwCShyZXZpc2lvbiAxMTk2
MCkKKysrIGt3cS9LV1FLSFRNTFBhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJL
V1FLSFRNTFBhcnQuaCIKLQotI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVk
ZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImh0bWx0b2tlbml6ZXIuaCIKLSNpbmNs
dWRlICJraHRtbHBhcnRfcC5oIgotCi11c2luZyBuYW1lc3BhY2UgRE9NOjpIVE1MTmFtZXM7Ci0K
LXVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwotdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwot
dXNpbmcgRE9NOjpOb2RlSW1wbDsKLQotLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBz
aW5nbGUgdGlueSBmaWxlIHdpdGggb25seSB0aGlzIG1ldGhvZCBkb2luZyBoZXJlPwotYm9vbCBL
V1FLSFRNTFBhcnQ6OmlzRnJhbWVTZXQoKSBjb25zdAotewotICAgIERvY3VtZW50SW1wbCAqZG9j
dW1lbnQgPSBkLT5tX2RvYzsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE5vZGVJbXBsICpib2R5ID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihkb2N1bWVudCktPmJvZHkoKTsKLSAgICBy
ZXR1cm4gYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPmhhc1RhZ05hbWUoZnJhbWVz
ZXRUYWcpOwotfQpJbmRleDoga3dxL0tXUUxpc3RCb3gubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tX
UUxpc3RCb3gubW0JKHJldmlzaW9uIDExOTYwKQorKysga3dxL0tXUUxpc3RCb3gubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiS1dRS0hUTUxQYXJ0Lmgi
CisjaW1wb3J0ICJNYWNGcmFtZS5oIgogI2ltcG9ydCAiS1dRVmlldy5oIgogI2ltcG9ydCAiV2Vi
Q29yZUJyaWRnZS5oIgogI2ltcG9ydCAiV2ViQ29yZVNjcm9sbFZpZXcuaCIKQEAgLTQwMSw3ICs0
MDEsNyBAQCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250ICZmb250CiB7CiAgICAg
S1dRVGFibGVWaWV3ICpkb2N1bWVudFZpZXcgPSBbc2VsZiBkb2N1bWVudFZpZXddOwogICAgIFFX
aWRnZXQgKndpZGdldCA9IFtkb2N1bWVudFZpZXcgd2lkZ2V0XTsKLSAgICBbS1dRS0hUTUxQYXJ0
OjpicmlkZ2VGb3JXaWRnZXQod2lkZ2V0KSBtYWtlRmlyc3RSZXNwb25kZXI6ZG9jdW1lbnRWaWV3
XTsKKyAgICBbTWFjRnJhbWU6OmJyaWRnZUZvcldpZGdldCh3aWRnZXQpIG1ha2VGaXJzdFJlc3Bv
bmRlcjpkb2N1bWVudFZpZXddOwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAgLTUwMyw3ICs1MDMs
NyBAQCBzdGF0aWMgQm9vbGVhbiBLV1FUYWJsZVZpZXdUeXBlU2VsZWN0Q2FsCiAgICAgaWYgKCFf
Ym94KSAgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRn
ZSA9IEtXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lkZ2V0KF9ib3gpOworICAgIFdlYkNvcmVCcmlk
Z2UgKmJyaWRnZSA9IE1hY0ZyYW1lOjpicmlkZ2VGb3JXaWRnZXQoX2JveCk7CiAgICAgaWYgKCFb
YnJpZGdlIGludGVyY2VwdEtleUV2ZW50OmV2ZW50IHRvVmlldzpzZWxmXSkgewogICAgIFtzdXBl
ciBrZXlEb3duOmV2ZW50XTsKICAgICB9CkBAIC01MTUsNyArNTE1LDcgQEAgc3RhdGljIEJvb2xl
YW4gS1dRVGFibGVWaWV3VHlwZVNlbGVjdENhbAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IEtXUUtIVE1MUGFydDo6YnJpZGdlRm9yV2lk
Z2V0KF9ib3gpOworICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IE1hY0ZyYW1lOjpicmlkZ2VG
b3JXaWRnZXQoX2JveCk7CiAgICAgaWYgKCFbYnJpZGdlIGludGVyY2VwdEtleUV2ZW50OmV2ZW50
IHRvVmlldzpzZWxmXSkgewogICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOwogICAgICAgICBO
U1N0cmluZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJhY3RlcnNdOwpAQCAtNTY5LDcgKzU2OSw3IEBA
IHN0YXRpYyBCb29sZWFuIEtXUVRhYmxlVmlld1R5cGVTZWxlY3RDYWwKICAgICBCT09MIGJlY29t
ZSA9IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CiAgICAgCiAgICAgaWYgKGJlY29tZSkg
ewotICAgICAgICBpZiAoX2JveCAmJiAhS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc01vdXNl
RG93bkluV2lkZ2V0KF9ib3gpKSB7CisgICAgICAgIGlmIChfYm94ICYmICFNYWNGcmFtZTo6Y3Vy
cmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldChfYm94KSkgewogICAgICAgICAgICAgUmVuZGVy
V2lkZ2V0ICp3aWRnZXQgPSBjb25zdF9jYXN0PFJlbmRlcldpZGdldCAqPiAoc3RhdGljX2Nhc3Q8
Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KF9ib3gtPmV2ZW50RmlsdGVyT2JqZWN0KCkpKTsKICAgICAg
ICAgICAgIFJlbmRlckxheWVyICpsYXllciA9IHdpZGdldC0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAg
ICAgICAgICAgIGlmIChsYXllcikKQEAgLTU5NSw3ICs1OTUsNyBAQCBzdGF0aWMgQm9vbGVhbiBL
V1FUYWJsZVZpZXdUeXBlU2VsZWN0Q2FsCiAKICAgICAgICAgaWYgKF9ib3gtPmV2ZW50RmlsdGVy
T2JqZWN0KCkpIHsKICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UU9iamVjdCAqPihfYm94LT5ldmVu
dEZpbHRlck9iamVjdCgpKS0+ZXZlbnRGaWx0ZXIoX2JveCwgJmV2ZW50KTsKLSAgICAgICAgICAg
IFtLV1FLSFRNTFBhcnQ6OmJyaWRnZUZvcldpZGdldChfYm94KSBmb3JtQ29udHJvbElzUmVzaWdu
aW5nRmlyc3RSZXNwb25kZXI6c2VsZl07CisgICAgICAgICAgICBbTWFjRnJhbWU6OmJyaWRnZUZv
cldpZGdldChfYm94KSBmb3JtQ29udHJvbElzUmVzaWduaW5nRmlyc3RSZXNwb25kZXI6c2VsZl07
CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc2lnbjsKQEAgLTYxMSwxNCArNjExLDE0
IEBAIHN0YXRpYyBCb29sZWFuIEtXUVRhYmxlVmlld1R5cGVTZWxlY3RDYWwKIC0gKE5TVmlldyAq
KW5leHRLZXlWaWV3CiB7CiAgICAgcmV0dXJuIF9ib3ggJiYgaW5OZXh0VmFsaWRLZXlWaWV3Ci0g
ICAgICAgID8gS1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0ZvcldpZGdldChfYm94LCBLV1FTZWxl
Y3RpbmdOZXh0KQorICAgICAgICA/IE1hY0ZyYW1lOjpuZXh0S2V5Vmlld0ZvcldpZGdldChfYm94
LCBLV1FTZWxlY3RpbmdOZXh0KQogICAgICAgICA6IFtzdXBlciBuZXh0S2V5Vmlld107CiB9CiAK
IC0gKE5TVmlldyAqKXByZXZpb3VzS2V5VmlldwogewogICAgIHJldHVybiBfYm94ICYmIGluTmV4
dFZhbGlkS2V5VmlldwotICAgICAgICA/IEtXUUtIVE1MUGFydDo6bmV4dEtleVZpZXdGb3JXaWRn
ZXQoX2JveCwgS1dRU2VsZWN0aW5nUHJldmlvdXMpCisgICAgICAgID8gTWFjRnJhbWU6Om5leHRL
ZXlWaWV3Rm9yV2lkZ2V0KF9ib3gsIEtXUVNlbGVjdGluZ1ByZXZpb3VzKQogICAgICAgICA6IFtz
dXBlciBwcmV2aW91c0tleVZpZXddOwogfQogCkluZGV4OiBrd3EvV2ViQ29yZVNldHRpbmdzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGt3cS9XZWJDb3JlU2V0dGluZ3MubW0JKHJldmlzaW9uIDExOTYwKQor
Kysga3dxL1dlYkNvcmVTZXR0aW5ncy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2ltcG9ydCAiV2ViQ29yZVNldHRpbmdzLmgiCiAKICNpbXBvcnQgIktXUUZvdW5kYXRpb25F
eHRyYXMuaCIKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIK
ICNpbXBvcnQgIktXUUtIVE1MU2V0dGluZ3MuaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIK
IApAQCAtNjMsMTAgKzYzLDEwIEBACiAKIC0gKHZvaWQpX3VwZGF0ZUFsbFZpZXdzCiB7Ci0gICAg
Zm9yIChRUHRyTGlzdEl0ZXJhdG9yPEtXUUtIVE1MUGFydD4gaXQoS1dRS0hUTUxQYXJ0OjppbnN0
YW5jZXMoKSk7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotICAgICAgICBLV1FLSFRNTFBhcnQgKnBh
cnQgPSBpdC5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChwYXJ0LT5zZXR0aW5ncygpID09IHNldHRp
bmdzKSB7Ci0gICAgICAgICAgICBbcGFydC0+YnJpZGdlKCkgc2V0TmVlZHNSZWFwcGx5U3R5bGVz
XTsKKyAgICBmb3IgKFFQdHJMaXN0SXRlcmF0b3I8TWFjRnJhbWU+IGl0KE1hY0ZyYW1lOjppbnN0
YW5jZXMoKSk7IGl0LmN1cnJlbnQoKTsgKytpdCkgeworICAgICAgICBNYWNGcmFtZSAqZnJhbWUg
PSBpdC5jdXJyZW50KCk7CisgICAgICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKSA9PSBzZXR0aW5n
cykgeworICAgICAgICAgICAgW2ZyYW1lLT5icmlkZ2UoKSBzZXROZWVkc1JlYXBwbHlTdHlsZXNd
OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDoga3dxL01hY0ZyYW1lLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGt3cS9NYWNGcmFtZS5tbQkocmV2aXNpb24gMTE5NDYpCisrKyBrd3EvTWFjRnJhbWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIKIAog
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiS1dRQ2xpcGJvYXJkLmgiCi0jaW1w
b3J0ICJLV1FEdW1teVZpZXcuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0
ICJLV1FFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJLV1FGb3JtRGF0YS5oIgpAQCAtNDEsNiArNDAs
NyBAQAogI2ltcG9ydCAiS1dRUmVnRXhwLmgiCiAjaW1wb3J0ICJLV1FTY3JvbGxCYXIuaCIKICNp
bXBvcnQgIktXUVdpbmRvd1dpZGdldC5oIgorI2ltcG9ydCAiS1dRVGV4dENvZGVjLmgiCiAKICNp
bXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIKICNpbXBvcnQgIldlYkNvcmVHcmFwaGljc0JyaWRnZS5o
IgpAQCAtNzQsNiArNzQsNyBAQAogI2ltcG9ydCAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2ltcG9y
dCAidmlzaWJsZV90ZXh0LmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCisjaW1wb3J0ICJD
YWNoZS5oIgogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9pZGVudGlmaWVyLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9wcm9wZXJ0eV9tYXAuaD4KQEAgLTEwMiwzNiArMTAzLDM2IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSU87CiAKIHVzaW5nIG5hbWVzcGFjZSBLUGFydHM7CiAKLU5TRXZlbnQg
KktXUUtIVE1MUGFydDo6X2N1cnJlbnRFdmVudCA9IG5pbDsKK05TRXZlbnQgKk1hY0ZyYW1lOjpf
Y3VycmVudEV2ZW50ID0gbmlsOwogCi12b2lkIEtIVE1MUGFydDo6Y29tcGxldGVkKCkKK3ZvaWQg
RnJhbWU6OmNvbXBsZXRlZCgpCiB7Ci0gICAgS1dRKHRoaXMpLT5fY29tcGxldGVkLmNhbGwoKTsK
KyAgICBNYWModGhpcyktPl9jb21wbGV0ZWQuY2FsbCgpOwogfQogCi12b2lkIEtIVE1MUGFydDo6
Y29tcGxldGVkKGJvb2wgYXJnKQordm9pZCBGcmFtZTo6Y29tcGxldGVkKGJvb2wgYXJnKQogewot
ICAgIEtXUSh0aGlzKS0+X2NvbXBsZXRlZC5jYWxsKGFyZyk7CisgICAgTWFjKHRoaXMpLT5fY29t
cGxldGVkLmNhbGwoYXJnKTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6Om9wZW5VUkwoY29uc3QgS1VS
TCAmVVJMKQorYm9vbCBGcmFtZTo6b3BlblVSTChjb25zdCBLVVJMICZVUkwpCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0
OjpvblVSTChjb25zdCBRU3RyaW5nICYpCit2b2lkIEZyYW1lOjpvblVSTChjb25zdCBRU3RyaW5n
ICYpCiB7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpzZXRTdGF0dXNCYXJUZXh0KGNvbnN0IFFTdHJp
bmcgJnN0YXR1cykKK3ZvaWQgRnJhbWU6OnNldFN0YXR1c0JhclRleHQoY29uc3QgUVN0cmluZyAm
c3RhdHVzKQogewotICAgIEtXUSh0aGlzKS0+c2V0U3RhdHVzQmFyVGV4dChzdGF0dXMpOworICAg
IE1hYyh0aGlzKS0+c2V0U3RhdHVzQmFyVGV4dChzdGF0dXMpOwogfQogCi12b2lkIEtIVE1MUGFy
dDo6c3RhcnRlZChKb2IgKmopCit2b2lkIEZyYW1lOjpzdGFydGVkKEpvYiAqaikKIHsKLSAgICBL
V1EodGhpcyktPl9zdGFydGVkLmNhbGwoaik7CisgICAgTWFjKHRoaXMpLT5fc3RhcnRlZC5jYWxs
KGopOwogfQogCiBib29sIEtIVE1MVmlldzo6aXNLSFRNTFZpZXcoKSBjb25zdApAQCAtMTQxLDEx
ICsxNDIsMTEgQEAgYm9vbCBLSFRNTFZpZXc6OmlzS0hUTUxWaWV3KCkgY29uc3QKIAogc3RhdGlj
IHZvaWQgcmVkaXJlY3Rpb25UaW1lck1vbml0b3Iodm9pZCAqY29udGV4dCkKIHsKLSAgICBLV1FL
SFRNTFBhcnQgKmt3cSA9IHN0YXRpY19jYXN0PEtXUUtIVE1MUGFydCAqPihjb250ZXh0KTsKKyAg
ICBNYWNGcmFtZSAqa3dxID0gc3RhdGljX2Nhc3Q8TWFjRnJhbWUgKj4oY29udGV4dCk7CiAgICAg
a3dxLT5yZWRpcmVjdGlvblRpbWVyU3RhcnRlZE9yU3RvcHBlZCgpOwogfQogCi1LV1FLSFRNTFBh
cnQ6OktXUUtIVE1MUGFydCgpCitNYWNGcmFtZTo6TWFjRnJhbWUoKQogICAgIDogX3N0YXJ0ZWQo
dGhpcywgU0lHTkFMKHN0YXJ0ZWQoS0lPOjpKb2IgKikpKQogICAgICwgX2NvbXBsZXRlZCh0aGlz
LCBTSUdOQUwoY29tcGxldGVkKCkpKQogICAgICwgX2NvbXBsZXRlZFdpdGhCb29sKHRoaXMsIFNJ
R05BTChjb21wbGV0ZWQoYm9vbCkpKQpAQCAtMTY5LDEzICsxNzAsMTMgQEAgS1dRS0hUTUxQYXJ0
OjpLV1FLSFRNTFBhcnQoKQogICAgIENhY2hlOjppbml0KCk7CiAKICAgICAvLyBUaGUgd2lkZ2V0
IGlzIG1hZGUgb3V0c2lkZSB0aGlzIGNsYXNzIGluIG91ciBjYXNlLgotICAgIEtIVE1MUGFydDo6
aW5pdCgwKTsKKyAgICBGcmFtZTo6aW5pdCgwKTsKIAogICAgIG11dGFibGVJbnN0YW5jZXMoKS5w
cmVwZW5kKHRoaXMpOwogICAgIGQtPm1fcmVkaXJlY3Rpb25UaW1lci5zZXRNb25pdG9yKHJlZGly
ZWN0aW9uVGltZXJNb25pdG9yLCB0aGlzKTsKIH0KIAotS1dRS0hUTUxQYXJ0Ojp+S1dRS0hUTUxQ
YXJ0KCkKK01hY0ZyYW1lOjp+TWFjRnJhbWUoKQogewogICAgIHNldFZpZXcoMCk7CiAgICAgbXV0
YWJsZUluc3RhbmNlcygpLnJlbW92ZSh0aGlzKTsKQEAgLTE4NSw3ICsxODYsNyBAQCBLV1FLSFRN
TFBhcnQ6On5LV1FLSFRNTFBhcnQoKQogICAgIGRlbGV0ZSBfd2luZG93V2lkZ2V0OwogfQogCi12
b2lkIEtXUUtIVE1MUGFydDo6ZnJlZUNsaXBib2FyZCgpCit2b2lkIE1hY0ZyYW1lOjpmcmVlQ2xp
cGJvYXJkKCkKIHsKICAgICBpZiAoX2RyYWdDbGlwYm9hcmQpIHsKICAgICAgICAgX2RyYWdDbGlw
Ym9hcmQtPnNldEFjY2Vzc1BvbGljeShLV1FDbGlwYm9hcmQ6Ok51bWIpOwpAQCAtMTk0LDEyICsx
OTUsMTIgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OmZyZWVDbGlwYm9hcmQoKQogICAgIH0KIH0KIAot
dm9pZCBLV1FLSFRNTFBhcnQ6OnNldFNldHRpbmdzIChLSFRNTFNldHRpbmdzICpzZXR0aW5ncykK
K3ZvaWQgTWFjRnJhbWU6OnNldFNldHRpbmdzIChLSFRNTFNldHRpbmdzICpzZXR0aW5ncykKIHsK
ICAgICBkLT5tX3NldHRpbmdzID0gc2V0dGluZ3M7CiB9CiAKLVFTdHJpbmcgS1dRS0hUTUxQYXJ0
OjpnZW5lcmF0ZUZyYW1lTmFtZSgpCitRU3RyaW5nIE1hY0ZyYW1lOjpnZW5lcmF0ZUZyYW1lTmFt
ZSgpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJuIFFTdHJpbmc6OmZy
b21OU1N0cmluZyhbX2JyaWRnZSBnZW5lcmF0ZUZyYW1lTmFtZV0pOwpAQCAtMjA4LDcgKzIwOSw3
IEBAIFFTdHJpbmcgS1dRS0hUTUxQYXJ0OjpnZW5lcmF0ZUZyYW1lTmFtZSgKICAgICByZXR1cm4g
UVN0cmluZygpOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCgpCit2b2lkIE1hY0ZyYW1lOjpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKIHsKICAgICAvLyB3
ZSBkb24ndCB3YW50IHRvIHdhaXQgdW50aWwgd2UgZ2V0IGFuIGFjdHVhbCBodHRwIHJlc3BvbnNl
IGJhY2sKICAgICAvLyB0byBjYW5jZWwgcGVuZGluZyByZWRpcmVjdHMsIG90aGVyd2lzZSB0aGV5
IG1pZ2h0IGZpcmUgYmVmb3JlCkBAIC0yMTYsMTIgKzIxNywxMiBAQCB2b2lkIEtXUUtIVE1MUGFy
dDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlCiAgICAgY2FuY2VsUmVkaXJlY3Rpb24odHJ1ZSk7CiB9
CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojp1c2VyR2VzdHVyZUhpbnQoKQorYm9vbCBNYWNGcmFtZTo6
dXNlckdlc3R1cmVIaW50KCkKIHsKICAgICBpZiAoalNjcmlwdCgpICYmIGpTY3JpcHQoKS0+aW50
ZXJwcmV0ZXIoKSkgewotICAgICAgICBLSFRNTFBhcnQgKnJvb3RQYXJ0ID0gdGhpczsKLSAgICAg
ICAgd2hpbGUgKHJvb3RQYXJ0LT5wYXJlbnRQYXJ0KCkgIT0gMCkKLSAgICAgICAgICAgIHJvb3RQ
YXJ0ID0gcm9vdFBhcnQtPnBhcmVudFBhcnQoKTsKKyAgICAgICAgRnJhbWUgKnJvb3RQYXJ0ID0g
dGhpczsKKyAgICAgICAgd2hpbGUgKHJvb3RQYXJ0LT5wYXJlbnRGcmFtZSgpICE9IDApCisgICAg
ICAgICAgICByb290UGFydCA9IHJvb3RQYXJ0LT5wYXJlbnRGcmFtZSgpOwogICAgICAgICBLSlM6
OlNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IHJvb3RQYXJ0LT5qU2NyaXB0KCktPmlu
dGVycHJldGVyKCk7CiAgICAgICAgIHJldHVybiBpbnRlcnByZXRlci0+d2FzUnVuQnlVc2VyR2Vz
dHVyZSgpOwogICAgIH0gZWxzZQpAQCAtMjI5LDEyICsyMzAsMTIgQEAgYm9vbCBLV1FLSFRNTFBh
cnQ6OnVzZXJHZXN0dXJlSGludCgpCiAgICAgICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEtX
UUtIVE1MUGFydDo6b3BlblVSTChjb25zdCBLVVJMICZ1cmwpCitib29sIE1hY0ZyYW1lOjpvcGVu
VVJMKGNvbnN0IEtVUkwgJnVybCkKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKIAogICAg
IC8vIEZJWE1FOiBUaGUgbGFjayBvZiBhcmdzIGhlcmUgdG8gZ2V0IHRoZSByZWxvYWQgZmxhZyBm
cm9tCi0gICAgLy8gaW5kaWNhdGVzIGEgcHJvYmxlbSBpbiBob3cgd2UgdXNlIEtIVE1MUGFydDo6
cHJvY2Vzc09iamVjdFJlcXVlc3QsCisgICAgLy8gaW5kaWNhdGVzIGEgcHJvYmxlbSBpbiBob3cg
d2UgdXNlIEZyYW1lOjpwcm9jZXNzT2JqZWN0UmVxdWVzdCwKICAgICAvLyB3aGVyZSB3ZSBhcmUg
b3BlbmluZyB0aGUgVVJMIGJlZm9yZSB0aGUgYXJncyBhcmUgc2V0IHVwLgogICAgIFtfYnJpZGdl
IGxvYWRVUkw6dXJsLmdldE5TVVJMKCkKICAgICAgICAgICAgIHJlZmVycmVyOltfYnJpZGdlIHJl
ZmVycmVyXQpAQCAtMjUwLDcgKzI1MSw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpvcGVuVVJMKGNv
bnN0IEtVUkwgJnUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6Om9w
ZW5VUkxSZXF1ZXN0KGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJMQXJncyAmYXJncykKK3ZvaWQg
TWFjRnJhbWU6Om9wZW5VUkxSZXF1ZXN0KGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJMQXJncyAm
YXJncykKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKIApAQCAtMjc0LDcgKzI3NSw3IEBA
IHZvaWQgS1dRS0hUTUxQYXJ0OjpvcGVuVVJMUmVxdWVzdChjb25zdCAKICAgICBLV1FfVU5CTE9D
S19FWENFUFRJT05TOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6ZGlkTm90T3BlblVSTChjb25z
dCBLVVJMICZVUkwpCit2b2lkIE1hY0ZyYW1lOjpkaWROb3RPcGVuVVJMKGNvbnN0IEtVUkwgJlVS
TCkKIHsKICAgICBpZiAoX3N1Ym1pdHRlZEZvcm1VUkwgPT0gVVJMKSB7CiAgICAgICAgIF9zdWJt
aXR0ZWRGb3JtVVJMID0gS1VSTCgpOwpAQCAtMzAzLDcgKzMwNCw3IEBAIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIH0KIAogLy8gV2UgbG9vayBmb3IgZWl0aGVyIHRo
ZSBmb3JtIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZm9jdXMsIG9yIGZvciBvbmUgaW1tZWRpYXRl
bHkgYWZ0ZXIgaXQKLUhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFydDo6Y3VycmVudEZv
cm0oKSBjb25zdAorSFRNTEZvcm1FbGVtZW50SW1wbCAqTWFjRnJhbWU6OmN1cnJlbnRGb3JtKCkg
Y29uc3QKIHsKICAgICAvLyBzdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJz
dCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMKICAgICBOb2RlSW1w
bCAqc3RhcnQgPSBkLT5tX2RvYyA/IGQtPm1fZG9jLT5mb2N1c05vZGUoKSA6IDA7CkBAIC00MDEs
NyArNDAyLDcgQEAgUVJlZ0V4cCAqcmVnRXhwRm9yTGFiZWxzKE5TQXJyYXkgKmxhYmVscwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLU5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxh
YmVsc0Fib3ZlQ2VsbChRUmVnRXhwICpyZWdFeHAsIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAq
Y2VsbCkKK05TU3RyaW5nICpNYWNGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFFSZWdF
eHAgKnJlZ0V4cCwgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICpjZWxsKQogewogICAgIFJlbmRl
clRhYmxlQ2VsbCAqY2VsbFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsICo+
KGNlbGwtPnJlbmRlcmVyKCkpOwogCkBAIC00MzIsNyArNDMzLDcgQEAgTlNTdHJpbmcgKktXUUtI
VE1MUGFydDo6c2VhcmNoRm9yTGFiZWxzQQogICAgIHJldHVybiBuaWw7CiB9CiAKLU5TU3RyaW5n
ICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoTlNBcnJheSAqbGFi
ZWxzLCBFbGVtZW50SW1wbCAqZWxlbWVudCkKK05TU3RyaW5nICpNYWNGcmFtZTo6c2VhcmNoRm9y
TGFiZWxzQmVmb3JlRWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnRJbXBsICplbGVtZW50
KQogewogICAgIFFSZWdFeHAgKnJlZ0V4cCA9IHJlZ0V4cEZvckxhYmVscyhsYWJlbHMpOwogICAg
IC8vIFdlIHN0b3Agc2VhcmNoaW5nIGFmdGVyIHdlJ3ZlIHNlZW4gdGhpcyBtYW55IGNoYXJzCkBA
IC00OTEsNyArNDkyLDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNoRm9yTGFiZWxz
QgogICAgIH0KIH0KIAotTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6bWF0Y2hMYWJlbHNBZ2FpbnN0
RWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnRJbXBsICplbGVtZW50KQorTlNTdHJpbmcg
Kk1hY0ZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KE5TQXJyYXkgKmxhYmVscywgRWxl
bWVudEltcGwgKmVsZW1lbnQpCiB7CiAgICAgUVN0cmluZyBuYW1lID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKG5hbWVBdHRyKS5xc3RyaW5nKCk7CiAgICAgLy8gTWFrZSBudW1iZXJzIGFuZCBfJ3Mg
aW4gZmllbGQgbmFtZXMgYmVoYXZlIGxpa2Ugd29yZCBib3VuZGFyaWVzLCBlLmcuLCAiYWRkcmVz
czIiCkBAIC01MjQsNyArNTI1LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6bWF0Y2hMYWJl
bHNBZ2FpbgogfQogCiAvLyBTZWFyY2hlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3Vt
ZW50IGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCi1ib29sIEtXUUtIVE1MUGFydDo6ZmluZFN0cmlu
ZyhOU1N0cmluZyAqc3RyaW5nLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3Jh
cEZsYWcpCitib29sIE1hY0ZyYW1lOjpmaW5kU3RyaW5nKE5TU3RyaW5nICpzdHJpbmcsIGJvb2wg
Zm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZykKIHsKICAgICBRU3RyaW5nIHRh
cmdldCA9IFFTdHJpbmc6OmZyb21OU1N0cmluZyhzdHJpbmcpOwogICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKSB7CkBAIC01NzQsNyArNTc1LDcgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OmZpbmRTdHJp
bmcoTlNTdHJpbmcgKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6
Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKQordm9pZCBNYWNGcmFtZTo6Y2xlYXJSZWNvcmRlZEZv
cm1WYWx1ZXMoKQogewogICAgIC8vIEl0J3Mgc2FmZSB0byBhc3N1bWUgdGhhdCBvdXIgb3duIGNs
YXNzZXMgYW5kIEZvdW5kYXRpb24gZGF0YQogICAgIC8vIHN0cnVjdHVyZXMgd29uJ3QgcmFpc2Ug
ZXhjZXB0aW9ucyBpbiBkZWFsbG9jCkBAIC01ODUsNyArNTg2LDcgQEAgdm9pZCBLV1FLSFRNTFBh
cnQ6OmNsZWFyUmVjb3JkZWRGb3JtVmFsdQogICAgIF9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0g
bmlsOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFFTdHJp
bmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJnZhbHVlLCBIVE1MRm9ybUVsZW1lbnRJbXBsICplbGVt
ZW50KQordm9pZCBNYWNGcmFtZTo6cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFFTdHJpbmcgJm5hbWUs
IGNvbnN0IFFTdHJpbmcgJnZhbHVlLCBIVE1MRm9ybUVsZW1lbnRJbXBsICplbGVtZW50KQogewog
ICAgIC8vIEl0J3Mgc2FmZSB0byBhc3N1bWUgdGhhdCBvdXIgb3duIGNsYXNzZXMgYW5kIGJhc2lj
IEZvdW5kYXRpb24KICAgICAvLyBkYXRhIHN0cnVjdHVyZXMgd29uJ3QgcmFpc2UgZXhjZXB0aW9u
cwpAQCAtNjAwLDcgKzYwMSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpyZWNvcmRGb3JtVmFsdWUo
Y29uc3QKICAgICBbX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQgc2V0T2JqZWN0OnZhbHVl
LmdldE5TU3RyaW5nKCkgZm9yS2V5Om5hbWUuZ2V0TlNTdHJpbmcoKV07CiB9CiAKLXZvaWQgS1dR
S0hUTUxQYXJ0OjpzdWJtaXRGb3JtKGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJMQXJncyAmYXJn
cykKK3ZvaWQgTWFjRnJhbWU6OnN1Ym1pdEZvcm0oY29uc3QgS1VSTCAmdXJsLCBjb25zdCBVUkxB
cmdzICZhcmdzKQogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogCkBAIC02MTUsOSArNjE2
LDkgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnN1Ym1pdEZvcm0oY29uc3QgS1VSTAogICAgIC8vIHRo
YW4gcmVwbGFjaW5nIHRoaXMgZnJhbWUncyBjb250ZW50LCBzbyB0aGlzIGNoZWNrIGlzIGZsYXdl
ZC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBjaGVjayBpcyBoYXJkbHkKICAgICAvLyBuZWVkZWQg
YW55IG1vcmUgbm93IHRoYXQgd2UgcmVzZXQgX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBtb3Vz
ZSBvciBrZXkgZG93biBldmVudC4KICAgICBXZWJDb3JlQnJpZGdlICp0YXJnZXQgPSBhcmdzLmZy
YW1lTmFtZS5pc0VtcHR5KCkgPyBfYnJpZGdlIDogW19icmlkZ2UgZmluZEZyYW1lTmFtZWQ6YXJn
cy5mcmFtZU5hbWUuZ2V0TlNTdHJpbmcoKV07Ci0gICAgS0hUTUxQYXJ0ICp0YXJnZXRQYXJ0ID0g
W3RhcmdldCBwYXJ0XTsKKyAgICBGcmFtZSAqdGFyZ2V0UGFydCA9IFt0YXJnZXQgcGFydF07CiAg
ICAgYm9vbCB3aWxsUmVwbGFjZVRoaXNGcmFtZSA9IGZhbHNlOwotICAgIGZvciAoS0hUTUxQYXJ0
ICpwID0gdGhpczsgcDsgcCA9IHAtPnBhcmVudFBhcnQoKSkgeworICAgIGZvciAoRnJhbWUgKnAg
PSB0aGlzOyBwOyBwID0gcC0+cGFyZW50RnJhbWUoKSkgewogICAgICAgICBpZiAocCA9PSB0YXJn
ZXRQYXJ0KSB7CiAgICAgICAgICAgICB3aWxsUmVwbGFjZVRoaXNGcmFtZSA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTY1NSw3ICs2NTYsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c3Vi
bWl0Rm9ybShjb25zdCBLVVJMCiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotdm9p
ZCBLV1FLSFRNTFBhcnQ6OnNldEVuY29kaW5nKGNvbnN0IFFTdHJpbmcgJm5hbWUsIGJvb2wgdXNl
ckNob3NlbikKK3ZvaWQgTWFjRnJhbWU6OnNldEVuY29kaW5nKGNvbnN0IFFTdHJpbmcgJm5hbWUs
IGJvb2wgdXNlckNob3NlbikKIHsKICAgICBpZiAoIWQtPm1fd29ya2luZ1VSTC5pc0VtcHR5KCkp
IHsKICAgICAgICAgcmVjZWl2ZWRGaXJzdERhdGEoKTsKQEAgLTY2NCw3ICs2NjUsNyBAQCB2b2lk
IEtXUUtIVE1MUGFydDo6c2V0RW5jb2RpbmcoY29uc3QgUVN0CiAgICAgZC0+bV9oYXZlRW5jb2Rp
bmcgPSB1c2VyQ2hvc2VuOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6YWRkRGF0YShjb25zdCBj
aGFyICpieXRlcywgaW50IGxlbmd0aCkKK3ZvaWQgTWFjRnJhbWU6OmFkZERhdGEoY29uc3QgY2hh
ciAqYnl0ZXMsIGludCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGQtPm1fd29ya2luZ1VSTC5pc0Vt
cHR5KCkpOwogICAgIEFTU0VSVChkLT5tX2RvYyk7CkBAIC02NzIsMTYgKzY3MywxNiBAQCB2b2lk
IEtXUUtIVE1MUGFydDo6YWRkRGF0YShjb25zdCBjaGFyICpiCiAgICAgd3JpdGUoYnl0ZXMsIGxl
bmd0aCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpmcmFtZURldGFjaGVkKCkKK3ZvaWQgRnJhbWU6
OmZyYW1lRGV0YWNoZWQoKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZpcnR1
YWwgZnVuY3Rpb24sIHdpdGggdGhlIGZpcnN0IHBhcnQgaW4gS1dRS0hUTUxQYXJ0LCBhbmQgdGhl
IHNlY29uZAotICAgIC8vIHBhcnQgaW4gS0hUTUxQYXJ0LCBzbyBpdCB3b3JrcyBmb3IgS0hUTUwg
dG9vLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZpcnR1YWwgZnVuY3Rpb24sIHdp
dGggdGhlIGZpcnN0IHBhcnQgaW4gTWFjRnJhbWUsIGFuZCB0aGUgc2Vjb25kCisgICAgLy8gcGFy
dCBpbiBGcmFtZSwgc28gaXQgd29ya3MgZm9yIEtIVE1MIHRvby4KIAogICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwotICAgIFtLV1EodGhpcyktPmJyaWRnZSgpIGZyYW1lRGV0YWNoZWRdOworICAg
IFtNYWModGhpcyktPmJyaWRnZSgpIGZyYW1lRGV0YWNoZWRdOwogICAgIEtXUV9VTkJMT0NLX0VY
Q0VQVElPTlM7CiAKLSAgICBLSFRNTFBhcnQgKnBhcmVudCA9IHBhcmVudFBhcnQoKTsKKyAgICBG
cmFtZSAqcGFyZW50ID0gcGFyZW50RnJhbWUoKTsKICAgICBpZiAocGFyZW50KSB7CiAgICAgICAg
IEZyYW1lTGlzdCYgcGFyZW50RnJhbWVzID0gcGFyZW50LT5kLT5tX2ZyYW1lczsKICAgICAgICAg
RnJhbWVJdCBlbmQgPSBwYXJlbnRGcmFtZXMuZW5kKCk7CkBAIC02OTcsNyArNjk4LDcgQEAgdm9p
ZCBLSFRNTFBhcnQ6OmZyYW1lRGV0YWNoZWQoKQogICAgIH0KIH0KIAotdm9pZCBLV1FLSFRNTFBh
cnQ6OnVybFNlbGVjdGVkKGNvbnN0IEtVUkwgJnVybCwgaW50IGJ1dHRvbiwgaW50IHN0YXRlLCBj
b25zdCBVUkxBcmdzICZhcmdzKQordm9pZCBNYWNGcmFtZTo6dXJsU2VsZWN0ZWQoY29uc3QgS1VS
TCAmdXJsLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUsIGNvbnN0IFVSTEFyZ3MgJmFyZ3MpCiB7CiAg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAKQEAgLTcyNyw3ICs3MjgsNyBAQCBjbGFzcyBLV1FQ
bHVnaW5QYXJ0IDogcHVibGljIFJlYWRPbmx5UGFyCiAgICAgdmlydHVhbCBib29sIGNsb3NlVVJM
KCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAotUmVhZE9ubHlQYXJ0ICpLV1FLSFRNTFBhcnQ6OmNy
ZWF0ZVBhcnQoY29uc3QgQ2hpbGRGcmFtZSAmY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3Qg
UVN0cmluZyAmbWltZVR5cGUpCitSZWFkT25seVBhcnQgKk1hY0ZyYW1lOjpjcmVhdGVQYXJ0KGNv
bnN0IENoaWxkRnJhbWUgJmNoaWxkLCBjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFFTdHJpbmcgJm1p
bWVUeXBlKQogewogICAgIFJlYWRPbmx5UGFydCAqcGFydDsKICAgICBLV1FfQkxPQ0tfRVhDRVBU
SU9OUzsKQEAgLTc4MSw3ICs3ODIsNyBAQCBSZWFkT25seVBhcnQgKktXUUtIVE1MUGFydDo6Y3Jl
YXRlUGFydChjCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRW
aWV3KEtIVE1MVmlldyAqdmlldykKK3ZvaWQgTWFjRnJhbWU6OnNldFZpZXcoS0hUTUxWaWV3ICp2
aWV3KQogewogICAgIC8vIERldGFjaCB0aGUgZG9jdW1lbnQgbm93LCBzbyBhbnkgb25VbmxvYWQg
aGFuZGxlcnMgZ2V0IHJ1biAtIGlmCiAgICAgLy8gd2Ugd2FpdCB1bnRpbCB0aGUgdmlldyBpcyBk
ZXN0cm95ZWQsIHRoZW4gdGhpbmdzIHdvbid0IGJlCkBAIC04MDksMTIgKzgxMCwxMiBAQCB2b2lk
IEtXUUtIVE1MUGFydDo6c2V0VmlldyhLSFRNTFZpZXcgKnZpCiAgICAgX3N1Ym1pdHRlZEZvcm1V
UkwgPSBLVVJMKCk7CiB9CiAKLUtIVE1MVmlldyAqS1dRS0hUTUxQYXJ0Ojp2aWV3KCkgY29uc3QK
K0tIVE1MVmlldyAqTWFjRnJhbWU6OnZpZXcoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3Zp
ZXc7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRUaXRsZShjb25zdCBET01TdHJpbmcgJnRp
dGxlKQordm9pZCBNYWNGcmFtZTo6c2V0VGl0bGUoY29uc3QgRE9NU3RyaW5nICZ0aXRsZSkKIHsK
ICAgICBRU3RyaW5nIHRleHQgPSB0aXRsZS5xc3RyaW5nKCk7CiAgICAgdGV4dC5yZXBsYWNlKFFD
aGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwpAQCAtODI0LDcgKzgyNSw3
IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRUaXRsZShjb25zdCBET01TdHIKICAgICBLV1FfVU5C
TE9DS19FWENFUFRJT05TOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0U3RhdHVzQmFyVGV4
dChjb25zdCBRU3RyaW5nICZzdGF0dXMpCit2b2lkIE1hY0ZyYW1lOjpzZXRTdGF0dXNCYXJUZXh0
KGNvbnN0IFFTdHJpbmcgJnN0YXR1cykKIHsKICAgICBRU3RyaW5nIHRleHQgPSBzdGF0dXM7CiAg
ICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkp
OwpAQCAtODM0LDIxICs4MzUsMjEgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNldFN0YXR1c0JhclRl
eHQoY29ucwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgS1dRS0hUTUxQ
YXJ0OjpzY2hlZHVsZUNsb3NlKCkKK3ZvaWQgTWFjRnJhbWU6OnNjaGVkdWxlQ2xvc2UoKQogewog
ICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogICAgIFtfYnJpZGdlIGNsb3NlV2luZG93U29vbl07
CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnVu
Zm9jdXNXaW5kb3coKQordm9pZCBNYWNGcmFtZTo6dW5mb2N1c1dpbmRvdygpCiB7CiAgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgW19icmlkZ2UgdW5mb2N1c1dpbmRvd107CiAgICAgS1dR
X1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnJldmVhbFNlbGVj
dGlvbigpCit2b2lkIE1hY0ZyYW1lOjpyZXZlYWxTZWxlY3Rpb24oKQogewogICAgIFFSZWN0IHJl
Y3Q7CiAgICAgCkBAIC04NzUsNyArODc2LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnJldmVhbFNl
bGVjdGlvbigpCiAgICAgfQogfQogCi1RU3RyaW5nIEtXUUtIVE1MUGFydDo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCitRU3RyaW5nIE1hY0ZyYW1l
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIHsK
ICAgICBpbnQgZXhjZXB0aW9uID0gMDsKIApAQCAtOTg1LDcgKzk4Niw3IEBAIFFTdHJpbmcgS1dR
S0hUTUxQYXJ0OjphZHZhbmNlVG9OZXh0TWlzc3AKICAgICByZXR1cm4gUVN0cmluZygpOwogfQog
Ci1ib29sIEtXUUtIVE1MUGFydDo6c2Nyb2xsT3ZlcmZsb3coS1dRU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgS1dRU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIE1hY0ZyYW1l
OjpzY3JvbGxPdmVyZmxvdyhLV1FTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBLV1FTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBpZiAoIXhtbERvY0ltcGwoKSkgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDA2LDcgKzEwMDcsNyBAQCBib29sIEtXUUtIVE1MUGFy
dDo6c2Nyb2xsT3ZlcmZsb3coS1dRU2NyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEtX
UUtIVE1MUGFydDo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKK2Jvb2wgTWFjRnJhbWU6Ondo
ZWVsRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAgICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3
OwogCkBAIC0xMDcwLDcgKzEwNzEsNyBAQCBib29sIEtXUUtIVE1MUGFydDo6d2hlZWxFdmVudChO
U0V2ZW50ICplCiAgICAgcmV0dXJuIHItPnNjcm9sbChkaXJlY3Rpb24sIEtXUVNjcm9sbFdoZWVs
LCBtdWx0aXBsaWVyKTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlZGlyZWN0aW9uVGltZXJT
dGFydGVkT3JTdG9wcGVkKCkKK3ZvaWQgTWFjRnJhbWU6OnJlZGlyZWN0aW9uVGltZXJTdGFydGVk
T3JTdG9wcGVkKCkKIHsKICAgICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9ucywg
anVzdCBhY3R1YWwgcmVkaXJlY3Rpb24uCiAgICAgaWYgKGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24gPT0gaGlzdG9yeU5hdmlnYXRpb25TY2hlZHVsZWQpIHsKQEAgLTEwOTIsNyArMTA5Myw3IEBA
IHZvaWQgS1dRS0hUTUxQYXJ0OjpyZWRpcmVjdGlvblRpbWVyU3RhcnQKICAgICBLV1FfVU5CTE9D
S19FWENFUFRJT05TOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cGFpbnQoUVBhaW50ZXIgKnAs
IGNvbnN0IFFSZWN0ICZyZWN0KQordm9pZCBNYWNGcmFtZTo6cGFpbnQoUVBhaW50ZXIgKnAsIGNv
bnN0IFFSZWN0ICZyZWN0KQogewogI2lmbmRlZiBOREVCVUcKICAgICBib29sIGZpbGxXaXRoUmVk
OwpAQCAtMTEyNiwxMSArMTEyNywxMSBAQCB2b2lkIEtXUUtIVE1MUGFydDo6cGFpbnQoUVBhaW50
ZXIgKnAsIGNvCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIEVSUk9S
KCJjYWxsZWQgS1dRS0hUTUxQYXJ0OjpwYWludCB3aXRoIG5pbCByZW5kZXJlciIpOworICAgICAg
ICBFUlJPUigiY2FsbGVkIE1hY0ZyYW1lOjpwYWludCB3aXRoIG5pbCByZW5kZXJlciIpOwogICAg
IH0KIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KQor
dm9pZCBNYWNGcmFtZTo6YWRqdXN0UGFnZUhlaWdodChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBv
bGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9tTGltaXQpCiB7CiAgICAgUmVuZGVy
Q2FudmFzICpyb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQ2FudmFzICo+KHhtbERvY0ltcGwoKS0+
cmVuZGVyZXIoKSk7CiAgICAgaWYgKHJvb3QpIHsKQEAgLTExNTEsMTMgKzExNTIsMTMgQEAgdm9p
ZCBLV1FLSFRNTFBhcnQ6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYQogICAgIH0KIH0KIAotUmVuZGVy
T2JqZWN0ICpLV1FLSFRNTFBhcnQ6OnJlbmRlcmVyKCkgY29uc3QKK1JlbmRlck9iamVjdCAqTWFj
RnJhbWU6OnJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHhtbERv
Y0ltcGwoKTsKICAgICByZXR1cm4gZG9jID8gZG9jLT5yZW5kZXJlcigpIDogMDsKIH0KIAotUVN0
cmluZyBLV1FLSFRNTFBhcnQ6OnVzZXJBZ2VudCgpIGNvbnN0CitRU3RyaW5nIE1hY0ZyYW1lOjp1
c2VyQWdlbnQoKSBjb25zdAogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogICAgIHJldHVy
biBRU3RyaW5nOjpmcm9tTlNTdHJpbmcoW19icmlkZ2UgdXNlckFnZW50Rm9yVVJMOm1fdXJsLmdl
dE5TVVJMKCldKTsKQEAgLTExNjYsNyArMTE2Nyw3IEBAIFFTdHJpbmcgS1dRS0hUTUxQYXJ0Ojp1
c2VyQWdlbnQoKSBjb25zdAogICAgIHJldHVybiBRU3RyaW5nKCk7CiB9CiAKLVFTdHJpbmcgS1dR
S0hUTUxQYXJ0OjptaW1lVHlwZUZvckZpbGVOYW1lKGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lKSBj
b25zdAorUVN0cmluZyBNYWNGcmFtZTo6bWltZVR5cGVGb3JGaWxlTmFtZShjb25zdCBRU3RyaW5n
ICZmaWxlTmFtZSkgY29uc3QKIHsKICAgICBOU1N0cmluZyAqbnMgPSBmaWxlTmFtZS5nZXROU1N0
cmluZygpOwogCkBAIC0xMTc3LDcgKzExNzgsNyBAQCBRU3RyaW5nIEtXUUtIVE1MUGFydDo6bWlt
ZVR5cGVGb3JGaWxlTmFtCiAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIH0KIAotTlNWaWV3ICpLV1FL
SFRNTFBhcnQ6Om5leHRLZXlWaWV3SW5GcmFtZShOb2RlSW1wbCAqbm9kZSwgS1dRU2VsZWN0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbikKK05TVmlldyAqTWFjRnJhbWU6Om5leHRLZXlWaWV3SW5GcmFt
ZShOb2RlSW1wbCAqbm9kZSwgS1dRU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICBEb2N1bWVudEltcGwgKmRvYyA9IHhtbERvY0ltcGwoKTsKICAgICBpZiAoIWRvYykgewpAQCAt
MTE5Niw3ICsxMTk3LDcgQEAgTlNWaWV3ICpLV1FLSFRNTFBhcnQ6Om5leHRLZXlWaWV3SW5GcmFt
ZQogICAgICAgICAgICAgS0hUTUxWaWV3ICpjaGlsZEZyYW1lV2lkZ2V0ID0gd2lkZ2V0LT5pc0tI
VE1MVmlldygpID8gc3RhdGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHdpZGdldCkgOiAwOwogICAgICAg
ICAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogICAgICAgICAgICAgaWYgKGNoaWxkRnJhbWVXaWRn
ZXQpIHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gS1dRKGNoaWxkRnJhbWVXaWRnZXQtPnBhcnQo
KSktPm5leHRLZXlWaWV3SW5GcmFtZSgwLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICAgIHZp
ZXcgPSBNYWMoY2hpbGRGcmFtZVdpZGdldC0+ZnJhbWUoKSktPm5leHRLZXlWaWV3SW5GcmFtZSgw
LCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmICh3aWRnZXQpIHsKICAgICAgICAg
ICAgICAgICB2aWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7CiAgICAgICAgICAgICB9CkBAIC0xMjEx
LDExICsxMjEyLDExIEBAIE5TVmlldyAqS1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0luRnJhbWUK
ICAgICB9CiB9CiAKLU5TVmlldyAqS1dRS0hUTUxQYXJ0OjpuZXh0S2V5Vmlld0luRnJhbWVIaWVy
YXJjaHkoTm9kZUltcGwgKm5vZGUsIEtXUVNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitO
U1ZpZXcgKk1hY0ZyYW1lOjpuZXh0S2V5Vmlld0luRnJhbWVIaWVyYXJjaHkoTm9kZUltcGwgKm5v
ZGUsIEtXUVNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgTlNWaWV3ICpuZXh0
ID0gbmV4dEtleVZpZXdJbkZyYW1lKG5vZGUsIGRpcmVjdGlvbik7CiAgICAgaWYgKCFuZXh0KSB7
Ci0gICAgICAgIEtXUUtIVE1MUGFydCAqcGFyZW50ID0gS1dRKHBhcmVudFBhcnQoKSk7CisgICAg
ICAgIE1hY0ZyYW1lICpwYXJlbnQgPSBNYWMocGFyZW50RnJhbWUoKSk7CiAgICAgICAgIGlmIChw
YXJlbnQpIHsKICAgICAgICAgICAgIG5leHQgPSBwYXJlbnQtPm5leHRLZXlWaWV3SW5GcmFtZUhp
ZXJhcmNoeShwYXJlbnQtPmNoaWxkRnJhbWUodGhpcyktPm1fZnJhbWUtPmVsZW1lbnQoKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgfQpAQCAtMTIzMiw3ICsxMjMzLDcgQEAgTlNWaWV3ICpLV1FLSFRN
TFBhcnQ6Om5leHRLZXlWaWV3SW5GcmFtZQogICAgIHJldHVybiBuZXh0OwogfQogCi1OU1ZpZXcg
KktXUUtIVE1MUGFydDo6bmV4dEtleVZpZXcoTm9kZUltcGwgKm5vZGUsIEtXUVNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24pCitOU1ZpZXcgKk1hY0ZyYW1lOjpuZXh0S2V5VmlldyhOb2RlSW1w
bCAqbm9kZSwgS1dRU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBOU1ZpZXcg
KiBuZXh0OwogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwpAQCAtMTI1OCwxNiArMTI1OSwxNiBA
QCBOU1ZpZXcgKktXUUtIVE1MUGFydDo6bmV4dEtleVZpZXcoTm9kZUltCiAgICAgcmV0dXJuIG5l
eHRLZXlWaWV3SW5GcmFtZUhpZXJhcmNoeSgwLCBkaXJlY3Rpb24pOwogfQogCi1OU1ZpZXcgKktX
UUtIVE1MUGFydDo6bmV4dEtleVZpZXdGb3JXaWRnZXQoUVdpZGdldCAqc3RhcnRpbmdXaWRnZXQs
IEtXUVNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitOU1ZpZXcgKk1hY0ZyYW1lOjpuZXh0
S2V5Vmlld0ZvcldpZGdldChRV2lkZ2V0ICpzdGFydGluZ1dpZGdldCwgS1dRU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICAvLyBVc2UgdGhlIGV2ZW50IGZpbHRlciBvYmplY3Qg
dG8gZmlndXJlIG91dCB3aGljaCBSZW5kZXJXaWRnZXQgb3ducyB0aGlzIFFXaWRnZXQgYW5kIGdl
dCB0byB0aGUgRE9NLgogICAgIC8vIFRoZW4gZ2V0IHRoZSBuZXh0IGtleSB2aWV3IGluIHRoZSBv
cmRlciBkZXRlcm1pbmVkIGJ5IHRoZSBET00uCiAgICAgTm9kZUltcGwgKm5vZGUgPSBub2RlRm9y
V2lkZ2V0KHN0YXJ0aW5nV2lkZ2V0KTsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgcmV0dXJuIHBh
cnRGb3JOb2RlKG5vZGUpLT5uZXh0S2V5Vmlldyhub2RlLCBkaXJlY3Rpb24pOworICAgIHJldHVy
biBmcmFtZUZvck5vZGUobm9kZSktPm5leHRLZXlWaWV3KG5vZGUsIGRpcmVjdGlvbik7CiB9CiAK
LWJvb2wgS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc01vdXNlRG93bkluV2lkZ2V0KFFXaWRn
ZXQgKmNhbmRpZGF0ZSkKK2Jvb2wgTWFjRnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW5X
aWRnZXQoUVdpZGdldCAqY2FuZGlkYXRlKQogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwog
ICAgIHN3aXRjaCAoW1tOU0FwcCBjdXJyZW50RXZlbnRdIHR5cGVdKSB7CkBAIC0xMjgyLDEwICsx
MjgzLDEwIEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpjdXJyZW50RXZlbnRJc01vdXNlRG8KICAgICAK
ICAgICBOb2RlSW1wbCAqbm9kZSA9IG5vZGVGb3JXaWRnZXQoY2FuZGlkYXRlKTsKICAgICBBU1NF
UlQobm9kZSk7Ci0gICAgcmV0dXJuIHBhcnRGb3JOb2RlKG5vZGUpLT5kLT5tX3ZpZXctPm5vZGVV
bmRlck1vdXNlKCkgPT0gbm9kZTsKKyAgICByZXR1cm4gZnJhbWVGb3JOb2RlKG5vZGUpLT5kLT5t
X3ZpZXctPm5vZGVVbmRlck1vdXNlKCkgPT0gbm9kZTsKIH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6
OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKQorYm9vbCBNYWNGcmFtZTo6Y3VycmVu
dEV2ZW50SXNLZXlib2FyZE9wdGlvblRhYigpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7
CiAgICAgTlNFdmVudCAqZXZ0ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CkBAIC0xMzExLDkgKzEz
MTIsOSBAQCBib29sIEtXUUtIVE1MUGFydDo6Y3VycmVudEV2ZW50SXNLZXlib2FyCiAgICAgcmV0
dXJuIFlFUzsKIH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OmhhbmRsZUtleWJvYXJkT3B0aW9uVGFi
SW5WaWV3KE5TVmlldyAqdmlldykKK2Jvb2wgTWFjRnJhbWU6OmhhbmRsZUtleWJvYXJkT3B0aW9u
VGFiSW5WaWV3KE5TVmlldyAqdmlldykKIHsKLSAgICBpZiAoS1dRS0hUTUxQYXJ0OjpjdXJyZW50
RXZlbnRJc0tleWJvYXJkT3B0aW9uVGFiKCkpIHsKKyAgICBpZiAoTWFjRnJhbWU6OmN1cnJlbnRF
dmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKSkgewogICAgICAgICBpZiAoKFtbTlNBcHAgY3VycmVu
dEV2ZW50XSBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKSAhPSAwKSB7CiAgICAgICAg
ICAgICBbW3ZpZXcgd2luZG93XSBzZWxlY3RLZXlWaWV3UHJlY2VkaW5nVmlldzp2aWV3XTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTEzMjUsMTggKzEzMjYsMTggQEAgYm9vbCBLV1FLSFRNTFBhcnQ6
OmhhbmRsZUtleWJvYXJkT3B0aW9uVAogICAgIHJldHVybiBOTzsKIH0KIAotYm9vbCBLV1FLSFRN
TFBhcnQ6OnRhYnNUb0xpbmtzKCkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6OnRhYnNUb0xpbmtzKCkg
Y29uc3QKIHsKICAgICBpZiAoW19icmlkZ2Uga2V5Ym9hcmRVSU1vZGVdICYgV2ViQ29yZUtleWJv
YXJkQWNjZXNzVGFic1RvTGlua3MpCi0gICAgICAgIHJldHVybiAhS1dRS0hUTUxQYXJ0OjpjdXJy
ZW50RXZlbnRJc0tleWJvYXJkT3B0aW9uVGFiKCk7CisgICAgICAgIHJldHVybiAhTWFjRnJhbWU6
OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKTsKICAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBLV1FLSFRNTFBhcnQ6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKTsKKyAg
ICAgICAgcmV0dXJuIE1hY0ZyYW1lOjpjdXJyZW50RXZlbnRJc0tleWJvYXJkT3B0aW9uVGFiKCk7
CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojp0YWJzVG9BbGxDb250cm9scygpIGNvbnN0Citib29s
IE1hY0ZyYW1lOjp0YWJzVG9BbGxDb250cm9scygpIGNvbnN0CiB7CiAgICAgV2ViQ29yZUtleWJv
YXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlID0gW19icmlkZ2Uga2V5Ym9hcmRVSU1vZGVdOwotICAg
IEJPT0wgaGFuZGxpbmdPcHRpb25UYWIgPSBLV1FLSFRNTFBhcnQ6OmN1cnJlbnRFdmVudElzS2V5
Ym9hcmRPcHRpb25UYWIoKTsKKyAgICBCT09MIGhhbmRsaW5nT3B0aW9uVGFiID0gTWFjRnJhbWU6
OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKTsKIAogICAgIC8vIElmIHRhYi10by1s
aW5rcyBpcyBvZmYsIG9wdGlvbi10YWIgYWx3YXlzIGhpZ2hsaWdodHMgYWxsIGNvbnRyb2xzCiAg
ICAgaWYgKChrZXlib2FyZFVJTW9kZSAmIFdlYkNvcmVLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtz
KSA9PSAwICYmIGhhbmRsaW5nT3B0aW9uVGFiKSB7CkBAIC0xMzU2LDEyICsxMzU3LDEyIEBAIGJv
b2wgS1dRS0hUTUxQYXJ0Ojp0YWJzVG9BbGxDb250cm9scygpIGMKICAgICByZXR1cm4gaGFuZGxp
bmdPcHRpb25UYWI7CiB9CiAKLUtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKktXUUtIVE1MUGFy
dDo6ZXhlY3V0aW9uQ29udGV4dEZvckRPTSgpCitLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpN
YWNGcmFtZTo6ZXhlY3V0aW9uQ29udGV4dEZvckRPTSgpCiB7CiAgICAgcmV0dXJuIGJpbmRpbmdS
b290T2JqZWN0KCk7CiB9CiAKLUtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKktXUUtIVE1MUGFy
dDo6YmluZGluZ1Jvb3RPYmplY3QoKQorS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqTWFjRnJh
bWU6OmJpbmRpbmdSb290T2JqZWN0KCkKIHsKICAgICBpZiAoIV9iaW5kaW5nUm9vdCkgewogICAg
ICAgICBKU0xvY2sgbG9jazsKQEAgLTEzNzQsNyArMTM3NSw3IEBAIEtKUzo6QmluZGluZ3M6OlJv
b3RPYmplY3QgKktXUUtIVE1MUGFydDoKICAgICByZXR1cm4gX2JpbmRpbmdSb290OwogfQogCi1X
ZWJTY3JpcHRPYmplY3QgKktXUUtIVE1MUGFydDo6d2luZG93U2NyaXB0T2JqZWN0KCkKK1dlYlNj
cmlwdE9iamVjdCAqTWFjRnJhbWU6OndpbmRvd1NjcmlwdE9iamVjdCgpCiB7CiAgICAgaWYgKCFf
d2luZG93U2NyaXB0T2JqZWN0KSB7CiAgICAgICAgIEtKUzo6SlNMb2NrIGxvY2s7CkBAIC0xMzg1
LDcgKzEzODYsNyBAQCBXZWJTY3JpcHRPYmplY3QgKktXUUtIVE1MUGFydDo6d2luZG93U2NyCiAg
ICAgcmV0dXJuIF93aW5kb3dTY3JpcHRPYmplY3Q7CiB9CiAKLU5QT2JqZWN0ICpLV1FLSFRNTFBh
cnQ6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKK05QT2JqZWN0ICpNYWNGcmFtZTo6d2luZG93U2Ny
aXB0TlBPYmplY3QoKQogewogICAgIGlmICghX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7CiAgICAg
ICAgIEtKUzo6SlNPYmplY3QgKndpbiA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyh0aGlz
KTsKQEAgLTE0MDUsMTIgKzE0MDYsMTIgQEAgTlBPYmplY3QgKktXUUtIVE1MUGFydDo6d2luZG93
U2NyaXB0TlBPYgogICAgIHJldHVybiBfd2luZG93U2NyaXB0TlBPYmplY3Q7CiB9CiAKLXZvaWQg
S1dRS0hUTUxQYXJ0OjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQordm9pZCBNYWNGcmFtZTo6cGFydENs
ZWFyZWRJbkJlZ2luKCkKIHsKICAgICBbX2JyaWRnZSB3aW5kb3dPYmplY3RDbGVhcmVkXTsKIH0K
IAotUGF1c2VkVGltZW91dHMgKktXUUtIVE1MUGFydDo6cGF1c2VUaW1lb3V0cygpCitQYXVzZWRU
aW1lb3V0cyAqTWFjRnJhbWU6OnBhdXNlVGltZW91dHMoKQogewogICAgIGlmIChkLT5tX2RvYyAm
JiBkLT5tX2pzY3JpcHQpIHsKICAgICAgICAgV2luZG93ICp3ID0gV2luZG93OjpyZXRyaWV2ZVdp
bmRvdyh0aGlzKTsKQEAgLTE0MjAsNyArMTQyMSw3IEBAIFBhdXNlZFRpbWVvdXRzICpLV1FLSFRN
TFBhcnQ6OnBhdXNlVGltZW8KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6
OnJlc3VtZVRpbWVvdXRzKFBhdXNlZFRpbWVvdXRzICp0KQordm9pZCBNYWNGcmFtZTo6cmVzdW1l
VGltZW91dHMoUGF1c2VkVGltZW91dHMgKnQpCiB7CiAgICAgaWYgKGQtPm1fZG9jICYmIGQtPm1f
anNjcmlwdCAmJiBkLT5tX2JKU2NyaXB0RW5hYmxlZCkgewogICAgICAgICBXaW5kb3cgKncgPSBX
aW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpOwpAQCAtMTQyOSw3ICsxNDMwLDcgQEAgdm9pZCBL
V1FLSFRNTFBhcnQ6OnJlc3VtZVRpbWVvdXRzKFBhdXNlZAogICAgIH0KIH0KIAotYm9vbCBLV1FL
SFRNTFBhcnQ6OmNhbkNhY2hlUGFnZSgpCitib29sIE1hY0ZyYW1lOjpjYW5DYWNoZVBhZ2UoKQog
ewogICAgIC8vIE9ubHkgc2F2ZSBwYWdlIHN0YXRlIGlmOgogICAgIC8vIDEuICBXZSdyZSBub3Qg
YSBmcmFtZSBvciBmcmFtZXNldC4KQEAgLTE0MzgsNyArMTQzOSw3IEBAIGJvb2wgS1dRS0hUTUxQ
YXJ0OjpjYW5DYWNoZVBhZ2UoKQogICAgIC8vIDQuICBUaGUgVVJMIGZvciB0aGUgcGFnZSBpcyBu
b3QgaHR0cHMuCiAgICAgLy8gNS4gIFRoZSBwYWdlIGhhcyBubyBhcHBsZXRzLgogICAgIGlmIChk
LT5tX2ZyYW1lcy5jb3VudCgpIHx8Ci0gICAgICAgIHBhcmVudFBhcnQoKSB8fAorICAgICAgICBw
YXJlbnRGcmFtZSgpIHx8CiAgICAgICAgIG1fdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgiaHR0
cHMiKSB8fCAKIAkoZC0+bV9kb2MgJiYgKGQtPm1fZG9jLT5hcHBsZXRzKCktPmxlbmd0aCgpICE9
IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2RvYy0+aGFzV2luZG93RXZlbnRMaXN0
ZW5lcih1bmxvYWRFdmVudCkgfHwKQEAgLTE0NDgsMTQgKzE0NDksMTQgQEAgYm9vbCBLV1FLSFRN
TFBhcnQ6OmNhbkNhY2hlUGFnZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS1dRS0hU
TUxQYXJ0OjpzYXZlV2luZG93UHJvcGVydGllcyhTYXZlZFByb3BlcnRpZXMgKndpbmRvd1Byb3Bl
cnRpZXMpCit2b2lkIE1hY0ZyYW1lOjpzYXZlV2luZG93UHJvcGVydGllcyhTYXZlZFByb3BlcnRp
ZXMgKndpbmRvd1Byb3BlcnRpZXMpCiB7CiAgICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJl
dHJpZXZlV2luZG93KHRoaXMpOwogICAgIGlmICh3aW5kb3cpCiAgICAgICAgIHdpbmRvdy0+c2F2
ZVByb3BlcnRpZXMoKndpbmRvd1Byb3BlcnRpZXMpOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6
c2F2ZUxvY2F0aW9uUHJvcGVydGllcyhTYXZlZFByb3BlcnRpZXMgKmxvY2F0aW9uUHJvcGVydGll
cykKK3ZvaWQgTWFjRnJhbWU6OnNhdmVMb2NhdGlvblByb3BlcnRpZXMoU2F2ZWRQcm9wZXJ0aWVz
ICpsb2NhdGlvblByb3BlcnRpZXMpCiB7CiAgICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJl
dHJpZXZlV2luZG93KHRoaXMpOwogICAgIGlmICh3aW5kb3cpIHsKQEAgLTE0NjUsMTQgKzE0NjYs
MTQgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNhdmVMb2NhdGlvblByb3BlcnRpZQogICAgIH0KIH0K
IAotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3RvcmVXaW5kb3dQcm9wZXJ0aWVzKFNhdmVkUHJvcGVy
dGllcyAqd2luZG93UHJvcGVydGllcykKK3ZvaWQgTWFjRnJhbWU6OnJlc3RvcmVXaW5kb3dQcm9w
ZXJ0aWVzKFNhdmVkUHJvcGVydGllcyAqd2luZG93UHJvcGVydGllcykKIHsKICAgICBXaW5kb3cg
KndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3codGhpcyk7CiAgICAgaWYgKHdpbmRvdykK
ICAgICAgICAgd2luZG93LT5yZXN0b3JlUHJvcGVydGllcygqd2luZG93UHJvcGVydGllcyk7CiB9
CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpyZXN0b3JlTG9jYXRpb25Qcm9wZXJ0aWVzKFNhdmVkUHJv
cGVydGllcyAqbG9jYXRpb25Qcm9wZXJ0aWVzKQordm9pZCBNYWNGcmFtZTo6cmVzdG9yZUxvY2F0
aW9uUHJvcGVydGllcyhTYXZlZFByb3BlcnRpZXMgKmxvY2F0aW9uUHJvcGVydGllcykKIHsKICAg
ICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3codGhpcyk7CiAgICAgaWYg
KHdpbmRvdykgewpAQCAtMTQ4MiwyMSArMTQ4MywyMSBAQCB2b2lkIEtXUUtIVE1MUGFydDo6cmVz
dG9yZUxvY2F0aW9uUHJvcGVyCiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6c2F2ZUlu
dGVycHJldGVyQnVpbHRpbnMoU2F2ZWRCdWlsdGlucyAmaW50ZXJwcmV0ZXJCdWlsdGlucykKK3Zv
aWQgTWFjRnJhbWU6OnNhdmVJbnRlcnByZXRlckJ1aWx0aW5zKFNhdmVkQnVpbHRpbnMgJmludGVy
cHJldGVyQnVpbHRpbnMpCiB7CiAgICAgaWYgKGpTY3JpcHQoKSAmJiBqU2NyaXB0KCktPmludGVy
cHJldGVyKCkpIHsKIAlqU2NyaXB0KCktPmludGVycHJldGVyKCktPnNhdmVCdWlsdGlucyhpbnRl
cnByZXRlckJ1aWx0aW5zKTsKICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpyZXN0b3Jl
SW50ZXJwcmV0ZXJCdWlsdGlucyhjb25zdCBTYXZlZEJ1aWx0aW5zICZpbnRlcnByZXRlckJ1aWx0
aW5zKQordm9pZCBNYWNGcmFtZTo6cmVzdG9yZUludGVycHJldGVyQnVpbHRpbnMoY29uc3QgU2F2
ZWRCdWlsdGlucyAmaW50ZXJwcmV0ZXJCdWlsdGlucykKIHsKICAgICBpZiAoalNjcmlwdCgpICYm
IGpTY3JpcHQoKS0+aW50ZXJwcmV0ZXIoKSkgewogCWpTY3JpcHQoKS0+aW50ZXJwcmV0ZXIoKS0+
cmVzdG9yZUJ1aWx0aW5zKGludGVycHJldGVyQnVpbHRpbnMpOwogICAgIH0KIH0KIAotdm9pZCBL
V1FLSFRNTFBhcnQ6Om9wZW5VUkxGcm9tUGFnZUNhY2hlKEtXUVBhZ2VTdGF0ZSAqc3RhdGUpCit2
b2lkIE1hY0ZyYW1lOjpvcGVuVVJMRnJvbVBhZ2VDYWNoZShLV1FQYWdlU3RhdGUgKnN0YXRlKQog
ewogICAgIC8vIEl0J3Mgc2FmZSB0byBhc3N1bWUgbm9uZSBvZiB0aGUgS1dRUGFnZVN0YXRlIG1l
dGhvZHMgd2lsbCByYWlzZQogICAgIC8vIGV4Y2VwdGlvbnMsIHNpbmNlIEtXUVBhZ2VTdGF0ZSBp
cyBpbXBsZW1lbnRlZCBieSBXZWJDb3JlIGFuZApAQCAtMTU4MSw0OSArMTU4Miw0OSBAQCB2b2lk
IEtXUUtIVE1MUGFydDo6b3BlblVSTEZyb21QYWdlQ2FjaGUoCiAgICAgY2hlY2tDb21wbGV0ZWQo
KTsKIH0KIAotS1dRS0hUTUxQYXJ0ICpLV1FLSFRNTFBhcnQ6OnBhcnRGb3JXaWRnZXQoY29uc3Qg
UVdpZGdldCAqd2lkZ2V0KQorTWFjRnJhbWUgKk1hY0ZyYW1lOjpmcmFtZUZvcldpZGdldChjb25z
dCBRV2lkZ2V0ICp3aWRnZXQpCiB7CiAgICAgQVNTRVJUX0FSRyh3aWRnZXQsIHdpZGdldCk7CiAg
ICAgCiAgICAgTm9kZUltcGwgKm5vZGUgPSBub2RlRm9yV2lkZ2V0KHdpZGdldCk7CiAgICAgaWYg
KG5vZGUpIHsKLQlyZXR1cm4gcGFydEZvck5vZGUobm9kZSk7CisJcmV0dXJuIGZyYW1lRm9yTm9k
ZShub2RlKTsKICAgICB9CiAgICAgCiAgICAgLy8gQXNzdW1lIGFsbCB3aWRnZXRzIGFyZSBlaXRo
ZXIgZm9ybSBjb250cm9scywgb3IgS0hUTUxWaWV3cy4KICAgICBBU1NFUlQod2lkZ2V0LT5pc0tI
VE1MVmlldygpKTsKLSAgICByZXR1cm4gS1dRKHN0YXRpY19jYXN0PGNvbnN0IEtIVE1MVmlldyAq
Pih3aWRnZXQpLT5wYXJ0KCkpOworICAgIHJldHVybiBNYWMoc3RhdGljX2Nhc3Q8Y29uc3QgS0hU
TUxWaWV3ICo+KHdpZGdldCktPmZyYW1lKCkpOwogfQogCi1XZWJDb3JlQnJpZGdlICpLV1FLSFRN
TFBhcnQ6OmJyaWRnZUZvcldpZGdldChjb25zdCBRV2lkZ2V0ICp3aWRnZXQpCitXZWJDb3JlQnJp
ZGdlICpNYWNGcmFtZTo6YnJpZGdlRm9yV2lkZ2V0KGNvbnN0IFFXaWRnZXQgKndpZGdldCkKIHsK
ICAgICBBU1NFUlRfQVJHKHdpZGdldCwgd2lkZ2V0KTsKICAgICAKLSAgICBLV1FLSFRNTFBhcnQg
KnBhcnQgPSBwYXJ0Rm9yV2lkZ2V0KHdpZGdldCk7Ci0gICAgQVNTRVJUKHBhcnQpOwotICAgIHJl
dHVybiBwYXJ0LT5icmlkZ2UoKTsKKyAgICBNYWNGcmFtZSAqZnJhbWUgPSBmcmFtZUZvcldpZGdl
dCh3aWRnZXQpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lLT5icmlkZ2Uo
KTsKIH0KIAotS1dRS0hUTUxQYXJ0ICpLV1FLSFRNTFBhcnQ6OnBhcnRGb3JOb2RlKE5vZGVJbXBs
ICpub2RlKQorTWFjRnJhbWUgKk1hY0ZyYW1lOjpmcmFtZUZvck5vZGUoTm9kZUltcGwgKm5vZGUp
CiB7CiAgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlKTsKLSAgICByZXR1cm4gS1dRKG5vZGUtPmdl
dERvY3VtZW50KCktPnBhcnQoKSk7CisgICAgcmV0dXJuIE1hYyhub2RlLT5nZXREb2N1bWVudCgp
LT5mcmFtZSgpKTsKIH0KIAotTlNWaWV3ICpLV1FLSFRNTFBhcnQ6OmRvY3VtZW50Vmlld0Zvck5v
ZGUoTm9kZUltcGwgKm5vZGUpCitOU1ZpZXcgKk1hY0ZyYW1lOjpkb2N1bWVudFZpZXdGb3JOb2Rl
KE5vZGVJbXBsICpub2RlKQogewotICAgIFdlYkNvcmVCcmlkZ2UgKmJyaWRnZSA9IHBhcnRGb3JO
b2RlKG5vZGUpLT5icmlkZ2UoKTsKKyAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBmcmFtZUZv
ck5vZGUobm9kZSktPmJyaWRnZSgpOwogICAgIHJldHVybiBbYnJpZGdlIGRvY3VtZW50Vmlld107
CiB9CiAKLU5vZGVJbXBsICpLV1FLSFRNTFBhcnQ6Om5vZGVGb3JXaWRnZXQoY29uc3QgUVdpZGdl
dCAqd2lkZ2V0KQorTm9kZUltcGwgKk1hY0ZyYW1lOjpub2RlRm9yV2lkZ2V0KGNvbnN0IFFXaWRn
ZXQgKndpZGdldCkKIHsKICAgICBBU1NFUlRfQVJHKHdpZGdldCwgd2lkZ2V0KTsKICAgICBjb25z
dCBRT2JqZWN0ICpvID0gd2lkZ2V0LT5ldmVudEZpbHRlck9iamVjdCgpOwogICAgIHJldHVybiBv
ID8gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KG8pLT5lbGVtZW50KCkgOiAwOwog
fQogCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0RG9jdW1lbnRGb2N1cyhRV2lkZ2V0ICp3aWRnZXQp
Cit2b2lkIE1hY0ZyYW1lOjpzZXREb2N1bWVudEZvY3VzKFFXaWRnZXQgKndpZGdldCkKIHsKICAg
ICBOb2RlSW1wbCAqbm9kZSA9IG5vZGVGb3JXaWRnZXQod2lkZ2V0KTsKICAgICBpZiAobm9kZSkg
ewpAQCAtMTYzMyw3ICsxNjM0LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNldERvY3VtZW50Rm9j
dXMoUVdpZAogICAgIH0KIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmNsZWFyRG9jdW1lbnRGb2N1
cyhRV2lkZ2V0ICp3aWRnZXQpCit2b2lkIE1hY0ZyYW1lOjpjbGVhckRvY3VtZW50Rm9jdXMoUVdp
ZGdldCAqd2lkZ2V0KQogewogICAgIE5vZGVJbXBsICpub2RlID0gbm9kZUZvcldpZGdldCh3aWRn
ZXQpOwogICAgIGlmIChub2RlKSB7CkBAIC0xNjQzLDcgKzE2NDQsNyBAQCB2b2lkIEtXUUtIVE1M
UGFydDo6Y2xlYXJEb2N1bWVudEZvY3VzKFFXCiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFy
dDo6c2F2ZURvY3VtZW50U3RhdGUoKQordm9pZCBNYWNGcmFtZTo6c2F2ZURvY3VtZW50U3RhdGUo
KQogewogICAgIC8vIERvIG5vdCBzYXZlIGRvYyBzdGF0ZSBpZiB0aGUgcGFnZSBoYXMgYSBwYXNz
d29yZCBmaWVsZCBhbmQgYSBmb3JtIHRoYXQgd291bGQgYmUgc3VibWl0dGVkCiAgICAgLy8gdmlh
IGh0dHBzCkBAIC0xNjU0LDQwICsxNjU1LDQwIEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzYXZlRG9j
dW1lbnRTdGF0ZSgpCiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cmVzdG9yZURvY3Vt
ZW50U3RhdGUoKQordm9pZCBNYWNGcmFtZTo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQogewogICAg
IEtXUV9CTE9DS19FWENFUFRJT05TOwogICAgIFtfYnJpZGdlIHJlc3RvcmVEb2N1bWVudFN0YXRl
XTsKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCi1RUHRyTGlzdDxLV1FLSFRNTFBh
cnQ+ICZLV1FLSFRNTFBhcnQ6Om11dGFibGVJbnN0YW5jZXMoKQorUVB0ckxpc3Q8TWFjRnJhbWU+
ICZNYWNGcmFtZTo6bXV0YWJsZUluc3RhbmNlcygpCiB7Ci0gICAgc3RhdGljIFFQdHJMaXN0PEtX
UUtIVE1MUGFydD4gaW5zdGFuY2VzTGlzdDsKKyAgICBzdGF0aWMgUVB0ckxpc3Q8TWFjRnJhbWU+
IGluc3RhbmNlc0xpc3Q7CiAgICAgcmV0dXJuIGluc3RhbmNlc0xpc3Q7CiB9CiAKLXZvaWQgS1dR
S0hUTUxQYXJ0Ojp1cGRhdGVQb2xpY3lCYXNlVVJMKCkKK3ZvaWQgTWFjRnJhbWU6OnVwZGF0ZVBv
bGljeUJhc2VVUkwoKQogewotICAgIGlmIChwYXJlbnRQYXJ0KCkgJiYgcGFyZW50UGFydCgpLT54
bWxEb2NJbXBsKCkpIHsKLSAgICAgICAgc2V0UG9saWN5QmFzZVVSTChwYXJlbnRQYXJ0KCktPnht
bERvY0ltcGwoKS0+cG9saWN5QmFzZVVSTCgpKTsKKyAgICBpZiAocGFyZW50RnJhbWUoKSAmJiBw
YXJlbnRGcmFtZSgpLT54bWxEb2NJbXBsKCkpIHsKKyAgICAgICAgc2V0UG9saWN5QmFzZVVSTChw
YXJlbnRGcmFtZSgpLT54bWxEb2NJbXBsKCktPnBvbGljeUJhc2VVUkwoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgc2V0UG9saWN5QmFzZVVSTChtX3VybC51cmwoKSk7CiAgICAgfQogfQogCi12
b2lkIEtXUUtIVE1MUGFydDo6c2V0UG9saWN5QmFzZVVSTChjb25zdCBET01TdHJpbmcgJnMpCit2
b2lkIE1hY0ZyYW1lOjpzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IERPTVN0cmluZyAmcykKIHsKICAg
ICBpZiAoeG1sRG9jSW1wbCgpKQogICAgICAgICB4bWxEb2NJbXBsKCktPnNldFBvbGljeUJhc2VV
Ukwocyk7CiAgICAgQ29uc3RGcmFtZUl0IGVuZCA9IGQtPm1fZnJhbWVzLmVuZCgpOwogICAgIGZv
ciAoQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIFJlYWRPbmx5UGFydCAqc3VicGFydCA9ICgqaXQpLm1fcGFydDsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8S1dRS0hUTUxQYXJ0ICo+KHN1YnBhcnQpLT5zZXRQb2xpY3lCYXNlVVJM
KHMpOworICAgICAgICBzdGF0aWNfY2FzdDxNYWNGcmFtZSAqPihzdWJwYXJ0KS0+c2V0UG9saWN5
QmFzZVVSTChzKTsKICAgICB9CiB9CiAKLVFTdHJpbmcgS1dRS0hUTUxQYXJ0OjpyZXF1ZXN0ZWRV
UkxTdHJpbmcoKSBjb25zdAorUVN0cmluZyBNYWNGcmFtZTo6cmVxdWVzdGVkVVJMU3RyaW5nKCkg
Y29uc3QKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gUVN0cmluZzo6
ZnJvbU5TU3RyaW5nKFtfYnJpZGdlIHJlcXVlc3RlZFVSTFN0cmluZ10pOwpAQCAtMTY5Niw3ICsx
Njk3LDcgQEAgUVN0cmluZyBLV1FLSFRNTFBhcnQ6OnJlcXVlc3RlZFVSTFN0cmluZwogICAgIHJl
dHVybiBRU3RyaW5nKCk7CiB9CiAKLVFTdHJpbmcgS1dRS0hUTUxQYXJ0OjppbmNvbWluZ1JlZmVy
cmVyKCkgY29uc3QKK1FTdHJpbmcgTWFjRnJhbWU6OmluY29taW5nUmVmZXJyZXIoKSBjb25zdAog
ewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogICAgIHJldHVybiBRU3RyaW5nOjpmcm9tTlNT
dHJpbmcoW19icmlkZ2UgaW5jb21pbmdSZWZlcnJlcl0pOwpAQCAtMTcwNSw3ICsxNzA2LDcgQEAg
UVN0cmluZyBLV1FLSFRNTFBhcnQ6OmluY29taW5nUmVmZXJyZXIoKQogICAgIHJldHVybiBRU3Ry
aW5nKCk7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojpmb3JjZUxheW91dCgpCit2b2lkIE1hY0Zy
YW1lOjpmb3JjZUxheW91dCgpCiB7CiAgICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3OwogICAg
IGlmICh2KSB7CkBAIC0xNzE5LDkgKzE3MjAsOSBAQCB2b2lkIEtXUUtIVE1MUGFydDo6Zm9yY2VM
YXlvdXQoKQogICAgIH0KIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmZvcmNlTGF5b3V0V2l0aFBh
Z2VXaWR0aFJhbmdlKGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoKQordm9p
ZCBNYWNGcmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UoZmxvYXQgbWluUGFnZVdp
ZHRoLCBmbG9hdCBtYXhQYWdlV2lkdGgpCiB7Ci0gICAgLy8gRHVtcGluZyBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKF9wYXJ0LT5yZW5kZXJlcigpKS5hc2NpaSgpIGlzIGEgZ29vZCB0cmljayB0byBz
ZWUKKyAgICAvLyBEdW1waW5nIGV4dGVybmFsUmVwcmVzZW50YXRpb24obV9mcmFtZS0+cmVuZGVy
ZXIoKSkuYXNjaWkoKSBpcyBhIGdvb2QgdHJpY2sgdG8gc2VlCiAgICAgLy8gdGhlIHN0YXRlIG9m
IHRoaW5ncyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsYXlvdXQKICAgICBSZW5kZXJDYW52YXMgKnJv
b3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXMgKj4oeG1sRG9jSW1wbCgpLT5yZW5kZXJlcigp
KTsKICAgICBpZiAocm9vdCkgewpAQCAtMTc0NSw3ICsxNzQ2LDcgQEAgdm9pZCBLV1FLSFRNTFBh
cnQ6OmZvcmNlTGF5b3V0V2l0aFBhZ2VXaQogICAgIH0KIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6
OnNlbmRSZXNpemVFdmVudCgpCit2b2lkIE1hY0ZyYW1lOjpzZW5kUmVzaXplRXZlbnQoKQogewog
ICAgIEtIVE1MVmlldyAqdiA9IGQtPm1fdmlldzsKICAgICBpZiAodikgewpAQCAtMTc1NCw3ICsx
NzU1LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRSZXNpemVFdmVudCgpCiAgICAgfQogfQog
Ci12b2lkIEtXUUtIVE1MUGFydDo6c2VuZFNjcm9sbEV2ZW50KCkKK3ZvaWQgTWFjRnJhbWU6OnNl
bmRTY3JvbGxFdmVudCgpCiB7CiAgICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3OwogICAgIGlm
ICh2KSB7CkBAIC0xNzY1LDcgKzE3NjYsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c2VuZFNjcm9s
bEV2ZW50KCkKICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0QWxl
cnQoY29uc3QgRE9NU3RyaW5nJiBtZXNzYWdlKQordm9pZCBNYWNGcmFtZTo6cnVuSmF2YVNjcmlw
dEFsZXJ0KGNvbnN0IERPTVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBET01TdHJpbmcgdGV4dCA9
IG1lc3NhZ2U7CiAgICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sKCkpOwpAQCAtMTc3NCw3ICsxNzc1LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnJ1
bkphdmFTY3JpcHRBbGVydChjbwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiB9CiAKLWJv
b2wgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBET01TdHJpbmcmIG1l
c3NhZ2UpCitib29sIE1hY0ZyYW1lOjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBET01TdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgRE9NU3RyaW5nIHRleHQgPSBtZXNzYWdlOwogICAgIHRleHQu
cmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKQEAgLTE3
ODYsNyArMTc4Nyw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0Q29uZmlybSgK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0
UHJvbXB0KGNvbnN0IERPTVN0cmluZyYgcHJvbXB0LCBjb25zdCBET01TdHJpbmcmIGRlZmF1bHRW
YWx1ZSwgRE9NU3RyaW5nJiByZXN1bHQpCitib29sIE1hY0ZyYW1lOjpydW5KYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IERPTVN0cmluZyYgcHJvbXB0LCBjb25zdCBET01TdHJpbmcmIGRlZmF1bHRWYWx1
ZSwgRE9NU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgRE9NU3RyaW5nIHByb21wdFRleHQgPSBwcm9t
cHQ7CiAgICAgcHJvbXB0VGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sKCkpOwpAQCAtMTgxMSwyMyArMTgxMiwyMyBAQCBib29sIEtXUUtIVE1MUGFydDo6
cnVuSmF2YVNjcmlwdFByb21wdChjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEtXUUtI
VE1MUGFydDo6bG9jYXRpb25iYXJWaXNpYmxlKCkKK2Jvb2wgTWFjRnJhbWU6OmxvY2F0aW9uYmFy
VmlzaWJsZSgpCiB7CiAgICAgcmV0dXJuIFtfYnJpZGdlIGFyZVRvb2xiYXJzVmlzaWJsZV07CiB9
CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjptZW51YmFyVmlzaWJsZSgpCitib29sIE1hY0ZyYW1lOjpt
ZW51YmFyVmlzaWJsZSgpCiB7CiAgICAgLy8gVGhlIG1lbnViYXIgaXMgYWx3YXlzIG9uIGluIE1h
YyBPUyBYIFVJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpwZXJz
b25hbGJhclZpc2libGUoKQorYm9vbCBNYWNGcmFtZTo6cGVyc29uYWxiYXJWaXNpYmxlKCkKIHsK
ICAgICByZXR1cm4gW19icmlkZ2UgYXJlVG9vbGJhcnNWaXNpYmxlXTsKIH0KIAotYm9vbCBLV1FL
SFRNTFBhcnQ6OnNjcm9sbGJhcnNWaXNpYmxlKCkKK2Jvb2wgTWFjRnJhbWU6OnNjcm9sbGJhcnNW
aXNpYmxlKCkKIHsKICAgICBpZiAoIXZpZXcoKSkKIAlyZXR1cm4gZmFsc2U7CkBAIC0xODM4LDE3
ICsxODM5LDE3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpzY3JvbGxiYXJzVmlzaWJsZSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzdGF0dXNiYXJWaXNpYmxlKCkK
K2Jvb2wgTWFjRnJhbWU6OnN0YXR1c2JhclZpc2libGUoKQogewogICAgIHJldHVybiBbX2JyaWRn
ZSBpc1N0YXR1c2JhclZpc2libGVdOwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6dG9vbGJhclZp
c2libGUoKQorYm9vbCBNYWNGcmFtZTo6dG9vbGJhclZpc2libGUoKQogewogICAgIHJldHVybiBb
X2JyaWRnZSBhcmVUb29sYmFyc1Zpc2libGVdOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6YWRk
TWVzc2FnZVRvQ29uc29sZShjb25zdCBET01TdHJpbmcgJm1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGNvbnN0IERPTVN0cmluZyAmc291cmNlVVJMKQordm9pZCBNYWNGcmFtZTo6YWRkTWVz
c2FnZVRvQ29uc29sZShjb25zdCBET01TdHJpbmcgJm1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IERPTVN0cmluZyAmc291cmNlVVJMKQogewogICAgIE5TRGljdGlvbmFyeSAqZGlj
dGlvbmFyeSA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKICAg
ICAgICAgKE5TU3RyaW5nICopbWVzc2FnZSwgQCJtZXNzYWdlIiwKQEAgLTE4NTgsNyArMTg1OSw3
IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjphZGRNZXNzYWdlVG9Db25zb2xlKGMKICAgICBbX2JyaWRn
ZSBhZGRNZXNzYWdlVG9Db25zb2xlOmRpY3Rpb25hcnldOwogfQogCi12b2lkIEtXUUtIVE1MUGFy
dDo6Y3JlYXRlRW1wdHlEb2N1bWVudCgpCit2b2lkIE1hY0ZyYW1lOjpjcmVhdGVFbXB0eURvY3Vt
ZW50KCkKIHsKICAgICAvLyBBbHRob3VnaCBpdCdzIG5vdCBjb21wbGV0ZWx5IGNsZWFyIGZyb20g
dGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiwKICAgICAvLyBpdCBkb2VzIG5vdGhpbmcgaWYgd2Ug
YWxyZWFkeSBoYXZlIGEgZG9jdW1lbnQsIGFuZCBqdXN0IGNyZWF0ZXMgYW4KQEAgLTE4NjgsMTkg
KzE4NjksMTkgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OmNyZWF0ZUVtcHR5RG9jdW1lbnQoKQogICAg
ICAgICBbX2JyaWRnZSBsb2FkRW1wdHlEb2N1bWVudFN5bmNocm9ub3VzbHldOwogCUtXUV9VTkJM
T0NLX0VYQ0VQVElPTlM7CiAKLQlpZiAocGFyZW50UGFydCgpICYmIChwYXJlbnRQYXJ0KCktPmNo
aWxkRnJhbWUodGhpcyktPm1fdHlwZSA9PSBDaGlsZEZyYW1lOjpJRnJhbWUgfHwKLQkJCSAgICAg
cGFyZW50UGFydCgpLT5jaGlsZEZyYW1lKHRoaXMpLT5tX3R5cGUgPT0gQ2hpbGRGcmFtZTo6T2Jq
ZWN0KSkgewotCSAgICBkLT5tX2RvYy0+c2V0QmFzZVVSTChwYXJlbnRQYXJ0KCktPmQtPm1fZG9j
LT5iYXNlVVJMKCkpOworCWlmIChwYXJlbnRGcmFtZSgpICYmIChwYXJlbnRGcmFtZSgpLT5jaGls
ZEZyYW1lKHRoaXMpLT5tX3R5cGUgPT0gQ2hpbGRGcmFtZTo6SUZyYW1lIHx8CisJCQkgICAgIHBh
cmVudEZyYW1lKCktPmNoaWxkRnJhbWUodGhpcyktPm1fdHlwZSA9PSBDaGlsZEZyYW1lOjpPYmpl
Y3QpKSB7CisJICAgIGQtPm1fZG9jLT5zZXRCYXNlVVJMKHBhcmVudEZyYW1lKCktPmQtPm1fZG9j
LT5iYXNlVVJMKCkpOwogCX0KICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjphZGRNZXRh
RGF0YShjb25zdCBRU3RyaW5nICZrZXksIGNvbnN0IFFTdHJpbmcgJnZhbHVlKQordm9pZCBNYWNG
cmFtZTo6YWRkTWV0YURhdGEoY29uc3QgUVN0cmluZyAma2V5LCBjb25zdCBRU3RyaW5nICZ2YWx1
ZSkKIHsKICAgICBkLT5tX2pvYi0+YWRkTWV0YURhdGEoa2V5LCB2YWx1ZSk7CiB9CiAKLWJvb2wg
S1dRS0hUTUxQYXJ0OjprZXlFdmVudChOU0V2ZW50ICpldmVudCkKK2Jvb2wgTWFjRnJhbWU6Omtl
eUV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIGJvb2wgcmVzdWx0OwogICAgIEtXUV9CTE9D
S19FWENFUFRJT05TOwpAQCAtMTkzMyw5ICsxOTM0LDkgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6Omtl
eUV2ZW50KE5TRXZlbnQgKmV2ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gVGhpcyBkb2Vz
IHRoZSBzYW1lIGtpbmQgb2Ygd29yayB0aGF0IEtIVE1MUGFydDo6b3BlblVSTCBkb2VzLCBleGNl
cHQgaXQgcmVsaWVzIG9uIHRoZSBmYWN0CisvLyBUaGlzIGRvZXMgdGhlIHNhbWUga2luZCBvZiB3
b3JrIHRoYXQgRnJhbWU6Om9wZW5VUkwgZG9lcywgZXhjZXB0IGl0IHJlbGllcyBvbiB0aGUgZmFj
dAogLy8gdGhhdCBhIGhpZ2hlciBsZXZlbCBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgVVJMcyBt
YXRjaCBhbmQgdGhlIHNjcm9sbGluZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCi12b2lkIEtX
UUtIVE1MUGFydDo6c2Nyb2xsVG9BbmNob3IoY29uc3QgS1VSTCAmVVJMKQordm9pZCBNYWNGcmFt
ZTo6c2Nyb2xsVG9BbmNob3IoY29uc3QgS1VSTCAmVVJMKQogewogICAgIG1fdXJsID0gVVJMOwog
ICAgIHN0YXJ0ZWQoMCk7CkBAIC0xOTQ4LDEzICsxOTQ5LDEzIEBAIHZvaWQgS1dRS0hUTUxQYXJ0
OjpzY3JvbGxUb0FuY2hvcihjb25zdCAKICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCi1ib29s
IEtXUUtIVE1MUGFydDo6Y2xvc2VVUkwoKQorYm9vbCBNYWNGcmFtZTo6Y2xvc2VVUkwoKQogewog
ICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgcmV0dXJuIEtIVE1MUGFydDo6Y2xvc2VVUkwo
KTsKKyAgICByZXR1cm4gRnJhbWU6OmNsb3NlVVJMKCk7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0
OjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdChOb2RlSW1wbCogbm9kZSkKK2Jvb2wgTWFjRnJhbWU6
OmNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KE5vZGVJbXBsKiBub2RlKQogewogICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTcyLDcg
KzE5NzMsNyBAQCBib29sIEtXUUtIVE1MUGFydDo6Y2FuTW91c2VEb3duU3RhcnRTZWxlCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpraHRtbE1vdXNlUHJlc3NFdmVu
dChNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQordm9pZCBNYWNGcmFtZTo6a2h0bWxNb3VzZVByZXNz
RXZlbnQoTW91c2VQcmVzc0V2ZW50ICpldmVudCkKIHsKICAgICBib29sIHNpbmdsZUNsaWNrID0g
W19jdXJyZW50RXZlbnQgY2xpY2tDb3VudF0gPD0gMTsKIApAQCAtMTk5OCwxOCArMTk5OSwxOCBA
QCB2b2lkIEtXUUtIVE1MUGFydDo6a2h0bWxNb3VzZVByZXNzRXZlbnQoCiAgICAgICAgICAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgICAgICB9CiAKLSAgICAgICAgS0hUTUxQYXJ0Ojpr
aHRtbE1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgICAgIEZyYW1lOjpraHRtbE1vdXNlUHJl
c3NFdmVudChldmVudCk7CiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6a2h0bWxNb3Vz
ZURvdWJsZUNsaWNrRXZlbnQoTW91c2VEb3VibGVDbGlja0V2ZW50ICpldmVudCkKK3ZvaWQgTWFj
RnJhbWU6OmtodG1sTW91c2VEb3VibGVDbGlja0V2ZW50KE1vdXNlRG91YmxlQ2xpY2tFdmVudCAq
ZXZlbnQpCiB7CiAgICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChldmVu
dCkpIHsKLSAgICAgICAgS0hUTUxQYXJ0OjpraHRtbE1vdXNlRG91YmxlQ2xpY2tFdmVudChldmVu
dCk7CisgICAgICAgIEZyYW1lOjpraHRtbE1vdXNlRG91YmxlQ2xpY2tFdmVudChldmVudCk7CiAg
ICAgfQogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9X
aWRnZXQoa2h0bWw6Ok1vdXNlRXZlbnQgKmV2ZW50KQorYm9vbCBNYWNGcmFtZTo6cGFzc1dpZGdl
dE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoa2h0bWw6Ok1vdXNlRXZlbnQgKmV2ZW50KQogewogICAg
IC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KICAgICBSZW5k
ZXJPYmplY3QgKnRhcmdldCA9IGV2ZW50LT5pbm5lck5vZGUoKSA/IGV2ZW50LT5pbm5lck5vZGUo
KS0+cmVuZGVyZXIoKSA6IDA7CkBAIC0yMDMzLDEyICsyMDM0LDEyIEBAIGJvb2wgS1dRS0hUTUxQ
YXJ0OjpwYXNzV2lkZ2V0TW91c2VEb3duRXYKICAgICAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgS1dRS0hUTUxQYXJ0OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJX
aWRnZXQgKnJlbmRlcldpZGdldCkKK2Jvb2wgTWFjRnJhbWU6OnBhc3NXaWRnZXRNb3VzZURvd25F
dmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCAqcmVuZGVyV2lkZ2V0KQogewogICAgIHJldHVybiBw
YXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsK
IH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0
KFFXaWRnZXQqIHdpZGdldCkKK2Jvb2wgTWFjRnJhbWU6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KFFXaWRnZXQqIHdpZGdldCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBtZXRob2Qg
YWx3YXlzIHJldHVybnMgdHJ1ZQogCkBAIC0yMTE2LDcgKzIxMTcsNyBAQCBib29sIEtXUUtIVE1M
UGFydDo6cGFzc1dpZGdldE1vdXNlRG93bkV2CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
S1dRS0hUTUxQYXJ0OjpsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdAorYm9vbCBNYWNGcmFtZTo6
bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3QKIHsKICAgICAvLyBNYW55IEFLIHdpZGdldHMgcnVu
IHRoZWlyIG93biBldmVudCBsb29wcyBhbmQgY29uc3VtZSBldmVudHMgd2hpbGUgdGhlIG1vdXNl
IGlzIGRvd24uCiAgICAgLy8gV2hlbiB0aGV5IGZpbmlzaCwgY3VycmVudEV2ZW50IGlzIHRoZSBt
b3VzZVVwIHRoYXQgdGhleSBleGl0ZWQgb24uICBXZSBuZWVkIHRvIHVwZGF0ZQpAQCAtMjE1Myw3
ICsyMTU0LDcgQEAgc3RhdGljIGJvb2wgZmluZFZpZXdJblN1YnZpZXdzKE5TVmlldyAqcwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotTlNWaWV3ICpLV1FLSFRNTFBhcnQ6Om1vdXNlRG93blZpZXdJ
ZlN0aWxsR29vZCgpCitOU1ZpZXcgKk1hY0ZyYW1lOjptb3VzZURvd25WaWV3SWZTdGlsbEdvb2Qo
KQogewogICAgIC8vIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHRyYWNraW5nIHRoZSBsaWZldGlt
ZSBvZiBfbW91c2VEb3duVmlldywgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdAogICAgIC8vIGl0IGNv
dWxkIGJlIGRlYWxsb2NhdGVkIGFscmVhZHkuIFdlIHNlYXJjaCBmb3IgaXQgaW4gb3VyIHN1YnZp
ZXcgdHJlZTsgaWYgd2UgZG9uJ3QgZmluZApAQCAtMjE4MSw3ICsyMTgyLDcgQEAgTlNWaWV3ICpL
V1FLSFRNTFBhcnQ6Om1vdXNlRG93blZpZXdJZlN0aQogCiAjZGVmaW5lIFRleHREcmFnRGVsYXkg
ICAgICAgICAgICAgICAgICAgIDAuMTUKIAotYm9vbCBLV1FLSFRNTFBhcnQ6OmRyYWdIeXN0ZXJl
c2lzRXhjZWVkZWQoZmxvYXQgZHJhZ0xvY2F0aW9uWCwgZmxvYXQgZHJhZ0xvY2F0aW9uWSkgY29u
c3QKK2Jvb2wgTWFjRnJhbWU6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoZmxvYXQgZHJhZ0xvY2F0
aW9uWCwgZmxvYXQgZHJhZ0xvY2F0aW9uWSkgY29uc3QKIHsKICAgICBpbnQgZHJhZ1gsIGRyYWdZ
OwogICAgIGQtPm1fdmlldy0+dmlld3BvcnRUb0NvbnRlbnRzKChpbnQpZHJhZ0xvY2F0aW9uWCwg
KGludClkcmFnTG9jYXRpb25ZLCBkcmFnWCwgZHJhZ1kpOwpAQCAtMjIwMCwxMyArMjIwMSwxMyBA
QCBib29sIEtXUUtIVE1MUGFydDo6ZHJhZ0h5c3RlcmVzaXNFeGNlZWRlCiB9CiAKIC8vIHJldHVy
bnMgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpLmUuLCB3aGV0
aGVyIGV2ZW50aGFuZGxlciBjYW5jZWxlZAotYm9vbCBLV1FLSFRNTFBhcnQ6OmRpc3BhdGNoRHJh
Z1NyY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBjb25zdCBRUG9pbnQgJmxv
YykgY29uc3QKK2Jvb2wgTWFjRnJhbWU6OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlLCBjb25zdCBRUG9pbnQgJmxvYykgY29uc3QKIHsKICAgICBib29s
IG5vRGVmYXVsdFByb2MgPSBkLT5tX3ZpZXctPmRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50VHlwZSwg
X2RyYWdTcmMuZ2V0KCksIGxvYywgX2RyYWdDbGlwYm9hcmQpOwogICAgIHJldHVybiAhbm9EZWZh
dWx0UHJvYzsKIH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OmV2ZW50TWF5U3RhcnREcmFnKE5TRXZl
bnQgKmV2ZW50KSBjb25zdAorYm9vbCBNYWNGcmFtZTo6ZXZlbnRNYXlTdGFydERyYWcoTlNFdmVu
dCAqZXZlbnQpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBpcyBhIHByZS1mbGlnaHQgY2hlY2sgb2Yg
d2hldGhlciB0aGUgZXZlbnQgbWlnaHQgbGVhZCB0byBhIGRyYWcgYmVpbmcgc3RhcnRlZC4gIEJl
IGNhcmVmdWwKICAgICAvLyB0aGF0IGl0cyBsb2dpYyBuZWVkcyB0byBzdGF5IGluIHN5bmMgd2l0
aCBraHRtbE1vdXNlTW92ZUV2ZW50KCkgYW5kIHRoZSB3YXkgd2Ugc2V0CkBAIC0yMjMxLDcgKzIy
MzIsNyBAQCBib29sIEtXUUtIVE1MUGFydDo6ZXZlbnRNYXlTdGFydERyYWcoTlNFCiAgICAgcmV0
dXJuIG5vZGVJbmZvLmlubmVyTm9kZSgpLT5yZW5kZXJlcigpLT5kcmFnZ2FibGVOb2RlKERIVE1M
RmxhZywgVUFGbGFnLCBtb3VzZURvd25YLCBtb3VzZURvd25ZLCBzcmNJc0RIVE1MKTsKIH0KIAot
dm9pZCBLV1FLSFRNTFBhcnQ6OmtodG1sTW91c2VNb3ZlRXZlbnQoTW91c2VNb3ZlRXZlbnQgKmV2
ZW50KQordm9pZCBNYWNGcmFtZTo6a2h0bWxNb3VzZU1vdmVFdmVudChNb3VzZU1vdmVFdmVudCAq
ZXZlbnQpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAKQEAgLTIzODAsMTIgKzIzODEs
MTIgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OmtodG1sTW91c2VNb3ZlRXZlbnQoTQogCWQtPm1fYk1v
dXNlUHJlc3NlZCA9IGZhbHNlOwogICAgIH0KIAotICAgIEtIVE1MUGFydDo6a2h0bWxNb3VzZU1v
dmVFdmVudChldmVudCk7CisgICAgRnJhbWU6OmtodG1sTW91c2VNb3ZlRXZlbnQoZXZlbnQpOwog
CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmRy
YWdTb3VyY2VNb3ZlZFRvKGNvbnN0IFFQb2ludCAmbG9jKQordm9pZCBNYWNGcmFtZTo6ZHJhZ1Nv
dXJjZU1vdmVkVG8oY29uc3QgUVBvaW50ICZsb2MpCiB7CiAgICAgaWYgKF9kcmFnU3JjICYmIF9k
cmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAvLyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYg
ZXZlbnQgaGFuZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5v
bmUKQEAgLTIzOTMsNyArMjM5NCw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpkcmFnU291cmNlTW92
ZWRUbyhjb24KICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpkcmFnU291cmNlRW5kZWRB
dChjb25zdCBRUG9pbnQgJmxvYywgTlNEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbikKK3ZvaWQgTWFj
RnJhbWU6OmRyYWdTb3VyY2VFbmRlZEF0KGNvbnN0IFFQb2ludCAmbG9jLCBOU0RyYWdPcGVyYXRp
b24gb3BlcmF0aW9uKQogewogICAgIGlmIChfZHJhZ1NyYyAmJiBfZHJhZ1NyY01heUJlREhUTUwp
IHsKICAgICAgICAgX2RyYWdDbGlwYm9hcmQtPnNldERlc3RpbmF0aW9uT3BlcmF0aW9uKG9wZXJh
dGlvbik7CkBAIC0yNDA2LDcgKzI0MDcsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6ZHJhZ1NvdXJj
ZUVuZGVkQXQoY29uCiAKIC8vIFJldHVybnMgd2hldGhlciBjYWxsZXIgc2hvdWxkIGNvbnRpbnVl
IHdpdGggInRoZSBkZWZhdWx0IHByb2Nlc3NpbmciLCB3aGljaCBpcyB0aGUgc2FtZSBhcyAKIC8v
IHRoZSBldmVudCBoYW5kbGVyIE5PVCBzZXR0aW5nIHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UK
LWJvb2wgS1dRS0hUTUxQYXJ0OjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlLCBLV1FDbGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kpCitib29sIE1hY0Zy
YW1lOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBLV1FD
bGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kpCiB7CiAgICAgTm9kZUltcGwgKnRhcmdldCA9
IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0ICYmIHht
bERvY0ltcGwoKSkgewpAQCAtMjQzOCwyMiArMjQzOSwyMiBAQCBib29sIEtXUUtIVE1MUGFydDo6
ZGlzcGF0Y2hDUFBFdmVudChjb25zCiAvLyBXZSBuZWVkIHRvIHVzZSBvbmJlZm9yZWNvcHkgYXMg
YSByZWFsIG1lbnUgZW5hYmxlciBiZWNhdXNlIHdlIGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIG5v
dAogLy8gbm9ybWFsbHkgc2VsZWN0YWJsZSB0byBpbXBsZW1lbnQgY29weS9wYXN0ZSAobGlrZSBk
aXZzLCBvciBhIGRvY3VtZW50IGJvZHkpLgogCi1ib29sIEtXUUtIVE1MUGFydDo6bWF5Q3V0KCkK
K2Jvb2wgTWFjRnJhbWU6Om1heUN1dCgpCiB7CiAgICAgcmV0dXJuICFkaXNwYXRjaENQUEV2ZW50
KGJlZm9yZWN1dEV2ZW50LCBLV1FDbGlwYm9hcmQ6Ok51bWIpOwogfQogCi1ib29sIEtXUUtIVE1M
UGFydDo6bWF5Q29weSgpCitib29sIE1hY0ZyYW1lOjptYXlDb3B5KCkKIHsKICAgICByZXR1cm4g
IWRpc3BhdGNoQ1BQRXZlbnQoYmVmb3JlY29weUV2ZW50LCBLV1FDbGlwYm9hcmQ6Ok51bWIpOwog
fQogCi1ib29sIEtXUUtIVE1MUGFydDo6bWF5UGFzdGUoKQorYm9vbCBNYWNGcmFtZTo6bWF5UGFz
dGUoKQogewogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChiZWZvcmVwYXN0ZUV2ZW50LCBL
V1FDbGlwYm9hcmQ6Ok51bWIpOwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6dHJ5Q3V0KCkKK2Jv
b2wgTWFjRnJhbWU6OnRyeUN1dCgpCiB7CiAgICAgLy8gTXVzdCBiZSBkb25lIGJlZm9yZSBvbmN1
dCBhZGRzIHR5cGVzIGFuZCBkYXRhIHRvIHRoZSBwYm9hcmQsCiAgICAgLy8gYWxzbyBkb25lIGZv
ciBzZWN1cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgpA
QCAtMjQ2Miw3ICsyNDYzLDcgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OnRyeUN1dCgpCiAgICAgcmV0
dXJuICFkaXNwYXRjaENQUEV2ZW50KGN1dEV2ZW50LCBLV1FDbGlwYm9hcmQ6OldyaXRhYmxlKTsK
IH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OnRyeUNvcHkoKQorYm9vbCBNYWNGcmFtZTo6dHJ5Q29w
eSgpCiB7CiAgICAgLy8gTXVzdCBiZSBkb25lIGJlZm9yZSBvbmNvcHkgYWRkcyB0eXBlcyBhbmQg
ZGF0YSB0byB0aGUgcGJvYXJkLAogICAgIC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0
IGVyYXNlcyBkYXRhIGZyb20gdGhlIGxhc3QgY29weS9wYXN0ZS4KQEAgLTI0NzEsMTIgKzI0NzIs
MTIgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OnRyeUNvcHkoKQogICAgIHJldHVybiAhZGlzcGF0Y2hD
UFBFdmVudChjb3B5RXZlbnQsIEtXUUNsaXBib2FyZDo6V3JpdGFibGUpOwogfQogCi1ib29sIEtX
UUtIVE1MUGFydDo6dHJ5UGFzdGUoKQorYm9vbCBNYWNGcmFtZTo6dHJ5UGFzdGUoKQogewogICAg
IHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChwYXN0ZUV2ZW50LCBLV1FDbGlwYm9hcmQ6OlJlYWRh
YmxlKTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmtodG1sTW91c2VSZWxlYXNlRXZlbnQoTW91
c2VSZWxlYXNlRXZlbnQgKmV2ZW50KQordm9pZCBNYWNGcmFtZTo6a2h0bWxNb3VzZVJlbGVhc2VF
dmVudChNb3VzZVJlbGVhc2VFdmVudCAqZXZlbnQpCiB7CiAgICAgTlNWaWV3ICp2aWV3ID0gbW91
c2VEb3duVmlld0lmU3RpbGxHb29kKCk7CiAgICAgaWYgKCF2aWV3KSB7CkBAIC0yNDg2LDcgKzI0
ODcsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6a2h0bWxNb3VzZVJlbGVhc2VFdmVuCiAgICAgICAg
IC8vIGluIGEgd2luZG93LCB3ZSBqdXN0IGRvbid0IGFjY2VwdEZpcnN0TW91c2UsIGFuZCB0aGUg
d2hvbGUgZG93bi1kcmFnLXVwIHNlcXVlbmNlIGdldHMKICAgICAgICAgLy8gaWdub3JlZCB1cHN0
cmVhbSBvZiB0aGlzIGxheWVyLgogICAgICAgICBpZiAoX2FjdGl2YXRpb25FdmVudE51bWJlciAh
PSBbX2N1cnJlbnRFdmVudCBldmVudE51bWJlcl0pIHsKLSAgICAgICAgICAgIEtIVE1MUGFydDo6
a2h0bWxNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CisgICAgICAgICAgICBGcmFtZTo6a2h0bWxN
b3VzZVJlbGVhc2VFdmVudChldmVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTI0OTgsMjQgKzI0OTksMjQgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OmtodG1sTW91c2VS
ZWxlYXNlRXZlbgogICAgIF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKIH0KIAotdm9p
ZCBLV1FLSFRNTFBhcnQ6OmNsZWFyVGltZXJzKEtIVE1MVmlldyAqdmlldykKK3ZvaWQgTWFjRnJh
bWU6OmNsZWFyVGltZXJzKEtIVE1MVmlldyAqdmlldykKIHsKICAgICBpZiAodmlldykgewogICAg
ICAgICB2aWV3LT51bnNjaGVkdWxlUmVsYXlvdXQoKTsKLSAgICAgICAgaWYgKHZpZXctPnBhcnQo
KSkgewotICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9IHZpZXctPnBhcnQoKS0+
eG1sRG9jSW1wbCgpOworICAgICAgICBpZiAodmlldy0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
RG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9IHZpZXctPmZyYW1lKCktPnhtbERvY0ltcGwoKTsKICAg
ICAgICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVu
dC0+cmVuZGVyZXIoKS0+bGF5ZXIoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+c3VzcGVuZE1hcnF1ZWVzKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAK
LXZvaWQgS1dRS0hUTUxQYXJ0OjpjbGVhclRpbWVycygpCit2b2lkIE1hY0ZyYW1lOjpjbGVhclRp
bWVycygpCiB7CiAgICAgY2xlYXJUaW1lcnMoZC0+bV92aWV3KTsKIH0KIAotYm9vbCBLV1FLSFRN
TFBhcnQ6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShOb2RlSW1wbDo6TW91c2VFdmVudCAm
ZXZlbnQpCitib29sIE1hY0ZyYW1lOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTm9kZUlt
cGw6Ok1vdXNlRXZlbnQgJmV2ZW50KQogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogCkBA
IC0yNTMwLDEwICsyNTMxLDEwIEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpwYXNzU3ViZnJhbWVFdmVu
dFRvU3UKICAgICAgICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldp
ZGdldCAqPihyZW5kZXJlciktPndpZGdldCgpOwogICAgICAgICAgICAgaWYgKCF3aWRnZXQgfHwg
IXdpZGdldC0+aXNLSFRNTFZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBLSFRNTFBhcnQgKnN1YmZyYW1lUGFydCA9IHN0YXRpY19jYXN0PEtIVE1MVmll
dyAqPih3aWRnZXQpLT5wYXJ0KCk7CisgICAgICAgICAgICBGcmFtZSAqc3ViZnJhbWVQYXJ0ID0g
c3RhdGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHdpZGdldCktPmZyYW1lKCk7CiAgICAgICAgICAgICBp
ZiAoIXN1YmZyYW1lUGFydCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBbS1dRKHN1YmZyYW1lUGFydCktPmJyaWRnZSgpIG1vdXNlTW92ZWQ6X2N1cnJlbnRFdmVu
dF07CisgICAgICAgICAgICBbTWFjKHN1YmZyYW1lUGFydCktPmJyaWRnZSgpIG1vdXNlTW92ZWQ6
X2N1cnJlbnRFdmVudF07CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTI1OTEsNyArMjU5Miw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpwYXNzU3ViZnJh
bWVFdmVudFRvU3UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojpw
YXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZUltcGwgKm5vZGUpCitib29sIE1hY0ZyYW1l
OjpwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZUltcGwgKm5vZGUpCiB7CiAgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgICAgIApAQCAtMjYyMSw3ICsyNjIyLDcgQEAgYm9vbCBL
V1FLSFRNTFBhcnQ6OnBhc3NXaGVlbEV2ZW50VG9DaGlsZAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBLV1FLSFRNTFBhcnQ6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCkKK3ZvaWQgTWFj
RnJhbWU6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCkKIHsKICAgICBLSFRNTFZpZXcgKnYgPSBk
LT5tX3ZpZXc7CiAgICAgaWYgKCF2IHx8IF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpIHsKQEAgLTI2
NTYsNyArMjY1Nyw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0Ojptb3VzZURvd24oTlNFdmVudCAqZXYK
ICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6bW91
c2VEcmFnZ2VkKE5TRXZlbnQgKmV2ZW50KQordm9pZCBNYWNGcmFtZTo6bW91c2VEcmFnZ2VkKE5T
RXZlbnQgKmV2ZW50KQogewogICAgIEtIVE1MVmlldyAqdiA9IGQtPm1fdmlldzsKICAgICBpZiAo
IXYgfHwgX3NlbmRpbmdFdmVudFRvU3VidmlldykgewpAQCAtMjY3OCw3ICsyNjc5LDcgQEAgdm9p
ZCBLV1FLSFRNTFBhcnQ6Om1vdXNlRHJhZ2dlZChOU0V2ZW50IAogICAgIEtXUV9VTkJMT0NLX0VY
Q0VQVElPTlM7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojptb3VzZVVwKE5TRXZlbnQgKmV2ZW50
KQordm9pZCBNYWNGcmFtZTo6bW91c2VVcChOU0V2ZW50ICpldmVudCkKIHsKICAgICBLSFRNTFZp
ZXcgKnYgPSBkLT5tX3ZpZXc7CiAgICAgaWYgKCF2IHx8IF9zZW5kaW5nRXZlbnRUb1N1YnZpZXcp
IHsKQEAgLTI3MjQsNyArMjcyNSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0Ojptb3VzZVVwKE5TRXZl
bnQgKmV2ZW4KICBJbiBhZGRpdGlvbiwgd2UgcG9zdCBhIGZha2UgbW91c2VNb3ZlZCB0byBnZXQg
dGhlIGN1cnNvciBpbiBzeW5jIHdpdGggd2hhdGV2ZXIgd2UgaGFwcGVuIHRvIAogIGJlIG92ZXIg
YWZ0ZXIgdGhlIHRyYWNraW5nIGlzIGRvbmUuCiAgKi8KLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZW5k
RmFrZUV2ZW50c0FmdGVyV2lkZ2V0VHJhY2tpbmcoTlNFdmVudCAqaW5pdGlhdGluZ0V2ZW50KQor
dm9pZCBNYWNGcmFtZTo6c2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZlbnQg
KmluaXRpYXRpbmdFdmVudCkKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKIApAQCAtMjc3
Niw3ICsyNzc3LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaQog
ICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojptb3Vz
ZU1vdmVkKE5TRXZlbnQgKmV2ZW50KQordm9pZCBNYWNGcmFtZTo6bW91c2VNb3ZlZChOU0V2ZW50
ICpldmVudCkKIHsKICAgICBLSFRNTFZpZXcgKnYgPSBkLT5tX3ZpZXc7CiAgICAgLy8gUmVqZWN0
IGEgbW91c2UgbW92ZWQgaWYgdGhlIGJ1dHRvbiBpcyBkb3duIC0gc2NyZXdzIHVwIHRyYWNraW5n
IGR1cmluZyBhdXRvc2Nyb2xsCkBAIC0yODAxLDcgKzI4MDIsNyBAQCB2b2lkIEtXUUtIVE1MUGFy
dDo6bW91c2VNb3ZlZChOU0V2ZW50ICplCiB9CiAKIC8vIENhbGxlZCBhcyB3ZSB3YWxrIHVwIHRo
ZSBlbGVtZW50IGNoYWluIGZvciBub2RlcyB3aXRoIENTUyBwcm9wZXJ0eSAta2h0bWwtdXNlci1k
cmFnID09IGF1dG8KLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUoTm9kZUlt
cGwqIG5vZGUsIGludCB4LCBpbnQgeSkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6OnNob3VsZERyYWdB
dXRvTm9kZShOb2RlSW1wbCogbm9kZSwgaW50IHgsIGludCB5KSBjb25zdAogewogICAgIC8vIFdl
IGFzc3VtZSB0aGF0IFdlYktpdCBvbmx5IGNhcmVzIGFib3V0IGRyYWdnaW5nIHRoaW5ncyB0aGF0
IGNhbiBiZSBsZWFmIG5vZGVzICh0ZXh0LCBpbWFnZXMsIHVybHMpLgogICAgIC8vIFRoaXMgc2F2
ZXMgYSBidW5jaCBvZiBleHBlbnNpdmUgY2FsbHMgKGNyZWF0aW5nIFdDIGFuZCBXSyBlbGVtZW50
IGRpY3RzKSBhcyB3ZSB3YWxrIGZhcnRoZXIgdXAKQEAgLTI4MTcsNyArMjgxOCw3IEBAIGJvb2wg
S1dRS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUoTm8KICAgICB9CiB9CiAKLWJvb2wgS1dR
S0hUTUxQYXJ0OjpzZW5kQ29udGV4dE1lbnVFdmVudChOU0V2ZW50ICpldmVudCkKK2Jvb2wgTWFj
RnJhbWU6OnNlbmRDb250ZXh0TWVudUV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIERvY3Vt
ZW50SW1wbCAqZG9jID0gZC0+bV9kb2M7CiAgICAgS0hUTUxWaWV3ICp2ID0gZC0+bV92aWV3OwpA
QCAtMjg2Miw3ICsyODYzLDcgQEAgc3RydWN0IExpc3RJdGVtSW5mbyB7CiAgICAgdW5zaWduZWQg
ZW5kOwogfTsKIAotTlNGaWxlV3JhcHBlciAqS1dRS0hUTUxQYXJ0OjpmaWxlV3JhcHBlckZvckVs
ZW1lbnQoRWxlbWVudEltcGwgKmUpCitOU0ZpbGVXcmFwcGVyICpNYWNGcmFtZTo6ZmlsZVdyYXBw
ZXJGb3JFbGVtZW50KEVsZW1lbnRJbXBsICplKQogewogICAgIE5TRmlsZVdyYXBwZXIgKndyYXBw
ZXIgPSBuaWw7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CkBAIC0yOTIwLDcgKzI5MjEsNyBA
QCBzdGF0aWMgTm9kZUltcGwqIGlzVGV4dEZpcnN0SW5MaXN0SXRlbShOCiAjZGVmaW5lIFNRVUFS
RV9DSEFSIDB4MjVBQQogI2RlZmluZSBDSVJDTEVfQ0hBUiAweDI1RTYKIAotTlNBdHRyaWJ1dGVk
U3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYnV0ZWRTdHJpbmcoTm9kZUltcGwgKl9zdGFydCwg
aW50IHN0YXJ0T2Zmc2V0LCBOb2RlSW1wbCAqZW5kTm9kZSwgaW50IGVuZE9mZnNldCkKK05TQXR0
cmlidXRlZFN0cmluZyAqTWFjRnJhbWU6OmF0dHJpYnV0ZWRTdHJpbmcoTm9kZUltcGwgKl9zdGFy
dCwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlSW1wbCAqZW5kTm9kZSwgaW50IGVuZE9mZnNldCkKIHsK
ICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQ7CiAgICAgS1dRX0JMT0NLX0VY
Q0VQVElPTlM7CkBAIC0zMjA2LDcgKzMyMDcsNyBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtI
VE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBh
bnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCiAgICAgICAgICAgICAgICAgaWYgKGxp
bmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAg
IERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKGhy
ZWZBdHRyKSk7Ci0gICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnRO
b2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnFzdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IE1hYyhsaW5rU3RhcnROb2RlLT5nZXRE
b2N1bWVudCgpLT5mcmFtZSgpKS0+Y29tcGxldGVVUkwoaHJlZi5xc3RyaW5nKCkpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0
TlNVUkwoKTsKICAgICAgICAgICAgICAgICAgICAgTlNSYW5nZSB0ZW1wUmFuZ2UgPSB7IGxpbmtT
dGFydExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24gfTsgLy8gd29y
a2Fyb3VuZCBmb3IgNDIxMzMxNApAQCAtMzM0MSw3ICszMzQyLDcgQEAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgIHJldHVybiBuaWw7CiB9CiAKLVFSZWN0IEtX
UUtIVE1MUGFydDo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0CitRUmVjdCBNYWNGcmFtZTo6c2VsZWN0
aW9uUmVjdCgpIGNvbnN0CiB7CiAgICAgaWYoIXhtbERvY0ltcGwoKSl7CiAgICAgICAgIHJldHVy
biBRUmVjdCgpOwpAQCAtMzM1Niw3ICszMzU3LDcgQEAgUVJlY3QgS1dRS0hUTUxQYXJ0OjpzZWxl
Y3Rpb25SZWN0KCkgY29ucwogfQogCiAvLyByZXR1cm5zIE5TUmVjdCBiZWNhdXNlIGdvaW5nIHRo
cm91Z2ggUVJlY3Qgd291bGQgdHJ1bmNhdGUgYW55IGZsb2F0cwotTlNSZWN0IEtXUUtIVE1MUGFy
dDo6dmlzaWJsZVNlbGVjdGlvblJlY3QoKSBjb25zdAorTlNSZWN0IE1hY0ZyYW1lOjp2aXNpYmxl
U2VsZWN0aW9uUmVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFkLT5tX3ZpZXcpIHsKICAgICAgICAg
cmV0dXJuIE5TWmVyb1JlY3Q7CkBAIC0zMzY4LDcgKzMzNjksNyBAQCBOU1JlY3QgS1dRS0hUTUxQ
YXJ0Ojp2aXNpYmxlU2VsZWN0aW9uUmVjCiAgICAgcmV0dXJuIE5TSW50ZXJzZWN0aW9uUmVjdChz
ZWxlY3Rpb25SZWN0KCksIFtkb2N1bWVudFZpZXcgdmlzaWJsZVJlY3RdKTsgICAgIAogfQogCi12
b2lkIEtXUUtIVE1MUGFydDo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpIGNvbnN0Cit2
b2lkIE1hY0ZyYW1lOjpjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCkgY29uc3QKIHsKICAg
ICBRUmVjdCByZWN0OwogICAgIApAQCAtMzM5NSw3ICszMzk2LDcgQEAgdm9pZCBLV1FLSFRNTFBh
cnQ6OmNlbnRlclNlbGVjdGlvbkluVmlzaQogICAgIH0KIH0KIAotTlNJbWFnZSAqS1dRS0hUTUxQ
YXJ0OjppbWFnZUZyb21SZWN0KE5TUmVjdCByZWN0KSBjb25zdAorTlNJbWFnZSAqTWFjRnJhbWU6
OmltYWdlRnJvbVJlY3QoTlNSZWN0IHJlY3QpIGNvbnN0CiB7CiAgICAgTlNWaWV3ICp2aWV3ID0g
ZC0+bV92aWV3LT5nZXREb2N1bWVudFZpZXcoKTsKICAgICBpZiAoIXZpZXcpIHsKQEAgLTM0MzAs
NyArMzQzMSw3IEBAIE5TSW1hZ2UgKktXUUtIVE1MUGFydDo6aW1hZ2VGcm9tUmVjdChOU1IKICAg
ICByZXR1cm4gbmlsOwogfQogCi1OU0ltYWdlICpLV1FLSFRNTFBhcnQ6OnNlbGVjdGlvbkltYWdl
KCkgY29uc3QKK05TSW1hZ2UgKk1hY0ZyYW1lOjpzZWxlY3Rpb25JbWFnZSgpIGNvbnN0CiB7CiAg
ICAgX2RyYXdTZWxlY3Rpb25Pbmx5ID0gdHJ1ZTsgIC8vIGludm9rZSBzcGVjaWFsIGRyYXdpbmcg
bW9kZQogICAgIE5TSW1hZ2UgKnJlc3VsdCA9IGltYWdlRnJvbVJlY3QodmlzaWJsZVNlbGVjdGlv
blJlY3QoKSk7CkBAIC0zNDM4LDcgKzM0MzksNyBAQCBOU0ltYWdlICpLV1FLSFRNTFBhcnQ6OnNl
bGVjdGlvbkltYWdlKCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTlNJbWFnZSAqS1dRS0hU
TUxQYXJ0OjpzbmFwc2hvdERyYWdJbWFnZShOb2RlSW1wbCAqbm9kZSwgTlNSZWN0ICppbWFnZVJl
Y3QsIE5TUmVjdCAqZWxlbWVudFJlY3QpIGNvbnN0CitOU0ltYWdlICpNYWNGcmFtZTo6c25hcHNo
b3REcmFnSW1hZ2UoTm9kZUltcGwgKm5vZGUsIE5TUmVjdCAqaW1hZ2VSZWN0LCBOU1JlY3QgKmVs
ZW1lbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpIHsKQEAgLTM0NjYsNyArMzQ2Nyw3IEBAIE5T
SW1hZ2UgKktXUUtIVE1MUGFydDo6c25hcHNob3REcmFnSW1hZ2UKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1SZW5kZXJTdHlsZSAqS1dRS0hUTUxQYXJ0OjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KE5vZGVJbXBsICombm9kZVRvUmVtb3ZlKSBjb25zdAorUmVuZGVyU3R5bGUgKk1hY0ZyYW1lOjpz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGVJbXBsICombm9kZVRvUmVtb3ZlKSBjb25zdAogewog
ICAgIG5vZGVUb1JlbW92ZSA9IDA7CiAKQEAgLTM1MDcsNyArMzUwOCw3IEBAIFJlbmRlclN0eWxl
ICpLV1FLSFRNTFBhcnQ6OnN0eWxlRm9yU2VsZWMKICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5y
ZW5kZXJlcigpLT5zdHlsZSgpOwogfQogCi1OU0ZvbnQgKktXUUtIVE1MUGFydDo6Zm9udEZvclNl
bGVjdGlvbihib29sICpoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorTlNGb250ICpNYWNGcmFtZTo6
Zm9udEZvclNlbGVjdGlvbihib29sICpoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGlm
IChoYXNNdWx0aXBsZUZvbnRzKQogICAgICAgICAqaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwpA
QCAtMzU1Nyw3ICszNTU4LDcgQEAgTlNGb250ICpLV1FLSFRNTFBhcnQ6OmZvbnRGb3JTZWxlY3Rp
b24oYgogICAgIHJldHVybiBmb250OwogfQogCi1OU0RpY3Rpb25hcnkgKktXUUtIVE1MUGFydDo6
Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CitOU0RpY3Rpb25hcnkgKk1h
Y0ZyYW1lOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBO
b2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwogICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHN0eWxlRm9y
U2VsZWN0aW9uU3RhcnQobm9kZVRvUmVtb3ZlKTsKQEAgLTM2MjEsNyArMzYyMiw3IEBAIE5TRGlj
dGlvbmFyeSAqS1dRS0hUTUxQYXJ0Ojpmb250QXR0cmlidXQKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1OU1dyaXRpbmdEaXJlY3Rpb24gS1dRS0hUTUxQYXJ0OjpiYXNlV3JpdGluZ0RpcmVjdGlv
bkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK05TV3JpdGluZ0RpcmVjdGlvbiBNYWNGcmFtZTo6
YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTlNX
cml0aW5nRGlyZWN0aW9uIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Owog
CkBAIC0zNjQ1LDEyICszNjQ2LDEyIEBAIE5TV3JpdGluZ0RpcmVjdGlvbiBLV1FLSFRNTFBhcnQ6
OmJhc2VXcmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1LV1FXaW5kb3dXaWRnZXQgKktXUUtI
VE1MUGFydDo6dG9wTGV2ZWxXaWRnZXQoKQorS1dRV2luZG93V2lkZ2V0ICpNYWNGcmFtZTo6dG9w
TGV2ZWxXaWRnZXQoKQogewogICAgIHJldHVybiBfd2luZG93V2lkZ2V0OwogfQogCi12b2lkIEtX
UUtIVE1MUGFydDo6dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpCit2b2lkIE1hY0ZyYW1lOjp0b2tl
bml6ZXJQcm9jZXNzZWREYXRhKCkKIHsKICAgICBpZiAoZC0+bV9kb2MpIHsKICAgICAgICAgY2hl
Y2tDb21wbGV0ZWQoKTsKQEAgLTM2NTgsMjcgKzM2NTksMjcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6
OnRva2VuaXplclByb2Nlc3NlZERhdAogICAgIFtfYnJpZGdlIHRva2VuaXplclByb2Nlc3NlZERh
dGFdOwogfQogCi1pbnQgS1dRS0hUTUxQYXJ0OjpzZWxlY3Rpb25TdGFydE9mZnNldCgpIGNvbnN0
CitpbnQgTWFjRnJhbWU6OnNlbGVjdGlvblN0YXJ0T2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5vZmZzZXQoKTsKIH0KIAotaW50IEtXUUtIVE1MUGFy
dDo6c2VsZWN0aW9uRW5kT2Zmc2V0KCkgY29uc3QKK2ludCBNYWNGcmFtZTo6c2VsZWN0aW9uRW5k
T2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9zZWxlY3Rpb24uZW5kKCkub2Zmc2V0
KCk7CiB9CiAKLU5vZGVJbXBsICpLV1FLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QK
K05vZGVJbXBsICpNYWNGcmFtZTo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIHJldHVy
biBkLT5tX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsKIH0KIAotTm9kZUltcGwgKktXUUtIVE1M
UGFydDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKK05vZGVJbXBsICpNYWNGcmFtZTo6c2VsZWN0aW9u
RW5kKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpOwog
fQogCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0QnJpZGdlKFdlYkNvcmVCcmlkZ2UgKnApCit2b2lk
IE1hY0ZyYW1lOjpzZXRCcmlkZ2UoV2ViQ29yZUJyaWRnZSAqcCkKIHsgCiAgICAgaWYgKF9icmlk
Z2UgIT0gcCkgewogCWRlbGV0ZSBfd2luZG93V2lkZ2V0OwpAQCAtMzY4Nyw3ICszNjg4LDcgQEAg
dm9pZCBLV1FLSFRNTFBhcnQ6OnNldEJyaWRnZShXZWJDb3JlQnJpZAogICAgIF93aW5kb3dXaWRn
ZXQgPSBuZXcgS1dRV2luZG93V2lkZ2V0KF9icmlkZ2UpOwogfQogCi1RU3RyaW5nIEtXUUtIVE1M
UGFydDo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAorUVN0cmluZyBNYWNGcmFtZTo6b3ZlcnJp
ZGVNZWRpYVR5cGUoKSBjb25zdAogewogICAgIE5TU3RyaW5nICpvdmVycmlkZVR5cGUgPSBbX2Jy
aWRnZSBvdmVycmlkZU1lZGlhVHlwZV07CiAgICAgaWYgKG92ZXJyaWRlVHlwZSkKQEAgLTM2OTUs
MTQgKzM2OTYsMTQgQEAgUVN0cmluZyBLV1FLSFRNTFBhcnQ6Om92ZXJyaWRlTWVkaWFUeXBlKAog
ICAgIHJldHVybiBRU3RyaW5nKCk7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRNZWRpYVR5
cGUoY29uc3QgUVN0cmluZyAmdHlwZSkKK3ZvaWQgTWFjRnJhbWU6OnNldE1lZGlhVHlwZShjb25z
dCBRU3RyaW5nICZ0eXBlKQogewogICAgIGlmIChkLT5tX3ZpZXcpIHsKICAgICAgICAgZC0+bV92
aWV3LT5zZXRNZWRpYVR5cGUodHlwZSk7CiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQordm9pZCBNYWNGcmFtZTo6c2V0U2VsZWN0aW9uRnJvbU5v
bmUoKQogewogICAgIC8vIFB1dCB0aGUgY2FyZXQgc29tZXBsYWNlIGlmIHRoZSBzZWxlY3Rpb24g
aXMgZW1wdHkgYW5kIHRoZSBwYXJ0IGlzIGVkaXRhYmxlLgogICAgIC8vIFRoaXMgaGFzIHRoZSBl
ZmZlY3Qgb2YgZmxhc2hpbmcgdGhlIGNhcmV0IGluIGEgY29udGVudEVkaXRhYmxlIHZpZXcgYXV0
b21hdGljYWxseSAKQEAgLTM3MjIsNyArMzcyMyw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRT
ZWxlY3Rpb25Gcm9tTm9uZSgKICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpzZXREaXNw
bGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMoYm9vbCBmbGFnKQordm9pZCBNYWNGcmFtZTo6c2V0RGlz
cGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKGJvb2wgZmxhZykKIHsKICAgICBpZiAoZC0+bV9pc0Zv
Y3VzZWQgPT0gZmxhZykKICAgICAgICAgcmV0dXJuOwpAQCAtMzc2NiwxMiArMzc2NywxMiBAQCB2
b2lkIEtXUUtIVE1MUGFydDo6c2V0RGlzcGxheXNXaXRoRm9jdXNBCiAgICAgfQogfQogCi1ib29s
IEtXUUtIVE1MUGFydDo6ZGlzcGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKCkgY29uc3QKK2Jvb2wg
TWFjRnJhbWU6OmRpc3BsYXlzV2l0aEZvY3VzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGQtPm1faXNGb2N1c2VkOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6c2V0V2luZG93SGFz
Rm9jdXMoYm9vbCBmbGFnKQordm9pZCBNYWNGcmFtZTo6c2V0V2luZG93SGFzRm9jdXMoYm9vbCBm
bGFnKQogewogICAgIGlmIChtX3dpbmRvd0hhc0ZvY3VzID09IGZsYWcpCiAgICAgICAgIHJldHVy
bjsKQEAgLTM3ODIsNyArMzc4Myw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRXaW5kb3dIYXNG
b2N1cyhib28KICAgICAgICAgICAgIGJvZHktPmRpc3BhdGNoV2luZG93RXZlbnQoZmxhZyA/IGZv
Y3VzRXZlbnQgOiBibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CiAKLVFDaGFyIEtXUUtIVE1M
UGFydDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0CitRQ2hhciBNYWNGcmFtZTo6
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnRJbXBsICpk
b2MgPSB4bWxEb2NJbXBsKCk7CiAgICAgaWYgKCFkb2MpIHsKQEAgLTM3OTksNyArMzgwMCw3IEBA
IFFDaGFyIEtXUUtIVE1MUGFydDo6YmFja3NsYXNoQXNDdXJyZW5jeVMKICAgICByZXR1cm4gY29k
ZWMtPmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKTsKIH0KIAotTlNDb2xvciAqS1dRS0hUTUxQ
YXJ0Ojpib2R5QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK05TQ29sb3IgKk1hY0ZyYW1lOjpib2R5
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBpZiAoeG1sRG9jSW1wbCgpICYmIHhtbERv
Y0ltcGwoKS0+Ym9keSgpICYmIHhtbERvY0ltcGwoKS0+Ym9keSgpLT5yZW5kZXJlcigpKSB7CiAg
ICAgICAgIFFDb2xvciBiZ0NvbG9yID0geG1sRG9jSW1wbCgpLT5ib2R5KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzgxMCw3ICszODExLDcgQEAgTlNDb2xv
ciAqS1dRS0hUTUxQYXJ0Ojpib2R5QmFja2dyb3VuZENvbAogICAgIHJldHVybiBuaWw7CiB9CiAK
LVdlYkNvcmVLZXlib2FyZFVJTW9kZSBLV1FLSFRNTFBhcnQ6OmtleWJvYXJkVUlNb2RlKCkgY29u
c3QKK1dlYkNvcmVLZXlib2FyZFVJTW9kZSBNYWNGcmFtZTo6a2V5Ym9hcmRVSU1vZGUoKSBjb25z
dAogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwogICAgIHJldHVybiBbX2JyaWRnZSBrZXli
b2FyZFVJTW9kZV07CkBAIC0zODE5LDQzICszODIwLDQzIEBAIFdlYkNvcmVLZXlib2FyZFVJTW9k
ZSBLV1FLSFRNTFBhcnQ6OmtleWIKICAgICByZXR1cm4gV2ViQ29yZUtleWJvYXJkQWNjZXNzRGVm
YXVsdDsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnNldE5hbWUoY29uc3QgUVN0cmluZyAmbmFt
ZSkKK3ZvaWQgTWFjRnJhbWU6OnNldE5hbWUoY29uc3QgUVN0cmluZyAmbmFtZSkKIHsKICAgICBR
U3RyaW5nIG4gPSBuYW1lOwogCi0gICAgS1dRS0hUTUxQYXJ0ICpwYXJlbnQgPSBLV1EocGFyZW50
UGFydCgpKTsKKyAgICBNYWNGcmFtZSAqcGFyZW50ID0gTWFjKHBhcmVudEZyYW1lKCkpOwogCiAg
ICAgLy8gRklYTUU6IGlzIHRoZSBibGFuayBydWxlIG5lZWRlZCBvciB1c2VmdWw/CiAgICAgaWYg
KHBhcmVudCAmJiAobmFtZS5pc0VtcHR5KCkgfHwgcGFyZW50LT5mcmFtZUV4aXN0cyhuYW1lKSB8
fCBuYW1lID09ICJfYmxhbmsiKSkKIAluID0gcGFyZW50LT5yZXF1ZXN0RnJhbWVOYW1lKCk7CiAK
LSAgICBLSFRNTFBhcnQ6OnNldE5hbWUobik7CisgICAgRnJhbWU6OnNldE5hbWUobik7CiB9CiAK
LXZvaWQgS1dRS0hUTUxQYXJ0OjpkaWRUZWxsQnJpZGdlQWJvdXRMb2FkKGNvbnN0IFFTdHJpbmcg
JnVybFN0cmluZykKK3ZvaWQgTWFjRnJhbWU6OmRpZFRlbGxCcmlkZ2VBYm91dExvYWQoY29uc3Qg
UVN0cmluZyAmdXJsU3RyaW5nKQogewogICAgIHN0YXRpYyBjaGFyIGR1bW15OwogICAgIHVybHNC
cmlkZ2VLbm93c0Fib3V0Lmluc2VydCh1cmxTdHJpbmcsICZkdW1teSk7CiB9CiAKLWJvb2wgS1dR
S0hUTUxQYXJ0OjpoYXZlVG9sZEJyaWRnZUFib3V0TG9hZChjb25zdCBRU3RyaW5nICZ1cmxTdHJp
bmcpCitib29sIE1hY0ZyYW1lOjpoYXZlVG9sZEJyaWRnZUFib3V0TG9hZChjb25zdCBRU3RyaW5n
ICZ1cmxTdHJpbmcpCiB7CiAgICAgcmV0dXJuIHVybHNCcmlkZ2VLbm93c0Fib3V0LmZpbmQodXJs
U3RyaW5nKSAhPSAwOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6Y2xlYXIoKQordm9pZCBNYWNG
cmFtZTo6Y2xlYXIoKQogewogICAgIHVybHNCcmlkZ2VLbm93c0Fib3V0LmNsZWFyKCk7CiAgICAg
c2V0TWFya2VkVGV4dFJhbmdlKDAsIG5pbCwgbmlsKTsKLSAgICBLSFRNTFBhcnQ6OmNsZWFyKCk7
CisgICAgRnJhbWU6OmNsZWFyKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJ0OjpwcmludCgpCit2b2lk
IEZyYW1lOjpwcmludCgpCiB7Ci0gICAgW0tXUSh0aGlzKS0+X2JyaWRnZSBwcmludF07CisgICAg
W01hYyh0aGlzKS0+X2JyaWRnZSBwcmludF07CiB9CiAKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNl
ICpLV1FLSFRNTFBhcnQ6OmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFFXaWRnZXQgKndpZGdl
dCkKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlICpNYWNGcmFtZTo6Z2V0QXBwbGV0SW5zdGFuY2VG
b3JXaWRnZXQoUVdpZGdldCAqd2lkZ2V0KQogewogICAgIE5TVmlldyAqYVZpZXcgPSB3aWRnZXQt
PmdldFZpZXcoKTsKICAgICBpZiAoIWFWaWV3KQpAQCAtMzkwMywyMiArMzkwNCwyMiBAQCBzdGF0
aWMgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldEluc3RhCiAgICAgcmV0dXJuIDA7CiB9CiAK
LUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpLV1FLSFRNTFBhcnQ6OmdldEVtYmVkSW5zdGFuY2VG
b3JXaWRnZXQoUVdpZGdldCAqd2lkZ2V0KQorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKk1hY0Zy
YW1lOjpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFFXaWRnZXQgKndpZGdldCkKIHsKICAgICBy
ZXR1cm4gZ2V0SW5zdGFuY2VGb3JWaWV3KHdpZGdldC0+Z2V0VmlldygpKTsKIH0KIAotS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UgKktXUUtIVE1MUGFydDo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRn
ZXQoUVdpZGdldCAqd2lkZ2V0KQorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKk1hY0ZyYW1lOjpn
ZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChRV2lkZ2V0ICp3aWRnZXQpCiB7CiAgICAgcmV0dXJu
IGdldEluc3RhbmNlRm9yVmlldyh3aWRnZXQtPmdldFZpZXcoKSk7CiB9CiAKLXZvaWQgS1dRS0hU
TUxQYXJ0OjphZGRQbHVnaW5Sb290T2JqZWN0KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QgKnJvb3QpCit2b2lkIE1hY0ZyYW1lOjphZGRQbHVnaW5Sb290T2JqZWN0KGNvbnN0IEtKUzo6
QmluZGluZ3M6OlJvb3RPYmplY3QgKnJvb3QpCiB7CiAgICAgcm9vdE9iamVjdHMuYXBwZW5kIChy
b290KTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmNsZWFudXBQbHVnaW5Sb290T2JqZWN0cygp
Cit2b2lkIE1hY0ZyYW1lOjpjbGVhbnVwUGx1Z2luUm9vdE9iamVjdHMoKQogewogICAgIEpTTG9j
ayBsb2NrOwogCkBAIC0zOTI5LDcgKzM5MzAsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6Y2xlYW51
cFBsdWdpblJvb3RPYmplCiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cmVnaXN0ZXJD
b21tYW5kRm9yVW5kb09yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kLCBib29sIGlzUmVk
bykKK3ZvaWQgTWFjRnJhbWU6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG9PclJlZG8oY29uc3QgRWRp
dENvbW1hbmRQdHIgJmNtZCwgYm9vbCBpc1JlZG8pCiB7CiAgICAgQVNTRVJUKGNtZC5nZXQoKSk7
CiAgICAgS1dRRWRpdENvbW1hbmQgKmt3cSA9IFtLV1FFZGl0Q29tbWFuZCBjb21tYW5kV2l0aEVk
aXRDb21tYW5kOmNtZC5nZXQoKV07CkBAIC0zOTQyLDE3ICszOTQzLDE3IEBAIHZvaWQgS1dRS0hU
TUxQYXJ0OjpyZWdpc3RlckNvbW1hbmRGb3JVbmQKICAgICBfaGF2ZVVuZG9SZWRvT3BlcmF0aW9u
cyA9IFlFUzsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8o
Y29uc3QgRWRpdENvbW1hbmRQdHIgJmNtZCkKK3ZvaWQgTWFjRnJhbWU6OnJlZ2lzdGVyQ29tbWFu
ZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHIgJmNtZCkKIHsKICAgICByZWdpc3RlckNvbW1h
bmRGb3JVbmRvT3JSZWRvKGNtZCwgTk8pOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cmVnaXN0
ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kKQordm9pZCBNYWNGcmFt
ZTo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kKQogewog
ICAgIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG9PclJlZG8oY21kLCBZRVMpOwogfQogCi12b2lkIEtX
UUtIVE1MUGFydDo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQordm9pZCBNYWNGcmFtZTo6Y2xl
YXJVbmRvUmVkb09wZXJhdGlvbnMoKQogewogICAgIGlmIChfaGF2ZVVuZG9SZWRvT3BlcmF0aW9u
cykgewogCVtbX2JyaWRnZSB1bmRvTWFuYWdlcl0gcmVtb3ZlQWxsQWN0aW9uc1dpdGhUYXJnZXQ6
X2JyaWRnZV07CkBAIC0zOTYwLDY2ICszOTYxLDY2IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpjbGVh
clVuZG9SZWRvT3BlcmF0aW8KICAgICB9CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZVVu
ZG9Db21tYW5kKCkKK3ZvaWQgTWFjRnJhbWU6Omlzc3VlVW5kb0NvbW1hbmQoKQogewogICAgIGlm
IChjYW5VbmRvKCkpCiAgICAgICAgIFtbX2JyaWRnZSB1bmRvTWFuYWdlcl0gdW5kb107CiB9CiAK
LXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZVJlZG9Db21tYW5kKCkKK3ZvaWQgTWFjRnJhbWU6Omlz
c3VlUmVkb0NvbW1hbmQoKQogewogICAgIGlmIChjYW5SZWRvKCkpCiAgICAgICAgIFtbX2JyaWRn
ZSB1bmRvTWFuYWdlcl0gcmVkb107CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZUN1dENv
bW1hbmQoKQordm9pZCBNYWNGcmFtZTo6aXNzdWVDdXRDb21tYW5kKCkKIHsKICAgICBbX2JyaWRn
ZSBpc3N1ZUN1dENvbW1hbmRdOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6aXNzdWVDb3B5Q29t
bWFuZCgpCit2b2lkIE1hY0ZyYW1lOjppc3N1ZUNvcHlDb21tYW5kKCkKIHsKICAgICBbX2JyaWRn
ZSBpc3N1ZUNvcHlDb21tYW5kXTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6Omlzc3VlUGFzdGVD
b21tYW5kKCkKK3ZvaWQgTWFjRnJhbWU6Omlzc3VlUGFzdGVDb21tYW5kKCkKIHsKICAgICBbX2Jy
aWRnZSBpc3N1ZVBhc3RlQ29tbWFuZF07CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojppc3N1ZVBh
c3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKQordm9pZCBNYWNGcmFtZTo6aXNzdWVQYXN0ZUFuZE1h
dGNoU3R5bGVDb21tYW5kKCkKIHsKICAgICBbX2JyaWRnZSBpc3N1ZVBhc3RlQW5kTWF0Y2hTdHls
ZUNvbW1hbmRdOwogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6aXNzdWVUcmFuc3Bvc2VDb21tYW5k
KCkKK3ZvaWQgTWFjRnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpCiB7CiAgICAgW19icmlk
Z2UgaXNzdWVUcmFuc3Bvc2VDb21tYW5kXTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OmNhblVuZG8o
KSBjb25zdAorYm9vbCBGcmFtZTo6Y2FuVW5kbygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbS1dR
KHRoaXMpLT5fYnJpZGdlIHVuZG9NYW5hZ2VyXSBjYW5VbmRvXTsKKyAgICByZXR1cm4gW1tNYWMo
dGhpcyktPl9icmlkZ2UgdW5kb01hbmFnZXJdIGNhblVuZG9dOwogfQogCi1ib29sIEtIVE1MUGFy
dDo6Y2FuUmVkbygpIGNvbnN0Citib29sIEZyYW1lOjpjYW5SZWRvKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gW1tLV1EodGhpcyktPl9icmlkZ2UgdW5kb01hbmFnZXJdIGNhblJlZG9dOworICAgIHJl
dHVybiBbW01hYyh0aGlzKS0+X2JyaWRnZSB1bmRvTWFuYWdlcl0gY2FuUmVkb107CiB9CiAKLWJv
b2wgS0hUTUxQYXJ0OjpjYW5QYXN0ZSgpIGNvbnN0Citib29sIEZyYW1lOjpjYW5QYXN0ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFtLV1EodGhpcyktPl9icmlkZ2UgY2FuUGFzdGVdOworICAgIHJl
dHVybiBbTWFjKHRoaXMpLT5fYnJpZGdlIGNhblBhc3RlXTsKIH0KIAotdm9pZCBLV1FLSFRNTFBh
cnQ6Om1hcmtNaXNzcGVsbGluZ3NJbkFkamFjZW50V29yZHMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwKQordm9pZCBNYWNGcmFtZTo6bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnApCiB7CiAgICAgaWYgKCFbX2JyaWRnZSBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZF0pCiAgICAgICAgIHJldHVybjsKICAgICBtYXJrTWlzc3BlbGxp
bmdzKFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSkpOwogfQogCi12b2lkIEtX
UUtIVE1MUGFydDo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZz
ZWxlY3Rpb24pCit2b2lkIE1hY0ZyYW1lOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlv
bkNvbnRyb2xsZXIgJnNlbGVjdGlvbikKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgog
ICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KQEAgLTQwNzcsNyArNDA3
OCw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjptYXJrTWlzc3BlbGxpbmdzKGNvbnMKICAgICB9CiB9
CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKK3ZvaWQg
TWFjRnJhbWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJv
bGxlciAmb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQogewogICAgIGlmICh4bWxEb2NJ
bXBsKCkpIHsKICAgICAgICAgaWYgKFtfYnJpZGdlIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkXSkgewpAQCAtNDExOSw3ICs0MTIwLDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlYwogICAgIFtfYnJpZGdlIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb25d
OwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxl
ciAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKSBjb25zdAorYm9vbCBNYWNGcmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0
IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0aW9uQ29udHJv
bGxlciAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSBjb25zdAogewogICAgIHJldHVybiBbX2JyaWRnZSBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpvbGRTZWxlY3Rpb24udG9SYW5n
ZSgpLmdldCgpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RPTVJh
bmdlOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpuZXdTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgp
XQpAQCAtNDEyNyw3ICs0MTI4LDcgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNl
bGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsU2VsZWN0aW5n
OnN0aWxsU2VsZWN0aW5nXTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5n
ZWRDb250ZW50cygpCit2b2lkIE1hY0ZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQog
ewogI2lmIEFQUExFX0NIQU5HRVMKICAgICBpZiAoS1dRQWNjT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkpIHsKQEAgLTQxMzcsMjYgKzQxMzgsMjYgQEAgdm9pZCBLV1FLSFRNTFBh
cnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZQogICAgIFtfYnJpZGdlIHJlc3BvbmRUb0NoYW5nZWRD
b250ZW50c107CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNv
bnN0Citib29sIE1hY0ZyYW1lOjppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIEtIVE1MUGFydDo6aXNDb250ZW50RWRpdGFibGUoKSB8fCBbX2JyaWRnZSBpc0VkaXRhYmxl
XTsKKyAgICByZXR1cm4gRnJhbWU6OmlzQ29udGVudEVkaXRhYmxlKCkgfHwgW19icmlkZ2UgaXNF
ZGl0YWJsZV07CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29u
c3QgUmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6OnNob3VsZEJlZ2luRWRp
dGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25zdAogewogICAgIEFTU0VSVChyYW5nZSk7
CiAgICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZEJlZ2luRWRpdGluZzpbRE9NUmFuZ2UgX3Jhbmdl
V2l0aEltcGw6Y29uc3RfY2FzdDxSYW5nZUltcGwgKj4ocmFuZ2UpXV07CiB9CiAKLWJvb2wgS1dR
S0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpIGNvbnN0
Citib29sIE1hY0ZyYW1lOjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2Up
IGNvbnN0CiB7CiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxk
RW5kRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6Y29uc3RfY2FzdDxSYW5nZUltcGwg
Kj4ocmFuZ2UpXV07CiB9CiAKLXN0YXRpYyBRVmFsdWVMaXN0PEtXUUtIVE1MUGFydDo6TWFya2Vk
VGV4dFVuZGVybGluZT4gY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMoY29uc3QgUmFuZ2VJ
bXBsICptYXJrZWRUZXh0UmFuZ2UsIE5TQXJyYXkgKmF0dHJpYnV0ZXMsIE5TQXJyYXkgKnJhbmdl
cykKK3N0YXRpYyBRVmFsdWVMaXN0PE1hY0ZyYW1lOjpNYXJrZWRUZXh0VW5kZXJsaW5lPiBjb252
ZXJ0QXR0cmlidXRlc1RvVW5kZXJsaW5lcyhjb25zdCBSYW5nZUltcGwgKm1hcmtlZFRleHRSYW5n
ZSwgTlNBcnJheSAqYXR0cmlidXRlcywgTlNBcnJheSAqcmFuZ2VzKQogewotICAgIFFWYWx1ZUxp
c3Q8S1dRS0hUTUxQYXJ0OjpNYXJrZWRUZXh0VW5kZXJsaW5lPiByZXN1bHQ7CisgICAgUVZhbHVl
TGlzdDxNYWNGcmFtZTo6TWFya2VkVGV4dFVuZGVybGluZT4gcmVzdWx0OwogCiAgICAgaW50IGV4
Y2VwdGlvbiA9IDA7CiAgICAgaW50IGJhc2VPZmZzZXQgPSBtYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0
T2Zmc2V0KGV4Y2VwdGlvbik7CkBAIC00MTc5LDcgKzQxODAsNyBAQCBzdGF0aWMgUVZhbHVlTGlz
dDxLV1FLSFRNTFBhcnQ6Ok1hcmtlZFRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGludCkoMjU1ICogW2RldmljZUNvbG9yIGFscGhhQ29tcG9uZW50XSkpKTsKICAgICAgICAg
fQogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoS1dRS0hUTUxQYXJ0OjpNYXJrZWRUZXh0VW5kZXJs
aW5lKHJhbmdlLmxvY2F0aW9uICsgYmFzZU9mZnNldCwgCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
TWFjRnJhbWU6Ok1hcmtlZFRleHRVbmRlcmxpbmUocmFuZ2UubG9jYXRpb24gKyBiYXNlT2Zmc2V0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZ2UubG9jYXRpb24gKyBiYXNlT2Zmc2V0ICsgcmFuZ2UubGVuZ3RoLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcUNvbG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
c3R5bGUgaW50VmFsdWVdID4gMSkpOwpAQCAtNDE4OCw3ICs0MTg5LDcgQEAgc3RhdGljIFFWYWx1
ZUxpc3Q8S1dRS0hUTUxQYXJ0OjpNYXJrZWRUZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgS1dRS0hUTUxQYXJ0OjpzZXRNYXJrZWRUZXh0UmFuZ2UoY29uc3QgUmFuZ2VJbXBsICpyYW5n
ZSwgTlNBcnJheSAqYXR0cmlidXRlcywgTlNBcnJheSAqcmFuZ2VzKQordm9pZCBNYWNGcmFtZTo6
c2V0TWFya2VkVGV4dFJhbmdlKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UsIE5TQXJyYXkgKmF0dHJp
YnV0ZXMsIE5TQXJyYXkgKnJhbmdlcykKIHsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKIApAQCAt
NDIxOCwzNCArNDIxOSwzNCBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c2V0TWFya2VkVGV4dFJhbmdl
KGNvCiAgICAgfQogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6bWFya2VkVGV4dFVzZXNVbmRlcmxp
bmVzKCkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6Om1hcmtlZFRleHRVc2VzVW5kZXJsaW5lcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzOwogfQogCi1RVmFs
dWVMaXN0PEtXUUtIVE1MUGFydDo6TWFya2VkVGV4dFVuZGVybGluZT4gS1dRS0hUTUxQYXJ0Ojpt
YXJrZWRUZXh0VW5kZXJsaW5lcygpIGNvbnN0CitRVmFsdWVMaXN0PE1hY0ZyYW1lOjpNYXJrZWRU
ZXh0VW5kZXJsaW5lPiBNYWNGcmFtZTo6bWFya2VkVGV4dFVuZGVybGluZXMoKSBjb25zdAogewog
ICAgIHJldHVybiBtX21hcmtlZFRleHRVbmRlcmxpbmVzOwogfQogCi1ib29sIEtXUUtIVE1MUGFy
dDo6Y2FuR29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6
OmNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtf
YnJpZGdlIGNhbkdvQmFja09yRm9yd2FyZDpkaXN0YW5jZV07CiB9CiAKLXZvaWQgS1dRS0hUTUxQ
YXJ0OjpwcmVwYXJlRm9yVXNlckFjdGlvbigpCit2b2lkIE1hY0ZyYW1lOjpwcmVwYXJlRm9yVXNl
ckFjdGlvbigpCiB7CiAgICAgLy8gUmVzZXQgdGhlIG11bHRpcGxlIGZvcm0gc3VibWlzc2lvbiBw
cm90ZWN0aW9uIGNvZGUuCiAgICAgLy8gV2UnbGwgbGV0IHlvdSBzdWJtaXQgdGhlIHNhbWUgZm9y
bSB0d2ljZSBpZiB5b3UgZG8gdHdvIHNlcGFyYXRlIHVzZXIgYWN0aW9ucy4KICAgICBfc3VibWl0
dGVkRm9ybVVSTCA9IEtVUkwoKTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmRpZEZpcnN0TGF5
b3V0KCkKK3ZvaWQgTWFjRnJhbWU6OmRpZEZpcnN0TGF5b3V0KCkKIHsKICAgICBbX2JyaWRnZSBk
aWRGaXJzdExheW91dF07CiB9CiAKLU5TTXV0YWJsZURpY3Rpb25hcnkgKktXUUtIVE1MUGFydDo6
ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnkoKQorTlNNdXRhYmxlRGljdGlvbmFyeSAqTWFjRnJh
bWU6OmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCkKIHsKICAgICBEb2N1bWVudEltcGwgKmRv
YyA9IHhtbERvY0ltcGwoKTsKICAgICBpZiAoIWRvYykgewpAQCAtNDI5MiwzMyArNDI5MywzMyBA
QCBOU011dGFibGVEaWN0aW9uYXJ5ICpLV1FLSFRNTFBhcnQ6OmRhc2hiCiAgICAgcmV0dXJuIHdl
YlJlZ2lvbnM7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdl
ZCgpCit2b2lkIE1hY0ZyYW1lOjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCiB7CiAgICAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqd2ViUmVnaW9ucyA9IGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5
KCk7CiAgICAgW19icmlkZ2UgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6d2ViUmVnaW9uc107CiB9
CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojppc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChjb25z
dCBRQ2hhciAmYywgYm9vbCBpc1ByZXZpb3VzQ2hhcikKK2Jvb2wgTWFjRnJhbWU6OmlzQ2hhcmFj
dGVyU21hcnRSZXBsYWNlRXhlbXB0KGNvbnN0IFFDaGFyICZjLCBib29sIGlzUHJldmlvdXNDaGFy
KQogewogICAgIHJldHVybiBbX2JyaWRnZSBpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdDpj
LnVuaWNvZGUoKSBpc1ByZXZpb3VzQ2hhcmFjdGVyOmlzUHJldmlvdXNDaGFyXTsKIH0KIAotYm9v
bCBLV1FLSFRNTFBhcnQ6OmlzS0hUTUxQYXJ0KCkgY29uc3QKK2Jvb2wgTWFjRnJhbWU6OmlzRnJh
bWUoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1Ob2RlSW1wbCAqS1dRS0hUTUxQ
YXJ0Ojptb3VzZVByZXNzTm9kZSgpCitOb2RlSW1wbCAqTWFjRnJhbWU6Om1vdXNlUHJlc3NOb2Rl
KCkKIHsKICAgICByZXR1cm4gZC0+bV9tb3VzZVByZXNzTm9kZS5nZXQoKTsKIH0KIAotdm9pZCBL
V1FLSFRNTFBhcnQ6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQordm9pZCBNYWNGcmFtZTo6aGFuZGxl
ZE9ubG9hZEV2ZW50cygpCiB7CiAgICAgW19icmlkZ2UgaGFuZGxlZE9ubG9hZEV2ZW50c107CiB9
CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRDbG9zZSgpCitib29sIE1hY0ZyYW1lOjpzaG91
bGRDbG9zZSgpCiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAKSW5kZXg6IGt3cS9LV1FP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk2
MCkKKysrIGt3cS9LV1FPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsOCArMjgzLDgg
QEAgdm9pZCBRT2JqZWN0OjpzZXREZWZlcnNUaW1lcnMoYm9vbCBkZWZlcgogCiBib29sIFFPYmpl
Y3Q6OmluaGVyaXRzKGNvbnN0IGNoYXIgKmNsYXNzTmFtZSkgY29uc3QKIHsKLSAgICBpZiAoc3Ry
Y21wKGNsYXNzTmFtZSwgIktIVE1MUGFydCIpID09IDApIHsKLSAgICAgICAgcmV0dXJuIGlzS0hU
TUxQYXJ0KCk7CisgICAgaWYgKHN0cmNtcChjbGFzc05hbWUsICJGcmFtZSIpID09IDApIHsKKyAg
ICAgICAgcmV0dXJuIGlzRnJhbWUoKTsKICAgICB9CiAgICAgaWYgKHN0cmNtcChjbGFzc05hbWUs
ICJLSFRNTFZpZXciKSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBpc0tIVE1MVmlldygpOwpAQCAt
MzEwLDcgKzMxMCw3IEBAIGJvb2wgUU9iamVjdDo6aXNLSFRNTExvYWRlcigpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFFPYmplY3Q6OmlzS0hUTUxQYXJ0KCkgY29uc3QKK2Jv
b2wgUU9iamVjdDo6aXNGcmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRl
eDoga3dxL0tXUUZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FGcmFtZS5tbQkocmV2aXNp
b24gMTE5NjApCisrKyBrd3EvS1dRRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbXBvcnQgIktXUUZyYW1lLmgiCiAKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIK
LSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIKICNpbXBvcnQg
IldlYkNvcmVCcmlkZ2UuaCIKICNpbXBvcnQgImtodG1sdmlldy5oIgogCkBAIC0zNyw5ICszNyw5
IEBAIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVN0eWxlKGludCBzKQogCiAgICAgLy8gVGVsbCB0aGUg
b3RoZXIgc2lkZSBvZiB0aGUgYnJpZGdlIGFib3V0IHRoZSBmcmFtZSBzdHlsZSBjaGFuZ2UuCiAg
ICAgaWYgKGlzS0hUTUxWaWV3KCkpIHsKLSAgICAgICAgaWYgKEtIVE1MUGFydCAqcGFydCA9IHN0
YXRpY19jYXN0PEtIVE1MVmlldyAqPih0aGlzKS0+cGFydCgpKSB7CisgICAgICAgIGlmIChGcmFt
ZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcgKj4odGhpcyktPmZyYW1lKCkpIHsKIAkg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgICAgICAgICBbS1dRKHBhcnQpLT5icmlkZ2Uo
KSBzZXRIYXNCb3JkZXI6KHMgIT0gTm9GcmFtZSldOworICAgICAgICAgICAgW01hYyhmcmFtZSkt
PmJyaWRnZSgpIHNldEhhc0JvcmRlcjoocyAhPSBOb0ZyYW1lKV07CiAJICAgIEtXUV9VTkJMT0NL
X0VYQ0VQVElPTlM7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBrd3EvS1dRS1BhcnRzQnJvd3Nl
ckludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNl
LmgJKHJldmlzaW9uIDExOTYwKQorKysga3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDIwIEBACiAjaW5jbHVkZSAiS1dRT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiS1dRVmFyaWFudC5oIgogCi1jbGFzcyBLV1FLSFRNTFBhcnQ7CitjbGFzcyBN
YWNGcmFtZTsKIAogbmFtZXNwYWNlIEtQYXJ0cyB7CiAKIGNsYXNzIEJyb3dzZXJJbnRlcmZhY2Ug
OiBwdWJsaWMgUU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgQnJvd3NlckludGVyZmFjZShLV1FLSFRN
TFBhcnQgKnBhcnQpIDogX3BhcnQocGFydCkgeyB9CisgICAgQnJvd3NlckludGVyZmFjZShNYWNG
cmFtZSAqZnJhbWUpIDogbV9mcmFtZShmcmFtZSkgeyB9CiAgICAgCiAgICAgUVZhcmlhbnQgcHJv
cGVydHkoY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CiAgICAgdm9pZCBjYWxsTWV0aG9kKGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IFFWYXJpYW50ICZhcmd1bWVudCk7CiAgICAgCiAKIHByaXZhdGU6
Ci0gICAgS1dRS0hUTUxQYXJ0ICpfcGFydDsKKyAgICBNYWNGcmFtZSAqbV9mcmFtZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEtQYXJ0cwpJbmRleDoga3dxL0tXUUFjY09iamVjdC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FB
Y2NPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbXBvcnQgImRv
bTJfZXZlbnRzaW1wbC5oIgogI2ltcG9ydCAiZG9tMl9yYW5nZS5oIgogI2ltcG9ydCAia2h0bWx2
aWV3LmgiCi0jaW1wb3J0ICJraHRtbF9wYXJ0LmgiCisjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9y
dCAicmVuZGVyX2NhbnZhcy5oIgogI2ltcG9ydCAicmVuZGVyX2ltYWdlLmgiCiAjaW1wb3J0ICJy
ZW5kZXJfbGlzdC5oIgpAQCAtNTAxLDcgKzUwMSw3IEBAIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9z
aXRpb247CiAgICAgTm9kZUltcGwqIGUgPSBtX3JlbmRlcmVyLT5lbGVtZW50KCk7CiAgICAgRG9j
dW1lbnRJbXBsKiBkID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZSAmJiBkKSB7
Ci0gICAgICAgIEtIVE1MUGFydCogcCA9IGQtPnBhcnQoKTsKKyAgICAgICAgRnJhbWUqIHAgPSBk
LT5mcmFtZSgpOwogICAgICAgICBpZiAocCkgewogICAgICAgICAgICAgLy8gY2F0Y2ggc3RhbGUg
S1dRQWNjT2JqZWN0IChzZWUgPHJkYXI6Ly9wcm9ibGVtLzM5NjAxOTY+KQogICAgICAgICAgICAg
aWYgKHAtPnhtbERvY0ltcGwoKSAhPSBkKQpAQCAtNTI1LDcgKzUyNSw3IEBAIHVzaW5nIGtodG1s
OjpWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
TWFya2VyKj4obV9yZW5kZXJlciktPnRleHQoKS5nZXROU1N0cmluZygpOwogCiAgICAgaWYgKG1f
cmVuZGVyZXItPmlzQ2FudmFzKCkpIHsKLSAgICAgICAgS1dRS0hUTUxQYXJ0ICpkb2NQYXJ0ID0g
S1dRKG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnBhcnQoKSk7CisgICAgICAgIE1hY0ZyYW1lICpk
b2NQYXJ0ID0gTWFjKG1fcmVuZGVyZXItPmRvY3VtZW50KCktPmZyYW1lKCkpOwogICAgICAgICBp
ZiAoIWRvY1BhcnQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKQEAgLTc3MSw5
ICs3NzEsOSBAQCBzdGF0aWMgUVJlY3QgYm91bmRpbmdCb3hSZWN0KFJlbmRlck9iamVjCiAKICAg
ICAgICAgRG9jdW1lbnRJbXBsKiBkID0gYWN0aW9uRWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKICAg
ICAgICAgaWYgKGQpIHsKLSAgICAgICAgICAgIEtIVE1MUGFydCogcCA9IGQtPnBhcnQoKTsKKyAg
ICAgICAgICAgIEZyYW1lKiBwID0gZC0+ZnJhbWUoKTsKICAgICAgICAgICAgIGlmIChwKSB7Ci0g
ICAgICAgICAgICAgICAgS1dRKHApLT5wcmVwYXJlRm9yVXNlckFjdGlvbigpOworICAgICAgICAg
ICAgICAgIE1hYyhwKS0+cHJlcGFyZUZvclVzZXJBY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCkBAIC05NDYsOSArOTQ2LDkgQEAgc3RhdGljIFFSZWN0IGJvdW5kaW5nQm94UmVj
dChSZW5kZXJPYmplYwogICAgICAgICAvLyBOT1RFOiBCVUcgc3VwcG9ydCBuZXN0ZWQgV2ViQXJl
YXMsIGxpa2UgaW4gPGh0dHA6Ly93ZWJjb3Vyc2VzLm5pdS5lZHUvPgogICAgICAgICAvLyAodGhl
cmUgaXMgYSB3ZWIgYXJjaGl2ZSBvZiB0aGlzIHBhZ2UgYXR0YWNoZWQgdG8gPHJkYXI6Ly9wcm9i
bGVtLzM4ODg5NzM+KQogICAgICAgICAvLyBUcm91YmxlIGlzIHdlIG5lZWQgdG8ga25vdyB3aGlj
aCBkb2N1bWVudCB2aWV3IHRvIGFzay4KLSAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciAgIHNl
bCA9IFtzZWxmIHRvcFZpZXddLT5wYXJ0KCktPnNlbGVjdGlvbigpOworICAgICAgICBTZWxlY3Rp
b25Db250cm9sbGVyICAgc2VsID0gW3NlbGYgdG9wVmlld10tPmZyYW1lKCktPnNlbGVjdGlvbigp
OwogICAgICAgICBpZiAoc2VsLmlzTm9uZSgpKSB7Ci0gICAgICAgICAgICBzZWwgPSBtX3JlbmRl
cmVyLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpLT5jYW52YXMoKS0+dmlldygpLT5wYXJ0KCktPnNl
bGVjdGlvbigpOworICAgICAgICAgICAgc2VsID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKS0+Y2FudmFzKCktPnZpZXcoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7CiAgICAgICAg
ICAgICBpZiAoc2VsLmlzTm9uZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
ICAgIH0KQEAgLTExMzMsMTAgKzExMzMsMTAgQEAgc3RhdGljIFFSZWN0IGJvdW5kaW5nQm94UmVj
dChSZW5kZXJPYmplYwogICAgICAgICBRV2lkZ2V0ICp3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJXaWRnZXQgKj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKICAgICAgICAgaWYgKCF3aWRnZXQgfHwg
IXdpZGdldC0+aW5oZXJpdHMoIktIVE1MVmlldyIpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIEtIVE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PEtIVE1MVmlldyAqPih3aWRnZXQpLT5w
YXJ0KCk7Ci0gICAgICAgIGlmICghcGFydCkKKyAgICAgICAgRnJhbWUgKmZyYW1lID0gc3RhdGlj
X2Nhc3Q8S0hUTUxWaWV3ICo+KHdpZGdldCktPmZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUp
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IHBh
cnQtPnhtbERvY0ltcGwoKTsKKyAgICAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IGZyYW1l
LT54bWxEb2NJbXBsKCk7CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgcmVuZGVyZXIgPSBkb2N1bWVudC0+cmVuZGVyZXIoKTsKQEAgLTE4NDQsOSAr
MTg0NCw5IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFJlcGwKIC0gKFJl
bmRlck9iamVjdCAqKSByZW5kZXJlckZvclZpZXc6KE5TVmlldyAqKXZpZXcKIHsKICAgICAvLyBj
aGVjayBmb3IgV2ViQ29yZSBOU1ZpZXcgdGhhdCBsZXRzIHVzIGZpbmQgaXRzIHdpZGdldAotICAg
IEtIVE1MUGFydCogZG9jUGFydCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnBhcnQoKTsKKyAg
ICBGcmFtZSogZG9jUGFydCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAg
aWYgKGRvY1BhcnQpIHsKLSAgICAgICAgRE9NRWxlbWVudCAqZG9tRWxlbWVudCA9IFtLV1EoZG9j
UGFydCktPmJyaWRnZSgpIGVsZW1lbnRGb3JWaWV3OnZpZXddOworICAgICAgICBET01FbGVtZW50
ICpkb21FbGVtZW50ID0gW01hYyhkb2NQYXJ0KS0+YnJpZGdlKCkgZWxlbWVudEZvclZpZXc6dmll
d107CiAgICAgICAgIGlmIChkb21FbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIFtkb21FbGVt
ZW50IF9lbGVtZW50SW1wbF0tPnJlbmRlcmVyKCk7CiAgICAgfQpAQCAtMTg1OCwxMSArMTg1OCwx
MSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsCiAgICAgICAgIGJy
aWRnZSA9IFticmlkZ2VIb2xkZXIgd2ViQ29yZUJyaWRnZV07CiAgICAgfQogCi0gICAgS1dRS0hU
TUxQYXJ0ICpwYXJ0ID0gW2JyaWRnZSBwYXJ0XTsKLSAgICBpZiAoIXBhcnQpCisgICAgTWFjRnJh
bWUgKmZyYW1lID0gW2JyaWRnZSBwYXJ0XTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm4gTlVMTDsKICAgICAgICAgCi0gICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IHBhcnQtPnht
bERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwgKmRvY3VtZW50ID0gZnJhbWUtPnhtbERvY0lt
cGwoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAg
CkBAIC0xOTMwLDcgKzE5MzAsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRSZXBsCiAgICAgLy8gbWFrZSBzZWxlY3Rpb24gYW5kIHRlbGwgdGhlIGRvY3VtZW50IHRvIHVz
ZSBpdAogICAgIC8vIE5PVEU6IEJVRyBzdXBwb3J0IG5lc3RlZCBXZWJBcmVhcwogICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgc2VsID0gU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydFZpc2libGVQb3Np
dGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKTsKLSAgICBbc2VsZiB0b3BEb2N1bWVudF0tPnBhcnQo
KS0+c2V0U2VsZWN0aW9uKHNlbCk7CisgICAgW3NlbGYgdG9wRG9jdW1lbnRdLT5mcmFtZSgpLT5z
ZXRTZWxlY3Rpb24oc2VsKTsKIH0KIAogLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlk
KXZhbHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGVOYW1lOwpJbmRleDoga3dx
L0tXUUtIVE1MUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FLSFRNTFBhcnQuaAkocmV2aXNp
b24gMTE5NjApCisrKyBrd3EvS1dRS0hUTUxQYXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS1dRS0hUTUxQYXJ0X0gKLSNk
ZWZpbmUgS1dRS0hUTUxQYXJ0X0gKLQotI2ltcG9ydCAia2h0bWxfcGFydC5oIgotCi0jaW1wb3J0
ICJ0ZXh0X2FmZmluaXR5LmgiCi0KLSNpbXBvcnQgImRvbV9ub2RlaW1wbC5oIgotCi0jaW1wb3J0
ICJXZWJDb3JlS2V5Ym9hcmRBY2Nlc3MuaCIKLQotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29y
ZUZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAiS1dRRGljdC5oIgotI2ltcG9ydCAiS1dRQ2xpcGJv
YXJkLmgiCi0jaW1wb3J0ICJLV1FTY3JvbGxCYXIuaCIKLQotY2xhc3MgS0hUTUxQYXJ0UHJpdmF0
ZTsKLWNsYXNzIEtXUVdpbmRvd1dpZGdldDsKLWNsYXNzIE5QT2JqZWN0OwotCi1uYW1lc3BhY2Ug
RE9NIHsKLSAgICBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKLSAgICBjbGFzcyBIVE1MVGFi
bGVDZWxsRWxlbWVudEltcGw7Ci19Ci0KLW5hbWVzcGFjZSBraHRtbCB7Ci0gICAgY2xhc3MgUmVu
ZGVyT2JqZWN0OwotICAgIGNsYXNzIFJlbmRlclN0eWxlOwotICAgIGNsYXNzIFZpc2libGVQb3Np
dGlvbjsKLSAgICBzdHJ1Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWU7Ci19Ci0KLW5hbWVzcGFjZSBL
SlMgewotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwotICAgIGNsYXNzIFNhdmVkUHJvcGVydGll
czsKLSAgICBjbGFzcyBTYXZlZEJ1aWx0aW5zOwotICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsK
LSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICAg
ICAgY2xhc3MgUm9vdE9iamVjdDsKLSAgICB9Ci19Ci0KLSNpZmRlZiBfX09CSkNfXwotCi0vLyBB
dm9pZCBjbGFzaGVzIHdpdGggS0pTOjpET01FbGVtZW50IGluIEtIVE1MIGNvZGUuCi1AY2xhc3Mg
RE9NRWxlbWVudDsKLXR5cGVkZWYgRE9NRWxlbWVudCBPYmpDRE9NRWxlbWVudDsKLQotQGNsYXNz
IEtXUVBhZ2VTdGF0ZTsKLUBjbGFzcyBOU0FycmF5OwotQGNsYXNzIE5TQXR0cmlidXRlZFN0cmlu
ZzsKLUBjbGFzcyBOU0NvbG9yOwotQGNsYXNzIE5TRGljdGlvbmFyeTsKLUBjbGFzcyBOU0V2ZW50
OwotQGNsYXNzIE5TRmlsZVdyYXBwZXI7Ci1AY2xhc3MgTlNGb250OwotQGNsYXNzIE5TSW1hZ2U7
Ci1AY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFyeTsKLUBjbGFzcyBOU1Jlc3BvbmRlcjsKLUBjbGFz
cyBOU1N0cmluZzsKLUBjbGFzcyBOU1ZpZXc7Ci1AY2xhc3MgV2ViQ29yZUJyaWRnZTsKLUBjbGFz
cyBXZWJTY3JpcHRPYmplY3Q7Ci0KLSNlbHNlCi0KLS8vIEF2b2lkIGNsYXNoZXMgd2l0aCBLSlM6
OkRPTUVsZW1lbnQgaW4gS0hUTUwgY29kZS4KLWNsYXNzIE9iakNET01FbGVtZW50OwotCi1jbGFz
cyBLV1FQYWdlU3RhdGU7Ci1jbGFzcyBOU0FycmF5OwotY2xhc3MgTlNBdHRyaWJ1dGVkU3RyaW5n
OwotY2xhc3MgTlNDb2xvcjsKLWNsYXNzIE5TRGljdGlvbmFyeTsKLWNsYXNzIE5TRXZlbnQ7Ci1j
bGFzcyBOU0ZpbGVXcmFwcGVyOwotY2xhc3MgTlNGb250OwotY2xhc3MgTlNJbWFnZTsKLWNsYXNz
IE5TTXV0YWJsZURpY3Rpb25hcnk7Ci1jbGFzcyBOU1Jlc3BvbmRlcjsKLWNsYXNzIE5TU3RyaW5n
OwotY2xhc3MgTlNWaWV3OwotY2xhc3MgV2ViQ29yZUJyaWRnZTsKLWNsYXNzIFdlYlNjcmlwdE9i
amVjdDsKLQotdHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9uOwotCi0jZW5kaWYKLQotZW51
bSBLV1FTZWxlY3Rpb25EaXJlY3Rpb24gewotICAgIEtXUVNlbGVjdGluZ05leHQsCi0gICAgS1dR
U2VsZWN0aW5nUHJldmlvdXMKLX07Ci0KLWNsYXNzIEtXUUtIVE1MUGFydCA6IHB1YmxpYyBLSFRN
TFBhcnQKLXsKLXB1YmxpYzoKLSAgICBLV1FLSFRNTFBhcnQoKTsKLSAgICB+S1dRS0hUTUxQYXJ0
KCk7Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdm9pZCBzZXRCcmlkZ2UoV2ViQ29y
ZUJyaWRnZSAqcCk7Ci0gICAgV2ViQ29yZUJyaWRnZSAqYnJpZGdlKCkgY29uc3QgeyByZXR1cm4g
X2JyaWRnZTsgfQotICAgIHZvaWQgc2V0VmlldyhLSFRNTFZpZXcgKnZpZXcpOwotICAgIEtIVE1M
VmlldyAqdmlldygpIGNvbnN0OwotCi0gICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlblVSTChjb25zdCBLVVJMICYpOwotICAgIHZpcnR1YWwg
Ym9vbCBjbG9zZVVSTCgpOwotICAgIHZvaWQgZGlkTm90T3BlblVSTChjb25zdCBLVVJMICYpOwot
ICAgIAotICAgIHZvaWQgb3BlblVSTFJlcXVlc3QoY29uc3QgS1VSTCAmLCBjb25zdCBLUGFydHM6
OlVSTEFyZ3MgJik7Ci0gICAgdm9pZCBzdWJtaXRGb3JtKGNvbnN0IEtVUkwgJiwgY29uc3QgS1Bh
cnRzOjpVUkxBcmdzICYpOwotCi0gICAgdm9pZCBzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKCBp
bnQgc3RlcHMgKTsKLSAgICAKLSAgICB2b2lkIHNjcm9sbFRvQW5jaG9yKGNvbnN0IEtVUkwgJik7
Ci0gICAgUVN0cmluZyBhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbiA9IGZhbHNlKTsKLSAgICBib29sIHNjcm9sbE92ZXJmbG93KEtXUVNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIEtXUVNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KTsKLSAgICAK
LSAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFFTdHJpbmcgJmVuY29kaW5nLCBib29sIHVzZXJD
aG9zZW4pOwotICAgIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyICpieXRlcywgaW50IGxlbmd0aCk7
Ci0KLSAgICB2b2lkIHNldFRpdGxlKGNvbnN0IERPTTo6RE9NU3RyaW5nICYpOwotICAgIHZvaWQg
c2V0U3RhdHVzQmFyVGV4dChjb25zdCBRU3RyaW5nICZzdGF0dXMpOwotCi0gICAgdm9pZCB1cmxT
ZWxlY3RlZChjb25zdCBLVVJMICZ1cmwsIGludCBidXR0b24sIGludCBzdGF0ZSwgY29uc3QgS1Bh
cnRzOjpVUkxBcmdzICZhcmdzKTsKLSAgICBLUGFydHM6OlJlYWRPbmx5UGFydCAqY3JlYXRlUGFy
dChjb25zdCBraHRtbDo6Q2hpbGRGcmFtZSAmY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3Qg
UVN0cmluZyAmbWltZVR5cGUpOwotCi0gICAgdm9pZCBzY2hlZHVsZUNsb3NlKCk7Ci0KLSAgICB2
b2lkIHVuZm9jdXNXaW5kb3coKTsKLQotICAgIEtKUzo6UGF1c2VkVGltZW91dHMgKnBhdXNlVGlt
ZW91dHMoKTsKLSAgICB2b2lkIHJlc3VtZVRpbWVvdXRzKEtKUzo6UGF1c2VkVGltZW91dHMgKik7
Ci0gICAgCi0gICAgYm9vbCBjYW5DYWNoZVBhZ2UoKTsKLSAgICB2b2lkIHNhdmVXaW5kb3dQcm9w
ZXJ0aWVzKEtKUzo6U2F2ZWRQcm9wZXJ0aWVzICp3aW5kb3dQcm9wZXJ0aWVzKTsKLSAgICB2b2lk
IHNhdmVMb2NhdGlvblByb3BlcnRpZXMoS0pTOjpTYXZlZFByb3BlcnRpZXMgKmxvY2F0aW9uUHJv
cGVydGllcyk7Ci0gICAgdm9pZCByZXN0b3JlV2luZG93UHJvcGVydGllcyhLSlM6OlNhdmVkUHJv
cGVydGllcyAqd2luZG93UHJvcGVydGllcyk7Ci0gICAgdm9pZCByZXN0b3JlTG9jYXRpb25Qcm9w
ZXJ0aWVzKEtKUzo6U2F2ZWRQcm9wZXJ0aWVzICpsb2NhdGlvblByb3BlcnRpZXMpOwotICAgIHZv
aWQgc2F2ZUludGVycHJldGVyQnVpbHRpbnMoS0pTOjpTYXZlZEJ1aWx0aW5zICZpbnRlcnByZXRl
ckJ1aWx0aW5zKTsKLSAgICB2b2lkIHJlc3RvcmVJbnRlcnByZXRlckJ1aWx0aW5zKGNvbnN0IEtK
Uzo6U2F2ZWRCdWlsdGlucyAmaW50ZXJwcmV0ZXJCdWlsdGlucyk7Ci0KLSAgICB2b2lkIG9wZW5V
UkxGcm9tUGFnZUNhY2hlKEtXUVBhZ2VTdGF0ZSAqc3RhdGUpOwotCi0gICAgdm9pZCBzYXZlRG9j
dW1lbnRTdGF0ZSgpOwotICAgIHZvaWQgcmVzdG9yZURvY3VtZW50U3RhdGUoKTsKLSAgICAKLSAg
ICBib29sIGlzRnJhbWVTZXQoKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlUG9saWN5QmFzZVVS
TCgpOwotCi0gICAgTlNWaWV3ICpuZXh0S2V5VmlldyhET006Ok5vZGVJbXBsICpzdGFydGluZ1Bv
aW50LCBLV1FTZWxlY3Rpb25EaXJlY3Rpb24pOwotICAgIE5TVmlldyAqbmV4dEtleVZpZXdJbkZy
YW1lSGllcmFyY2h5KERPTTo6Tm9kZUltcGwgKnN0YXJ0aW5nUG9pbnQsIEtXUVNlbGVjdGlvbkRp
cmVjdGlvbik7Ci0gICAgc3RhdGljIE5TVmlldyAqbmV4dEtleVZpZXdGb3JXaWRnZXQoUVdpZGdl
dCAqc3RhcnRpbmdQb2ludCwgS1dRU2VsZWN0aW9uRGlyZWN0aW9uKTsKLSAgICBzdGF0aWMgYm9v
bCBjdXJyZW50RXZlbnRJc0tleWJvYXJkT3B0aW9uVGFiKCk7Ci0gICAgc3RhdGljIGJvb2wgaGFu
ZGxlS2V5Ym9hcmRPcHRpb25UYWJJblZpZXcoTlNWaWV3ICp2aWV3KTsKLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgdGFic1RvTGlua3MoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgdGFic1RvQWxs
Q29udHJvbHMoKSBjb25zdDsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBjdXJyZW50RXZlbnRJc01v
dXNlRG93bkluV2lkZ2V0KFFXaWRnZXQgKmNhbmRpZGF0ZSk7Ci0gICAgCi0gICAgc3RhdGljIHZv
aWQgc2V0RG9jdW1lbnRGb2N1cyhRV2lkZ2V0ICopOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyRG9j
dW1lbnRGb2N1cyhRV2lkZ2V0ICopOwotICAgIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0
KGNvbnN0IERPTTo6RE9NU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRD
b25maXJtKGNvbnN0IERPTTo6RE9NU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJ1bkphdmFT
Y3JpcHRQcm9tcHQoY29uc3QgRE9NOjpET01TdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBkZWZhdWx0VmFsdWUsIERPTTo6RE9NU3RyaW5nJiByZXN1bHQpOwotICAgIGJvb2wg
bG9jYXRpb25iYXJWaXNpYmxlKCk7Ci0gICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpOwotICAgIGJv
b2wgcGVyc29uYWxiYXJWaXNpYmxlKCk7Ci0gICAgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpOwot
ICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOwotICAgIGJvb2wgdG9vbGJhclZpc2libGUoKTsK
LQotICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKLQotICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShjb25zdCBET006OkRPTVN0cmluZyYgbWVzc2FnZSwgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVy
LCBjb25zdCBET006OkRPTVN0cmluZyYgc291cmNlSUQpOwotICAgIGtodG1sOjpSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBmb3JjZUxheW91dCgpOwotICAgIHZvaWQg
Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UoZmxvYXQgbWluUGFnZVdpZHRoLCBmbG9hdCBt
YXhQYWdlV2lkdGgpOwotICAgIHZvaWQgc2VuZFJlc2l6ZUV2ZW50KCk7Ci0gICAgdm9pZCBzZW5k
U2Nyb2xsRXZlbnQoKTsKLSAgICB2b2lkIHBhaW50KFFQYWludGVyICosIGNvbnN0IFFSZWN0ICYp
OwotCi0gICAgdm9pZCBhZGp1c3RQYWdlSGVpZ2h0KGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0IG9s
ZFRvcCwgZmxvYXQgb2xkQm90dG9tLCBmbG9hdCBib3R0b21MaW1pdCk7Ci0KLSAgICB2b2lkIGNy
ZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLQotICAgIHN0YXRpYyBXZWJDb3JlQnJpZGdlICpicmlkZ2VG
b3JXaWRnZXQoY29uc3QgUVdpZGdldCAqKTsKLSAgICBzdGF0aWMgS1dRS0hUTUxQYXJ0ICpwYXJ0
Rm9yV2lkZ2V0KGNvbnN0IFFXaWRnZXQgKik7Ci0gICAgCi0gICAgUVN0cmluZyByZXF1ZXN0ZWRV
UkxTdHJpbmcoKSBjb25zdDsKLSAgICBRU3RyaW5nIGluY29taW5nUmVmZXJyZXIoKSBjb25zdDsK
LSAgICBRU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OwotCi0gICAgUVN0cmluZyBtaW1lVHlwZUZv
ckZpbGVOYW1lKGNvbnN0IFFTdHJpbmcgJikgY29uc3Q7Ci0gICAgCi0gICAgRE9NOjpOb2RlSW1w
bCAqc2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKLSAgICBpbnQgc2VsZWN0aW9uU3RhcnRPZmZzZXQo
KSBjb25zdDsKLSAgICBET006Ok5vZGVJbXBsICpzZWxlY3Rpb25FbmQoKSBjb25zdDsKLSAgICBp
bnQgc2VsZWN0aW9uRW5kT2Zmc2V0KCkgY29uc3Q7Ci0KLSAgICBRUmVjdCBzZWxlY3Rpb25SZWN0
KCkgY29uc3Q7Ci0gICAgTlNSZWN0IHZpc2libGVTZWxlY3Rpb25SZWN0KCkgY29uc3Q7Ci0gICAg
Ly8gU2Nyb2xscyBhcyBuZWNlc3NhcnkgdG8gcmV2ZWFsIHRoZSBzZWxlY3Rpb24KLSAgICB2b2lk
IHJldmVhbFNlbGVjdGlvbigpOwotICAgIC8vIENlbnRlcnMgdGhlIHNlbGVjdGlvbiByZWdhcmRs
ZXNzIG9mIHdoZXRoZXIgaXQgd2FzIGFscmVhZHkgdmlzaWJsZQotICAgIHZvaWQgY2VudGVyU2Vs
ZWN0aW9uSW5WaXNpYmxlQXJlYSgpIGNvbnN0OwotICAgIE5TSW1hZ2UgKnNlbGVjdGlvbkltYWdl
KCkgY29uc3Q7Ci0gICAgTlNJbWFnZSAqc25hcHNob3REcmFnSW1hZ2UoRE9NOjpOb2RlSW1wbCAq
bm9kZSwgTlNSZWN0ICppbWFnZVJlY3QsIE5TUmVjdCAqZWxlbWVudFJlY3QpIGNvbnN0OwotCi0g
ICAgTlNGb250ICpmb250Rm9yU2VsZWN0aW9uKGJvb2wgKmhhc011bHRpcGxlRm9udHMpIGNvbnN0
OwotICAgIE5TRGljdGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNv
bnN0OwotICAgIAotICAgIE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZv
clNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NJbkFk
amFjZW50V29yZHMoY29uc3Qga2h0bWw6OlZpc2libGVQb3NpdGlvbiAmKTsKLSAgICB2b2lkIG1h
cmtNaXNzcGVsbGluZ3MoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJik7Ci0KLSAg
ICBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW1lbnQoRE9NOjpFbGVtZW50SW1wbCAq
KTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcoRE9NOjpOb2RlSW1w
bCAqc3RhcnROb2RlLCBpbnQgc3RhcnRPZmZzZXQsIERPTTo6Tm9kZUltcGwgKmVuZE5vZGUsIGlu
dCBlbmRPZmZzZXQpOwotCi0gICAgdm9pZCBhZGRNZXRhRGF0YShjb25zdCBRU3RyaW5nICZrZXks
IGNvbnN0IFFTdHJpbmcgJnZhbHVlKTsKLQotICAgIHZvaWQgbW91c2VEb3duKE5TRXZlbnQgKik7
Ci0gICAgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKLSAgICB2b2lkIG1vdXNlVXAoTlNF
dmVudCAqKTsKLSAgICB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCAqKTsKLSAgICBib29sIGtleUV2
ZW50KE5TRXZlbnQgKik7Ci0gICAgYm9vbCB3aGVlbEV2ZW50KE5TRXZlbnQgKik7Ci0KLSAgICB2
b2lkIHNlbmRGYWtlRXZlbnRzQWZ0ZXJXaWRnZXRUcmFja2luZyhOU0V2ZW50ICppbml0aWF0aW5n
RXZlbnQpOwotCi0gICAgYm9vbCBsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdDsKLSAgICB2b2lk
IHNldEFjdGl2YXRpb25FdmVudE51bWJlcihpbnQgbnVtKSB7IF9hY3RpdmF0aW9uRXZlbnROdW1i
ZXIgPSBudW07IH0KLQotICAgIGJvb2wgZXZlbnRNYXlTdGFydERyYWcoTlNFdmVudCAqKSBjb25z
dDsKLSAgICB2b2lkIGRyYWdTb3VyY2VNb3ZlZFRvKGNvbnN0IFFQb2ludCAmbG9jKTsKLSAgICB2
b2lkIGRyYWdTb3VyY2VFbmRlZEF0KGNvbnN0IFFQb2ludCAmbG9jLCBOU0RyYWdPcGVyYXRpb24g
b3BlcmF0aW9uKTsKLQotICAgIGJvb2wgbWF5Q3V0KCk7Ci0gICAgYm9vbCBtYXlDb3B5KCk7Ci0g
ICAgYm9vbCBtYXlQYXN0ZSgpOwotICAgIGJvb2wgdHJ5Q3V0KCk7Ci0gICAgYm9vbCB0cnlDb3B5
KCk7Ci0gICAgYm9vbCB0cnlQYXN0ZSgpOwotICAgIAotICAgIGJvb2wgc2VuZENvbnRleHRNZW51
RXZlbnQoTlNFdmVudCAqKTsKLQotICAgIC8vIENhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGhhbmRs
aW5nIGEgbmV3IHVzZXIgYWN0aW9uLCBsaWtlIG9uIGEgbW91c2UgZG93biBvciBrZXkgZG93bi4K
LSAgICAvLyBDdXJyZW50bHksIGFsbCB0aGlzIGRvZXMgaXMgY2xlYXIgdGhlICJkb24ndCBzdWJt
aXQgZm9ybSB0d2ljZSIgZGF0YSBtZW1iZXIuCi0gICAgdm9pZCBwcmVwYXJlRm9yVXNlckFjdGlv
bigpOwotCi0gICAgdm9pZCBjbGVhclRpbWVycygpOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyVGlt
ZXJzKEtIVE1MVmlldyAqKTsKLSAgICAKLSAgICBib29sIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJm
cmFtZShET006Ok5vZGVJbXBsOjpNb3VzZUV2ZW50ICYpOwotICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb0NoaWxkV2lkZ2V0KERPTTo6Tm9kZUltcGwgKik7Ci0gICAgCi0gICAgdm9pZCByZWRpcmVj
dGlvblRpbWVyU3RhcnRlZE9yU3RvcHBlZCgpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBRUHRy
TGlzdDxLV1FLSFRNTFBhcnQ+ICZpbnN0YW5jZXMoKSB7IHJldHVybiBtdXRhYmxlSW5zdGFuY2Vz
KCk7IH0KLQotICAgIHZvaWQgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSAgICB2b2lkIHJl
Y29yZEZvcm1WYWx1ZShjb25zdCBRU3RyaW5nICZuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSwg
RE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsICplbGVtZW50KTsKLSAgICBET006OkhUTUxGb3JtRWxl
bWVudEltcGwgKmN1cnJlbnRGb3JtKCkgY29uc3Q7Ci0KLSAgICBOU1N0cmluZyAqc2VhcmNoRm9y
TGFiZWxzQWJvdmVDZWxsKFFSZWdFeHAgKnJlZ0V4cCwgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwgKmNlbGwpOwotICAgIE5TU3RyaW5nICpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KE5TQXJyYXkgKmxhYmVscywgRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCk7Ci0gICAgTlNTdHJp
bmcgKm1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoTlNBcnJheSAqbGFiZWxzLCBET006OkVsZW1l
bnRJbXBsICplbGVtZW50KTsKLQotICAgIGJvb2wgZmluZFN0cmluZyhOU1N0cmluZyAqc3RyLCBi
b29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcpOwotCi0gICAgdm9pZCBz
ZXRTZXR0aW5ncyhLSFRNTFNldHRpbmdzICopOwotCi0gICAgS1dRV2luZG93V2lkZ2V0ICp0b3BM
ZXZlbFdpZGdldCgpOwotICAgIAotICAgIHZvaWQgdG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpOwot
Ci0gICAgUVN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0OwotICAgIAotICAgIHZvaWQg
c2V0TWVkaWFUeXBlKGNvbnN0IFFTdHJpbmcgJik7Ci0KLSAgICB2b2lkIHNldFNlbGVjdGlvbkZy
b21Ob25lKCk7Ci0gICAgdm9pZCBzZXREaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMoYm9vbCBm
bGFnKTsKLSAgICBib29sIGRpc3BsYXlzV2l0aEZvY3VzQXR0cmlidXRlcygpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXRXaW5kb3dIYXNGb2N1cyhib29sIGZsYWcpOwotICAgIAotICAgIC8vIENvbnZl
bmllbmNlLCB0byBhdm9pZCByZXBlYXRpbmcgdGhlIGNvZGUgdG8gZGlnIGRvd24gdG8gZ2V0IHRo
aXMuCi0gICAgUUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0OwotCi0gICAg
TlNDb2xvciAqYm9keUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIAotICAgIFdlYkNvcmVL
ZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROYW1l
KGNvbnN0IFFTdHJpbmcgJm5hbWUpOwotCi0gICAgdm9pZCBkaWRUZWxsQnJpZGdlQWJvdXRMb2Fk
KGNvbnN0IFFTdHJpbmcgJnVybFN0cmluZyk7Ci0gICAgYm9vbCBoYXZlVG9sZEJyaWRnZUFib3V0
TG9hZChjb25zdCBRU3RyaW5nICZ1cmxTdHJpbmcpOwotCi0gICAgS0pTOjpCaW5kaW5nczo6SW5z
dGFuY2UgKmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoUVdpZGdldCopOwotICAgIEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChRV2lkZ2V0Kik7Ci0g
ICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFFX
aWRnZXQqKTsKLSAgICB2b2lkIGFkZFBsdWdpblJvb3RPYmplY3QoY29uc3QgS0pTOjpCaW5kaW5n
czo6Um9vdE9iamVjdCAqcm9vdCk7Ci0gICAgdm9pZCBjbGVhbnVwUGx1Z2luUm9vdE9iamVjdHMo
KTsKLSAgICAKLSAgICB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3Qga2h0bWw6OkVk
aXRDb21tYW5kUHRyICYpOwotICAgIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBr
aHRtbDo6RWRpdENvbW1hbmRQdHIgJik7Ci0gICAgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9u
cygpOwotICAgIHZvaWQgaXNzdWVVbmRvQ29tbWFuZCgpOwotICAgIHZvaWQgaXNzdWVSZWRvQ29t
bWFuZCgpOwotICAgIHZvaWQgaXNzdWVDdXRDb21tYW5kKCk7Ci0gICAgdm9pZCBpc3N1ZUNvcHlD
b21tYW5kKCk7Ci0gICAgdm9pZCBpc3N1ZVBhc3RlQ29tbWFuZCgpOwotICAgIHZvaWQgaXNzdWVQ
YXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCk7Ci0gICAgdm9pZCBpc3N1ZVRyYW5zcG9zZUNvbW1h
bmQoKTsKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7Ci0gICAg
dm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
ZW50RWRpdGFibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICZvbGRTZWxlY3Rpb24sIGNvbnN0
IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICZuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5p
dHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwgKikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwgKikgY29u
c3Q7Ci0KLSAgICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0Rm9y
RE9NKCk7Ci0gICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqYmluZGluZ1Jvb3RPYmplY3Qo
KTsKLSAgICAKLSAgICBXZWJTY3JpcHRPYmplY3QgKndpbmRvd1NjcmlwdE9iamVjdCgpOwotICAg
IE5QT2JqZWN0ICp3aW5kb3dTY3JpcHROUE9iamVjdCgpOwotICAgIAotICAgIHZvaWQgcGFydENs
ZWFyZWRJbkJlZ2luKCk7Ci0gICAgCi0gICAgLy8gSW1wbGVtZW50YXRpb24gb2YgQ1NTIHByb3Bl
cnR5IC1raHRtbC11c2VyLWRyYWcgPT0gYXV0bwotICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2Rl
KERPTTo6Tm9kZUltcGwqLCBpbnQgeCwgaW50IHkpIGNvbnN0OwotCi0gICAgc3RydWN0IE1hcmtl
ZFRleHRVbmRlcmxpbmUgewotICAgICAgICBNYXJrZWRUZXh0VW5kZXJsaW5lKHVuc2lnbmVkIF9z
dGFydE9mZnNldCwgdW5zaWduZWQgX2VuZE9mZnNldCwgY29uc3QgUUNvbG9yICZfY29sb3IsIGJv
b2wgX3RoaWNrKSAKLSAgICAgICAgICAgIDogc3RhcnRPZmZzZXQoX3N0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgLCBlbmRPZmZzZXQoX2VuZE9mZnNldCkKLSAgICAgICAgICAgICwgY29sb3IoX2Nv
bG9yKQotICAgICAgICAgICAgLCB0aGljayhfdGhpY2spCi0gICAgICAgIHt9Ci0gICAgICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7Ci0gICAgICAg
IFFDb2xvciBjb2xvcjsKLSAgICAgICAgYm9vbCB0aGljazsKLSAgICB9OwotICAgIAotICAgIHZv
aWQgc2V0TWFya2VkVGV4dFJhbmdlKGNvbnN0IERPTTo6UmFuZ2VJbXBsICosIE5TQXJyYXkgKmF0
dHJpYnV0ZXMsIE5TQXJyYXkgKnJhbmdlcyk7Ci0gICAgRE9NOjpSYW5nZUltcGwgKm1hcmtlZFRl
eHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2VkVGV4dFJhbmdlLmdldCgpOyB9Ci0gICAg
Ym9vbCBtYXJrZWRUZXh0VXNlc1VuZGVybGluZXMoKSBjb25zdDsKLSAgICBRVmFsdWVMaXN0PE1h
cmtlZFRleHRVbmRlcmxpbmU+IG1hcmtlZFRleHRVbmRlcmxpbmVzKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0OwotCi0gICAgdm9pZCBk
aWRGaXJzdExheW91dCgpOwotICAgIAotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRhc2hib2Fy
ZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7Ci0gICAgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgp
OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChj
b25zdCBRQ2hhciAmLCBib29sKTsKLSAgICAKLSAgICBET006Ok5vZGVJbXBsICptb3VzZVByZXNz
Tm9kZSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgp
IGNvbnN0IHsgcmV0dXJuIF9tb3VzZURvd25NYXlTdGFydFNlbGVjdDsgfQotICAgIAotICAgIHZv
aWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwotICAgIAotcHJpdmF0ZToKLSAgICBib29sIGNhbk1v
dXNlRG93blN0YXJ0U2VsZWN0KERPTTo6Tm9kZUltcGwqIG5vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBraHRtbE1vdXNlUHJlc3NFdmVudChraHRtbDo6TW91c2VQcmVzc0V2ZW50ICopOwotICAgIHZp
cnR1YWwgdm9pZCBraHRtbE1vdXNlRG91YmxlQ2xpY2tFdmVudChraHRtbDo6TW91c2VEb3VibGVD
bGlja0V2ZW50ICopOwotICAgIHZpcnR1YWwgdm9pZCBraHRtbE1vdXNlTW92ZUV2ZW50KGtodG1s
OjpNb3VzZU1vdmVFdmVudCAqKTsKLSAgICB2aXJ0dWFsIHZvaWQga2h0bWxNb3VzZVJlbGVhc2VF
dmVudChraHRtbDo6TW91c2VSZWxlYXNlRXZlbnQgKik7Ci0gICAgCi0gICAgYm9vbCBwYXNzV2lk
Z2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChraHRtbDo6TW91c2VFdmVudCAqKTsKLSAgICBib29s
IHBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGtodG1sOjpSZW5kZXJXaWRnZXQgKik7
Ci0gICAgYm9vbCBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChRV2lkZ2V0ICopOwot
ICAgIAotICAgIHZvaWQgc2V0UG9saWN5QmFzZVVSTChjb25zdCBET006OkRPTVN0cmluZyAmKTsK
LSAgICAKLSAgICBOU1ZpZXcgKm1vdXNlRG93blZpZXdJZlN0aWxsR29vZCgpOwotCi0gICAgYm9v
bCB1c2VyR2VzdHVyZUhpbnQoKTsKLQotICAgIFFTdHJpbmcgZ2VuZXJhdGVGcmFtZU5hbWUoKTsK
LQotICAgIE5TVmlldyAqbmV4dEtleVZpZXdJbkZyYW1lKERPTTo6Tm9kZUltcGwgKnN0YXJ0aW5n
UG9pbnQsIEtXUVNlbGVjdGlvbkRpcmVjdGlvbik7Ci0gICAgc3RhdGljIERPTTo6Tm9kZUltcGwg
Km5vZGVGb3JXaWRnZXQoY29uc3QgUVdpZGdldCAqKTsKLSAgICBzdGF0aWMgS1dRS0hUTUxQYXJ0
ICpwYXJ0Rm9yTm9kZShET006Ok5vZGVJbXBsICopOwotICAgIHN0YXRpYyBOU1ZpZXcgKmRvY3Vt
ZW50Vmlld0Zvck5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKLSAgICAKLSAgICBib29sIGRyYWdIeXN0
ZXJlc2lzRXhjZWVkZWQoZmxvYXQgZHJhZ0xvY2F0aW9uWCwgZmxvYXQgZHJhZ0xvY2F0aW9uWSkg
Y29uc3Q7Ci0gICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50KGNvbnN0IERPTTo6QXRvbWljU3RyaW5n
ICZldmVudFR5cGUsIEtXUUNsaXBib2FyZDo6QWNjZXNzUG9saWN5IHBvbGljeSk7Ci0gICAgYm9v
bCBkaXNwYXRjaERyYWdTcmNFdmVudChjb25zdCBET006OkF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LCBjb25zdCBRUG9pbnQgJmxvYykgY29uc3Q7Ci0KLSAgICBOU0ltYWdlICppbWFnZUZyb21SZWN0
KE5TUmVjdCByZWN0KSBjb25zdDsKLQotICAgIHZvaWQgZnJlZUNsaXBib2FyZCgpOwotCi0gICAg
a2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KERPTTo6Tm9kZUltcGwg
KiZub2RlVG9SZW1vdmUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzS0hUTUxQYXJ0KCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG9PclJlZG8oY29uc3Qga2h0
bWw6OkVkaXRDb21tYW5kUHRyICZjbWQsIGJvb2wgaXNSZWRvKTsKLQotICAgIFdlYkNvcmVCcmlk
Z2UgKl9icmlkZ2U7Ci0gICAgCi0gICAgS1dRU2lnbmFsIF9zdGFydGVkOwotICAgIEtXUVNpZ25h
bCBfY29tcGxldGVkOwotICAgIEtXUVNpZ25hbCBfY29tcGxldGVkV2l0aEJvb2w7Ci0gICAgCi0g
ICAgTlNWaWV3ICpfbW91c2VEb3duVmlldzsKLSAgICBib29sIF9tb3VzZURvd25XYXNJblN1YmZy
YW1lOwotICAgIGJvb2wgX3NlbmRpbmdFdmVudFRvU3VidmlldzsKLSAgICBib29sIF9tb3VzZURv
d25NYXlTdGFydERyYWc7Ci0gICAgYm9vbCBfbW91c2VEb3duTWF5U3RhcnRTZWxlY3Q7Ci0gICAg
Ly8gaW4gb3VyIHdpbmRvdydzIGNvb3JkcwotICAgIGludCBfbW91c2VEb3duV2luWCwgX21vdXNl
RG93bldpblk7Ci0gICAgLy8gaW4gb3VyIHZpZXcncyBjb29yZHMKLSAgICBpbnQgX21vdXNlRG93
blgsIF9tb3VzZURvd25ZOwotICAgIGZsb2F0IF9tb3VzZURvd25UaW1lc3RhbXA7Ci0gICAgaW50
IF9hY3RpdmF0aW9uRXZlbnROdW1iZXI7Ci0gICAgCi0gICAgc3RhdGljIE5TRXZlbnQgKl9jdXJy
ZW50RXZlbnQ7Ci0KLSAgICBLVVJMIF9zdWJtaXR0ZWRGb3JtVVJMOwotCi0gICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQ7Ci0gICAgT2JqQ0RPTUVs
ZW1lbnQgKl9mb3JtQWJvdXRUb0JlU3VibWl0dGVkOwotCi0gICAgc3RhdGljIFFQdHJMaXN0PEtX
UUtIVE1MUGFydD4gJm11dGFibGVJbnN0YW5jZXMoKTsKLQotICAgIEtXUVdpbmRvd1dpZGdldCAq
X3dpbmRvd1dpZGdldDsKLQotICAgIG11dGFibGUgYm9vbCBfZHJhd1NlbGVjdGlvbk9ubHk7Ci0g
ICAgYm9vbCBfaGF2ZVVuZG9SZWRvT3BlcmF0aW9uczsKLSAgICAKLSAgICBRRGljdDxjaGFyPiB1
cmxzQnJpZGdlS25vd3NBYm91dDsKLQotICAgIGZyaWVuZCBjbGFzcyBLSFRNTFBhcnQ7Ci0KLSAg
ICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpfYmluZGluZ1Jvb3Q7ICAvLyBUaGUgcm9vdCBv
YmplY3QgdXNlZCBmb3Igb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBib3VuZCBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIGEgcGx1Z2luLgotICAg
IFFQdHJMaXN0PEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3RzOwotICAgIFdl
YlNjcmlwdE9iamVjdCAqX3dpbmRvd1NjcmlwdE9iamVjdDsKLSAgICBOUE9iamVjdCAqX3dpbmRv
d1NjcmlwdE5QT2JqZWN0OwotICAgIAotICAgIFJlZlB0cjxET006Ok5vZGVJbXBsPiBfZHJhZ1Ny
YzsgICAgIC8vIGVsZW1lbnQgdGhhdCBtYXkgYmUgYSBkcmFnIHNvdXJjZSwgZm9yIHRoZSBjdXJy
ZW50IG1vdXNlIGdlc3R1cmUKLSAgICBib29sIF9kcmFnU3JjSXNMaW5rOwotICAgIGJvb2wgX2Ry
YWdTcmNJc0ltYWdlOwotICAgIGJvb2wgX2RyYWdTcmNJblNlbGVjdGlvbjsKLSAgICBib29sIF9k
cmFnU3JjTWF5QmVESFRNTCwgX2RyYWdTcmNNYXlCZVVBOyAgIC8vIEFyZSBESFRNTCBhbmQvb3Ig
dGhlIFVzZXJBZ2VudCBhbGxvd2VkIHRvIGRyYWcgb3V0PwotICAgIGJvb2wgX2RyYWdTcmNJc0RI
VE1MOwotICAgIEtXUUNsaXBib2FyZCAqX2RyYWdDbGlwYm9hcmQ7ICAgLy8gdXNlZCBvbiBvbmx5
IHRoZSBzb3VyY2Ugc2lkZSBvZiBkcmFnZ2luZwotICAgIAotICAgIG11dGFibGUgUmVmUHRyPERP
TTo6Tm9kZUltcGw+IF9lbGVtZW50VG9EcmF3OwotCi0gICAgUmVmUHRyPERPTTo6UmFuZ2VJbXBs
PiBtX21hcmtlZFRleHRSYW5nZTsKLSAgICBib29sIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVz
OwotICAgIFFWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gbV9tYXJrZWRUZXh0VW5kZXJs
aW5lczsKLQotICAgIGJvb2wgbV93aW5kb3dIYXNGb2N1czsKLX07Ci0KLWlubGluZSBLV1FLSFRN
TFBhcnQgKktXUShLSFRNTFBhcnQgKnBhcnQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEtXUUtIVE1M
UGFydCAqPihwYXJ0KTsgfQotaW5saW5lIGNvbnN0IEtXUUtIVE1MUGFydCAqS1dRKGNvbnN0IEtI
VE1MUGFydCAqcGFydCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgS1dRS0hUTUxQYXJ0ICo+
KHBhcnQpOyB9Ci0KLSNlbmRpZgpJbmRleDoga3dxL0tXUUtIVE1MUGFydEJyb3dzZXJFeHRlbnNp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbi5oCShy
ZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgIktXUUtQYXJ0c0Jyb3dz
ZXJJbnRlcmZhY2UuaCIKIAogY2xhc3MgUVdpZGdldDsKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNz
IEZyYW1lOwogCiBjbGFzcyBLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uIDogcHVibGljIEtQYXJ0
czo6QnJvd3NlckV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJ0QnJvd3NlckV4dGVu
c2lvbihLSFRNTFBhcnQgKik7CisgICAgS0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbihGcmFtZSAq
KTsKICAgICAKICAgICB2aXJ0dWFsIEtQYXJ0czo6QnJvd3NlckludGVyZmFjZSAqYnJvd3Nlcklu
dGVyZmFjZSgpIHsgcmV0dXJuICZfYnJvd3NlckludGVyZmFjZTsgfQogCkBAIC01OSw2ICs1OSw2
IEBAIHByaXZhdGU6CiAJCQkgIGNvbnN0IEtQYXJ0czo6V2luZG93QXJncyAmd2luQXJncywgCiAJ
CQkgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICoqcGFydCk7CiAKLSAgICAgS1dRS0hUTUxQYXJ0ICpf
cGFydDsKKyAgICAgTWFjRnJhbWUgKm1fZnJhbWU7CiAgICAgIEtQYXJ0czo6QnJvd3NlckludGVy
ZmFjZSBfYnJvd3NlckludGVyZmFjZTsKIH07CkluZGV4OiBrd3EvV2ViQ29yZUJyaWRnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGt3cS9XZWJDb3JlQnJpZGdlLmgJKHJldmlzaW9uIDExOTYwKQorKysga3dx
L1dlYkNvcmVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIAotY2xhc3MgS1dRS0hUTUxQYXJ0OworY2xhc3MgTWFjRnJhbWU7CiBj
bGFzcyBLSFRNTFZpZXc7CiBjbGFzcyBSZW5kZXJBcmVuYTsKIApAQCAtNDUsNyArNDUsNyBAQCB0
eXBlZGVmIGtodG1sOjpSZW5kZXJQYXJ0IEtIVE1MUmVuZGVyUGFyCiAKICNlbHNlCiAKLUBjbGFz
cyBLV1FLSFRNTFBhcnQ7CitAY2xhc3MgTWFjRnJhbWU7CiBAY2xhc3MgS0hUTUxWaWV3OwogQGNs
YXNzIEtIVE1MUmVuZGVyUGFydDsKIEBjbGFzcyBSZW5kZXJBcmVuYTsKQEAgLTE4MCwxMyArMTgw
LDEzIEBAIHR5cGVkZWYgZW51bQogLy8gdXNlZCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBm
b3Igc2ltcGxlIGFjY2VzcyB0byBXZWJDb3JlIGZ1bmN0aW9ucyB3aXRob3V0IGRlYWxpbmcKIC8v
IGRpcmVjdGx5IHdpdGggdGhlIEtIVE1MIEMrKyBjbGFzc2VzLgogCi0vLyBBIFdlYkNvcmVCcmlk
Z2UgY3JlYXRlcyBhbmQgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBLSFRNTFBhcnQuCisvLyBBIFdl
YkNvcmVCcmlkZ2UgY3JlYXRlcyBhbmQgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBGcmFtZS4KIAog
Ly8gVGhlIFdlYkNvcmVCcmlkZ2UgaW50ZXJmYWNlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHVzZSBi
eSB0aGUgbm9uLVdlYkNvcmUgc2lkZSBvZiB0aGUgYnJpZGdlLgogCiBAaW50ZXJmYWNlIFdlYkNv
cmVCcmlkZ2UgOiBOU09iamVjdAogewotICAgIEtXUUtIVE1MUGFydCAqX3BhcnQ7CisgICAgTWFj
RnJhbWUgKm1fZnJhbWU7CiAgICAgS0hUTUxSZW5kZXJQYXJ0ICpfcmVuZGVyUGFydDsKICAgICBS
ZW5kZXJBcmVuYSAqX3JlbmRlclBhcnRBcmVuYTsKICAgICBCT09MIF9zaG91bGRDcmVhdGVSZW5k
ZXJlcnM7CkBAIC0yMTQsNyArMjE0LDcgQEAgdHlwZWRlZiBlbnVtCiAvKiBDcmVhdGVzIGEgbmFt
ZSBmb3IgYW4gZnJhbWUgdW5uYW1lZCBpbiB0aGUgSFRNTC4gIEl0IHNob3VsZCBwcm9kdWNlIHJl
cGVhdGFibGUgcmVzdWx0cyBmb3IgbG9hZHMgb2YgdGhlIHNhbWUgZnJhbWVzZXQuICovCiAtIChO
U1N0cmluZyAqKWdlbmVyYXRlRnJhbWVOYW1lOwogCi0tIChLV1FLSFRNTFBhcnQgKilwYXJ0Owor
LSAoTWFjRnJhbWUgKilwYXJ0OwogCiAtICh2b2lkKXNldFBhcmVudDooV2ViQ29yZUJyaWRnZSAq
KXBhcmVudDsKIC0gKFdlYkNvcmVCcmlkZ2UgKilwYXJlbnQ7CkluZGV4OiBrd3EvS1dRS0phdmFB
cHBsZXRXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRS0phdmFBcHBsZXRXaWRnZXQuaAko
cmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRS0phdmFBcHBsZXRXaWRnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiS1dRV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiS1dRU3RyaW5nLmgiCiAKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNzIEZyYW1lOwogCiBjbGFz
cyBLSmF2YUFwcGxldFdpZGdldCA6IHB1YmxpYyBRV2lkZ2V0CiB7CiBwdWJsaWM6Ci0gICAgS0ph
dmFBcHBsZXRXaWRnZXQoY29uc3QgUVNpemUgJnNpemUsIEtIVE1MUGFydCAqYywgY29uc3QgUU1h
cDxRU3RyaW5nLCBRU3RyaW5nPiAmYXJncyk7CisgICAgS0phdmFBcHBsZXRXaWRnZXQoY29uc3Qg
UVNpemUgJnNpemUsIEZyYW1lICpjLCBjb25zdCBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+ICZhcmdz
KTsKIH07CkluZGV4OiBrd3EvS1dRTGluZUVkaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUxp
bmVFZGl0Lm1tCShyZXZpc2lvbiAxMTk2MCkKKysrIGt3cS9LV1FMaW5lRWRpdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2ltcG9ydCAiS1dRTGluZUVkaXQuaCIKIAogI2lt
cG9ydCAiS1dRRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCisjaW1wb3J0
ICJNYWNGcmFtZS5oIgogI2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogI2ltcG9ydCAiS1dRUGFsZXR0
ZS5oIgogI2ltcG9ydCAiS1dRVGV4dEZpZWxkLmgiCkluZGV4OiBrd3EvS1dRU2xvdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrd3EvS1dRU2xvdC5tbQkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRU2xv
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCA8a3htbGNvcmUv
QXNzZXJ0aW9ucy5oPgogCiAjaW1wb3J0ICJkb21fZG9jaW1wbC5oIgotI2ltcG9ydCAia2h0bWxf
cGFydC5oIgorI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgImtqc193aW5kb3cuaCIKICNpbXBv
cnQgInJlbmRlcl9mb3JtLmgiCiAjaW1wb3J0ICJyZW5kZXJfbGF5ZXIuaCIKQEAgLTg1LDkgKzg1
LDkgQEAgZW51bSBGdW5jdGlvbk51bWJlciB7CiAgICAgc2xvdFdpZGdldERlc3RydWN0ZWQsCiAg
ICAgc2xvdERhdGFfTG9hZGVyLAogICAgIHNsb3REYXRhX1hNTEh0dHBSZXF1ZXN0LAotICAgIHNs
b3RSZWRpcmVjdGlvbl9LSFRNTFBhcnQsCisgICAgc2xvdFJlZGlyZWN0aW9uX0ZyYW1lLAogICAg
IHNsb3RSZWRpcmVjdGlvbl9YTUxIdHRwUmVxdWVzdCwKLSAgICBzbG90RmluaXNoZWRfS0hUTUxQ
YXJ0LAorICAgIHNsb3RGaW5pc2hlZF9GcmFtZSwKICAgICBzbG90RmluaXNoZWRfTG9hZGVyLAog
ICAgIHNsb3RGaW5pc2hlZF9YTUxIdHRwUmVxdWVzdCwKICAgICBzbG90UmVjZWl2ZWRSZXNwb25z
ZSwKQEAgLTEwNCwxNSArMTA0LDE1IEBAIEtXUVNsb3Q6OktXUVNsb3QoUU9iamVjdCAqb2JqZWN0
LCBjb25zdCAKICAgICAgICAgfSBlbHNlCiAgICAgCiAgICAgQ0FTRShzbG90Q2xpY2tlZCwgKCks
IFJlbmRlckZvcm1FbGVtZW50KQotICAgIENBU0Uoc2xvdENoaWxkQ29tcGxldGVkLCAoKSwgS0hU
TUxQYXJ0KQotICAgIENBU0Uoc2xvdENoaWxkU3RhcnRlZCwgKEtJTzo6Sm9iICopLCBLSFRNTFBh
cnQpCi0gICAgQ0FTRShzbG90RW5kTGlmZVN1cHBvcnQsICgpLCBLSFRNTFBhcnQpCi0gICAgQ0FT
RShzbG90RmluaXNoZWRQYXJzaW5nLCAoKSwgS0hUTUxQYXJ0KQotICAgIENBU0Uoc2xvdExvYWRl
clJlcXVlc3REb25lLCAoa2h0bWw6OkRvY0xvYWRlciAqLCBraHRtbDo6Q2FjaGVkT2JqZWN0ICop
LCBLSFRNTFBhcnQpCi0gICAgQ0FTRShzbG90TG9hZGVyUmVxdWVzdFN0YXJ0ZWQsIChraHRtbDo6
RG9jTG9hZGVyICosIGtodG1sOjpDYWNoZWRPYmplY3QgKiksIEtIVE1MUGFydCkKLSAgICBDQVNF
KHNsb3RQYXJlbnRDb21wbGV0ZWQsICgpLCBLSFRNTFBhcnQpCisgICAgQ0FTRShzbG90Q2hpbGRD
b21wbGV0ZWQsICgpLCBGcmFtZSkKKyAgICBDQVNFKHNsb3RDaGlsZFN0YXJ0ZWQsIChLSU86Okpv
YiAqKSwgRnJhbWUpCisgICAgQ0FTRShzbG90RW5kTGlmZVN1cHBvcnQsICgpLCBGcmFtZSkKKyAg
ICBDQVNFKHNsb3RGaW5pc2hlZFBhcnNpbmcsICgpLCBGcmFtZSkKKyAgICBDQVNFKHNsb3RMb2Fk
ZXJSZXF1ZXN0RG9uZSwgKGtodG1sOjpEb2NMb2FkZXIgKiwga2h0bWw6OkNhY2hlZE9iamVjdCAq
KSwgRnJhbWUpCisgICAgQ0FTRShzbG90TG9hZGVyUmVxdWVzdFN0YXJ0ZWQsIChraHRtbDo6RG9j
TG9hZGVyICosIGtodG1sOjpDYWNoZWRPYmplY3QgKiksIEZyYW1lKQorICAgIENBU0Uoc2xvdFBh
cmVudENvbXBsZXRlZCwgKCksIEZyYW1lKQogICAgIENBU0Uoc2xvdFBlcmZvcm1TZWFyY2gsICgp
LCBSZW5kZXJMaW5lRWRpdCkKLSAgICBDQVNFKHNsb3RSZWRpcmVjdCwgKCksIEtIVE1MUGFydCkK
KyAgICBDQVNFKHNsb3RSZWRpcmVjdCwgKCksIEZyYW1lKQogICAgIENBU0Uoc2xvdFJldHVyblBy
ZXNzZWQsICgpLCBSZW5kZXJMaW5lRWRpdCkKICAgICBDQVNFKHNsb3RTZWxlY3RlZCwgKGludCks
IFJlbmRlclNlbGVjdCkKICAgICBDQVNFKHNsb3RTZWxlY3Rpb25DaGFuZ2VkLCAoKSwgUmVuZGVy
Rm9ybUVsZW1lbnQpCkBAIC0xNDMsMTYgKzE0MywxNiBAQCBLV1FTbG90OjpLV1FTbG90KFFPYmpl
Y3QgKm9iamVjdCwgY29uc3QgCiAJICAgIG1fZnVuY3Rpb24gPSBzbG90RGF0YV9YTUxIdHRwUmVx
dWVzdDsKIAl9CiAgICAgfSBlbHNlIGlmIChLV1FOYW1lc01hdGNoKG1lbWJlciwgU0xPVChzbG90
UmVkaXJlY3Rpb24oS0lPOjpKb2IgKiwgY29uc3QgS1VSTCYpKSkpIHsKLQlpZiAob2JqZWN0LT5p
c0tIVE1MUGFydCgpKSB7Ci0JICAgIG1fZnVuY3Rpb24gPSBzbG90UmVkaXJlY3Rpb25fS0hUTUxQ
YXJ0OworCWlmIChvYmplY3QtPmlzRnJhbWUoKSkgeworCSAgICBtX2Z1bmN0aW9uID0gc2xvdFJl
ZGlyZWN0aW9uX0ZyYW1lOwogCX0gZWxzZSB7CiAJICAgIG1fZnVuY3Rpb24gPSBzbG90UmVkaXJl
Y3Rpb25fWE1MSHR0cFJlcXVlc3Q7CiAJfQogICAgIH0gZWxzZSBpZiAoS1dRTmFtZXNNYXRjaCht
ZW1iZXIsIFNMT1Qoc2xvdEZpbmlzaGVkKEtJTzo6Sm9iICosIE5TRGF0YSAqKSkpKSB7CiAJbV9m
dW5jdGlvbiA9IHNsb3RGaW5pc2hlZF9Mb2FkZXI7ICAgICAgICAKICAgICB9IGVsc2UgaWYgKEtX
UU5hbWVzTWF0Y2gobWVtYmVyLCBTTE9UKHNsb3RGaW5pc2hlZChLSU86OkpvYiAqKSkpKSB7Ci0J
aWYgKG9iamVjdC0+aXNLSFRNTFBhcnQoKSkgewotCSAgICBtX2Z1bmN0aW9uID0gc2xvdEZpbmlz
aGVkX0tIVE1MUGFydDsKKwlpZiAob2JqZWN0LT5pc0ZyYW1lKCkpIHsKKwkgICAgbV9mdW5jdGlv
biA9IHNsb3RGaW5pc2hlZF9GcmFtZTsKIAl9IGVsc2UgewogCSAgICBtX2Z1bmN0aW9uID0gc2xv
dEZpbmlzaGVkX1hNTEh0dHBSZXF1ZXN0OwogCX0KQEAgLTE3OSwxOCArMTc5LDE4IEBAIHZvaWQg
S1dRU2xvdDo6Y2FsbCgpIGNvbnN0CiAgICAgCiAgICAgc3dpdGNoIChtX2Z1bmN0aW9uKSB7CiAg
ICAgICAgIENBU0Uoc2lnbmFsRmluaXNoZWRQYXJzaW5nLCBEb2N1bWVudEltcGwsIG1fZmluaXNo
ZWRQYXJzaW5nLmNhbGwpCi0gICAgICAgIENBU0Uoc2xvdENoaWxkQ29tcGxldGVkLCBLSFRNTFBh
cnQsIHNsb3RDaGlsZENvbXBsZXRlZCkKKyAgICAgICAgQ0FTRShzbG90Q2hpbGRDb21wbGV0ZWQs
IEZyYW1lLCBzbG90Q2hpbGRDb21wbGV0ZWQpCiAgICAgICAgIENBU0Uoc2xvdENsaWNrZWQsIFJl
bmRlckZvcm1FbGVtZW50LCBzbG90Q2xpY2tlZCkKLSAgICAgICAgQ0FTRShzbG90RW5kTGlmZVN1
cHBvcnQsIEtIVE1MUGFydCwgc2xvdEVuZExpZmVTdXBwb3J0KQotICAgICAgICBDQVNFKHNsb3RG
aW5pc2hlZFBhcnNpbmcsIEtIVE1MUGFydCwgc2xvdEZpbmlzaGVkUGFyc2luZykKLSAgICAgICAg
Q0FTRShzbG90UGFyZW50Q29tcGxldGVkLCBLSFRNTFBhcnQsIHNsb3RQYXJlbnRDb21wbGV0ZWQp
CisgICAgICAgIENBU0Uoc2xvdEVuZExpZmVTdXBwb3J0LCBGcmFtZSwgc2xvdEVuZExpZmVTdXBw
b3J0KQorICAgICAgICBDQVNFKHNsb3RGaW5pc2hlZFBhcnNpbmcsIEZyYW1lLCBzbG90RmluaXNo
ZWRQYXJzaW5nKQorICAgICAgICBDQVNFKHNsb3RQYXJlbnRDb21wbGV0ZWQsIEZyYW1lLCBzbG90
UGFyZW50Q29tcGxldGVkKQogICAgICAgICBDQVNFKHNsb3RQYXJlbnREZXN0cm95ZWQsIFdpbmRv
d1FPYmplY3QsIHBhcmVudERlc3Ryb3llZCkKICAgICAgICAgQ0FTRShzbG90UGVyZm9ybVNlYXJj
aCwgUmVuZGVyTGluZUVkaXQsIHNsb3RQZXJmb3JtU2VhcmNoKQotICAgICAgICBDQVNFKHNsb3RS
ZWRpcmVjdCwgS0hUTUxQYXJ0LCBzbG90UmVkaXJlY3QpCisgICAgICAgIENBU0Uoc2xvdFJlZGly
ZWN0LCBGcmFtZSwgc2xvdFJlZGlyZWN0KQogICAgICAgICBDQVNFKHNsb3RSZXR1cm5QcmVzc2Vk
LCBSZW5kZXJMaW5lRWRpdCwgc2xvdFJldHVyblByZXNzZWQpCiAgICAgICAgIENBU0Uoc2xvdFNl
bGVjdGlvbkNoYW5nZWQsIFJlbmRlckZvcm1FbGVtZW50LCBzbG90U2VsZWN0aW9uQ2hhbmdlZCkK
ICAgICAgICAgQ0FTRShzbG90U2xpZGVyVmFsdWVDaGFuZ2VkLCBSZW5kZXJTbGlkZXIsIHNsb3RT
bGlkZXJWYWx1ZUNoYW5nZWQpCi0gICAgICAgIENBU0Uoc2xvdFN1Ym1pdEZvcm1BZ2FpbiwgS0hU
TUxQYXJ0LCBzdWJtaXRGb3JtQWdhaW4pCisgICAgICAgIENBU0Uoc2xvdFN1Ym1pdEZvcm1BZ2Fp
biwgRnJhbWUsIHN1Ym1pdEZvcm1BZ2FpbikKICAgICAgICAgQ0FTRShzbG90VGV4dENoYW5nZWQs
IFJlbmRlclRleHRBcmVhLCBzbG90VGV4dENoYW5nZWQpCiAgICAgICAgIENBU0Uoc2xvdFdpZGdl
dERlc3RydWN0ZWQsIFJlbmRlcldpZGdldCwgc2xvdFdpZGdldERlc3RydWN0ZWQpCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEtXUVNsb3Q6OmNhbGwoYm9vbCBi
KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHN3aXRjaCAobV9mdW5jdGlv
bikgewotICAgICAgICBDQVNFKHNsb3RDaGlsZENvbXBsZXRlZFdpdGhCb29sLCBLSFRNTFBhcnQs
IHNsb3RDaGlsZENvbXBsZXRlZCkKKyAgICAgICAgQ0FTRShzbG90Q2hpbGRDb21wbGV0ZWRXaXRo
Qm9vbCwgRnJhbWUsIHNsb3RDaGlsZENvbXBsZXRlZCkKICAgICB9CiAgICAgCiAgICAgI3VuZGVm
IENBU0UKQEAgLTI2MSwxMCArMjYxLDEwIEBAIHZvaWQgS1dRU2xvdDo6Y2FsbChKb2IgKmpvYikg
Y29uc3QKICAgICAKICAgICBzd2l0Y2ggKG1fZnVuY3Rpb24pIHsKICAgICAgICAgY2FzZSBzbG90
Q2hpbGRTdGFydGVkOgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KG1fb2Jq
ZWN0LnBvaW50ZXIoKSktPnNsb3RDaGlsZFN0YXJ0ZWQoam9iKTsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEZyYW1lICo+KG1fb2JqZWN0LnBvaW50ZXIoKSktPnNsb3RDaGlsZFN0YXJ0ZWQoam9i
KTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBzbG90RmluaXNoZWRfS0hUTUxQ
YXJ0OgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KG1fb2JqZWN0LnBvaW50
ZXIoKSktPnNsb3RGaW5pc2hlZChqb2IpOworICAgICAgICBjYXNlIHNsb3RGaW5pc2hlZF9GcmFt
ZToKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lICo+KG1fb2JqZWN0LnBvaW50ZXIoKSkt
PnNsb3RGaW5pc2hlZChqb2IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIHNs
b3RGaW5pc2hlZF9YTUxIdHRwUmVxdWVzdDoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFhNTEh0
dHBSZXF1ZXN0UU9iamVjdCAqPihtX29iamVjdC5wb2ludGVyKCkpLT5zbG90RmluaXNoZWQoam9i
KTsKQEAgLTI5OSw4ICsyOTksOCBAQCB2b2lkIEtXUVNsb3Q6OmNhbGwoSm9iICpqb2IsIGNvbnN0
IEtVUkwgCiAgICAgfQogICAgIAogICAgIHN3aXRjaCAobV9mdW5jdGlvbikgewotICAgICAgICBj
YXNlIHNsb3RSZWRpcmVjdGlvbl9LSFRNTFBhcnQ6Ci0JICAgIHN0YXRpY19jYXN0PEtIVE1MUGFy
dCAqPihtX29iamVjdC5wb2ludGVyKCkpLT5zbG90UmVkaXJlY3Rpb24oam9iLCB1cmwpOworICAg
ICAgICBjYXNlIHNsb3RSZWRpcmVjdGlvbl9GcmFtZToKKwkgICAgc3RhdGljX2Nhc3Q8RnJhbWUg
Kj4obV9vYmplY3QucG9pbnRlcigpKS0+c2xvdFJlZGlyZWN0aW9uKGpvYiwgdXJsKTsKIAkgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIHNsb3RSZWRpcmVjdGlvbl9YTUxIdHRwUmVxdWVzdDoKIAkg
ICAgc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3RRT2JqZWN0ICo+KG1fb2JqZWN0LnBvaW50ZXIo
KSktPnNsb3RSZWRpcmVjdGlvbihqb2IsIHVybCk7CkBAIC0zNDgsMTAgKzM0OCwxMCBAQCB2b2lk
IEtXUVNsb3Q6OmNhbGwoRG9jTG9hZGVyICpsb2FkZXIsIENhCiAgICAgCiAgICAgc3dpdGNoICht
X2Z1bmN0aW9uKSB7CiAgICAgICAgIGNhc2Ugc2xvdExvYWRlclJlcXVlc3REb25lOgotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KG1fb2JqZWN0LnBvaW50ZXIoKSktPnNsb3RM
b2FkZXJSZXF1ZXN0RG9uZShsb2FkZXIsIGNhY2hlZE9iamVjdCk7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxGcmFtZSAqPihtX29iamVjdC5wb2ludGVyKCkpLT5zbG90TG9hZGVyUmVxdWVzdERv
bmUobG9hZGVyLCBjYWNoZWRPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIHNsb3RMb2FkZXJSZXF1ZXN0U3RhcnRlZDoKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEtI
VE1MUGFydCAqPihtX29iamVjdC5wb2ludGVyKCkpLT5zbG90TG9hZGVyUmVxdWVzdFN0YXJ0ZWQo
bG9hZGVyLCBjYWNoZWRPYmplY3QpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWUgKj4o
bV9vYmplY3QucG9pbnRlcigpKS0+c2xvdExvYWRlclJlcXVlc3RTdGFydGVkKGxvYWRlciwgY2Fj
aGVkT2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBrd3Ev
S1dRS0hUTUxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRS0hUTUxWaWV3LmNwcAkocmV2
aXNpb24gMTE5NjApCisrKyBrd3EvS1dRS0hUTUxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2ltcG9ydCAia2h0bWx2aWV3Lmgi
CiAKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIKICNpbXBv
cnQgIktXUVdpbmRvd1dpZGdldC5oIgogCiAvKgpAQCAtMzYsNyArMzYsNyBAQAogCiBRV2lkZ2V0
ICpLSFRNTFZpZXc6OnRvcExldmVsV2lkZ2V0KCkgY29uc3QgCiB7Ci0gICAgcmV0dXJuIEtXUShw
YXJ0KCkpLT50b3BMZXZlbFdpZGdldCgpOworICAgIHJldHVybiBNYWMoZnJhbWUoKSktPnRvcExl
dmVsV2lkZ2V0KCk7CiB9CiAKIFFQb2ludCBLSFRNTFZpZXc6OnZpZXdwb3J0VG9HbG9iYWwoY29u
c3QgUVBvaW50ICZwKSBjb25zdApJbmRleDoga3dxL0tXUU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGt3cS9LV1FPYmplY3QuaAkocmV2aXNpb24gMTE5NjApCisrKyBrd3EvS1dRT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dERlZmVyc1RpbWVycyhib29sIGRlZmVycyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNLSFRNTExv
YWRlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tIVE1MUGFydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc0ZyYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS0hUTUxW
aWV3KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS1BhcnRzUmVhZE9ubHlQYXJ0KCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzUUZyYW1lKCkgY29uc3Q7CkluZGV4OiBrd3EvS1dRS0hU
TUxGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUtIVE1MRmFjdG9yeS5oCShyZXZpc2lv
biAxMTk2MCkKKysrIGt3cS9LV1FLSFRNTEZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTAgKzI2LDkgQEAKICNpZm5kZWYgX19raHRtbF9mYWN0b3J5X2hfXwogI2RlZmluZSBfX2todG1s
X2ZhY3RvcnlfaF9fCiAKLSNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAiS1dRS1Bh
cnRzSGlzdG9yeVByb3ZpZGVyLmgiCiAKLWNsYXNzIEtIVE1MUGFydDsKK2NsYXNzIEZyYW1lOwog
Y2xhc3MgS0hUTUxTZXR0aW5nczsKIAogY2xhc3MgS0hUTUxGYWN0b3J5CkluZGV4OiBrd3EvRE9N
SW50ZXJuYWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0RPTUludGVybmFsLm1tCShyZXZpc2lvbiAx
MTk2MCkKKysrIGt3cS9ET01JbnRlcm5hbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQAogI2ltcG9ydCAia2pzX3Byb3h5LmgiCiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUuaCIKIAog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIuaD4KICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWVfcm9vdC5oPgpAQCAtMTgzLDE0ICsxODMsMTQgQEAgRE9NU3RyaW5nOjpE
T01TdHJpbmcoTlNTdHJpbmcgKnN0cikKICAgICBOb2RlSW1wbCAqbm9kZUltcGwgPSBbbiBfbm9k
ZUltcGxdOwogCiAgICAgLy8gRGlnIHVwIEludGVycHJldGVyIGFuZCBFeGVjU3RhdGUuCi0gICAg
S0hUTUxQYXJ0ICpwYXJ0ID0gbm9kZUltcGwtPmdldERvY3VtZW50KCktPnBhcnQoKTsKLSAgICBJ
bnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBwYXJ0LT5qU2NyaXB0KCktPmludGVycHJldGVyKCk7
CisgICAgRnJhbWUgKmZyYW1lID0gbm9kZUltcGwtPmdldERvY3VtZW50KCktPmZyYW1lKCk7Cisg
ICAgSW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gZnJhbWUtPmpTY3JpcHQoKS0+aW50ZXJwcmV0
ZXIoKTsKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygpOwog
ICAgIAogICAgIC8vIEdldCAob3IgY3JlYXRlKSBhIGNhY2hlZCBKUyBvYmplY3QgZm9yIHRoZSBE
T00gbm9kZS4KICAgICBKU09iamVjdCAqc2NyaXB0SW1wID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qg
Kj4oZ2V0RE9NTm9kZShleGVjLCBub2RlSW1wbCkpOwogCi0gICAgY29uc3QgUm9vdE9iamVjdCAq
ZXhlY3V0aW9uQ29udGV4dCA9IEtXUShwYXJ0KS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICBj
b25zdCBSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0ID0gTWFjKGZyYW1lKS0+YmluZGluZ1Jv
b3RPYmplY3QoKTsKIAogICAgIFtzZWxmIF9pbml0aWFsaXplV2l0aE9iamVjdEltcDpzY3JpcHRJ
bXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDpleGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRl
eHQ6ZXhlY3V0aW9uQ29udGV4dF07CiB9CkluZGV4OiBrd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrd3EvV2ViQ29yZUJyaWRnZS5tbQkocmV2aXNpb24gMTE5NjApCisrKyBrd3Ev
V2ViQ29yZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9y
dCAiaHRtbF9mb3JtaW1wbC5oIgogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwuaCIKICNpbXBvcnQg
Imh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJraHRtbF9wYXJ0LmgiCisjaW1wb3J0ICJNYWNGcmFt
ZS5oIgogI2ltcG9ydCAia2h0bWx2aWV3LmgiCiAjaW1wb3J0ICJranNfcHJveHkuaCIKICNpbXBv
cnQgImtqc193aW5kb3cuaCIKQEAgLTcyLDcgKzcyLDcgQEAKICNpbXBvcnQgIktXUUZvbnQuaCIK
ICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIktXUUZyYW1lLmgiCi0j
aW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKKyNpbXBvcnQgIk1hY0ZyYW1lLmgiCiAjaW1wb3J0ICJL
V1FMb2FkZXIuaCIKICNpbXBvcnQgIktXUVBhZ2VTdGF0ZS5oIgogI2ltcG9ydCAiS1dRUmVuZGVy
VHJlZURlYnVnLmgiCkBAIC0xOTIsMjUgKzE5MiwyNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVSZW5k
ZXJpbmdGb3JCaW5kaW5ncyAoCiAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgRE9NOjpEb2N1bWVudEltcGwgKmRvYyA9IHN0YXRpY19jYXN0PERPTTo6RG9j
dW1lbnRJbXBsKj4od2luZG93LT5wYXJ0KCktPnhtbERvY0ltcGwoKSk7CisgICAgRE9NOjpEb2N1
bWVudEltcGwgKmRvYyA9IHN0YXRpY19jYXN0PERPTTo6RG9jdW1lbnRJbXBsKj4od2luZG93LT5m
cmFtZSgpLT54bWxEb2NJbXBsKCkpOwogICAgIGlmIChkb2MpCiAgICAgICAgIGRvYy0+dXBkYXRl
UmVuZGVyaW5nKCk7CiB9CiAKLXN0YXRpYyBCT09MIHBhcnRIYXNTZWxlY3Rpb24oV2ViQ29yZUJy
aWRnZSAqYnJpZGdlKQorc3RhdGljIEJPT0wgZnJhbWVIYXNTZWxlY3Rpb24oV2ViQ29yZUJyaWRn
ZSAqYnJpZGdlKQogewogICAgIGlmICghYnJpZGdlKQogICAgICAgICByZXR1cm4gTk87CiAgICAg
Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gW2JyaWRnZSBwYXJ0XTsKLSAgICBpZiAoIXBhcnQpCisg
ICAgRnJhbWUgKmZyYW1lID0gW2JyaWRnZSBwYXJ0XTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gTk87CiAgICAgICAgIAotICAgIGlmIChwYXJ0LT5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
Tk87CiAKICAgICAvLyBJZiBhIHBhcnQgaGFzIGEgc2VsZWN0aW9uLCBpdCBzaG91bGQgYWxzbyBo
YXZlIGEgZG9jdW1lbnQuICAgICAgICAKLSAgICBBU1NFUlQocGFydC0+eG1sRG9jSW1wbCgpKTsK
KyAgICBBU1NFUlQoZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAKICAgICByZXR1cm4gWUVTOwogfQpA
QCAtNTI2LDE2ICs1MjYsMTYgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsK
IAogKyAoV2ViQ29yZUJyaWRnZSAqKWJyaWRnZUZvckRPTURvY3VtZW50OihET01Eb2N1bWVudCAq
KWRvY3VtZW50CiB7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gW2RvY3VtZW50IF9kb2N1bWVudElt
cGxdLT5wYXJ0KCk7Ci0gICAgcmV0dXJuIHBhcnQgPyBLV1EocGFydCktPmJyaWRnZSgpIDogbmls
OworICAgIEZyYW1lICpmcmFtZSA9IFtkb2N1bWVudCBfZG9jdW1lbnRJbXBsXS0+ZnJhbWUoKTsK
KyAgICByZXR1cm4gZnJhbWUgPyBNYWMoZnJhbWUpLT5icmlkZ2UoKSA6IG5pbDsKIH0KIAogLSBp
bml0CiB7CiAgICAgW3N1cGVyIGluaXRdOwogICAgIAotICAgIF9wYXJ0ID0gbmV3IEtXUUtIVE1M
UGFydDsKLSAgICBfcGFydC0+c2V0QnJpZGdlKHNlbGYpOworICAgIG1fZnJhbWUgPSBuZXcgTWFj
RnJhbWU7CisgICAgbV9mcmFtZS0+c2V0QnJpZGdlKHNlbGYpOwogCiAgICAgaWYgKCFpbml0aWFs
aXplZE9iamVjdENhY2hlU2l6ZSl7CiAgICAgICAgIGtodG1sOjpDYWNoZTo6c2V0U2l6ZShbc2Vs
ZiBnZXRPYmplY3RDYWNoZVNpemVdKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBzdGF0aWMgYm9vbCBp
bml0aWFsaXplZEtKUyA9IEZBTFNFOwogCiAtICh2b2lkKWluaXRpYWxpemVTZXR0aW5nczogKFdl
YkNvcmVTZXR0aW5ncyAqKXNldHRpbmdzCiB7Ci0gICAgX3BhcnQtPnNldFNldHRpbmdzIChbc2V0
dGluZ3Mgc2V0dGluZ3NdKTsKKyAgICBtX2ZyYW1lLT5zZXRTZXR0aW5ncyAoW3NldHRpbmdzIHNl
dHRpbmdzXSk7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAtNTY5LDggKzU2OSw4IEBAIHN0YXRp
YyBib29sIGluaXRpYWxpemVkS0pTID0gRkFMU0U7CiAgICAgaWYgKF9yZW5kZXJQYXJ0KSB7CiAg
ICAgICAgIF9yZW5kZXJQYXJ0LT5kZXJlZihfcmVuZGVyUGFydEFyZW5hKTsKICAgICB9Ci0gICAg
X3BhcnQtPnNldEJyaWRnZShuaWwpOwotICAgIF9wYXJ0LT5kZXJlZigpOworICAgIG1fZnJhbWUt
PnNldEJyaWRnZShuaWwpOworICAgIG1fZnJhbWUtPmRlcmVmKCk7CiAgICAgICAgIAogICAgIFtz
dXBlciBkZWFsbG9jXTsKIH0KQEAgLTU4NSwxNSArNTg1LDE1IEBAIHN0YXRpYyBib29sIGluaXRp
YWxpemVkS0pTID0gRkFMU0U7CiAgICAgaWYgKF9yZW5kZXJQYXJ0KSB7CiAgICAgICAgIF9yZW5k
ZXJQYXJ0LT5kZXJlZihfcmVuZGVyUGFydEFyZW5hKTsKICAgICB9Ci0gICAgX3BhcnQtPnNldEJy
aWRnZShuaWwpOwotICAgIF9wYXJ0LT5kZXJlZigpOworICAgIG1fZnJhbWUtPnNldEJyaWRnZShu
aWwpOworICAgIG1fZnJhbWUtPmRlcmVmKCk7CiAgICAgICAgIAogICAgIFtzdXBlciBmaW5hbGl6
ZV07CiB9CiAKLS0gKEtXUUtIVE1MUGFydCAqKXBhcnQKKy0gKE1hY0ZyYW1lICopcGFydAogewot
ICAgIHJldHVybiBfcGFydDsKKyAgICByZXR1cm4gbV9mcmFtZTsKIH0KIAogLSAodm9pZClzZXRS
ZW5kZXJQYXJ0OihLSFRNTFJlbmRlclBhcnQgKiluZXdQYXJ0OwpAQCAtNjEzLDYwICs2MTMsNjAg
QEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsKIAogLSAodm9pZClzZXRQYXJl
bnQ6KFdlYkNvcmVCcmlkZ2UgKilwYXJlbnQKIHsKLSAgICBfcGFydC0+c2V0UGFyZW50KFtwYXJl
bnQgcGFydF0pOworICAgIG1fZnJhbWUtPnNldFBhcmVudChbcGFyZW50IHBhcnRdKTsKIH0KIAog
LSAoV2ViQ29yZUJyaWRnZSAqKXBhcmVudAogewotICAgIEtXUUtIVE1MUGFydCAqcGFyZW50UGFy
dCA9IEtXUShfcGFydC0+cGFyZW50UGFydCgpKTsKLSAgICBpZiAoIXBhcmVudFBhcnQpCisgICAg
TWFjRnJhbWUgKnBhcmVudEZyYW1lID0gTWFjKG1fZnJhbWUtPnBhcmVudEZyYW1lKCkpOworICAg
IGlmICghcGFyZW50RnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHBhcmVu
dFBhcnQtPmJyaWRnZSgpOworICAgIHJldHVybiBwYXJlbnRGcmFtZS0+YnJpZGdlKCk7CiB9CiAK
IC0gKHZvaWQpcHJvdmlzaW9uYWxMb2FkU3RhcnRlZAogewotICAgIF9wYXJ0LT5wcm92aXNpb25h
bExvYWRTdGFydGVkKCk7CisgICAgbV9mcmFtZS0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwog
fQogCiAtICh2b2lkKW9wZW5VUkw6KE5TVVJMICopVVJMIHJlbG9hZDooQk9PTClyZWxvYWQgY29u
dGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgcmVmcmVzaDooTlNTdHJpbmcgKilyZWZy
ZXNoIGxhc3RNb2RpZmllZDooTlNEYXRlICopbGFzdE1vZGlmaWVkIHBhZ2VDYWNoZTooTlNEaWN0
aW9uYXJ5ICopcGFnZUNhY2hlCiB7CiAgICAgaWYgKHBhZ2VDYWNoZSkgewogICAgICAgICBLV1FQ
YWdlU3RhdGUgKnN0YXRlID0gW3BhZ2VDYWNoZSBvYmplY3RGb3JLZXk6V2ViQ29yZVBhZ2VDYWNo
ZVN0YXRlS2V5XTsKLSAgICAgICAgX3BhcnQtPm9wZW5VUkxGcm9tUGFnZUNhY2hlKHN0YXRlKTsK
KyAgICAgICAgbV9mcmFtZS0+b3BlblVSTEZyb21QYWdlQ2FjaGUoc3RhdGUpOwogICAgICAgICBb
c3RhdGUgaW52YWxpZGF0ZV07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAg
IC8vIGFyZ3VtZW50cwotICAgIFVSTEFyZ3MgYXJncyhfcGFydC0+YnJvd3NlckV4dGVuc2lvbigp
LT51cmxBcmdzKCkpOworICAgIFVSTEFyZ3MgYXJncyhtX2ZyYW1lLT5icm93c2VyRXh0ZW5zaW9u
KCktPnVybEFyZ3MoKSk7CiAgICAgYXJncy5yZWxvYWQgPSByZWxvYWQ7CiAgICAgaWYgKGNvbnRl
bnRUeXBlKSB7CiAgICAgICAgIGFyZ3Muc2VydmljZVR5cGUgPSBRU3RyaW5nOjpmcm9tTlNTdHJp
bmcoY29udGVudFR5cGUpOwogICAgIH0KLSAgICBfcGFydC0+YnJvd3NlckV4dGVuc2lvbigpLT5z
ZXRVUkxBcmdzKGFyZ3MpOworICAgIG1fZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0VVJM
QXJncyhhcmdzKTsKIAogICAgIC8vIG9wZW5pbmcgdGhlIFVSTAotICAgIGlmIChfcGFydC0+ZGlk
T3BlblVSTChVUkwpKSB7CisgICAgaWYgKG1fZnJhbWUtPmRpZE9wZW5VUkwoVVJMKSkgewogICAg
ICAgICAvLyB0aGluZ3Mgd2UgaGF2ZSB0byBzZXQgdXAgYWZ0ZXIgY2FsbGluZyBkaWRPcGVuVVJM
CiAgICAgICAgIGlmIChyZWZyZXNoKSB7Ci0gICAgICAgICAgICBfcGFydC0+YWRkTWV0YURhdGEo
Imh0dHAtcmVmcmVzaCIsIFFTdHJpbmc6OmZyb21OU1N0cmluZyhyZWZyZXNoKSk7CisgICAgICAg
ICAgICBtX2ZyYW1lLT5hZGRNZXRhRGF0YSgiaHR0cC1yZWZyZXNoIiwgUVN0cmluZzo6ZnJvbU5T
U3RyaW5nKHJlZnJlc2gpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7
CiAgICAgICAgICAgICBOU1N0cmluZyAqbW9kaWZpZWRTdHJpbmcgPSBbbGFzdE1vZGlmaWVkIGRl
c2NyaXB0aW9uV2l0aENhbGVuZGFyRm9ybWF0OkAiJWEgJWIgJWQgJVkgJUg6JU06JVMiIHRpbWVa
b25lOm5pbCBsb2NhbGU6bmlsXTsKLSAgICAgICAgICAgIF9wYXJ0LT5hZGRNZXRhRGF0YSgibW9k
aWZpZWQiLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcobW9kaWZpZWRTdHJpbmcpKTsKKyAgICAgICAg
ICAgIG1fZnJhbWUtPmFkZE1ldGFEYXRhKCJtb2RpZmllZCIsIFFTdHJpbmc6OmZyb21OU1N0cmlu
Zyhtb2RpZmllZFN0cmluZykpOwogICAgICAgICB9CiAgICAgfQogfQogCiAtICh2b2lkKXNldEVu
Y29kaW5nOihOU1N0cmluZyAqKWVuY29kaW5nIHVzZXJDaG9zZW46KEJPT0wpdXNlckNob3Nlbgog
ewotICAgIF9wYXJ0LT5zZXRFbmNvZGluZyhRU3RyaW5nOjpmcm9tTlNTdHJpbmcoZW5jb2Rpbmcp
LCB1c2VyQ2hvc2VuKTsKKyAgICBtX2ZyYW1lLT5zZXRFbmNvZGluZyhRU3RyaW5nOjpmcm9tTlNT
dHJpbmcoZW5jb2RpbmcpLCB1c2VyQ2hvc2VuKTsKIH0KIAogLSAodm9pZClhZGREYXRhOihOU0Rh
dGEgKilkYXRhCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1wbCgp
OworICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIAog
ICAgIC8vIERvY3VtZW50IG1heSBiZSBuaWwgaWYgdGhlIHBhcnQgaXMgYWJvdXQgdG8gcmVkaXJl
Y3QKICAgICAvLyBhcyBhIHJlc3VsdCBvZiBKUyBleGVjdXRpbmcgZHVyaW5nIGxvYWQsIGkuZS4g
b25lIGZyYW1lCkBAIC02NzQsMjggKzY3NCwyOCBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEtK
UyA9IEZBTFNFOwogICAgIC8vIGhhcyBiZWVuIGNyZWF0ZWQuIAogICAgIGlmIChkb2MpewogICAg
ICAgICBkb2MtPnNldFNob3VsZENyZWF0ZVJlbmRlcmVycyhbc2VsZiBzaG91bGRDcmVhdGVSZW5k
ZXJlcnNdKTsKLSAgICAgICAgX3BhcnQtPmFkZERhdGEoKGNvbnN0IGNoYXIgKilbZGF0YSBieXRl
c10sIFtkYXRhIGxlbmd0aF0pOworICAgICAgICBtX2ZyYW1lLT5hZGREYXRhKChjb25zdCBjaGFy
ICopW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdKTsKICAgICB9CiB9CiAKIC0gKHZvaWQpY2xv
c2VVUkwKIHsKLSAgICBfcGFydC0+Y2xvc2VVUkwoKTsKKyAgICBtX2ZyYW1lLT5jbG9zZVVSTCgp
OwogfQogCiAtICh2b2lkKXN0b3BMb2FkaW5nCiB7Ci0gICAgX3BhcnQtPnN0b3BMb2FkaW5nKCk7
CisgICAgbV9mcmFtZS0+c3RvcExvYWRpbmcoKTsKIH0KIAogLSAodm9pZClkaWROb3RPcGVuVVJM
OihOU1VSTCAqKVVSTCBwYWdlQ2FjaGU6KE5TRGljdGlvbmFyeSAqKXBhZ2VDYWNoZQogewotICAg
IF9wYXJ0LT5kaWROb3RPcGVuVVJMKEtVUkwoVVJMKS51cmwoKSk7CisgICAgbV9mcmFtZS0+ZGlk
Tm90T3BlblVSTChLVVJMKFVSTCkudXJsKCkpOwogCiAgICAgLy8gV2UgbWlnaHQgaGF2ZSBtYWRl
IGEgcGFnZSBjYWNoZSBpdGVtLCBidXQgbm93IHdlJ3JlIGJhaWxpbmcgb3V0IGR1ZSB0byBhbiBl
cnJvciBiZWZvcmUgd2UgZXZlcgogICAgIC8vIHRyYW5zaXRpb25lZCB0byB0aGUgbmV3IHBhZ2Ug
KGJlZm9yZSBXZWJGcmFtZVN0YXRlPT1jb21taXQpLiAgVGhlIGdvYWwgaGVyZSBpcyB0byByZXN0
b3JlIGFueSBzdGF0ZQogICAgIC8vIHNvIHRoYXQgdGhlIGV4aXN0aW5nIHZpZXcgKHRoYXQgd2Vu
ZXZlciBnb3QgZmFyIGVub3VnaCB0byByZXBsYWNlKSBjYW4gY29udGludWUgYmVpbmcgdXNlZC4K
LSAgICBEb2N1bWVudEltcGwgKmRvYyA9IF9wYXJ0LT54bWxEb2NJbXBsKCk7CisgICAgRG9jdW1l
bnRJbXBsICpkb2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgICAgaWYgKGRvYykgewogICAg
ICAgICBkb2MtPnNldEluUGFnZUNhY2hlKE5PKTsKICAgICB9CkBAIC03MTUsNyArNzE1LDcgQEAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsKIAogLSAodm9pZClzYXZlRG9jdW1l
bnRTdGF0ZQogewotICAgIERvY3VtZW50SW1wbCAqZG9jID0gX3BhcnQtPnhtbERvY0ltcGwoKTsK
KyAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICBpZiAo
ZG9jICE9IDApewogICAgICAgICBRU3RyaW5nTGlzdCBsaXN0ID0gZG9jLT5kb2NTdGF0ZSgpOwog
ICAgICAgICBOU011dGFibGVBcnJheSAqZG9jdW1lbnRTdGF0ZSA9IFtbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CkBAIC03MzAsNyArNzMwLDcgQEAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsKIAogLSAodm9pZClyZXN0b3JlRG9jdW1lbnRTdGF0
ZQogewotICAgIERvY3VtZW50SW1wbCAqZG9jID0gX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBE
b2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICAKICAgICBpZiAo
ZG9jICE9IDApewogICAgICAgICBOU0FycmF5ICpkb2N1bWVudFN0YXRlID0gW3NlbGYgZG9jdW1l
bnRTdGF0ZV07CkBAIC03NDcsNDkgKzc0Nyw0OSBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEtK
UyA9IEZBTFNFOwogCiAtICh2b2lkKXNjcm9sbFRvQW5jaG9yV2l0aFVSTDooTlNVUkwgKilVUkwK
IHsKLSAgICBfcGFydC0+c2Nyb2xsVG9BbmNob3IoS1VSTChVUkwpLnVybCgpLmxhdGluMSgpKTsK
KyAgICBtX2ZyYW1lLT5zY3JvbGxUb0FuY2hvcihLVVJMKFVSTCkudXJsKCkubGF0aW4xKCkpOwog
fQogCiAtIChCT09MKXNjcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFdlYlNjcm9sbERpcmVjdGlv
bilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5
CiB7Ci0gICAgaWYgKF9wYXJ0ID09IE5VTEwpIHsKKyAgICBpZiAobV9mcmFtZSA9PSBOVUxMKSB7
CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgcmV0dXJuIF9wYXJ0LT5zY3JvbGxPdmVy
ZmxvdygoS1dRU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiwgKEtXUVNjcm9sbEdyYW51bGFyaXR5
KWdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+c2Nyb2xsT3ZlcmZsb3coKEtXUVNj
cm9sbERpcmVjdGlvbilkaXJlY3Rpb24sIChLV1FTY3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0
eSk7CiB9CiAKIC0gKEJPT0wpc2VuZFNjcm9sbFdoZWVsRXZlbnQ6KE5TRXZlbnQgKilldmVudAog
ewotICAgIHJldHVybiBfcGFydCA/IF9wYXJ0LT53aGVlbEV2ZW50KGV2ZW50KSA6IE5POworICAg
IHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+d2hlZWxFdmVudChldmVudCkgOiBOTzsKIH0KIAog
LSAoQk9PTClzYXZlRG9jdW1lbnRUb1BhZ2VDYWNoZQogewotICAgIERvY3VtZW50SW1wbCAqZG9j
ID0gX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUt
PnhtbERvY0ltcGwoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIE5POwogICAgIGlm
ICghZG9jLT52aWV3KCkpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIF9wYXJ0LT5jbGVhclRp
bWVycygpOworICAgIG1fZnJhbWUtPmNsZWFyVGltZXJzKCk7CiAKICAgICBKU0xvY2sgbG9jazsK
IAogICAgIFNhdmVkUHJvcGVydGllcyAqd2luZG93UHJvcGVydGllcyA9IG5ldyBTYXZlZFByb3Bl
cnRpZXM7Ci0gICAgX3BhcnQtPnNhdmVXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMp
OworICAgIG1fZnJhbWUtPnNhdmVXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMpOwog
CiAgICAgU2F2ZWRQcm9wZXJ0aWVzICpsb2NhdGlvblByb3BlcnRpZXMgPSBuZXcgU2F2ZWRQcm9w
ZXJ0aWVzOwotICAgIF9wYXJ0LT5zYXZlTG9jYXRpb25Qcm9wZXJ0aWVzKGxvY2F0aW9uUHJvcGVy
dGllcyk7CisgICAgbV9mcmFtZS0+c2F2ZUxvY2F0aW9uUHJvcGVydGllcyhsb2NhdGlvblByb3Bl
cnRpZXMpOwogICAgIAogICAgIFNhdmVkQnVpbHRpbnMgKmludGVycHJldGVyQnVpbHRpbnMgPSBu
ZXcgU2F2ZWRCdWlsdGluczsKLSAgICBfcGFydC0+c2F2ZUludGVycHJldGVyQnVpbHRpbnMoKmlu
dGVycHJldGVyQnVpbHRpbnMpOworICAgIG1fZnJhbWUtPnNhdmVJbnRlcnByZXRlckJ1aWx0aW5z
KCppbnRlcnByZXRlckJ1aWx0aW5zKTsKIAogICAgIEtXUVBhZ2VTdGF0ZSAqcGFnZVN0YXRlID0g
W1tLV1FQYWdlU3RhdGUgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnQ6ZG9jCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDpf
cGFydC0+bV91cmwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMOm1fZnJhbWUtPm1fdXJsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93UHJvcGVydGllczp3aW5k
b3dQcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uUHJvcGVydGllczpsb2NhdGlvblByb3BlcnRpZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRlckJ1aWx0aW5z
OmludGVycHJldGVyQnVpbHRpbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdXNlZFRpbWVvdXRzOl9wYXJ0LT5wYXVzZVRpbWVvdXRzKCld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF1c2VkVGltZW91dHM6bV9mcmFtZS0+cGF1c2VUaW1lb3V0cygpXTsKIAogICAgIEJPT0wgcmVz
dWx0ID0gW3NlbGYgc2F2ZURvY3VtZW50VG9QYWdlQ2FjaGU6cGFnZVN0YXRlXTsKIApAQCAtODAw
LDM2ICs4MDAsMzYgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsKIAogLSAo
Qk9PTCljYW5DYWNoZVBhZ2UKIHsKLSAgICByZXR1cm4gX3BhcnQtPmNhbkNhY2hlUGFnZSgpOwor
ICAgIHJldHVybiBtX2ZyYW1lLT5jYW5DYWNoZVBhZ2UoKTsKIH0KIAogLSAodm9pZCljbGVhcgog
ewotICAgIF9wYXJ0LT5jbGVhcigpOworICAgIG1fZnJhbWUtPmNsZWFyKCk7CiB9CiAKIC0gKHZv
aWQpZW5kCiB7Ci0gICAgX3BhcnQtPmVuZCgpOworICAgIG1fZnJhbWUtPmVuZCgpOwogfQogCiAt
ICh2b2lkKXN0b3AKIHsKLSAgICBfcGFydC0+c3RvcCgpOworICAgIG1fZnJhbWUtPnN0b3AoKTsK
IH0KIAogLSAodm9pZCloYW5kbGVGYWxsYmFja0NvbnRlbnQKIHsKLSAgICBfcGFydC0+aGFuZGxl
RmFsbGJhY2tDb250ZW50KCk7CisgICAgbV9mcmFtZS0+aGFuZGxlRmFsbGJhY2tDb250ZW50KCk7
CiB9CiAKIC0gKHZvaWQpY3JlYXRlS0hUTUxWaWV3V2l0aE5TVmlldzooTlNWaWV3ICopdmlldyBt
YXJnaW5XaWR0aDooaW50KW13IG1hcmdpbkhlaWdodDooaW50KW1oCiB7Ci0gICAgLy8gSWYgd2Ug
b3duIHRoZSB2aWV3LCBkZWxldGUgdGhlIG9sZCBvbmUgLSBvdGhlcndpc2UgdGhlIHJlbmRlciBf
cGFydCB3aWxsIHRha2UgY2FyZSBvZiBkZWxldGluZyB0aGUgdmlldy4KKyAgICAvLyBJZiB3ZSBv
d24gdGhlIHZpZXcsIGRlbGV0ZSB0aGUgb2xkIG9uZSAtIG90aGVyd2lzZSB0aGUgcmVuZGVyIG1f
ZnJhbWUgd2lsbCB0YWtlIGNhcmUgb2YgZGVsZXRpbmcgdGhlIHZpZXcuCiAgICAgW3NlbGYgcmVt
b3ZlRnJvbUZyYW1lXTsKIAotICAgIEtIVE1MVmlldyAqa3ZpZXcgPSBuZXcgS0hUTUxWaWV3KF9w
YXJ0LCAwKTsKLSAgICBfcGFydC0+c2V0Vmlldyhrdmlldyk7CisgICAgS0hUTUxWaWV3ICprdmll
dyA9IG5ldyBLSFRNTFZpZXcobV9mcmFtZSwgMCk7CisgICAgbV9mcmFtZS0+c2V0Vmlldyhrdmll
dyk7CiAgICAga3ZpZXctPmRlcmVmKCk7CiAKICAgICBrdmlldy0+c2V0Vmlldyh2aWV3KTsKQEAg
LTg0MSwxOSArODQxLDE5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVkS0pTID0gRkFMU0U7CiAK
IC0gKHZvaWQpc2Nyb2xsVG9BbmNob3I6KE5TU3RyaW5nICopYQogewotICAgIF9wYXJ0LT5nb3Rv
QW5jaG9yKFFTdHJpbmc6OmZyb21OU1N0cmluZyhhKSk7CisgICAgbV9mcmFtZS0+Z290b0FuY2hv
cihRU3RyaW5nOjpmcm9tTlNTdHJpbmcoYSkpOwogfQogCiAtIChCT09MKWlzU2VsZWN0aW9uRWRp
dGFibGUKIHsKICAgICAvLyBFRElUIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGNvbnNpZGVyIHRoZSBl
bnRpcmUgc2VsZWN0ZWQgcmFuZ2UKLSAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gX3BhcnQtPnNl
bGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKICAgICByZXR1cm4gc3RhcnROb2RlID8g
c3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpIDogTk87CiB9CiAKIC0gKFdlYlNlbGVjdGlv
blN0YXRlKXNlbGVjdGlvblN0YXRlCiB7Ci0gICAgc3dpdGNoIChfcGFydC0+c2VsZWN0aW9uKCku
c3RhdGUoKSkgeworICAgIHN3aXRjaCAobV9mcmFtZS0+c2VsZWN0aW9uKCkuc3RhdGUoKSkgewog
ICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6CiAgICAgICAgICAgICByZXR1
cm4gV2ViU2VsZWN0aW9uU3RhdGVOb25lOwogICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkNBUkVUOgpAQCAtODY5LDcgKzg2OSw3IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVkS0pT
ID0gRkFMU0U7CiAtIChOU1N0cmluZyAqKV9kb2N1bWVudFR5cGVTdHJpbmcKIHsKICAgICBOU1N0
cmluZyAqZG9jdW1lbnRUeXBlU3RyaW5nID0gbmlsOwotICAgIERPTTo6RG9jdW1lbnRJbXBsICpk
b2MgPSBfcGFydC0+eG1sRG9jSW1wbCgpOworICAgIERPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBt
X2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgICAgaWYgKGRvYykgewogICAgICAgICBEb2N1bWVudFR5
cGVJbXBsICpkb2N0eXBlID0gZG9jLT5yZWFsRG9jVHlwZSgpOwogICAgICAgICBpZiAoZG9jdHlw
ZSkgewpAQCAtOTI2LDI3ICs5MjYsMjcgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBG
QUxTRTsKIAogLSAoTlNTdHJpbmcgKilzZWxlY3RlZFN0cmluZwogewotICAgIFFTdHJpbmcgdGV4
dCA9IF9wYXJ0LT5zZWxlY3RlZFRleHQoKTsKLSAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyks
IF9wYXJ0LT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIFFTdHJpbmcgdGV4dCA9
IG1fZnJhbWUtPnNlbGVjdGVkVGV4dCgpOworICAgIHRleHQucmVwbGFjZShRQ2hhcignXFwnKSwg
bV9mcmFtZS0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICByZXR1cm4gW1t0ZXh0
LmdldE5TU3RyaW5nKCkgY29weV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU1N0cmluZyAqKXN0
cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAgICAgUVN0cmluZyB0ZXh0ID0gcGxh
aW5UZXh0KFtyYW5nZSBfcmFuZ2VJbXBsXSk7Ci0gICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcp
LCBfcGFydC0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICB0ZXh0LnJlcGxhY2Uo
UUNoYXIoJ1xcJyksIG1fZnJhbWUtPmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAg
cmV0dXJuIFtbdGV4dC5nZXROU1N0cmluZygpIGNvcHldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAo
dm9pZClzZWxlY3RBbGwKIHsKLSAgICBfcGFydC0+c2VsZWN0QWxsKCk7CisgICAgbV9mcmFtZS0+
c2VsZWN0QWxsKCk7CiB9CiAKIC0gKHZvaWQpZGVzZWxlY3RBbGwKIHsKICAgICBbc2VsZiBkZXNl
bGVjdFRleHRdOwotICAgIERvY3VtZW50SW1wbCAqZG9jID0gX3BhcnQtPnhtbERvY0ltcGwoKTsK
KyAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICBpZiAo
ZG9jKSB7CiAgICAgICAgIGRvYy0+c2V0Rm9jdXNOb2RlKDApOwogICAgIH0KQEAgLTk1NCwyOSAr
OTU0LDI5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVkS0pTID0gRkFMU0U7CiAKIC0gKHZvaWQp
ZGVzZWxlY3RUZXh0CiB7Ci0gICAgX3BhcnQtPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgbV9mcmFt
ZS0+Y2xlYXJTZWxlY3Rpb24oKTsKIH0KIAogLSAoQk9PTClpc0ZyYW1lU2V0CiB7Ci0gICAgcmV0
dXJuIF9wYXJ0LT5pc0ZyYW1lU2V0KCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmlzRnJhbWVTZXQo
KTsKIH0KIAogLSAodm9pZClyZWFwcGx5U3R5bGVzRm9yRGV2aWNlVHlwZTooV2ViQ29yZURldmlj
ZVR5cGUpZGV2aWNlVHlwZQogewotICAgIF9wYXJ0LT5zZXRNZWRpYVR5cGUoZGV2aWNlVHlwZSA9
PSBXZWJDb3JlRGV2aWNlU2NyZWVuID8gInNjcmVlbiIgOiAicHJpbnQiKTsKLSAgICBEb2N1bWVu
dEltcGwgKmRvYyA9IF9wYXJ0LT54bWxEb2NJbXBsKCk7CisgICAgbV9mcmFtZS0+c2V0TWVkaWFU
eXBlKGRldmljZVR5cGUgPT0gV2ViQ29yZURldmljZVNjcmVlbiA/ICJzY3JlZW4iIDogInByaW50
Iik7CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgICAg
aWYgKGRvYykgewogICAgICAgICBzdGF0aWMgUVBhaW50RGV2aWNlIHNjcmVlbjsKICAgICAgICAg
c3RhdGljIFFQcmludGVyIHByaW50ZXI7CiAgICAgICAgIGRvYy0+c2V0UGFpbnREZXZpY2UoZGV2
aWNlVHlwZSA9PSBXZWJDb3JlRGV2aWNlU2NyZWVuID8gJnNjcmVlbiA6ICZwcmludGVyKTsKICAg
ICB9Ci0gICAgcmV0dXJuIF9wYXJ0LT5yZXBhcnNlQ29uZmlndXJhdGlvbigpOworICAgIHJldHVy
biBtX2ZyYW1lLT5yZXBhcnNlQ29uZmlndXJhdGlvbigpOwogfQogCiBzdGF0aWMgQk9PTCBub3dQ
cmludGluZyhXZWJDb3JlQnJpZGdlICpzZWxmKQogewotICAgIERvY3VtZW50SW1wbCAqZG9jID0g
c2VsZi0+X3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwgKmRvYyA9IHNlbGYt
Pm1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICByZXR1cm4gZG9jICYmIGRvYy0+cGFpbnREZXZp
Y2UoKSAmJiBkb2MtPnBhaW50RGV2aWNlKCktPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlByaW50
ZXI7CiB9CiAKQEAgLTk4NCw3ICs5ODQsNyBAQCBzdGF0aWMgQk9PTCBub3dQcmludGluZyhXZWJD
b3JlQnJpZGdlICpzCiAtICh2b2lkKV9zZXR1cFJvb3RGb3JQcmludGluZzooQk9PTClvbk9yT2Zm
CiB7CiAgICAgaWYgKG5vd1ByaW50aW5nKHNlbGYpKSB7Ci0gICAgICAgIFJlbmRlckNhbnZhcyAq
cm9vdCA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXMgKj4oX3BhcnQtPnhtbERvY0lt
cGwoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckNhbnZhcyAqcm9vdCA9IHN0YXRpY19j
YXN0PGtodG1sOjpSZW5kZXJDYW52YXMgKj4obV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5yZW5kZXJl
cigpKTsKICAgICAgICAgaWYgKHJvb3QpIHsKICAgICAgICAgICAgIHJvb3QtPnNldFByaW50aW5n
TW9kZShvbk9yT2ZmKTsKICAgICAgICAgfQpAQCAtOTk0LDcgKzk5NCw3IEBAIHN0YXRpYyBCT09M
IG5vd1ByaW50aW5nKFdlYkNvcmVCcmlkZ2UgKnMKIC0gKHZvaWQpZm9yY2VMYXlvdXRBZGp1c3Rp
bmdWaWV3U2l6ZTooQk9PTClmbGFnCiB7CiAgICAgW3NlbGYgX3NldHVwUm9vdEZvclByaW50aW5n
OllFU107Ci0gICAgX3BhcnQtPmZvcmNlTGF5b3V0KCk7CisgICAgbV9mcmFtZS0+Zm9yY2VMYXlv
dXQoKTsKICAgICBpZiAoZmxhZykgewogICAgICAgICBbc2VsZiBhZGp1c3RWaWV3U2l6ZV07CiAg
ICAgfQpAQCAtMTAwNCw3ICsxMDA0LDcgQEAgc3RhdGljIEJPT0wgbm93UHJpbnRpbmcoV2ViQ29y
ZUJyaWRnZSAqcwogLSAodm9pZClmb3JjZUxheW91dFdpdGhNaW5pbXVtUGFnZVdpZHRoOihmbG9h
dCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVz
dGluZ1ZpZXdTaXplOihCT09MKWZsYWcKIHsKICAgICBbc2VsZiBfc2V0dXBSb290Rm9yUHJpbnRp
bmc6WUVTXTsKLSAgICBfcGFydC0+Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UobWluUGFn
ZVdpZHRoLCBtYXhQYWdlV2lkdGgpOworICAgIG1fZnJhbWUtPmZvcmNlTGF5b3V0V2l0aFBhZ2VX
aWR0aFJhbmdlKG1pblBhZ2VXaWR0aCwgbWF4UGFnZVdpZHRoKTsKICAgICBpZiAoZmxhZykgewog
ICAgICAgICBbc2VsZiBhZGp1c3RWaWV3U2l6ZV07CiAgICAgfQpAQCAtMTAxMywyNSArMTAxMywy
NSBAQCBzdGF0aWMgQk9PTCBub3dQcmludGluZyhXZWJDb3JlQnJpZGdlICpzCiAKIC0gKHZvaWQp
c2VuZFJlc2l6ZUV2ZW50CiB7Ci0gICAgX3BhcnQtPnNlbmRSZXNpemVFdmVudCgpOworICAgIG1f
ZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOwogfQogCiAtICh2b2lkKXNlbmRTY3JvbGxFdmVudAog
ewotICAgIF9wYXJ0LT5zZW5kU2Nyb2xsRXZlbnQoKTsKKyAgICBtX2ZyYW1lLT5zZW5kU2Nyb2xs
RXZlbnQoKTsKIH0KIAogLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3Qgd2l0aFBhaW50ZXI6
KFFQYWludGVyICopcAogewogICAgIFtzZWxmIF9zZXR1cFJvb3RGb3JQcmludGluZzpZRVNdOwot
ICAgIF9wYXJ0LT5wYWludChwLCBRUmVjdChyZWN0KSk7CisgICAgbV9mcmFtZS0+cGFpbnQocCwg
UVJlY3QocmVjdCkpOwogICAgIFtzZWxmIF9zZXR1cFJvb3RGb3JQcmludGluZzpOT107CiB9CiAK
IC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiB7CiAgICAgUVBhaW50ZXIgcGFpbnRlcihu
b3dQcmludGluZyhzZWxmKSk7Ci0gICAgYm9vbCBkaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMg
PSBfcGFydC0+ZGlzcGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKCk7CisgICAgYm9vbCBkaXNwbGF5
c1dpdGhGb2N1c0F0dHJpYnV0ZXMgPSBtX2ZyYW1lLT5kaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0
ZXMoKTsKICAgICBwYWludGVyLnNldFVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoIWRp
c3BsYXlzV2l0aEZvY3VzQXR0cmlidXRlcyk7CiAgICAgW3NlbGYgZHJhd1JlY3Q6cmVjdCB3aXRo
UGFpbnRlcjomcGFpbnRlcl07CiB9CkBAIC0xMDUxLDExICsxMDUxLDExIEBAIHN0YXRpYyBCT09M
IG5vd1ByaW50aW5nKFdlYkNvcmVCcmlkZ2UgKnMKICAgICAgICAgcmV0dXJuIHBhZ2VzOwogICAg
IH0KIAotICAgIGlmICghX3BhcnQgfHwgIV9wYXJ0LT54bWxEb2NJbXBsKCkgfHwgIV9wYXJ0LT52
aWV3KCkpIHJldHVybiBwYWdlczsKLSAgICBSZW5kZXJDYW52YXMqIHJvb3QgPSBzdGF0aWNfY2Fz
dDxraHRtbDo6UmVuZGVyQ2FudmFzICo+KF9wYXJ0LT54bWxEb2NJbXBsKCktPnJlbmRlcmVyKCkp
OworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+eG1sRG9jSW1wbCgpIHx8ICFtX2ZyYW1l
LT52aWV3KCkpIHJldHVybiBwYWdlczsKKyAgICBSZW5kZXJDYW52YXMqIHJvb3QgPSBzdGF0aWNf
Y2FzdDxraHRtbDo6UmVuZGVyQ2FudmFzICo+KG1fZnJhbWUtPnhtbERvY0ltcGwoKS0+cmVuZGVy
ZXIoKSk7CiAgICAgaWYgKCFyb290KSByZXR1cm4gcGFnZXM7CiAgICAgCi0gICAgS0hUTUxWaWV3
KiB2aWV3ID0gX3BhcnQtPnZpZXcoKTsKKyAgICBLSFRNTFZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52
aWV3KCk7CiAgICAgTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB2aWV3LT5nZXREb2N1bWVudFZpZXco
KTsKICAgICBpZiAoIWRvY3VtZW50VmlldykKICAgICAgICAgcmV0dXJuIHBhZ2VzOwpAQCAtMTA2
OCw3ICsxMDY4LDcgQEAgc3RhdGljIEJPT0wgbm93UHJpbnRpbmcoV2ViQ29yZUJyaWRnZSAqcwog
ICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSB0aGUgcGFydCB0aGUgb3Bwb3J0dW5pdHkgdG8gYWRqdXN0
IHRoZSBwYWdlIGhlaWdodCBhdCBlYWNoIHN0ZXAuCiAgICAgZm9yIChmbG9hdCBpID0gMDsgaSA8
IGRvY0hlaWdodDsgaSArPSBjdXJyUGFnZUhlaWdodCkgewogICAgICAgICBmbG9hdCBwcm9wb3Nl
ZEJvdHRvbSA9IGtNaW4oZG9jSGVpZ2h0LCBpICsgcHJpbnRIZWlnaHQpOwotICAgICAgICBfcGFy
dC0+YWRqdXN0UGFnZUhlaWdodCgmcHJvcG9zZWRCb3R0b20sIGksIHByb3Bvc2VkQm90dG9tLCBp
KTsKKyAgICAgICAgbV9mcmFtZS0+YWRqdXN0UGFnZUhlaWdodCgmcHJvcG9zZWRCb3R0b20sIGks
IHByb3Bvc2VkQm90dG9tLCBpKTsKICAgICAgICAgY3VyclBhZ2VIZWlnaHQgPSBrTWF4KDEuMGYs
IHByb3Bvc2VkQm90dG9tIC0gaSk7CiAgICAgICAgIGZvciAoZmxvYXQgaiA9IDA7IGogPCBkb2NX
aWR0aDsgaiArPSBwcmludFdpZHRoKSB7CiAgICAgICAgICAgICBOU1ZhbHVlKiB2YWwgPSBbTlNW
YWx1ZSB2YWx1ZVdpdGhSZWN0OiBOU01ha2VSZWN0KGosIGksIHByaW50V2lkdGgsIGN1cnJQYWdl
SGVpZ2h0KV07CkBAIC0xMDg0LDcgKzEwODQsNyBAQCBzdGF0aWMgQk9PTCBub3dQcmludGluZyhX
ZWJDb3JlQnJpZGdlICpzCiAtICh2b2lkKWFkanVzdFBhZ2VIZWlnaHROZXc6KGZsb2F0ICopbmV3
Qm90dG9tIHRvcDooZmxvYXQpb2xkVG9wIGJvdHRvbTooZmxvYXQpb2xkQm90dG9tIGxpbWl0Oihm
bG9hdClib3R0b21MaW1pdAogewogICAgIFtzZWxmIF9zZXR1cFJvb3RGb3JQcmludGluZzpZRVNd
OwotICAgIF9wYXJ0LT5hZGp1c3RQYWdlSGVpZ2h0KG5ld0JvdHRvbSwgb2xkVG9wLCBvbGRCb3R0
b20sIGJvdHRvbUxpbWl0KTsKKyAgICBtX2ZyYW1lLT5hZGp1c3RQYWdlSGVpZ2h0KG5ld0JvdHRv
bSwgb2xkVG9wLCBvbGRCb3R0b20sIGJvdHRvbUxpbWl0KTsKICAgICBbc2VsZiBfc2V0dXBSb290
Rm9yUHJpbnRpbmc6Tk9dOwogfQogCkBAIC0xMTA0LDcgKzExMDQsNyBAQCBzdGF0aWMgQk9PTCBu
b3dQcmludGluZyhXZWJDb3JlQnJpZGdlICpzCiAKIC0gKE5TT2JqZWN0ICopY29weURPTVRyZWU6
KGlkIDxXZWJDb3JlRE9NVHJlZUNvcGllcj4pY29waWVyCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpk
b2MgPSBfcGFydC0+eG1sRG9jSW1wbCgpOworICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFt
ZS0+eG1sRG9jSW1wbCgpOwogICAgIGlmICghZG9jKSB7CiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgfQpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgc3RhdGljIEJPT0wgbm93UHJpbnRpbmcoV2ViQ29y
ZUJyaWRnZSAqcwogCiAtIChOU09iamVjdCAqKWNvcHlSZW5kZXJUcmVlOihpZCA8V2ViQ29yZVJl
bmRlclRyZWVDb3BpZXI+KWNvcGllcgogewotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBf
cGFydC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9mcmFtZS0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKSB7CiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgfQpAQCAtMTE0OSw1MiArMTE0OSw1MiBAQCBzdGF0aWMgQk9PTCBub3dQcmludGluZyhXZWJD
b3JlQnJpZGdlICpzCiAKIC0gKHZvaWQpcmVtb3ZlRnJvbUZyYW1lCiB7Ci0gICAgX3BhcnQtPnNl
dFZpZXcoMCk7CisgICAgbV9mcmFtZS0+c2V0VmlldygwKTsKIH0KIAogLSAodm9pZClpbnN0YWxs
SW5GcmFtZTooTlNWaWV3ICopdmlldwogewotICAgIC8vIElmIHRoaXMgaXNuJ3QgdGhlIG1haW4g
ZnJhbWUsIGl0IG11c3QgaGF2ZSBhIHJlbmRlciBfcGFydCBzZXQsIG9yIGl0CisgICAgLy8gSWYg
dGhpcyBpc24ndCB0aGUgbWFpbiBmcmFtZSwgaXQgbXVzdCBoYXZlIGEgcmVuZGVyIG1fZnJhbWUg
c2V0LCBvciBpdAogICAgIC8vIHdvbid0IGV2ZXIgZ2V0IGluc3RhbGxlZCBpbiB0aGUgdmlldyBo
aWVyYXJjaHkuCiAgICAgQVNTRVJUKHNlbGYgPT0gW3NlbGYgbWFpbkZyYW1lXSB8fCBfcmVuZGVy
UGFydCAhPSBuaWwpOwogCi0gICAgX3BhcnQtPnZpZXcoKS0+c2V0Vmlldyh2aWV3KTsKKyAgICBt
X2ZyYW1lLT52aWV3KCktPnNldFZpZXcodmlldyk7CiAgICAgaWYgKF9yZW5kZXJQYXJ0KSB7Ci0g
ICAgICAgIF9yZW5kZXJQYXJ0LT5zZXRXaWRnZXQoX3BhcnQtPnZpZXcoKSk7CisgICAgICAgIF9y
ZW5kZXJQYXJ0LT5zZXRXaWRnZXQobV9mcmFtZS0+dmlldygpKTsKICAgICAgICAgLy8gTm93IHRo
ZSByZW5kZXIgcGFydCBvd25zIHRoZSB2aWV3LCBzbyB3ZSBkb24ndCBhbnkgbW9yZS4KICAgICB9
CiAKLSAgICBfcGFydC0+dmlldygpLT5pbml0U2Nyb2xsQmFycygpOworICAgIG1fZnJhbWUtPnZp
ZXcoKS0+aW5pdFNjcm9sbEJhcnMoKTsKIH0KIAogLSAodm9pZClzZXRBY3RpdmF0aW9uRXZlbnRO
dW1iZXI6KGludCludW0KIHsKLSAgICBfcGFydC0+c2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVyKG51
bSk7CisgICAgbV9mcmFtZS0+c2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVyKG51bSk7CiB9CiAKIC0g
KHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKLSAgICBfcGFydC0+bW91c2VEb3du
KGV2ZW50KTsKKyAgICBtX2ZyYW1lLT5tb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKW1v
dXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50CiB7Ci0gICAgX3BhcnQtPm1vdXNlRHJhZ2dlZChl
dmVudCk7CisgICAgbV9mcmFtZS0+bW91c2VEcmFnZ2VkKGV2ZW50KTsKIH0KIAogLSAodm9pZClt
b3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKLSAgICBfcGFydC0+bW91c2VVcChldmVudCk7Cisg
ICAgbV9mcmFtZS0+bW91c2VVcChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VNb3ZlZDooTlNF
dmVudCAqKWV2ZW50CiB7Ci0gICAgX3BhcnQtPm1vdXNlTW92ZWQoZXZlbnQpOworICAgIG1fZnJh
bWUtPm1vdXNlTW92ZWQoZXZlbnQpOwogfQogCiAtIChCT09MKXNlbmRDb250ZXh0TWVudUV2ZW50
OihOU0V2ZW50ICopZXZlbnQKIHsKLSAgICByZXR1cm4gX3BhcnQtPnNlbmRDb250ZXh0TWVudUV2
ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZl
bnQpOwogfQogCiAtIChET01FbGVtZW50ICopZWxlbWVudEZvclZpZXc6KE5TVmlldyAqKXZpZXcK
QEAgLTEyNzksNyArMTI3OSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxl
bWVudEYKIAogLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCiB7Ci0gICAgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZm9ybUVsZW1lbnQgPSBfcGFydC0+Y3VycmVudEZvcm0oKTsKKyAgICBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudCA9IG1fZnJhbWUtPmN1cnJlbnRGb3JtKCk7CiAgICAg
cmV0dXJuIGZvcm1FbGVtZW50ID8gW0RPTUVsZW1lbnQgX2VsZW1lbnRXaXRoSW1wbDpmb3JtRWxl
bWVudF0gOiBuaWw7CiB9CiAKQEAgLTEzMDUsMTcgKzEzMDUsMTcgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtIChOU1N0cmluZyAqKXNlYXJjaEZvckxhYmVs
czooTlNBcnJheSAqKWxhYmVscyBiZWZvcmVFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAog
ewotICAgIHJldHVybiBfcGFydC0+c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChsYWJlbHMs
IFtlbGVtZW50IF9lbGVtZW50SW1wbF0pOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWFyY2hGb3JM
YWJlbHNCZWZvcmVFbGVtZW50KGxhYmVscywgW2VsZW1lbnQgX2VsZW1lbnRJbXBsXSk7CiB9CiAK
IC0gKE5TU3RyaW5nICopbWF0Y2hMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYWdhaW5zdEVsZW1l
bnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0gICAgcmV0dXJuIF9wYXJ0LT5tYXRjaExhYmVs
c0FnYWluc3RFbGVtZW50KGxhYmVscywgW2VsZW1lbnQgX2VsZW1lbnRJbXBsXSk7CisgICAgcmV0
dXJuIG1fZnJhbWUtPm1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQobGFiZWxzLCBbZWxlbWVudCBf
ZWxlbWVudEltcGxdKTsKIH0KIAogLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5T
UG9pbnQpcG9pbnQKIHsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gX3BhcnQtPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1fZnJhbWUtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikgCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0xMzMz
LDggKzEzMzMsOCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAg
ICAgICAgIHdpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihuLT5yZW5kZXJlcigp
KS0+d2lkZ2V0KCk7CiAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmluaGVyaXRzKCJL
SFRNTFZpZXciKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBLSFRNTFBhcnQgKmtwYXJ0
ID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudFBh
cnQoKTsKLSAgICAgICAgaWYgKCFrcGFydCB8fCAhc3RhdGljX2Nhc3Q8S1dRS0hUTUxQYXJ0ICo+
KGtwYXJ0KS0+cmVuZGVyZXIoKSkKKyAgICAgICAgRnJhbWUgKmtwYXJ0ID0gc3RhdGljX2Nhc3Q8
RE9NOjpIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudFBhcnQoKTsKKyAgICAgICAg
aWYgKCFrcGFydCB8fCAhc3RhdGljX2Nhc3Q8TWFjRnJhbWUgKj4oa3BhcnQpLT5yZW5kZXJlcigp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGludCBhYnNYLCBhYnNZOwogICAgICAgICBu
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKGFic1gsIGFic1ksIHRydWUpOwpAQCAtMTM0
MywxMiArMTM0MywxMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRG
CiAgICAgICAgIHdpZGdldFBvaW50LnNldFkod2lkZ2V0UG9pbnQueSgpIC0gYWJzWSArIHZpZXct
PmNvbnRlbnRzWSgpKTsKIAogICAgICAgICBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvIHdpZGdldE5v
ZGVJbmZvKHRydWUsIHRydWUpOwotICAgICAgICBzdGF0aWNfY2FzdDxLV1FLSFRNTFBhcnQgKj4o
a3BhcnQpLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHdpZGdldE5vZGVJbmZvLCB3aWRn
ZXRQb2ludC54KCksIHdpZGdldFBvaW50LnkoKSk7CisgICAgICAgIHN0YXRpY19jYXN0PE1hY0Zy
YW1lICo+KGtwYXJ0KS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdCh3aWRnZXROb2RlSW5m
bywgd2lkZ2V0UG9pbnQueCgpLCB3aWRnZXRQb2ludC55KCkpOwogICAgICAgICBub2RlSW5mbyA9
IHdpZGdldE5vZGVJbmZvOwogICAgIH0KICAgICAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpl
bGVtZW50ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07Ci0gICAgW2VsZW1lbnQg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpfcGFydC0+aXNQb2ludEluc2lkZVNl
bGVjdGlvbigoaW50KXBvaW50LngsIChpbnQpcG9pbnQueSldCisgICAgW2VsZW1lbnQgc2V0T2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDptX2ZyYW1lLT5pc1BvaW50SW5zaWRlU2VsZWN0
aW9uKChpbnQpcG9pbnQueCwgKGludClwb2ludC55KV0KICAgICAgICAgICAgICAgICBmb3JLZXk6
V2ViQ29yZUVsZW1lbnRJc1NlbGVjdGVkS2V5XTsKIAogICAgIC8vIEZpbmQgdGhlIHRpdGxlIGlu
IHRoZSBuZWFyZXN0IGVuY2xvc2luZyBET00gbm9kZS4KQEAgLTEzNTksNyArMTM1OSw3IEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAgICAgICAgIGlmICgh
dGl0bGUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIG5vZGUgd2l0
aCBhIHRpdGxlLgogICAgICAgICAgICAgICAgIFFTdHJpbmcgdGl0bGVUZXh0ID0gdGl0bGUucXN0
cmluZygpOwotICAgICAgICAgICAgICAgIHRpdGxlVGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBf
cGFydC0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICB0aXRs
ZVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgbV9mcmFtZS0+YmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbCgpKTsKICAgICAgICAgICAgICAgICBbZWxlbWVudCBzZXRPYmplY3Q6dGl0bGVUZXh0Lmdl
dE5TU3RyaW5nKCkgZm9yS2V5OldlYkNvcmVFbGVtZW50VGl0bGVLZXldOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTM3NSw3ICsxMzc1LDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHRpdGxlID0gZS0+Z2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgIGlmICghdGl0
bGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBRU3RyaW5nIHRpdGxlVGV4dCA9IHRpdGxlLnFz
dHJpbmcoKTsKLSAgICAgICAgICAgIHRpdGxlVGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBfcGFy
dC0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICAgICAgICAgIHRpdGxlVGV4dC5y
ZXBsYWNlKFFDaGFyKCdcXCcpLCBtX2ZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkp
OwogICAgICAgICAgICAgW2VsZW1lbnQgc2V0T2JqZWN0OnRpdGxlVGV4dC5nZXROU1N0cmluZygp
IGZvcktleTpXZWJDb3JlRWxlbWVudExpbmtUaXRsZUtleV07CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0xNDM5LDcgKzE0MzksNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVs
ZW1lbnRGCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dEltcGwgKj4oaSktPmFsdFRleHQoKTsKICAgICAgICAgICAgIGlmICghYWx0LmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICAgICAgUVN0cmluZyBhbHRUZXh0ID0gYWx0LnFzdHJpbmcoKTsKLSAgICAg
ICAgICAgICAgICBhbHRUZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIF9wYXJ0LT5iYWNrc2xhc2hB
c0N1cnJlbmN5U3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGFsdFRleHQucmVwbGFjZShRQ2hh
cignXFwnKSwgbV9mcmFtZS0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAgICAg
ICAgICAgICBbZWxlbWVudCBzZXRPYmplY3Q6YWx0VGV4dC5nZXROU1N0cmluZygpIGZvcktleTpX
ZWJDb3JlRWxlbWVudEltYWdlQWx0U3RyaW5nS2V5XTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1F
bGVtZW50RgogCiAtIChOU1VSTCAqKVVSTFdpdGhBdHRyaWJ1dGVTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1wbCgpOwor
ICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIGlmICgh
ZG9jKSB7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQpAQCAtMTQ2MCwyMiArMTQ2MCwyMiBA
QCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKEJPT0wpc2Vh
cmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vu
c2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcKIHsKLSAgICByZXR1cm4g
X3BhcnQtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcpOwor
ICAgIHJldHVybiBtX2ZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2FzZUZsYWcs
IHdyYXBGbGFnKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcK
IHsKLSAgICByZXR1cm4gX3BhcnQtPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZygpLmdldE5TU3Ry
aW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZygpLmdl
dE5TU3RyaW5nKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
U3RhcnRpbmdKdXN0QmVmb3JlU2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIF9wYXJ0LT5hZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcodHJ1ZSkuZ2V0TlNTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9mcmFt
ZS0+YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHRydWUpLmdldE5TU3RyaW5nKCk7CiB9CiAKIC0g
KHZvaWQpdW5tYXJrQWxsTWlzc3BlbGxpbmdzCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBf
cGFydC0+eG1sRG9jSW1wbCgpOworICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1s
RG9jSW1wbCgpOwogICAgIGlmICghZG9jKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NDg1LDUzICsxNDg1LDUzIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKIC0gKHZvaWQpc2V0VGV4dFNpemVNdWx0aXBsaWVyOihmbG9hdCltdWx0aXBsaWVyCiB7CiAg
ICAgaW50IG5ld1pvb21GYWN0b3IgPSAoaW50KXJpbnQobXVsdGlwbGllciAqIDEwMCk7Ci0gICAg
aWYgKF9wYXJ0LT56b29tRmFjdG9yKCkgPT0gbmV3Wm9vbUZhY3RvcikgeworICAgIGlmIChtX2Zy
YW1lLT56b29tRmFjdG9yKCkgPT0gbmV3Wm9vbUZhY3RvcikgewogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIF9wYXJ0LT5zZXRab29tRmFjdG9yKG5ld1pvb21GYWN0b3IpOworICAgIG1fZnJh
bWUtPnNldFpvb21GYWN0b3IobmV3Wm9vbUZhY3Rvcik7CiB9CiAKIC0gKENGU3RyaW5nRW5jb2Rp
bmcpdGV4dEVuY29kaW5nCiB7Ci0gICAgcmV0dXJuIEtXUUNGU3RyaW5nRW5jb2RpbmdGcm9tSUFO
QUNoYXJzZXROYW1lKF9wYXJ0LT5lbmNvZGluZygpLmxhdGluMSgpKTsKKyAgICByZXR1cm4gS1dR
Q0ZTdHJpbmdFbmNvZGluZ0Zyb21JQU5BQ2hhcnNldE5hbWUobV9mcmFtZS0+ZW5jb2RpbmcoKS5s
YXRpbjEoKSk7CiB9CiAKIC0gKE5TVmlldyAqKW5leHRLZXlWaWV3CiB7Ci0gICAgRG9jdW1lbnRJ
bXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1wbCgpOworICAgIERvY3VtZW50SW1wbCAqZG9jID0g
bV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIGlmICghZG9jKSB7CiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgfQotICAgIHJldHVybiBfcGFydC0+bmV4dEtleVZpZXcoZG9jLT5mb2N1c05vZGUo
KSwgS1dRU2VsZWN0aW5nTmV4dCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3KGRv
Yy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVjdGluZ05leHQpOwogfQogCiAtIChOU1ZpZXcgKilwcmV2
aW91c0tleVZpZXcKIHsKLSAgICBEb2N1bWVudEltcGwgKmRvYyA9IF9wYXJ0LT54bWxEb2NJbXBs
KCk7CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgICAg
aWYgKCFkb2MpIHsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9Ci0gICAgcmV0dXJuIF9wYXJ0
LT5uZXh0S2V5Vmlldyhkb2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxlY3RpbmdQcmV2aW91cyk7Cisg
ICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVj
dGluZ1ByZXZpb3VzKTsKIH0KIAogLSAoTlNWaWV3ICopbmV4dEtleVZpZXdJbnNpZGVXZWJGcmFt
ZVZpZXdzCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1wbCgpOwor
ICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIGlmICgh
ZG9jKSB7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIAotICAgIHJldHVybiBfcGFy
dC0+bmV4dEtleVZpZXdJbkZyYW1lSGllcmFyY2h5KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVj
dGluZ05leHQpOworICAgIHJldHVybiBtX2ZyYW1lLT5uZXh0S2V5Vmlld0luRnJhbWVIaWVyYXJj
aHkoZG9jLT5mb2N1c05vZGUoKSwgS1dRU2VsZWN0aW5nTmV4dCk7CiB9CiAKIC0gKE5TVmlldyAq
KXByZXZpb3VzS2V5Vmlld0luc2lkZVdlYkZyYW1lVmlld3MKIHsKLSAgICBEb2N1bWVudEltcGwg
KmRvYyA9IF9wYXJ0LT54bWxEb2NJbXBsKCk7CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX2Zy
YW1lLT54bWxEb2NJbXBsKCk7CiAgICAgaWYgKCFkb2MpIHsKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9CiAKLSAgICByZXR1cm4gX3BhcnQtPm5leHRLZXlWaWV3SW5GcmFtZUhpZXJhcmNoeShk
b2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxlY3RpbmdQcmV2aW91cyk7CisgICAgcmV0dXJuIG1fZnJh
bWUtPm5leHRLZXlWaWV3SW5GcmFtZUhpZXJhcmNoeShkb2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxl
Y3RpbmdQcmV2aW91cyk7CiB9CiAKIC0gKE5TU3RyaW5nICopc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCkBAIC0xNTQyLDIzICsxNTQyLDIz
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIC8vIAogLSAoTlNT
dHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJlCiB7Ci0gICAg
X3BhcnQtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLSAgICByZXR1cm4gX3BhcnQtPmV4ZWN1dGVT
Y3JpcHQoUVN0cmluZzo6ZnJvbU5TU3RyaW5nKHN0cmluZyksIGZvcmNlVXNlckdlc3R1cmUpLmFz
U3RyaW5nKCkuZ2V0TlNTdHJpbmcoKTsKKyAgICBtX2ZyYW1lLT5jcmVhdGVFbXB0eURvY3VtZW50
KCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmV4ZWN1dGVTY3JpcHQoUVN0cmluZzo6ZnJvbU5TU3Ry
aW5nKHN0cmluZyksIGZvcmNlVXNlckdlc3R1cmUpLmFzU3RyaW5nKCkuZ2V0TlNTdHJpbmcoKTsK
IH0KIAogLSAoV2ViU2NyaXB0T2JqZWN0ICopd2luZG93U2NyaXB0T2JqZWN0CiB7Ci0gICAgcmV0
dXJuIF9wYXJ0LT53aW5kb3dTY3JpcHRPYmplY3QoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+d2lu
ZG93U2NyaXB0T2JqZWN0KCk7CiB9CiAKIC0gKE5QT2JqZWN0ICopd2luZG93U2NyaXB0TlBPYmpl
Y3QKIHsKLSAgICByZXR1cm4gX3BhcnQtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisgICAgcmV0
dXJuIG1fZnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiB9CiAKIC0gKERPTURvY3VtZW50
ICopRE9NRG9jdW1lbnQKIHsKLSAgICByZXR1cm4gW0RPTURvY3VtZW50IF9kb2N1bWVudFdpdGhJ
bXBsOl9wYXJ0LT54bWxEb2NJbXBsKCldOworICAgIHJldHVybiBbRE9NRG9jdW1lbnQgX2RvY3Vt
ZW50V2l0aEltcGw6bV9mcmFtZS0+eG1sRG9jSW1wbCgpXTsKIH0KIAogLSAoRE9NSFRNTEVsZW1l
bnQgKilmcmFtZUVsZW1lbnQKQEAgLTE1NjgsMjkgKzE1NjgsMjkgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxl
Y3RlZEF0dHJpYnV0ZWRTdHJpbmcKIHsKLSAgICByZXR1cm4gX3BhcnQtPmF0dHJpYnV0ZWRTdHJp
bmcoX3BhcnQtPnNlbGVjdGlvblN0YXJ0KCksIF9wYXJ0LT5zZWxlY3Rpb25TdGFydE9mZnNldCgp
LCBfcGFydC0+c2VsZWN0aW9uRW5kKCksIF9wYXJ0LT5zZWxlY3Rpb25FbmRPZmZzZXQoKSk7Cisg
ICAgcmV0dXJuIG1fZnJhbWUtPmF0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZS0+c2VsZWN0aW9uU3Rh
cnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uU3RhcnRPZmZzZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9u
RW5kKCksIG1fZnJhbWUtPnNlbGVjdGlvbkVuZE9mZnNldCgpKTsKIH0KIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydCBzdGFydE9m
ZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlICopZW5kIGVuZE9mZnNldDooaW50KWVu
ZE9mZnNldAogewogICAgIERPTU5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0OwogICAgIERPTU5vZGUg
KmVuZE5vZGUgPSBlbmQ7Ci0gICAgcmV0dXJuIF9wYXJ0LT5hdHRyaWJ1dGVkU3RyaW5nKFtzdGFy
dE5vZGUgX25vZGVJbXBsXSwgc3RhcnRPZmZzZXQsIFtlbmROb2RlIF9ub2RlSW1wbF0sIGVuZE9m
ZnNldCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmF0dHJpYnV0ZWRTdHJpbmcoW3N0YXJ0Tm9kZSBf
bm9kZUltcGxdLCBzdGFydE9mZnNldCwgW2VuZE5vZGUgX25vZGVJbXBsXSwgZW5kT2Zmc2V0KTsK
IH0KIAogLSAoTlNSZWN0KXNlbGVjdGlvblJlY3QKIHsKLSAgICByZXR1cm4gX3BhcnQtPnNlbGVj
dGlvblJlY3QoKTsgCisgICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvblJlY3QoKTsgCiB9CiAK
IC0gKE5TUmVjdCl2aXNpYmxlU2VsZWN0aW9uUmVjdAogewotICAgIHJldHVybiBfcGFydC0+dmlz
aWJsZVNlbGVjdGlvblJlY3QoKTsgCisgICAgcmV0dXJuIG1fZnJhbWUtPnZpc2libGVTZWxlY3Rp
b25SZWN0KCk7IAogfQogCiAtICh2b2lkKWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEKIHsK
LSAgICBfcGFydC0+Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpOyAKKyAgICBtX2ZyYW1l
LT5jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7IAogfQogCiAtIChOU1JlY3QpY2FyZXRS
ZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKQEAgLTE2MjAsMTcgKzE2MjAsMTcgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtIChOU0ltYWdlICopc2VsZWN0
aW9uSW1hZ2UKIHsKLSAgICByZXR1cm4gX3BhcnQtPnNlbGVjdGlvbkltYWdlKCk7CisgICAgcmV0
dXJuIG1fZnJhbWUtPnNlbGVjdGlvbkltYWdlKCk7CiB9CiAKIC0gKHZvaWQpc2V0TmFtZTooTlNT
dHJpbmcgKiluYW1lCiB7Ci0gICAgX3BhcnQtPnNldE5hbWUoUVN0cmluZzo6ZnJvbU5TU3RyaW5n
KG5hbWUpKTsKKyAgICBtX2ZyYW1lLT5zZXROYW1lKFFTdHJpbmc6OmZyb21OU1N0cmluZyhuYW1l
KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopbmFtZQogewotICAgIHJldHVybiBfcGFydC0+bmFtZSgp
LmdldE5TU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPm5hbWUoKS5nZXROU1N0cmluZygp
OwogfQogCiAtICh2b2lkKV9hZGRGcmFtZVBhdGhUb1N0cmluZzooTlNNdXRhYmxlU3RyaW5nICop
cGF0aApAQCAtMTY2NywyMiArMTY2NywyMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAq
Zm9ybUVsZW1lbnRGCiAKIC0gKE5TVVJMICopVVJMCiB7Ci0gICAgcmV0dXJuIF9wYXJ0LT51cmwo
KS5nZXROU1VSTCgpOworICAgIHJldHVybiBtX2ZyYW1lLT51cmwoKS5nZXROU1VSTCgpOwogfQog
CiAtIChOU1VSTCAqKWJhc2VVUkwKIHsKLSAgICByZXR1cm4gX3BhcnQtPmNvbXBsZXRlVVJMKF9w
YXJ0LT54bWxEb2NJbXBsKCktPmJhc2VVUkwoKSkuZ2V0TlNVUkwoKTsKKyAgICByZXR1cm4gbV9m
cmFtZS0+Y29tcGxldGVVUkwobV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5iYXNlVVJMKCkpLmdldE5T
VVJMKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopcmVmZXJyZXIKIHsKLSAgICByZXR1cm4gX3BhcnQt
PnJlZmVycmVyKCkuZ2V0TlNTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+cmVmZXJyZXIo
KS5nZXROU1N0cmluZygpOwogfQogCiAtIChOU1N0cmluZyAqKWRvbWFpbgogewotICAgIERvY3Vt
ZW50SW1wbCAqZG9jID0gX3BhcnQtPnhtbERvY0ltcGwoKTsKKyAgICBEb2N1bWVudEltcGwgKmRv
YyA9IG1fZnJhbWUtPnhtbERvY0ltcGwoKTsKICAgICBpZiAoZG9jICYmIGRvYy0+aXNIVE1MRG9j
dW1lbnQoKSkgewogICAgICAgICByZXR1cm4gZG9jLT5kb21haW4oKS5xc3RyaW5nKCkuZ2V0TlNT
dHJpbmcoKTsKICAgICB9CkBAIC0xNjkxLDIwICsxNjkxLDIwIEBAIHN0YXRpYyBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAoV2ViQ29yZUJyaWRnZSAqKW9wZW5lcgogewot
ICAgIEtIVE1MUGFydCAqb3BlbmVyUGFydCA9IF9wYXJ0LT5vcGVuZXIoKTsKKyAgICBGcmFtZSAq
b3BlbmVyUGFydCA9IG1fZnJhbWUtPm9wZW5lcigpOwogCiAgICAgaWYgKG9wZW5lclBhcnQpCi0g
ICAgICAgIHJldHVybiBLV1Eob3BlbmVyUGFydCktPmJyaWRnZSgpOworICAgICAgICByZXR1cm4g
TWFjKG9wZW5lclBhcnQpLT5icmlkZ2UoKTsKIAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKHZv
aWQpc2V0T3BlbmVyOihXZWJDb3JlQnJpZGdlICopYnJpZGdlOwogewotICAgIEtIVE1MUGFydCAq
cCA9IFticmlkZ2UgcGFydF07CisgICAgRnJhbWUgKnAgPSBbYnJpZGdlIHBhcnRdOwogICAgIAog
ICAgIGlmIChwKQotICAgICAgICBwLT5zZXRPcGVuZXIoX3BhcnQpOworICAgICAgICBwLT5zZXRP
cGVuZXIobV9mcmFtZSk7CiB9CiAKICsgKE5TU3RyaW5nICopc3RyaW5nV2l0aERhdGE6KE5TRGF0
YSAqKWRhdGEgdGV4dEVuY29kaW5nOihDRlN0cmluZ0VuY29kaW5nKXRleHRFbmNvZGluZwpAQCAt
MTcyMyw0MCArMTcyMyw0MCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1l
bnRGCiAKIC0gKEJPT0wpbmVlZHNMYXlvdXQKIHsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVy
ID0gX3BhcnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1fZnJh
bWUtPnJlbmRlcmVyKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyID8gcmVuZGVyZXItPm5lZWRzTGF5
b3V0KCkgOiBmYWxzZTsKIH0KIAogLSAodm9pZClzZXROZWVkc0xheW91dAogewotICAgIFJlbmRl
ck9iamVjdCAqcmVuZGVyZXIgPSBfcGFydC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3Qg
KnJlbmRlcmVyID0gbV9mcmFtZS0+cmVuZGVyZXIoKTsKICAgICBpZiAocmVuZGVyZXIpCiAgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogLSAoQk9PTClpbnRlcmNl
cHRLZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHRvVmlldzooTlNWaWV3ICopdmlldwogewotICAg
IHJldHVybiBfcGFydC0+a2V5RXZlbnQoZXZlbnQpOworICAgIHJldHVybiBtX2ZyYW1lLT5rZXlF
dmVudChldmVudCk7CiB9CiAKIC0gKE5TU3RyaW5nICopcmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbgogewotICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKF9wYXJ0LT5y
ZW5kZXJlcigpKS5nZXROU1N0cmluZygpOworICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKG1fZnJhbWUtPnJlbmRlcmVyKCkpLmdldE5TU3RyaW5nKCk7CiB9CiAKIC0gKHZvaWQpc2V0
U2VsZWN0aW9uRnJvbU5vbmUKIHsKLSAgICBfcGFydC0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsK
KyAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwogfQogCiAtICh2b2lkKXNldERp
c3BsYXlzV2l0aEZvY3VzQXR0cmlidXRlczooQk9PTClmbGFnCiB7Ci0gICAgX3BhcnQtPnNldERp
c3BsYXlzV2l0aEZvY3VzQXR0cmlidXRlcyhmbGFnKTsKKyAgICBtX2ZyYW1lLT5zZXREaXNwbGF5
c1dpdGhGb2N1c0F0dHJpYnV0ZXMoZmxhZyk7CiB9CiAKIC0gKHZvaWQpc2V0V2luZG93SGFzRm9j
dXM6KEJPT0wpZmxhZwogewotICAgIF9wYXJ0LT5zZXRXaW5kb3dIYXNGb2N1cyhmbGFnKTsKKyAg
ICBtX2ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyhmbGFnKTsKIH0KIAogLSAodm9pZClzZXRTaG91
bGRDcmVhdGVSZW5kZXJlcnM6KEJPT0wpZgpAQCAtMTc3MSw3ICsxNzcxLDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtIChpbnQpbnVtUGVuZGluZ09yTG9h
ZGluZ1JlcXVlc3RzCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1w
bCgpOworICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAg
IAogICAgIGlmIChkb2MpCiAgICAgICAgIHJldHVybiBLV1FOdW1iZXJPZlBlbmRpbmdPckxvYWRp
bmdSZXF1ZXN0cyAoZG9jLT5kb2NMb2FkZXIoKSk7CkBAIC0xNzgwLDcgKzE3ODAsNyBAQCBzdGF0
aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKEJPT0wpZG9uZVByb2Nl
c3NpbmdEYXRhCiB7Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBfcGFydC0+eG1sRG9jSW1wbCgp
OworICAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9mcmFtZS0+eG1sRG9jSW1wbCgpOwogICAgIGlm
IChkb2MpIHsKICAgICAgICAgVG9rZW5pemVyKiB0b2sgPSBkb2MtPnRva2VuaXplcigpOwogICAg
ICAgICBpZiAodG9rKQpAQCAtMTc5MSwyOSArMTc5MSwyOSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKEJPT0wpc2hvdWxkQ2xvc2UKIHsKLSAgICByZXR1
cm4gX3BhcnQtPnNob3VsZENsb3NlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnNob3VsZENsb3Nl
KCk7CiB9CiAKIC0gKE5TQ29sb3IgKilib2R5QmFja2dyb3VuZENvbG9yCiB7Ci0gICAgcmV0dXJu
IF9wYXJ0LT5ib2R5QmFja2dyb3VuZENvbG9yKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmJvZHlC
YWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAogLSAoTlNDb2xvciAqKXNlbGVjdGlvbkNvbG9yCiB7Ci0g
ICAgUmVuZGVyQ2FudmFzKiByb290ID0gc3RhdGljX2Nhc3Q8a2h0bWw6OlJlbmRlckNhbnZhcyAq
PihfcGFydC0+eG1sRG9jSW1wbCgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJDYW52YXMqIHJv
b3QgPSBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyQ2FudmFzICo+KG1fZnJhbWUtPnhtbERvY0lt
cGwoKS0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKHJvb3QpIHsKICAgICAgICAgUmVuZGVyU3R5bGUg
KnBzZXVkb1N0eWxlID0gcm9vdC0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElP
Tik7CiAgICAgICAgIGlmIChwc2V1ZG9TdHlsZSAmJiBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENv
bG9yKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gbnNDb2xvcihwc2V1ZG9TdHls
ZS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBfcGFy
dC0+ZGlzcGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKCkgPyBbTlNDb2xvciBzZWxlY3RlZFRleHRC
YWNrZ3JvdW5kQ29sb3JdIDogW05TQ29sb3Igc2Vjb25kYXJ5U2VsZWN0ZWRDb250cm9sQ29sb3Jd
OworICAgIHJldHVybiBtX2ZyYW1lLT5kaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0ZXMoKSA/IFtO
U0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0gOiBbTlNDb2xvciBzZWNvbmRhcnlT
ZWxlY3RlZENvbnRyb2xDb2xvcl07CiB9CiAKIC0gKHZvaWQpYWRqdXN0Vmlld1NpemUKIHsKLSAg
ICBLSFRNTFZpZXcgKnZpZXcgPSBfcGFydC0+dmlldygpOworICAgIEtIVE1MVmlldyAqdmlldyA9
IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykKICAgICAgICAgdmlldy0+YWRqdXN0Vmll
d1NpemUoKTsKIH0KQEAgLTE4MjEsMTYgKzE4MjEsMTYgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmZvcm1FbGVtZW50RgogLShpZClhY2Nlc3NpYmlsaXR5VHJlZQogewogICAgIEtXUUFj
Y09iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgaWYgKCFfcGFydCB8fCAh
X3BhcnQtPnhtbERvY0ltcGwoKSkgcmV0dXJuIG5pbDsKLSAgICBSZW5kZXJDYW52YXMqIHJvb3Qg
PSBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyQ2FudmFzICo+KF9wYXJ0LT54bWxEb2NJbXBsKCkt
PnJlbmRlcmVyKCkpOworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+eG1sRG9jSW1wbCgp
KSByZXR1cm4gbmlsOworICAgIFJlbmRlckNhbnZhcyogcm9vdCA9IHN0YXRpY19jYXN0PGtodG1s
OjpSZW5kZXJDYW52YXMgKj4obV9mcmFtZS0+eG1sRG9jSW1wbCgpLT5yZW5kZXJlcigpKTsKICAg
ICBpZiAoIXJvb3QpIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIF9wYXJ0LT54bWxEb2NJbXBsKCkt
PmdldEFjY09iamVjdENhY2hlKCktPmFjY09iamVjdChyb290KTsKKyAgICByZXR1cm4gbV9mcmFt
ZS0+eG1sRG9jSW1wbCgpLT5nZXRBY2NPYmplY3RDYWNoZSgpLT5hY2NPYmplY3Qocm9vdCk7CiB9
CiAKIC0gKHZvaWQpc2V0RHJhd3NCYWNrZ3JvdW5kOihCT09MKWRyYXdzQmFja2dyb3VuZAogewot
ICAgIGlmIChfcGFydCAmJiBfcGFydC0+dmlldygpKQotICAgICAgICBfcGFydC0+dmlldygpLT5z
ZXRUcmFuc3BhcmVudCghZHJhd3NCYWNrZ3JvdW5kKTsKKyAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT52aWV3KCkpCisgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQoIWRy
YXdzQmFja2dyb3VuZCk7CiB9CiAKIC0gKHZvaWQpdW5kb0VkaXRpbmc6KGlkKWFyZwpAQCAtMTg0
NywyMiArMTg0NywyMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRG
CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1NlbGVjdGlvbldpdGhHcmFudWxhcml0
eTooV2ViQnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsKLSAgICBpZiAo
IXBhcnRIYXNTZWxlY3Rpb24oc2VsZikpCisgICAgaWYgKCFmcmFtZUhhc1NlbGVjdGlvbihzZWxm
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCiAgICAgLy8gTk9URTogVGhlIGVudW1z
ICptdXN0KiBtYXRjaCB0aGUgdmVyeSBzaW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gU2VsZWN0aW9u
Q29udHJvbGxlci5oCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24oX3BhcnQtPnNl
bGVjdGlvbigpKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihtX2ZyYW1lLT5z
ZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoc3RhdGlj
X2Nhc3Q8RVRleHRHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpKTsKICAgICByZXR1cm4gW0RPTVJh
bmdlIF9yYW5nZVdpdGhJbXBsOnNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldOwogfQogCiAtIChE
T01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFs
dGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkJyaWRnZVNlbGVjdGlvbkRpcmVjdGlv
bilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5KWdy
YW51bGFyaXR5CiB7Ci0gICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICgh
ZnJhbWVIYXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAog
ICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVz
IGRlY2xhcmVkIGluIFNlbGVjdGlvbkNvbnRyb2xsZXIuaAotICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgc2VsZWN0aW9uKF9wYXJ0LT5zZWxlY3Rpb24oKSk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5tb2RpZnko
c3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyPihhbHRlcmF0aW9uKSwgCiAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTZWxlY3Rpb25Db250cm9sbGVyOjpFRGly
ZWN0aW9uPihkaXJlY3Rpb24pLCAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVU
ZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSk7CkBAIC0xODcxLDIxICsxODcxLDIxIEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAodm9pZClhbHRlckN1
cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rp
b246KFdlYkJyaWRnZVNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdl
YkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFyaXR5CiB7Ci0gICAgaWYgKCFwYXJ0
SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICghZnJhbWVIYXNTZWxlY3Rpb24oc2VsZikpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gTk9URTogVGhlIGVudW1zICptdXN0KiBt
YXRjaCB0aGUgdmVyeSBzaW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gU2VsZWN0aW9uQ29udHJvbGxl
ci5oCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24oX3BhcnQtPnNlbGVjdGlvbigp
KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24o
KSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShzdGF0aWNfY2FzdDxTZWxlY3Rpb25Db250cm9sbGVy
OjpFQWx0ZXI+KGFsdGVyYXRpb24pLCAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVEaXJlY3Rpb24+KGRpcmVjdGlvbiksIAogICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RVRleHRHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpKTsK
IAogICAgIC8vIHNhdmUgdmVydGljYWwgbmF2aWdhdGlvbiB4IHBvc2l0aW9uIGlmIG5lY2Vzc2Fy
eTsgbWFueSB0eXBlcyBvZiBtb3Rpb24gYmxvdyBpdCBhd2F5Ci0gICAgaW50IHhQb3MgPSBLSFRN
TFBhcnQ6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOworICAgIGludCB4UG9zID0g
RnJhbWU6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwogICAgIHN3aXRjaCAoZ3Jh
bnVsYXJpdHkpIHsKICAgICAgICAgY2FzZSBXZWJCcmlkZ2VTZWxlY3RCeUxpbmU6CiAgICAgICAg
IGNhc2UgV2ViQnJpZGdlU2VsZWN0QnlQYXJhZ3JhcGg6Ci0gICAgICAgICAgICB4UG9zID0gX3Bh
cnQtPnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOworICAgICAgICAgICAgeFBvcyA9
IG1fZnJhbWUtPnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgV2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXI6CiAgICAgICAg
IGNhc2UgV2ViQnJpZGdlU2VsZWN0QnlXb3JkOgpAQCAtMTg5Nyw1MCArMTg5Nyw1MCBAQCBzdGF0
aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKICAgICAKICAgICAvLyBzZXR0
aW5nIHRoZSBzZWxlY3Rpb24gYWx3YXlzIGNsZWFycyBzYXZlZCB2ZXJ0aWNhbCBuYXZpZ2F0aW9u
IHggcG9zaXRpb24KLSAgICBfcGFydC0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgbV9m
cmFtZS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgCiAgICAgLy8gYWx0ZXJpbmcgdGhl
IHNlbGVjdGlvbiBhbHNvIHNldHMgdGhlIGdyYW51bGFyaXR5IGJhY2sgdG8gY2hhcmFjdGVyCiAg
ICAgLy8gTk9URTogVGhlIG9uZSBleGNlcHRpb24gaXMgdGhhdCB3ZSBuZWVkIHRvIGtlZXAgd29y
ZCBncmFudWxhcml0eQogICAgIC8vIHRvIHByZXNlcnZlIHNtYXJ0IGRlbGV0ZSBiZWhhdmlvciB3
aGVuIGV4dGVuZGluZyBieSB3b3JkLiAgZS5nLiBkb3VibGUtY2xpY2ssCiAgICAgLy8gdGhlbiBz
aGlmdC1vcHRpb24tcmlnaHRhcnJvdywgdGhlbiBkZWxldGUgbmVlZHMgdG8gc21hcnQgZGVsZXRl
LCBwZXIgVGV4dEVkaXQuCiAgICAgaWYgKCEoKGFsdGVyYXRpb24gPT0gV2ViU2VsZWN0QnlFeHRl
bmRpbmcpICYmCi0gICAgICAgICAgKGdyYW51bGFyaXR5ID09IFdlYkJyaWRnZVNlbGVjdEJ5V29y
ZCkgJiYgKF9wYXJ0LT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IGtodG1sOjpXT1JEKSkpCi0g
ICAgICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShzdGF0aWNfY2FzdDxFVGV4dEdy
YW51bGFyaXR5PihXZWJCcmlkZ2VTZWxlY3RCeUNoYXJhY3RlcikpOworICAgICAgICAgIChncmFu
dWxhcml0eSA9PSBXZWJCcmlkZ2VTZWxlY3RCeVdvcmQpICYmIChtX2ZyYW1lLT5zZWxlY3Rpb25H
cmFudWxhcml0eSgpID09IGtodG1sOjpXT1JEKSkpCisgICAgICAgIG1fZnJhbWUtPnNldFNlbGVj
dGlvbkdyYW51bGFyaXR5KHN0YXRpY19jYXN0PEVUZXh0R3JhbnVsYXJpdHk+KFdlYkJyaWRnZVNl
bGVjdEJ5Q2hhcmFjdGVyKSk7CiAgICAgCiAgICAgLy8gcmVzdG9yZSB2ZXJ0aWNhbCBuYXZpZ2F0
aW9uIHggcG9zaXRpb24gaWYgbmVjZXNzYXJ5Ci0gICAgaWYgKHhQb3MgIT0gS0hUTUxQYXJ0OjpO
b1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKLSAgICAgICAgX3BhcnQtPnNldFhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih4UG9zKTsKKyAgICBpZiAoeFBvcyAhPSBGcmFtZTo6
Tm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pCisgICAgICAgIG1fZnJhbWUtPnNldFhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih4UG9zKTsKIAotICAgIF9wYXJ0LT5zZWxlY3RG
cmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOworICAgIG1fZnJhbWUtPnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiAKICAgICBbc2VsZiBlbnN1
cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gdmVydGlj
YWxEaXN0YW5jZTooZmxvYXQpdmVydGljYWxEaXN0YW5jZQogewotICAgIGlmICghcGFydEhhc1Nl
bGVjdGlvbihzZWxmKSkKKyAgICBpZiAoIWZyYW1lSGFzU2VsZWN0aW9uKHNlbGYpKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgICAgICAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlv
bihfcGFydC0+c2VsZWN0aW9uKCkpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9u
KG1fZnJhbWUtPnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0
PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIHN0YXRpY19jYXN0PGlu
dD4odmVydGljYWxEaXN0YW5jZSkpOwogICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aElt
cGw6c2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKHZvaWQpYWx0ZXJDdXJyZW50
U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gdmVydGljYWxEaXN0
YW5jZTooZmxvYXQpdmVydGljYWxEaXN0YW5jZQogewotICAgIGlmICghcGFydEhhc1NlbGVjdGlv
bihzZWxmKSkKKyAgICBpZiAoIWZyYW1lSGFzU2VsZWN0aW9uKHNlbGYpKQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uKF9wYXJ0LT5z
ZWxlY3Rpb24oKSk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24obV9mcmFtZS0+
c2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoc3RhdGljX2Nhc3Q8U2VsZWN0aW9u
Q29udHJvbGxlcjo6RUFsdGVyPihhbHRlcmF0aW9uKSwgc3RhdGljX2Nhc3Q8aW50Pih2ZXJ0aWNh
bERpc3RhbmNlKSk7CiAKICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gYWx3YXlzIGNsZWFy
cyBzYXZlZCB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIHggcG9zaXRpb24sIHNvIHByZXNlcnZlIGl0Ci0g
ICAgaW50IHhQb3MgPSBfcGFydC0+eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7Ci0g
ICAgX3BhcnQtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIF9wYXJ0LT5zZXRTZWxlY3Rp
b25HcmFudWxhcml0eShzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihXZWJCcmlkZ2VTZWxl
Y3RCeUNoYXJhY3RlcikpOwotICAgIF9wYXJ0LT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24oeFBvcyk7CisgICAgaW50IHhQb3MgPSBtX2ZyYW1lLT54UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24oKTsKKyAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb25HcmFudWxhcml0eShzdGF0aWNfY2FzdDxFVGV4dEdyYW51
bGFyaXR5PihXZWJCcmlkZ2VTZWxlY3RCeUNoYXJhY3RlcikpOworICAgIG1fZnJhbWUtPnNldFhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih4UG9zKTsKIAotICAgIF9wYXJ0LT5zZWxlY3RG
cmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOworICAgIG1fZnJhbWUtPnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiAKICAgICBbc2VsZiBlbnN1
cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KQEAgLTE5NDgsNyArMTk0OCw3IEBAIHN0YXRpYyBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIC0gKFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51
bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5CiB7CiAgICAgLy8gTk9URTogVGhlIGVudW1zICpt
dXN0KiBtYXRjaCB0aGUgdmVyeSBzaW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gU2VsZWN0aW9uQ29u
dHJvbGxlci5oCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51
bGFyaXR5PihfcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5PihtX2ZyYW1lLT5zZWxlY3Rpb25H
cmFudWxhcml0eSgpKTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5
IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCkBAIC0xOTYwLDcgKzE5NjAsNyBAQCBzdGF0
aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgQVNTRVJUKHN0YXJ0Q29u
dGFpbmVyLT5nZXREb2N1bWVudCgpKTsKICAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmdldERv
Y3VtZW50KCkgPT0gZW5kQ29udGFpbmVyLT5nZXREb2N1bWVudCgpKTsKICAgICAKLSAgICBfcGFy
dC0+eG1sRG9jSW1wbCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBtX2ZyYW1lLT54bWxEb2NJbXBsKCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc3RhdGljX2Nhc3Q8RUFmZmlu
aXR5PihzZWxlY3Rpb25BZmZpbml0eSk7CiAgICAgCkBAIC0xOTczLDEyICsxOTczLDEyIEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcmFuZ2Ugc3RhcnRPZmZzZXRdLCBhZmZp
bml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kQ29udGFpbmVyLCBbcmFu
Z2UgZW5kT2Zmc2V0XSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBTZWxlY3Rp
b25Db250cm9sbGVyIHNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpOwotICAgIF9w
YXJ0LT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7CisgICAgbV9mcmFtZS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgY2xvc2VUeXBpbmcpOwogfQogCiAtIChET01SYW5nZSAq
KXNlbGVjdGVkRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBs
Ol9wYXJ0LT5zZWxlY3Rpb24oKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVybiBbRE9NUmFu
Z2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+c2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpXTsK
IH0KIAogLSAoTlNSYW5nZSljb252ZXJ0VG9OU1JhbmdlOihET006OlJhbmdlSW1wbCAqKXJhbmdl
CkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVs
ZW1lbnRGCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiBmcm9tU3RhcnRSYW5nZShfcGFydC0+eG1sRG9jSW1w
bCgpLT5jcmVhdGVSYW5nZSgpKTsKKyAgICBSZWZQdHI8UmFuZ2VJbXBsPiBmcm9tU3RhcnRSYW5n
ZShtX2ZyYW1lLT54bWxEb2NJbXBsKCktPmNyZWF0ZVJhbmdlKCkpOwogICAgIGludCBleGNlcHRp
b24gPSAwOwogCiAgICAgZnJvbVN0YXJ0UmFuZ2UtPnNldEVuZChyYW5nZS0+c3RhcnRDb250YWlu
ZXIoZXhjZXB0aW9uKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlvbik7
CkBAIC0yMDA2LDcgKzIwMDYsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVs
ZW1lbnRGCiAgICAgaWYgKG5zcmFuZ2UubGVuZ3RoID4gSU5UX01BWCB8fCBuc3JhbmdlLmxvY2F0
aW9uICsgbnNyYW5nZS5sZW5ndGggPiBJTlRfTUFYKQogICAgICAgICBuc3JhbmdlLmxlbmd0aCA9
IElOVF9NQVggLSBuc3JhbmdlLmxvY2F0aW9uOwogCi0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoX3BhcnQtPnhtbERvY0ltcGwoKSwgbnNyYW5nZS5s
b2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKG1fZnJhbWUtPnhtbERvY0ltcGwoKSwgbnNyYW5nZS5sb2Nh
dGlvbiwgbnNyYW5nZS5sZW5ndGgpOwogfQogCiAtIChET01SYW5nZSAqKWNvbnZlcnROU1Jhbmdl
VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCkBAIC0yMDIxLDU3ICsyMDIxLDU3IEBAIHN0YXRp
YyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAodm9pZClzZWxlY3ROU1Jh
bmdlOihOU1JhbmdlKXJhbmdlCiB7Ci0gICAgX3BhcnQtPnNldFNlbGVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyKFtzZWxmIGNvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwga2h0bWw6OlNFTF9ERUZB
VUxUX0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICBtX2ZyYW1l
LT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihbc2VsZiBjb252ZXJ0VG9ET01SYW5n
ZTpyYW5nZV0sIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSwga2h0bWw6OlNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CiB9CiAKIC0gKE5TUmFuZ2Upc2VsZWN0ZWROU1JhbmdlCiB7Ci0gICAgcmV0
dXJuIFtzZWxmIGNvbnZlcnRUb05TUmFuZ2U6X3BhcnQtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5n
ZXQoKV07CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRUb05TUmFuZ2U6bV9mcmFtZS0+c2VsZWN0
aW9uKCkudG9SYW5nZSgpLmdldCgpXTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU1NlbGVjdGlvbkFmZmlu
aXR5PihfcGFydC0+c2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8TlNTZWxlY3Rpb25BZmZpbml0eT4obV9mcmFtZS0+c2VsZWN0aW9uKCkuc3RhcnRB
ZmZpbml0eSgpKTsKIH0KIAogLSAodm9pZClzZXRNYXJrRE9NUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UKIHsKLSAgICBfcGFydC0+c2V0TWFyayhTZWxlY3Rpb25Db250cm9sbGVyKFtyYW5nZSBfcmFu
Z2VJbXBsXSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRf
QUZGSU5JVFkpKTsKKyAgICBtX2ZyYW1lLT5zZXRNYXJrKFNlbGVjdGlvbkNvbnRyb2xsZXIoW3Jh
bmdlIF9yYW5nZUltcGxdLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFksIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAtIChET01SYW5nZSAqKW1hcmtET01SYW5nZQogewot
ICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6X3BhcnQtPm1hcmsoKS50b1Jhbmdl
KCkuZ2V0KCldOworICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+
bWFyaygpLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dERPTVJh
bmdlOihET01SYW5nZSAqKXJhbmdlIGN1c3RvbUF0dHJpYnV0ZXM6KE5TQXJyYXkgKilhdHRyaWJ1
dGVzIHJhbmdlczooTlNBcnJheSAqKXJhbmdlcwogewotICAgIF9wYXJ0LT5zZXRNYXJrZWRUZXh0
UmFuZ2UoW3JhbmdlIF9yYW5nZUltcGxdLCBhdHRyaWJ1dGVzLCByYW5nZXMpOworICAgIG1fZnJh
bWUtPnNldE1hcmtlZFRleHRSYW5nZShbcmFuZ2UgX3JhbmdlSW1wbF0sIGF0dHJpYnV0ZXMsIHJh
bmdlcyk7CiB9CiAKIC0gKERPTVJhbmdlICopbWFya2VkVGV4dERPTVJhbmdlCiB7Ci0gICAgcmV0
dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpfcGFydC0+bWFya2VkVGV4dFJhbmdlKCldOwor
ICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+bWFya2VkVGV4dFJh
bmdlKCldOwogfQogCiAtIChOU1JhbmdlKW1hcmtlZFRleHROU1JhbmdlCiB7Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRUb05TUmFuZ2U6X3BhcnQtPm1hcmtlZFRleHRSYW5nZSgpXTsKKyAgICBy
ZXR1cm4gW3NlbGYgY29udmVydFRvTlNSYW5nZTptX2ZyYW1lLT5tYXJrZWRUZXh0UmFuZ2UoKV07
CiB9CiAKIC0gKHZvaWQpcmVwbGFjZU1hcmtlZFRleHRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
CiB7Ci0gICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICghZnJhbWVIYXNT
ZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpbnQgZXhjZXB0aW9u
ID0gMDsKIAotICAgIFJhbmdlSW1wbCAqbWFya2VkVGV4dFJhbmdlID0gX3BhcnQtPm1hcmtlZFRl
eHRSYW5nZSgpOworICAgIFJhbmdlSW1wbCAqbWFya2VkVGV4dFJhbmdlID0gbV9mcmFtZS0+bWFy
a2VkVGV4dFJhbmdlKCk7CiAgICAgaWYgKG1hcmtlZFRleHRSYW5nZSAmJiAhbWFya2VkVGV4dFJh
bmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSkKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChfcGFydC0+eG1sRG9jSW1wbCgpLCBOTyk7CisgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+eG1sRG9jSW1wbCgpLCBOTyk7CiAgICAgCiAg
ICAgaWYgKFt0ZXh0IGxlbmd0aF0gPiAwKQotICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KF9wYXJ0LT54bWxEb2NJbXBsKCksIHRleHQsIFlFUyk7CisgICAgICAgIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQobV9mcmFtZS0+eG1sRG9jSW1wbCgpLCB0ZXh0LCBZRVMpOwogICAgIAog
ICAgIFtzZWxmIGVuc3VyZVNlbGVjdGlvblZpc2libGVdOwogfQpAQCAtMjEwOCw3ICsyMTA4LDcg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIEFTU0VSVChz
dGFydENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVy
LT5nZXREb2N1bWVudCgpID09IGVuZENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7CiAgICAgCi0g
ICAgX3BhcnQtPnhtbERvY0ltcGwoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgbV9mcmFtZS0+eG1sRG9jSW1wbCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBb
cHJvcG9zZWRSYW5nZSBzdGFydE9mZnNldF0pOwogICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWlu
ZXIsIFtwcm9wb3NlZFJhbmdlIGVuZE9mZnNldF0pOwpAQCAtMjExOSw3ICsyMTE5LDcgQEAgc3Rh
dGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIGlmIChuZXdFbmQuaXNO
dWxsKCkpCiAgICAgICAgIG5ld0VuZCA9IGVuZDsKIAotICAgIFJhbmdlSW1wbCAqcmFuZ2UgPSBf
cGFydC0+eG1sRG9jSW1wbCgpLT5jcmVhdGVSYW5nZSgpOworICAgIFJhbmdlSW1wbCAqcmFuZ2Ug
PSBtX2ZyYW1lLT54bWxEb2NJbXBsKCktPmNyZWF0ZVJhbmdlKCk7CiAgICAgaW50IGV4Y2VwdGlv
biA9IDA7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0Lm5vZGUoKSwgbmV3U3RhcnQub2Zm
c2V0KCksIGV4Y2VwdGlvbik7CiAgICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5ub2RlKCksIG5l
d1N0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwpAQCAtMjE1Niw3ICsyMTU2LDcgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIGlmIChhZGRMZWFkaW5nU3Bh
Y2UpIHsKICAgICAgICAgUUNoYXIgcHJldmlvdXNDaGFyID0gc3RhcnRWaXNpYmxlUG9zLnByZXZp
b3VzKCkuY2hhcmFjdGVyKCk7CiAgICAgICAgIGlmICghcHJldmlvdXNDaGFyLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICBhZGRMZWFkaW5nU3BhY2UgPSAhX3BhcnQtPmlzQ2hhcmFjdGVyU21hcnRS
ZXBsYWNlRXhlbXB0KHByZXZpb3VzQ2hhciwgdHJ1ZSk7CisgICAgICAgICAgICBhZGRMZWFkaW5n
U3BhY2UgPSAhbV9mcmFtZS0+aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXND
aGFyLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTIxNjQsNyArMjE2NCw3IEBA
IHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBpZiAoYWRkVHJh
aWxpbmdTcGFjZSkgewogICAgICAgICBRQ2hhciB0aGlzQ2hhciA9IGVuZFZpc2libGVQb3MuY2hh
cmFjdGVyKCk7CiAgICAgICAgIGlmICghdGhpc0NoYXIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IGFkZFRyYWlsaW5nU3BhY2UgPSAhX3BhcnQtPmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0
KHRoaXNDaGFyLCBmYWxzZSk7CisgICAgICAgICAgICBhZGRUcmFpbGluZ1NwYWNlID0gIW1fZnJh
bWUtPmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KHRoaXNDaGFyLCBmYWxzZSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkBAIC0yMTkyLDE5ICsyMTkyLDE5IEBAIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWRv
Y3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBi
YXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcgCiB7Ci0gICAgaWYgKCFfcGFy
dCB8fCAhX3BhcnQtPnhtbERvY0ltcGwoKSkKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUt
PnhtbERvY0ltcGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnRJbXBsPiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChfcGFy
dC0+eG1sRG9jSW1wbCgpLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcobWFya3VwU3RyaW5nKSwgUVN0
cmluZzo6ZnJvbU5TU3RyaW5nKGJhc2VVUkxTdHJpbmcpKTsKKyAgICBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnRJbXBsPiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChtX2Zy
YW1lLT54bWxEb2NJbXBsKCksIFFTdHJpbmc6OmZyb21OU1N0cmluZyhtYXJrdXBTdHJpbmcpLCBR
U3RyaW5nOjpmcm9tTlNTdHJpbmcoYmFzZVVSTFN0cmluZykpOwogICAgIHJldHVybiBbRE9NRG9j
dW1lbnRGcmFnbWVudCBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbXBsOmZyYWdtZW50LmdldCgpXTsK
IH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWRvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDoo
TlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpIHx8ICF0
ZXh0KQorICAgIGlmICghZnJhbWVIYXNTZWxlY3Rpb24oc2VsZikgfHwgIXRleHQpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfZG9jdW1l
bnRGcmFnbWVudFdpdGhJbXBsOmNyZWF0ZUZyYWdtZW50RnJvbVRleHQoX3BhcnQtPnhtbERvY0lt
cGwoKSwgUVN0cmluZzo6ZnJvbU5TU3RyaW5nKHRleHQpKS5nZXQoKV07CisgICAgcmV0dXJuIFtE
T01Eb2N1bWVudEZyYWdtZW50IF9kb2N1bWVudEZyYWdtZW50V2l0aEltcGw6Y3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChtX2ZyYW1lLT54bWxEb2NJbXBsKCksIFFTdHJpbmc6OmZyb21OU1N0cmluZyh0
ZXh0KSkuZ2V0KCldOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopZG9jdW1lbnRGcmFn
bWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzCkBAIC0yMjEzLDIyICsy
MjEzLDIyIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBE
T01Ob2RlICpub2RlOwogICAgIFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+IG5vZGVMaXN0OwogICAg
IAotICAgIGlmICghX3BhcnQgfHwgIV9wYXJ0LT54bWxEb2NJbXBsKCkpCisgICAgaWYgKCFtX2Zy
YW1lIHx8ICFtX2ZyYW1lLT54bWxEb2NJbXBsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAog
ICAgIHdoaWxlICgobm9kZSA9IFtub2RlRW51bSBuZXh0T2JqZWN0XSkpIHsKICAgICAgICAgbm9k
ZUxpc3QuYXBwZW5kKFtub2RlIF9ub2RlSW1wbF0pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
W0RPTURvY3VtZW50RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1wbDpjcmVhdGVGcmFn
bWVudEZyb21Ob2RlTGlzdChfcGFydC0+eG1sRG9jSW1wbCgpLCBub2RlTGlzdCkuZ2V0KCldOwor
ICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbXBs
OmNyZWF0ZUZyYWdtZW50RnJvbU5vZGVMaXN0KG1fZnJhbWUtPnhtbERvY0ltcGwoKSwgbm9kZUxp
c3QpLmdldCgpXTsKIH0KIAogLSAodm9pZClyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OihE
T01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2Vs
ZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxl
OihCT09MKW1hdGNoU3R5bGUKIHsKLSAgICBpZiAoIXBhcnRIYXNTZWxlY3Rpb24oc2VsZikgfHwg
IWZyYWdtZW50KQorICAgIGlmICghZnJhbWVIYXNTZWxlY3Rpb24oc2VsZikgfHwgIWZyYWdtZW50
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIobmV3IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kKF9wYXJ0LT54bWxEb2NJbXBsKCksIFtmcmFnbWVudCBfZnJhZ21lbnRJ
bXBsXSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSkpLmFwcGx5
KCk7CisgICAgRWRpdENvbW1hbmRQdHIobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKG1fZnJh
bWUtPnhtbERvY0ltcGwoKSwgW2ZyYWdtZW50IF9mcmFnbWVudEltcGxdLCBzZWxlY3RSZXBsYWNl
bWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKSkuYXBwbHkoKTsKICAgICBbc2VsZiBlbnN1
cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KIApAQCAtMjI1Miw1NCArMjI1Miw1NCBAQCBzdGF0aWMg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKHZvaWQpaW5zZXJ0TGluZUJy
ZWFrCiB7Ci0gICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICghZnJhbWVI
YXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBUeXBpbmdDb21t
YW5kOjppbnNlcnRMaW5lQnJlYWsoX3BhcnQtPnhtbERvY0ltcGwoKSk7CisgICAgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1fZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAgW3NlbGYg
ZW5zdXJlU2VsZWN0aW9uVmlzaWJsZV07CiB9CiAKIC0gKHZvaWQpaW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yCiB7Ci0gICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICghZnJh
bWVIYXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoX3BhcnQtPnhtbERvY0ltcGwoKSk7Cisg
ICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUtPnhtbERv
Y0ltcGwoKSk7CiAgICAgW3NlbGYgZW5zdXJlU2VsZWN0aW9uVmlzaWJsZV07CiB9CiAKIC0gKHZv
aWQpaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50CiB7Ci0gICAgaWYgKCFw
YXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQorICAgIGlmICghZnJhbWVIYXNTZWxlY3Rpb24oc2VsZikp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoX3BhcnQtPnhtbERvY0ltcGwoKSk7CisgICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KG1fZnJh
bWUtPnhtbERvY0ltcGwoKSk7CiAgICAgW3NlbGYgZW5zdXJlU2VsZWN0aW9uVmlzaWJsZV07CiB9
CiAKIC0gKHZvaWQpaW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdEluc2VydGVkVGV4
dDooQk9PTClzZWxlY3RJbnNlcnRlZFRleHQKIHsKLSAgICBpZiAoIXBhcnRIYXNTZWxlY3Rpb24o
c2VsZikpCisgICAgaWYgKCFmcmFtZUhhc1NlbGVjdGlvbihzZWxmKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoX3BhcnQtPnhtbERvY0ltcGwo
KSwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKKyAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KG1fZnJhbWUtPnhtbERvY0ltcGwoKSwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKICAg
ICBbc2VsZiBlbnN1cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3Rp
b25Ub0RyYWdDYXJldAogewotICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb24oX3BhcnQtPmRyYWdDYXJl
dCgpKTsKKyAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24obV9mcmFtZS0+ZHJhZ0NhcmV0KCkpOwog
fQogCiAtICh2b2lkKW1vdmVTZWxlY3Rpb25Ub0RyYWdDYXJldDooRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKXNlbGVjdGlvbkZyYWdtZW50IHNtYXJ0TW92ZTooQk9PTClzbWFydE1vdmUKIHsKLSAgICBQ
b3NpdGlvbiBiYXNlID0gX3BhcnQtPmRyYWdDYXJldCgpLmJhc2UoKTsKLSAgICBFZGl0Q29tbWFu
ZFB0cihuZXcgTW92ZVNlbGVjdGlvbkNvbW1hbmQoX3BhcnQtPnhtbERvY0ltcGwoKSwgW3NlbGVj
dGlvbkZyYWdtZW50IF9mcmFnbWVudEltcGxdLCBiYXNlLCBzbWFydE1vdmUpKS5hcHBseSgpOwor
ICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLT5kcmFnQ2FyZXQoKS5iYXNlKCk7CisgICAgRWRp
dENvbW1hbmRQdHIobmV3IE1vdmVTZWxlY3Rpb25Db21tYW5kKG1fZnJhbWUtPnhtbERvY0ltcGwo
KSwgW3NlbGVjdGlvbkZyYWdtZW50IF9mcmFnbWVudEltcGxdLCBiYXNlLCBzbWFydE1vdmUpKS5h
cHBseSgpOwogfQogCiAtIChWaXNpYmxlUG9zaXRpb24pX3Zpc2libGVQb3NpdGlvbkZvclBvaW50
OihOU1BvaW50KXBvaW50CiB7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IF9wYXJ0LT5y
ZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBtX2ZyYW1lLT5yZW5kZXJl
cigpOwogICAgIGlmICghcmVuZGVyZXIpIHsKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwogICAgIH0KQEAgLTIzMTYsMTcgKzIzMTYsMTcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmZvcm1FbGVtZW50RgogLSAodm9pZCltb3ZlRHJhZ0NhcmV0VG9Qb2ludDooTlNQb2lu
dClwb2ludAogeyAgIAogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgZHJhZ0NhcmV0KFtzZWxmIF92
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pOwotICAgIF9wYXJ0LT5zZXREcmFnQ2FyZXQo
ZHJhZ0NhcmV0KTsKKyAgICBtX2ZyYW1lLT5zZXREcmFnQ2FyZXQoZHJhZ0NhcmV0KTsKIH0KIAog
LSAodm9pZClyZW1vdmVEcmFnQ2FyZXQKIHsKLSAgICBfcGFydC0+c2V0RHJhZ0NhcmV0KFNlbGVj
dGlvbkNvbnRyb2xsZXIoKSk7CisgICAgbV9mcmFtZS0+c2V0RHJhZ0NhcmV0KFNlbGVjdGlvbkNv
bnRyb2xsZXIoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopZHJhZ0NhcmV0RE9NUmFuZ2UKIHsKLSAg
ICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOl9wYXJ0LT5kcmFnQ2FyZXQoKS50b1Jh
bmdlKCkuZ2V0KCldOworICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bV9mcmFt
ZS0+ZHJhZ0NhcmV0KCkudG9SYW5nZSgpLmdldCgpXTsKIH0KIAogLSAoRE9NUmFuZ2UgKillZGl0
YWJsZURPTVJhbmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKQEAgLTIzNjIsNzUgKzIzNjIsNzUg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtICh2b2lkKWRl
bGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZTooQk9PTClzbWFydERlbGV0ZQogewotICAgIGlm
ICghcGFydEhhc1NlbGVjdGlvbihzZWxmKSkKKyAgICBpZiAoIWZyYW1lSGFzU2VsZWN0aW9uKHNl
bGYpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIobmV3IERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQoX3BhcnQtPnhtbERvY0ltcGwoKSwgc21hcnREZWxldGUpKS5hcHBs
eSgpOworICAgIEVkaXRDb21tYW5kUHRyKG5ldyBEZWxldGVTZWxlY3Rpb25Db21tYW5kKG1fZnJh
bWUtPnhtbERvY0ltcGwoKSwgc21hcnREZWxldGUpKS5hcHBseSgpOwogfQogCiAtICh2b2lkKWRl
bGV0ZUtleVByZXNzZWRXaXRoU21hcnREZWxldGU6KEJPT0wpc21hcnREZWxldGUKIHsKLSAgICBp
ZiAoIV9wYXJ0IHx8ICFfcGFydC0+eG1sRG9jSW1wbCgpKQorICAgIGlmICghbV9mcmFtZSB8fCAh
bV9mcmFtZS0+eG1sRG9jSW1wbCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChfcGFydC0+eG1sRG9jSW1wbCgpLCBzbWFydERlbGV0
ZSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1lLT54bWxEb2NJ
bXBsKCksIHNtYXJ0RGVsZXRlKTsKICAgICBbc2VsZiBlbnN1cmVTZWxlY3Rpb25WaXNpYmxlXTsK
IH0KIAogLSAodm9pZClmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZFdpdGhTbWFydERlbGV0ZTooQk9P
TClzbWFydERlbGV0ZQogewotICAgIGlmICghX3BhcnQgfHwgIV9wYXJ0LT54bWxEb2NJbXBsKCkp
CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT54bWxEb2NJbXBsKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChf
cGFydC0+eG1sRG9jSW1wbCgpLCBzbWFydERlbGV0ZSk7CisgICAgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+eG1sRG9jSW1wbCgpLCBzbWFydERlbGV0ZSk7
CiAgICAgW3NlbGYgZW5zdXJlU2VsZWN0aW9uVmlzaWJsZV07CiB9CiAKIC0gKERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gKil0eXBpbmdTdHlsZQogewotICAgIGlmICghX3BhcnQgfHwgIV9wYXJ0LT50
eXBpbmdTdHlsZSgpKQorICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+dHlwaW5nU3R5bGUo
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRp
b24gX3N0eWxlRGVjbGFyYXRpb25XaXRoSW1wbDpfcGFydC0+dHlwaW5nU3R5bGUoKS0+Y29weSgp
XTsKKyAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gX3N0eWxlRGVjbGFyYXRpb25X
aXRoSW1wbDptX2ZyYW1lLT50eXBpbmdTdHlsZSgpLT5jb3B5KCldOwogfQogCiAtICh2b2lkKXNl
dFR5cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rp
b246KFdlYlVuZG9BY3Rpb24pdW5kb0FjdGlvbgogewotICAgIGlmICghX3BhcnQpCisgICAgaWYg
KCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgX3BhcnQtPmNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZShbc3R5bGUgX3N0eWxlRGVjbGFyYXRpb25JbXBsXSwgc3RhdGljX2Nhc3Q8RWRpdEFj
dGlvbj4odW5kb0FjdGlvbikpOworICAgIG1fZnJhbWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHls
ZShbc3R5bGUgX3N0eWxlRGVjbGFyYXRpb25JbXBsXSwgc3RhdGljX2Nhc3Q8RWRpdEFjdGlvbj4o
dW5kb0FjdGlvbikpOwogfQogCiAtICh2b2lkKWFwcGx5U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooV2ViVW5kb0FjdGlvbil1bmRvQWN0aW9uCiB7
Ci0gICAgaWYgKCFfcGFydCkKKyAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBfcGFydC0+YXBwbHlTdHlsZShbc3R5bGUgX3N0eWxlRGVjbGFyYXRpb25JbXBsXSwgc3RhdGlj
X2Nhc3Q8RWRpdEFjdGlvbj4odW5kb0FjdGlvbikpOworICAgIG1fZnJhbWUtPmFwcGx5U3R5bGUo
W3N0eWxlIF9zdHlsZURlY2xhcmF0aW9uSW1wbF0sIHN0YXRpY19jYXN0PEVkaXRBY3Rpb24+KHVu
ZG9BY3Rpb24pKTsKIH0KIAogLSAodm9pZClhcHBseVBhcmFncmFwaFN0eWxlOihET01DU1NTdHls
ZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KFdlYlVuZG9BY3Rpb24pdW5kb0Fj
dGlvbgogewotICAgIGlmICghX3BhcnQpCisgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1
cm47Ci0gICAgX3BhcnQtPmFwcGx5UGFyYWdyYXBoU3R5bGUoW3N0eWxlIF9zdHlsZURlY2xhcmF0
aW9uSW1wbF0sIHN0YXRpY19jYXN0PEVkaXRBY3Rpb24+KHVuZG9BY3Rpb24pKTsKKyAgICBtX2Zy
YW1lLT5hcHBseVBhcmFncmFwaFN0eWxlKFtzdHlsZSBfc3R5bGVEZWNsYXJhdGlvbkltcGxdLCBz
dGF0aWNfY2FzdDxFZGl0QWN0aW9uPih1bmRvQWN0aW9uKSk7CiB9CiAKIC0gKEJPT0wpc2VsZWN0
aW9uU3RhcnRIYXNTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlCiB7Ci0gICAg
aWYgKCFfcGFydCkKKyAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICBy
ZXR1cm4gX3BhcnQtPnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoW3N0eWxlIF9zdHlsZURlY2xhcmF0
aW9uSW1wbF0pOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKFtz
dHlsZSBfc3R5bGVEZWNsYXJhdGlvbkltcGxdKTsKIH0KIAogLSAoTlNDZWxsU3RhdGVWYWx1ZSlz
ZWxlY3Rpb25IYXNTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlCiB7Ci0gICAg
aWYgKCFfcGFydCkKKyAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBOU09mZlN0YXRl
OwotICAgIHN3aXRjaCAoX3BhcnQtPnNlbGVjdGlvbkhhc1N0eWxlKFtzdHlsZSBfc3R5bGVEZWNs
YXJhdGlvbkltcGxdKSkgewotICAgICAgICBjYXNlIEtIVE1MUGFydDo6ZmFsc2VUcmlTdGF0ZToK
KyAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbkhhc1N0eWxlKFtzdHlsZSBfc3R5bGVEZWNs
YXJhdGlvbkltcGxdKSkgeworICAgICAgICBjYXNlIEZyYW1lOjpmYWxzZVRyaVN0YXRlOgogICAg
ICAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7Ci0gICAgICAgIGNhc2UgS0hUTUxQYXJ0Ojp0cnVl
VHJpU3RhdGU6CisgICAgICAgIGNhc2UgRnJhbWU6OnRydWVUcmlTdGF0ZToKICAgICAgICAgICAg
IHJldHVybiBOU09uU3RhdGU7Ci0gICAgICAgIGNhc2UgS0hUTUxQYXJ0OjptaXhlZFRyaVN0YXRl
OgorICAgICAgICBjYXNlIEZyYW1lOjptaXhlZFRyaVN0YXRlOgogICAgICAgICAgICAgcmV0dXJu
IE5TTWl4ZWRTdGF0ZTsKICAgICB9CiAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7CkBAIC0yNDM4LDM4
ICsyNDM4LDM4IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAog
LSAodm9pZClhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQKIHsKLSAgICBpZiAoIV9wYXJ0
KQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIF9wYXJ0LT5hcHBseUVk
aXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICBtX2ZyYW1lLT5hcHBseUVkaXRpbmdTdHls
ZVRvQm9keUVsZW1lbnQoKTsKIH0KIAogLSAodm9pZClyZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9k
eUVsZW1lbnQKIHsKLSAgICBpZiAoIV9wYXJ0KQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAg
cmV0dXJuOwotICAgIF9wYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKTsK
KyAgICBtX2ZyYW1lLT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKTsKIH0KIAog
LSAodm9pZClhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQK
IHsKLSAgICBpZiAoIV9wYXJ0KQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIF9wYXJ0LT5hcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChbZWxlbWVudCBfZWxlbWVudElt
cGxdKTsKKyAgICBtX2ZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChbZWxlbWVudCBf
ZWxlbWVudEltcGxdKTsKIH0KIAogLSAodm9pZClyZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVu
dDooRE9NRWxlbWVudCAqKWVsZW1lbnQKIHsKLSAgICBpZiAoIV9wYXJ0KQorICAgIGlmICghbV9m
cmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIF9wYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9t
RWxlbWVudChbZWxlbWVudCBfZWxlbWVudEltcGxdKTsKKyAgICBtX2ZyYW1lLT5yZW1vdmVFZGl0
aW5nU3R5bGVGcm9tRWxlbWVudChbZWxlbWVudCBfZWxlbWVudEltcGxdKTsKIH0KIAogLSAoTlNG
b250ICopZm9udEZvclNlbGVjdGlvbjooQk9PTCAqKWhhc011bHRpcGxlRm9udHMKIHsKICAgICBi
b29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7Ci0gICAg
aWYgKF9wYXJ0KQotICAgICAgICBmb250ID0gX3BhcnQtPmZvbnRGb3JTZWxlY3Rpb24oaGFzTXVs
dGlwbGVGb250cyA/ICZtdWx0aXBsZUZvbnRzIDogMCk7CisgICAgaWYgKG1fZnJhbWUpCisgICAg
ICAgIGZvbnQgPSBtX2ZyYW1lLT5mb250Rm9yU2VsZWN0aW9uKGhhc011bHRpcGxlRm9udHMgPyAm
bXVsdGlwbGVGb250cyA6IDApOwogICAgIGlmIChoYXNNdWx0aXBsZUZvbnRzKQogICAgICAgICAq
aGFzTXVsdGlwbGVGb250cyA9IG11bHRpcGxlRm9udHM7CiAgICAgcmV0dXJuIGZvbnQ7CkBAIC0y
NDc3LDI0ICsyNDc3LDI0IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKIAogLSAoTlNEaWN0aW9uYXJ5ICopZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydAog
ewotICAgIHJldHVybiBfcGFydCA/IF9wYXJ0LT5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0
YXJ0KCkgOiBuaWw7CisgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5mb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWw7CiB9CiAKIC0gKE5TV3JpdGluZ0RpcmVjdGlvbili
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0CiB7Ci0gICAgcmV0dXJuIF9wYXJ0
ID8gX3BhcnQtPmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA6IE5TV3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OworICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+
YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIDogTlNXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQ7CiB9CiAKIC0gKHZvaWQpZW5zdXJlU2VsZWN0aW9uVmlzaWJsZQogewot
ICAgIGlmICghcGFydEhhc1NlbGVjdGlvbihzZWxmKSkKKyAgICBpZiAoIWZyYW1lSGFzU2VsZWN0
aW9uKHNlbGYpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgS0hUTUxWaWV3ICp2ID0gX3Bh
cnQtPnZpZXcoKTsKKyAgICBLSFRNTFZpZXcgKnYgPSBtX2ZyYW1lLT52aWV3KCk7CiAgICAgaWYg
KCF2KQogICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBleHRlbnQgPSBfcGFydC0+c2Vs
ZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCkuZXh0ZW50KCk7CiAgICAgaWYgKGV4dGVudC5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIApAQCAtMjUwNiw3ICsyNTA2LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwg
KmZvcm1FbGVtZW50RgogICAgIGlmICghZG9jdW1lbnRWaWV3KQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgUVJlY3QgZXh0ZW50UmVjdCA9IHJlbmRlcmVyLT5jYXJldFJlY3QoZXh0ZW50Lm9m
ZnNldCgpLCBfcGFydC0+c2VsZWN0aW9uKCkuZXh0ZW50QWZmaW5pdHkoKSk7CisgICAgUVJlY3Qg
ZXh0ZW50UmVjdCA9IHJlbmRlcmVyLT5jYXJldFJlY3QoZXh0ZW50Lm9mZnNldCgpLCBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS5leHRlbnRBZmZpbml0eSgpKTsKICAgICBSZW5kZXJMYXllciAqbGF5ZXIg
PSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGxh
eWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGV4dGVudFJlY3QpOwpAQCAtMjUxNiwxOSArMjUxNiwx
OSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKEJPT0wp
ZXZlbnRNYXlTdGFydERyYWc6KE5TRXZlbnQgKilldmVudAogewotICAgIHJldHVybiBfcGFydCA/
IF9wYXJ0LT5ldmVudE1heVN0YXJ0RHJhZyhldmVudCkgOiBOTzsKKyAgICByZXR1cm4gbV9mcmFt
ZSA/IG1fZnJhbWUtPmV2ZW50TWF5U3RhcnREcmFnKGV2ZW50KSA6IE5POwogfQogCiAtIChOU0Ry
YWdPcGVyYXRpb24pZHJhZ09wZXJhdGlvbkZvckRyYWdnaW5nSW5mbzooaWQgPE5TRHJhZ2dpbmdJ
bmZvPilpbmZvCiB7CiAgICAgTlNEcmFnT3BlcmF0aW9uIG9wID0gTlNEcmFnT3BlcmF0aW9uTm9u
ZTsKLSAgICBpZiAoX3BhcnQpIHsKLSAgICAgICAgS0hUTUxWaWV3ICp2ID0gX3BhcnQtPnZpZXco
KTsKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBLSFRNTFZpZXcgKnYgPSBtX2ZyYW1lLT52
aWV3KCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICAvLyBTZW5kaW5nIGFuIGV2ZW50
IGNhbiByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRoZSB2aWV3IGFuZCBwYXJ0LgogICAg
ICAgICAgICAgdi0+cmVmKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEtXUUNsaXBib2Fy
ZDo6QWNjZXNzUG9saWN5IHBvbGljeSA9IF9wYXJ0LT5iYXNlVVJMKCkuaXNMb2NhbEZpbGUoKSA/
IEtXUUNsaXBib2FyZDo6UmVhZGFibGUgOiBLV1FDbGlwYm9hcmQ6OlR5cGVzUmVhZGFibGU7Cisg
ICAgICAgICAgICBLV1FDbGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kgPSBtX2ZyYW1lLT5i
YXNlVVJMKCkuaXNMb2NhbEZpbGUoKSA/IEtXUUNsaXBib2FyZDo6UmVhZGFibGUgOiBLV1FDbGlw
Ym9hcmQ6OlR5cGVzUmVhZGFibGU7CiAgICAgICAgICAgICBLV1FDbGlwYm9hcmQgKmNsaXBib2Fy
ZCA9IG5ldyBLV1FDbGlwYm9hcmQodHJ1ZSwgW2luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSwgcG9s
aWN5KTsKICAgICAgICAgICAgIGNsaXBib2FyZC0+cmVmKCk7CiAgICAgICAgICAgICBOU0RyYWdP
cGVyYXRpb24gc3JjT3AgPSBbaW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdOwpAQCAt
MjU2NiwxMyArMjU2NiwxMyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1l
bnRGCiAKIC0gKHZvaWQpZHJhZ0V4aXRlZFdpdGhEcmFnZ2luZ0luZm86KGlkIDxOU0RyYWdnaW5n
SW5mbz4paW5mbwogewotICAgIGlmIChfcGFydCkgewotICAgICAgICBLSFRNTFZpZXcgKnYgPSBf
cGFydC0+dmlldygpOworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIEtIVE1MVmlldyAqdiA9
IG1fZnJhbWUtPnZpZXcoKTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIC8vIFNlbmRp
bmcgYW4gZXZlbnQgY2FuIHJlc3VsdCBpbiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHZpZXcgYW5k
IHBhcnQuCiAgICAgICAgICAgICB2LT5yZWYoKTsKIAotICAgICAgICAgICAgS1dRQ2xpcGJvYXJk
OjpBY2Nlc3NQb2xpY3kgcG9saWN5ID0gX3BhcnQtPmJhc2VVUkwoKS5pc0xvY2FsRmlsZSgpID8g
S1dRQ2xpcGJvYXJkOjpSZWFkYWJsZSA6IEtXUUNsaXBib2FyZDo6VHlwZXNSZWFkYWJsZTsKKyAg
ICAgICAgICAgIEtXUUNsaXBib2FyZDo6QWNjZXNzUG9saWN5IHBvbGljeSA9IG1fZnJhbWUtPmJh
c2VVUkwoKS5pc0xvY2FsRmlsZSgpID8gS1dRQ2xpcGJvYXJkOjpSZWFkYWJsZSA6IEtXUUNsaXBi
b2FyZDo6VHlwZXNSZWFkYWJsZTsKICAgICAgICAgICAgIEtXUUNsaXBib2FyZCAqY2xpcGJvYXJk
ID0gbmV3IEtXUUNsaXBib2FyZCh0cnVlLCBbaW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdLCBwb2xp
Y3kpOwogICAgICAgICAgICAgY2xpcGJvYXJkLT5yZWYoKTsKICAgICAgICAgICAgIGNsaXBib2Fy
ZC0+c2V0U291cmNlT3BlcmF0aW9uKFtpbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10p
OwpAQCAtMjU4OCw4ICsyNTg4LDggQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1F
bGVtZW50RgogCiAtIChCT09MKWNvbmNsdWRlRHJhZ0ZvckRyYWdnaW5nSW5mbzooaWQgPE5TRHJh
Z2dpbmdJbmZvPilpbmZvCiB7Ci0gICAgaWYgKF9wYXJ0KSB7Ci0gICAgICAgIEtIVE1MVmlldyAq
diA9IF9wYXJ0LT52aWV3KCk7CisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgS0hUTUxWaWV3
ICp2ID0gbV9mcmFtZS0+dmlldygpOwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgLy8g
U2VuZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgdmll
dyBhbmQgcGFydC4KICAgICAgICAgICAgIHYtPnJlZigpOwpAQCAtMjYxMiw1NCArMjYxMiw1NCBA
QCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKHZvaWQpZHJh
Z1NvdXJjZU1vdmVkVG86KE5TUG9pbnQpd2luZG93TG9jCiB7Ci0gICAgaWYgKF9wYXJ0KSB7Ci0g
ICAgICAgIF9wYXJ0LT5kcmFnU291cmNlTW92ZWRUbyhRUG9pbnQod2luZG93TG9jKSk7CisgICAg
aWYgKG1fZnJhbWUpIHsKKyAgICAgICAgbV9mcmFtZS0+ZHJhZ1NvdXJjZU1vdmVkVG8oUVBvaW50
KHdpbmRvd0xvYykpOwogICAgIH0KIH0KIAogLSAodm9pZClkcmFnU291cmNlRW5kZWRBdDooTlNQ
b2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCiB7Ci0g
ICAgaWYgKF9wYXJ0KSB7Ci0gICAgICAgIF9wYXJ0LT5kcmFnU291cmNlRW5kZWRBdChRUG9pbnQo
d2luZG93TG9jKSwgb3BlcmF0aW9uKTsKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBtX2Zy
YW1lLT5kcmFnU291cmNlRW5kZWRBdChRUG9pbnQod2luZG93TG9jKSwgb3BlcmF0aW9uKTsKICAg
ICB9CiB9CiAKIC0gKEJPT0wpbWF5REhUTUxDdXQKIHsKLSAgICByZXR1cm4gX3BhcnQtPm1heUN1
dCgpOworICAgIHJldHVybiBtX2ZyYW1lLT5tYXlDdXQoKTsKIH0KIAogLSAoQk9PTCltYXlESFRN
TENvcHkKIHsKLSAgICByZXR1cm4gX3BhcnQtPm1heUNvcHkoKTsKKyAgICByZXR1cm4gbV9mcmFt
ZS0+bWF5Q29weSgpOwogfQogCiAtIChCT09MKW1heURIVE1MUGFzdGUKIHsKLSAgICByZXR1cm4g
X3BhcnQtPm1heVBhc3RlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPm1heVBhc3RlKCk7CiB9CiAK
IC0gKEJPT0wpdHJ5REhUTUxDdXQKIHsKLSAgICByZXR1cm4gX3BhcnQtPnRyeUN1dCgpOworICAg
IHJldHVybiBtX2ZyYW1lLT50cnlDdXQoKTsKIH0KIAogLSAoQk9PTCl0cnlESFRNTENvcHkKIHsK
LSAgICByZXR1cm4gX3BhcnQtPnRyeUNvcHkoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+dHJ5Q29w
eSgpOwogfQogCiAtIChCT09MKXRyeURIVE1MUGFzdGUKIHsKLSAgICByZXR1cm4gX3BhcnQtPnRy
eVBhc3RlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnRyeVBhc3RlKCk7CiB9CiAKIC0gKERPTVJh
bmdlICopcmFuZ2VPZkNoYXJhY3RlcnNBcm91bmRDYXJldAogewotICAgIGlmICghX3BhcnQpCisg
ICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKLSAgICBTZWxl
Y3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihfcGFydC0+c2VsZWN0aW9uKCkpOworICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpKTsKICAgICBpZiAo
IXNlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTI2NzQsNyAr
MjY3NCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAo
TlNNdXRhYmxlRGljdGlvbmFyeSAqKWRhc2hib2FyZFJlZ2lvbnMKIHsKLSAgICByZXR1cm4gX3Bh
cnQtPmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRh
c2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CiB9CiAKIEBlbmQKQEAgLTI2ODMsMTEgKzI2ODMs
MTEgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogCiAtIChSb290
T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dEZvclZpZXc6KE5TVmlldyAqKWFWaWV3CiB7Ci0gICAg
S1dRS0hUTUxQYXJ0ICpwYXJ0ID0gW3NlbGYgcGFydF07CisgICAgTWFjRnJhbWUgKmZyYW1lID0g
W3NlbGYgcGFydF07CiAgICAgUm9vdE9iamVjdCAqcm9vdCA9IG5ldyBSb290T2JqZWN0KGFWaWV3
KTsgICAgLy8gVGhlIHJvb3QgZ2V0cyBkZWxldGVkIGJ5IEphdmFTY3JpcHRDb3JlLgotICAgIHJv
b3QtPnNldFJvb3RPYmplY3RJbXAoV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KSk7Ci0gICAg
cm9vdC0+c2V0SW50ZXJwcmV0ZXIocGFydC0+alNjcmlwdCgpLT5pbnRlcnByZXRlcigpKTsKLSAg
ICBwYXJ0LT5hZGRQbHVnaW5Sb290T2JqZWN0KHJvb3QpOworICAgIHJvb3QtPnNldFJvb3RPYmpl
Y3RJbXAoV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSkpOworICAgIHJvb3QtPnNldEludGVy
cHJldGVyKGZyYW1lLT5qU2NyaXB0KCktPmludGVycHJldGVyKCkpOworICAgIGZyYW1lLT5hZGRQ
bHVnaW5Sb290T2JqZWN0KHJvb3QpOwogICAgIHJldHVybiByb290OwogfQogCkluZGV4OiBrd3Ev
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9ET00ubW0JKHJldmlzaW9uIDExOTYwKQorKysga3dx
L0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNiBAQAogI2ltcG9ydCAiaHRtbF9l
bGVtZW50aW1wbC5oIgogI2ltcG9ydCA8a3htbGNvcmUvSGFzaE1hcC5oPgogCi0jaW1wb3J0ICJr
aHRtbF9wYXJ0LmgiCi0KICNpbXBvcnQgInJlbmRlcl9vYmplY3QuaCIKIAogI2ltcG9ydCAiRE9N
RXZlbnRzSW50ZXJuYWwuaCIKQEAgLTU4LDcgKzU2LDcgQEAKICNpbXBvcnQgIkRPTVByaXZhdGUu
aCIKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZvdW5kYXRp
b25FeHRyYXMuaCIKLSNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgorI2ltcG9ydCAiTWFjRnJhbWUu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwogCkBAIC02NDQsNyArNjQyLDcg
QEAgc3RhdGljIExpc3RlbmVyTWFwICpsaXN0ZW5lck1hcDsKICAgICBpZiAoIWRvYykKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgS1dRS0hUTUxQYXJ0ICpwID0gS1dRKGRvYy0+cGFydCgp
KTsKKyAgICBNYWNGcmFtZSAqcCA9IE1hYyhkb2MtPmZyYW1lKCkpOwogICAgIGlmICghcCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIApJbmRleDoga3dxL01hY0ZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3dxL01hY0ZyYW1lLmgJKHJldmlzaW9uIDExOTQ2KQorKysga3dxL01hY0ZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2lmbmRlZiBLV1FLSFRNTFBhcnRfSAotI2RlZmluZSBLV1FLSFRNTFBhcnRfSAorI2lmbmRl
ZiBNYWNGcmFtZV9ICisjZGVmaW5lIE1hY0ZyYW1lX0gKIAotI2ltcG9ydCAia2h0bWxfcGFydC5o
IgorI2ltcG9ydCAiRnJhbWUuaCIKIAogI2ltcG9ydCAidGV4dF9hZmZpbml0eS5oIgogCkBAIC0x
MTksMTEgKzExOSwxMSBAQCBlbnVtIEtXUVNlbGVjdGlvbkRpcmVjdGlvbiB7CiAgICAgS1dRU2Vs
ZWN0aW5nUHJldmlvdXMKIH07CiAKLWNsYXNzIEtXUUtIVE1MUGFydCA6IHB1YmxpYyBLSFRNTFBh
cnQKK2NsYXNzIE1hY0ZyYW1lIDogcHVibGljIEZyYW1lCiB7CiBwdWJsaWM6Ci0gICAgS1dRS0hU
TUxQYXJ0KCk7Ci0gICAgfktXUUtIVE1MUGFydCgpOworICAgIE1hY0ZyYW1lKCk7CisgICAgfk1h
Y0ZyYW1lKCk7CiAgICAgCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC0yMTksNyArMjE5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlRW1wdHlEb2N1bWVudCgpOwogCiAgICAgc3RhdGljIFdl
YkNvcmVCcmlkZ2UgKmJyaWRnZUZvcldpZGdldChjb25zdCBRV2lkZ2V0ICopOwotICAgIHN0YXRp
YyBLV1FLSFRNTFBhcnQgKnBhcnRGb3JXaWRnZXQoY29uc3QgUVdpZGdldCAqKTsKKyAgICBzdGF0
aWMgTWFjRnJhbWUgKmZyYW1lRm9yV2lkZ2V0KGNvbnN0IFFXaWRnZXQgKik7CiAgICAgCiAgICAg
UVN0cmluZyByZXF1ZXN0ZWRVUkxTdHJpbmcoKSBjb25zdDsKICAgICBRU3RyaW5nIGluY29taW5n
UmVmZXJyZXIoKSBjb25zdDsKQEAgLTI5MSw3ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCByZWRpcmVjdGlvblRpbWVyU3RhcnRlZE9yU3RvcHBlZCgpOwogICAgIAotICAgIHN0YXRp
YyBjb25zdCBRUHRyTGlzdDxLV1FLSFRNTFBhcnQ+ICZpbnN0YW5jZXMoKSB7IHJldHVybiBtdXRh
YmxlSW5zdGFuY2VzKCk7IH0KKyAgICBzdGF0aWMgY29uc3QgUVB0ckxpc3Q8TWFjRnJhbWU+ICZp
bnN0YW5jZXMoKSB7IHJldHVybiBtdXRhYmxlSW5zdGFuY2VzKCk7IH0KIAogICAgIHZvaWQgY2xl
YXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKICAgICB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25zdCBR
U3RyaW5nICZuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSwgRE9NOjpIVE1MRm9ybUVsZW1lbnRJ
bXBsICplbGVtZW50KTsKQEAgLTQxOSw3ICs0MTksNyBAQCBwcml2YXRlOgogCiAgICAgTlNWaWV3
ICpuZXh0S2V5Vmlld0luRnJhbWUoRE9NOjpOb2RlSW1wbCAqc3RhcnRpbmdQb2ludCwgS1dRU2Vs
ZWN0aW9uRGlyZWN0aW9uKTsKICAgICBzdGF0aWMgRE9NOjpOb2RlSW1wbCAqbm9kZUZvcldpZGdl
dChjb25zdCBRV2lkZ2V0ICopOwotICAgIHN0YXRpYyBLV1FLSFRNTFBhcnQgKnBhcnRGb3JOb2Rl
KERPTTo6Tm9kZUltcGwgKik7CisgICAgc3RhdGljIE1hY0ZyYW1lICpmcmFtZUZvck5vZGUoRE9N
OjpOb2RlSW1wbCAqKTsKICAgICBzdGF0aWMgTlNWaWV3ICpkb2N1bWVudFZpZXdGb3JOb2RlKERP
TTo6Tm9kZUltcGwgKik7CiAgICAgCiAgICAgYm9vbCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGZs
b2F0IGRyYWdMb2NhdGlvblgsIGZsb2F0IGRyYWdMb2NhdGlvblkpIGNvbnN0OwpAQCAtNDMyLDcg
KzQzMiw3IEBAIHByaXZhdGU6CiAKICAgICBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoRE9NOjpOb2RlSW1wbCAqJm5vZGVUb1JlbW92ZSkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNLSFRNTFBhcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFt
ZSgpIGNvbnN0OwogCiAgICAgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKGNvbnN0
IGtodG1sOjpFZGl0Q29tbWFuZFB0ciAmY21kLCBib29sIGlzUmVkbyk7CiAKQEAgLTQ2MSw3ICs0
NjEsNyBAQCBwcml2YXRlOgogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9mb3JtVmFsdWVzQWJv
dXRUb0JlU3VibWl0dGVkOwogICAgIE9iakNET01FbGVtZW50ICpfZm9ybUFib3V0VG9CZVN1Ym1p
dHRlZDsKIAotICAgIHN0YXRpYyBRUHRyTGlzdDxLV1FLSFRNTFBhcnQ+ICZtdXRhYmxlSW5zdGFu
Y2VzKCk7CisgICAgc3RhdGljIFFQdHJMaXN0PE1hY0ZyYW1lPiAmbXV0YWJsZUluc3RhbmNlcygp
OwogCiAgICAgS1dRV2luZG93V2lkZ2V0ICpfd2luZG93V2lkZ2V0OwogCkBAIC00NzAsNyArNDcw
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBRRGljdDxjaGFyPiB1cmxzQnJpZGdlS25vd3NBYm91
dDsKIAotICAgIGZyaWVuZCBjbGFzcyBLSFRNTFBhcnQ7CisgICAgZnJpZW5kIGNsYXNzIEZyYW1l
OwogCiAgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqX2JpbmRpbmdSb290OyAgLy8gVGhl
IHJvb3Qgb2JqZWN0IHVzZWQgZm9yIG9iamVjdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYm91bmQgb3V0c2lkZSB0aGUgY29udGV4dCBvZiBhIHBsdWdp
bi4KQEAgLTQ5NSw3ICs0OTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV93aW5kb3dIYXNGb2N1
czsKIH07CiAKLWlubGluZSBLV1FLSFRNTFBhcnQgKktXUShLSFRNTFBhcnQgKnBhcnQpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PEtXUUtIVE1MUGFydCAqPihwYXJ0KTsgfQotaW5saW5lIGNvbnN0IEtX
UUtIVE1MUGFydCAqS1dRKGNvbnN0IEtIVE1MUGFydCAqcGFydCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgS1dRS0hUTUxQYXJ0ICo+KHBhcnQpOyB9CitpbmxpbmUgTWFjRnJhbWUgKk1hYyhG
cmFtZSAqZnJhbWUpIHsgcmV0dXJuIHN0YXRpY19jYXN0PE1hY0ZyYW1lICo+KGZyYW1lKTsgfQor
aW5saW5lIGNvbnN0IE1hY0ZyYW1lICpNYWMoY29uc3QgRnJhbWUgKmZyYW1lKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBNYWNGcmFtZSAqPihmcmFtZSk7IH0KIAogI2VuZGlmCkluZGV4OiBr
d3EvS1dRQ2xpcGJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUNsaXBib2FyZC5oCShyZXZp
c2lvbiAxMTk2MCkKKysrIGt3cS9LV1FDbGlwYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCBjbGFzcyBOU1Bhc3RlYm9hcmQ7CiAKIHR5cGVkZWYgdW5zaWduZWQgTlNEcmFn
T3BlcmF0aW9uOwogCi1jbGFzcyBLV1FLSFRNTFBhcnQ7CitjbGFzcyBNYWNGcmFtZTsKIAogY2xh
c3MgS1dRQ2xpcGJvYXJkIDogcHVibGljIERPTTo6Q2xpcGJvYXJkSW1wbAogewpAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIE51bWIsIEltYWdlV3JpdGFibGUsIFdyaXRhYmxlLCBU
eXBlc1JlYWRhYmxlLCBSZWFkYWJsZQogICAgIH0gQWNjZXNzUG9saWN5OwogCi0gICAgS1dRQ2xp
cGJvYXJkKGJvb2wgZm9yRHJhZ2dpbmcsIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCwgQWNjZXNz
UG9saWN5IHBvbGljeSwgS1dRS0hUTUxQYXJ0ICpwYXJ0ID0gMCk7CisgICAgS1dRQ2xpcGJvYXJk
KGJvb2wgZm9yRHJhZ2dpbmcsIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCwgQWNjZXNzUG9saWN5
IHBvbGljeSwgTWFjRnJhbWUgKmZyYW1lID0gMCk7CiAgICAgdmlydHVhbCB+S1dRQ2xpcGJvYXJk
KCk7CiAKICAgICBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdDsKQEAgLTk5LDcgKzk5LDcgQEAg
cHJpdmF0ZToKICAgICBBY2Nlc3NQb2xpY3kgbV9wb2xpY3k7CiAgICAgaW50IG1fY2hhbmdlQ291
bnQ7CiAgICAgYm9vbCBtX2RyYWdTdGFydGVkOwotICAgIEtXUUtIVE1MUGFydCAqbV9wYXJ0OyAg
IC8vIHVzZWQgb24gdGhlIHNvdXJjZSBzaWRlIHRvIGdlbmVyYXRlIGRyYWdnaW5nIGltYWdlcwor
ICAgIE1hY0ZyYW1lICptX2ZyYW1lOyAgIC8vIHVzZWQgb24gdGhlIHNvdXJjZSBzaWRlIHRvIGdl
bmVyYXRlIGRyYWdnaW5nIGltYWdlcwogfTsKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="1224"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>