<?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>34028</bug_id>
          
          <creation_ts>2010-01-22 17:13:33 -0800</creation_ts>
          <short_desc>Remove unnecessary copy of zlib in tree</short_desc>
          <delta_ts>2010-01-22 18:16:27 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183891</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 17:13:33 -0800</bug_when>
    <thetext>WebCore/platform/image-decoders/zlib is, as far as I can tell, unused and unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183892</commentid>
    <comment_count>1</comment_count>
      <attachid>47248</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 17:17:48 -0800</bug_when>
    <thetext>Created attachment 47248
patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183897</commentid>
    <comment_count>2</comment_count>
      <attachid>47248</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-22 17:36:58 -0800</bug_when>
    <thetext>Comment on attachment 47248
patch v1

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183912</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-22 18:16:27 -0800</bug_when>
    <thetext>Fixed in r53748.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47248</attachid>
            <date>2010-01-22 17:17:48 -0800</date>
            <delta_ts>2010-01-22 17:36:57 -0800</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>439670</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzc0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDEtMjIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSB1bm5lY2Vzc2FyeSBjb3B5IG9mIHpsaWIuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAyOAorCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvemxpYjogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy96bGliL2FkbGVyMzIuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy96bGliL2NvbXByZXNzLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvemxpYi9jcmMzMi5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3psaWIvY3JjMzIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy96bGliL2RlZmxhdGUuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy96bGliL2RlZmxhdGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2d6aW8uYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmJhY2suYzogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZhc3QuYzogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZhc3QuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZpeGVkLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZsYXRlLmM6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZsYXRlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZ0cmVlcy5jOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvaW5mdHJlZXMu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL21venpj
b25mLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi90
cmVlcy5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIv
dHJlZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGli
L3VuY29tcHIuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96
bGliL3pjb25mLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
emxpYi96bGliLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
emxpYi96dXRpbC5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3psaWIvenV0aWwuaDogUmVtb3ZlZC4KKwogMjAxMC0wMS0yMiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWlu
LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2FkbGVyMzIuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvYWRsZXIz
Mi5jCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
emxpYi9hZGxlcjMyLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qIGFkbGVy
MzIuYyAtLSBjb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGRhdGEgc3RyZWFtCi0g
KiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBNYXJrIEFkbGVyCi0gKiBGb3IgY29uZGl0aW9ucyBv
ZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0g
Ki8KLQotLyogQCgjKSAkSWQ6IGFkbGVyMzIuYyx2IDMuNiAyMDA1LzA4LzA0IDE5OjE0OjE0IHRv
ciVjcy5icm93bi5lZHUgRXhwICQgKi8KLQotI2RlZmluZSBaTElCX0lOVEVSTkFMCi0jaW5jbHVk
ZSAiemxpYi5oIgotCi0jZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNt
YWxsZXIgdGhhbiA2NTUzNiAqLwotI2RlZmluZSBOTUFYIDU1NTIKLS8qIE5NQVggaXMgdGhlIGxh
cmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAq
LwotCi0jZGVmaW5lIERPMShidWYsaSkgIHthZGxlciArPSAoYnVmKVtpXTsgc3VtMiArPSBhZGxl
cjt9Ci0jZGVmaW5lIERPMihidWYsaSkgIERPMShidWYsaSk7IERPMShidWYsaSsxKTsKLSNkZWZp
bmUgRE80KGJ1ZixpKSAgRE8yKGJ1ZixpKTsgRE8yKGJ1ZixpKzIpOwotI2RlZmluZSBETzgoYnVm
LGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7Ci0jZGVmaW5lIERPMTYoYnVmKSAgIERPOChi
dWYsMCk7IERPOChidWYsOCk7Ci0KLS8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3Ig
ZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgKi8KLSNpZmRlZiBOT19ESVZJREUKLSMg
IGRlZmluZSBNT0QoYSkgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAx
NikpIGEgLT0gKEJBU0UgPDwgMTYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE1KSkg
YSAtPSAoQkFTRSA8PCAxNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTQpKSBhIC09
IChCQVNFIDw8IDE0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMykpIGEgLT0gKEJB
U0UgPDwgMTMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEyKSkgYSAtPSAoQkFTRSA8
PCAxMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTEpKSBhIC09IChCQVNFIDw8IDEx
KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMCkpIGEgLT0gKEJBU0UgPDwgMTApOyBc
Ci0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDkpKSBhIC09IChCQVNFIDw8IDkpOyBcCi0gICAg
ICAgIGlmIChhID49IChCQVNFIDw8IDgpKSBhIC09IChCQVNFIDw8IDgpOyBcCi0gICAgICAgIGlm
IChhID49IChCQVNFIDw8IDcpKSBhIC09IChCQVNFIDw8IDcpOyBcCi0gICAgICAgIGlmIChhID49
IChCQVNFIDw8IDYpKSBhIC09IChCQVNFIDw8IDYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNF
IDw8IDUpKSBhIC09IChCQVNFIDw8IDUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQp
KSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09
IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNF
IDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEp
OyBcCi0gICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAotICAgIH0gd2hpbGUgKDAp
Ci0jICBkZWZpbmUgTU9ENChhKSBcCi0gICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNF
IDw8IDQpKSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMp
KSBhIC09IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09
IChCQVNFIDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNF
IDw8IDEpOyBcCi0gICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAotICAgIH0gd2hp
bGUgKDApCi0jZWxzZQotIyAgZGVmaW5lIE1PRChhKSBhICU9IEJBU0UKLSMgIGRlZmluZSBNT0Q0
KGEpIGEgJT0gQkFTRQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIFpF
WFBPUlQgYWRsZXIzMihhZGxlciwgYnVmLCBsZW4pCi0gICAgdUxvbmcgYWRsZXI7Ci0gICAgY29u
c3QgQnl0ZWYgKmJ1ZjsKLSAgICB1SW50IGxlbjsKLXsKLSAgICB1bnNpZ25lZCBsb25nIHN1bTI7
Ci0gICAgdW5zaWduZWQgbjsKLQotICAgIC8qIHNwbGl0IEFkbGVyLTMyIGludG8gY29tcG9uZW50
IHN1bXMgKi8KLSAgICBzdW0yID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsKLSAgICBhZGxlciAm
PSAweGZmZmY7Ci0KLSAgICAvKiBpbiBjYXNlIHVzZXIgbGlrZXMgZG9pbmcgYSBieXRlIGF0IGEg
dGltZSwga2VlcCBpdCBmYXN0ICovCi0gICAgaWYgKGxlbiA9PSAxKSB7Ci0gICAgICAgIGFkbGVy
ICs9IGJ1ZlswXTsKLSAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCi0gICAgICAgICAgICBhZGxl
ciAtPSBCQVNFOwotICAgICAgICBzdW0yICs9IGFkbGVyOwotICAgICAgICBpZiAoc3VtMiA+PSBC
QVNFKQotICAgICAgICAgICAgc3VtMiAtPSBCQVNFOwotICAgICAgICByZXR1cm4gYWRsZXIgfCAo
c3VtMiA8PCAxNik7Ci0gICAgfQotCi0gICAgLyogaW5pdGlhbCBBZGxlci0zMiB2YWx1ZSAoZGVm
ZXJyZWQgY2hlY2sgZm9yIGxlbiA9PSAxIHNwZWVkKSAqLwotICAgIGlmIChidWYgPT0gWl9OVUxM
KQotICAgICAgICByZXR1cm4gMUw7Ci0KLSAgICAvKiBpbiBjYXNlIHNob3J0IGxlbmd0aHMgYXJl
IHByb3ZpZGVkLCBrZWVwIGl0IHNvbWV3aGF0IGZhc3QgKi8KLSAgICBpZiAobGVuIDwgMTYpIHsK
LSAgICAgICAgd2hpbGUgKGxlbi0tKSB7Ci0gICAgICAgICAgICBhZGxlciArPSAqYnVmKys7Ci0g
ICAgICAgICAgICBzdW0yICs9IGFkbGVyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhZGxlciA+
PSBCQVNFKQotICAgICAgICAgICAgYWRsZXIgLT0gQkFTRTsKLSAgICAgICAgTU9ENChzdW0yKTsg
ICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLwotICAgICAgICByZXR1
cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7Ci0gICAgfQotCi0gICAgLyogZG8gbGVuZ3RoIE5NQVgg
YmxvY2tzIC0tIHJlcXVpcmVzIGp1c3Qgb25lIG1vZHVsbyBvcGVyYXRpb24gKi8KLSAgICB3aGls
ZSAobGVuID49IE5NQVgpIHsKLSAgICAgICAgbGVuIC09IE5NQVg7Ci0gICAgICAgIG4gPSBOTUFY
IC8gMTY7ICAgICAgICAgIC8qIE5NQVggaXMgZGl2aXNpYmxlIGJ5IDE2ICovCi0gICAgICAgIGRv
IHsKLSAgICAgICAgICAgIERPMTYoYnVmKTsgICAgICAgICAgLyogMTYgc3VtcyB1bnJvbGxlZCAq
LwotICAgICAgICAgICAgYnVmICs9IDE2OwotICAgICAgICB9IHdoaWxlICgtLW4pOwotICAgICAg
ICBNT0QoYWRsZXIpOwotICAgICAgICBNT0Qoc3VtMik7Ci0gICAgfQotCi0gICAgLyogZG8gcmVt
YWluaW5nIGJ5dGVzIChsZXNzIHRoYW4gTk1BWCwgc3RpbGwganVzdCBvbmUgbW9kdWxvKSAqLwot
ICAgIGlmIChsZW4pIHsgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBtb2R1bG9zIGlmIG5vbmUg
cmVtYWluaW5nICovCi0gICAgICAgIHdoaWxlIChsZW4gPj0gMTYpIHsKLSAgICAgICAgICAgIGxl
biAtPSAxNjsKLSAgICAgICAgICAgIERPMTYoYnVmKTsKLSAgICAgICAgICAgIGJ1ZiArPSAxNjsK
LSAgICAgICAgfQotICAgICAgICB3aGlsZSAobGVuLS0pIHsKLSAgICAgICAgICAgIGFkbGVyICs9
ICpidWYrKzsKLSAgICAgICAgICAgIHN1bTIgKz0gYWRsZXI7Ci0gICAgICAgIH0KLSAgICAgICAg
TU9EKGFkbGVyKTsKLSAgICAgICAgTU9EKHN1bTIpOwotICAgIH0KLQotICAgIC8qIHJldHVybiBy
ZWNvbWJpbmVkIHN1bXMgKi8KLSAgICByZXR1cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7Ci19Ci0K
LS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lKGFk
bGVyMSwgYWRsZXIyLCBsZW4yKQotICAgIHVMb25nIGFkbGVyMTsKLSAgICB1TG9uZyBhZGxlcjI7
Ci0gICAgel9vZmZfdCBsZW4yOwotewotICAgIHVuc2lnbmVkIGxvbmcgc3VtMTsKLSAgICB1bnNp
Z25lZCBsb25nIHN1bTI7Ci0gICAgdW5zaWduZWQgcmVtOwotCi0gICAgLyogdGhlIGRlcml2YXRp
b24gb2YgdGhpcyBmb3JtdWxhIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIg
Ki8KLSAgICByZW0gPSAodW5zaWduZWQpKGxlbjIgJSBCQVNFKTsKLSAgICBzdW0xID0gYWRsZXIx
ICYgMHhmZmZmOwotICAgIHN1bTIgPSByZW0gKiBzdW0xOwotICAgIE1PRChzdW0yKTsKLSAgICBz
dW0xICs9IChhZGxlcjIgJiAweGZmZmYpICsgQkFTRSAtIDE7Ci0gICAgc3VtMiArPSAoKGFkbGVy
MSA+PiAxNikgJiAweGZmZmYpICsgKChhZGxlcjIgPj4gMTYpICYgMHhmZmZmKSArIEJBU0UgLSBy
ZW07Ci0gICAgaWYgKHN1bTEgPiBCQVNFKSBzdW0xIC09IEJBU0U7Ci0gICAgaWYgKHN1bTEgPiBC
QVNFKSBzdW0xIC09IEJBU0U7Ci0gICAgaWYgKHN1bTIgPiAoQkFTRSA8PCAxKSkgc3VtMiAtPSAo
QkFTRSA8PCAxKTsKLSAgICBpZiAoc3VtMiA+IEJBU0UpIHN1bTIgLT0gQkFTRTsKLSAgICByZXR1
cm4gc3VtMSB8IChzdW0yIDw8IDE2KTsKLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvemxpYi9jb21wcmVzcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvemxpYi9jb21wcmVzcy5jCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9jb21wcmVzcy5jCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc5ICswLDAgQEAKLS8qIGNvbXByZXNzLmMgLS0gY29tcHJlc3MgYSBtZW1vcnkgYnVm
ZmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9y
IGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNl
IGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElkOiBjb21wcmVzcy5jLHYgMy42IDIwMDUvMDgv
MDQgMTk6MTQ6MTQgdG9yJWNzLmJyb3duLmVkdSBFeHAgJCAqLwotCi0jZGVmaW5lIFpMSUJfSU5U
RVJOQUwKLSNpbmNsdWRlICJ6bGliLmgiCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBD
b21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4g
VGhlIGxldmVsCi0gICBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gZGVmbGF0
ZUluaXQuICBzb3VyY2VMZW4gaXMgdGhlIGJ5dGUKLSAgIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1
ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKLSAgIGRl
c3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAwLjElIGxhcmdlciB0aGFu
IHNvdXJjZUxlbiBwbHVzCi0gICAxMiBieXRlcy4gVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBh
Y3R1YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIuCi0KLSAgICAgY29tcHJlc3MyIHJl
dHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3Vn
aAotICAgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGlu
IHRoZSBvdXRwdXQgYnVmZmVyLAotICAgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGxldmVsIHBhcmFt
ZXRlciBpcyBpbnZhbGlkLgotKi8KLWludCBaRVhQT1JUIGNvbXByZXNzMiAoZGVzdCwgZGVzdExl
biwgc291cmNlLCBzb3VyY2VMZW4sIGxldmVsKQotICAgIEJ5dGVmICpkZXN0OwotICAgIHVMb25n
ZiAqZGVzdExlbjsKLSAgICBjb25zdCBCeXRlZiAqc291cmNlOwotICAgIHVMb25nIHNvdXJjZUxl
bjsKLSAgICBpbnQgbGV2ZWw7Ci17Ci0gICAgel9zdHJlYW0gc3RyZWFtOwotICAgIGludCBlcnI7
Ci0KLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOwotICAgIHN0cmVhbS5hdmFp
bF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKLSNpZmRlZiBNQVhTRUdfNjRLCi0gICAgLyogQ2hlY2sg
Zm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KLSAgICBpZiAoKHVMb25nKXN0
cmVhbS5hdmFpbF9pbiAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKLSNlbmRpZgot
ICAgIHN0cmVhbS5uZXh0X291dCA9IGRlc3Q7Ci0gICAgc3RyZWFtLmF2YWlsX291dCA9ICh1SW50
KSpkZXN0TGVuOwotICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX291dCAhPSAqZGVzdExlbikg
cmV0dXJuIFpfQlVGX0VSUk9SOwotCi0gICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7
Ci0gICAgc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIHN0cmVhbS5vcGFxdWUgPSAo
dm9pZHBmKTA7Ci0KLSAgICBlcnIgPSBkZWZsYXRlSW5pdCgmc3RyZWFtLCBsZXZlbCk7Ci0gICAg
aWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gZGVmbGF0ZSgmc3RyZWFt
LCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgZGVm
bGF0ZUVuZCgmc3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIGVyciA9PSBaX09LID8gWl9CVUZfRVJS
T1IgOiBlcnI7Ci0gICAgfQotICAgICpkZXN0TGVuID0gc3RyZWFtLnRvdGFsX291dDsKLQotICAg
IGVyciA9IGRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotLyogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0gKi8KLWludCBaRVhQT1JUIGNvbXByZXNzIChkZXN0LCBkZXN0TGVu
LCBzb3VyY2UsIHNvdXJjZUxlbikKLSAgICBCeXRlZiAqZGVzdDsKLSAgICB1TG9uZ2YgKmRlc3RM
ZW47Ci0gICAgY29uc3QgQnl0ZWYgKnNvdXJjZTsKLSAgICB1TG9uZyBzb3VyY2VMZW47Ci17Ci0g
ICAgcmV0dXJuIGNvbXByZXNzMihkZXN0LCBkZXN0TGVuLCBzb3VyY2UsIHNvdXJjZUxlbiwgWl9E
RUZBVUxUX0NPTVBSRVNTSU9OKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIElm
IHRoZSBkZWZhdWx0IG1lbUxldmVsIG9yIHdpbmRvd0JpdHMgZm9yIGRlZmxhdGVJbml0KCkgaXMg
Y2hhbmdlZCwgdGhlbgotICAgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkLgotICov
Ci11TG9uZyBaRVhQT1JUIGNvbXByZXNzQm91bmQgKHNvdXJjZUxlbikKLSAgICB1TG9uZyBzb3Vy
Y2VMZW47Ci17Ci0gICAgcmV0dXJuIHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIpICsgKHNv
dXJjZUxlbiA+PiAxNCkgKyAxMTsKLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYi9jcmMzMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvemxpYi9jcmMzMi5jCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9jcmMzMi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyMyAr
MCwwIEBACi0vKiBjcmMzMi5jIC0tIGNvbXB1dGUgdGhlIENSQy0zMiBvZiBhIGRhdGEgc3RyZWFt
Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBNYXJrIEFkbGVyCi0gKiBGb3IgY29uZGl0aW9u
cyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5o
Ci0gKgotICogVGhhbmtzIHRvIFJvZG5leSBCcm93biA8cmJyb3duNjRAY3NjLmNvbS5hdT4gZm9y
IGhpcyBjb250cmlidXRpb24gb2YgZmFzdGVyCi0gKiBDUkMgbWV0aG9kczogZXhjbHVzaXZlLW9y
aW5nIDMyIGJpdHMgb2YgZGF0YSBhdCBhIHRpbWUsIGFuZCBwcmUtY29tcHV0aW5nCi0gKiB0YWJs
ZXMgZm9yIHVwZGF0aW5nIHRoZSBzaGlmdCByZWdpc3RlciBpbiBvbmUgc3RlcCB3aXRoIHRocmVl
IGV4Y2x1c2l2ZS1vcnMKLSAqIGluc3RlYWQgb2YgZm91ciBzdGVwcyB3aXRoIGZvdXIgZXhjbHVz
aXZlLW9ycy4gIFRoaXMgcmVzdWx0cyBpbiBhYm91dCBhCi0gKiBmYWN0b3Igb2YgdHdvIGluY3Jl
YXNlIGluIHNwZWVkIG9uIGEgUG93ZXIgUEMgRzQgKFBQQzc0NTUpIHVzaW5nIGdjYyAtTzMuCi0g
Ki8KLQotLyogQCgjKSAkSWQ6IGNyYzMyLmMsdiAzLjYgMjAwNS8wOC8wNCAxOToxNDoxNCB0b3Il
Y3MuYnJvd24uZWR1IEV4cCAkICovCi0KLS8qCi0gIE5vdGUgb24gdGhlIHVzZSBvZiBEWU5BTUlD
X0NSQ19UQUJMRTogdGhlcmUgaXMgbm8gbXV0ZXggb3Igc2VtYXBob3JlCi0gIHByb3RlY3Rpb24g
b24gdGhlIHN0YXRpYyB2YXJpYWJsZXMgdXNlZCB0byBjb250cm9sIHRoZSBmaXJzdC11c2UgZ2Vu
ZXJhdGlvbgotICBvZiB0aGUgY3JjIHRhYmxlcy4gIFRoZXJlZm9yZSwgaWYgeW91ICNkZWZpbmUg
RFlOQU1JQ19DUkNfVEFCTEUsIHlvdSBzaG91bGQKLSAgZmlyc3QgY2FsbCBnZXRfY3JjX3RhYmxl
KCkgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGVzIGJlZm9yZSBhbGxvd2luZyBtb3JlIHRoYW4KLSAg
b25lIHRocmVhZCB0byB1c2UgY3JjMzIoKS4KLSAqLwotCi0jaWZkZWYgTUFLRUNSQ0gKLSMgIGlu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jICBpZm5kZWYgRFlOQU1JQ19DUkNfVEFCTEUKLSMgICAgZGVmaW5l
IERZTkFNSUNfQ1JDX1RBQkxFCi0jICBlbmRpZiAvKiAhRFlOQU1JQ19DUkNfVEFCTEUgKi8KLSNl
bmRpZiAvKiBNQUtFQ1JDSCAqLwotCi0jaW5jbHVkZSAienV0aWwuaCIgICAgICAvKiBmb3IgU1RE
QyBhbmQgRkFSIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgbG9jYWwgc3RhdGljCi0KLS8qIEZp
bmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlIGZvciBjcmMzMl9saXR0bGUoKSBhbmQgY3JjMzJf
YmlnKCkuICovCi0jaWZuZGVmIE5PQllGT1VSCi0jICBpZmRlZiBTVERDICAgICAgICAgICAvKiBu
ZWVkIEFOU0kgQyBsaW1pdHMuaCB0byBkZXRlcm1pbmUgc2l6ZXMgKi8KLSMgICAgaW5jbHVkZSA8
bGltaXRzLmg+Ci0jICAgIGRlZmluZSBCWUZPVVIKLSMgICAgaWYgKFVJTlRfTUFYID09IDB4ZmZm
ZmZmZmZVTCkKLSAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1NDsKLSMgICAgZWxzZQotIyAg
ICAgIGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBsb25nIHU0OwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmIChVU0hSVF9NQVggPT0gMHhm
ZmZmZmZmZlVMKQotICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHU0OwotIyAgICAg
ICAgZWxzZQotIyAgICAgICAgICB1bmRlZiBCWUZPVVIgICAgIC8qIGNhbid0IGZpbmQgYSBmb3Vy
LWJ5dGUgaW50ZWdlciB0eXBlISAqLwotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAg
ICBlbmRpZgotIyAgZW5kaWYgLyogU1REQyAqLwotI2VuZGlmIC8qICFOT0JZRk9VUiAqLwotCi0v
KiBEZWZpbml0aW9ucyBmb3IgZG9pbmcgdGhlIGNyYyBmb3VyIGRhdGEgYnl0ZXMgYXQgYSB0aW1l
LiAqLwotI2lmZGVmIEJZRk9VUgotIyAgZGVmaW5lIFJFVih3KSAoKCh3KT4+MjQpKygoKHcpPj44
KSYweGZmMDApKyBcCi0gICAgICAgICAgICAgICAgKCgodykmMHhmZjAwKTw8OCkrKCgodykmMHhm
Zik8PDI0KSkKLSAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfbGl0dGxlIE9GKCh1bnNpZ25l
ZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIg
KiwgdW5zaWduZWQpKTsKLSAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNp
Z25lZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBG
QVIgKiwgdW5zaWduZWQpKTsKLSMgIGRlZmluZSBUQkxTIDgKLSNlbHNlCi0jICBkZWZpbmUgVEJM
UyAxCi0jZW5kaWYgLyogQllGT1VSICovCi0KLS8qIExvY2FsIGZ1bmN0aW9ucyBmb3IgY3JjIGNv
bmNhdGVuYXRpb24gKi8KLWxvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyBPRigo
dW5zaWduZWQgbG9uZyAqbWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIHZlYykpOwotbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFyZSBP
RigodW5zaWduZWQgbG9uZyAqc3F1YXJlLCB1bnNpZ25lZCBsb25nICptYXQpKTsKLQotI2lmZGVm
IERZTkFNSUNfQ1JDX1RBQkxFCi0KLWxvY2FsIHZvbGF0aWxlIGludCBjcmNfdGFibGVfZW1wdHkg
PSAxOwotbG9jYWwgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07Ci1sb2Nh
bCB2b2lkIG1ha2VfY3JjX3RhYmxlIE9GKCh2b2lkKSk7Ci0jaWZkZWYgTUFLRUNSQ0gKLSAgIGxv
Y2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIg
KikpOwotI2VuZGlmIC8qIE1BS0VDUkNIICovCi0vKgotICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEg
Ynl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6Ci0gIHhe
MzIreF4yNit4XjIzK3heMjIreF4xNit4XjEyK3heMTEreF4xMCt4XjgreF43K3heNSt4XjQreF4y
K3grMS4KLQotICBQb2x5bm9taWFscyBvdmVyIEdGKDIpIGFyZSByZXByZXNlbnRlZCBpbiBiaW5h
cnksIG9uZSBiaXQgcGVyIGNvZWZmaWNpZW50LAotICB3aXRoIHRoZSBsb3dlc3QgcG93ZXJzIGlu
IHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIFRoZW4gYWRkaW5nIHBvbHlub21pYWxzCi0gIGlz
IGp1c3QgZXhjbHVzaXZlLW9yLCBhbmQgbXVsdGlwbHlpbmcgYSBwb2x5bm9taWFsIGJ5IHggaXMg
YSByaWdodCBzaGlmdCBieQotICBvbmUuICBJZiB3ZSBjYWxsIHRoZSBhYm92ZSBwb2x5bm9taWFs
IHAsIGFuZCByZXByZXNlbnQgYSBieXRlIGFzIHRoZQotICBwb2x5bm9taWFsIHEsIGFsc28gd2l0
aCB0aGUgbG93ZXN0IHBvd2VyIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCAoc28gdGhlCi0g
IGJ5dGUgMHhiMSBpcyB0aGUgcG9seW5vbWlhbCB4XjcreF4zK3grMSksIHRoZW4gdGhlIENSQyBp
cyAocSp4XjMyKSBtb2QgcCwKLSAgd2hlcmUgYSBtb2QgYiBtZWFucyB0aGUgcmVtYWluZGVyIGFm
dGVyIGRpdmlkaW5nIGEgYnkgYi4KLQotICBUaGlzIGNhbGN1bGF0aW9uIGlzIGRvbmUgdXNpbmcg
dGhlIHNoaWZ0LXJlZ2lzdGVyIG1ldGhvZCBvZiBtdWx0aXBseWluZyBhbmQKLSAgdGFraW5nIHRo
ZSByZW1haW5kZXIuICBUaGUgcmVnaXN0ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIGZv
ciBlYWNoCi0gIGluY29taW5nIGJpdCwgeF4zMiBpcyBhZGRlZCBtb2QgcCB0byB0aGUgcmVnaXN0
ZXIgaWYgdGhlIGJpdCBpcyBhIG9uZSAod2hlcmUKLSAgeF4zMiBtb2QgcCBpcyBwK3heMzIgPSB4
XjI2Ky4uLisxKSwgYW5kIHRoZSByZWdpc3RlciBpcyBtdWx0aXBsaWVkIG1vZCBwIGJ5Ci0gIHgg
KHdoaWNoIGlzIHNoaWZ0aW5nIHJpZ2h0IGJ5IG9uZSBhbmQgYWRkaW5nIHheMzIgbW9kIHAgaWYg
dGhlIGJpdCBzaGlmdGVkCi0gIG91dCBpcyBhIG9uZSkuICBXZSBzdGFydCB3aXRoIHRoZSBoaWdo
ZXN0IHBvd2VyIChsZWFzdCBzaWduaWZpY2FudCBiaXQpIG9mCi0gIHEgYW5kIHJlcGVhdCBmb3Ig
YWxsIGVpZ2h0IGJpdHMgb2YgcS4KLQotICBUaGUgZmlyc3QgdGFibGUgaXMgc2ltcGx5IHRoZSBD
UkMgb2YgYWxsIHBvc3NpYmxlIGVpZ2h0IGJpdCB2YWx1ZXMuICBUaGlzIGlzCi0gIGFsbCB0aGUg
aW5mb3JtYXRpb24gbmVlZGVkIHRvIGdlbmVyYXRlIENSQ3Mgb24gZGF0YSBhIGJ5dGUgYXQgYSB0
aW1lIGZvciBhbGwKLSAgY29tYmluYXRpb25zIG9mIENSQyByZWdpc3RlciB2YWx1ZXMgYW5kIGlu
Y29taW5nIGJ5dGVzLiAgVGhlIHJlbWFpbmluZyB0YWJsZXMKLSAgYWxsb3cgZm9yIHdvcmQtYXQt
YS10aW1lIENSQyBjYWxjdWxhdGlvbiBmb3IgYm90aCBiaWctZW5kaWFuIGFuZCBsaXR0bGUtCi0g
IGVuZGlhbiBtYWNoaW5lcywgd2hlcmUgYSB3b3JkIGlzIGZvdXIgYnl0ZXMuCi0qLwotbG9jYWwg
dm9pZCBtYWtlX2NyY190YWJsZSgpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBjOwotICAgIGludCBu
LCBrOwotICAgIHVuc2lnbmVkIGxvbmcgcG9seTsgICAgICAgICAgICAgICAgIC8qIHBvbHlub21p
YWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KLSAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRl
ZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4zMik6ICovCi0gICAgc3RhdGljIHZvbGF0aWxlIGlu
dCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDEx
LDEyLDE2LDIyLDIzLDI2fTsKLQotICAgIC8qIFNlZSBpZiBhbm90aGVyIHRhc2sgaXMgYWxyZWFk
eSBkb2luZyB0aGlzIChub3QgdGhyZWFkLXNhZmUsIGJ1dCBiZXR0ZXIKLSAgICAgICB0aGFuIG5v
dGhpbmcgLS0gc2lnbmlmaWNhbnRseSByZWR1Y2VzIGR1cmF0aW9uIG9mIHZ1bG5lcmFiaWxpdHkg
aW4KLSAgICAgICBjYXNlIHRoZSBhZHZpY2UgYWJvdXQgRFlOQU1JQ19DUkNfVEFCTEUgaXMgaWdu
b3JlZCkgKi8KLSAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgZmlyc3QgPSAwOwotCi0gICAgICAg
IC8qIG1ha2UgZXhjbHVzaXZlLW9yIHBhdHRlcm4gZnJvbSBwb2x5bm9taWFsICgweGVkYjg4MzIw
VUwpICovCi0gICAgICAgIHBvbHkgPSAwVUw7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCBzaXpl
b2YocCkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOyBuKyspCi0gICAgICAgICAgICBwb2x5IHw9IDFV
TCA8PCAoMzEgLSBwW25dKTsKLQotICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBmb3IgZXZlcnkg
OC1iaXQgdmFsdWUgKi8KLSAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAg
ICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKLSAgICAgICAgICAgIGZvciAoayA9IDA7IGsg
PCA4OyBrKyspCi0gICAgICAgICAgICAgICAgYyA9IGMgJiAxID8gcG9seSBeIChjID4+IDEpIDog
YyA+PiAxOwotICAgICAgICAgICAgY3JjX3RhYmxlWzBdW25dID0gYzsKLSAgICAgICAgfQotCi0j
aWZkZWYgQllGT1VSCi0gICAgICAgIC8qIGdlbmVyYXRlIGNyYyBmb3IgZWFjaCB2YWx1ZSBmb2xs
b3dlZCBieSBvbmUsIHR3bywgYW5kIHRocmVlIHplcm9zLAotICAgICAgICAgICBhbmQgdGhlbiB0
aGUgYnl0ZSByZXZlcnNhbCBvZiB0aG9zZSBhcyB3ZWxsIGFzIHRoZSBmaXJzdCB0YWJsZSAqLwot
ICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKLSAgICAgICAgICAgIGMgPSBjcmNf
dGFibGVbMF1bbl07Ci0gICAgICAgICAgICBjcmNfdGFibGVbNF1bbl0gPSBSRVYoYyk7Ci0gICAg
ICAgICAgICBmb3IgKGsgPSAxOyBrIDwgNDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgYyA9IGNy
Y190YWJsZVswXVtjICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICAgICAgICAgICAgICBjcmNfdGFi
bGVba11bbl0gPSBjOwotICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBSRVYo
Yyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBCWUZPVVIgKi8KLQotICAg
ICAgICBjcmNfdGFibGVfZW1wdHkgPSAwOwotICAgIH0KLSAgICBlbHNlIHsgICAgICAvKiBub3Qg
Zmlyc3QgKi8KLSAgICAgICAgLyogd2FpdCBmb3IgdGhlIG90aGVyIGd1eSB0byBmaW5pc2ggKG5v
dCBlZmZpY2llbnQsIGJ1dCByYXJlKSAqLwotICAgICAgICB3aGlsZSAoY3JjX3RhYmxlX2VtcHR5
KQotICAgICAgICAgICAgOwotICAgIH0KLQotI2lmZGVmIE1BS0VDUkNICi0gICAgLyogd3JpdGUg
b3V0IENSQyB0YWJsZXMgdG8gY3JjMzIuaCAqLwotICAgIHsKLSAgICAgICAgRklMRSAqb3V0Owot
Ci0gICAgICAgIG91dCA9IGZvcGVuKCJjcmMzMi5oIiwgInciKTsKLSAgICAgICAgaWYgKG91dCA9
PSBOVUxMKSByZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiLyogY3JjMzIuaCAtLSB0YWJs
ZXMgZm9yIHJhcGlkIENSQyBjYWxjdWxhdGlvblxuIik7Ci0gICAgICAgIGZwcmludGYob3V0LCAi
ICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuY1xuICovXG5cbiIpOwotICAgICAg
ICBmcHJpbnRmKG91dCwgImxvY2FsIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICIpOwotICAgICAg
ICBmcHJpbnRmKG91dCwgImNyY190YWJsZVtUQkxTXVsyNTZdID1cbntcbiAge1xuIik7Ci0gICAg
ICAgIHdyaXRlX3RhYmxlKG91dCwgY3JjX3RhYmxlWzBdKTsKLSMgIGlmZGVmIEJZRk9VUgotICAg
ICAgICBmcHJpbnRmKG91dCwgIiNpZmRlZiBCWUZPVVJcbiIpOwotICAgICAgICBmb3IgKGsgPSAx
OyBrIDwgODsgaysrKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAgfSxcbiAge1xuIik7
Ci0gICAgICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVtrXSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZnByaW50ZihvdXQsICIjZW5kaWZcbiIpOwotIyAgZW5kaWYgLyogQllGT1VSICov
Ci0gICAgICAgIGZwcmludGYob3V0LCAiICB9XG59O1xuIik7Ci0gICAgICAgIGZjbG9zZShvdXQp
OwotICAgIH0KLSNlbmRpZiAvKiBNQUtFQ1JDSCAqLwotfQotCi0jaWZkZWYgTUFLRUNSQ0gKLWxv
Y2FsIHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKLSAgICBGSUxFICpvdXQ7Ci0gICAgY29u
c3QgdW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOwotewotICAgIGludCBuOwotCi0gICAgZm9yIChu
ID0gMDsgbiA8IDI1NjsgbisrKQotICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMi
LCBuICUgNSA/ICIiIDogIiAgICAiLCB0YWJsZVtuXSwKLSAgICAgICAgICAgICAgICBuID09IDI1
NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOwotfQotI2VuZGlmIC8qIE1B
S0VDUkNIICovCi0KLSNlbHNlIC8qICFEWU5BTUlDX0NSQ19UQUJMRSAqLwotLyogPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gKiBUYWJsZXMgb2YgQ1JDLTMycyBvZiBhbGwgc2luZ2xlLWJ5dGUgdmFsdWVzLCBt
YWRlIGJ5IG1ha2VfY3JjX3RhYmxlKCkuCi0gKi8KLSNpbmNsdWRlICJjcmMzMi5oIgotI2VuZGlm
IC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRoaXMg
ZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgYXNtIHZlcnNpb25zIG9mIGNyYzMyKCkKLSAqLwotY29u
c3QgdW5zaWduZWQgbG9uZyBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQotewotI2lmZGVm
IERZTkFNSUNfQ1JDX1RBQkxFCi0gICAgaWYgKGNyY190YWJsZV9lbXB0eSkKLSAgICAgICAgbWFr
ZV9jcmNfdGFibGUoKTsKLSNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLwotICAgIHJldHVy
biAoY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiljcmNfdGFibGU7Ci19Ci0KLS8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gKi8KLSNkZWZpbmUgRE8xIGNyYyA9IGNyY190YWJsZVswXVsoKGludCljcmMgXiAo
KmJ1ZisrKSkgJiAweGZmXSBeIChjcmMgPj4gOCkKLSNkZWZpbmUgRE84IERPMTsgRE8xOyBETzE7
IERPMTsgRE8xOyBETzE7IERPMTsgRE8xCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVuc2ln
bmVkIGxvbmcgWkVYUE9SVCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQotICAgIHVuc2lnbmVkIGxvbmcg
Y3JjOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7Ci0gICAgdW5zaWduZWQgbGVu
OwotewotICAgIGlmIChidWYgPT0gWl9OVUxMKSByZXR1cm4gMFVMOwotCi0jaWZkZWYgRFlOQU1J
Q19DUkNfVEFCTEUKLSAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQotICAgICAgICBtYWtlX2NyY190
YWJsZSgpOwotI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0KLSNpZmRlZiBCWUZPVVIK
LSAgICBpZiAoc2l6ZW9mKHZvaWQgKikgPT0gc2l6ZW9mKHB0cmRpZmZfdCkpIHsKLSAgICAgICAg
dTQgZW5kaWFuOwotCi0gICAgICAgIGVuZGlhbiA9IDE7Ci0gICAgICAgIGlmICgqKCh1bnNpZ25l
ZCBjaGFyICopKCZlbmRpYW4pKSkKLSAgICAgICAgICAgIHJldHVybiBjcmMzMl9saXR0bGUoY3Jj
LCBidWYsIGxlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBjcmMzMl9iaWco
Y3JjLCBidWYsIGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIEJZRk9VUiAqLwotICAgIGNyYyA9IGNy
YyBeIDB4ZmZmZmZmZmZVTDsKLSAgICB3aGlsZSAobGVuID49IDgpIHsKLSAgICAgICAgRE84Owot
ICAgICAgICBsZW4gLT0gODsKLSAgICB9Ci0gICAgaWYgKGxlbikgZG8gewotICAgICAgICBETzE7
Ci0gICAgfSB3aGlsZSAoLS1sZW4pOwotICAgIHJldHVybiBjcmMgXiAweGZmZmZmZmZmVUw7Ci19
Ci0KLSNpZmRlZiBCWUZPVVIKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBET0xJ
VDQgYyBePSAqYnVmNCsrOyBcCi0gICAgICAgIGMgPSBjcmNfdGFibGVbM11bYyAmIDB4ZmZdIF4g
Y3JjX3RhYmxlWzJdWyhjID4+IDgpICYgMHhmZl0gXiBcCi0gICAgICAgICAgICBjcmNfdGFibGVb
MV1bKGMgPj4gMTYpICYgMHhmZl0gXiBjcmNfdGFibGVbMF1bYyA+PiAyNF0KLSNkZWZpbmUgRE9M
SVQzMiBET0xJVDQ7IERPTElUNDsgRE9MSVQ0OyBET0xJVDQ7IERPTElUNDsgRE9MSVQ0OyBET0xJ
VDQ7IERPTElUNAotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1sb2NhbCB1bnNpZ25lZCBsb25n
IGNyYzMyX2xpdHRsZShjcmMsIGJ1ZiwgbGVuKQotICAgIHVuc2lnbmVkIGxvbmcgY3JjOwotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAg
IHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OwotCi0gICAg
YyA9ICh1NCljcmM7Ci0gICAgYyA9IH5jOwotICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3Qp
YnVmICYgMykpIHsKLSAgICAgICAgYyA9IGNyY190YWJsZVswXVsoYyBeICpidWYrKykgJiAweGZm
XSBeIChjID4+IDgpOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBidWY0ID0gKGNvbnN0
IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKLSAgICB3aGlsZSAobGVuID49IDMyKSB7
Ci0gICAgICAgIERPTElUMzI7Ci0gICAgICAgIGxlbiAtPSAzMjsKLSAgICB9Ci0gICAgd2hpbGUg
KGxlbiA+PSA0KSB7Ci0gICAgICAgIERPTElUNDsKLSAgICAgICAgbGVuIC09IDQ7Ci0gICAgfQot
ICAgIGJ1ZiA9IChjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqKWJ1ZjQ7Ci0KLSAgICBpZiAobGVu
KSBkbyB7Ci0gICAgICAgIGMgPSBjcmNfdGFibGVbMF1bKGMgXiAqYnVmKyspICYgMHhmZl0gXiAo
YyA+PiA4KTsKLSAgICB9IHdoaWxlICgtLWxlbik7Ci0gICAgYyA9IH5jOwotICAgIHJldHVybiAo
dW5zaWduZWQgbG9uZyljOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jZGVmaW5lIERP
QklHNCBjIF49ICorK2J1ZjQ7IFwKLSAgICAgICAgYyA9IGNyY190YWJsZVs0XVtjICYgMHhmZl0g
XiBjcmNfdGFibGVbNV1bKGMgPj4gOCkgJiAweGZmXSBeIFwKLSAgICAgICAgICAgIGNyY190YWJs
ZVs2XVsoYyA+PiAxNikgJiAweGZmXSBeIGNyY190YWJsZVs3XVtjID4+IDI0XQotI2RlZmluZSBE
T0JJRzMyIERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERP
QklHNDsgRE9CSUc0Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWxvY2FsIHVuc2lnbmVkIGxv
bmcgY3JjMzJfYmlnKGNyYywgYnVmLCBsZW4pCi0gICAgdW5zaWduZWQgbG9uZyBjcmM7Ci0gICAg
Y29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAg
cmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7Ci0KLSAgICBj
ID0gUkVWKCh1NCljcmMpOwotICAgIGMgPSB+YzsKLSAgICB3aGlsZSAobGVuICYmICgocHRyZGlm
Zl90KWJ1ZiAmIDMpKSB7Ci0gICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1
ZisrXSBeIChjIDw8IDgpOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBidWY0ID0gKGNv
bnN0IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKLSAgICBidWY0LS07Ci0gICAgd2hp
bGUgKGxlbiA+PSAzMikgewotICAgICAgICBET0JJRzMyOwotICAgICAgICBsZW4gLT0gMzI7Ci0g
ICAgfQotICAgIHdoaWxlIChsZW4gPj0gNCkgewotICAgICAgICBET0JJRzQ7Ci0gICAgICAgIGxl
biAtPSA0OwotICAgIH0KLSAgICBidWY0Kys7Ci0gICAgYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNo
YXIgRkFSICopYnVmNDsKLQotICAgIGlmIChsZW4pIGRvIHsKLSAgICAgICAgYyA9IGNyY190YWJs
ZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7Ci0gICAgfSB3aGlsZSAoLS1sZW4p
OwotICAgIGMgPSB+YzsKLSAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKFJFVihjKSk7Ci19Ci0K
LSNlbmRpZiAvKiBCWUZPVVIgKi8KLQotI2RlZmluZSBHRjJfRElNIDMyICAgICAgLyogZGltZW5z
aW9uIG9mIEdGKDIpIHZlY3RvcnMgKGxlbmd0aCBvZiBDUkMpICovCi0KLS8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0gKi8KLWxvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyhtYXQsIHZlYykK
LSAgICB1bnNpZ25lZCBsb25nICptYXQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2ZWM7Ci17Ci0gICAg
dW5zaWduZWQgbG9uZyBzdW07Ci0KLSAgICBzdW0gPSAwOwotICAgIHdoaWxlICh2ZWMpIHsKLSAg
ICAgICAgaWYgKHZlYyAmIDEpCi0gICAgICAgICAgICBzdW0gXj0gKm1hdDsKLSAgICAgICAgdmVj
ID4+PSAxOwotICAgICAgICBtYXQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIHN1bTsKLX0KLQotLyog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSAqLwotbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFyZShzcXVhcmUs
IG1hdCkKLSAgICB1bnNpZ25lZCBsb25nICpzcXVhcmU7Ci0gICAgdW5zaWduZWQgbG9uZyAqbWF0
OwotewotICAgIGludCBuOwotCi0gICAgZm9yIChuID0gMDsgbiA8IEdGMl9ESU07IG4rKykKLSAg
ICAgICAgc3F1YXJlW25dID0gZ2YyX21hdHJpeF90aW1lcyhtYXQsIG1hdFtuXSk7Ci19Ci0KLS8q
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZShjcmMxLCBj
cmMyLCBsZW4yKQotICAgIHVMb25nIGNyYzE7Ci0gICAgdUxvbmcgY3JjMjsKLSAgICB6X29mZl90
IGxlbjI7Ci17Ci0gICAgaW50IG47Ci0gICAgdW5zaWduZWQgbG9uZyByb3c7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBldmVuW0dGMl9ESU1dOyAgICAvKiBldmVuLXBvd2VyLW9mLXR3byB6ZXJvcyBvcGVy
YXRvciAqLwotICAgIHVuc2lnbmVkIGxvbmcgb2RkW0dGMl9ESU1dOyAgICAgLyogb2RkLXBvd2Vy
LW9mLXR3byB6ZXJvcyBvcGVyYXRvciAqLwotCi0gICAgLyogZGVnZW5lcmF0ZSBjYXNlICovCi0g
ICAgaWYgKGxlbjIgPT0gMCkKLSAgICAgICAgcmV0dXJuIGNyYzE7Ci0KLSAgICAvKiBwdXQgb3Bl
cmF0b3IgZm9yIG9uZSB6ZXJvIGJpdCBpbiBvZGQgKi8KLSAgICBvZGRbMF0gPSAweGVkYjg4MzIw
TDsgICAgICAgICAgIC8qIENSQy0zMiBwb2x5bm9taWFsICovCi0gICAgcm93ID0gMTsKLSAgICBm
b3IgKG4gPSAxOyBuIDwgR0YyX0RJTTsgbisrKSB7Ci0gICAgICAgIG9kZFtuXSA9IHJvdzsKLSAg
ICAgICAgcm93IDw8PSAxOwotICAgIH0KLQotICAgIC8qIHB1dCBvcGVyYXRvciBmb3IgdHdvIHpl
cm8gYml0cyBpbiBldmVuICovCi0gICAgZ2YyX21hdHJpeF9zcXVhcmUoZXZlbiwgb2RkKTsKLQot
ICAgIC8qIHB1dCBvcGVyYXRvciBmb3IgZm91ciB6ZXJvIGJpdHMgaW4gb2RkICovCi0gICAgZ2Yy
X21hdHJpeF9zcXVhcmUob2RkLCBldmVuKTsKLQotICAgIC8qIGFwcGx5IGxlbjIgemVyb3MgdG8g
Y3JjMSAoZmlyc3Qgc3F1YXJlIHdpbGwgcHV0IHRoZSBvcGVyYXRvciBmb3Igb25lCi0gICAgICAg
emVybyBieXRlLCBlaWdodCB6ZXJvIGJpdHMsIGluIGV2ZW4pICovCi0gICAgZG8gewotICAgICAg
ICAvKiBhcHBseSB6ZXJvcyBvcGVyYXRvciBmb3IgdGhpcyBiaXQgb2YgbGVuMiAqLwotICAgICAg
ICBnZjJfbWF0cml4X3NxdWFyZShldmVuLCBvZGQpOwotICAgICAgICBpZiAobGVuMiAmIDEpCi0g
ICAgICAgICAgICBjcmMxID0gZ2YyX21hdHJpeF90aW1lcyhldmVuLCBjcmMxKTsKLSAgICAgICAg
bGVuMiA+Pj0gMTsKLQotICAgICAgICAvKiBpZiBubyBtb3JlIGJpdHMgc2V0LCB0aGVuIGRvbmUg
Ki8KLSAgICAgICAgaWYgKGxlbjIgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IC8qIGFub3RoZXIgaXRlcmF0aW9uIG9mIHRoZSBsb29wIHdpdGggb2RkIGFuZCBldmVuIHN3YXBw
ZWQgKi8KLSAgICAgICAgZ2YyX21hdHJpeF9zcXVhcmUob2RkLCBldmVuKTsKLSAgICAgICAgaWYg
KGxlbjIgJiAxKQotICAgICAgICAgICAgY3JjMSA9IGdmMl9tYXRyaXhfdGltZXMob2RkLCBjcmMx
KTsKLSAgICAgICAgbGVuMiA+Pj0gMTsKLQotICAgICAgICAvKiBpZiBubyBtb3JlIGJpdHMgc2V0
LCB0aGVuIGRvbmUgKi8KLSAgICB9IHdoaWxlIChsZW4yICE9IDApOwotCi0gICAgLyogcmV0dXJu
IGNvbWJpbmVkIGNyYyAqLwotICAgIGNyYzEgXj0gY3JjMjsKLSAgICByZXR1cm4gY3JjMTsKLX0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9jcmMzMi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9jcmMzMi5oCShy
ZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9j
cmMzMi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0MSArMCwwIEBACi0vKiBjcmMzMi5oIC0tIHRh
YmxlcyBmb3IgcmFwaWQgQ1JDIGNhbGN1bGF0aW9uCi0gKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxs
eSBieSBjcmMzMi5jCi0gKi8KLQotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3Rh
YmxlW1RCTFNdWzI1Nl0gPQotewotICB7Ci0gICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUws
IDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFiYVVMLCAweDA3NmRjNDE5VUwsCi0gICAgMHg3MDZhZjQ4
ZlVMLCAweGU5NjNhNTM1VUwsIDB4OWU2NDk1YTNVTCwgMHgwZWRiODgzMlVMLCAweDc5ZGNiOGE0
VUwsCi0gICAgMHhlMGQ1ZTkxZVVMLCAweDk3ZDJkOTg4VUwsIDB4MDliNjRjMmJVTCwgMHg3ZWIx
N2NiZFVMLCAweGU3YjgyZDA3VUwsCi0gICAgMHg5MGJmMWQ5MVVMLCAweDFkYjcxMDY0VUwsIDB4
NmFiMDIwZjJVTCwgMHhmM2I5NzE0OFVMLCAweDg0YmU0MWRlVUwsCi0gICAgMHgxYWRhZDQ3ZFVM
LCAweDZkZGRlNGViVUwsIDB4ZjRkNGI1NTFVTCwgMHg4M2QzODVjN1VMLCAweDEzNmM5ODU2VUws
Ci0gICAgMHg2NDZiYThjMFVMLCAweGZkNjJmOTdhVUwsIDB4OGE2NWM5ZWNVTCwgMHgxNDAxNWM0
ZlVMLCAweDYzMDY2Y2Q5VUwsCi0gICAgMHhmYTBmM2Q2M1VMLCAweDhkMDgwZGY1VUwsIDB4M2I2
ZTIwYzhVTCwgMHg0YzY5MTA1ZVVMLCAweGQ1NjA0MWU0VUwsCi0gICAgMHhhMjY3NzE3MlVMLCAw
eDNjMDNlNGQxVUwsIDB4NGIwNGQ0NDdVTCwgMHhkMjBkODVmZFVMLCAweGE1MGFiNTZiVUwsCi0g
ICAgMHgzNWI1YThmYVVMLCAweDQyYjI5ODZjVUwsIDB4ZGJiYmM5ZDZVTCwgMHhhY2JjZjk0MFVM
LCAweDMyZDg2Y2UzVUwsCi0gICAgMHg0NWRmNWM3NVVMLCAweGRjZDYwZGNmVUwsIDB4YWJkMTNk
NTlVTCwgMHgyNmQ5MzBhY1VMLCAweDUxZGUwMDNhVUwsCi0gICAgMHhjOGQ3NTE4MFVMLCAweGJm
ZDA2MTE2VUwsIDB4MjFiNGY0YjVVTCwgMHg1NmIzYzQyM1VMLCAweGNmYmE5NTk5VUwsCi0gICAg
MHhiOGJkYTUwZlVMLCAweDI4MDJiODllVUwsIDB4NWYwNTg4MDhVTCwgMHhjNjBjZDliMlVMLCAw
eGIxMGJlOTI0VUwsCi0gICAgMHgyZjZmN2M4N1VMLCAweDU4Njg0YzExVUwsIDB4YzE2MTFkYWJV
TCwgMHhiNjY2MmQzZFVMLCAweDc2ZGM0MTkwVUwsCi0gICAgMHgwMWRiNzEwNlVMLCAweDk4ZDIy
MGJjVUwsIDB4ZWZkNTEwMmFVTCwgMHg3MWIxODU4OVVMLCAweDA2YjZiNTFmVUwsCi0gICAgMHg5
ZmJmZTRhNVVMLCAweGU4YjhkNDMzVUwsIDB4NzgwN2M5YTJVTCwgMHgwZjAwZjkzNFVMLCAweDk2
MDlhODhlVUwsCi0gICAgMHhlMTBlOTgxOFVMLCAweDdmNmEwZGJiVUwsIDB4MDg2ZDNkMmRVTCwg
MHg5MTY0NmM5N1VMLCAweGU2NjM1YzAxVUwsCi0gICAgMHg2YjZiNTFmNFVMLCAweDFjNmM2MTYy
VUwsIDB4ODU2NTMwZDhVTCwgMHhmMjYyMDA0ZVVMLCAweDZjMDY5NWVkVUwsCi0gICAgMHgxYjAx
YTU3YlVMLCAweDgyMDhmNGMxVUwsIDB4ZjUwZmM0NTdVTCwgMHg2NWIwZDljNlVMLCAweDEyYjdl
OTUwVUwsCi0gICAgMHg4YmJlYjhlYVVMLCAweGZjYjk4ODdjVUwsIDB4NjJkZDFkZGZVTCwgMHgx
NWRhMmQ0OVVMLCAweDhjZDM3Y2YzVUwsCi0gICAgMHhmYmQ0NGM2NVVMLCAweDRkYjI2MTU4VUws
IDB4M2FiNTUxY2VVTCwgMHhhM2JjMDA3NFVMLCAweGQ0YmIzMGUyVUwsCi0gICAgMHg0YWRmYTU0
MVVMLCAweDNkZDg5NWQ3VUwsIDB4YTRkMWM0NmRVTCwgMHhkM2Q2ZjRmYlVMLCAweDQzNjllOTZh
VUwsCi0gICAgMHgzNDZlZDlmY1VMLCAweGFkNjc4ODQ2VUwsIDB4ZGE2MGI4ZDBVTCwgMHg0NDA0
MmQ3M1VMLCAweDMzMDMxZGU1VUwsCi0gICAgMHhhYTBhNGM1ZlVMLCAweGRkMGQ3Y2M5VUwsIDB4
NTAwNTcxM2NVTCwgMHgyNzAyNDFhYVVMLCAweGJlMGIxMDEwVUwsCi0gICAgMHhjOTBjMjA4NlVM
LCAweDU3NjhiNTI1VUwsIDB4MjA2Zjg1YjNVTCwgMHhiOTY2ZDQwOVVMLCAweGNlNjFlNDlmVUws
Ci0gICAgMHg1ZWRlZjkwZVVMLCAweDI5ZDljOTk4VUwsIDB4YjBkMDk4MjJVTCwgMHhjN2Q3YThi
NFVMLCAweDU5YjMzZDE3VUwsCi0gICAgMHgyZWI0MGQ4MVVMLCAweGI3YmQ1YzNiVUwsIDB4YzBi
YTZjYWRVTCwgMHhlZGI4ODMyMFVMLCAweDlhYmZiM2I2VUwsCi0gICAgMHgwM2I2ZTIwY1VMLCAw
eDc0YjFkMjlhVUwsIDB4ZWFkNTQ3MzlVTCwgMHg5ZGQyNzdhZlVMLCAweDA0ZGIyNjE1VUwsCi0g
ICAgMHg3M2RjMTY4M1VMLCAweGUzNjMwYjEyVUwsIDB4OTQ2NDNiODRVTCwgMHgwZDZkNmEzZVVM
LCAweDdhNmE1YWE4VUwsCi0gICAgMHhlNDBlY2YwYlVMLCAweDkzMDlmZjlkVUwsIDB4MGEwMGFl
MjdVTCwgMHg3ZDA3OWViMVVMLCAweGYwMGY5MzQ0VUwsCi0gICAgMHg4NzA4YTNkMlVMLCAweDFl
MDFmMjY4VUwsIDB4NjkwNmMyZmVVTCwgMHhmNzYyNTc1ZFVMLCAweDgwNjU2N2NiVUwsCi0gICAg
MHgxOTZjMzY3MVVMLCAweDZlNmIwNmU3VUwsIDB4ZmVkNDFiNzZVTCwgMHg4OWQzMmJlMFVMLCAw
eDEwZGE3YTVhVUwsCi0gICAgMHg2N2RkNGFjY1VMLCAweGY5YjlkZjZmVUwsIDB4OGViZWVmZjlV
TCwgMHgxN2I3YmU0M1VMLCAweDYwYjA4ZWQ1VUwsCi0gICAgMHhkNmQ2YTNlOFVMLCAweGExZDE5
MzdlVUwsIDB4MzhkOGMyYzRVTCwgMHg0ZmRmZjI1MlVMLCAweGQxYmI2N2YxVUwsCi0gICAgMHhh
NmJjNTc2N1VMLCAweDNmYjUwNmRkVUwsIDB4NDhiMjM2NGJVTCwgMHhkODBkMmJkYVVMLCAweGFm
MGExYjRjVUwsCi0gICAgMHgzNjAzNGFmNlVMLCAweDQxMDQ3YTYwVUwsIDB4ZGY2MGVmYzNVTCwg
MHhhODY3ZGY1NVVMLCAweDMxNmU4ZWVmVUwsCi0gICAgMHg0NjY5YmU3OVVMLCAweGNiNjFiMzhj
VUwsIDB4YmM2NjgzMWFVTCwgMHgyNTZmZDJhMFVMLCAweDUyNjhlMjM2VUwsCi0gICAgMHhjYzBj
Nzc5NVVMLCAweGJiMGI0NzAzVUwsIDB4MjIwMjE2YjlVTCwgMHg1NTA1MjYyZlVMLCAweGM1YmEz
YmJlVUwsCi0gICAgMHhiMmJkMGIyOFVMLCAweDJiYjQ1YTkyVUwsIDB4NWNiMzZhMDRVTCwgMHhj
MmQ3ZmZhN1VMLCAweGI1ZDBjZjMxVUwsCi0gICAgMHgyY2Q5OWU4YlVMLCAweDViZGVhZTFkVUws
IDB4OWI2NGMyYjBVTCwgMHhlYzYzZjIyNlVMLCAweDc1NmFhMzljVUwsCi0gICAgMHgwMjZkOTMw
YVVMLCAweDljMDkwNmE5VUwsIDB4ZWIwZTM2M2ZVTCwgMHg3MjA3Njc4NVVMLCAweDA1MDA1NzEz
VUwsCi0gICAgMHg5NWJmNGE4MlVMLCAweGUyYjg3YTE0VUwsIDB4N2JiMTJiYWVVTCwgMHgwY2I2
MWIzOFVMLCAweDkyZDI4ZTliVUwsCi0gICAgMHhlNWQ1YmUwZFVMLCAweDdjZGNlZmI3VUwsIDB4
MGJkYmRmMjFVTCwgMHg4NmQzZDJkNFVMLCAweGYxZDRlMjQyVUwsCi0gICAgMHg2OGRkYjNmOFVM
LCAweDFmZGE4MzZlVUwsIDB4ODFiZTE2Y2RVTCwgMHhmNmI5MjY1YlVMLCAweDZmYjA3N2UxVUws
Ci0gICAgMHgxOGI3NDc3N1VMLCAweDg4MDg1YWU2VUwsIDB4ZmYwZjZhNzBVTCwgMHg2NjA2M2Jj
YVVMLCAweDExMDEwYjVjVUwsCi0gICAgMHg4ZjY1OWVmZlVMLCAweGY4NjJhZTY5VUwsIDB4NjE2
YmZmZDNVTCwgMHgxNjZjY2Y0NVVMLCAweGEwMGFlMjc4VUwsCi0gICAgMHhkNzBkZDJlZVVMLCAw
eDRlMDQ4MzU0VUwsIDB4MzkwM2IzYzJVTCwgMHhhNzY3MjY2MVVMLCAweGQwNjAxNmY3VUwsCi0g
ICAgMHg0OTY5NDc0ZFVMLCAweDNlNmU3N2RiVUwsIDB4YWVkMTZhNGFVTCwgMHhkOWQ2NWFkY1VM
LCAweDQwZGYwYjY2VUwsCi0gICAgMHgzN2Q4M2JmMFVMLCAweGE5YmNhZTUzVUwsIDB4ZGViYjll
YzVVTCwgMHg0N2IyY2Y3ZlVMLCAweDMwYjVmZmU5VUwsCi0gICAgMHhiZGJkZjIxY1VMLCAweGNh
YmFjMjhhVUwsIDB4NTNiMzkzMzBVTCwgMHgyNGI0YTNhNlVMLCAweGJhZDAzNjA1VUwsCi0gICAg
MHhjZGQ3MDY5M1VMLCAweDU0ZGU1NzI5VUwsIDB4MjNkOTY3YmZVTCwgMHhiMzY2N2EyZVVMLCAw
eGM0NjE0YWI4VUwsCi0gICAgMHg1ZDY4MWIwMlVMLCAweDJhNmYyYjk0VUwsIDB4YjQwYmJlMzdV
TCwgMHhjMzBjOGVhMVVMLCAweDVhMDVkZjFiVUwsCi0gICAgMHgyZDAyZWY4ZFVMCi0jaWZkZWYg
QllGT1VSCi0gIH0sCi0gIHsKLSAgICAweDAwMDAwMDAwVUwsIDB4MTkxYjMxNDFVTCwgMHgzMjM2
NjI4MlVMLCAweDJiMmQ1M2MzVUwsIDB4NjQ2Y2M1MDRVTCwKLSAgICAweDdkNzdmNDQ1VUwsIDB4
NTY1YWE3ODZVTCwgMHg0ZjQxOTZjN1VMLCAweGM4ZDk4YTA4VUwsIDB4ZDFjMmJiNDlVTCwKLSAg
ICAweGZhZWZlODhhVUwsIDB4ZTNmNGQ5Y2JVTCwgMHhhY2I1NGYwY1VMLCAweGI1YWU3ZTRkVUws
IDB4OWU4MzJkOGVVTCwKLSAgICAweDg3OTgxY2NmVUwsIDB4NGFjMjEyNTFVTCwgMHg1M2Q5MjMx
MFVMLCAweDc4ZjQ3MGQzVUwsIDB4NjFlZjQxOTJVTCwKLSAgICAweDJlYWVkNzU1VUwsIDB4Mzdi
NWU2MTRVTCwgMHgxYzk4YjVkN1VMLCAweDA1ODM4NDk2VUwsIDB4ODIxYjk4NTlVTCwKLSAgICAw
eDliMDBhOTE4VUwsIDB4YjAyZGZhZGJVTCwgMHhhOTM2Y2I5YVVMLCAweGU2Nzc1ZDVkVUwsIDB4
ZmY2YzZjMWNVTCwKLSAgICAweGQ0NDEzZmRmVUwsIDB4Y2Q1YTBlOWVVTCwgMHg5NTg0MjRhMlVM
LCAweDhjOWYxNWUzVUwsIDB4YTdiMjQ2MjBVTCwKLSAgICAweGJlYTk3NzYxVUwsIDB4ZjFlOGUx
YTZVTCwgMHhlOGYzZDBlN1VMLCAweGMzZGU4MzI0VUwsIDB4ZGFjNWIyNjVVTCwKLSAgICAweDVk
NWRhZWFhVUwsIDB4NDQ0NjlmZWJVTCwgMHg2ZjZiY2MyOFVMLCAweDc2NzBmZDY5VUwsIDB4Mzkz
MTZiYWVVTCwKLSAgICAweDIwMmE1YWVmVUwsIDB4MGIwNzA5MmNVTCwgMHgxMjFjMzg2ZFVMLCAw
eGRmNDYzNmYzVUwsIDB4YzY1ZDA3YjJVTCwKLSAgICAweGVkNzA1NDcxVUwsIDB4ZjQ2YjY1MzBV
TCwgMHhiYjJhZjNmN1VMLCAweGEyMzFjMmI2VUwsIDB4ODkxYzkxNzVVTCwKLSAgICAweDkwMDdh
MDM0VUwsIDB4MTc5ZmJjZmJVTCwgMHgwZTg0OGRiYVVMLCAweDI1YTlkZTc5VUwsIDB4M2NiMmVm
MzhVTCwKLSAgICAweDczZjM3OWZmVUwsIDB4NmFlODQ4YmVVTCwgMHg0MWM1MWI3ZFVMLCAweDU4
ZGUyYTNjVUwsIDB4ZjA3OTRmMDVVTCwKLSAgICAweGU5NjI3ZTQ0VUwsIDB4YzI0ZjJkODdVTCwg
MHhkYjU0MWNjNlVMLCAweDk0MTU4YTAxVUwsIDB4OGQwZWJiNDBVTCwKLSAgICAweGE2MjNlODgz
VUwsIDB4YmYzOGQ5YzJVTCwgMHgzOGEwYzUwZFVMLCAweDIxYmJmNDRjVUwsIDB4MGE5NmE3OGZV
TCwKLSAgICAweDEzOGQ5NmNlVUwsIDB4NWNjYzAwMDlVTCwgMHg0NWQ3MzE0OFVMLCAweDZlZmE2
MjhiVUwsIDB4NzdlMTUzY2FVTCwKLSAgICAweGJhYmI1ZDU0VUwsIDB4YTNhMDZjMTVVTCwgMHg4
ODhkM2ZkNlVMLCAweDkxOTYwZTk3VUwsIDB4ZGVkNzk4NTBVTCwKLSAgICAweGM3Y2NhOTExVUws
IDB4ZWNlMWZhZDJVTCwgMHhmNWZhY2I5M1VMLCAweDcyNjJkNzVjVUwsIDB4NmI3OWU2MWRVTCwK
LSAgICAweDQwNTRiNWRlVUwsIDB4NTk0Zjg0OWZVTCwgMHgxNjBlMTI1OFVMLCAweDBmMTUyMzE5
VUwsIDB4MjQzODcwZGFVTCwKLSAgICAweDNkMjM0MTliVUwsIDB4NjVmZDZiYTdVTCwgMHg3Y2U2
NWFlNlVMLCAweDU3Y2IwOTI1VUwsIDB4NGVkMDM4NjRVTCwKLSAgICAweDAxOTFhZWEzVUwsIDB4
MTg4YTlmZTJVTCwgMHgzM2E3Y2MyMVVMLCAweDJhYmNmZDYwVUwsIDB4YWQyNGUxYWZVTCwKLSAg
ICAweGI0M2ZkMGVlVUwsIDB4OWYxMjgzMmRVTCwgMHg4NjA5YjI2Y1VMLCAweGM5NDgyNGFiVUws
IDB4ZDA1MzE1ZWFVTCwKLSAgICAweGZiN2U0NjI5VUwsIDB4ZTI2NTc3NjhVTCwgMHgyZjNmNzlm
NlVMLCAweDM2MjQ0OGI3VUwsIDB4MWQwOTFiNzRVTCwKLSAgICAweDA0MTIyYTM1VUwsIDB4NGI1
M2JjZjJVTCwgMHg1MjQ4OGRiM1VMLCAweDc5NjVkZTcwVUwsIDB4NjA3ZWVmMzFVTCwKLSAgICAw
eGU3ZTZmM2ZlVUwsIDB4ZmVmZGMyYmZVTCwgMHhkNWQwOTE3Y1VMLCAweGNjY2JhMDNkVUwsIDB4
ODM4YTM2ZmFVTCwKLSAgICAweDlhOTEwN2JiVUwsIDB4YjFiYzU0NzhVTCwgMHhhOGE3NjUzOVVM
LCAweDNiODM5ODRiVUwsIDB4MjI5OGE5MGFVTCwKLSAgICAweDA5YjVmYWM5VUwsIDB4MTBhZWNi
ODhVTCwgMHg1ZmVmNWQ0ZlVMLCAweDQ2ZjQ2YzBlVUwsIDB4NmRkOTNmY2RVTCwKLSAgICAweDc0
YzIwZThjVUwsIDB4ZjM1YTEyNDNVTCwgMHhlYTQxMjMwMlVMLCAweGMxNmM3MGMxVUwsIDB4ZDg3
NzQxODBVTCwKLSAgICAweDk3MzZkNzQ3VUwsIDB4OGUyZGU2MDZVTCwgMHhhNTAwYjVjNVVMLCAw
eGJjMWI4NDg0VUwsIDB4NzE0MThhMWFVTCwKLSAgICAweDY4NWFiYjViVUwsIDB4NDM3N2U4OThV
TCwgMHg1YTZjZDlkOVVMLCAweDE1MmQ0ZjFlVUwsIDB4MGMzNjdlNWZVTCwKLSAgICAweDI3MWIy
ZDljVUwsIDB4M2UwMDFjZGRVTCwgMHhiOTk4MDAxMlVMLCAweGEwODMzMTUzVUwsIDB4OGJhZTYy
OTBVTCwKLSAgICAweDkyYjU1M2QxVUwsIDB4ZGRmNGM1MTZVTCwgMHhjNGVmZjQ1N1VMLCAweGVm
YzJhNzk0VUwsIDB4ZjZkOTk2ZDVVTCwKLSAgICAweGFlMDdiY2U5VUwsIDB4YjcxYzhkYThVTCwg
MHg5YzMxZGU2YlVMLCAweDg1MmFlZjJhVUwsIDB4Y2E2Yjc5ZWRVTCwKLSAgICAweGQzNzA0OGFj
VUwsIDB4Zjg1ZDFiNmZVTCwgMHhlMTQ2MmEyZVVMLCAweDY2ZGUzNmUxVUwsIDB4N2ZjNTA3YTBV
TCwKLSAgICAweDU0ZTg1NDYzVUwsIDB4NGRmMzY1MjJVTCwgMHgwMmIyZjNlNVVMLCAweDFiYTlj
MmE0VUwsIDB4MzA4NDkxNjdVTCwKLSAgICAweDI5OWZhMDI2VUwsIDB4ZTRjNWFlYjhVTCwgMHhm
ZGRlOWZmOVVMLCAweGQ2ZjNjYzNhVUwsIDB4Y2ZlOGZkN2JVTCwKLSAgICAweDgwYTk2YmJjVUws
IDB4OTliMjVhZmRVTCwgMHhiMjlmMDkzZVVMLCAweGFiODQzODdmVUwsIDB4MmMxYzI0YjBVTCwK
LSAgICAweDM1MDcxNWYxVUwsIDB4MWUyYTQ2MzJVTCwgMHgwNzMxNzc3M1VMLCAweDQ4NzBlMWI0
VUwsIDB4NTE2YmQwZjVVTCwKLSAgICAweDdhNDY4MzM2VUwsIDB4NjM1ZGIyNzdVTCwgMHhjYmZh
ZDc0ZVVMLCAweGQyZTFlNjBmVUwsIDB4ZjljY2I1Y2NVTCwKLSAgICAweGUwZDc4NDhkVUwsIDB4
YWY5NjEyNGFVTCwgMHhiNjhkMjMwYlVMLCAweDlkYTA3MGM4VUwsIDB4ODRiYjQxODlVTCwKLSAg
ICAweDAzMjM1ZDQ2VUwsIDB4MWEzODZjMDdVTCwgMHgzMTE1M2ZjNFVMLCAweDI4MGUwZTg1VUws
IDB4Njc0Zjk4NDJVTCwKLSAgICAweDdlNTRhOTAzVUwsIDB4NTU3OWZhYzBVTCwgMHg0YzYyY2I4
MVVMLCAweDgxMzhjNTFmVUwsIDB4OTgyM2Y0NWVVTCwKLSAgICAweGIzMGVhNzlkVUwsIDB4YWEx
NTk2ZGNVTCwgMHhlNTU0MDAxYlVMLCAweGZjNGYzMTVhVUwsIDB4ZDc2MjYyOTlVTCwKLSAgICAw
eGNlNzk1M2Q4VUwsIDB4NDllMTRmMTdVTCwgMHg1MGZhN2U1NlVMLCAweDdiZDcyZDk1VUwsIDB4
NjJjYzFjZDRVTCwKLSAgICAweDJkOGQ4YTEzVUwsIDB4MzQ5NmJiNTJVTCwgMHgxZmJiZTg5MVVM
LCAweDA2YTBkOWQwVUwsIDB4NWU3ZWYzZWNVTCwKLSAgICAweDQ3NjVjMmFkVUwsIDB4NmM0ODkx
NmVVTCwgMHg3NTUzYTAyZlVMLCAweDNhMTIzNmU4VUwsIDB4MjMwOTA3YTlVTCwKLSAgICAweDA4
MjQ1NDZhVUwsIDB4MTEzZjY1MmJVTCwgMHg5NmE3NzllNFVMLCAweDhmYmM0OGE1VUwsIDB4YTQ5
MTFiNjZVTCwKLSAgICAweGJkOGEyYTI3VUwsIDB4ZjJjYmJjZTBVTCwgMHhlYmQwOGRhMVVMLCAw
eGMwZmRkZTYyVUwsIDB4ZDllNmVmMjNVTCwKLSAgICAweDE0YmNlMWJkVUwsIDB4MGRhN2QwZmNV
TCwgMHgyNjhhODMzZlVMLCAweDNmOTFiMjdlVUwsIDB4NzBkMDI0YjlVTCwKLSAgICAweDY5Y2Ix
NWY4VUwsIDB4NDJlNjQ2M2JVTCwgMHg1YmZkNzc3YVVMLCAweGRjNjU2YmI1VUwsIDB4YzU3ZTVh
ZjRVTCwKLSAgICAweGVlNTMwOTM3VUwsIDB4Zjc0ODM4NzZVTCwgMHhiODA5YWViMVVMLCAweGEx
MTI5ZmYwVUwsIDB4OGEzZmNjMzNVTCwKLSAgICAweDkzMjRmZDcyVUwKLSAgfSwKLSAgewotICAg
IDB4MDAwMDAwMDBVTCwgMHgwMWMyNmEzN1VMLCAweDAzODRkNDZlVUwsIDB4MDI0NmJlNTlVTCwg
MHgwNzA5YThkY1VMLAotICAgIDB4MDZjYmMyZWJVTCwgMHgwNDhkN2NiMlVMLCAweDA1NGYxNjg1
VUwsIDB4MGUxMzUxYjhVTCwgMHgwZmQxM2I4ZlVMLAotICAgIDB4MGQ5Nzg1ZDZVTCwgMHgwYzU1
ZWZlMVVMLCAweDA5MWFmOTY0VUwsIDB4MDhkODkzNTNVTCwgMHgwYTllMmQwYVVMLAotICAgIDB4
MGI1YzQ3M2RVTCwgMHgxYzI2YTM3MFVMLCAweDFkZTRjOTQ3VUwsIDB4MWZhMjc3MWVVTCwgMHgx
ZTYwMWQyOVVMLAotICAgIDB4MWIyZjBiYWNVTCwgMHgxYWVkNjE5YlVMLCAweDE4YWJkZmMyVUws
IDB4MTk2OWI1ZjVVTCwgMHgxMjM1ZjJjOFVMLAotICAgIDB4MTNmNzk4ZmZVTCwgMHgxMWIxMjZh
NlVMLCAweDEwNzM0YzkxVUwsIDB4MTUzYzVhMTRVTCwgMHgxNGZlMzAyM1VMLAotICAgIDB4MTZi
ODhlN2FVTCwgMHgxNzdhZTQ0ZFVMLCAweDM4NGQ0NmUwVUwsIDB4Mzk4ZjJjZDdVTCwgMHgzYmM5
OTI4ZVVMLAotICAgIDB4M2EwYmY4YjlVTCwgMHgzZjQ0ZWUzY1VMLCAweDNlODY4NDBiVUwsIDB4
M2NjMDNhNTJVTCwgMHgzZDAyNTA2NVVMLAotICAgIDB4MzY1ZTE3NThVTCwgMHgzNzljN2Q2ZlVM
LCAweDM1ZGFjMzM2VUwsIDB4MzQxOGE5MDFVTCwgMHgzMTU3YmY4NFVMLAotICAgIDB4MzA5NWQ1
YjNVTCwgMHgzMmQzNmJlYVVMLCAweDMzMTEwMWRkVUwsIDB4MjQ2YmU1OTBVTCwgMHgyNWE5OGZh
N1VMLAotICAgIDB4MjdlZjMxZmVVTCwgMHgyNjJkNWJjOVVMLCAweDIzNjI0ZDRjVUwsIDB4MjJh
MDI3N2JVTCwgMHgyMGU2OTkyMlVMLAotICAgIDB4MjEyNGYzMTVVTCwgMHgyYTc4YjQyOFVMLCAw
eDJiYmFkZTFmVUwsIDB4MjlmYzYwNDZVTCwgMHgyODNlMGE3MVVMLAotICAgIDB4MmQ3MTFjZjRV
TCwgMHgyY2IzNzZjM1VMLCAweDJlZjVjODlhVUwsIDB4MmYzN2EyYWRVTCwgMHg3MDlhOGRjMFVM
LAotICAgIDB4NzE1OGU3ZjdVTCwgMHg3MzFlNTlhZVVMLCAweDcyZGMzMzk5VUwsIDB4Nzc5MzI1
MWNVTCwgMHg3NjUxNGYyYlVMLAotICAgIDB4NzQxN2YxNzJVTCwgMHg3NWQ1OWI0NVVMLCAweDdl
ODlkYzc4VUwsIDB4N2Y0YmI2NGZVTCwgMHg3ZDBkMDgxNlVMLAotICAgIDB4N2NjZjYyMjFVTCwg
MHg3OTgwNzRhNFVMLCAweDc4NDIxZTkzVUwsIDB4N2EwNGEwY2FVTCwgMHg3YmM2Y2FmZFVMLAot
ICAgIDB4NmNiYzJlYjBVTCwgMHg2ZDdlNDQ4N1VMLCAweDZmMzhmYWRlVUwsIDB4NmVmYTkwZTlV
TCwgMHg2YmI1ODY2Y1VMLAotICAgIDB4NmE3N2VjNWJVTCwgMHg2ODMxNTIwMlVMLCAweDY5ZjMz
ODM1VUwsIDB4NjJhZjdmMDhVTCwgMHg2MzZkMTUzZlVMLAotICAgIDB4NjEyYmFiNjZVTCwgMHg2
MGU5YzE1MVVMLCAweDY1YTZkN2Q0VUwsIDB4NjQ2NGJkZTNVTCwgMHg2NjIyMDNiYVVMLAotICAg
IDB4NjdlMDY5OGRVTCwgMHg0OGQ3Y2IyMFVMLCAweDQ5MTVhMTE3VUwsIDB4NGI1MzFmNGVVTCwg
MHg0YTkxNzU3OVVMLAotICAgIDB4NGZkZTYzZmNVTCwgMHg0ZTFjMDljYlVMLCAweDRjNWFiNzky
VUwsIDB4NGQ5OGRkYTVVTCwgMHg0NmM0OWE5OFVMLAotICAgIDB4NDcwNmYwYWZVTCwgMHg0NTQw
NGVmNlVMLCAweDQ0ODIyNGMxVUwsIDB4NDFjZDMyNDRVTCwgMHg0MDBmNTg3M1VMLAotICAgIDB4
NDI0OWU2MmFVTCwgMHg0MzhiOGMxZFVMLCAweDU0ZjE2ODUwVUwsIDB4NTUzMzAyNjdVTCwgMHg1
Nzc1YmMzZVVMLAotICAgIDB4NTZiN2Q2MDlVTCwgMHg1M2Y4YzA4Y1VMLCAweDUyM2FhYWJiVUws
IDB4NTA3YzE0ZTJVTCwgMHg1MWJlN2VkNVVMLAotICAgIDB4NWFlMjM5ZThVTCwgMHg1YjIwNTNk
ZlVMLCAweDU5NjZlZDg2VUwsIDB4NThhNDg3YjFVTCwgMHg1ZGViOTEzNFVMLAotICAgIDB4NWMy
OWZiMDNVTCwgMHg1ZTZmNDU1YVVMLCAweDVmYWQyZjZkVUwsIDB4ZTEzNTFiODBVTCwgMHhlMGY3
NzFiN1VMLAotICAgIDB4ZTJiMWNmZWVVTCwgMHhlMzczYTVkOVVMLCAweGU2M2NiMzVjVUwsIDB4
ZTdmZWQ5NmJVTCwgMHhlNWI4NjczMlVMLAotICAgIDB4ZTQ3YTBkMDVVTCwgMHhlZjI2NGEzOFVM
LCAweGVlZTQyMDBmVUwsIDB4ZWNhMjllNTZVTCwgMHhlZDYwZjQ2MVVMLAotICAgIDB4ZTgyZmUy
ZTRVTCwgMHhlOWVkODhkM1VMLCAweGViYWIzNjhhVUwsIDB4ZWE2OTVjYmRVTCwgMHhmZDEzYjhm
MFVMLAotICAgIDB4ZmNkMWQyYzdVTCwgMHhmZTk3NmM5ZVVMLCAweGZmNTUwNmE5VUwsIDB4ZmEx
YTEwMmNVTCwgMHhmYmQ4N2ExYlVMLAotICAgIDB4Zjk5ZWM0NDJVTCwgMHhmODVjYWU3NVVMLCAw
eGYzMDBlOTQ4VUwsIDB4ZjJjMjgzN2ZVTCwgMHhmMDg0M2QyNlVMLAotICAgIDB4ZjE0NjU3MTFV
TCwgMHhmNDA5NDE5NFVMLCAweGY1Y2IyYmEzVUwsIDB4Zjc4ZDk1ZmFVTCwgMHhmNjRmZmZjZFVM
LAotICAgIDB4ZDk3ODVkNjBVTCwgMHhkOGJhMzc1N1VMLCAweGRhZmM4OTBlVUwsIDB4ZGIzZWUz
MzlVTCwgMHhkZTcxZjViY1VMLAotICAgIDB4ZGZiMzlmOGJVTCwgMHhkZGY1MjFkMlVMLCAweGRj
Mzc0YmU1VUwsIDB4ZDc2YjBjZDhVTCwgMHhkNmE5NjZlZlVMLAotICAgIDB4ZDRlZmQ4YjZVTCwg
MHhkNTJkYjI4MVVMLCAweGQwNjJhNDA0VUwsIDB4ZDFhMGNlMzNVTCwgMHhkM2U2NzA2YVVMLAot
ICAgIDB4ZDIyNDFhNWRVTCwgMHhjNTVlZmUxMFVMLCAweGM0OWM5NDI3VUwsIDB4YzZkYTJhN2VV
TCwgMHhjNzE4NDA0OVVMLAotICAgIDB4YzI1NzU2Y2NVTCwgMHhjMzk1M2NmYlVMLCAweGMxZDM4
MmEyVUwsIDB4YzAxMWU4OTVVTCwgMHhjYjRkYWZhOFVMLAotICAgIDB4Y2E4ZmM1OWZVTCwgMHhj
OGM5N2JjNlVMLCAweGM5MGIxMWYxVUwsIDB4Y2M0NDA3NzRVTCwgMHhjZDg2NmQ0M1VMLAotICAg
IDB4Y2ZjMGQzMWFVTCwgMHhjZTAyYjkyZFVMLCAweDkxYWY5NjQwVUwsIDB4OTA2ZGZjNzdVTCwg
MHg5MjJiNDIyZVVMLAotICAgIDB4OTNlOTI4MTlVTCwgMHg5NmE2M2U5Y1VMLCAweDk3NjQ1NGFi
VUwsIDB4OTUyMmVhZjJVTCwgMHg5NGUwODBjNVVMLAotICAgIDB4OWZiY2M3ZjhVTCwgMHg5ZTdl
YWRjZlVMLCAweDljMzgxMzk2VUwsIDB4OWRmYTc5YTFVTCwgMHg5OGI1NmYyNFVMLAotICAgIDB4
OTk3NzA1MTNVTCwgMHg5YjMxYmI0YVVMLCAweDlhZjNkMTdkVUwsIDB4OGQ4OTM1MzBVTCwgMHg4
YzRiNWYwN1VMLAotICAgIDB4OGUwZGUxNWVVTCwgMHg4ZmNmOGI2OVVMLCAweDhhODA5ZGVjVUws
IDB4OGI0MmY3ZGJVTCwgMHg4OTA0NDk4MlVMLAotICAgIDB4ODhjNjIzYjVVTCwgMHg4MzlhNjQ4
OFVMLCAweDgyNTgwZWJmVUwsIDB4ODAxZWIwZTZVTCwgMHg4MWRjZGFkMVVMLAotICAgIDB4ODQ5
M2NjNTRVTCwgMHg4NTUxYTY2M1VMLCAweDg3MTcxODNhVUwsIDB4ODZkNTcyMGRVTCwgMHhhOWUy
ZDBhMFVMLAotICAgIDB4YTgyMGJhOTdVTCwgMHhhYTY2MDRjZVVMLCAweGFiYTQ2ZWY5VUwsIDB4
YWVlYjc4N2NVTCwgMHhhZjI5MTI0YlVMLAotICAgIDB4YWQ2ZmFjMTJVTCwgMHhhY2FkYzYyNVVM
LCAweGE3ZjE4MTE4VUwsIDB4YTYzM2ViMmZVTCwgMHhhNDc1NTU3NlVMLAotICAgIDB4YTViNzNm
NDFVTCwgMHhhMGY4MjljNFVMLCAweGExM2E0M2YzVUwsIDB4YTM3Y2ZkYWFVTCwgMHhhMmJlOTc5
ZFVMLAotICAgIDB4YjVjNDczZDBVTCwgMHhiNDA2MTllN1VMLCAweGI2NDBhN2JlVUwsIDB4Yjc4
MmNkODlVTCwgMHhiMmNkZGIwY1VMLAotICAgIDB4YjMwZmIxM2JVTCwgMHhiMTQ5MGY2MlVMLCAw
eGIwOGI2NTU1VUwsIDB4YmJkNzIyNjhVTCwgMHhiYTE1NDg1ZlVMLAotICAgIDB4Yjg1M2Y2MDZV
TCwgMHhiOTkxOWMzMVVMLCAweGJjZGU4YWI0VUwsIDB4YmQxY2UwODNVTCwgMHhiZjVhNWVkYVVM
LAotICAgIDB4YmU5ODM0ZWRVTAotICB9LAotICB7Ci0gICAgMHgwMDAwMDAwMFVMLCAweGI4YmM2
NzY1VUwsIDB4YWEwOWM4OGJVTCwgMHgxMmI1YWZlZVVMLCAweDhmNjI5NzU3VUwsCi0gICAgMHgz
N2RlZjAzMlVMLCAweDI1NmI1ZmRjVUwsIDB4OWRkNzM4YjlVTCwgMHhjNWI0MjhlZlVMLCAweDdk
MDg0ZjhhVUwsCi0gICAgMHg2ZmJkZTA2NFVMLCAweGQ3MDE4NzAxVUwsIDB4NGFkNmJmYjhVTCwg
MHhmMjZhZDhkZFVMLCAweGUwZGY3NzMzVUwsCi0gICAgMHg1ODYzMTA1NlVMLCAweDUwMTk1Nzlm
VUwsIDB4ZThhNTMwZmFVTCwgMHhmYTEwOWYxNFVMLCAweDQyYWNmODcxVUwsCi0gICAgMHhkZjdi
YzBjOFVMLCAweDY3YzdhN2FkVUwsIDB4NzU3MjA4NDNVTCwgMHhjZGNlNmYyNlVMLCAweDk1YWQ3
ZjcwVUwsCi0gICAgMHgyZDExMTgxNVVMLCAweDNmYTRiN2ZiVUwsIDB4ODcxOGQwOWVVTCwgMHgx
YWNmZTgyN1VMLCAweGEyNzM4ZjQyVUwsCi0gICAgMHhiMGM2MjBhY1VMLCAweDA4N2E0N2M5VUws
IDB4YTAzMmFmM2VVTCwgMHgxODhlYzg1YlVMLCAweDBhM2I2N2I1VUwsCi0gICAgMHhiMjg3MDBk
MFVMLCAweDJmNTAzODY5VUwsIDB4OTdlYzVmMGNVTCwgMHg4NTU5ZjBlMlVMLCAweDNkZTU5Nzg3
VUwsCi0gICAgMHg2NTg2ODdkMVVMLCAweGRkM2FlMGI0VUwsIDB4Y2Y4ZjRmNWFVTCwgMHg3NzMz
MjgzZlVMLCAweGVhZTQxMDg2VUwsCi0gICAgMHg1MjU4NzdlM1VMLCAweDQwZWRkODBkVUwsIDB4
Zjg1MWJmNjhVTCwgMHhmMDJiZjhhMVVMLCAweDQ4OTc5ZmM0VUwsCi0gICAgMHg1YTIyMzAyYVVM
LCAweGUyOWU1NzRmVUwsIDB4N2Y0OTZmZjZVTCwgMHhjN2Y1MDg5M1VMLCAweGQ1NDBhNzdkVUws
Ci0gICAgMHg2ZGZjYzAxOFVMLCAweDM1OWZkMDRlVUwsIDB4OGQyM2I3MmJVTCwgMHg5Zjk2MThj
NVVMLCAweDI3MmE3ZmEwVUwsCi0gICAgMHhiYWZkNDcxOVVMLCAweDAyNDEyMDdjVUwsIDB4MTBm
NDhmOTJVTCwgMHhhODQ4ZThmN1VMLCAweDliMTQ1ODNkVUwsCi0gICAgMHgyM2E4M2Y1OFVMLCAw
eDMxMWQ5MGI2VUwsIDB4ODlhMWY3ZDNVTCwgMHgxNDc2Y2Y2YVVMLCAweGFjY2FhODBmVUwsCi0g
ICAgMHhiZTdmMDdlMVVMLCAweDA2YzM2MDg0VUwsIDB4NWVhMDcwZDJVTCwgMHhlNjFjMTdiN1VM
LCAweGY0YTliODU5VUwsCi0gICAgMHg0YzE1ZGYzY1VMLCAweGQxYzJlNzg1VUwsIDB4Njk3ZTgw
ZTBVTCwgMHg3YmNiMmYwZVVMLCAweGMzNzc0ODZiVUwsCi0gICAgMHhjYjBkMGZhMlVMLCAweDcz
YjE2OGM3VUwsIDB4NjEwNGM3MjlVTCwgMHhkOWI4YTA0Y1VMLCAweDQ0NmY5OGY1VUwsCi0gICAg
MHhmY2QzZmY5MFVMLCAweGVlNjY1MDdlVUwsIDB4NTZkYTM3MWJVTCwgMHgwZWI5Mjc0ZFVMLCAw
eGI2MDU0MDI4VUwsCi0gICAgMHhhNGIwZWZjNlVMLCAweDFjMGM4OGEzVUwsIDB4ODFkYmIwMWFV
TCwgMHgzOTY3ZDc3ZlVMLCAweDJiZDI3ODkxVUwsCi0gICAgMHg5MzZlMWZmNFVMLCAweDNiMjZm
NzAzVUwsIDB4ODM5YTkwNjZVTCwgMHg5MTJmM2Y4OFVMLCAweDI5OTM1OGVkVUwsCi0gICAgMHhi
NDQ0NjA1NFVMLCAweDBjZjgwNzMxVUwsIDB4MWU0ZGE4ZGZVTCwgMHhhNmYxY2ZiYVVMLCAweGZl
OTJkZmVjVUwsCi0gICAgMHg0NjJlYjg4OVVMLCAweDU0OWIxNzY3VUwsIDB4ZWMyNzcwMDJVTCwg
MHg3MWYwNDhiYlVMLCAweGM5NGMyZmRlVUwsCi0gICAgMHhkYmY5ODAzMFVMLCAweDYzNDVlNzU1
VUwsIDB4NmIzZmEwOWNVTCwgMHhkMzgzYzdmOVVMLCAweGMxMzY2ODE3VUwsCi0gICAgMHg3OThh
MGY3MlVMLCAweGU0NWQzN2NiVUwsIDB4NWNlMTUwYWVVTCwgMHg0ZTU0ZmY0MFVMLCAweGY2ZTg5
ODI1VUwsCi0gICAgMHhhZThiODg3M1VMLCAweDE2MzdlZjE2VUwsIDB4MDQ4MjQwZjhVTCwgMHhi
YzNlMjc5ZFVMLCAweDIxZTkxZjI0VUwsCi0gICAgMHg5OTU1Nzg0MVVMLCAweDhiZTBkN2FmVUws
IDB4MzM1Y2IwY2FVTCwgMHhlZDU5YjYzYlVMLCAweDU1ZTVkMTVlVUwsCi0gICAgMHg0NzUwN2Vi
MFVMLCAweGZmZWMxOWQ1VUwsIDB4NjIzYjIxNmNVTCwgMHhkYTg3NDYwOVVMLCAweGM4MzJlOWU3
VUwsCi0gICAgMHg3MDhlOGU4MlVMLCAweDI4ZWQ5ZWQ0VUwsIDB4OTA1MWY5YjFVTCwgMHg4MmU0
NTY1ZlVMLCAweDNhNTgzMTNhVUwsCi0gICAgMHhhNzhmMDk4M1VMLCAweDFmMzM2ZWU2VUwsIDB4
MGQ4NmMxMDhVTCwgMHhiNTNhYTY2ZFVMLCAweGJkNDBlMWE0VUwsCi0gICAgMHgwNWZjODZjMVVM
LCAweDE3NDkyOTJmVUwsIDB4YWZmNTRlNGFVTCwgMHgzMjIyNzZmM1VMLCAweDhhOWUxMTk2VUws
Ci0gICAgMHg5ODJiYmU3OFVMLCAweDIwOTdkOTFkVUwsIDB4NzhmNGM5NGJVTCwgMHhjMDQ4YWUy
ZVVMLCAweGQyZmQwMWMwVUwsCi0gICAgMHg2YTQxNjZhNVVMLCAweGY3OTY1ZTFjVUwsIDB4NGYy
YTM5NzlVTCwgMHg1ZDlmOTY5N1VMLCAweGU1MjNmMWYyVUwsCi0gICAgMHg0ZDZiMTkwNVVMLCAw
eGY1ZDc3ZTYwVUwsIDB4ZTc2MmQxOGVVTCwgMHg1ZmRlYjZlYlVMLCAweGMyMDk4ZTUyVUwsCi0g
ICAgMHg3YWI1ZTkzN1VMLCAweDY4MDA0NmQ5VUwsIDB4ZDBiYzIxYmNVTCwgMHg4OGRmMzFlYVVM
LCAweDMwNjM1NjhmVUwsCi0gICAgMHgyMmQ2Zjk2MVVMLCAweDlhNmE5ZTA0VUwsIDB4MDdiZGE2
YmRVTCwgMHhiZjAxYzFkOFVMLCAweGFkYjQ2ZTM2VUwsCi0gICAgMHgxNTA4MDk1M1VMLCAweDFk
NzI0ZTlhVUwsIDB4YTVjZTI5ZmZVTCwgMHhiNzdiODYxMVVMLCAweDBmYzdlMTc0VUwsCi0gICAg
MHg5MjEwZDljZFVMLCAweDJhYWNiZWE4VUwsIDB4MzgxOTExNDZVTCwgMHg4MGE1NzYyM1VMLCAw
eGQ4YzY2Njc1VUwsCi0gICAgMHg2MDdhMDExMFVMLCAweDcyY2ZhZWZlVUwsIDB4Y2E3M2M5OWJV
TCwgMHg1N2E0ZjEyMlVMLCAweGVmMTg5NjQ3VUwsCi0gICAgMHhmZGFkMzlhOVVMLCAweDQ1MTE1
ZWNjVUwsIDB4NzY0ZGVlMDZVTCwgMHhjZWYxODk2M1VMLCAweGRjNDQyNjhkVUwsCi0gICAgMHg2
NGY4NDFlOFVMLCAweGY5MmY3OTUxVUwsIDB4NDE5MzFlMzRVTCwgMHg1MzI2YjFkYVVMLCAweGVi
OWFkNmJmVUwsCi0gICAgMHhiM2Y5YzZlOVVMLCAweDBiNDVhMThjVUwsIDB4MTlmMDBlNjJVTCwg
MHhhMTRjNjkwN1VMLCAweDNjOWI1MWJlVUwsCi0gICAgMHg4NDI3MzZkYlVMLCAweDk2OTI5OTM1
VUwsIDB4MmUyZWZlNTBVTCwgMHgyNjU0Yjk5OVVMLCAweDllZThkZWZjVUwsCi0gICAgMHg4YzVk
NzExMlVMLCAweDM0ZTExNjc3VUwsIDB4YTkzNjJlY2VVTCwgMHgxMThhNDlhYlVMLCAweDAzM2Zl
NjQ1VUwsCi0gICAgMHhiYjgzODEyMFVMLCAweGUzZTA5MTc2VUwsIDB4NWI1Y2Y2MTNVTCwgMHg0
OWU5NTlmZFVMLCAweGYxNTUzZTk4VUwsCi0gICAgMHg2YzgyMDYyMVVMLCAweGQ0M2U2MTQ0VUws
IDB4YzY4YmNlYWFVTCwgMHg3ZTM3YTljZlVMLCAweGQ2N2Y0MTM4VUwsCi0gICAgMHg2ZWMzMjY1
ZFVMLCAweDdjNzY4OWIzVUwsIDB4YzRjYWVlZDZVTCwgMHg1OTFkZDY2ZlVMLCAweGUxYTFiMTBh
VUwsCi0gICAgMHhmMzE0MWVlNFVMLCAweDRiYTg3OTgxVUwsIDB4MTNjYjY5ZDdVTCwgMHhhYjc3
MGViMlVMLCAweGI5YzJhMTVjVUwsCi0gICAgMHgwMTdlYzYzOVVMLCAweDljYTlmZTgwVUwsIDB4
MjQxNTk5ZTVVTCwgMHgzNmEwMzYwYlVMLCAweDhlMWM1MTZlVUwsCi0gICAgMHg4NjY2MTZhN1VM
LCAweDNlZGE3MWMyVUwsIDB4MmM2ZmRlMmNVTCwgMHg5NGQzYjk0OVVMLCAweDA5MDQ4MWYwVUws
Ci0gICAgMHhiMWI4ZTY5NVVMLCAweGEzMGQ0OTdiVUwsIDB4MWJiMTJlMWVVTCwgMHg0M2QyM2U0
OFVMLCAweGZiNmU1OTJkVUwsCi0gICAgMHhlOWRiZjZjM1VMLCAweDUxNjc5MWE2VUwsIDB4Y2Ni
MGE5MWZVTCwgMHg3NDBjY2U3YVVMLCAweDY2Yjk2MTk0VUwsCi0gICAgMHhkZTA1MDZmMVVMCi0g
IH0sCi0gIHsKLSAgICAweDAwMDAwMDAwVUwsIDB4OTYzMDA3NzdVTCwgMHgyYzYxMGVlZVVMLCAw
eGJhNTEwOTk5VUwsIDB4MTljNDZkMDdVTCwKLSAgICAweDhmZjQ2YTcwVUwsIDB4MzVhNTYzZTlV
TCwgMHhhMzk1NjQ5ZVVMLCAweDMyODhkYjBlVUwsIDB4YTRiOGRjNzlVTCwKLSAgICAweDFlZTlk
NWUwVUwsIDB4ODhkOWQyOTdVTCwgMHgyYjRjYjYwOVVMLCAweGJkN2NiMTdlVUwsIDB4MDcyZGI4
ZTdVTCwKLSAgICAweDkxMWRiZjkwVUwsIDB4NjQxMGI3MWRVTCwgMHhmMjIwYjA2YVVMLCAweDQ4
NzFiOWYzVUwsIDB4ZGU0MWJlODRVTCwKLSAgICAweDdkZDRkYTFhVUwsIDB4ZWJlNGRkNmRVTCwg
MHg1MWI1ZDRmNFVMLCAweGM3ODVkMzgzVUwsIDB4NTY5ODZjMTNVTCwKLSAgICAweGMwYTg2YjY0
VUwsIDB4N2FmOTYyZmRVTCwgMHhlY2M5NjU4YVVMLCAweDRmNWMwMTE0VUwsIDB4ZDk2YzA2NjNV
TCwKLSAgICAweDYzM2QwZmZhVUwsIDB4ZjUwZDA4OGRVTCwgMHhjODIwNmUzYlVMLCAweDVlMTA2
OTRjVUwsIDB4ZTQ0MTYwZDVVTCwKLSAgICAweDcyNzE2N2EyVUwsIDB4ZDFlNDAzM2NVTCwgMHg0
N2Q0MDQ0YlVMLCAweGZkODUwZGQyVUwsIDB4NmJiNTBhYTVVTCwKLSAgICAweGZhYThiNTM1VUws
IDB4NmM5OGIyNDJVTCwgMHhkNmM5YmJkYlVMLCAweDQwZjliY2FjVUwsIDB4ZTM2Y2Q4MzJVTCwK
LSAgICAweDc1NWNkZjQ1VUwsIDB4Y2YwZGQ2ZGNVTCwgMHg1OTNkZDFhYlVMLCAweGFjMzBkOTI2
VUwsIDB4M2EwMGRlNTFVTCwKLSAgICAweDgwNTFkN2M4VUwsIDB4MTY2MWQwYmZVTCwgMHhiNWY0
YjQyMVVMLCAweDIzYzRiMzU2VUwsIDB4OTk5NWJhY2ZVTCwKLSAgICAweDBmYTViZGI4VUwsIDB4
OWViODAyMjhVTCwgMHgwODg4MDU1ZlVMLCAweGIyZDkwY2M2VUwsIDB4MjRlOTBiYjFVTCwKLSAg
ICAweDg3N2M2ZjJmVUwsIDB4MTE0YzY4NThVTCwgMHhhYjFkNjFjMVVMLCAweDNkMmQ2NmI2VUws
IDB4OTA0MWRjNzZVTCwKLSAgICAweDA2NzFkYjAxVUwsIDB4YmMyMGQyOThVTCwgMHgyYTEwZDVl
ZlVMLCAweDg5ODViMTcxVUwsIDB4MWZiNWI2MDZVTCwKLSAgICAweGE1ZTRiZjlmVUwsIDB4MzNk
NGI4ZThVTCwgMHhhMmM5MDc3OFVMLCAweDM0ZjkwMDBmVUwsIDB4OGVhODA5OTZVTCwKLSAgICAw
eDE4OTgwZWUxVUwsIDB4YmIwZDZhN2ZVTCwgMHgyZDNkNmQwOFVMLCAweDk3NmM2NDkxVUwsIDB4
MDE1YzYzZTZVTCwKLSAgICAweGY0NTE2YjZiVUwsIDB4NjI2MTZjMWNVTCwgMHhkODMwNjU4NVVM
LCAweDRlMDA2MmYyVUwsIDB4ZWQ5NTA2NmNVTCwKLSAgICAweDdiYTUwMTFiVUwsIDB4YzFmNDA4
ODJVTCwgMHg1N2M0MGZmNVVMLCAweGM2ZDliMDY1VUwsIDB4NTBlOWI3MTJVTCwKLSAgICAweGVh
YjhiZThiVUwsIDB4N2M4OGI5ZmNVTCwgMHhkZjFkZGQ2MlVMLCAweDQ5MmRkYTE1VUwsIDB4ZjM3
Y2QzOGNVTCwKLSAgICAweDY1NGNkNGZiVUwsIDB4NTg2MWIyNGRVTCwgMHhjZTUxYjUzYVVMLCAw
eDc0MDBiY2EzVUwsIDB4ZTIzMGJiZDRVTCwKLSAgICAweDQxYTVkZjRhVUwsIDB4ZDc5NWQ4M2RV
TCwgMHg2ZGM0ZDFhNFVMLCAweGZiZjRkNmQzVUwsIDB4NmFlOTY5NDNVTCwKLSAgICAweGZjZDk2
ZTM0VUwsIDB4NDY4ODY3YWRVTCwgMHhkMGI4NjBkYVVMLCAweDczMmQwNDQ0VUwsIDB4ZTUxZDAz
MzNVTCwKLSAgICAweDVmNGMwYWFhVUwsIDB4Yzk3YzBkZGRVTCwgMHgzYzcxMDU1MFVMLCAweGFh
NDEwMjI3VUwsIDB4MTAxMDBiYmVVTCwKLSAgICAweDg2MjAwY2M5VUwsIDB4MjViNTY4NTdVTCwg
MHhiMzg1NmYyMFVMLCAweDA5ZDQ2NmI5VUwsIDB4OWZlNDYxY2VVTCwKLSAgICAweDBlZjlkZTVl
VUwsIDB4OThjOWQ5MjlVTCwgMHgyMjk4ZDBiMFVMLCAweGI0YThkN2M3VUwsIDB4MTczZGIzNTlV
TCwKLSAgICAweDgxMGRiNDJlVUwsIDB4M2I1Y2JkYjdVTCwgMHhhZDZjYmFjMFVMLCAweDIwODNi
OGVkVUwsIDB4YjZiM2JmOWFVTCwKLSAgICAweDBjZTJiNjAzVUwsIDB4OWFkMmIxNzRVTCwgMHgz
OTQ3ZDVlYVVMLCAweGFmNzdkMjlkVUwsIDB4MTUyNmRiMDRVTCwKLSAgICAweDgzMTZkYzczVUws
IDB4MTIwYjYzZTNVTCwgMHg4NDNiNjQ5NFVMLCAweDNlNmE2ZDBkVUwsIDB4YTg1YTZhN2FVTCwK
LSAgICAweDBiY2YwZWU0VUwsIDB4OWRmZjA5OTNVTCwgMHgyN2FlMDAwYVVMLCAweGIxOWUwNzdk
VUwsIDB4NDQ5MzBmZjBVTCwKLSAgICAweGQyYTMwODg3VUwsIDB4NjhmMjAxMWVVTCwgMHhmZWMy
MDY2OVVMLCAweDVkNTc2MmY3VUwsIDB4Y2I2NzY1ODBVTCwKLSAgICAweDcxMzY2YzE5VUwsIDB4
ZTcwNjZiNmVVTCwgMHg3NjFiZDRmZVVMLCAweGUwMmJkMzg5VUwsIDB4NWE3YWRhMTBVTCwKLSAg
ICAweGNjNGFkZDY3VUwsIDB4NmZkZmI5ZjlVTCwgMHhmOWVmYmU4ZVVMLCAweDQzYmViNzE3VUws
IDB4ZDU4ZWIwNjBVTCwKLSAgICAweGU4YTNkNmQ2VUwsIDB4N2U5M2QxYTFVTCwgMHhjNGMyZDgz
OFVMLCAweDUyZjJkZjRmVUwsIDB4ZjE2N2JiZDFVTCwKLSAgICAweDY3NTdiY2E2VUwsIDB4ZGQw
NmI1M2ZVTCwgMHg0YjM2YjI0OFVMLCAweGRhMmIwZGQ4VUwsIDB4NGMxYjBhYWZVTCwKLSAgICAw
eGY2NGEwMzM2VUwsIDB4NjA3YTA0NDFVTCwgMHhjM2VmNjBkZlVMLCAweDU1ZGY2N2E4VUwsIDB4
ZWY4ZTZlMzFVTCwKLSAgICAweDc5YmU2OTQ2VUwsIDB4OGNiMzYxY2JVTCwgMHgxYTgzNjZiY1VM
LCAweGEwZDI2ZjI1VUwsIDB4MzZlMjY4NTJVTCwKLSAgICAweDk1NzcwY2NjVUwsIDB4MDM0NzBi
YmJVTCwgMHhiOTE2MDIyMlVMLCAweDJmMjYwNTU1VUwsIDB4YmUzYmJhYzVVTCwKLSAgICAweDI4
MGJiZGIyVUwsIDB4OTI1YWI0MmJVTCwgMHgwNDZhYjM1Y1VMLCAweGE3ZmZkN2MyVUwsIDB4MzFj
ZmQwYjVVTCwKLSAgICAweDhiOWVkOTJjVUwsIDB4MWRhZWRlNWJVTCwgMHhiMGMyNjQ5YlVMLCAw
eDI2ZjI2M2VjVUwsIDB4OWNhMzZhNzVVTCwKLSAgICAweDBhOTM2ZDAyVUwsIDB4YTkwNjA5OWNV
TCwgMHgzZjM2MGVlYlVMLCAweDg1NjcwNzcyVUwsIDB4MTM1NzAwMDVVTCwKLSAgICAweDgyNGFi
Zjk1VUwsIDB4MTQ3YWI4ZTJVTCwgMHhhZTJiYjE3YlVMLCAweDM4MWJiNjBjVUwsIDB4OWI4ZWQy
OTJVTCwKLSAgICAweDBkYmVkNWU1VUwsIDB4YjdlZmRjN2NVTCwgMHgyMWRmZGIwYlVMLCAweGQ0
ZDJkMzg2VUwsIDB4NDJlMmQ0ZjFVTCwKLSAgICAweGY4YjNkZDY4VUwsIDB4NmU4M2RhMWZVTCwg
MHhjZDE2YmU4MVVMLCAweDViMjZiOWY2VUwsIDB4ZTE3N2IwNmZVTCwKLSAgICAweDc3NDdiNzE4
VUwsIDB4ZTY1YTA4ODhVTCwgMHg3MDZhMGZmZlVMLCAweGNhM2IwNjY2VUwsIDB4NWMwYjAxMTFV
TCwKLSAgICAweGZmOWU2NThmVUwsIDB4NjlhZTYyZjhVTCwgMHhkM2ZmNmI2MVVMLCAweDQ1Y2Y2
YzE2VUwsIDB4NzhlMjBhYTBVTCwKLSAgICAweGVlZDIwZGQ3VUwsIDB4NTQ4MzA0NGVVTCwgMHhj
MmIzMDMzOVVMLCAweDYxMjY2N2E3VUwsIDB4ZjcxNjYwZDBVTCwKLSAgICAweDRkNDc2OTQ5VUws
IDB4ZGI3NzZlM2VVTCwgMHg0YTZhZDFhZVVMLCAweGRjNWFkNmQ5VUwsIDB4NjYwYmRmNDBVTCwK
LSAgICAweGYwM2JkODM3VUwsIDB4NTNhZWJjYTlVTCwgMHhjNTllYmJkZVVMLCAweDdmY2ZiMjQ3
VUwsIDB4ZTlmZmI1MzBVTCwKLSAgICAweDFjZjJiZGJkVUwsIDB4OGFjMmJhY2FVTCwgMHgzMDkz
YjM1M1VMLCAweGE2YTNiNDI0VUwsIDB4MDUzNmQwYmFVTCwKLSAgICAweDkzMDZkN2NkVUwsIDB4
Mjk1N2RlNTRVTCwgMHhiZjY3ZDkyM1VMLCAweDJlN2E2NmIzVUwsIDB4Yjg0YTYxYzRVTCwKLSAg
ICAweDAyMWI2ODVkVUwsIDB4OTQyYjZmMmFVTCwgMHgzN2JlMGJiNFVMLCAweGExOGUwY2MzVUws
IDB4MWJkZjA1NWFVTCwKLSAgICAweDhkZWYwMjJkVUwKLSAgfSwKLSAgewotICAgIDB4MDAwMDAw
MDBVTCwgMHg0MTMxMWIxOVVMLCAweDgyNjIzNjMyVUwsIDB4YzM1MzJkMmJVTCwgMHgwNGM1NmM2
NFVMLAotICAgIDB4NDVmNDc3N2RVTCwgMHg4NmE3NWE1NlVMLCAweGM3OTY0MTRmVUwsIDB4MDg4
YWQ5YzhVTCwgMHg0OWJiYzJkMVVMLAotICAgIDB4OGFlOGVmZmFVTCwgMHhjYmQ5ZjRlM1VMLCAw
eDBjNGZiNWFjVUwsIDB4NGQ3ZWFlYjVVTCwgMHg4ZTJkODM5ZVVMLAotICAgIDB4Y2YxYzk4ODdV
TCwgMHg1MTEyYzI0YVVMLCAweDEwMjNkOTUzVUwsIDB4ZDM3MGY0NzhVTCwgMHg5MjQxZWY2MVVM
LAotICAgIDB4NTVkN2FlMmVVTCwgMHgxNGU2YjUzN1VMLCAweGQ3YjU5ODFjVUwsIDB4OTY4NDgz
MDVVTCwgMHg1OTk4MWI4MlVMLAotICAgIDB4MThhOTAwOWJVTCwgMHhkYmZhMmRiMFVMLCAweDlh
Y2IzNmE5VUwsIDB4NWQ1ZDc3ZTZVTCwgMHgxYzZjNmNmZlVMLAotICAgIDB4ZGYzZjQxZDRVTCwg
MHg5ZTBlNWFjZFVMLCAweGEyMjQ4NDk1VUwsIDB4ZTMxNTlmOGNVTCwgMHgyMDQ2YjJhN1VMLAot
ICAgIDB4NjE3N2E5YmVVTCwgMHhhNmUxZThmMVVMLCAweGU3ZDBmM2U4VUwsIDB4MjQ4M2RlYzNV
TCwgMHg2NWIyYzVkYVVMLAotICAgIDB4YWFhZTVkNWRVTCwgMHhlYjlmNDY0NFVMLCAweDI4Y2M2
YjZmVUwsIDB4NjlmZDcwNzZVTCwgMHhhZTZiMzEzOVVMLAotICAgIDB4ZWY1YTJhMjBVTCwgMHgy
YzA5MDcwYlVMLCAweDZkMzgxYzEyVUwsIDB4ZjMzNjQ2ZGZVTCwgMHhiMjA3NWRjNlVMLAotICAg
IDB4NzE1NDcwZWRVTCwgMHgzMDY1NmJmNFVMLCAweGY3ZjMyYWJiVUwsIDB4YjZjMjMxYTJVTCwg
MHg3NTkxMWM4OVVMLAotICAgIDB4MzRhMDA3OTBVTCwgMHhmYmJjOWYxN1VMLCAweGJhOGQ4NDBl
VUwsIDB4NzlkZWE5MjVVTCwgMHgzOGVmYjIzY1VMLAotICAgIDB4ZmY3OWYzNzNVTCwgMHhiZTQ4
ZTg2YVVMLCAweDdkMWJjNTQxVUwsIDB4M2MyYWRlNThVTCwgMHgwNTRmNzlmMFVMLAotICAgIDB4
NDQ3ZTYyZTlVTCwgMHg4NzJkNGZjMlVMLCAweGM2MWM1NGRiVUwsIDB4MDE4YTE1OTRVTCwgMHg0
MGJiMGU4ZFVMLAotICAgIDB4ODNlODIzYTZVTCwgMHhjMmQ5MzhiZlVMLCAweDBkYzVhMDM4VUws
IDB4NGNmNGJiMjFVTCwgMHg4ZmE3OTYwYVVMLAotICAgIDB4Y2U5NjhkMTNVTCwgMHgwOTAwY2M1
Y1VMLCAweDQ4MzFkNzQ1VUwsIDB4OGI2MmZhNmVVTCwgMHhjYTUzZTE3N1VMLAotICAgIDB4NTQ1
ZGJiYmFVTCwgMHgxNTZjYTBhM1VMLCAweGQ2M2Y4ZDg4VUwsIDB4OTcwZTk2OTFVTCwgMHg1MDk4
ZDdkZVVMLAotICAgIDB4MTFhOWNjYzdVTCwgMHhkMmZhZTFlY1VMLCAweDkzY2JmYWY1VUwsIDB4
NWNkNzYyNzJVTCwgMHgxZGU2Nzk2YlVMLAotICAgIDB4ZGViNTU0NDBVTCwgMHg5Zjg0NGY1OVVM
LCAweDU4MTIwZTE2VUwsIDB4MTkyMzE1MGZVTCwgMHhkYTcwMzgyNFVMLAotICAgIDB4OWI0MTIz
M2RVTCwgMHhhNzZiZmQ2NVVMLCAweGU2NWFlNjdjVUwsIDB4MjUwOWNiNTdVTCwgMHg2NDM4ZDA0
ZVVMLAotICAgIDB4YTNhZTkxMDFVTCwgMHhlMjlmOGExOFVMLCAweDIxY2NhNzMzVUwsIDB4NjBm
ZGJjMmFVTCwgMHhhZmUxMjRhZFVMLAotICAgIDB4ZWVkMDNmYjRVTCwgMHgyZDgzMTI5ZlVMLCAw
eDZjYjIwOTg2VUwsIDB4YWIyNDQ4YzlVTCwgMHhlYTE1NTNkMFVMLAotICAgIDB4Mjk0NjdlZmJV
TCwgMHg2ODc3NjVlMlVMLCAweGY2NzkzZjJmVUwsIDB4Yjc0ODI0MzZVTCwgMHg3NDFiMDkxZFVM
LAotICAgIDB4MzUyYTEyMDRVTCwgMHhmMmJjNTM0YlVMLCAweGIzOGQ0ODUyVUwsIDB4NzBkZTY1
NzlVTCwgMHgzMWVmN2U2MFVMLAotICAgIDB4ZmVmM2U2ZTdVTCwgMHhiZmMyZmRmZVVMLCAweDdj
OTFkMGQ1VUwsIDB4M2RhMGNiY2NVTCwgMHhmYTM2OGE4M1VMLAotICAgIDB4YmIwNzkxOWFVTCwg
MHg3ODU0YmNiMVVMLCAweDM5NjVhN2E4VUwsIDB4NGI5ODgzM2JVTCwgMHgwYWE5OTgyMlVMLAot
ICAgIDB4YzlmYWI1MDlVTCwgMHg4OGNiYWUxMFVMLCAweDRmNWRlZjVmVUwsIDB4MGU2Y2Y0NDZV
TCwgMHhjZDNmZDk2ZFVMLAotICAgIDB4OGMwZWMyNzRVTCwgMHg0MzEyNWFmM1VMLCAweDAyMjM0
MWVhVUwsIDB4YzE3MDZjYzFVTCwgMHg4MDQxNzdkOFVMLAotICAgIDB4NDdkNzM2OTdVTCwgMHgw
NmU2MmQ4ZVVMLCAweGM1YjUwMGE1VUwsIDB4ODQ4NDFiYmNVTCwgMHgxYThhNDE3MVVMLAotICAg
IDB4NWJiYjVhNjhVTCwgMHg5OGU4Nzc0M1VMLCAweGQ5ZDk2YzVhVUwsIDB4MWU0ZjJkMTVVTCwg
MHg1ZjdlMzYwY1VMLAotICAgIDB4OWMyZDFiMjdVTCwgMHhkZDFjMDAzZVVMLCAweDEyMDA5OGI5
VUwsIDB4NTMzMTgzYTBVTCwgMHg5MDYyYWU4YlVMLAotICAgIDB4ZDE1M2I1OTJVTCwgMHgxNmM1
ZjRkZFVMLCAweDU3ZjRlZmM0VUwsIDB4OTRhN2MyZWZVTCwgMHhkNTk2ZDlmNlVMLAotICAgIDB4
ZTliYzA3YWVVTCwgMHhhODhkMWNiN1VMLCAweDZiZGUzMTljVUwsIDB4MmFlZjJhODVVTCwgMHhl
ZDc5NmJjYVVMLAotICAgIDB4YWM0ODcwZDNVTCwgMHg2ZjFiNWRmOFVMLCAweDJlMmE0NmUxVUws
IDB4ZTEzNmRlNjZVTCwgMHhhMDA3YzU3ZlVMLAotICAgIDB4NjM1NGU4NTRVTCwgMHgyMjY1ZjM0
ZFVMLCAweGU1ZjNiMjAyVUwsIDB4YTRjMmE5MWJVTCwgMHg2NzkxODQzMFVMLAotICAgIDB4MjZh
MDlmMjlVTCwgMHhiOGFlYzVlNFVMLCAweGY5OWZkZWZkVUwsIDB4M2FjY2YzZDZVTCwgMHg3YmZk
ZThjZlVMLAotICAgIDB4YmM2YmE5ODBVTCwgMHhmZDVhYjI5OVVMLCAweDNlMDk5ZmIyVUwsIDB4
N2YzODg0YWJVTCwgMHhiMDI0MWMyY1VMLAotICAgIDB4ZjExNTA3MzVVTCwgMHgzMjQ2MmExZVVM
LCAweDczNzczMTA3VUwsIDB4YjRlMTcwNDhVTCwgMHhmNWQwNmI1MVVMLAotICAgIDB4MzY4MzQ2
N2FVTCwgMHg3N2IyNWQ2M1VMLCAweDRlZDdmYWNiVUwsIDB4MGZlNmUxZDJVTCwgMHhjY2I1Y2Nm
OVVMLAotICAgIDB4OGQ4NGQ3ZTBVTCwgMHg0YTEyOTZhZlVMLCAweDBiMjM4ZGI2VUwsIDB4Yzg3
MGEwOWRVTCwgMHg4OTQxYmI4NFVMLAotICAgIDB4NDY1ZDIzMDNVTCwgMHgwNzZjMzgxYVVMLCAw
eGM0M2YxNTMxVUwsIDB4ODUwZTBlMjhVTCwgMHg0Mjk4NGY2N1VMLAotICAgIDB4MDNhOTU0N2VV
TCwgMHhjMGZhNzk1NVVMLCAweDgxY2I2MjRjVUwsIDB4MWZjNTM4ODFVTCwgMHg1ZWY0MjM5OFVM
LAotICAgIDB4OWRhNzBlYjNVTCwgMHhkYzk2MTVhYVVMLCAweDFiMDA1NGU1VUwsIDB4NWEzMTRm
ZmNVTCwgMHg5OTYyNjJkN1VMLAotICAgIDB4ZDg1Mzc5Y2VVTCwgMHgxNzRmZTE0OVVMLCAweDU2
N2VmYTUwVUwsIDB4OTUyZGQ3N2JVTCwgMHhkNDFjY2M2MlVMLAotICAgIDB4MTM4YThkMmRVTCwg
MHg1MmJiOTYzNFVMLCAweDkxZThiYjFmVUwsIDB4ZDBkOWEwMDZVTCwgMHhlY2YzN2U1ZVVMLAot
ICAgIDB4YWRjMjY1NDdVTCwgMHg2ZTkxNDg2Y1VMLCAweDJmYTA1Mzc1VUwsIDB4ZTgzNjEyM2FV
TCwgMHhhOTA3MDkyM1VMLAotICAgIDB4NmE1NDI0MDhVTCwgMHgyYjY1M2YxMVVMLCAweGU0Nzlh
Nzk2VUwsIDB4YTU0OGJjOGZVTCwgMHg2NjFiOTFhNFVMLAotICAgIDB4MjcyYThhYmRVTCwgMHhl
MGJjY2JmMlVMLCAweGExOGRkMGViVUwsIDB4NjJkZWZkYzBVTCwgMHgyM2VmZTZkOVVMLAotICAg
IDB4YmRlMWJjMTRVTCwgMHhmY2QwYTcwZFVMLCAweDNmODM4YTI2VUwsIDB4N2ViMjkxM2ZVTCwg
MHhiOTI0ZDA3MFVMLAotICAgIDB4ZjgxNWNiNjlVTCwgMHgzYjQ2ZTY0MlVMLCAweDdhNzdmZDVi
VUwsIDB4YjU2YjY1ZGNVTCwgMHhmNDVhN2VjNVVMLAotICAgIDB4MzcwOTUzZWVVTCwgMHg3NjM4
NDhmN1VMLCAweGIxYWUwOWI4VUwsIDB4ZjA5ZjEyYTFVTCwgMHgzM2NjM2Y4YVVMLAotICAgIDB4
NzJmZDI0OTNVTAotICB9LAotICB7Ci0gICAgMHgwMDAwMDAwMFVMLCAweDM3NmFjMjAxVUwsIDB4
NmVkNDg0MDNVTCwgMHg1OWJlNDYwMlVMLCAweGRjYTgwOTA3VUwsCi0gICAgMHhlYmMyY2IwNlVM
LCAweGIyN2M4ZDA0VUwsIDB4ODUxNjRmMDVVTCwgMHhiODUxMTMwZVVMLCAweDhmM2JkMTBmVUws
Ci0gICAgMHhkNjg1OTcwZFVMLCAweGUxZWY1NTBjVUwsIDB4NjRmOTFhMDlVTCwgMHg1MzkzZDgw
OFVMLCAweDBhMmQ5ZTBhVUwsCi0gICAgMHgzZDQ3NWMwYlVMLCAweDcwYTMyNjFjVUwsIDB4NDdj
OWU0MWRVTCwgMHgxZTc3YTIxZlVMLCAweDI5MWQ2MDFlVUwsCi0gICAgMHhhYzBiMmYxYlVMLCAw
eDliNjFlZDFhVUwsIDB4YzJkZmFiMThVTCwgMHhmNWI1NjkxOVVMLCAweGM4ZjIzNTEyVUwsCi0g
ICAgMHhmZjk4ZjcxM1VMLCAweGE2MjZiMTExVUwsIDB4OTE0YzczMTBVTCwgMHgxNDVhM2MxNVVM
LCAweDIzMzBmZTE0VUwsCi0gICAgMHg3YThlYjgxNlVMLCAweDRkZTQ3YTE3VUwsIDB4ZTA0NjRk
MzhVTCwgMHhkNzJjOGYzOVVMLCAweDhlOTJjOTNiVUwsCi0gICAgMHhiOWY4MGIzYVVMLCAweDNj
ZWU0NDNmVUwsIDB4MGI4NDg2M2VVTCwgMHg1MjNhYzAzY1VMLCAweDY1NTAwMjNkVUwsCi0gICAg
MHg1ODE3NWUzNlVMLCAweDZmN2Q5YzM3VUwsIDB4MzZjM2RhMzVVTCwgMHgwMWE5MTgzNFVMLCAw
eDg0YmY1NzMxVUwsCi0gICAgMHhiM2Q1OTUzMFVMLCAweGVhNmJkMzMyVUwsIDB4ZGQwMTExMzNV
TCwgMHg5MGU1NmIyNFVMLCAweGE3OGZhOTI1VUwsCi0gICAgMHhmZTMxZWYyN1VMLCAweGM5NWIy
ZDI2VUwsIDB4NGM0ZDYyMjNVTCwgMHg3YjI3YTAyMlVMLCAweDIyOTllNjIwVUwsCi0gICAgMHgx
NWYzMjQyMVVMLCAweDI4YjQ3ODJhVUwsIDB4MWZkZWJhMmJVTCwgMHg0NjYwZmMyOVVMLCAweDcx
MGEzZTI4VUwsCi0gICAgMHhmNDFjNzEyZFVMLCAweGMzNzZiMzJjVUwsIDB4OWFjOGY1MmVVTCwg
MHhhZGEyMzcyZlVMLCAweGMwOGQ5YTcwVUwsCi0gICAgMHhmN2U3NTg3MVVMLCAweGFlNTkxZTcz
VUwsIDB4OTkzM2RjNzJVTCwgMHgxYzI1OTM3N1VMLCAweDJiNGY1MTc2VUwsCi0gICAgMHg3MmYx
MTc3NFVMLCAweDQ1OWJkNTc1VUwsIDB4NzhkYzg5N2VVTCwgMHg0ZmI2NGI3ZlVMLCAweDE2MDgw
ZDdkVUwsCi0gICAgMHgyMTYyY2Y3Y1VMLCAweGE0NzQ4MDc5VUwsIDB4OTMxZTQyNzhVTCwgMHhj
YWEwMDQ3YVVMLCAweGZkY2FjNjdiVUwsCi0gICAgMHhiMDJlYmM2Y1VMLCAweDg3NDQ3ZTZkVUws
IDB4ZGVmYTM4NmZVTCwgMHhlOTkwZmE2ZVVMLCAweDZjODZiNTZiVUwsCi0gICAgMHg1YmVjNzc2
YVVMLCAweDAyNTIzMTY4VUwsIDB4MzUzOGYzNjlVTCwgMHgwODdmYWY2MlVMLCAweDNmMTU2ZDYz
VUwsCi0gICAgMHg2NmFiMmI2MVVMLCAweDUxYzFlOTYwVUwsIDB4ZDRkN2E2NjVVTCwgMHhlM2Jk
NjQ2NFVMLCAweGJhMDMyMjY2VUwsCi0gICAgMHg4ZDY5ZTA2N1VMLCAweDIwY2JkNzQ4VUwsIDB4
MTdhMTE1NDlVTCwgMHg0ZTFmNTM0YlVMLCAweDc5NzU5MTRhVUwsCi0gICAgMHhmYzYzZGU0ZlVM
LCAweGNiMDkxYzRlVUwsIDB4OTJiNzVhNGNVTCwgMHhhNWRkOTg0ZFVMLCAweDk4OWFjNDQ2VUws
Ci0gICAgMHhhZmYwMDY0N1VMLCAweGY2NGU0MDQ1VUwsIDB4YzEyNDgyNDRVTCwgMHg0NDMyY2Q0
MVVMLCAweDczNTgwZjQwVUwsCi0gICAgMHgyYWU2NDk0MlVMLCAweDFkOGM4YjQzVUwsIDB4NTA2
OGYxNTRVTCwgMHg2NzAyMzM1NVVMLCAweDNlYmM3NTU3VUwsCi0gICAgMHgwOWQ2Yjc1NlVMLCAw
eDhjYzBmODUzVUwsIDB4YmJhYTNhNTJVTCwgMHhlMjE0N2M1MFVMLCAweGQ1N2ViZTUxVUwsCi0g
ICAgMHhlODM5ZTI1YVVMLCAweGRmNTMyMDViVUwsIDB4ODZlZDY2NTlVTCwgMHhiMTg3YTQ1OFVM
LCAweDM0OTFlYjVkVUwsCi0gICAgMHgwM2ZiMjk1Y1VMLCAweDVhNDU2ZjVlVUwsIDB4NmQyZmFk
NWZVTCwgMHg4MDFiMzVlMVVMLCAweGI3NzFmN2UwVUwsCi0gICAgMHhlZWNmYjFlMlVMLCAweGQ5
YTU3M2UzVUwsIDB4NWNiMzNjZTZVTCwgMHg2YmQ5ZmVlN1VMLCAweDMyNjdiOGU1VUwsCi0gICAg
MHgwNTBkN2FlNFVMLCAweDM4NGEyNmVmVUwsIDB4MGYyMGU0ZWVVTCwgMHg1NjllYTJlY1VMLCAw
eDYxZjQ2MGVkVUwsCi0gICAgMHhlNGUyMmZlOFVMLCAweGQzODhlZGU5VUwsIDB4OGEzNmFiZWJV
TCwgMHhiZDVjNjllYVVMLCAweGYwYjgxM2ZkVUwsCi0gICAgMHhjN2QyZDFmY1VMLCAweDllNmM5
N2ZlVUwsIDB4YTkwNjU1ZmZVTCwgMHgyYzEwMWFmYVVMLCAweDFiN2FkOGZiVUwsCi0gICAgMHg0
MmM0OWVmOVVMLCAweDc1YWU1Y2Y4VUwsIDB4NDhlOTAwZjNVTCwgMHg3ZjgzYzJmMlVMLCAweDI2
M2Q4NGYwVUwsCi0gICAgMHgxMTU3NDZmMVVMLCAweDk0NDEwOWY0VUwsIDB4YTMyYmNiZjVVTCwg
MHhmYTk1OGRmN1VMLCAweGNkZmY0ZmY2VUwsCi0gICAgMHg2MDVkNzhkOVVMLCAweDU3MzdiYWQ4
VUwsIDB4MGU4OWZjZGFVTCwgMHgzOWUzM2VkYlVMLCAweGJjZjU3MWRlVUwsCi0gICAgMHg4Yjlm
YjNkZlVMLCAweGQyMjFmNWRkVUwsIDB4ZTU0YjM3ZGNVTCwgMHhkODBjNmJkN1VMLCAweGVmNjZh
OWQ2VUwsCi0gICAgMHhiNmQ4ZWZkNFVMLCAweDgxYjIyZGQ1VUwsIDB4MDRhNDYyZDBVTCwgMHgz
M2NlYTBkMVVMLCAweDZhNzBlNmQzVUwsCi0gICAgMHg1ZDFhMjRkMlVMLCAweDEwZmU1ZWM1VUws
IDB4Mjc5NDljYzRVTCwgMHg3ZTJhZGFjNlVMLCAweDQ5NDAxOGM3VUwsCi0gICAgMHhjYzU2NTdj
MlVMLCAweGZiM2M5NWMzVUwsIDB4YTI4MmQzYzFVTCwgMHg5NWU4MTFjMFVMLCAweGE4YWY0ZGNi
VUwsCi0gICAgMHg5ZmM1OGZjYVVMLCAweGM2N2JjOWM4VUwsIDB4ZjExMTBiYzlVTCwgMHg3NDA3
NDRjY1VMLCAweDQzNmQ4NmNkVUwsCi0gICAgMHgxYWQzYzBjZlVMLCAweDJkYjkwMmNlVUwsIDB4
NDA5NmFmOTFVTCwgMHg3N2ZjNmQ5MFVMLCAweDJlNDIyYjkyVUwsCi0gICAgMHgxOTI4ZTk5M1VM
LCAweDljM2VhNjk2VUwsIDB4YWI1NDY0OTdVTCwgMHhmMmVhMjI5NVVMLCAweGM1ODBlMDk0VUws
Ci0gICAgMHhmOGM3YmM5ZlVMLCAweGNmYWQ3ZTllVUwsIDB4OTYxMzM4OWNVTCwgMHhhMTc5ZmE5
ZFVMLCAweDI0NmZiNTk4VUwsCi0gICAgMHgxMzA1Nzc5OVVMLCAweDRhYmIzMTliVUwsIDB4N2Rk
MWYzOWFVTCwgMHgzMDM1ODk4ZFVMLCAweDA3NWY0YjhjVUwsCi0gICAgMHg1ZWUxMGQ4ZVVMLCAw
eDY5OGJjZjhmVUwsIDB4ZWM5ZDgwOGFVTCwgMHhkYmY3NDI4YlVMLCAweDgyNDkwNDg5VUwsCi0g
ICAgMHhiNTIzYzY4OFVMLCAweDg4NjQ5YTgzVUwsIDB4YmYwZTU4ODJVTCwgMHhlNmIwMWU4MFVM
LCAweGQxZGFkYzgxVUwsCi0gICAgMHg1NGNjOTM4NFVMLCAweDYzYTY1MTg1VUwsIDB4M2ExODE3
ODdVTCwgMHgwZDcyZDU4NlVMLCAweGEwZDBlMmE5VUwsCi0gICAgMHg5N2JhMjBhOFVMLCAweGNl
MDQ2NmFhVUwsIDB4Zjk2ZWE0YWJVTCwgMHg3Yzc4ZWJhZVVMLCAweDRiMTIyOWFmVUwsCi0gICAg
MHgxMmFjNmZhZFVMLCAweDI1YzZhZGFjVUwsIDB4MTg4MWYxYTdVTCwgMHgyZmViMzNhNlVMLCAw
eDc2NTU3NWE0VUwsCi0gICAgMHg0MTNmYjdhNVVMLCAweGM0MjlmOGEwVUwsIDB4ZjM0MzNhYTFV
TCwgMHhhYWZkN2NhM1VMLCAweDlkOTdiZWEyVUwsCi0gICAgMHhkMDczYzRiNVVMLCAweGU3MTkw
NmI0VUwsIDB4YmVhNzQwYjZVTCwgMHg4OWNkODJiN1VMLCAweDBjZGJjZGIyVUwsCi0gICAgMHgz
YmIxMGZiM1VMLCAweDYyMGY0OWIxVUwsIDB4NTU2NThiYjBVTCwgMHg2ODIyZDdiYlVMLCAweDVm
NDgxNWJhVUwsCi0gICAgMHgwNmY2NTNiOFVMLCAweDMxOWM5MWI5VUwsIDB4YjQ4YWRlYmNVTCwg
MHg4M2UwMWNiZFVMLCAweGRhNWU1YWJmVUwsCi0gICAgMHhlZDM0OThiZVVMCi0gIH0sCi0gIHsK
LSAgICAweDAwMDAwMDAwVUwsIDB4NjU2N2JjYjhVTCwgMHg4YmM4MDlhYVVMLCAweGVlYWZiNTEy
VUwsIDB4NTc5NzYyOGZVTCwKLSAgICAweDMyZjBkZTM3VUwsIDB4ZGM1ZjZiMjVVTCwgMHhiOTM4
ZDc5ZFVMLCAweGVmMjhiNGM1VUwsIDB4OGE0ZjA4N2RVTCwKLSAgICAweDY0ZTBiZDZmVUwsIDB4
MDE4NzAxZDdVTCwgMHhiOGJmZDY0YVVMLCAweGRkZDg2YWYyVUwsIDB4MzM3N2RmZTBVTCwKLSAg
ICAweDU2MTA2MzU4VUwsIDB4OWY1NzE5NTBVTCwgMHhmYTMwYTVlOFVMLCAweDE0OWYxMGZhVUws
IDB4NzFmOGFjNDJVTCwKLSAgICAweGM4YzA3YmRmVUwsIDB4YWRhN2M3NjdVTCwgMHg0MzA4NzI3
NVVMLCAweDI2NmZjZWNkVUwsIDB4NzA3ZmFkOTVVTCwKLSAgICAweDE1MTgxMTJkVUwsIDB4ZmJi
N2E0M2ZVTCwgMHg5ZWQwMTg4N1VMLCAweDI3ZThjZjFhVUwsIDB4NDI4ZjczYTJVTCwKLSAgICAw
eGFjMjBjNmIwVUwsIDB4Yzk0NzdhMDhVTCwgMHgzZWFmMzJhMFVMLCAweDViYzg4ZTE4VUwsIDB4
YjU2NzNiMGFVTCwKLSAgICAweGQwMDA4N2IyVUwsIDB4NjkzODUwMmZVTCwgMHgwYzVmZWM5N1VM
LCAweGUyZjA1OTg1VUwsIDB4ODc5N2U1M2RVTCwKLSAgICAweGQxODc4NjY1VUwsIDB4YjRlMDNh
ZGRVTCwgMHg1YTRmOGZjZlVMLCAweDNmMjgzMzc3VUwsIDB4ODYxMGU0ZWFVTCwKLSAgICAweGUz
Nzc1ODUyVUwsIDB4MGRkOGVkNDBVTCwgMHg2OGJmNTFmOFVMLCAweGExZjgyYmYwVUwsIDB4YzQ5
Zjk3NDhVTCwKLSAgICAweDJhMzAyMjVhVUwsIDB4NGY1NzllZTJVTCwgMHhmNjZmNDk3ZlVMLCAw
eDkzMDhmNWM3VUwsIDB4N2RhNzQwZDVVTCwKLSAgICAweDE4YzBmYzZkVUwsIDB4NGVkMDlmMzVV
TCwgMHgyYmI3MjM4ZFVMLCAweGM1MTg5NjlmVUwsIDB4YTA3ZjJhMjdVTCwKLSAgICAweDE5NDdm
ZGJhVUwsIDB4N2MyMDQxMDJVTCwgMHg5MjhmZjQxMFVMLCAweGY3ZTg0OGE4VUwsIDB4M2Q1ODE0
OWJVTCwKLSAgICAweDU4M2ZhODIzVUwsIDB4YjY5MDFkMzFVTCwgMHhkM2Y3YTE4OVVMLCAweDZh
Y2Y3NjE0VUwsIDB4MGZhOGNhYWNVTCwKLSAgICAweGUxMDc3ZmJlVUwsIDB4ODQ2MGMzMDZVTCwg
MHhkMjcwYTA1ZVVMLCAweGI3MTcxY2U2VUwsIDB4NTliOGE5ZjRVTCwKLSAgICAweDNjZGYxNTRj
VUwsIDB4ODVlN2MyZDFVTCwgMHhlMDgwN2U2OVVMLCAweDBlMmZjYjdiVUwsIDB4NmI0ODc3YzNV
TCwKLSAgICAweGEyMGYwZGNiVUwsIDB4Yzc2OGIxNzNVTCwgMHgyOWM3MDQ2MVVMLCAweDRjYTBi
OGQ5VUwsIDB4ZjU5ODZmNDRVTCwKLSAgICAweDkwZmZkM2ZjVUwsIDB4N2U1MDY2ZWVVTCwgMHgx
YjM3ZGE1NlVMLCAweDRkMjdiOTBlVUwsIDB4Mjg0MDA1YjZVTCwKLSAgICAweGM2ZWZiMGE0VUws
IDB4YTM4ODBjMWNVTCwgMHgxYWIwZGI4MVVMLCAweDdmZDc2NzM5VUwsIDB4OTE3OGQyMmJVTCwK
LSAgICAweGY0MWY2ZTkzVUwsIDB4MDNmNzI2M2JVTCwgMHg2NjkwOWE4M1VMLCAweDg4M2YyZjkx
VUwsIDB4ZWQ1ODkzMjlVTCwKLSAgICAweDU0NjA0NGI0VUwsIDB4MzEwN2Y4MGNVTCwgMHhkZmE4
NGQxZVVMLCAweGJhY2ZmMWE2VUwsIDB4ZWNkZjkyZmVVTCwKLSAgICAweDg5YjgyZTQ2VUwsIDB4
NjcxNzliNTRVTCwgMHgwMjcwMjdlY1VMLCAweGJiNDhmMDcxVUwsIDB4ZGUyZjRjYzlVTCwKLSAg
ICAweDMwODBmOWRiVUwsIDB4NTVlNzQ1NjNVTCwgMHg5Y2EwM2Y2YlVMLCAweGY5Yzc4M2QzVUws
IDB4MTc2ODM2YzFVTCwKLSAgICAweDcyMGY4YTc5VUwsIDB4Y2IzNzVkZTRVTCwgMHhhZTUwZTE1
Y1VMLCAweDQwZmY1NDRlVUwsIDB4MjU5OGU4ZjZVTCwKLSAgICAweDczODg4YmFlVUwsIDB4MTZl
ZjM3MTZVTCwgMHhmODQwODIwNFVMLCAweDlkMjczZWJjVUwsIDB4MjQxZmU5MjFVTCwKLSAgICAw
eDQxNzg1NTk5VUwsIDB4YWZkN2UwOGJVTCwgMHhjYWIwNWMzM1VMLCAweDNiYjY1OWVkVUwsIDB4
NWVkMWU1NTVVTCwKLSAgICAweGIwN2U1MDQ3VUwsIDB4ZDUxOWVjZmZVTCwgMHg2YzIxM2I2MlVM
LCAweDA5NDY4N2RhVUwsIDB4ZTdlOTMyYzhVTCwKLSAgICAweDgyOGU4ZTcwVUwsIDB4ZDQ5ZWVk
MjhVTCwgMHhiMWY5NTE5MFVMLCAweDVmNTZlNDgyVUwsIDB4M2EzMTU4M2FVTCwKLSAgICAweDgz
MDk4ZmE3VUwsIDB4ZTY2ZTMzMWZVTCwgMHgwOGMxODYwZFVMLCAweDZkYTYzYWI1VUwsIDB4YTRl
MTQwYmRVTCwKLSAgICAweGMxODZmYzA1VUwsIDB4MmYyOTQ5MTdVTCwgMHg0YTRlZjVhZlVMLCAw
eGYzNzYyMjMyVUwsIDB4OTYxMTllOGFVTCwKLSAgICAweDc4YmUyYjk4VUwsIDB4MWRkOTk3MjBV
TCwgMHg0YmM5ZjQ3OFVMLCAweDJlYWU0OGMwVUwsIDB4YzAwMWZkZDJVTCwKLSAgICAweGE1NjY0
MTZhVUwsIDB4MWM1ZTk2ZjdVTCwgMHg3OTM5MmE0ZlVMLCAweDk3OTY5ZjVkVUwsIDB4ZjJmMTIz
ZTVVTCwKLSAgICAweDA1MTk2YjRkVUwsIDB4NjA3ZWQ3ZjVVTCwgMHg4ZWQxNjJlN1VMLCAweGVi
YjZkZTVmVUwsIDB4NTI4ZTA5YzJVTCwKLSAgICAweDM3ZTliNTdhVUwsIDB4ZDk0NjAwNjhVTCwg
MHhiYzIxYmNkMFVMLCAweGVhMzFkZjg4VUwsIDB4OGY1NjYzMzBVTCwKLSAgICAweDYxZjlkNjIy
VUwsIDB4MDQ5ZTZhOWFVTCwgMHhiZGE2YmQwN1VMLCAweGQ4YzEwMWJmVUwsIDB4MzY2ZWI0YWRV
TCwKLSAgICAweDUzMDkwODE1VUwsIDB4OWE0ZTcyMWRVTCwgMHhmZjI5Y2VhNVVMLCAweDExODY3
YmI3VUwsIDB4NzRlMWM3MGZVTCwKLSAgICAweGNkZDkxMDkyVUwsIDB4YThiZWFjMmFVTCwgMHg0
NjExMTkzOFVMLCAweDIzNzZhNTgwVUwsIDB4NzU2NmM2ZDhVTCwKLSAgICAweDEwMDE3YTYwVUws
IDB4ZmVhZWNmNzJVTCwgMHg5YmM5NzNjYVVMLCAweDIyZjFhNDU3VUwsIDB4NDc5NjE4ZWZVTCwK
LSAgICAweGE5MzlhZGZkVUwsIDB4Y2M1ZTExNDVVTCwgMHgwNmVlNGQ3NlVMLCAweDYzODlmMWNl
VUwsIDB4OGQyNjQ0ZGNVTCwKLSAgICAweGU4NDFmODY0VUwsIDB4NTE3OTJmZjlVTCwgMHgzNDFl
OTM0MVVMLCAweGRhYjEyNjUzVUwsIDB4YmZkNjlhZWJVTCwKLSAgICAweGU5YzZmOWIzVUwsIDB4
OGNhMTQ1MGJVTCwgMHg2MjBlZjAxOVVMLCAweDA3Njk0Y2ExVUwsIDB4YmU1MTliM2NVTCwKLSAg
ICAweGRiMzYyNzg0VUwsIDB4MzU5OTkyOTZVTCwgMHg1MGZlMmUyZVVMLCAweDk5Yjk1NDI2VUws
IDB4ZmNkZWU4OWVVTCwKLSAgICAweDEyNzE1ZDhjVUwsIDB4NzcxNmUxMzRVTCwgMHhjZTJlMzZh
OVVMLCAweGFiNDk4YTExVUwsIDB4NDVlNjNmMDNVTCwKLSAgICAweDIwODE4M2JiVUwsIDB4NzY5
MWUwZTNVTCwgMHgxM2Y2NWM1YlVMLCAweGZkNTllOTQ5VUwsIDB4OTgzZTU1ZjFVTCwKLSAgICAw
eDIxMDY4MjZjVUwsIDB4NDQ2MTNlZDRVTCwgMHhhYWNlOGJjNlVMLCAweGNmYTkzNzdlVUwsIDB4
Mzg0MTdmZDZVTCwKLSAgICAweDVkMjZjMzZlVUwsIDB4YjM4OTc2N2NVTCwgMHhkNmVlY2FjNFVM
LCAweDZmZDYxZDU5VUwsIDB4MGFiMWExZTFVTCwKLSAgICAweGU0MWUxNGYzVUwsIDB4ODE3OWE4
NGJVTCwgMHhkNzY5Y2IxM1VMLCAweGIyMGU3N2FiVUwsIDB4NWNhMWMyYjlVTCwKLSAgICAweDM5
YzY3ZTAxVUwsIDB4ODBmZWE5OWNVTCwgMHhlNTk5MTUyNFVMLCAweDBiMzZhMDM2VUwsIDB4NmU1
MTFjOGVVTCwKLSAgICAweGE3MTY2Njg2VUwsIDB4YzI3MWRhM2VVTCwgMHgyY2RlNmYyY1VMLCAw
eDQ5YjlkMzk0VUwsIDB4ZjA4MTA0MDlVTCwKLSAgICAweDk1ZTZiOGIxVUwsIDB4N2I0OTBkYTNV
TCwgMHgxZTJlYjExYlVMLCAweDQ4M2VkMjQzVUwsIDB4MmQ1OTZlZmJVTCwKLSAgICAweGMzZjZk
YmU5VUwsIDB4YTY5MTY3NTFVTCwgMHgxZmE5YjBjY1VMLCAweDdhY2UwYzc0VUwsIDB4OTQ2MWI5
NjZVTCwKLSAgICAweGYxMDYwNWRlVUwKLSNlbmRpZgotICB9Ci19OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2RlZmxhdGUuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvZGVmbGF0ZS5jCShyZXZpc2lvbiA1Mzcx
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9kZWZsYXRlLmMJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTczNiArMCwwIEBACi0vKiBkZWZsYXRlLmMgLS0gY29tcHJlc3Mg
ZGF0YSB1c2luZyB0aGUgZGVmbGF0aW9uIGFsZ29yaXRobQotICogQ29weXJpZ2h0IChDKSAxOTk1
LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlv
biBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKgotICog
IEFMR09SSVRITQotICoKLSAqICAgICAgVGhlICJkZWZsYXRpb24iIHByb2Nlc3MgZGVwZW5kcyBv
biBiZWluZyBhYmxlIHRvIGlkZW50aWZ5IHBvcnRpb25zCi0gKiAgICAgIG9mIHRoZSBpbnB1dCB0
ZXh0IHdoaWNoIGFyZSBpZGVudGljYWwgdG8gZWFybGllciBpbnB1dCAod2l0aGluIGEKLSAqICAg
ICAgc2xpZGluZyB3aW5kb3cgdHJhaWxpbmcgYmVoaW5kIHRoZSBpbnB1dCBjdXJyZW50bHkgYmVp
bmcgcHJvY2Vzc2VkKS4KLSAqCi0gKiAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCB0ZWNo
bmlxdWUgdHVybnMgb3V0IHRvIGJlIHRoZSBmYXN0ZXN0IGZvcgotICogICAgICBtb3N0IGlucHV0
IGZpbGVzOiB0cnkgYWxsIHBvc3NpYmxlIG1hdGNoZXMgYW5kIHNlbGVjdCB0aGUgbG9uZ2VzdC4K
LSAqICAgICAgVGhlIGtleSBmZWF0dXJlIG9mIHRoaXMgYWxnb3JpdGhtIGlzIHRoYXQgaW5zZXJ0
aW9ucyBpbnRvIHRoZSBzdHJpbmcKLSAqICAgICAgZGljdGlvbmFyeSBhcmUgdmVyeSBzaW1wbGUg
YW5kIHRodXMgZmFzdCwgYW5kIGRlbGV0aW9ucyBhcmUgYXZvaWRlZAotICogICAgICBjb21wbGV0
ZWx5LiBJbnNlcnRpb25zIGFyZSBwZXJmb3JtZWQgYXQgZWFjaCBpbnB1dCBjaGFyYWN0ZXIsIHdo
ZXJlYXMKLSAqICAgICAgc3RyaW5nIG1hdGNoZXMgYXJlIHBlcmZvcm1lZCBvbmx5IHdoZW4gdGhl
IHByZXZpb3VzIG1hdGNoIGVuZHMuIFNvIGl0Ci0gKiAgICAgIGlzIHByZWZlcmFibGUgdG8gc3Bl
bmQgbW9yZSB0aW1lIGluIG1hdGNoZXMgdG8gYWxsb3cgdmVyeSBmYXN0IHN0cmluZwotICogICAg
ICBpbnNlcnRpb25zIGFuZCBhdm9pZCBkZWxldGlvbnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0g
Zm9yIHNtYWxsCi0gKiAgICAgIHN0cmluZ3MgaXMgaW5zcGlyZWQgZnJvbSB0aGF0IG9mIFJhYmlu
ICYgS2FycC4gQSBicnV0ZSBmb3JjZSBhcHByb2FjaAotICogICAgICBpcyB1c2VkIHRvIGZpbmQg
bG9uZ2VyIHN0cmluZ3Mgd2hlbiBhIHNtYWxsIG1hdGNoIGhhcyBiZWVuIGZvdW5kLgotICogICAg
ICBBIHNpbWlsYXIgYWxnb3JpdGhtIGlzIHVzZWQgaW4gY29taWMgKGJ5IEphbi1NYXJrIFdhbXMp
IGFuZCBmcmVlemUKLSAqICAgICAgKGJ5IExlb25pZCBCcm91a2hpcykuCi0gKiAgICAgICAgIEEg
cHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdXNlZCBhIG1vcmUgc29waGlzdGljYXRlZCBh
bGdvcml0aG0KLSAqICAgICAgKGJ5IEZpYWxhIGFuZCBHcmVlbmUpIHdoaWNoIGlzIGd1YXJhbnRl
ZWQgdG8gcnVuIGluIGxpbmVhciBhbW9ydGl6ZWQKLSAqICAgICAgdGltZSwgYnV0IGhhcyBhIGxh
cmdlciBhdmVyYWdlIGNvc3QsIHVzZXMgbW9yZSBtZW1vcnkgYW5kIGlzIHBhdGVudGVkLgotICog
ICAgICBIb3dldmVyIHRoZSBGJkcgYWxnb3JpdGhtIG1heSBiZSBmYXN0ZXIgZm9yIHNvbWUgaGln
aGx5IHJlZHVuZGFudAotICogICAgICBmaWxlcyBpZiB0aGUgcGFyYW1ldGVyIG1heF9jaGFpbl9s
ZW5ndGggKGRlc2NyaWJlZCBiZWxvdykgaXMgdG9vIGxhcmdlLgotICoKLSAqICBBQ0tOT1dMRURH
RU1FTlRTCi0gKgotICogICAgICBUaGUgaWRlYSBvZiBsYXp5IGV2YWx1YXRpb24gb2YgbWF0Y2hl
cyBpcyBkdWUgdG8gSmFuLU1hcmsgV2FtcywgYW5kCi0gKiAgICAgIEkgZm91bmQgaXQgaW4gJ2Zy
ZWV6ZScgd3JpdHRlbiBieSBMZW9uaWQgQnJvdWtoaXMuCi0gKiAgICAgIFRoYW5rcyB0byBtYW55
IHBlb3BsZSBmb3IgYnVnIHJlcG9ydHMgYW5kIHRlc3RpbmcuCi0gKgotICogIFJFRkVSRU5DRVMK
LSAqCi0gKiAgICAgIERldXRzY2gsIEwuUC4sIkRFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1h
dCBTcGVjaWZpY2F0aW9uIi4KLSAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly93d3cuaWV0Zi5v
cmcvcmZjL3JmYzE5NTEudHh0Ci0gKgotICogICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoZSBSYWJp
biBhbmQgS2FycCBhbGdvcml0aG0gaXMgZ2l2ZW4gaW4gdGhlIGJvb2sKLSAqICAgICAgICAgIkFs
Z29yaXRobXMiIGJ5IFIuIFNlZGdld2ljaywgQWRkaXNvbi1XZXNsZXksIHAyNTIuCi0gKgotICog
ICAgICBGaWFsYSxFLlIuLCBhbmQgR3JlZW5lLEQuSC4KLSAqICAgICAgICAgRGF0YSBDb21wcmVz
c2lvbiB3aXRoIEZpbml0ZSBXaW5kb3dzLCBDb21tLkFDTSwgMzIsNCAoMTk4OSkgNDkwLTU5NQot
ICoKLSAqLwotCi0vKiBAKCMpICRJZDogZGVmbGF0ZS5jLHYgMy42IDIwMDUvMDgvMDQgMTk6MTQ6
MTQgdG9yJWNzLmJyb3duLmVkdSBFeHAgJCAqLwotCi0jaW5jbHVkZSAiZGVmbGF0ZS5oIgotCi1j
b25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBkZWZsYXRlIDEuMi4zIENvcHly
aWdodCAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseSAiOwotLyoKLSAgSWYgeW91IHVzZSB0aGUg
emxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQot
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNv
biB5b3UgY2Fubm90Ci0gIGluY2x1ZGUgc3VjaCBhbiBhY2tub3dsZWRnbWVudCwgSSB3b3VsZCBh
cHByZWNpYXRlIHRoYXQgeW91IGtlZXAgdGhpcwotICBjb3B5cmlnaHQgc3RyaW5nIGluIHRoZSBl
eGVjdXRhYmxlIG9mIHlvdXIgcHJvZHVjdC4KLSAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSAqICBGdW5jdGlvbiBwcm90b3R5cGVzLgotICovCi10eXBlZGVmIGVudW0gewotICAgIG5lZWRf
bW9yZSwgICAgICAvKiBibG9jayBub3QgY29tcGxldGVkLCBuZWVkIG1vcmUgaW5wdXQgb3IgbW9y
ZSBvdXRwdXQgKi8KLSAgICBibG9ja19kb25lLCAgICAgLyogYmxvY2sgZmx1c2ggcGVyZm9ybWVk
ICovCi0gICAgZmluaXNoX3N0YXJ0ZWQsIC8qIGZpbmlzaCBzdGFydGVkLCBuZWVkIG9ubHkgbW9y
ZSBvdXRwdXQgYXQgbmV4dCBkZWZsYXRlICovCi0gICAgZmluaXNoX2RvbmUgICAgIC8qIGZpbmlz
aCBkb25lLCBhY2NlcHQgbm8gbW9yZSBpbnB1dCBvciBvdXRwdXQgKi8KLX0gYmxvY2tfc3RhdGU7
Ci0KLXR5cGVkZWYgYmxvY2tfc3RhdGUgKCpjb21wcmVzc19mdW5jKSBPRigoZGVmbGF0ZV9zdGF0
ZSAqcywgaW50IGZsdXNoKSk7Ci0vKiBDb21wcmVzc2lvbiBmdW5jdGlvbi4gUmV0dXJucyB0aGUg
YmxvY2sgc3RhdGUgYWZ0ZXIgdGhlIGNhbGwuICovCi0KLWxvY2FsIHZvaWQgZmlsbF93aW5kb3cg
ICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfc3Rv
cmVkIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGJsb2NrX3N0YXRl
IGRlZmxhdGVfZmFzdCAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKLSNpZm5k
ZWYgRkFTVEVTVAotbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9zbG93ICAgT0YoKGRlZmxhdGVf
c3RhdGUgKnMsIGludCBmbHVzaCkpOwotI2VuZGlmCi1sb2NhbCB2b2lkIGxtX2luaXQgICAgICAg
IE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Ci1sb2NhbCB2b2lkIHB1dFNob3J0TVNCICAgIE9GKChk
ZWZsYXRlX3N0YXRlICpzLCB1SW50IGIpKTsKLWxvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyAgT0Yo
KHpfc3RyZWFtcCBzdHJtKSk7Ci1sb2NhbCBpbnQgcmVhZF9idWYgICAgICAgIE9GKCh6X3N0cmVh
bXAgc3RybSwgQnl0ZWYgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkpOwotI2lmbmRlZiBGQVNURVNUCi0j
aWZkZWYgQVNNVgotICAgICAgdm9pZCBtYXRjaF9pbml0IE9GKCh2b2lkKSk7IC8qIGFzbSBjb2Rl
IGluaXRpYWxpemF0aW9uICovCi0gICAgICB1SW50IGxvbmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRl
X3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwotI2Vsc2UKLWxvY2FsIHVJbnQgbG9uZ2VzdF9t
YXRjaCAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIElQb3MgY3VyX21hdGNoKSk7Ci0jZW5kaWYKLSNl
bmRpZgotbG9jYWwgdUludCBsb25nZXN0X21hdGNoX2Zhc3QgT0YoKGRlZmxhdGVfc3RhdGUgKnMs
IElQb3MgY3VyX21hdGNoKSk7Ci0KLSNpZmRlZiBERUJVRwotbG9jYWwgIHZvaWQgY2hlY2tfbWF0
Y2ggT0YoKGRlZmxhdGVfc3RhdGUgKnMsIElQb3Mgc3RhcnQsIElQb3MgbWF0Y2gsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkpOwotI2VuZGlmCi0KLS8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotICogTG9jYWwgZGF0YQotICovCi0KLSNkZWZpbmUgTklMIDAKLS8qIFRhaWwg
b2YgaGFzaCBjaGFpbnMgKi8KLQotI2lmbmRlZiBUT09fRkFSCi0jICBkZWZpbmUgVE9PX0ZBUiA0
MDk2Ci0jZW5kaWYKLS8qIE1hdGNoZXMgb2YgbGVuZ3RoIDMgYXJlIGRpc2NhcmRlZCBpZiB0aGVp
ciBkaXN0YW5jZSBleGNlZWRzIFRPT19GQVIgKi8KLQotI2RlZmluZSBNSU5fTE9PS0FIRUFEIChN
QVhfTUFUQ0grTUlOX01BVENIKzEpCi0vKiBNaW5pbXVtIGFtb3VudCBvZiBsb29rYWhlYWQsIGV4
Y2VwdCBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLgotICogU2VlIGRlZmxhdGUuYyBmb3Ig
Y29tbWVudHMgYWJvdXQgdGhlIE1JTl9NQVRDSCsxLgotICovCi0KLS8qIFZhbHVlcyBmb3IgbWF4
X2xhenlfbWF0Y2gsIGdvb2RfbWF0Y2ggYW5kIG1heF9jaGFpbl9sZW5ndGgsIGRlcGVuZGluZyBv
bgotICogdGhlIGRlc2lyZWQgcGFjayBsZXZlbCAoMC4uOSkuIFRoZSB2YWx1ZXMgZ2l2ZW4gYmVs
b3cgaGF2ZSBiZWVuIHR1bmVkIHRvCi0gKiBleGNsdWRlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ug
Zm9yIHBhdGhvbG9naWNhbCBmaWxlcy4gQmV0dGVyIHZhbHVlcyBtYXkgYmUKLSAqIGZvdW5kIGZv
ciBzcGVjaWZpYyBmaWxlcy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgY29uZmlnX3MgewotICAgdXNo
IGdvb2RfbGVuZ3RoOyAvKiByZWR1Y2UgbGF6eSBzZWFyY2ggYWJvdmUgdGhpcyBtYXRjaCBsZW5n
dGggKi8KLSAgIHVzaCBtYXhfbGF6eTsgICAgLyogZG8gbm90IHBlcmZvcm0gbGF6eSBzZWFyY2gg
YWJvdmUgdGhpcyBtYXRjaCBsZW5ndGggKi8KLSAgIHVzaCBuaWNlX2xlbmd0aDsgLyogcXVpdCBz
ZWFyY2ggYWJvdmUgdGhpcyBtYXRjaCBsZW5ndGggKi8KLSAgIHVzaCBtYXhfY2hhaW47Ci0gICBj
b21wcmVzc19mdW5jIGZ1bmM7Ci19IGNvbmZpZzsKLQotI2lmZGVmIEZBU1RFU1QKLWxvY2FsIGNv
bnN0IGNvbmZpZyBjb25maWd1cmF0aW9uX3RhYmxlWzJdID0gewotLyogICAgICBnb29kIGxhenkg
bmljZSBjaGFpbiAqLwotLyogMCAqLyB7MCwgICAgMCwgIDAsICAgIDAsIGRlZmxhdGVfc3RvcmVk
fSwgIC8qIHN0b3JlIG9ubHkgKi8KLS8qIDEgKi8gezQsICAgIDQsICA4LCAgICA0LCBkZWZsYXRl
X2Zhc3R9fTsgLyogbWF4IHNwZWVkLCBubyBsYXp5IG1hdGNoZXMgKi8KLSNlbHNlCi1sb2NhbCBj
b25zdCBjb25maWcgY29uZmlndXJhdGlvbl90YWJsZVsxMF0gPSB7Ci0vKiAgICAgIGdvb2QgbGF6
eSBuaWNlIGNoYWluICovCi0vKiAwICovIHswLCAgICAwLCAgMCwgICAgMCwgZGVmbGF0ZV9zdG9y
ZWR9LCAgLyogc3RvcmUgb25seSAqLwotLyogMSAqLyB7NCwgICAgNCwgIDgsICAgIDQsIGRlZmxh
dGVfZmFzdH0sIC8qIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovCi0vKiAyICovIHs0LCAg
ICA1LCAxNiwgICAgOCwgZGVmbGF0ZV9mYXN0fSwKLS8qIDMgKi8gezQsICAgIDYsIDMyLCAgIDMy
LCBkZWZsYXRlX2Zhc3R9LAotCi0vKiA0ICovIHs0LCAgICA0LCAxNiwgICAxNiwgZGVmbGF0ZV9z
bG93fSwgIC8qIGxhenkgbWF0Y2hlcyAqLwotLyogNSAqLyB7OCwgICAxNiwgMzIsICAgMzIsIGRl
ZmxhdGVfc2xvd30sCi0vKiA2ICovIHs4LCAgIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93fSwK
LS8qIDcgKi8gezgsICAgMzIsIDEyOCwgMjU2LCBkZWZsYXRlX3Nsb3d9LAotLyogOCAqLyB7MzIs
IDEyOCwgMjU4LCAxMDI0LCBkZWZsYXRlX3Nsb3d9LAotLyogOSAqLyB7MzIsIDI1OCwgMjU4LCA0
MDk2LCBkZWZsYXRlX3Nsb3d9fTsgLyogbWF4IGNvbXByZXNzaW9uICovCi0jZW5kaWYKLQotLyog
Tm90ZTogdGhlIGRlZmxhdGUoKSBjb2RlIHJlcXVpcmVzIG1heF9sYXp5ID49IE1JTl9NQVRDSCBh
bmQgbWF4X2NoYWluID49IDQKLSAqIEZvciBkZWZsYXRlX2Zhc3QoKSAobGV2ZWxzIDw9IDMpIGdv
b2QgaXMgaWdub3JlZCBhbmQgbGF6eSBoYXMgYSBkaWZmZXJlbnQKLSAqIG1lYW5pbmcuCi0gKi8K
LQotI2RlZmluZSBFUVVBTCAwCi0vKiByZXN1bHQgb2YgbWVtY21wIGZvciBlcXVhbCBzdHJpbmdz
ICovCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAotc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7
aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCi0vKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5w
dXQgYnl0ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIFVQREFURV9IQVNIIGFy
ZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKLSAqICAgIGlucHV0IGNoYXJhY3RlcnMsIHNvIHRoYXQg
YSBydW5uaW5nIGhhc2gga2V5IGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZQotICogICAgcHJldmlv
dXMga2V5IGluc3RlYWQgb2YgY29tcGxldGUgcmVjYWxjdWxhdGlvbiBlYWNoIHRpbWUuCi0gKi8K
LSNkZWZpbmUgVVBEQVRFX0hBU0gocyxoLGMpIChoID0gKCgoaCk8PHMtPmhhc2hfc2hpZnQpIF4g
KGMpKSAmIHMtPmhhc2hfbWFzaykKLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluc2Vy
dCBzdHJpbmcgc3RyIGluIHRoZSBkaWN0aW9uYXJ5IGFuZCBzZXQgbWF0Y2hfaGVhZCB0byB0aGUg
cHJldmlvdXMgaGVhZAotICogb2YgdGhlIGhhc2ggY2hhaW4gKHRoZSBtb3N0IHJlY2VudCBzdHJp
bmcgd2l0aCBzYW1lIGhhc2gga2V5KS4gUmV0dXJuCi0gKiB0aGUgcHJldmlvdXMgbGVuZ3RoIG9m
IHRoZSBoYXNoIGNoYWluLgotICogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggLURGQVNU
RVNULCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgZm9yY2VkCi0gKiB0byAxLCBhbmQgbm8gaGFz
aCBjaGFpbnMgYXJlIG1haW50YWluZWQuCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8g
dG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCi0gKiAgICBpbnB1dCBj
aGFyYWN0ZXJzIGFuZCB0aGUgZmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQK
LSAqICAgIChleGNlcHQgZm9yIHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1
dCBmaWxlKS4KLSAqLwotI2lmZGVmIEZBU1RFU1QKLSNkZWZpbmUgSU5TRVJUX1NUUklORyhzLCBz
dHIsIG1hdGNoX2hlYWQpIFwKLSAgIChVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93
WyhzdHIpICsgKE1JTl9NQVRDSC0xKV0pLCBcCi0gICAgbWF0Y2hfaGVhZCA9IHMtPmhlYWRbcy0+
aW5zX2hdLCBcCi0gICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKShzdHIpKQotI2Vsc2UKLSNk
ZWZpbmUgSU5TRVJUX1NUUklORyhzLCBzdHIsIG1hdGNoX2hlYWQpIFwKLSAgIChVUERBVEVfSEFT
SChzLCBzLT5pbnNfaCwgcy0+d2luZG93WyhzdHIpICsgKE1JTl9NQVRDSC0xKV0pLCBcCi0gICAg
bWF0Y2hfaGVhZCA9IHMtPnByZXZbKHN0cikgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNf
aF0sIFwKLSAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3MpKHN0cikpCi0jZW5kaWYKLQotLyog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlIChhdm9pZGlu
ZyA2NEsgb3ZlcmZsb3cgZm9yIDE2IGJpdCBzeXN0ZW1zKS4KLSAqIHByZXZbXSB3aWxsIGJlIGlu
aXRpYWxpemVkIG9uIHRoZSBmbHkuCi0gKi8KLSNkZWZpbmUgQ0xFQVJfSEFTSChzKSBcCi0gICAg
cy0+aGVhZFtzLT5oYXNoX3NpemUtMV0gPSBOSUw7IFwKLSAgICB6bWVtemVybygoQnl0ZWYgKilz
LT5oZWFkLCAodW5zaWduZWQpKHMtPmhhc2hfc2l6ZS0xKSpzaXplb2YoKnMtPmhlYWQpKTsKLQot
LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZUluaXRfKHN0cm0sIGxl
dmVsLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKLSAgICB6X3N0cmVhbXAgc3RybTsKLSAgICBpbnQg
bGV2ZWw7Ci0gICAgY29uc3QgY2hhciAqdmVyc2lvbjsKLSAgICBpbnQgc3RyZWFtX3NpemU7Ci17
Ci0gICAgcmV0dXJuIGRlZmxhdGVJbml0Ml8oc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9X
QklUUywgREVGX01FTV9MRVZFTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkFVTFRf
U1RSQVRFR1ksIHZlcnNpb24sIHN0cmVhbV9zaXplKTsKLSAgICAvKiBUbyBkbzogaWdub3JlIHN0
cm0tPm5leHRfaW4gaWYgd2UgdXNlIGl0IGFzIHdpbmRvdyAqLwotfQotCi0vKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ICovCi1pbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDJfKHN0cm0sIGxldmVsLCBtZXRob2Qs
IHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwKLSAgICAgICAgICAgICAgICAgIHZlcnNp
b24sIHN0cmVhbV9zaXplKQotICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIGludCAgbGV2ZWw7Ci0g
ICAgaW50ICBtZXRob2Q7Ci0gICAgaW50ICB3aW5kb3dCaXRzOwotICAgIGludCAgbWVtTGV2ZWw7
Ci0gICAgaW50ICBzdHJhdGVneTsKLSAgICBjb25zdCBjaGFyICp2ZXJzaW9uOwotICAgIGludCBz
dHJlYW1fc2l6ZTsKLXsKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGludCB3cmFwID0gMTsK
LSAgICBzdGF0aWMgY29uc3QgY2hhciBteV92ZXJzaW9uW10gPSBaTElCX1ZFUlNJT047Ci0KLSAg
ICB1c2hmICpvdmVybGF5OwotICAgIC8qIFdlIG92ZXJsYXkgcGVuZGluZ19idWYgYW5kIGRfYnVm
K2xfYnVmLiBUaGlzIHdvcmtzIHNpbmNlIHRoZSBhdmVyYWdlCi0gICAgICogb3V0cHV0IHNpemUg
Zm9yIChsZW5ndGgsZGlzdGFuY2UpIGNvZGVzIGlzIDw9IDI0IGJpdHMuCi0gICAgICovCi0KLSAg
ICBpZiAodmVyc2lvbiA9PSBaX05VTEwgfHwgdmVyc2lvblswXSAhPSBteV92ZXJzaW9uWzBdIHx8
Ci0gICAgICAgIHN0cmVhbV9zaXplICE9IHNpemVvZih6X3N0cmVhbSkpIHsKLSAgICAgICAgcmV0
dXJuIFpfVkVSU0lPTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKHN0cm0gPT0gWl9OVUxMKSByZXR1
cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzdHJtLT5tc2cgPSBaX05VTEw7Ci0gICAgaWYgKHN0
cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7Ci0gICAgICAgIHN0cm0tPnphbGxvYyA9IHpj
YWxsb2M7Ci0gICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKLSAgICB9Ci0gICAgaWYg
KHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7Ci0KLSNp
ZmRlZiBGQVNURVNUCi0gICAgaWYgKGxldmVsICE9IDApIGxldmVsID0gMTsKLSNlbHNlCi0gICAg
aWYgKGxldmVsID09IFpfREVGQVVMVF9DT01QUkVTU0lPTikgbGV2ZWwgPSA2OwotI2VuZGlmCi0K
LSAgICBpZiAod2luZG93Qml0cyA8IDApIHsgLyogc3VwcHJlc3MgemxpYiB3cmFwcGVyICovCi0g
ICAgICAgIHdyYXAgPSAwOwotICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7Ci0gICAg
fQotI2lmZGVmIEdaSVAKLSAgICBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHsKLSAgICAgICAg
d3JhcCA9IDI7ICAgICAgIC8qIHdyaXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkICovCi0gICAgICAg
IHdpbmRvd0JpdHMgLT0gMTY7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKG1lbUxldmVsIDwgMSB8
fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9IFpfREVGTEFURUQgfHwKLSAg
ICAgICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBs
ZXZlbCA+IDkgfHwKLSAgICAgICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9GSVhFRCkg
ewotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgfQotICAgIGlmICh3aW5kb3dC
aXRzID09IDgpIHdpbmRvd0JpdHMgPSA5OyAgLyogdW50aWwgMjU2LWJ5dGUgd2luZG93IGJ1ZyBm
aXhlZCAqLwotICAgIHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0Moc3RybSwgMSwgc2l6ZW9m
KGRlZmxhdGVfc3RhdGUpKTsKLSAgICBpZiAocyA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJP
UjsKLSAgICBzdHJtLT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopczsKLSAg
ICBzLT5zdHJtID0gc3RybTsKLQotICAgIHMtPndyYXAgPSB3cmFwOwotICAgIHMtPmd6aGVhZCA9
IFpfTlVMTDsKLSAgICBzLT53X2JpdHMgPSB3aW5kb3dCaXRzOwotICAgIHMtPndfc2l6ZSA9IDEg
PDwgcy0+d19iaXRzOwotICAgIHMtPndfbWFzayA9IHMtPndfc2l6ZSAtIDE7Ci0KLSAgICBzLT5o
YXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7Ci0gICAgcy0+aGFzaF9zaXplID0gMSA8PCBzLT5oYXNo
X2JpdHM7Ci0gICAgcy0+aGFzaF9tYXNrID0gcy0+aGFzaF9zaXplIC0gMTsKLSAgICBzLT5oYXNo
X3NoaWZ0ID0gICgocy0+aGFzaF9iaXRzK01JTl9NQVRDSC0xKS9NSU5fTUFUQ0gpOwotCi0gICAg
cy0+d2luZG93ID0gKEJ5dGVmICopIFpBTExPQyhzdHJtLCBzLT53X3NpemUsIDIqc2l6ZW9mKEJ5
dGUpKTsKLSAgICBzLT5wcmV2ICAgPSAoUG9zZiAqKSAgWkFMTE9DKHN0cm0sIHMtPndfc2l6ZSwg
c2l6ZW9mKFBvcykpOwotICAgIHMtPmhlYWQgICA9IChQb3NmICopICBaQUxMT0Moc3RybSwgcy0+
aGFzaF9zaXplLCBzaXplb2YoUG9zKSk7Ci0KLSAgICBzLT5saXRfYnVmc2l6ZSA9IDEgPDwgKG1l
bUxldmVsICsgNik7IC8qIDE2SyBlbGVtZW50cyBieSBkZWZhdWx0ICovCi0KLSAgICBvdmVybGF5
ID0gKHVzaGYgKikgWkFMTE9DKHN0cm0sIHMtPmxpdF9idWZzaXplLCBzaXplb2YodXNoKSsyKTsK
LSAgICBzLT5wZW5kaW5nX2J1ZiA9ICh1Y2hmICopIG92ZXJsYXk7Ci0gICAgcy0+cGVuZGluZ19i
dWZfc2l6ZSA9ICh1bGcpcy0+bGl0X2J1ZnNpemUgKiAoc2l6ZW9mKHVzaCkrMkwpOwotCi0gICAg
aWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9
PSBaX05VTEwgfHwKLSAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAg
IHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKLSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVS
Ul9NU0coWl9NRU1fRVJST1IpOwotICAgICAgICBkZWZsYXRlRW5kIChzdHJtKTsKLSAgICAgICAg
cmV0dXJuIFpfTUVNX0VSUk9SOwotICAgIH0KLSAgICBzLT5kX2J1ZiA9IG92ZXJsYXkgKyBzLT5s
aXRfYnVmc2l6ZS9zaXplb2YodXNoKTsKLSAgICBzLT5sX2J1ZiA9IHMtPnBlbmRpbmdfYnVmICsg
KDErc2l6ZW9mKHVzaCkpKnMtPmxpdF9idWZzaXplOwotCi0gICAgcy0+bGV2ZWwgPSBsZXZlbDsK
LSAgICBzLT5zdHJhdGVneSA9IHN0cmF0ZWd5OwotICAgIHMtPm1ldGhvZCA9IChCeXRlKW1ldGhv
ZDsKLQotICAgIHJldHVybiBkZWZsYXRlUmVzZXQoc3RybSk7Ci19Ci0KLS8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVTZXREaWN0aW9uYXJ5IChzdHJtLCBkaWN0aW9u
YXJ5LCBkaWN0TGVuZ3RoKQotICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIGNvbnN0IEJ5dGVmICpk
aWN0aW9uYXJ5OwotICAgIHVJbnQgIGRpY3RMZW5ndGg7Ci17Ci0gICAgZGVmbGF0ZV9zdGF0ZSAq
czsKLSAgICB1SW50IGxlbmd0aCA9IGRpY3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3Mg
aGFzaF9oZWFkID0gMDsKLQotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9
PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwgfHwKLSAgICAgICAgc3RybS0+c3RhdGUt
PndyYXAgPT0gMiB8fAotICAgICAgICAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSAmJiBzdHJtLT5z
dGF0ZS0+c3RhdHVzICE9IElOSVRfU1RBVEUpKQotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJS
T1I7Ci0KLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndyYXApCi0gICAgICAgIHN0
cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7
Ci0KLSAgICBpZiAobGVuZ3RoIDwgTUlOX01BVENIKSByZXR1cm4gWl9PSzsKLSAgICBpZiAobGVu
Z3RoID4gTUFYX0RJU1QocykpIHsKLSAgICAgICAgbGVuZ3RoID0gTUFYX0RJU1Qocyk7Ci0gICAg
ICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIGxlbmd0aDsgLyogdXNlIHRoZSB0YWlsIG9m
IHRoZSBkaWN0aW9uYXJ5ICovCi0gICAgfQotICAgIHptZW1jcHkocy0+d2luZG93LCBkaWN0aW9u
YXJ5LCBsZW5ndGgpOwotICAgIHMtPnN0cnN0YXJ0ID0gbGVuZ3RoOwotICAgIHMtPmJsb2NrX3N0
YXJ0ID0gKGxvbmcpbGVuZ3RoOwotCi0gICAgLyogSW5zZXJ0IGFsbCBzdHJpbmdzIGluIHRoZSBo
YXNoIHRhYmxlIChleGNlcHQgZm9yIHRoZSBsYXN0IHR3byBieXRlcykuCi0gICAgICogcy0+bG9v
a2FoZWFkIHN0YXlzIG51bGwsIHNvIHMtPmluc19oIHdpbGwgYmUgcmVjb21wdXRlZCBhdCB0aGUg
bmV4dAotICAgICAqIGNhbGwgb2YgZmlsbF93aW5kb3cuCi0gICAgICovCi0gICAgcy0+aW5zX2gg
PSBzLT53aW5kb3dbMF07Ci0gICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1sx
XSk7Ci0gICAgZm9yIChuID0gMDsgbiA8PSBsZW5ndGggLSBNSU5fTUFUQ0g7IG4rKykgewotICAg
ICAgICBJTlNFUlRfU1RSSU5HKHMsIG4sIGhhc2hfaGVhZCk7Ci0gICAgfQotICAgIGlmIChoYXNo
X2hlYWQpIGhhc2hfaGVhZCA9IDA7ICAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCi0gICAg
cmV0dXJuIFpfT0s7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRl
ZmxhdGVSZXNldCAoc3RybSkKLSAgICB6X3N0cmVhbXAgc3RybTsKLXsKLSAgICBkZWZsYXRlX3N0
YXRlICpzOwotCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVM
TCB8fAotICAgICAgICBzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCB8fCBzdHJtLT56ZnJl
ZSA9PSAoZnJlZV9mdW5jKTApIHsKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAg
IH0KLQotICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gMDsKLSAgICBzdHJt
LT5tc2cgPSBaX05VTEw7IC8qIHVzZSB6ZnJlZSBpZiB3ZSBldmVyIGFsbG9jYXRlIG1zZyBkeW5h
bWljYWxseSAqLwotICAgIHN0cm0tPmRhdGFfdHlwZSA9IFpfVU5LTk9XTjsKLQotICAgIHMgPSAo
ZGVmbGF0ZV9zdGF0ZSAqKXN0cm0tPnN0YXRlOwotICAgIHMtPnBlbmRpbmcgPSAwOwotICAgIHMt
PnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7Ci0KLSAgICBpZiAocy0+d3JhcCA8IDApIHsK
LSAgICAgICAgcy0+d3JhcCA9IC1zLT53cmFwOyAvKiB3YXMgbWFkZSBuZWdhdGl2ZSBieSBkZWZs
YXRlKC4uLiwgWl9GSU5JU0gpOyAqLwotICAgIH0KLSAgICBzLT5zdGF0dXMgPSBzLT53cmFwID8g
SU5JVF9TVEFURSA6IEJVU1lfU1RBVEU7Ci0gICAgc3RybS0+YWRsZXIgPQotI2lmZGVmIEdaSVAK
LSAgICAgICAgcy0+d3JhcCA9PSAyID8gY3JjMzIoMEwsIFpfTlVMTCwgMCkgOgotI2VuZGlmCi0g
ICAgICAgIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgcy0+bGFzdF9mbHVzaCA9IFpfTk9f
RkxVU0g7Ci0KLSAgICBfdHJfaW5pdChzKTsKLSAgICBsbV9pbml0KHMpOwotCi0gICAgcmV0dXJu
IFpfT0s7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVT
ZXRIZWFkZXIgKHN0cm0sIGhlYWQpCi0gICAgel9zdHJlYW1wIHN0cm07Ci0gICAgZ3pfaGVhZGVy
cCBoZWFkOwotewotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05V
TEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBpZiAoc3RybS0+c3RhdGUtPndyYXAgIT0g
MikgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0cm0tPnN0YXRlLT5nemhlYWQgPSBoZWFk
OwotICAgIHJldHVybiBaX09LOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1pbnQgWkVY
UE9SVCBkZWZsYXRlUHJpbWUgKHN0cm0sIGJpdHMsIHZhbHVlKQotICAgIHpfc3RyZWFtcCBzdHJt
OwotICAgIGludCBiaXRzOwotICAgIGludCB2YWx1ZTsKLXsKLSAgICBpZiAoc3RybSA9PSBaX05V
TEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAg
c3RybS0+c3RhdGUtPmJpX3ZhbGlkID0gYml0czsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfYnVmID0g
KHVzaCkodmFsdWUgJiAoKDEgPDwgYml0cykgLSAxKSk7Ci0gICAgcmV0dXJuIFpfT0s7Ci19Ci0K
LS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVQYXJhbXMoc3RybSwg
bGV2ZWwsIHN0cmF0ZWd5KQotICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIGludCBsZXZlbDsKLSAg
ICBpbnQgc3RyYXRlZ3k7Ci17Ci0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjb21wcmVzc19m
dW5jIGZ1bmM7Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoc3RybSA9PSBaX05VTEwg
fHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgcyA9
IHN0cm0tPnN0YXRlOwotCi0jaWZkZWYgRkFTVEVTVAotICAgIGlmIChsZXZlbCAhPSAwKSBsZXZl
bCA9IDE7Ci0jZWxzZQotICAgIGlmIChsZXZlbCA9PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIGxl
dmVsID0gNjsKLSNlbmRpZgotICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0
ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFN
X0VSUk9SOwotICAgIH0KLSAgICBmdW5jID0gY29uZmlndXJhdGlvbl90YWJsZVtzLT5sZXZlbF0u
ZnVuYzsKLQotICAgIGlmIChmdW5jICE9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLmZ1bmMg
JiYgc3RybS0+dG90YWxfaW4gIT0gMCkgewotICAgICAgICAvKiBGbHVzaCB0aGUgbGFzdCBidWZm
ZXI6ICovCi0gICAgICAgIGVyciA9IGRlZmxhdGUoc3RybSwgWl9QQVJUSUFMX0ZMVVNIKTsKLSAg
ICB9Ci0gICAgaWYgKHMtPmxldmVsICE9IGxldmVsKSB7Ci0gICAgICAgIHMtPmxldmVsID0gbGV2
ZWw7Ci0gICAgICAgIHMtPm1heF9sYXp5X21hdGNoICAgPSBjb25maWd1cmF0aW9uX3RhYmxlW2xl
dmVsXS5tYXhfbGF6eTsKLSAgICAgICAgcy0+Z29vZF9tYXRjaCAgICAgICA9IGNvbmZpZ3VyYXRp
b25fdGFibGVbbGV2ZWxdLmdvb2RfbGVuZ3RoOwotICAgICAgICBzLT5uaWNlX21hdGNoICAgICAg
ID0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0ubmljZV9sZW5ndGg7Ci0gICAgICAgIHMtPm1h
eF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5tYXhfY2hhaW47Ci0g
ICAgfQotICAgIHMtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQot
LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZVR1bmUoc3RybSwgZ29v
ZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluKQotICAgIHpfc3RyZWFt
cCBzdHJtOwotICAgIGludCBnb29kX2xlbmd0aDsKLSAgICBpbnQgbWF4X2xhenk7Ci0gICAgaW50
IG5pY2VfbGVuZ3RoOwotICAgIGludCBtYXhfY2hhaW47Ci17Ci0gICAgZGVmbGF0ZV9zdGF0ZSAq
czsKLQotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJl
dHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgcy0+Z29vZF9t
YXRjaCA9IGdvb2RfbGVuZ3RoOwotICAgIHMtPm1heF9sYXp5X21hdGNoID0gbWF4X2xhenk7Ci0g
ICAgcy0+bmljZV9tYXRjaCA9IG5pY2VfbGVuZ3RoOwotICAgIHMtPm1heF9jaGFpbl9sZW5ndGgg
PSBtYXhfY2hhaW47Ci0gICAgcmV0dXJuIFpfT0s7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSAqIEZvciB0aGUgZGVmYXVsdCB3aW5kb3dCaXRzIG9mIDE1IGFuZCBtZW1MZXZlbCBvZiA4LCB0
aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqIGEgY2xvc2UgdG8gZXhhY3QsIGFzIHdlbGwgYXMgc21h
bGwsIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUuCi0gKiBUaGV5IGFyZSBjb2Rl
ZCBhcyBjb25zdGFudHMgaGVyZSBmb3IgYSByZWFzb24tLWlmIHRoZSAjZGVmaW5lJ3MgYXJlCi0g
KiBjaGFuZ2VkLCB0aGVuIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2hhbmdlZCBhcyB3ZWxs
LiAgVGhlIHJldHVybgotICogdmFsdWUgZm9yIDE1IGFuZCA4IG9ubHkgd29ya3MgZm9yIHRob3Nl
IGV4YWN0IHNldHRpbmdzLgotICoKLSAqIEZvciBhbnkgc2V0dGluZyBvdGhlciB0aGFuIHRob3Nl
IGRlZmF1bHRzIGZvciB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbCwKLSAqIHRoZSB2YWx1ZSByZXR1
cm5lZCBpcyBhIGNvbnNlcnZhdGl2ZSB3b3JzdCBjYXNlIGZvciB0aGUgbWF4aW11bSBleHBhbnNp
b24KLSAqIHJlc3VsdGluZyBmcm9tIHVzaW5nIGZpeGVkIGJsb2NrcyBpbnN0ZWFkIG9mIHN0b3Jl
ZCBibG9ja3MsIHdoaWNoIGRlZmxhdGUKLSAqIGNhbiBlbWl0IG9uIGNvbXByZXNzZWQgZGF0YSBm
b3Igc29tZSBjb21iaW5hdGlvbnMgb2YgdGhlIHBhcmFtZXRlcnMuCi0gKgotICogVGhpcyBmdW5j
dGlvbiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG8gcHJvdmlkZSBjbG9zZXIgdXBwZXIg
Ym91bmRzCi0gKiBmb3IgZXZlcnkgY29tYmluYXRpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2
ZWwsIGFzIHdlbGwgYXMgd3JhcC4KLSAqIEJ1dCBldmVuIHRoZSBjb25zZXJ2YXRpdmUgdXBwZXIg
Ym91bmQgb2YgYWJvdXQgMTQlIGV4cGFuc2lvbiBkb2VzIG5vdAotICogc2VlbSBvbmVyb3VzIGZv
ciBvdXRwdXQgYnVmZmVyIGFsbG9jYXRpb24uCi0gKi8KLXVMb25nIFpFWFBPUlQgZGVmbGF0ZUJv
dW5kKHN0cm0sIHNvdXJjZUxlbikKLSAgICB6X3N0cmVhbXAgc3RybTsKLSAgICB1TG9uZyBzb3Vy
Y2VMZW47Ci17Ci0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1TG9uZyBkZXN0TGVuOwotCi0g
ICAgLyogY29uc2VydmF0aXZlIHVwcGVyIGJvdW5kICovCi0gICAgZGVzdExlbiA9IHNvdXJjZUxl
biArCi0gICAgICAgICAgICAgICgoc291cmNlTGVuICsgNykgPj4gMykgKyAoKHNvdXJjZUxlbiAr
IDYzKSA+PiA2KSArIDExOwotCi0gICAgLyogaWYgY2FuJ3QgZ2V0IHBhcmFtZXRlcnMsIHJldHVy
biBjb25zZXJ2YXRpdmUgYm91bmQgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+
c3RhdGUgPT0gWl9OVUxMKQotICAgICAgICByZXR1cm4gZGVzdExlbjsKLQotICAgIC8qIGlmIG5v
dCBkZWZhdWx0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgKi8KLSAgICBz
ID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndfYml0cyAhPSAxNSB8fCBzLT5oYXNoX2JpdHMg
IT0gOCArIDcpCi0gICAgICAgIHJldHVybiBkZXN0TGVuOwotCi0gICAgLyogZGVmYXVsdCBzZXR0
aW5nczogcmV0dXJuIHRpZ2h0IGJvdW5kIGZvciB0aGF0IGNhc2UgKi8KLSAgICByZXR1cm4gY29t
cHJlc3NCb3VuZChzb3VyY2VMZW4pOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQdXQg
YSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQgdmFsdWUgaXMgcHV0IGlu
IE1TQiBvcmRlci4KLSAqIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzdGF0ZSBpcyBjb3JyZWN0
IGFuZCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbgotICogcGVuZGluZ19idWYuCi0gKi8KLWxvY2Fs
IHZvaWQgcHV0U2hvcnRNU0IgKHMsIGIpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50
IGI7Ci17Ci0gICAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpOwotICAgIHB1dF9ieXRlKHMs
IChCeXRlKShiICYgMHhmZikpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGbHVzaCBh
cyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlLiBBbGwgZGVmbGF0ZSgpIG91dHB1dCBn
b2VzCi0gKiB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMgbWF5IHdp
c2ggdG8gbW9kaWZ5IGl0Ci0gKiB0byBhdm9pZCBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+bmV4
dF9vdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGludG8gaXQuCi0gKiAoU2VlIGFsc28gcmVhZF9idWYo
KSkuCi0gKi8KLWxvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyhzdHJtKQotICAgIHpfc3RyZWFtcCBz
dHJtOwotewotICAgIHVuc2lnbmVkIGxlbiA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOwotCi0gICAg
aWYgKGxlbiA+IHN0cm0tPmF2YWlsX291dCkgbGVuID0gc3RybS0+YXZhaWxfb3V0OwotICAgIGlm
IChsZW4gPT0gMCkgcmV0dXJuOwotCi0gICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgc3RybS0+
c3RhdGUtPnBlbmRpbmdfb3V0LCBsZW4pOwotICAgIHN0cm0tPm5leHRfb3V0ICArPSBsZW47Ci0g
ICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ICArPSBsZW47Ci0gICAgc3RybS0+dG90YWxfb3V0
ICs9IGxlbjsKLSAgICBzdHJtLT5hdmFpbF9vdXQgIC09IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+
cGVuZGluZyAtPSBsZW47Ci0gICAgaWYgKHN0cm0tPnN0YXRlLT5wZW5kaW5nID09IDApIHsKLSAg
ICAgICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ID0gc3RybS0+c3RhdGUtPnBlbmRpbmdfYnVm
OwotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0
ZSAoc3RybSwgZmx1c2gpCi0gICAgel9zdHJlYW1wIHN0cm07Ci0gICAgaW50IGZsdXNoOwotewot
ICAgIGludCBvbGRfZmx1c2g7IC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBk
ZWZsYXRlIGNhbGwgKi8KLSAgICBkZWZsYXRlX3N0YXRlICpzOwotCi0gICAgaWYgKHN0cm0gPT0g
Wl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBmbHVzaCA+IFpfRklO
SVNIIHx8IGZsdXNoIDwgMCkgewotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAg
fQotICAgIHMgPSBzdHJtLT5zdGF0ZTsKLQotICAgIGlmIChzdHJtLT5uZXh0X291dCA9PSBaX05V
TEwgfHwKLSAgICAgICAgKHN0cm0tPm5leHRfaW4gPT0gWl9OVUxMICYmIHN0cm0tPmF2YWlsX2lu
ICE9IDApIHx8Ci0gICAgICAgIChzLT5zdGF0dXMgPT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9
IFpfRklOSVNIKSkgewotICAgICAgICBFUlJfUkVUVVJOKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTsK
LSAgICB9Ci0gICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwKSBFUlJfUkVUVVJOKHN0cm0sIFpf
QlVGX0VSUk9SKTsKLQotICAgIHMtPnN0cm0gPSBzdHJtOyAvKiBqdXN0IGluIGNhc2UgKi8KLSAg
ICBvbGRfZmx1c2ggPSBzLT5sYXN0X2ZsdXNoOwotICAgIHMtPmxhc3RfZmx1c2ggPSBmbHVzaDsK
LQotICAgIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi8KLSAgICBpZiAocy0+c3RhdHVzID09IElOSVRf
U1RBVEUpIHsKLSNpZmRlZiBHWklQCi0gICAgICAgIGlmIChzLT53cmFwID09IDIpIHsKLSAgICAg
ICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgICAgICBw
dXRfYnl0ZShzLCAzMSk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCAxMzkpOwotICAgICAgICAg
ICAgcHV0X2J5dGUocywgOCk7Ci0gICAgICAgICAgICBpZiAocy0+Z3poZWFkID09IE5VTEwpIHsK
LSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0
ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAg
ICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAg
ICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5sZXZlbCA9PSA5ID8gMiA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVs
IDwgMiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7Ci0gICAgICAgICAg
ICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7Ci0gICAgICAgICAgICAgICAgcy0+c3RhdHVzID0g
QlVTWV9TVEFURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHB1dF9ieXRlKHMsIChzLT5nemhlYWQtPnRleHQgPyAxIDogMCkgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmhjcmMgPyAyIDogMCkgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmV4dHJhID09IFpfTlVMTCA/IDAgOiA0KSAr
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+bmFtZSA9PSBaX05VTEwg
PyAwIDogOCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmNvbW1l
bnQgPT0gWl9OVUxMID8gMCA6IDE2KQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg
ICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkocy0+Z3poZWFkLT50aW1lICYgMHhmZikpOwot
ICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDgp
ICYgMHhmZikpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFk
LT50aW1lID4+IDE2KSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0
ZSkoKHMtPmd6aGVhZC0+dGltZSA+PiAyNCkgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgcHV0
X2J5dGUocywgcy0+bGV2ZWwgPT0gOSA/IDIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA0IDogMCkpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRl
KHMsIHMtPmd6aGVhZC0+b3MgJiAweGZmKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+Z3poZWFk
LT5leHRyYSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6
aGVhZC0+ZXh0cmFfbGVuICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMs
IChzLT5nemhlYWQtPmV4dHJhX2xlbiA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKQotICAgICAgICAgICAgICAgICAg
ICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1ZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nKTsKLSAgICAgICAg
ICAgICAgICBzLT5nemluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBzLT5zdGF0dXMgPSBFWFRS
QV9TVEFURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0jZW5kaWYK
LSAgICAgICAgewotICAgICAgICAgICAgdUludCBoZWFkZXIgPSAoWl9ERUZMQVRFRCArICgocy0+
d19iaXRzLTgpPDw0KSkgPDwgODsKLSAgICAgICAgICAgIHVJbnQgbGV2ZWxfZmxhZ3M7Ci0KLSAg
ICAgICAgICAgIGlmIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8
IDIpCi0gICAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwOwotICAgICAgICAgICAgZWxzZSBp
ZiAocy0+bGV2ZWwgPCA2KQotICAgICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHMtPmxldmVsID09IDYpCi0gICAgICAgICAgICAgICAgbGV2ZWxfZmxh
Z3MgPSAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0g
MzsKLSAgICAgICAgICAgIGhlYWRlciB8PSAobGV2ZWxfZmxhZ3MgPDwgNik7Ci0gICAgICAgICAg
ICBpZiAocy0+c3Ryc3RhcnQgIT0gMCkgaGVhZGVyIHw9IFBSRVNFVF9ESUNUOwotICAgICAgICAg
ICAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTsKLQotICAgICAgICAgICAgcy0+c3RhdHVz
ID0gQlVTWV9TVEFURTsKLSAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsIGhlYWRlcik7Ci0KLSAg
ICAgICAgICAgIC8qIFNhdmUgdGhlIGFkbGVyMzIgb2YgdGhlIHByZXNldCBkaWN0aW9uYXJ5OiAq
LwotICAgICAgICAgICAgaWYgKHMtPnN0cnN0YXJ0ICE9IDApIHsKLSAgICAgICAgICAgICAgICBw
dXRTaG9ydE1TQihzLCAodUludCkoc3RybS0+YWRsZXIgPj4gMTYpKTsKLSAgICAgICAgICAgICAg
ICBwdXRTaG9ydE1TQihzLCAodUludCkoc3RybS0+YWRsZXIgJiAweGZmZmYpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsK
LSAgICAgICAgfQotICAgIH0KLSNpZmRlZiBHWklQCi0gICAgaWYgKHMtPnN0YXR1cyA9PSBFWFRS
QV9TVEFURSkgewotICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBOVUxMKSB7Ci0gICAg
ICAgICAgICB1SW50IGJlZyA9IHMtPnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRh
dGUgY3JjICovCi0KLSAgICAgICAgICAgIHdoaWxlIChzLT5nemluZGV4IDwgKHMtPmd6aGVhZC0+
ZXh0cmFfbGVuICYgMHhmZmZmKSkgewotICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nID09
IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmd6aGVh
ZC0+aGNyYyAmJiBzLT5wZW5kaW5nID4gYmVnKQotICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
bS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGluZ19idWYgKyBiZWcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcgLSBiZWcp
OwotICAgICAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwotICAgICAgICAgICAg
ICAgICAgICBiZWcgPSBzLT5wZW5kaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAocy0+cGVu
ZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6
aGVhZC0+ZXh0cmFbcy0+Z3ppbmRleF0pOwotICAgICAgICAgICAgICAgIHMtPmd6aW5kZXgrKzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMgJiYgcy0+cGVu
ZGluZyA+IGJlZykKLSAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFk
bGVyLCBzLT5wZW5kaW5nX2J1ZiArIGJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHMtPnBlbmRpbmcgLSBiZWcpOwotICAgICAgICAgICAgaWYgKHMtPmd6aW5kZXggPT0g
cy0+Z3poZWFkLT5leHRyYV9sZW4pIHsKLSAgICAgICAgICAgICAgICBzLT5nemluZGV4ID0gMDsK
LSAgICAgICAgICAgICAgICBzLT5zdGF0dXMgPSBOQU1FX1NUQVRFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHMtPnN0YXR1cyA9IE5BTUVfU1RB
VEU7Ci0gICAgfQotICAgIGlmIChzLT5zdGF0dXMgPT0gTkFNRV9TVEFURSkgewotICAgICAgICBp
ZiAocy0+Z3poZWFkLT5uYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHVJbnQgYmVnID0gcy0+
cGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KLSAgICAgICAgICAg
IGludCB2YWw7Ci0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAocy0+cGVu
ZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
LT5nemhlYWQtPmhjcmMgJiYgcy0+cGVuZGluZyA+IGJlZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmICsgYmVn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5n
IC0gYmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKLSAgICAg
ICAgICAgICAgICAgICAgYmVnID0gcy0+cGVuZGluZzsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHMtPnBlbmRpbmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbCA9IHMt
Pmd6aGVhZC0+bmFtZVtzLT5nemluZGV4KytdOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMs
IHZhbCk7Ci0gICAgICAgICAgICB9IHdoaWxlICh2YWwgIT0gMCk7Ci0gICAgICAgICAgICBpZiAo
cy0+Z3poZWFkLT5oY3JjICYmIHMtPnBlbmRpbmcgPiBiZWcpCi0gICAgICAgICAgICAgICAgc3Ry
bS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGluZ19idWYgKyBiZWcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gYmVnKTsKLSAgICAg
ICAgICAgIGlmICh2YWwgPT0gMCkgewotICAgICAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOwot
ICAgICAgICAgICAgICAgIHMtPnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcy0+c3RhdHVzID0gQ09NTUVO
VF9TVEFURTsKLSAgICB9Ci0gICAgaWYgKHMtPnN0YXR1cyA9PSBDT01NRU5UX1NUQVRFKSB7Ci0g
ICAgICAgIGlmIChzLT5nemhlYWQtPmNvbW1lbnQgIT0gTlVMTCkgewotICAgICAgICAgICAgdUlu
dCBiZWcgPSBzLT5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwot
ICAgICAgICAgICAgaW50IHZhbDsKLQotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IGlmIChzLT5wZW5kaW5nID09IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYyAmJiBzLT5wZW5kaW5nID4gYmVnKQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGlu
Z19idWYgKyBiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMtPnBlbmRpbmcgLSBiZWcpOwotICAgICAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0
cm0pOwotICAgICAgICAgICAgICAgICAgICBiZWcgPSBzLT5wZW5kaW5nOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YWwgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdmFsID0gcy0+Z3poZWFkLT5jb21tZW50W3MtPmd6aW5kZXgrK107Ci0gICAgICAgICAgICAg
ICAgcHV0X2J5dGUocywgdmFsKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHZhbCAhPSAwKTsKLSAg
ICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMgJiYgcy0+cGVuZGluZyA+IGJlZykKLSAgICAg
ICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1
ZiArIGJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcg
LSBiZWcpOwotICAgICAgICAgICAgaWYgKHZhbCA9PSAwKQotICAgICAgICAgICAgICAgIHMtPnN0
YXR1cyA9IEhDUkNfU1RBVEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cy0+c3RhdHVzID0gSENSQ19TVEFURTsKLSAgICB9Ci0gICAgaWYgKHMtPnN0YXR1cyA9PSBIQ1JD
X1NUQVRFKSB7Ci0gICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpIHsKLSAgICAgICAgICAgIGlm
IChzLT5wZW5kaW5nICsgMiA+IHMtPnBlbmRpbmdfYnVmX3NpemUpCi0gICAgICAgICAgICAgICAg
Zmx1c2hfcGVuZGluZyhzdHJtKTsKLSAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICsgMiA8PSBz
LT5wZW5kaW5nX2J1Zl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUp
KHN0cm0tPmFkbGVyICYgMHhmZikpOwotICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRl
KSgoc3RybS0+YWRsZXIgPj4gOCkgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgc3RybS0+YWRs
ZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgICAgICBzLT5zdGF0dXMgPSBC
VVNZX1NUQVRFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHMtPnN0YXR1cyA9IEJVU1lfU1RBVEU7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiBG
bHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlICovCi0gICAgaWYgKHMtPnBl
bmRpbmcgIT0gMCkgewotICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwotICAgICAgICBpZiAo
c3RybS0+YXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBp
cyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGgKLSAgICAgICAgICAgICAqIG1v
cmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kCi0gICAg
ICAgICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGlu
ZyB0byBkbywKLSAgICAgICAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRp
b24gc28gbWFrZSBzdXJlIHdlCi0gICAgICAgICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBC
VUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6Ci0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKLSAgICAgICAgICAgIHJldHVybiBaX09LOwotICAg
ICAgICB9Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGFuZCBh
dm9pZCBkdXBsaWNhdGUgY29uc2VjdXRpdmUKLSAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQg
YW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAotICAgICAqIHJldHVybmlu
ZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KLSAgICAgKi8KLSAgICB9IGVs
c2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZmx1c2ggPD0gb2xkX2ZsdXNoICYmCi0gICAg
ICAgICAgICAgICBmbHVzaCAhPSBaX0ZJTklTSCkgewotICAgICAgICBFUlJfUkVUVVJOKHN0cm0s
IFpfQlVGX0VSUk9SKTsKLSAgICB9Ci0KLSAgICAvKiBVc2VyIG11c3Qgbm90IHByb3ZpZGUgbW9y
ZSBpbnB1dCBhZnRlciB0aGUgZmlyc3QgRklOSVNIOiAqLwotICAgIGlmIChzLT5zdGF0dXMgPT0g
RklOSVNIX1NUQVRFICYmIHN0cm0tPmF2YWlsX2luICE9IDApIHsKLSAgICAgICAgRVJSX1JFVFVS
TihzdHJtLCBaX0JVRl9FUlJPUik7Ci0gICAgfQotCi0gICAgLyogU3RhcnQgYSBuZXcgYmxvY2sg
b3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLgotICAgICAqLwotICAgIGlmIChzdHJtLT5hdmFp
bF9pbiAhPSAwIHx8IHMtPmxvb2thaGVhZCAhPSAwIHx8Ci0gICAgICAgIChmbHVzaCAhPSBaX05P
X0ZMVVNIICYmIHMtPnN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpKSB7Ci0gICAgICAgIGJsb2NrX3N0
YXRlIGJzdGF0ZTsKLQotICAgICAgICBic3RhdGUgPSAoKihjb25maWd1cmF0aW9uX3RhYmxlW3Mt
PmxldmVsXS5mdW5jKSkocywgZmx1c2gpOwotCi0gICAgICAgIGlmIChic3RhdGUgPT0gZmluaXNo
X3N0YXJ0ZWQgfHwgYnN0YXRlID09IGZpbmlzaF9kb25lKSB7Ci0gICAgICAgICAgICBzLT5zdGF0
dXMgPSBGSU5JU0hfU1RBVEU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJzdGF0ZSA9PSBuZWVk
X21vcmUgfHwgYnN0YXRlID09IGZpbmlzaF9zdGFydGVkKSB7Ci0gICAgICAgICAgICBpZiAoc3Ry
bS0+YXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7
IC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqLwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIFpfT0s7Ci0gICAgICAgICAgICAvKiBJZiBmbHVzaCAhPSBa
X05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsCi0gICAgICAgICAgICAg
KiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ug
c3VyZQotICAgICAgICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRv
bid0IGhhdmUgdG8gb3V0cHV0IGFuCi0gICAgICAgICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0
aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzbwotICAgICAgICAgICAgICog
ZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBt
b3N0Ci0gICAgICAgICAgICAgKiBvbmUgZW1wdHkgYmxvY2suCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgfQotICAgICAgICBpZiAoYnN0YXRlID09IGJsb2NrX2RvbmUpIHsKLSAgICAgICAgICAg
IGlmIChmbHVzaCA9PSBaX1BBUlRJQUxfRkxVU0gpIHsKLSAgICAgICAgICAgICAgICBfdHJfYWxp
Z24ocyk7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvKiBGVUxMX0ZMVVNIIG9yIFNZTkNfRkxVU0gg
Ki8KLSAgICAgICAgICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIChjaGFyKikwLCAwTCwgMCk7
Ci0gICAgICAgICAgICAgICAgLyogRm9yIGEgZnVsbCBmbHVzaCwgdGhpcyBlbXB0eSBibG9jayB3
aWxsIGJlIHJlY29nbml6ZWQKLSAgICAgICAgICAgICAgICAgKiBhcyBhIHNwZWNpYWwgbWFya2Vy
IGJ5IGluZmxhdGVfc3luYygpLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAg
IGlmIChmbHVzaCA9PSBaX0ZVTExfRkxVU0gpIHsKLSAgICAgICAgICAgICAgICAgICAgQ0xFQVJf
SEFTSChzKTsgICAgICAgICAgICAgLyogZm9yZ2V0IGhpc3RvcnkgKi8KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwotICAg
ICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgICAgICAgIHMtPmxh
c3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3Zl
ICovCi0gICAgICAgICAgICAgIHJldHVybiBaX09LOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIEFzc2VydChzdHJtLT5hdmFpbF9vdXQgPiAwLCAiYnVnMiIpOwotCi0gICAg
aWYgKGZsdXNoICE9IFpfRklOSVNIKSByZXR1cm4gWl9PSzsKLSAgICBpZiAocy0+d3JhcCA8PSAw
KSByZXR1cm4gWl9TVFJFQU1fRU5EOwotCi0gICAgLyogV3JpdGUgdGhlIHRyYWlsZXIgKi8KLSNp
ZmRlZiBHWklQCi0gICAgaWYgKHMtPndyYXAgPT0gMikgewotICAgICAgICBwdXRfYnl0ZShzLCAo
Qnl0ZSkoc3RybS0+YWRsZXIgJiAweGZmKSk7Ci0gICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgo
c3RybS0+YWRsZXIgPj4gOCkgJiAweGZmKSk7Ci0gICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgo
c3RybS0+YWRsZXIgPj4gMTYpICYgMHhmZikpOwotICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSko
KHN0cm0tPmFkbGVyID4+IDI0KSAmIDB4ZmYpKTsKLSAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUp
KHN0cm0tPnRvdGFsX2luICYgMHhmZikpOwotICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0
cm0tPnRvdGFsX2luID4+IDgpICYgMHhmZikpOwotICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSko
KHN0cm0tPnRvdGFsX2luID4+IDE2KSAmIDB4ZmYpKTsKLSAgICAgICAgcHV0X2J5dGUocywgKEJ5
dGUpKChzdHJtLT50b3RhbF9pbiA+PiAyNCkgJiAweGZmKSk7Ci0gICAgfQotICAgIGVsc2UKLSNl
bmRpZgotICAgIHsKLSAgICAgICAgcHV0U2hvcnRNU0IocywgKHVJbnQpKHN0cm0tPmFkbGVyID4+
IDE2KSk7Ci0gICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciAmIDB4ZmZm
ZikpOwotICAgIH0KLSAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwotICAgIC8qIElmIGF2YWlsX291
dCBpcyB6ZXJvLCB0aGUgYXBwbGljYXRpb24gd2lsbCBjYWxsIGRlZmxhdGUgYWdhaW4KLSAgICAg
KiB0byBmbHVzaCB0aGUgcmVzdC4KLSAgICAgKi8KLSAgICBpZiAocy0+d3JhcCA+IDApIHMtPndy
YXAgPSAtcy0+d3JhcDsgLyogd3JpdGUgdGhlIHRyYWlsZXIgb25seSBvbmNlISAqLwotICAgIHJl
dHVybiBzLT5wZW5kaW5nICE9IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EOwotfQotCi0vKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICovCi1pbnQgWkVYUE9SVCBkZWZsYXRlRW5kIChzdHJtKQotICAgIHpfc3Ry
ZWFtcCBzdHJtOwotewotICAgIGludCBzdGF0dXM7Ci0KLSAgICBpZiAoc3RybSA9PSBaX05VTEwg
fHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBz
dGF0dXMgPSBzdHJtLT5zdGF0ZS0+c3RhdHVzOwotICAgIGlmIChzdGF0dXMgIT0gSU5JVF9TVEFU
RSAmJgotICAgICAgICBzdGF0dXMgIT0gRVhUUkFfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9
IE5BTUVfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IENPTU1FTlRfU1RBVEUgJiYKLSAgICAg
ICAgc3RhdHVzICE9IEhDUkNfU1RBVEUgJiYKLSAgICAgICAgc3RhdHVzICE9IEJVU1lfU1RBVEUg
JiYKLSAgICAgICAgc3RhdHVzICE9IEZJTklTSF9TVEFURSkgewotICAgICAgcmV0dXJuIFpfU1RS
RUFNX0VSUk9SOwotICAgIH0KLQotICAgIC8qIERlYWxsb2NhdGUgaW4gcmV2ZXJzZSBvcmRlciBv
ZiBhbGxvY2F0aW9uczogKi8KLSAgICBUUllfRlJFRShzdHJtLCBzdHJtLT5zdGF0ZS0+cGVuZGlu
Z19idWYpOwotICAgIFRSWV9GUkVFKHN0cm0sIHN0cm0tPnN0YXRlLT5oZWFkKTsKLSAgICBUUllf
RlJFRShzdHJtLCBzdHJtLT5zdGF0ZS0+cHJldik7Ci0gICAgVFJZX0ZSRUUoc3RybSwgc3RybS0+
c3RhdGUtPndpbmRvdyk7Ci0KLSAgICBaRlJFRShzdHJtLCBzdHJtLT5zdGF0ZSk7Ci0gICAgc3Ry
bS0+c3RhdGUgPSBaX05VTEw7Ci0KLSAgICByZXR1cm4gc3RhdHVzID09IEJVU1lfU1RBVEUgPyBa
X0RBVEFfRVJST1IgOiBaX09LOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5IHRo
ZSBzb3VyY2Ugc3RhdGUgdG8gdGhlIGRlc3RpbmF0aW9uIHN0YXRlLgotICogVG8gc2ltcGxpZnkg
dGhlIHNvdXJjZSwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAxNi1iaXQgTVNET1MgKHdoaWNo
Ci0gKiBkb2Vzbid0IGhhdmUgZW5vdWdoIG1lbW9yeSBhbnl3YXkgdG8gZHVwbGljYXRlIGNvbXBy
ZXNzaW9uIHN0YXRlcykuCi0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVDb3B5IChkZXN0LCBzb3Vy
Y2UpCi0gICAgel9zdHJlYW1wIGRlc3Q7Ci0gICAgel9zdHJlYW1wIHNvdXJjZTsKLXsKLSNpZmRl
ZiBNQVhTRUdfNjRLCi0gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICBkZWZs
YXRlX3N0YXRlICpkczsKLSAgICBkZWZsYXRlX3N0YXRlICpzczsKLSAgICB1c2hmICpvdmVybGF5
OwotCi0KLSAgICBpZiAoc291cmNlID09IFpfTlVMTCB8fCBkZXN0ID09IFpfTlVMTCB8fCBzb3Vy
Y2UtPnN0YXRlID09IFpfTlVMTCkgewotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0g
ICAgfQotCi0gICAgc3MgPSBzb3VyY2UtPnN0YXRlOwotCi0gICAgem1lbWNweShkZXN0LCBzb3Vy
Y2UsIHNpemVvZih6X3N0cmVhbSkpOwotCi0gICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxM
T0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKLSAgICBpZiAoZHMgPT0gWl9OVUxM
KSByZXR1cm4gWl9NRU1fRVJST1I7Ci0gICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFs
X3N0YXRlIEZBUiAqKSBkczsKLSAgICB6bWVtY3B5KGRzLCBzcywgc2l6ZW9mKGRlZmxhdGVfc3Rh
dGUpKTsKLSAgICBkcy0+c3RybSA9IGRlc3Q7Ci0KLSAgICBkcy0+d2luZG93ID0gKEJ5dGVmICop
IFpBTExPQyhkZXN0LCBkcy0+d19zaXplLCAyKnNpemVvZihCeXRlKSk7Ci0gICAgZHMtPnByZXYg
ICA9IChQb3NmICopICBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgc2l6ZW9mKFBvcykpOwotICAg
IGRzLT5oZWFkICAgPSAoUG9zZiAqKSAgWkFMTE9DKGRlc3QsIGRzLT5oYXNoX3NpemUsIHNpemVv
ZihQb3MpKTsKLSAgICBvdmVybGF5ID0gKHVzaGYgKikgWkFMTE9DKGRlc3QsIGRzLT5saXRfYnVm
c2l6ZSwgc2l6ZW9mKHVzaCkrMik7Ci0gICAgZHMtPnBlbmRpbmdfYnVmID0gKHVjaGYgKikgb3Zl
cmxheTsKLQotICAgIGlmIChkcy0+d2luZG93ID09IFpfTlVMTCB8fCBkcy0+cHJldiA9PSBaX05V
TEwgfHwgZHMtPmhlYWQgPT0gWl9OVUxMIHx8Ci0gICAgICAgIGRzLT5wZW5kaW5nX2J1ZiA9PSBa
X05VTEwpIHsKLSAgICAgICAgZGVmbGF0ZUVuZCAoZGVzdCk7Ci0gICAgICAgIHJldHVybiBaX01F
TV9FUlJPUjsKLSAgICB9Ci0gICAgLyogZm9sbG93aW5nIHptZW1jcHkgZG8gbm90IHdvcmsgZm9y
IDE2LWJpdCBNU0RPUyAqLwotICAgIHptZW1jcHkoZHMtPndpbmRvdywgc3MtPndpbmRvdywgZHMt
Pndfc2l6ZSAqIDIgKiBzaXplb2YoQnl0ZSkpOwotICAgIHptZW1jcHkoZHMtPnByZXYsIHNzLT5w
cmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOwotICAgIHptZW1jcHkoZHMtPmhlYWQsIHNz
LT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOwotICAgIHptZW1jcHkoZHMtPnBl
bmRpbmdfYnVmLCBzcy0+cGVuZGluZ19idWYsICh1SW50KWRzLT5wZW5kaW5nX2J1Zl9zaXplKTsK
LQotICAgIGRzLT5wZW5kaW5nX291dCA9IGRzLT5wZW5kaW5nX2J1ZiArIChzcy0+cGVuZGluZ19v
dXQgLSBzcy0+cGVuZGluZ19idWYpOwotICAgIGRzLT5kX2J1ZiA9IG92ZXJsYXkgKyBkcy0+bGl0
X2J1ZnNpemUvc2l6ZW9mKHVzaCk7Ci0gICAgZHMtPmxfYnVmID0gZHMtPnBlbmRpbmdfYnVmICsg
KDErc2l6ZW9mKHVzaCkpKmRzLT5saXRfYnVmc2l6ZTsKLQotICAgIGRzLT5sX2Rlc2MuZHluX3Ry
ZWUgPSBkcy0+ZHluX2x0cmVlOwotICAgIGRzLT5kX2Rlc2MuZHluX3RyZWUgPSBkcy0+ZHluX2R0
cmVlOwotICAgIGRzLT5ibF9kZXNjLmR5bl90cmVlID0gZHMtPmJsX3RyZWU7Ci0KLSAgICByZXR1
cm4gWl9PSzsKLSNlbmRpZiAvKiBNQVhTRUdfNjRLICovCi19Ci0KLS8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotICogUmVhZCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0s
IHVwZGF0ZSB0aGUgYWRsZXIzMgotICogYW5kIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkLiAg
QWxsIGRlZmxhdGUoKSBpbnB1dCBnb2VzIHRocm91Z2gKLSAqIHRoaXMgZnVuY3Rpb24gc28gc29t
ZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lkCi0gKiBhbGxvY2F0
aW5nIGEgbGFyZ2Ugc3RybS0+bmV4dF9pbiBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC4KLSAq
IChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLgotICovCi1sb2NhbCBpbnQgcmVhZF9idWYoc3Ry
bSwgYnVmLCBzaXplKQotICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIEJ5dGVmICpidWY7Ci0gICAg
dW5zaWduZWQgc2l6ZTsKLXsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5hdmFpbF9pbjsKLQot
ICAgIGlmIChsZW4gPiBzaXplKSBsZW4gPSBzaXplOwotICAgIGlmIChsZW4gPT0gMCkgcmV0dXJu
IDA7Ci0KLSAgICBzdHJtLT5hdmFpbF9pbiAgLT0gbGVuOwotCi0gICAgaWYgKHN0cm0tPnN0YXRl
LT53cmFwID09IDEpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVy
LCBzdHJtLT5uZXh0X2luLCBsZW4pOwotICAgIH0KLSNpZmRlZiBHWklQCi0gICAgZWxzZSBpZiAo
c3RybS0+c3RhdGUtPndyYXAgPT0gMikgewotICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0
cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOwotICAgIH0KLSNlbmRpZgotICAgIHptZW1j
cHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOwotICAgIHN0cm0tPm5leHRfaW4gICs9IGxlbjsK
LSAgICBzdHJtLT50b3RhbF9pbiArPSBsZW47Ci0KLSAgICByZXR1cm4gKGludClsZW47Ci19Ci0K
LS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSB0aGUgImxvbmdlc3QgbWF0Y2gi
IHJvdXRpbmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbQotICovCi1sb2NhbCB2b2lkIGxtX2luaXQg
KHMpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLXsKLSAgICBzLT53aW5kb3dfc2l6ZSA9ICh1bGcp
Mkwqcy0+d19zaXplOwotCi0gICAgQ0xFQVJfSEFTSChzKTsKLQotICAgIC8qIFNldCB0aGUgZGVm
YXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6Ci0gICAgICovCi0gICAgcy0+bWF4X2xhenlf
bWF0Y2ggICA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLm1heF9sYXp5OwotICAgIHMt
Pmdvb2RfbWF0Y2ggICAgICAgPSBjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5nb29kX2xl
bmd0aDsKLSAgICBzLT5uaWNlX21hdGNoICAgICAgID0gY29uZmlndXJhdGlvbl90YWJsZVtzLT5s
ZXZlbF0ubmljZV9sZW5ndGg7Ci0gICAgcy0+bWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRp
b25fdGFibGVbcy0+bGV2ZWxdLm1heF9jaGFpbjsKLQotICAgIHMtPnN0cnN0YXJ0ID0gMDsKLSAg
ICBzLT5ibG9ja19zdGFydCA9IDBMOwotICAgIHMtPmxvb2thaGVhZCA9IDA7Ci0gICAgcy0+bWF0
Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKLSAgICBzLT5tYXRjaF9h
dmFpbGFibGUgPSAwOwotICAgIHMtPmluc19oID0gMDsKLSNpZm5kZWYgRkFTVEVTVAotI2lmZGVm
IEFTTVYKLSAgICBtYXRjaF9pbml0KCk7IC8qIGluaXRpYWxpemUgdGhlIGFzbSBjb2RlICovCi0j
ZW5kaWYKLSNlbmRpZgotfQotCi0jaWZuZGVmIEZBU1RFU1QKLS8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotICogU2V0IG1hdGNoX3N0YXJ0IHRvIHRoZSBsb25nZXN0IG1hdGNoIHN0YXJ0aW5nIGF0IHRo
ZSBnaXZlbiBzdHJpbmcgYW5kCi0gKiByZXR1cm4gaXRzIGxlbmd0aC4gTWF0Y2hlcyBzaG9ydGVy
IG9yIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFyZSBkaXNjYXJkZWQsCi0gKiBpbiB3aGljaCBjYXNl
IHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzCi0g
KiBnYXJiYWdlLgotICogSU4gYXNzZXJ0aW9uczogY3VyX21hdGNoIGlzIHRoZSBoZWFkIG9mIHRo
ZSBoYXNoIGNoYWluIGZvciB0aGUgY3VycmVudAotICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQg
aXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMQotICogT1VU
IGFzc2VydGlvbjogdGhlIG1hdGNoIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIHMtPmxvb2th
aGVhZC4KLSAqLwotI2lmbmRlZiBBU01WCi0vKiBGb3IgODB4ODYgYW5kIDY4MHgwLCBhbiBvcHRp
bWl6ZWQgdmVyc2lvbiB3aWxsIGJlIHByb3ZpZGVkIGluIG1hdGNoLmFzbSBvcgotICogbWF0Y2gu
Uy4gVGhlIGNvZGUgd2lsbCBiZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KLSAqLwotbG9jYWwg
dUludCBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkKLSAgICBkZWZsYXRlX3N0YXRlICpzOwot
ICAgIElQb3MgY3VyX21hdGNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVu
dCBtYXRjaCAqLwotewotICAgIHVuc2lnbmVkIGNoYWluX2xlbmd0aCA9IHMtPm1heF9jaGFpbl9s
ZW5ndGg7LyogbWF4IGhhc2ggY2hhaW4gbGVuZ3RoICovCi0gICAgcmVnaXN0ZXIgQnl0ZWYgKnNj
YW4gPSBzLT53aW5kb3cgKyBzLT5zdHJzdGFydDsgLyogY3VycmVudCBzdHJpbmcgKi8KLSAgICBy
ZWdpc3RlciBCeXRlZiAqbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0
cmluZyAqLwotICAgIHJlZ2lzdGVyIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KLSAgICBpbnQgYmVzdF9sZW4gPSBzLT5wcmV2
X2xlbmd0aDsgICAgICAgICAgICAgIC8qIGJlc3QgbWF0Y2ggbGVuZ3RoIHNvIGZhciAqLwotICAg
IGludCBuaWNlX21hdGNoID0gcy0+bmljZV9tYXRjaDsgICAgICAgICAgICAgLyogc3RvcCBpZiBt
YXRjaCBsb25nIGVub3VnaCAqLwotICAgIElQb3MgbGltaXQgPSBzLT5zdHJzdGFydCA+IChJUG9z
KU1BWF9ESVNUKHMpID8KLSAgICAgICAgcy0+c3Ryc3RhcnQgLSAoSVBvcylNQVhfRElTVChzKSA6
IE5JTDsKLSAgICAvKiBTdG9wIHdoZW4gY3VyX21hdGNoIGJlY29tZXMgPD0gbGltaXQuIFRvIHNp
bXBsaWZ5IHRoZSBjb2RlLAotICAgICAqIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJp
bmcgb2Ygd2luZG93IGluZGV4IDAuCi0gICAgICovCi0gICAgUG9zZiAqcHJldiA9IHMtPnByZXY7
Ci0gICAgdUludCB3bWFzayA9IHMtPndfbWFzazsKLQotI2lmZGVmIFVOQUxJR05FRF9PSwotICAg
IC8qIENvbXBhcmUgdHdvIGJ5dGVzIGF0IGEgdGltZS4gTm90ZTogdGhpcyBpcyBub3QgYWx3YXlz
IGJlbmVmaWNpYWwuCi0gICAgICogVHJ5IHdpdGggYW5kIHdpdGhvdXQgLURVTkFMSUdORURfT0sg
dG8gY2hlY2suCi0gICAgICovCi0gICAgcmVnaXN0ZXIgQnl0ZWYgKnN0cmVuZCA9IHMtPndpbmRv
dyArIHMtPnN0cnN0YXJ0ICsgTUFYX01BVENIIC0gMTsKLSAgICByZWdpc3RlciB1c2ggc2Nhbl9z
dGFydCA9ICoodXNoZiopc2NhbjsKLSAgICByZWdpc3RlciB1c2ggc2Nhbl9lbmQgICA9ICoodXNo
ZiopKHNjYW4rYmVzdF9sZW4tMSk7Ci0jZWxzZQotICAgIHJlZ2lzdGVyIEJ5dGVmICpzdHJlbmQg
PSBzLT53aW5kb3cgKyBzLT5zdHJzdGFydCArIE1BWF9NQVRDSDsKLSAgICByZWdpc3RlciBCeXRl
IHNjYW5fZW5kMSAgPSBzY2FuW2Jlc3RfbGVuLTFdOwotICAgIHJlZ2lzdGVyIEJ5dGUgc2Nhbl9l
bmQgICA9IHNjYW5bYmVzdF9sZW5dOwotI2VuZGlmCi0KLSAgICAvKiBUaGUgY29kZSBpcyBvcHRp
bWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBNQVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi4K
LSAgICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVj
ZXNzYXJ5LgotICAgICAqLwotICAgIEFzc2VydChzLT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFU
Q0ggPT0gMjU4LCAiQ29kZSB0b28gY2xldmVyIik7Ci0KLSAgICAvKiBEbyBub3Qgd2FzdGUgdG9v
IG11Y2ggdGltZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBnb29kIG1hdGNoOiAqLwotICAgIGlmIChz
LT5wcmV2X2xlbmd0aCA+PSBzLT5nb29kX21hdGNoKSB7Ci0gICAgICAgIGNoYWluX2xlbmd0aCA+
Pj0gMjsKLSAgICB9Ci0gICAgLyogRG8gbm90IGxvb2sgZm9yIG1hdGNoZXMgYmV5b25kIHRoZSBl
bmQgb2YgdGhlIGlucHV0LiBUaGlzIGlzIG5lY2Vzc2FyeQotICAgICAqIHRvIG1ha2UgZGVmbGF0
ZSBkZXRlcm1pbmlzdGljLgotICAgICAqLwotICAgIGlmICgodUludCluaWNlX21hdGNoID4gcy0+
bG9va2FoZWFkKSBuaWNlX21hdGNoID0gcy0+bG9va2FoZWFkOwotCi0gICAgQXNzZXJ0KCh1bGcp
cy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUtTUlOX0xPT0tBSEVBRCwgIm5lZWQgbG9va2Fo
ZWFkIik7Ci0KLSAgICBkbyB7Ci0gICAgICAgIEFzc2VydChjdXJfbWF0Y2ggPCBzLT5zdHJzdGFy
dCwgIm5vIGZ1dHVyZSIpOwotICAgICAgICBtYXRjaCA9IHMtPndpbmRvdyArIGN1cl9tYXRjaDsK
LQotICAgICAgICAvKiBTa2lwIHRvIG5leHQgbWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5u
b3QgaW5jcmVhc2UKLSAgICAgICAgICogb3IgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBsZXNzIHRo
YW4gMi4gIE5vdGUgdGhhdCB0aGUgY2hlY2tzIGJlbG93Ci0gICAgICAgICAqIGZvciBpbnN1ZmZp
Y2llbnQgbG9va2FoZWFkIG9ubHkgb2NjdXIgb2NjYXNpb25hbGx5IGZvciBwZXJmb3JtYW5jZQot
ICAgICAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpbGwg
YmUgYWNjZXNzZWQsIGFuZAotICAgICAgICAgKiBjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIG1h
ZGUgdGhhdCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzLgotICAgICAgICAgKiBIb3dldmVyIHRoZSBs
ZW5ndGggb2YgdGhlIG1hdGNoIGlzIGxpbWl0ZWQgdG8gdGhlIGxvb2thaGVhZCwgc28KLSAgICAg
ICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0
aWFsaXplZCB2YWx1ZXMuCi0gICAgICAgICAqLwotI2lmIChkZWZpbmVkKFVOQUxJR05FRF9PSykg
JiYgTUFYX01BVENIID09IDI1OCkKLSAgICAgICAgLyogVGhpcyBjb2RlIGFzc3VtZXMgc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSA9PSAyLiBEbyBub3QgdXNlCi0gICAgICAgICAqIFVOQUxJR05FRF9P
SyBpZiB5b3VyIGNvbXBpbGVyIHVzZXMgYSBkaWZmZXJlbnQgc2l6ZS4KLSAgICAgICAgICovCi0g
ICAgICAgIGlmICgqKHVzaGYqKShtYXRjaCtiZXN0X2xlbi0xKSAhPSBzY2FuX2VuZCB8fAotICAg
ICAgICAgICAgKih1c2hmKiltYXRjaCAhPSBzY2FuX3N0YXJ0KSBjb250aW51ZTsKLQotICAgICAg
ICAvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0g
c2luY2UgdGhleSBhcmUKLSAgICAgICAgICogYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5
dGVzIG1hdGNoLCBnaXZlbiB0aGF0IHRoZSBoYXNoIGtleXMKLSAgICAgICAgICogYXJlIGVxdWFs
IGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LiBDb21wYXJlIDIgYnl0ZXMgYXQgYSB0aW1lIGF0Ci0g
ICAgICAgICAqIHN0cnN0YXJ0KzMsICs1LCAuLi4gdXAgdG8gc3Ryc3RhcnQrMjU3LiBXZSBjaGVj
ayBmb3IgaW5zdWZmaWNpZW50Ci0gICAgICAgICAqIGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDR0aCBj
b21wYXJpc29uOyB0aGUgMTI4dGggY2hlY2sgd2lsbCBiZSBtYWRlCi0gICAgICAgICAqIGF0IHN0
cnN0YXJ0KzI1Ny4gSWYgTUFYX01BVENILTIgaXMgbm90IGEgbXVsdGlwbGUgb2YgOCwgaXQgaXMK
LSAgICAgICAgICogbmVjZXNzYXJ5IHRvIHB1dCBtb3JlIGd1YXJkIGJ5dGVzIGF0IHRoZSBlbmQg
b2YgdGhlIHdpbmRvdywgb3IKLSAgICAgICAgICogdG8gY2hlY2sgbW9yZSBvZnRlbiBmb3IgaW5z
dWZmaWNpZW50IGxvb2thaGVhZC4KLSAgICAgICAgICovCi0gICAgICAgIEFzc2VydChzY2FuWzJd
ID09IG1hdGNoWzJdLCAic2NhblsyXT8iKTsKLSAgICAgICAgc2NhbisrLCBtYXRjaCsrOwotICAg
ICAgICBkbyB7Ci0gICAgICAgIH0gd2hpbGUgKCoodXNoZiopKHNjYW4rPTIpID09ICoodXNoZiop
KG1hdGNoKz0yKSAmJgotICAgICAgICAgICAgICAgICAqKHVzaGYqKShzY2FuKz0yKSA9PSAqKHVz
aGYqKShtYXRjaCs9MikgJiYKLSAgICAgICAgICAgICAgICAgKih1c2hmKikoc2Nhbis9MikgPT0g
Kih1c2hmKikobWF0Y2grPTIpICYmCi0gICAgICAgICAgICAgICAgICoodXNoZiopKHNjYW4rPTIp
ID09ICoodXNoZiopKG1hdGNoKz0yKSAmJgotICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5k
KTsKLSAgICAgICAgLyogVGhlIGZ1bm55ICJkbyB7fSIgZ2VuZXJhdGVzIGJldHRlciBjb2RlIG9u
IG1vc3QgY29tcGlsZXJzICovCi0KLSAgICAgICAgLyogSGVyZSwgc2NhbiA8PSB3aW5kb3crc3Ry
c3RhcnQrMjU3ICovCi0gICAgICAgIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodW5zaWduZWQp
KHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7Ci0gICAgICAgIGlmICgqc2NhbiA9PSAq
bWF0Y2gpIHNjYW4rKzsKLQotICAgICAgICBsZW4gPSAoTUFYX01BVENIIC0gMSkgLSAoaW50KShz
dHJlbmQtc2Nhbik7Ci0gICAgICAgIHNjYW4gPSBzdHJlbmQgLSAoTUFYX01BVENILTEpOwotCi0j
ZWxzZSAvKiBVTkFMSUdORURfT0sgKi8KLQotICAgICAgICBpZiAobWF0Y2hbYmVzdF9sZW5dICAg
IT0gc2Nhbl9lbmQgIHx8Ci0gICAgICAgICAgICBtYXRjaFtiZXN0X2xlbi0xXSAhPSBzY2FuX2Vu
ZDEgfHwKLSAgICAgICAgICAgICptYXRjaCAgICAgICAgICAgICE9ICpzY2FuICAgICB8fAotICAg
ICAgICAgICAgKisrbWF0Y2ggICAgICAgICAgIT0gc2NhblsxXSkgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNl
IGl0IHdpbGwgYmUgbWFkZQotICAgICAgICAgKiBhZ2FpbiBsYXRlci4gKFRoaXMgaGV1cmlzdGlj
IGlzIG5vdCBhbHdheXMgYSB3aW4uKQotICAgICAgICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRv
IGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleQotICAgICAgICAgKiBhcmUg
YWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0Ci0gICAg
ICAgICAqIHRoZSBoYXNoIGtleXMgYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4Lgot
ICAgICAgICAgKi8KLSAgICAgICAgc2NhbiArPSAyLCBtYXRjaCsrOwotICAgICAgICBBc3NlcnQo
KnNjYW4gPT0gKm1hdGNoLCAibWF0Y2hbMl0/Iik7Ci0KLSAgICAgICAgLyogV2UgY2hlY2sgZm9y
IGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBldmVyeSA4dGggY29tcGFyaXNvbjsKLSAgICAg
ICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguCi0gICAg
ICAgICAqLwotICAgICAgICBkbyB7Ci0gICAgICAgIH0gd2hpbGUgKCorK3NjYW4gPT0gKisrbWF0
Y2ggJiYgKisrc2NhbiA9PSAqKyttYXRjaCAmJgotICAgICAgICAgICAgICAgICAqKytzY2FuID09
ICorK21hdGNoICYmICorK3NjYW4gPT0gKisrbWF0Y2ggJiYKLSAgICAgICAgICAgICAgICAgKisr
c2NhbiA9PSAqKyttYXRjaCAmJiAqKytzY2FuID09ICorK21hdGNoICYmCi0gICAgICAgICAgICAg
ICAgICorK3NjYW4gPT0gKisrbWF0Y2ggJiYgKisrc2NhbiA9PSAqKyttYXRjaCAmJgotICAgICAg
ICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKLQotICAgICAgICBBc3NlcnQoc2NhbiA8PSBzLT53
aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwotCi0gICAg
ICAgIGxlbiA9IE1BWF9NQVRDSCAtIChpbnQpKHN0cmVuZCAtIHNjYW4pOwotICAgICAgICBzY2Fu
ID0gc3RyZW5kIC0gTUFYX01BVENIOwotCi0jZW5kaWYgLyogVU5BTElHTkVEX09LICovCi0KLSAg
ICAgICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7Ci0gICAgICAgICAgICBzLT5tYXRjaF9zdGFydCA9
IGN1cl9tYXRjaDsKLSAgICAgICAgICAgIGJlc3RfbGVuID0gbGVuOwotICAgICAgICAgICAgaWYg
KGxlbiA+PSBuaWNlX21hdGNoKSBicmVhazsKLSNpZmRlZiBVTkFMSUdORURfT0sKLSAgICAgICAg
ICAgIHNjYW5fZW5kID0gKih1c2hmKikoc2NhbitiZXN0X2xlbi0xKTsKLSNlbHNlCi0gICAgICAg
ICAgICBzY2FuX2VuZDEgID0gc2NhbltiZXN0X2xlbi0xXTsKLSAgICAgICAgICAgIHNjYW5fZW5k
ICAgPSBzY2FuW2Jlc3RfbGVuXTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKGN1
cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0Ci0gICAgICAgICAgICAg
JiYgLS1jaGFpbl9sZW5ndGggIT0gMCk7Ci0KLSAgICBpZiAoKHVJbnQpYmVzdF9sZW4gPD0gcy0+
bG9va2FoZWFkKSByZXR1cm4gKHVJbnQpYmVzdF9sZW47Ci0gICAgcmV0dXJuIHMtPmxvb2thaGVh
ZDsKLX0KLSNlbmRpZiAvKiBBU01WICovCi0jZW5kaWYgLyogRkFTVEVTVCAqLwotCi0vKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAqIE9wdGltaXplZCB2ZXJzaW9uIGZvciBsZXZlbCA9PSAxIG9yIHN0
cmF0ZWd5ID09IFpfUkxFIG9ubHkKLSAqLwotbG9jYWwgdUludCBsb25nZXN0X21hdGNoX2Zhc3Qo
cywgY3VyX21hdGNoKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgSVBvcyBjdXJfbWF0Y2g7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG1hdGNoICovCi17Ci0gICAg
cmVnaXN0ZXIgQnl0ZWYgKnNjYW4gPSBzLT53aW5kb3cgKyBzLT5zdHJzdGFydDsgLyogY3VycmVu
dCBzdHJpbmcgKi8KLSAgICByZWdpc3RlciBCeXRlZiAqbWF0Y2g7ICAgICAgICAgICAgICAgICAg
ICAgICAvKiBtYXRjaGVkIHN0cmluZyAqLwotICAgIHJlZ2lzdGVyIGludCBsZW47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KLSAgICByZWdp
c3RlciBCeXRlZiAqc3RyZW5kID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBNQVhfTUFUQ0g7
Ci0KLSAgICAvKiBUaGUgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBN
QVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi4KLSAgICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQg
b2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVjZXNzYXJ5LgotICAgICAqLwotICAgIEFzc2VydChz
LT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFUQ0ggPT0gMjU4LCAiQ29kZSB0b28gY2xldmVyIik7
Ci0KLSAgICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9P
S0FIRUFELCAibmVlZCBsb29rYWhlYWQiKTsKLQotICAgIEFzc2VydChjdXJfbWF0Y2ggPCBzLT5z
dHJzdGFydCwgIm5vIGZ1dHVyZSIpOwotCi0gICAgbWF0Y2ggPSBzLT53aW5kb3cgKyBjdXJfbWF0
Y2g7Ci0KLSAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIGxlc3Mg
dGhhbiAyOgotICAgICAqLwotICAgIGlmIChtYXRjaFswXSAhPSBzY2FuWzBdIHx8IG1hdGNoWzFd
ICE9IHNjYW5bMV0pIHJldHVybiBNSU5fTUFUQ0gtMTsKLQotICAgIC8qIFRoZSBjaGVjayBhdCBi
ZXN0X2xlbi0xIGNhbiBiZSByZW1vdmVkIGJlY2F1c2UgaXQgd2lsbCBiZSBtYWRlCi0gICAgICog
YWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEgd2luLikKLSAgICAg
KiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2lu
Y2UgdGhleQotICAgICAqIGFyZSBhbHdheXMgZXF1YWwgd2hlbiB0aGUgb3RoZXIgYnl0ZXMgbWF0
Y2gsIGdpdmVuIHRoYXQKLSAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBI
QVNIX0JJVFMgPj0gOC4KLSAgICAgKi8KLSAgICBzY2FuICs9IDIsIG1hdGNoICs9IDI7Ci0gICAg
QXNzZXJ0KCpzY2FuID09ICptYXRjaCwgIm1hdGNoWzJdPyIpOwotCi0gICAgLyogV2UgY2hlY2sg
Zm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBldmVyeSA4dGggY29tcGFyaXNvbjsKLSAg
ICAgKiB0aGUgMjU2dGggY2hlY2sgd2lsbCBiZSBtYWRlIGF0IHN0cnN0YXJ0KzI1OC4KLSAgICAg
Ki8KLSAgICBkbyB7Ci0gICAgfSB3aGlsZSAoKisrc2NhbiA9PSAqKyttYXRjaCAmJiAqKytzY2Fu
ID09ICorK21hdGNoICYmCi0gICAgICAgICAgICAgKisrc2NhbiA9PSAqKyttYXRjaCAmJiAqKytz
Y2FuID09ICorK21hdGNoICYmCi0gICAgICAgICAgICAgKisrc2NhbiA9PSAqKyttYXRjaCAmJiAq
KytzY2FuID09ICorK21hdGNoICYmCi0gICAgICAgICAgICAgKisrc2NhbiA9PSAqKyttYXRjaCAm
JiAqKytzY2FuID09ICorK21hdGNoICYmCi0gICAgICAgICAgICAgc2NhbiA8IHN0cmVuZCk7Ci0K
LSAgICBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0x
KSwgIndpbGQgc2NhbiIpOwotCi0gICAgbGVuID0gTUFYX01BVENIIC0gKGludCkoc3RyZW5kIC0g
c2Nhbik7Ci0KLSAgICBpZiAobGVuIDwgTUlOX01BVENIKSByZXR1cm4gTUlOX01BVENIIC0gMTsK
LQotICAgIHMtPm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoOwotICAgIHJldHVybiAodUludClsZW4g
PD0gcy0+bG9va2FoZWFkID8gKHVJbnQpbGVuIDogcy0+bG9va2FoZWFkOwotfQotCi0jaWZkZWYg
REVCVUcKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2hlY2sgdGhhdCB0aGUgbWF0Y2ggYXQg
bWF0Y2hfc3RhcnQgaXMgaW5kZWVkIGEgbWF0Y2guCi0gKi8KLWxvY2FsIHZvaWQgY2hlY2tfbWF0
Y2gocywgc3RhcnQsIG1hdGNoLCBsZW5ndGgpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBJ
UG9zIHN0YXJ0LCBtYXRjaDsKLSAgICBpbnQgbGVuZ3RoOwotewotICAgIC8qIGNoZWNrIHRoYXQg
dGhlIG1hdGNoIGlzIGluZGVlZCBhIG1hdGNoICovCi0gICAgaWYgKHptZW1jbXAocy0+d2luZG93
ICsgbWF0Y2gsCi0gICAgICAgICAgICAgICAgcy0+d2luZG93ICsgc3RhcnQsIGxlbmd0aCkgIT0g
RVFVQUwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgc3RhcnQgJXUsIG1hdGNoICV1LCBs
ZW5ndGggJWRcbiIsCi0gICAgICAgICAgICAgICAgc3RhcnQsIG1hdGNoLCBsZW5ndGgpOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVjJWMiLCBzLT53aW5kb3db
bWF0Y2grK10sIHMtPndpbmRvd1tzdGFydCsrXSk7Ci0gICAgICAgIH0gd2hpbGUgKC0tbGVuZ3Ro
ICE9IDApOwotICAgICAgICB6X2Vycm9yKCJpbnZhbGlkIG1hdGNoIik7Ci0gICAgfQotICAgIGlm
ICh6X3ZlcmJvc2UgPiAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJcXFslZCwlZF0iLCBz
dGFydC1tYXRjaCwgbGVuZ3RoKTsKLSAgICAgICAgZG8geyBwdXRjKHMtPndpbmRvd1tzdGFydCsr
XSwgc3RkZXJyKTsgfSB3aGlsZSAoLS1sZW5ndGggIT0gMCk7Ci0gICAgfQotfQotI2Vsc2UKLSMg
IGRlZmluZSBjaGVja19tYXRjaChzLCBzdGFydCwgbWF0Y2gsIGxlbmd0aCkKLSNlbmRpZiAvKiBE
RUJVRyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIHdpbmRvdyB3aGVu
IHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuCi0gKiBVcGRhdGVzIHN0cnN0YXJ0
IGFuZCBsb29rYWhlYWQuCi0gKgotICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9P
S0FIRUFECi0gKiBPVVQgYXNzZXJ0aW9uczogc3Ryc3RhcnQgPD0gd2luZG93X3NpemUtTUlOX0xP
T0tBSEVBRAotICogICAgQXQgbGVhc3Qgb25lIGJ5dGUgaGFzIGJlZW4gcmVhZCwgb3IgYXZhaWxf
aW4gPT0gMDsgcmVhZHMgYXJlCi0gKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRl
cyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbAotICogICAgb3B0aW9uIC0tIG5v
dCBzdXBwb3J0ZWQgaGVyZSkuCi0gKi8KLWxvY2FsIHZvaWQgZmlsbF93aW5kb3cocykKLSAgICBk
ZWZsYXRlX3N0YXRlICpzOwotewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIG4sIG07Ci0gICAgcmVn
aXN0ZXIgUG9zZiAqcDsKLSAgICB1bnNpZ25lZCBtb3JlOyAgICAvKiBBbW91bnQgb2YgZnJlZSBz
cGFjZSBhdCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuICovCi0gICAgdUludCB3c2l6ZSA9IHMtPndf
c2l6ZTsKLQotICAgIGRvIHsKLSAgICAgICAgbW9yZSA9ICh1bnNpZ25lZCkocy0+d2luZG93X3Np
emUgLSh1bGcpcy0+bG9va2FoZWFkIC0odWxnKXMtPnN0cnN0YXJ0KTsKLQotICAgICAgICAvKiBE
ZWFsIHdpdGggIUAjJCUgNjRLIGxpbWl0OiAqLwotICAgICAgICBpZiAoc2l6ZW9mKGludCkgPD0g
MikgewotICAgICAgICAgICAgaWYgKG1vcmUgPT0gMCAmJiBzLT5zdHJzdGFydCA9PSAwICYmIHMt
Pmxvb2thaGVhZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbW9yZSA9IHdzaXplOwotCi0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1vcmUgPT0gKHVuc2lnbmVkKSgtMSkpIHsKLSAgICAgICAgICAg
ICAgICAvKiBWZXJ5IHVubGlrZWx5LCBidXQgcG9zc2libGUgb24gMTYgYml0IG1hY2hpbmUgaWYK
LSAgICAgICAgICAgICAgICAgKiBzdHJzdGFydCA9PSAwICYmIGxvb2thaGVhZCA9PSAxIChpbnB1
dCBkb25lIGEgYnl0ZSBhdCB0aW1lKQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ICAgIG1vcmUtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIElmIHRo
ZSB3aW5kb3cgaXMgYWxtb3N0IGZ1bGwgYW5kIHRoZXJlIGlzIGluc3VmZmljaWVudCBsb29rYWhl
YWQsCi0gICAgICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBt
YWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuCi0gICAgICAgICAqLwotICAgICAgICBpZiAocy0+
c3Ryc3RhcnQgPj0gd3NpemUrTUFYX0RJU1QocykpIHsKLQotICAgICAgICAgICAgem1lbWNweShz
LT53aW5kb3csIHMtPndpbmRvdyt3c2l6ZSwgKHVuc2lnbmVkKXdzaXplKTsKLSAgICAgICAgICAg
IHMtPm1hdGNoX3N0YXJ0IC09IHdzaXplOwotICAgICAgICAgICAgcy0+c3Ryc3RhcnQgICAgLT0g
d3NpemU7IC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovCi0gICAgICAgICAg
ICBzLT5ibG9ja19zdGFydCAtPSAobG9uZykgd3NpemU7Ci0KLSAgICAgICAgICAgIC8qIFNsaWRl
IHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIgYml0IHZhbHVlcwotICAg
ICAgICAgICAgICAgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZl
biB3aGVuIGxldmVsID09IDAKLSAgICAgICAgICAgICAgIHRvIGtlZXAgdGhlIGhhc2ggdGFibGUg
Y29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDAKLSAgICAgICAgICAgICAg
IGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBpcyBub3QgYW4gb3B0aW1hbCB1c2Fn
ZSBvZgotICAgICAgICAgICAgICAgemxpYiwgc28gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHBh
dGhvbG9naWNhbCBjYXNlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLyogJSUlIGF2
b2lkIHRoaXMgd2hlbiBaX1JMRSAqLwotICAgICAgICAgICAgbiA9IHMtPmhhc2hfc2l6ZTsKLSAg
ICAgICAgICAgIHAgPSAmcy0+aGVhZFtuXTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
ICAgICBtID0gKi0tcDsKLSAgICAgICAgICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBt
LXdzaXplIDogTklMKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7Ci0KLSAgICAgICAgICAg
IG4gPSB3c2l6ZTsKLSNpZm5kZWYgRkFTVEVTVAotICAgICAgICAgICAgcCA9ICZzLT5wcmV2W25d
OwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG0gPSAqLS1wOwotICAgICAgICAg
ICAgICAgICpwID0gKFBvcykobSA+PSB3c2l6ZSA/IG0td3NpemUgOiBOSUwpOwotICAgICAgICAg
ICAgICAgIC8qIElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJh
Z2UgYnV0Ci0gICAgICAgICAgICAgICAgICogaXRzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgdXNlZC4K
LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7Ci0jZW5kaWYK
LSAgICAgICAgICAgIG1vcmUgKz0gd3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnN0
cm0tPmF2YWlsX2luID09IDApIHJldHVybjsKLQotICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8g
c2xpZGluZzoKLSAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBs
b29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKLSAgICAgICAgICogICAgbW9yZSA9PSB3
aW5kb3dfc2l6ZSAtIGxvb2thaGVhZCAtIHN0cnN0YXJ0Ci0gICAgICAgICAqID0+IG1vcmUgPj0g
d2luZG93X3NpemUgLSAoTUlOX0xPT0tBSEVBRC0xICsgV1NJWkUgKyBNQVhfRElTVC0xKQotICAg
ICAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gMipXU0laRSArIDIKLSAgICAgICAgICog
SW4gdGhlIEJJR19NRU0gb3IgTU1BUCBjYXNlIChub3QgeWV0IHN1cHBvcnRlZCksCi0gICAgICAg
ICAqICAgd2luZG93X3NpemUgPT0gaW5wdXRfc2l6ZSArIE1JTl9MT09LQUhFQUQgICYmCi0gICAg
ICAgICAqICAgc3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgPD0gaW5wdXRfc2l6ZSA9PiBtb3JlID49
IE1JTl9MT09LQUhFQUQuCi0gICAgICAgICAqIE90aGVyd2lzZSwgd2luZG93X3NpemUgPT0gMipX
U0laRSBzbyBtb3JlID49IDIuCi0gICAgICAgICAqIElmIHRoZXJlIHdhcyBzbGlkaW5nLCBtb3Jl
ID49IFdTSVpFLiBTbyBpbiBhbGwgY2FzZXMsIG1vcmUgPj0gMi4KLSAgICAgICAgICovCi0gICAg
ICAgIEFzc2VydChtb3JlID49IDIsICJtb3JlIDwgMiIpOwotCi0gICAgICAgIG4gPSByZWFkX2J1
ZihzLT5zdHJtLCBzLT53aW5kb3cgKyBzLT5zdHJzdGFydCArIHMtPmxvb2thaGVhZCwgbW9yZSk7
Ci0gICAgICAgIHMtPmxvb2thaGVhZCArPSBuOwotCi0gICAgICAgIC8qIEluaXRpYWxpemUgdGhl
IGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqLwotICAgICAgICBpZiAo
cy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgewotICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53
aW5kb3dbcy0+c3Ryc3RhcnRdOwotICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gs
IHMtPndpbmRvd1tzLT5zdHJzdGFydCsxXSk7Ci0jaWYgTUlOX01BVENIICE9IDMKLSAgICAgICAg
ICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCi0jZW5kaWYKLSAg
ICAgICAgfQotICAgICAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5f
TUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsCi0gICAgICAgICAqIGJ1dCB0aGlzIGlzIG5v
dCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1pdHRlZC4KLSAg
ICAgICAgICovCi0KLSAgICB9IHdoaWxlIChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYm
IHMtPnN0cm0tPmF2YWlsX2luICE9IDApOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IEZsdXNoIHRoZSBjdXJyZW50IGJsb2NrLCB3aXRoIGdpdmVuIGVuZC1vZi1maWxlIGZsYWcuCi0g
KiBJTiBhc3NlcnRpb246IHN0cnN0YXJ0IGlzIHNldCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50
IG1hdGNoLgotICovCi0jZGVmaW5lIEZMVVNIX0JMT0NLX09OTFkocywgZW9mKSB7IFwKLSAgIF90
cl9mbHVzaF9ibG9jayhzLCAocy0+YmxvY2tfc3RhcnQgPj0gMEwgPyBcCi0gICAgICAgICAgICAg
ICAgICAgKGNoYXJmICopJnMtPndpbmRvd1sodW5zaWduZWQpcy0+YmxvY2tfc3RhcnRdIDogXAot
ICAgICAgICAgICAgICAgICAgIChjaGFyZiAqKVpfTlVMTCksIFwKLSAgICAgICAgICAgICAgICAo
dWxnKSgobG9uZylzLT5zdHJzdGFydCAtIHMtPmJsb2NrX3N0YXJ0KSwgXAotICAgICAgICAgICAg
ICAgIChlb2YpKTsgXAotICAgcy0+YmxvY2tfc3RhcnQgPSBzLT5zdHJzdGFydDsgXAotICAgZmx1
c2hfcGVuZGluZyhzLT5zdHJtKTsgXAotICAgVHJhY2V2KChzdGRlcnIsIltGTFVTSF0iKSk7IFwK
LX0KLQotLyogU2FtZSBidXQgZm9yY2UgcHJlbWF0dXJlIGV4aXQgaWYgbmVjZXNzYXJ5LiAqLwot
I2RlZmluZSBGTFVTSF9CTE9DSyhzLCBlb2YpIHsgXAotICAgRkxVU0hfQkxPQ0tfT05MWShzLCBl
b2YpOyBcCi0gICBpZiAocy0+c3RybS0+YXZhaWxfb3V0ID09IDApIHJldHVybiAoZW9mKSA/IGZp
bmlzaF9zdGFydGVkIDogbmVlZF9tb3JlOyBcCi19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICogQ29weSB3aXRob3V0IGNvbXByZXNzaW9uIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUg
aW5wdXQgc3RyZWFtLCByZXR1cm4KLSAqIHRoZSBjdXJyZW50IGJsb2NrIHN0YXRlLgotICogVGhp
cyBmdW5jdGlvbiBkb2VzIG5vdCBpbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkg
c2luY2UKLSAqIHVuY29tcHJlc3NpYmxlIGRhdGEgaXMgcHJvYmFibHkgbm90IHVzZWZ1bC4gVGhp
cyBmdW5jdGlvbiBpcyB1c2VkCi0gKiBvbmx5IGZvciB0aGUgbGV2ZWw9MCBjb21wcmVzc2lvbiBv
cHRpb24uCi0gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQgdG8gYXZv
aWQgZXh0cmEgY29weWluZyBmcm9tCi0gKiB3aW5kb3cgdG8gcGVuZGluZ19idWYuCi0gKi8KLWxv
Y2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKQotICAgIGRlZmxhdGVfc3Rh
dGUgKnM7Ci0gICAgaW50IGZsdXNoOwotewotICAgIC8qIFN0b3JlZCBibG9ja3MgYXJlIGxpbWl0
ZWQgdG8gMHhmZmZmIGJ5dGVzLCBwZW5kaW5nX2J1ZiBpcyBsaW1pdGVkCi0gICAgICogdG8gcGVu
ZGluZ19idWZfc2l6ZSwgYW5kIGVhY2ggc3RvcmVkIGJsb2NrIGhhcyBhIDUgYnl0ZSBoZWFkZXI6
Ci0gICAgICovCi0gICAgdWxnIG1heF9ibG9ja19zaXplID0gMHhmZmZmOwotICAgIHVsZyBtYXhf
c3RhcnQ7Ci0KLSAgICBpZiAobWF4X2Jsb2NrX3NpemUgPiBzLT5wZW5kaW5nX2J1Zl9zaXplIC0g
NSkgewotICAgICAgICBtYXhfYmxvY2tfc2l6ZSA9IHMtPnBlbmRpbmdfYnVmX3NpemUgLSA1Owot
ICAgIH0KLQotICAgIC8qIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlucHV0IHRvIG91
dHB1dDogKi8KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8qIEZpbGwgdGhlIHdpbmRvdyBhcyBt
dWNoIGFzIHBvc3NpYmxlOiAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IDEpIHsKLQot
ICAgICAgICAgICAgQXNzZXJ0KHMtPnN0cnN0YXJ0IDwgcy0+d19zaXplK01BWF9ESVNUKHMpIHx8
Ci0gICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplLCAi
c2xpZGUgdG9vIGxhdGUiKTsKLQotICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAg
ICAgICBpZiAocy0+bG9va2FoZWFkID09IDAgJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgcmV0dXJu
IG5lZWRfbW9yZTsKLQotICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsg
LyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KLSAgICAgICAgfQotICAgICAgICBBc3NlcnQo
cy0+YmxvY2tfc3RhcnQgPj0gMEwsICJibG9jayBnb25lIik7Ci0KLSAgICAgICAgcy0+c3Ryc3Rh
cnQgKz0gcy0+bG9va2FoZWFkOwotICAgICAgICBzLT5sb29rYWhlYWQgPSAwOwotCi0gICAgICAg
IC8qIEVtaXQgYSBzdG9yZWQgYmxvY2sgaWYgcGVuZGluZ19idWYgd2lsbCBiZSBmdWxsOiAqLwot
ICAgICAgICBtYXhfc3RhcnQgPSBzLT5ibG9ja19zdGFydCArIG1heF9ibG9ja19zaXplOwotICAg
ICAgICBpZiAocy0+c3Ryc3RhcnQgPT0gMCB8fCAodWxnKXMtPnN0cnN0YXJ0ID49IG1heF9zdGFy
dCkgewotICAgICAgICAgICAgLyogc3Ryc3RhcnQgPT0gMCBpcyBwb3NzaWJsZSB3aGVuIHdyYXBh
cm91bmQgb24gMTYtYml0IG1hY2hpbmUgKi8KLSAgICAgICAgICAgIHMtPmxvb2thaGVhZCA9ICh1
SW50KShzLT5zdHJzdGFydCAtIG1heF9zdGFydCk7Ci0gICAgICAgICAgICBzLT5zdHJzdGFydCA9
ICh1SW50KW1heF9zdGFydDsKLSAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwotICAgICAg
ICB9Ci0gICAgICAgIC8qIEZsdXNoIGlmIHdlIG1heSBoYXZlIHRvIHNsaWRlLCBvdGhlcndpc2Ug
YmxvY2tfc3RhcnQgbWF5IGJlY29tZQotICAgICAgICAgKiBuZWdhdGl2ZSBhbmQgdGhlIGRhdGEg
d2lsbCBiZSBnb25lOgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPnN0cnN0YXJ0IC0gKHVJ
bnQpcy0+YmxvY2tfc3RhcnQgPj0gTUFYX0RJU1QocykpIHsKLSAgICAgICAgICAgIEZMVVNIX0JM
T0NLKHMsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09
IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6
IGJsb2NrX2RvbmU7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29tcHJlc3MgYXMg
bXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVybiB0aGUgY3VycmVu
dAotICogYmxvY2sgc3RhdGUuCi0gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbGF6
eSBldmFsdWF0aW9uIG9mIG1hdGNoZXMgYW5kIGluc2VydHMKLSAqIG5ldyBzdHJpbmdzIGluIHRo
ZSBkaWN0aW9uYXJ5IG9ubHkgZm9yIHVubWF0Y2hlZCBzdHJpbmdzIG9yIGZvciBzaG9ydAotICog
bWF0Y2hlcy4gSXQgaXMgdXNlZCBvbmx5IGZvciB0aGUgZmFzdCBjb21wcmVzc2lvbiBvcHRpb25z
LgotICovCi1sb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX2Zhc3QocywgZmx1c2gpCi0gICAgZGVm
bGF0ZV9zdGF0ZSAqczsKLSAgICBpbnQgZmx1c2g7Ci17Ci0gICAgSVBvcyBoYXNoX2hlYWQgPSBO
SUw7IC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi8KLSAgICBpbnQgYmZsdXNoOyAgICAgICAg
ICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCi0KLSAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBs
b29rYWhlYWQsIGV4Y2VwdAotICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxl
LiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gs
IHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGUKLSAgICAgICAgICogc3RyaW5nIGZv
bGxvd2luZyB0aGUgbmV4dCBtYXRjaC4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChzLT5sb29r
YWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7Ci0gICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKLSAg
ICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09IFpf
Tk9fRkxVU0gpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmVlZF9tb3JlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2gg
dGhlIGN1cnJlbnQgYmxvY2sgKi8KLSAgICAgICAgfQotCi0gICAgICAgIC8qIEluc2VydCB0aGUg
c3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGUKLSAgICAgICAgICog
ZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hh
aW46Ci0gICAgICAgICAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkg
ewotICAgICAgICAgICAgSU5TRVJUX1NUUklORyhzLCBzLT5zdHJzdGFydCwgaGFzaF9oZWFkKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRp
bmcgdGhvc2UgPD0gcHJldl9sZW5ndGguCi0gICAgICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2
ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENICi0gICAgICAgICAqLwotICAgICAgICBp
ZiAoaGFzaF9oZWFkICE9IE5JTCAmJiBzLT5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSBNQVhfRElT
VChzKSkgewotICAgICAgICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQg
bWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAw
IChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaAotICAgICAgICAgICAgICog
b2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUp
LgotICAgICAgICAgICAgICovCi0jaWZkZWYgRkFTVEVTVAotICAgICAgICAgICAgaWYgKChzLT5z
dHJhdGVneSAhPSBaX0hVRkZNQU5fT05MWSAmJiBzLT5zdHJhdGVneSAhPSBaX1JMRSkgfHwKLSAg
ICAgICAgICAgICAgICAocy0+c3RyYXRlZ3kgPT0gWl9STEUgJiYgcy0+c3Ryc3RhcnQgLSBoYXNo
X2hlYWQgPT0gMSkpIHsKLSAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0
X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICAgICAgaWYgKHMtPnN0cmF0ZWd5ICE9IFpfSFVGRk1BTl9PTkxZICYmIHMtPnN0cmF0ZWd5ICE9
IFpfUkxFKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRj
aCAocywgaGFzaF9oZWFkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocy0+c3RyYXRlZ3kgPT0g
Wl9STEUgJiYgcy0+c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPT0gMSkgewotICAgICAgICAgICAgICAg
IHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2hfZmFzdCAocywgaGFzaF9oZWFkKTsKLSAg
ICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIG9yIGxv
bmdlc3RfbWF0Y2hfZmFzdCgpIHNldHMgbWF0Y2hfc3RhcnQgKi8KLSAgICAgICAgfQotICAgICAg
ICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewotICAgICAgICAgICAgY2hlY2tf
bWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPm1hdGNoX3N0YXJ0LCBzLT5tYXRjaF9sZW5ndGgpOwot
Ci0gICAgICAgICAgICBfdHJfdGFsbHlfZGlzdChzLCBzLT5zdHJzdGFydCAtIHMtPm1hdGNoX3N0
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoIC0gTUlOX01B
VENILCBiZmx1c2gpOwotCi0gICAgICAgICAgICBzLT5sb29rYWhlYWQgLT0gcy0+bWF0Y2hfbGVu
Z3RoOwotCi0gICAgICAgICAgICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFi
bGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoCi0gICAgICAgICAgICAgKiBpcyBub3QgdG9vIGxh
cmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLgotICAgICAgICAg
ICAgICovCi0jaWZuZGVmIEZBU1RFU1QKLSAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGgg
PD0gcy0+bWF4X2luc2VydF9sZW5ndGggJiYKLSAgICAgICAgICAgICAgICBzLT5sb29rYWhlYWQg
Pj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoLS07IC8qIHN0
cmluZyBhdCBzdHJzdGFydCBhbHJlYWR5IGluIHRhYmxlICovCi0gICAgICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFydCsrOwotICAgICAgICAgICAgICAgICAg
ICBJTlNFUlRfU1RSSU5HKHMsIHMtPnN0cnN0YXJ0LCBoYXNoX2hlYWQpOwotICAgICAgICAgICAg
ICAgICAgICAvKiBzdHJzdGFydCBuZXZlciBleGNlZWRzIFdTSVpFLU1BWF9NQVRDSCwgc28gdGhl
cmUgYXJlCi0gICAgICAgICAgICAgICAgICAgICAqIGFsd2F5cyBNSU5fTUFUQ0ggYnl0ZXMgYWhl
YWQuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0t
cy0+bWF0Y2hfbGVuZ3RoICE9IDApOwotICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHMtPnN0cnN0YXJ0ICs9IHMtPm1hdGNoX2xlbmd0aDsKLSAgICAgICAgICAgICAgICBzLT5tYXRj
aF9sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3MtPnN0
cnN0YXJ0XTsKLSAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2lu
ZG93W3MtPnN0cnN0YXJ0KzFdKTsKLSNpZiBNSU5fTUFUQ0ggIT0gMwotICAgICAgICAgICAgICAg
IENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgICAvKiBJZiBsb29rYWhlYWQgPCBNSU5fTUFUQ0gsIGluc19oIGlzIGdhcmJhZ2Us
IGJ1dCBpdCBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAqIG1hdHRlciBzaW5jZSBpdCB3aWxs
IGJlIHJlY29tcHV0ZWQgYXQgbmV4dCBkZWZsYXRlIGNhbGwuCi0gICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBObyBtYXRj
aCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCi0gICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIs
IiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpOwotICAgICAgICAgICAgX3RyX3RhbGx5X2xp
dCAocywgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSwgYmZsdXNoKTsKLSAgICAgICAgICAgIHMtPmxv
b2thaGVhZC0tOwotICAgICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKLSAgICB9Ci0gICAgRkxVU0hfQkxPQ0so
cywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZp
bmlzaF9kb25lIDogYmxvY2tfZG9uZTsKLX0KLQotI2lmbmRlZiBGQVNURVNUCi0vKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLSAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJl
c3Npb24uIFdlIHVzZSBhIGxhenkKLSAqIGV2YWx1YXRpb24gZm9yIG1hdGNoZXM6IGEgbWF0Y2gg
aXMgZmluYWxseSBhZG9wdGVkIG9ubHkgaWYgdGhlcmUgaXMKLSAqIG5vIGJldHRlciBtYXRjaCBh
dCB0aGUgbmV4dCB3aW5kb3cgcG9zaXRpb24uCi0gKi8KLWxvY2FsIGJsb2NrX3N0YXRlIGRlZmxh
dGVfc2xvdyhzLCBmbHVzaCkKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGludCBmbHVzaDsK
LXsKLSAgICBJUG9zIGhhc2hfaGVhZCA9IE5JTDsgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICov
Ci0gICAgaW50IGJmbHVzaDsgICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11
c3QgYmUgZmx1c2hlZCAqLwotCi0gICAgLyogUHJvY2VzcyB0aGUgaW5wdXQgYmxvY2suICovCi0g
ICAgZm9yICg7OykgewotICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBl
bm91Z2ggbG9va2FoZWFkLCBleGNlcHQKLSAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5w
dXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKLSAgICAgICAgICogZm9yIHRoZSBuZXh0
IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCi0gICAgICAgICAqIHN0
cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guCi0gICAgICAgICAqLwotICAgICAgICBpZiAo
cy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkgewotICAgICAgICAgICAgZmlsbF93aW5kb3co
cyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVz
aCA9PSBaX05PX0ZMVVNIKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJlYWs7IC8q
IGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCi0gICAgICAgIH0KLQotICAgICAgICAvKiBJbnNl
cnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCi0gICAg
ICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBo
YXNoIGNoYWluOgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5f
TUFUQ0gpIHsKLSAgICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hf
aGVhZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBk
aXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLgotICAgICAgICAgKi8KLSAgICAgICAgcy0+
cHJldl9sZW5ndGggPSBzLT5tYXRjaF9sZW5ndGgsIHMtPnByZXZfbWF0Y2ggPSBzLT5tYXRjaF9z
dGFydDsKLSAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7Ci0KLSAgICAgICAg
aWYgKGhhc2hfaGVhZCAhPSBOSUwgJiYgcy0+cHJldl9sZW5ndGggPCBzLT5tYXhfbGF6eV9tYXRj
aCAmJgotICAgICAgICAgICAgcy0+c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gTUFYX0RJU1Qocykp
IHsKLSAgICAgICAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNo
ZXMgd2l0aCB0aGUgc3RyaW5nCi0gICAgICAgICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4g
cGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKLSAgICAgICAgICAgICAqIG9mIHRo
ZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHMtPnN0cmF0ZWd5ICE9IFpfSFVGRk1BTl9P
TkxZICYmIHMtPnN0cmF0ZWd5ICE9IFpfUkxFKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hf
bGVuZ3RoID0gbG9uZ2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAocy0+c3RyYXRlZ3kgPT0gWl9STEUgJiYgcy0+c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPT0g
MSkgewotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2hfZmFz
dCAocywgaGFzaF9oZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGxvbmdlc3Rf
bWF0Y2goKSBvciBsb25nZXN0X21hdGNoX2Zhc3QoKSBzZXRzIG1hdGNoX3N0YXJ0ICovCi0KLSAg
ICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPD0gNSAmJiAocy0+c3RyYXRlZ3kgPT0gWl9G
SUxURVJFRAotI2lmIFRPT19GQVIgPD0gMzI3NjcKLSAgICAgICAgICAgICAgICB8fCAocy0+bWF0
Y2hfbGVuZ3RoID09IE1JTl9NQVRDSCAmJgotICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFy
dCAtIHMtPm1hdGNoX3N0YXJ0ID4gVE9PX0ZBUikKLSNlbmRpZgotICAgICAgICAgICAgICAgICkp
IHsKLQotICAgICAgICAgICAgICAgIC8qIElmIHByZXZfbWF0Y2ggaXMgYWxzbyBNSU5fTUFUQ0gs
IG1hdGNoX3N0YXJ0IGlzIGdhcmJhZ2UKLSAgICAgICAgICAgICAgICAgKiBidXQgd2Ugd2lsbCBp
Z25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LgotICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IE1JTl9NQVRDSC0xOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIG1hdGNoIGF0IHRoZSBwcmV2
aW91cyBzdGVwIGFuZCB0aGUgY3VycmVudAotICAgICAgICAgKiBtYXRjaCBpcyBub3QgYmV0dGVy
LCBvdXRwdXQgdGhlIHByZXZpb3VzIG1hdGNoOgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMt
PnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLT5tYXRjaF9sZW5ndGggPD0gcy0+cHJldl9s
ZW5ndGgpIHsKLSAgICAgICAgICAgIHVJbnQgbWF4X2luc2VydCA9IHMtPnN0cnN0YXJ0ICsgcy0+
bG9va2FoZWFkIC0gTUlOX01BVENIOwotICAgICAgICAgICAgLyogRG8gbm90IGluc2VydCBzdHJp
bmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovCi0KLSAgICAgICAgICAgIGNoZWNrX21h
dGNoKHMsIHMtPnN0cnN0YXJ0LTEsIHMtPnByZXZfbWF0Y2gsIHMtPnByZXZfbGVuZ3RoKTsKLQot
ICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3Qocywgcy0+c3Ryc3RhcnQgLTEgLSBzLT5wcmV2X21h
dGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cHJldl9sZW5ndGggLSBNSU5fTUFU
Q0gsIGJmbHVzaCk7Ci0KLSAgICAgICAgICAgIC8qIEluc2VydCBpbiBoYXNoIHRhYmxlIGFsbCBz
dHJpbmdzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIG1hdGNoLgotICAgICAgICAgICAgICogc3Ryc3Rh
cnQtMSBhbmQgc3Ryc3RhcnQgYXJlIGFscmVhZHkgaW5zZXJ0ZWQuIElmIHRoZXJlIGlzIG5vdAot
ICAgICAgICAgICAgICogZW5vdWdoIGxvb2thaGVhZCwgdGhlIGxhc3QgdHdvIHN0cmluZ3MgYXJl
IG5vdCBpbnNlcnRlZCBpbgotICAgICAgICAgICAgICogdGhlIGhhc2ggdGFibGUuCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHMtPmxvb2thaGVhZCAtPSBzLT5wcmV2X2xlbmd0aC0xOwot
ICAgICAgICAgICAgcy0+cHJldl9sZW5ndGggLT0gMjsKLSAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICBpZiAoKytzLT5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hfaGVhZCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAoLS1zLT5wcmV2X2xlbmd0aCAhPSAw
KTsKLSAgICAgICAgICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7Ci0gICAgICAgICAgICBzLT5t
YXRjaF9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKLSAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7Ci0K
LSAgICAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwotCi0gICAgICAgIH0g
ZWxzZSBpZiAocy0+bWF0Y2hfYXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAvKiBJZiB0aGVyZSB3
YXMgbm8gbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHBvc2l0aW9uLCBvdXRwdXQgYQotICAgICAgICAg
ICAgICogc2luZ2xlIGxpdGVyYWwuIElmIHRoZXJlIHdhcyBhIG1hdGNoIGJ1dCB0aGUgY3VycmVu
dCBtYXRjaAotICAgICAgICAgICAgICogaXMgbG9uZ2VyLCB0cnVuY2F0ZSB0aGUgcHJldmlvdXMg
bWF0Y2ggdG8gYSBzaW5nbGUgbGl0ZXJhbC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
VHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpOwotICAgICAg
ICAgICAgX3RyX3RhbGx5X2xpdChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0sIGJmbHVzaCk7
Ci0gICAgICAgICAgICBpZiAoYmZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgRkxVU0hfQkxPQ0tf
T05MWShzLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cnN0YXJ0Kys7Ci0g
ICAgICAgICAgICBzLT5sb29rYWhlYWQtLTsKLSAgICAgICAgICAgIGlmIChzLT5zdHJtLT5hdmFp
bF9vdXQgPT0gMCkgcmV0dXJuIG5lZWRfbW9yZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBm
b3IKLSAgICAgICAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLgotICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAxOwotICAgICAgICAgICAgcy0+
c3Ryc3RhcnQrKzsKLSAgICAgICAgICAgIHMtPmxvb2thaGVhZC0tOwotICAgICAgICB9Ci0gICAg
fQotICAgIEFzc2VydCAoZmx1c2ggIT0gWl9OT19GTFVTSCwgIm5vIGZsdXNoPyIpOwotICAgIGlm
IChzLT5tYXRjaF9hdmFpbGFibGUpIHsKLSAgICAgICAgVHJhY2V2digoc3RkZXJyLCIlYyIsIHMt
PndpbmRvd1tzLT5zdHJzdGFydC0xXSkpOwotICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndp
bmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKLSAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxl
ID0gMDsKLSAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAg
IHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKLX0K
LSNlbmRpZiAvKiBGQVNURVNUICovCi0KLSNpZiAwCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IEZvciBaX1JMRSwgc2ltcGx5IGxvb2sgZm9yIHJ1bnMgb2YgYnl0ZXMsIGdlbmVyYXRlIG1hdGNo
ZXMgb25seSBvZiBkaXN0YW5jZQotICogb25lLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJs
ZS4gIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mCi0gKiBkZWZsYXRlIHN3
aXRjaGVzIGF3YXkgZnJvbSBaX1JMRS4pCi0gKi8KLWxvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVf
cmxlKHMsIGZsdXNoKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgaW50IGZsdXNoOwotewot
ICAgIGludCBiZmx1c2g7ICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBm
bHVzaGVkICovCi0gICAgdUludCBydW47ICAgICAgICAgICAvKiBsZW5ndGggb2YgcnVuICovCi0g
ICAgdUludCBtYXg7ICAgICAgICAgICAvKiBtYXhpbXVtIGxlbmd0aCBvZiBydW4gKi8KLSAgICB1
SW50IHByZXY7ICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovCi0g
ICAgQnl0ZWYgKnNjYW47ICAgICAgICAvKiBzY2FuIGZvciBlbmQgb2YgcnVuICovCi0KLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3Vn
aCBsb29rYWhlYWQsIGV4Y2VwdAotICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBm
aWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3Qg
ZW5jb2RhYmxlIHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBN
QVhfTUFUQ0gpIHsKLSAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwotICAgICAgICAgICAgaWYg
KHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2Nr
ICovCi0gICAgICAgIH0KLQotICAgICAgICAvKiBTZWUgaG93IG1hbnkgdGltZXMgdGhlIHByZXZp
b3VzIGJ5dGUgcmVwZWF0cyAqLwotICAgICAgICBydW4gPSAwOwotICAgICAgICBpZiAocy0+c3Ry
c3RhcnQgPiAwKSB7ICAgICAgLyogaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBieXRlLCB0aGF0IGlz
ICovCi0gICAgICAgICAgICBtYXggPSBzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0ggPyBzLT5sb29r
YWhlYWQgOiBNQVhfTUFUQ0g7Ci0gICAgICAgICAgICBzY2FuID0gcy0+d2luZG93ICsgcy0+c3Ry
c3RhcnQgLSAxOwotICAgICAgICAgICAgcHJldiA9ICpzY2FuKys7Ci0gICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgaWYgKCpzY2FuKysgIT0gcHJldikKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9IHdoaWxlICgrK3J1biA8IG1heCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25n
ZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovCi0gICAgICAgIGlmIChydW4gPj0gTUlOX01BVENIKSB7
Ci0gICAgICAgICAgICBjaGVja19tYXRjaChzLCBzLT5zdHJzdGFydCwgcy0+c3Ryc3RhcnQgLSAx
LCBydW4pOwotICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3QocywgMSwgcnVuIC0gTUlOX01BVENI
LCBiZmx1c2gpOwotICAgICAgICAgICAgcy0+bG9va2FoZWFkIC09IHJ1bjsKLSAgICAgICAgICAg
IHMtPnN0cnN0YXJ0ICs9IHJ1bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIE5v
IG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KLSAgICAgICAgICAgIFRyYWNldnYoKHN0
ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7Ci0gICAgICAgICAgICBfdHJfdGFs
bHlfbGl0IChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdLCBiZmx1c2gpOwotICAgICAgICAgICAg
cy0+bG9va2FoZWFkLS07Ci0gICAgICAgICAgICBzLT5zdHJzdGFydCsrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwotICAgIH0KLSAgICBGTFVTSF9C
TE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNI
ID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOwotfQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvZGVmbGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9kZWZsYXRlLmgJKHJldmlzaW9uIDUzNzE5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2RlZmxhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMzEgKzAsMCBAQAotLyogZGVmbGF0ZS5oIC0tIGludGVybmFsIGNv
bXByZXNzaW9uIHN0YXRlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBKZWFuLWxvdXAgR2Fp
bGx5Ci0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHly
aWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogV0FSTklORzogdGhpcyBmaWxlIHNob3Vs
ZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKLSAgIHBhcnQgb2YgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBpcwotICAgc3ViamVj
dCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgotICovCi0K
LS8qIEAoIykgJElkOiBkZWZsYXRlLmgsdiAzLjYgMjAwNS8wOC8wNCAxOToxNDoxNCB0b3IlY3Mu
YnJvd24uZWR1IEV4cCAkICovCi0KLSNpZm5kZWYgREVGTEFURV9ICi0jZGVmaW5lIERFRkxBVEVf
SAotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotLyogZGVmaW5lIE5PX0daSVAgd2hlbiBjb21waWxp
bmcgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBnemlwIGhlYWRlciBhbmQKLSAgIHRyYWlsZXIgY3Jl
YXRpb24gYnkgZGVmbGF0ZSgpLiAgTk9fR1pJUCB3b3VsZCBiZSB1c2VkIHRvIGF2b2lkIGxpbmtp
bmcgaW4KLSAgIHRoZSBjcmMgY29kZSB3aGVuIGl0IGlzIG5vdCBuZWVkZWQuICBGb3Igc2hhcmVk
IGxpYnJhcmllcywgZ3ppcCBlbmNvZGluZwotICAgc2hvdWxkIGJlIGxlZnQgZW5hYmxlZC4gKi8K
LSNpZm5kZWYgTk9fR1pJUAotIyAgZGVmaW5lIEdaSVAKLSNlbmRpZgotCi0vKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLSAqIEludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgotICovCi0KLSNkZWZpbmUg
TEVOR1RIX0NPREVTIDI5Ci0vKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGVzLCBub3QgY291bnRpbmcg
dGhlIHNwZWNpYWwgRU5EX0JMT0NLIGNvZGUgKi8KLQotI2RlZmluZSBMSVRFUkFMUyAgMjU2Ci0v
KiBudW1iZXIgb2YgbGl0ZXJhbCBieXRlcyAwLi4yNTUgKi8KLQotI2RlZmluZSBMX0NPREVTIChM
SVRFUkFMUysxK0xFTkdUSF9DT0RFUykKLS8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBj
b2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqLwotCi0jZGVmaW5lIERfQ09ERVMg
ICAzMAotLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCi0KLSNkZWZpbmUgQkxfQ09ERVMg
IDE5Ci0vKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMg
Ki8KLQotI2RlZmluZSBIRUFQX1NJWkUgKDIqTF9DT0RFUysxKQotLyogbWF4aW11bSBoZWFwIHNp
emUgKi8KLQotI2RlZmluZSBNQVhfQklUUyAxNQotLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2Vl
ZCBNQVhfQklUUyBiaXRzICovCi0KLSNkZWZpbmUgSU5JVF9TVEFURSAgICA0MgotI2RlZmluZSBF
WFRSQV9TVEFURSAgIDY5Ci0jZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMKLSNkZWZpbmUgQ09NTUVO
VF9TVEFURSA5MQotI2RlZmluZSBIQ1JDX1NUQVRFICAgMTAzCi0jZGVmaW5lIEJVU1lfU1RBVEUg
ICAxMTMKLSNkZWZpbmUgRklOSVNIX1NUQVRFIDY2NgotLyogU3RyZWFtIHN0YXR1cyAqLwotCi0K
LS8qIERhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5nbGUgdmFsdWUgYW5kIGl0cyBjb2Rl
IHN0cmluZy4gKi8KLXR5cGVkZWYgc3RydWN0IGN0X2RhdGFfcyB7Ci0gICAgdW5pb24gewotICAg
ICAgICB1c2ggIGZyZXE7ICAgICAgIC8qIGZyZXF1ZW5jeSBjb3VudCAqLwotICAgICAgICB1c2gg
IGNvZGU7ICAgICAgIC8qIGJpdCBzdHJpbmcgKi8KLSAgICB9IGZjOwotICAgIHVuaW9uIHsKLSAg
ICAgICAgdXNoICBkYWQ7ICAgICAgICAvKiBmYXRoZXIgbm9kZSBpbiBIdWZmbWFuIHRyZWUgKi8K
LSAgICAgICAgdXNoICBsZW47ICAgICAgICAvKiBsZW5ndGggb2YgYml0IHN0cmluZyAqLwotICAg
IH0gZGw7Ci19IEZBUiBjdF9kYXRhOwotCi0jZGVmaW5lIEZyZXEgZmMuZnJlcQotI2RlZmluZSBD
b2RlIGZjLmNvZGUKLSNkZWZpbmUgRGFkICBkbC5kYWQKLSNkZWZpbmUgTGVuICBkbC5sZW4KLQot
dHlwZWRlZiBzdHJ1Y3Qgc3RhdGljX3RyZWVfZGVzY19zICBzdGF0aWNfdHJlZV9kZXNjOwotCi10
eXBlZGVmIHN0cnVjdCB0cmVlX2Rlc2NfcyB7Ci0gICAgY3RfZGF0YSAqZHluX3RyZWU7ICAgICAg
ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovCi0gICAgaW50ICAgICBtYXhfY29kZTsgICAgICAg
ICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KLSAgICBzdGF0
aWNfdHJlZV9kZXNjICpzdGF0X2Rlc2M7IC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB0cmVl
ICovCi19IEZBUiB0cmVlX2Rlc2M7Ci0KLXR5cGVkZWYgdXNoIFBvczsKLXR5cGVkZWYgUG9zIEZB
UiBQb3NmOwotdHlwZWRlZiB1bnNpZ25lZCBJUG9zOwotCi0vKiBBIFBvcyBpcyBhbiBpbmRleCBp
biB0aGUgY2hhcmFjdGVyIHdpbmRvdy4gV2UgdXNlIHNob3J0IGluc3RlYWQgb2YgaW50IHRvCi0g
KiBzYXZlIHNwYWNlIGluIHRoZSB2YXJpb3VzIHRhYmxlcy4gSVBvcyBpcyB1c2VkIG9ubHkgZm9y
IHBhcmFtZXRlciBwYXNzaW5nLgotICovCi0KLXR5cGVkZWYgc3RydWN0IGludGVybmFsX3N0YXRl
IHsKLSAgICB6X3N0cmVhbXAgc3RybTsgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gdGhpcyB6bGli
IHN0cmVhbSAqLwotICAgIGludCAgIHN0YXR1czsgICAgICAgIC8qIGFzIHRoZSBuYW1lIGltcGxp
ZXMgKi8KLSAgICBCeXRlZiAqcGVuZGluZ19idWY7ICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAq
LwotICAgIHVsZyAgIHBlbmRpbmdfYnVmX3NpemU7IC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi8K
LSAgICBCeXRlZiAqcGVuZGluZ19vdXQ7ICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQg
dG8gdGhlIHN0cmVhbSAqLwotICAgIHVJbnQgICBwZW5kaW5nOyAgICAgIC8qIG5iIG9mIGJ5dGVz
IGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqLwotICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJp
dCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KLSAgICBnel9oZWFkZXJw
ICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwotICAgIHVJ
bnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICov
Ci0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVEIChmb3IgemlwIG9ubHkpIG9yIERF
RkxBVEVEICovCi0gICAgaW50ICAgbGFzdF9mbHVzaDsgICAgLyogdmFsdWUgb2YgZmx1c2ggcGFy
YW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwotCi0gICAgICAgICAgICAgICAgLyogdXNl
ZCBieSBkZWZsYXRlLmM6ICovCi0KLSAgICB1SW50ICB3X3NpemU7ICAgICAgICAvKiBMWjc3IHdp
bmRvdyBzaXplICgzMksgYnkgZGVmYXVsdCkgKi8KLSAgICB1SW50ICB3X2JpdHM7ICAgICAgICAv
KiBsb2cyKHdfc2l6ZSkgICg4Li4xNikgKi8KLSAgICB1SW50ICB3X21hc2s7ICAgICAgICAvKiB3
X3NpemUgLSAxICovCi0KLSAgICBCeXRlZiAqd2luZG93OwotICAgIC8qIFNsaWRpbmcgd2luZG93
LiBJbnB1dCBieXRlcyBhcmUgcmVhZCBpbnRvIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgd2luZG93
LAotICAgICAqIGFuZCBtb3ZlIHRvIHRoZSBmaXJzdCBoYWxmIGxhdGVyIHRvIGtlZXAgYSBkaWN0
aW9uYXJ5IG9mIGF0IGxlYXN0IHdTaXplCi0gICAgICogYnl0ZXMuIFdpdGggdGhpcyBvcmdhbml6
YXRpb24sIG1hdGNoZXMgYXJlIGxpbWl0ZWQgdG8gYSBkaXN0YW5jZSBvZgotICAgICAqIHdTaXpl
LU1BWF9NQVRDSCBieXRlcywgYnV0IHRoaXMgZW5zdXJlcyB0aGF0IElPIGlzIGFsd2F5cwotICAg
ICAqIHBlcmZvcm1lZCB3aXRoIGEgbGVuZ3RoIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLiBB
bHNvLCBpdCBsaW1pdHMKLSAgICAgKiB0aGUgd2luZG93IHNpemUgdG8gNjRLLCB3aGljaCBpcyBx
dWl0ZSB1c2VmdWwgb24gTVNET1MuCi0gICAgICogVG8gZG86IHVzZSB0aGUgdXNlciBpbnB1dCBi
dWZmZXIgYXMgc2xpZGluZyB3aW5kb3cuCi0gICAgICovCi0KLSAgICB1bGcgd2luZG93X3NpemU7
Ci0gICAgLyogQWN0dWFsIHNpemUgb2Ygd2luZG93OiAyKndTaXplLCBleGNlcHQgd2hlbiB0aGUg
dXNlciBpbnB1dCBidWZmZXIKLSAgICAgKiBpcyBkaXJlY3RseSB1c2VkIGFzIHNsaWRpbmcgd2lu
ZG93LgotICAgICAqLwotCi0gICAgUG9zZiAqcHJldjsKLSAgICAvKiBMaW5rIHRvIG9sZGVyIHN0
cmluZyB3aXRoIHNhbWUgaGFzaCBpbmRleC4gVG8gbGltaXQgdGhlIHNpemUgb2YgdGhpcwotICAg
ICAqIGFycmF5IHRvIDY0SywgdGhpcyBsaW5rIGlzIG1haW50YWluZWQgb25seSBmb3IgdGhlIGxh
c3QgMzJLIHN0cmluZ3MuCi0gICAgICogQW4gaW5kZXggaW4gdGhpcyBhcnJheSBpcyB0aHVzIGEg
d2luZG93IGluZGV4IG1vZHVsbyAzMksuCi0gICAgICovCi0KLSAgICBQb3NmICpoZWFkOyAvKiBI
ZWFkcyBvZiB0aGUgaGFzaCBjaGFpbnMgb3IgTklMLiAqLwotCi0gICAgdUludCAgaW5zX2g7ICAg
ICAgICAgIC8qIGhhc2ggaW5kZXggb2Ygc3RyaW5nIHRvIGJlIGluc2VydGVkICovCi0gICAgdUlu
dCAgaGFzaF9zaXplOyAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBoYXNoIHRhYmxlICov
Ci0gICAgdUludCAgaGFzaF9iaXRzOyAgICAgIC8qIGxvZzIoaGFzaF9zaXplKSAqLwotICAgIHVJ
bnQgIGhhc2hfbWFzazsgICAgICAvKiBoYXNoX3NpemUtMSAqLwotCi0gICAgdUludCAgaGFzaF9z
aGlmdDsKLSAgICAvKiBOdW1iZXIgb2YgYml0cyBieSB3aGljaCBpbnNfaCBtdXN0IGJlIHNoaWZ0
ZWQgYXQgZWFjaCBpbnB1dAotICAgICAqIHN0ZXAuIEl0IG11c3QgYmUgc3VjaCB0aGF0IGFmdGVy
IE1JTl9NQVRDSCBzdGVwcywgdGhlIG9sZGVzdAotICAgICAqIGJ5dGUgbm8gbG9uZ2VyIHRha2Vz
IHBhcnQgaW4gdGhlIGhhc2gga2V5LCB0aGF0IGlzOgotICAgICAqICAgaGFzaF9zaGlmdCAqIE1J
Tl9NQVRDSCA+PSBoYXNoX2JpdHMKLSAgICAgKi8KLQotICAgIGxvbmcgYmxvY2tfc3RhcnQ7Ci0g
ICAgLyogV2luZG93IHBvc2l0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgb3V0
cHV0IGJsb2NrLiBHZXRzCi0gICAgICogbmVnYXRpdmUgd2hlbiB0aGUgd2luZG93IGlzIG1vdmVk
IGJhY2t3YXJkcy4KLSAgICAgKi8KLQotICAgIHVJbnQgbWF0Y2hfbGVuZ3RoOyAgICAgICAgICAg
LyogbGVuZ3RoIG9mIGJlc3QgbWF0Y2ggKi8KLSAgICBJUG9zIHByZXZfbWF0Y2g7ICAgICAgICAg
ICAgIC8qIHByZXZpb3VzIG1hdGNoICovCi0gICAgaW50IG1hdGNoX2F2YWlsYWJsZTsgICAgICAg
ICAvKiBzZXQgaWYgcHJldmlvdXMgbWF0Y2ggZXhpc3RzICovCi0gICAgdUludCBzdHJzdGFydDsg
ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBzdHJpbmcgdG8gaW5zZXJ0ICovCi0gICAgdUludCBt
YXRjaF9zdGFydDsgICAgICAgICAgICAvKiBzdGFydCBvZiBtYXRjaGluZyBzdHJpbmcgKi8KLSAg
ICB1SW50IGxvb2thaGVhZDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB2YWxpZCBieXRlcyBh
aGVhZCBpbiB3aW5kb3cgKi8KLQotICAgIHVJbnQgcHJldl9sZW5ndGg7Ci0gICAgLyogTGVuZ3Ro
IG9mIHRoZSBiZXN0IG1hdGNoIGF0IHByZXZpb3VzIHN0ZXAuIE1hdGNoZXMgbm90IGdyZWF0ZXIg
dGhhbiB0aGlzCi0gICAgICogYXJlIGRpc2NhcmRlZC4gVGhpcyBpcyB1c2VkIGluIHRoZSBsYXp5
IG1hdGNoIGV2YWx1YXRpb24uCi0gICAgICovCi0KLSAgICB1SW50IG1heF9jaGFpbl9sZW5ndGg7
Ci0gICAgLyogVG8gc3BlZWQgdXAgZGVmbGF0aW9uLCBoYXNoIGNoYWlucyBhcmUgbmV2ZXIgc2Vh
cmNoZWQgYmV5b25kIHRoaXMKLSAgICAgKiBsZW5ndGguICBBIGhpZ2hlciBsaW1pdCBpbXByb3Zl
cyBjb21wcmVzc2lvbiByYXRpbyBidXQgZGVncmFkZXMgdGhlCi0gICAgICogc3BlZWQuCi0gICAg
ICovCi0KLSAgICB1SW50IG1heF9sYXp5X21hdGNoOwotICAgIC8qIEF0dGVtcHQgdG8gZmluZCBh
IGJldHRlciBtYXRjaCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgbWF0Y2ggaXMgc3RyaWN0bHkKLSAg
ICAgKiBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZS4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBvbmx5
IGZvciBjb21wcmVzc2lvbgotICAgICAqIGxldmVscyA+PSA0LgotICAgICAqLwotIyAgIGRlZmlu
ZSBtYXhfaW5zZXJ0X2xlbmd0aCAgbWF4X2xhenlfbWF0Y2gKLSAgICAvKiBJbnNlcnQgbmV3IHN0
cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdAot
ICAgICAqIGdyZWF0ZXIgdGhhbiB0aGlzIGxlbmd0aC4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdy
YWRlcyBjb21wcmVzc2lvbi4KLSAgICAgKiBtYXhfaW5zZXJ0X2xlbmd0aCBpcyB1c2VkIG9ubHkg
Zm9yIGNvbXByZXNzaW9uIGxldmVscyA8PSAzLgotICAgICAqLwotCi0gICAgaW50IGxldmVsOyAg
ICAvKiBjb21wcmVzc2lvbiBsZXZlbCAoMS4uOSkgKi8KLSAgICBpbnQgc3RyYXRlZ3k7IC8qIGZh
dm9yIG9yIGZvcmNlIEh1ZmZtYW4gY29kaW5nKi8KLQotICAgIHVJbnQgZ29vZF9tYXRjaDsKLSAg
ICAvKiBVc2UgYSBmYXN0ZXIgc2VhcmNoIHdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGlzIGxvbmdl
ciB0aGFuIHRoaXMgKi8KLQotICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNlYXJjaGluZyB3
aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCi0KLSAgICAgICAgICAgICAgICAvKiB1
c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVs
b3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCi0gICAgc3RydWN0IGN0X2RhdGFfcyBk
eW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqLwotICAg
IHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJl
ZSAqLwotICAgIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVm
Zm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqLwotCi0gICAgc3RydWN0IHRyZWVfZGVzY19zIGxf
ZGVzYzsgICAgICAgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovCi0gICAgc3Ry
dWN0IHRyZWVfZGVzY19zIGRfZGVzYzsgICAgICAgICAgICAgICAvKiBkZXNjLiBmb3IgZGlzdGFu
Y2UgdHJlZSAqLwotICAgIHN0cnVjdCB0cmVlX2Rlc2NfcyBibF9kZXNjOyAgICAgICAgICAgICAg
LyogZGVzYy4gZm9yIGJpdCBsZW5ndGggdHJlZSAqLwotCi0gICAgdXNoIGJsX2NvdW50W01BWF9C
SVRTKzFdOwotICAgIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFu
IG9wdGltYWwgdHJlZSAqLwotCi0gICAgaW50IGhlYXBbMipMX0NPREVTKzFdOyAgICAgIC8qIGhl
YXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqLwotICAgIGludCBoZWFwX2xlbjsg
ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhlYXAgKi8KLSAgICBp
bnQgaGVhcF9tYXg7ICAgICAgICAgICAgICAgLyogZWxlbWVudCBvZiBsYXJnZXN0IGZyZXF1ZW5j
eSAqLwotICAgIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsy
Km4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuCi0gICAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBp
cyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy4KLSAgICAgKi8KLQotICAgIHVjaCBkZXB0aFsyKkxf
Q09ERVMrMV07Ci0gICAgLyogRGVwdGggb2YgZWFjaCBzdWJ0cmVlIHVzZWQgYXMgdGllIGJyZWFr
ZXIgZm9yIHRyZWVzIG9mIGVxdWFsIGZyZXF1ZW5jeQotICAgICAqLwotCi0gICAgdWNoZiAqbF9i
dWY7ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgbGl0ZXJhbHMgb3IgbGVuZ3RocyAqLwotCi0gICAg
dUludCAgbGl0X2J1ZnNpemU7Ci0gICAgLyogU2l6ZSBvZiBtYXRjaCBidWZmZXIgZm9yIGxpdGVy
YWxzL2xlbmd0aHMuICBUaGVyZSBhcmUgNCByZWFzb25zIGZvcgotICAgICAqIGxpbWl0aW5nIGxp
dF9idWZzaXplIHRvIDY0SzoKLSAgICAgKiAgIC0gZnJlcXVlbmNpZXMgY2FuIGJlIGtlcHQgaW4g
MTYgYml0IGNvdW50ZXJzCi0gICAgICogICAtIGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNz
ZnVsIGZvciB0aGUgZmlyc3QgYmxvY2ssIGFsbCBpbnB1dAotICAgICAqICAgICBkYXRhIGlzIHN0
aWxsIGluIHRoZSB3aW5kb3cgc28gd2UgY2FuIHN0aWxsIGVtaXQgYSBzdG9yZWQgYmxvY2sgZXZl
bgotICAgICAqICAgICB3aGVuIGlucHV0IGNvbWVzIGZyb20gc3RhbmRhcmQgaW5wdXQuICAoVGhp
cyBjYW4gYWxzbyBiZSBkb25lIGZvcgotICAgICAqICAgICBhbGwgYmxvY2tzIGlmIGxpdF9idWZz
aXplIGlzIG5vdCBncmVhdGVyIHRoYW4gMzJLLikKLSAgICAgKiAgIC0gaWYgY29tcHJlc3Npb24g
aXMgbm90IHN1Y2Nlc3NmdWwgZm9yIGEgZmlsZSBzbWFsbGVyIHRoYW4gNjRLLCB3ZSBjYW4KLSAg
ICAgKiAgICAgZXZlbiBlbWl0IGEgc3RvcmVkIGZpbGUgaW5zdGVhZCBvZiBhIHN0b3JlZCBibG9j
ayAoc2F2aW5nIDUgYnl0ZXMpLgotICAgICAqICAgICBUaGlzIGlzIGFwcGxpY2FibGUgb25seSBm
b3IgemlwIChub3QgZ3ppcCBvciB6bGliKS4KLSAgICAgKiAgIC0gY3JlYXRpbmcgbmV3IEh1ZmZt
YW4gdHJlZXMgbGVzcyBmcmVxdWVudGx5IG1heSBub3QgcHJvdmlkZSBmYXN0Ci0gICAgICogICAg
IGFkYXB0YXRpb24gdG8gY2hhbmdlcyBpbiB0aGUgaW5wdXQgZGF0YSBzdGF0aXN0aWNzLiAoVGFr
ZSBmb3IKLSAgICAgKiAgICAgZXhhbXBsZSBhIGJpbmFyeSBmaWxlIHdpdGggcG9vcmx5IGNvbXBy
ZXNzaWJsZSBjb2RlIGZvbGxvd2VkIGJ5Ci0gICAgICogICAgIGEgaGlnaGx5IGNvbXByZXNzaWJs
ZSBzdHJpbmcgdGFibGUuKSBTbWFsbGVyIGJ1ZmZlciBzaXplcyBnaXZlCi0gICAgICogICAgIGZh
c3QgYWRhcHRhdGlvbiBidXQgaGF2ZSBvZiBjb3Vyc2UgdGhlIG92ZXJoZWFkIG9mIHRyYW5zbWl0
dGluZwotICAgICAqICAgICB0cmVlcyBtb3JlIGZyZXF1ZW50bHkuCi0gICAgICogICAtIEkgY2Fu
J3QgY291bnQgYWJvdmUgNAotICAgICAqLwotCi0gICAgdUludCBsYXN0X2xpdDsgICAgICAvKiBy
dW5uaW5nIGluZGV4IGluIGxfYnVmICovCi0KLSAgICB1c2hmICpkX2J1ZjsKLSAgICAvKiBCdWZm
ZXIgZm9yIGRpc3RhbmNlcy4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRfYnVmIGFuZCBsX2J1ZiBo
YXZlCi0gICAgICogdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLiBUbyB1c2UgZGlmZmVyZW50
IGxlbmd0aHMsIGFuIGV4dHJhIGZsYWcKLSAgICAgKiBhcnJheSB3b3VsZCBiZSBuZWNlc3Nhcnku
Ci0gICAgICovCi0KLSAgICB1bGcgb3B0X2xlbjsgICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3Vy
cmVudCBibG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi8KLSAgICB1bGcgc3RhdGljX2xlbjsgICAg
IC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqLwotICAg
IHVJbnQgbWF0Y2hlczsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJl
bnQgYmxvY2sgKi8KLSAgICBpbnQgbGFzdF9lb2JfbGVuOyAgIC8qIGJpdCBsZW5ndGggb2YgRU9C
IGNvZGUgZm9yIGxhc3QgYmxvY2sgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgdWxnIGNvbXByZXNz
ZWRfbGVuOyAvKiB0b3RhbCBiaXQgbGVuZ3RoIG9mIGNvbXByZXNzZWQgZmlsZSBtb2QgMl4zMiAq
LwotICAgIHVsZyBiaXRzX3NlbnQ7ICAgICAgLyogYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGRh
dGEgc2VudCBtb2QgMl4zMiAqLwotI2VuZGlmCi0KLSAgICB1c2ggYmlfYnVmOwotICAgIC8qIE91
dHB1dCBidWZmZXIuIGJpdHMgYXJlIGluc2VydGVkIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gKGxl
YXN0Ci0gICAgICogc2lnbmlmaWNhbnQgYml0cykuCi0gICAgICovCi0gICAgaW50IGJpX3ZhbGlk
OwotICAgIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGJpX2J1Zi4gIEFsbCBiaXRzIGFib3Zl
IHRoZSBsYXN0IHZhbGlkIGJpdAotICAgICAqIGFyZSBhbHdheXMgemVyby4KLSAgICAgKi8KLQot
fSBGQVIgZGVmbGF0ZV9zdGF0ZTsKLQotLyogT3V0cHV0IGEgYnl0ZSBvbiB0aGUgc3RyZWFtLgot
ICogSU4gYXNzZXJ0aW9uOiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBwZW5kaW5nX2J1Zi4KLSAq
LwotI2RlZmluZSBwdXRfYnl0ZShzLCBjKSB7cy0+cGVuZGluZ19idWZbcy0+cGVuZGluZysrXSA9
IChjKTt9Ci0KLQotI2RlZmluZSBNSU5fTE9PS0FIRUFEIChNQVhfTUFUQ0grTUlOX01BVENIKzEp
Ci0vKiBNaW5pbXVtIGFtb3VudCBvZiBsb29rYWhlYWQsIGV4Y2VwdCBhdCB0aGUgZW5kIG9mIHRo
ZSBpbnB1dCBmaWxlLgotICogU2VlIGRlZmxhdGUuYyBmb3IgY29tbWVudHMgYWJvdXQgdGhlIE1J
Tl9NQVRDSCsxLgotICovCi0KLSNkZWZpbmUgTUFYX0RJU1QocykgICgocyktPndfc2l6ZS1NSU5f
TE9PS0FIRUFEKQotLyogSW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvZGUsIHBhcnRpY3VsYXJs
eSBvbiAxNiBiaXQgbWFjaGluZXMsIG1hdGNoCi0gKiBkaXN0YW5jZXMgYXJlIGxpbWl0ZWQgdG8g
TUFYX0RJU1QgaW5zdGVhZCBvZiBXU0laRS4KLSAqLwotCi0gICAgICAgIC8qIGluIHRyZWVzLmMg
Ki8KLXZvaWQgX3RyX2luaXQgICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwotaW50ICBf
dHJfdGFsbHkgICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCB1bnNpZ25lZCBkaXN0LCB1bnNp
Z25lZCBsYykpOwotdm9pZCBfdHJfZmx1c2hfYmxvY2sgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBj
aGFyZiAqYnVmLCB1bGcgc3RvcmVkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGVvZikpOwotdm9pZCBfdHJfYWxpZ24gICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Ci12
b2lkIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsIHVs
ZyBzdG9yZWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW9mKSk7Ci0KLSNk
ZWZpbmUgZF9jb2RlKGRpc3QpIFwKLSAgICgoZGlzdCkgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3Rd
IDogX2Rpc3RfY29kZVsyNTYrKChkaXN0KT4+NyldKQotLyogTWFwcGluZyBmcm9tIGEgZGlzdGFu
Y2UgdG8gYSBkaXN0YW5jZSBjb2RlLiBkaXN0IGlzIHRoZSBkaXN0YW5jZSAtIDEgYW5kCi0gKiBt
dXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gX2Rpc3RfY29kZVsyNTZdIGFuZCBfZGlzdF9jb2Rl
WzI1N10gYXJlIG5ldmVyCi0gKiB1c2VkLgotICovCi0KLSNpZm5kZWYgREVCVUcKLS8qIElubGlu
ZSB2ZXJzaW9ucyBvZiBfdHJfdGFsbHkgZm9yIHNwZWVkOiAqLwotCi0jaWYgZGVmaW5lZChHRU5f
VFJFRVNfSCkgfHwgIWRlZmluZWQoU1REQykKLSAgZXh0ZXJuIHVjaCBfbGVuZ3RoX2NvZGVbXTsK
LSAgZXh0ZXJuIHVjaCBfZGlzdF9jb2RlW107Ci0jZWxzZQotICBleHRlcm4gY29uc3QgdWNoIF9s
ZW5ndGhfY29kZVtdOwotICBleHRlcm4gY29uc3QgdWNoIF9kaXN0X2NvZGVbXTsKLSNlbmRpZgot
Ci0jIGRlZmluZSBfdHJfdGFsbHlfbGl0KHMsIGMsIGZsdXNoKSBcCi0gIHsgdWNoIGNjID0gKGMp
OyBcCi0gICAgcy0+ZF9idWZbcy0+bGFzdF9saXRdID0gMDsgXAotICAgIHMtPmxfYnVmW3MtPmxh
c3RfbGl0KytdID0gY2M7IFwKLSAgICBzLT5keW5fbHRyZWVbY2NdLkZyZXErKzsgXAotICAgIGZs
dXNoID0gKHMtPmxhc3RfbGl0ID09IHMtPmxpdF9idWZzaXplLTEpOyBcCi0gICB9Ci0jIGRlZmlu
ZSBfdHJfdGFsbHlfZGlzdChzLCBkaXN0YW5jZSwgbGVuZ3RoLCBmbHVzaCkgXAotICB7IHVjaCBs
ZW4gPSAobGVuZ3RoKTsgXAotICAgIHVzaCBkaXN0ID0gKGRpc3RhbmNlKTsgXAotICAgIHMtPmRf
YnVmW3MtPmxhc3RfbGl0XSA9IGRpc3Q7IFwKLSAgICBzLT5sX2J1ZltzLT5sYXN0X2xpdCsrXSA9
IGxlbjsgXAotICAgIGRpc3QtLTsgXAotICAgIHMtPmR5bl9sdHJlZVtfbGVuZ3RoX2NvZGVbbGVu
XStMSVRFUkFMUysxXS5GcmVxKys7IFwKLSAgICBzLT5keW5fZHRyZWVbZF9jb2RlKGRpc3QpXS5G
cmVxKys7IFwKLSAgICBmbHVzaCA9IChzLT5sYXN0X2xpdCA9PSBzLT5saXRfYnVmc2l6ZS0xKTsg
XAotICB9Ci0jZWxzZQotIyBkZWZpbmUgX3RyX3RhbGx5X2xpdChzLCBjLCBmbHVzaCkgZmx1c2gg
PSBfdHJfdGFsbHkocywgMCwgYykKLSMgZGVmaW5lIF90cl90YWxseV9kaXN0KHMsIGRpc3RhbmNl
LCBsZW5ndGgsIGZsdXNoKSBcCi0gICAgICAgICAgICAgIGZsdXNoID0gX3RyX3RhbGx5KHMsIGRp
c3RhbmNlLCBsZW5ndGgpCi0jZW5kaWYKLQotI2VuZGlmIC8qIERFRkxBVEVfSCAqLwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2d6aW8uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvZ3ppby5jCShyZXZpc2lvbiA1
MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9nemlvLmMJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAyNiArMCwwIEBACi0vKiBnemlvLmMgLS0gSU8gb24gLmd6IGZp
bGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9y
IGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNl
IGluIHpsaWIuaAotICoKLSAqIENvbXBpbGUgdGhpcyBmaWxlIHdpdGggLUROT19HWkNPTVBSRVNT
IHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlLgotICovCi0KLS8qIEAoIykgJElkOiBnemlv
LmMsdiAzLjcgMjAwNS8wOC8wNCAxOToxNDoxNCB0b3IlY3MuYnJvd24uZWR1IEV4cCAkICovCi0K
LSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RF
RkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwot
IyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKLSNlbmRpZgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wK
LXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxl
cnMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFpfQlVGU0laRQotIyAgaWZkZWYgTUFYU0VHXzY0Swot
IyAgICBkZWZpbmUgWl9CVUZTSVpFIDQwOTYgLyogbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvciAx
Ni1iaXQgRE9TICovCi0jICBlbHNlCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgMTYzODQKLSMgIGVu
ZGlmCi0jZW5kaWYKLSNpZm5kZWYgWl9QUklOVEZfQlVGU0laRQotIyAgZGVmaW5lIFpfUFJJTlRG
X0JVRlNJWkUgNDA5NgotI2VuZGlmCi0KLSNpZmRlZiBfX01WU19fCi0jICBwcmFnbWEgbWFwIChm
ZG9wZW4gLCAiXDE3NFwxNzRGRE9QRU4iKQotICAgRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hh
ciAqKTsKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLWV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1
SW50IHNpemUpKTsKLWV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7Ci0jZW5k
aWYKLQotI2RlZmluZSBBTExPQyhzaXplKSBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgVFJZRlJFRShw
KSB7aWYgKHApIGZyZWUocCk7fQotCi1zdGF0aWMgaW50IGNvbnN0IGd6X21hZ2ljWzJdID0gezB4
MWYsIDB4OGJ9OyAvKiBnemlwIG1hZ2ljIGhlYWRlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAq
LwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkg
YXNjaWkgdGV4dCAqLwotI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhl
YWRlciBDUkMgcHJlc2VudCAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBz
ZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyog
Yml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5U
ICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5l
IFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KLQotdHlwZWRlZiBz
dHJ1Y3QgZ3pfc3RyZWFtIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50ICAgICAgel9l
cnI7ICAgLyogZXJyb3IgY29kZSBmb3IgbGFzdCBzdHJlYW0gb3BlcmF0aW9uICovCi0gICAgaW50
ICAgICAgel9lb2Y7ICAgLyogc2V0IGlmIGVuZCBvZiBpbnB1dCBmaWxlICovCi0gICAgRklMRSAg
ICAgKmZpbGU7ICAgLyogLmd6IGZpbGUgKi8KLSAgICBCeXRlICAgICAqaW5idWY7ICAvKiBpbnB1
dCBidWZmZXIgKi8KLSAgICBCeXRlICAgICAqb3V0YnVmOyAvKiBvdXRwdXQgYnVmZmVyICovCi0g
ICAgdUxvbmcgICAgY3JjOyAgICAgLyogY3JjMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KLSAg
ICBjaGFyICAgICAqbXNnOyAgICAvKiBlcnJvciBtZXNzYWdlICovCi0gICAgY2hhciAgICAgKnBh
dGg7ICAgLyogcGF0aCBuYW1lIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotICAgIGludCAgICAgIHRy
YW5zcGFyZW50OyAvKiAxIGlmIGlucHV0IGZpbGUgaXMgbm90IGEgLmd6IGZpbGUgKi8KLSAgICBj
aGFyICAgICBtb2RlOyAgICAvKiAndycgb3IgJ3InICovCi0gICAgel9vZmZfdCAgc3RhcnQ7ICAg
Lyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhIGluIGZpbGUgKGhlYWRlciBza2lwcGVkKSAqLwot
ICAgIHpfb2ZmX3QgIGluOyAgICAgIC8qIGJ5dGVzIGludG8gZGVmbGF0ZSBvciBpbmZsYXRlICov
Ci0gICAgel9vZmZfdCAgb3V0OyAgICAgLyogYnl0ZXMgb3V0IG9mIGRlZmxhdGUgb3IgaW5mbGF0
ZSAqLwotICAgIGludCAgICAgIGJhY2s7ICAgIC8qIG9uZSBjaGFyYWN0ZXIgcHVzaC1iYWNrICov
Ci0gICAgaW50ICAgICAgbGFzdDsgICAgLyogdHJ1ZSBpZiBwdXNoLWJhY2sgaXMgbGFzdCBjaGFy
YWN0ZXIgKi8KLX0gZ3pfc3RyZWFtOwotCi0KLWxvY2FsIGd6RmlsZSBnel9vcGVuICAgICAgT0Yo
KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCAgZmQpKTsKLWxvY2FsIGlu
dCBkb19mbHVzaCAgICAgICAgT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGlu
dCAgICBnZXRfYnl0ZSAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIGNoZWNr
X2hlYWRlciBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCBpbnQgICAgZGVzdHJveSAgICAgIE9G
KChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBwdXRMb25nICAgICAgT0YoKEZJTEUgKmZp
bGUsIHVMb25nIHgpKTsKLWxvY2FsIHVMb25nICBnZXRMb25nICAgICAgT0YoKGd6X3N0cmVhbSAq
cykpOwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZp
bGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBp
biBmb3BlbiAoInJiIiBvciAid2IiKS4gVGhlIGZpbGUgaXMgZ2l2ZW4gZWl0aGVyIGJ5IGZpbGUg
ZGVzY3JpcHRvcgotICAgb3IgcGF0aCBuYW1lIChpZiBmZCA9PSAtMSkuCi0gICAgIGd6X29wZW4g
cmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUg
d2FzCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Np
b24gc3RhdGU7IGVycm5vCi0gICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdv
IGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJS
T1IpLgotKi8KLWxvY2FsIGd6RmlsZSBnel9vcGVuIChwYXRoLCBtb2RlLCBmZCkKLSAgICBjb25z
dCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci0gICAgaW50ICBmZDsKLXsKLSAg
ICBpbnQgZXJyOwotICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsgLyogY29t
cHJlc3Npb24gbGV2ZWwgKi8KLSAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7
IC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCi0gICAgY2hhciAqcCA9IChjaGFyKiltb2RlOwot
ICAgIGd6X3N0cmVhbSAqczsKLSAgICBjaGFyIGZtb2RlWzgwXTsgLyogY29weSBvZiBtb2RlLCB3
aXRob3V0IHRoZSBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGNoYXIgKm0gPSBmbW9kZTsKLQot
ICAgIGlmICghcGF0aCB8fCAhbW9kZSkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMgPSAoZ3pfc3Ry
ZWFtICopQUxMT0Moc2l6ZW9mKGd6X3N0cmVhbSkpOwotICAgIGlmICghcykgcmV0dXJuIFpfTlVM
TDsKLQotICAgIHMtPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHMtPnN0cmVh
bS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikw
OwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWYgPSBaX05VTEw7Ci0gICAgcy0+c3Ry
ZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5hdmFpbF9p
biA9IHMtPnN0cmVhbS5hdmFpbF9vdXQgPSAwOwotICAgIHMtPmZpbGUgPSBOVUxMOwotICAgIHMt
PnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMt
Pm91dCA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9O
VUxMLCAwKTsKLSAgICBzLT5tc2cgPSBOVUxMOwotICAgIHMtPnRyYW5zcGFyZW50ID0gMDsKLQot
ICAgIHMtPnBhdGggPSAoY2hhciopQUxMT0Moc3RybGVuKHBhdGgpKzEpOwotICAgIGlmIChzLT5w
YXRoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxM
OwotICAgIH0KLSAgICBzdHJjcHkocy0+cGF0aCwgcGF0aCk7IC8qIGRvIHRoaXMgZWFybHkgZm9y
IGRlYnVnZ2luZyAqLwotCi0gICAgcy0+bW9kZSA9ICdcMCc7Ci0gICAgZG8gewotICAgICAgICBp
ZiAoKnAgPT0gJ3InKSBzLT5tb2RlID0gJ3InOwotICAgICAgICBpZiAoKnAgPT0gJ3cnIHx8ICpw
ID09ICdhJykgcy0+bW9kZSA9ICd3JzsKLSAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAn
OScpIHsKLSAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7Ci0gICAgICAgIH0gZWxzZSBpZiAo
KnAgPT0gJ2YnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwotICAgICAgICB9
IGVsc2UgaWYgKCpwID09ICdoJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9IVUZGTUFOX09O
TFk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1InKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kg
PSBaX1JMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICptKysgPSAqcDsgLyogY29w
eSB0aGUgbW9kZSAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKnArKyAmJiBtICE9IGZtb2Rl
ICsgc2l6ZW9mKGZtb2RlKSk7Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ1wwJykgcmV0dXJuIGRlc3Ry
b3kocyksIChnekZpbGUpWl9OVUxMOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZk
ZWYgTk9fR1pDT01QUkVTUwotICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0g
ICAgICAgIGVyciA9IGRlZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIGxldmVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwg
c3RyYXRlZ3kpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gc3VwcHJl
c3MgemxpYiBoZWFkZXIgKi8KLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRi
dWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSNlbmRpZgotICAgICAgICBpZiAoZXJyICE9
IFpfT0sgfHwgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ry
b3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cy0+c3RyZWFtLm5leHRfaW4gID0gcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsK
LQotICAgICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCAtTUFYX1dCSVRTKTsK
LSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHRlbGwgdGhhdCB0aGVyZSBp
cyBubyB6bGliIGhlYWRlci4KLSAgICAgICAgICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpbmZs
YXRlICpyZXF1aXJlcyogYW4gZXh0cmEgImR1bW15IiBieXRlCi0gICAgICAgICAqIGFmdGVyIHRo
ZSBjb21wcmVzc2VkIHN0cmVhbSBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIGFu
ZAotICAgICAgICAgKiByZXR1cm4gWl9TVFJFQU1fRU5ELiBIZXJlIHRoZSBnemlwIENSQzMyIGVu
c3VyZXMgdGhhdCA0IGJ5dGVzIGFyZQotICAgICAgICAgKiBwcmVzZW50IGFmdGVyIHRoZSBjb21w
cmVzc2VkIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBz
LT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pG
aWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0g
Wl9CVUZTSVpFOwotCi0gICAgZXJybm8gPSAwOwotICAgIHMtPmZpbGUgPSBmZCA8IDAgPyBGX09Q
RU4ocGF0aCwgZm1vZGUpIDogKEZJTEUqKWZkb3BlbihmZCwgZm1vZGUpOwotCi0gICAgaWYgKHMt
PmZpbGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05V
TEw7Ci0gICAgfQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotICAgICAgICAvKiBXcml0ZSBh
IHZlcnkgc2ltcGxlIC5neiBoZWFkZXI6Ci0gICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHMt
PmZpbGUsICIlYyVjJWMlYyVjJWMlYyVjJWMlYyIsIGd6X21hZ2ljWzBdLCBnel9tYWdpY1sxXSwK
LSAgICAgICAgICAgICBaX0RFRkxBVEVELCAwIC8qZmxhZ3MqLywgMCwwLDAsMCAvKnRpbWUqLywg
MCAvKnhmbGFncyovLCBPU19DT0RFKTsKLSAgICAgICAgcy0+c3RhcnQgPSAxMEw7Ci0gICAgICAg
IC8qIFdlIHVzZSAxMEwgaW5zdGVhZCBvZiBmdGVsbChzLT5maWxlKSB0byBiZWNhdXNlIGZ0ZWxs
IGNhdXNlcyBhbgotICAgICAgICAgKiBmZmx1c2ggb24gc29tZSBzeXN0ZW1zLiBUaGlzIHZlcnNp
b24gb2YgdGhlIGxpYnJhcnkgZG9lc24ndCB1c2UKLSAgICAgICAgICogc3RhcnQgYW55d2F5IGlu
IHdyaXRlIG1vZGUsIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbm90Ci0gICAgICAgICAqIG5l
Y2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hlY2tfaGVhZGVy
KHMpOyAvKiBza2lwIHRoZSAuZ3ogaGVhZGVyICovCi0gICAgICAgIHMtPnN0YXJ0ID0gZnRlbGwo
cy0+ZmlsZSkgLSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIChnekZp
bGUpczsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6
KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pvcGVu
IChwYXRoLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9k
ZTsKLXsKLSAgICByZXR1cm4gZ3pfb3BlbiAocGF0aCwgbW9kZSwgLTEpOwotfQotCi0vKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAgICAgQXNzb2NpYXRlIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVz
Y3JpcHRvciBmZC4gZmQgaXMgbm90IGR1cCdlZCBoZXJlCi0gICB0byBtaW1pYyB0aGUgYmVoYXZp
byh1KXIgb2YgZmRvcGVuLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQot
ICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIGNoYXIgbmFtZVs0Nl07
ICAgICAgLyogYWxsb3cgZm9yIHVwIHRvIDEyOC1iaXQgaW50ZWdlcnMgKi8KLQotICAgIGlmIChm
ZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5hbWUsICI8ZmQ6JWQ+
IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pfb3BlbiAobmFtZSwg
bW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSB0aGUgY29t
cHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JUIGd6c2V0cGFyYW1z
IChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGxldmVs
OwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilm
aWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RS
RUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNoaW5nICovCi0gICAg
aWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0
X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVG
U0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpf
RVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0la
RTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5zdHJlYW0pLCBsZXZl
bCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZCBhIGJ5
dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4g
RU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBo
YXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwotbG9jYWwgaW50IGdl
dF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56X2VvZikgcmV0dXJu
IEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgZXJybm8g
PSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1Ziwg
MSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9
PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAoZmVycm9y
KHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4gRU9GOwot
ICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgfQot
ICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5uZXh0X2lu
KSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBnemlwIGhl
YWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3RyZWFtCi0g
ICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMgbm90IHBy
ZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2ljIGhlYWRl
ciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5jb3JyZWN0
LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRl
ZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBmb3IgdGhl
IGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0ZW5hdGVk
IC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6X3N0cmVh
bSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGludCBmbGFn
czsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQotICAgIC8q
IEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVhZCAtLSBo
YW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0IHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVudCAqLwot
ICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewotICAgICAg
ICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAgICAgICBl
cnJubyA9IDA7Ci0gICAgICAgIGxlbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBa
X0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJv
cihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxf
aW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAg
ICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJl
bnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRl
ciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAg
ICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50
cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2
YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNr
IHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMp
OwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVE
IHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRB
X0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4
ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykg
KHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDAp
IHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRf
Ynl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAg
IC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFu
eXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0Yp
IDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRo
ZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykp
ICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9
IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgo
YyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxh
Z3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAg
ICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9
Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9z
dHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSBy
ZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykK
LSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMp
IHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlm
IChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycp
IHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJP
UjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0j
ZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAg
ZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0g
ICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVz
IGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQot
ICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5p
bmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0g
ICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJv
bSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBi
eXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQg
Z3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7
Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZp
bGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZv
ciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5u
ZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09
IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlm
IChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJu
IC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9G
ICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0
ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlm
IChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0
X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAg
IHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAg
cy0+b3V0Kys7Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAg
ICAgICAgICBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkg
ewotCi0gICAgICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBm
aXJzdCB0aGUgbG9va2FoZWFkIGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3Ry
ZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBu
ID0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAg
ICAgICAgICAgIHptZW1jcHkocy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwg
bik7Ci0gICAgICAgICAgICAgICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5z
dHJlYW0ubmV4dF9vdXQgPSBuZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4
dF9pbiAgICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwot
ICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAg
ICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0KLSAgICAgICAgICAgICAgICAgICAgKHVJbnQpZnJl
YWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsIHMtPmZpbGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAg
ICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsKLSAgICAgICAgICAg
IGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGVu
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhcy0+
el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgcy0+c3RyZWFt
LmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7
Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAg
ICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkg
ewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+
aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2
YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19G
TFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+
b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyID09IFpf
U1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5hbCBzaXpl
ICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+
c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+c3RyZWFt
Lm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMpIHsKLSAg
ICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAgICAgICAv
KiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25nKCkgbWF5
IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNhc2Ugb2Yg
Y29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBmb3Igc3Vj
aCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVja19oZWFk
ZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyB8fCBz
LT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQs
ICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgaWYgKGxlbiA9PSBz
LT5zdHJlYW0uYXZhaWxfb3V0ICYmCi0gICAgICAgIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1Ig
fHwgcy0+el9lcnIgPT0gWl9FUlJOTykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4g
KGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7Ci19Ci0KLQotLyogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuIGd6
Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZQotICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBv
ciBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsK
LXsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICByZXR1cm4gZ3pyZWFkKGZpbGUsICZjLCAx
KSA9PSAxID8gYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUHVz
aCBvbmUgYnl0ZSBiYWNrIG9udG8gdGhlIHN0cmVhbS4KLSovCi1pbnQgWkVYUE9SVCBnenVuZ2V0
YyhjLCBmaWxlKQotICAgIGludCBjOwotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVh
bSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUg
IT0gJ3InIHx8IGMgPT0gRU9GIHx8IHMtPmJhY2sgIT0gRU9GKSByZXR1cm4gRU9GOwotICAgIHMt
PmJhY2sgPSBjOwotICAgIHMtPm91dC0tOwotICAgIHMtPmxhc3QgPSAocy0+el9lcnIgPT0gWl9T
VFJFQU1fRU5EKTsKLSAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpf
ZW9mID0gMDsKLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg
ICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFy
YWN0ZXJzIGFyZQotICAgcmVhZCwgb3IgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0
cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuCi0gICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgZW5j
b3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZAotICAgd2l0aCBhIG51bGwg
Y2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBv
ZiBlcnJvci4KLQotICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IG9wdGlt
aXplZCBhdCBhbGwuCi0qLwotY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQot
ICAgIGd6RmlsZSBmaWxlOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGNo
YXIgKmIgPSBidWY7Ci0gICAgaWYgKGJ1ZiA9PSBaX05VTEwgfHwgbGVuIDw9IDApIHJldHVybiBa
X05VTEw7Ci0KLSAgICB3aGlsZSAoLS1sZW4gPiAwICYmIGd6cmVhZChmaWxlLCBidWYsIDEpID09
IDEgJiYgKmJ1ZisrICE9ICdcbicpIDsKLSAgICAqYnVmID0gJ1wwJzsKLSAgICByZXR1cm4gYiA9
PSBidWYgJiYgbGVuID4gMCA/IFpfTlVMTCA6IGI7Ci19Ci0KLQotI2lmbmRlZiBOT19HWkNPTVBS
RVNTCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIg
b2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3Jp
dGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2Fz
ZSBvZiBlcnJvcikuCi0qLwotaW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCi0g
ICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHBjIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0g
ICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwg
fHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVh
bS5uZXh0X2luID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gbGVuOwot
Ci0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMt
PnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9v
dXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9C
VUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgICBzLT56X2Vy
ciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAg
ICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0
cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSks
IFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAg
ICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBpZiAocy0+el9lcnIg
IT0gWl9PSykgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgKGNvbnN0
IEJ5dGVmICopYnVmLCBsZW4pOwotCi0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5h
dmFpbF9pbik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENvbnZlcnRzLCBm
b3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIK
LSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRm
IHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdy
aXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotI2lmZGVmIFNUREMKLSNpbmNsdWRlIDxz
dGRhcmcuaD4KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNo
YXIgKmZvcm1hdCwgLyogYXJncyAqLyAuLi4pCi17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVG
U0laRV07Ci0gICAgdmFfbGlzdCB2YTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihi
dWYpIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotI2lmZGVmIE5PX3ZzbnBy
aW50ZgotIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihidWYs
IGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBz
aXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMg
IGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2
YSk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2
b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQo
dmEpOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHZzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5k
aWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplb2YoYnVmKSB8
fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZ3p3cml0ZShmaWxlLCBidWYsICh1bnNpZ25lZClsZW4pOwotfQotI2Vsc2UgLyogbm90IEFO
U0kgQyAqLwotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
YTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQotICAgIGd6
RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKLSAgICBpbnQgYTEsIGEyLCBhMywg
YTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQs
IGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjA7Ci17Ci0gICAgY2hhciBidWZbWl9QUklOVEZf
QlVGU0laRV07Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsK
LSNpZmRlZiBOT19zbnByaW50ZgotIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmlu
dGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAg
ICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTks
IGEyMCk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAg
ICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRm
KGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAg
ICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGEx
OSwgYTIwKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAg
ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwg
YTYsIGE3LCBhOCwKLSAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGEx
NSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAg
ZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEy
LCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEs
IGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYK
LSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gc2l6ZW9mKGJ1ZikgfHwgYnVmW3Np
emVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3Jp
dGUoZmlsZSwgYnVmLCBsZW4pOwotfQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBj
b21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3Jp
dHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dGMoZmls
ZSwgYykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgYzsKLXsKLSAgICB1bnNpZ25lZCBjaGFy
IGNjID0gKHVuc2lnbmVkIGNoYXIpIGM7IC8qIHJlcXVpcmVkIGZvciBiaWcgZW5kaWFuIHN5c3Rl
bXMgKi8KLQotICAgIHJldHVybiBnendyaXRlKGZpbGUsICZjYywgMSkgPT0gMSA/IChpbnQpY2Mg
OiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyB0aGUgZ2l2
ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRp
bmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6cHV0cyByZXR1
cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVy
cm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzKQotICAgIGd6RmlsZSBmaWxlOwot
ICAgIGNvbnN0IGNoYXIgKnM7Ci17Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgKGNoYXIqKXMs
ICh1bnNpZ25lZClzdHJsZW4ocykpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAg
ICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRo
ZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uCi0q
LwotbG9jYWwgaW50IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICBnekZpbGUgZmlsZTsKLSAg
ICBpbnQgZmx1c2g7Ci17Ci0gICAgdUludCBsZW47Ci0gICAgaW50IGRvbmUgPSAwOwotICAgIGd6
X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMt
Pm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0uYXZh
aWxfaW4gPSAwOyAvKiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLwotCi0gICAgZm9y
ICg7OykgewotICAgICAgICBsZW4gPSBaX0JVRlNJWkUgLSBzLT5zdHJlYW0uYXZhaWxfb3V0Owot
Ci0gICAgICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKCh1SW50KWZ3cml0ZShz
LT5vdXRidWYsIDEsIGxlbiwgcy0+ZmlsZSkgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+
el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAg
ICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoZG9uZSkgYnJlYWs7Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxf
b3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBmbHVzaCk7Ci0g
ICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIC8qIElnbm9y
ZSB0aGUgc2Vjb25kIG9mIHR3byBjb25zZWN1dGl2ZSBmbHVzaGVzOiAqLwotICAgICAgICBpZiAo
bGVuID09IDAgJiYgcy0+el9lcnIgPT0gWl9CVUZfRVJST1IpIHMtPnpfZXJyID0gWl9PSzsKLQot
ICAgICAgICAvKiBkZWZsYXRlIGhhcyBmaW5pc2hlZCBmbHVzaGluZyBvbmx5IHdoZW4gaXQgaGFz
bid0IHVzZWQgdXAKLSAgICAgICAgICogYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIG91
dHB1dCBidWZmZXI6Ci0gICAgICAgICAqLwotICAgICAgICBkb25lID0gKHMtPnN0cmVhbS5hdmFp
bF9vdXQgIT0gMCB8fCBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotCi0gICAgICAgIGlmIChz
LT56X2VyciAhPSBaX09LICYmIHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJy
OwotfQotCi1pbnQgWkVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICAgZ3pGaWxlIGZp
bGU7Ci0gICAgIGludCBmbHVzaDsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilm
aWxlOwotICAgIGludCBlcnIgPSBkb19mbHVzaCAoZmlsZSwgZmx1c2gpOwotCi0gICAgaWYgKGVy
cikgcmV0dXJuIGVycjsKLSAgICBmZmx1c2gocy0+ZmlsZSk7Ci0gICAgcmV0dXJuICBzLT56X2Vy
ciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0jZW5kaWYgLyogTk9fR1pD
T01QUkVTUyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFNldHMgdGhlIHN0YXJ0
aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4K
LSAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5
dGVzIGluIHRoZQotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9j
YXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUg
dW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAgICAgIFNFRUtf
RU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KLSAgICAgIEluIHRoaXMgdmVy
c2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KLSovCi16
X29mZl90IFpFWFBPUlQgZ3pzZWVrIChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKLSAgICBnekZpbGUg
ZmlsZTsKLSAgICB6X29mZl90IG9mZnNldDsKLSAgICBpbnQgd2hlbmNlOwotewotICAgIGd6X3N0
cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHdoZW5j
ZSA9PSBTRUVLX0VORCB8fAotICAgICAgICBzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJy
ID09IFpfREFUQV9FUlJPUikgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLQotICAgIGlm
IChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJu
IC0xTDsKLSNlbHNlCi0gICAgICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpIHsKLSAgICAgICAg
ICAgIG9mZnNldCAtPSBzLT5pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0IDwgMCkg
cmV0dXJuIC0xTDsKLQotICAgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvZmZzZXQgaXMgdGhlIG51
bWJlciBvZiB6ZXJvIGJ5dGVzIHRvIHdyaXRlLiAqLwotICAgICAgICBpZiAocy0+aW5idWYgPT0g
Wl9OVUxMKSB7Ci0gICAgICAgICAgICBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUp
OyAvKiBmb3Igc2Vla2luZyAqLwotICAgICAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkg
cmV0dXJuIC0xTDsKLSAgICAgICAgICAgIHptZW16ZXJvKHMtPmluYnVmLCBaX0JVRlNJWkUpOwot
ICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICAgICAgdUlu
dCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkg
c2l6ZSA9ICh1SW50KW9mZnNldDsKLQotICAgICAgICAgICAgc2l6ZSA9IGd6d3JpdGUoZmlsZSwg
cy0+aW5idWYsIHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIC0xTDsK
LQotICAgICAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHMtPmluOwotI2VuZGlmCi0gICAgfQotICAgIC8qIFJlc3Qgb2YgZnVuY3Rpb24gaXMgZm9yIHJl
YWRpbmcgb25seSAqLwotCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBwb3NpdGlvbiAqLwotICAg
IGlmICh3aGVuY2UgPT0gU0VFS19DVVIpIHsKLSAgICAgICAgb2Zmc2V0ICs9IHMtPm91dDsKLSAg
ICB9Ci0gICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICBpZiAocy0+dHJhbnNw
YXJlbnQpIHsKLSAgICAgICAgLyogbWFwIHRvIGZzZWVrICovCi0gICAgICAgIHMtPmJhY2sgPSBF
T0Y7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5u
ZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNF
RUtfU0VUKSA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgcy0+aW4gPSBzLT5vdXQgPSBvZmZz
ZXQ7Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogRm9yIGEgbmVnYXRp
dmUgc2VlaywgcmV3aW5kIGFuZCB1c2UgcG9zaXRpdmUgc2VlayAqLwotICAgIGlmIChvZmZzZXQg
Pj0gcy0+b3V0KSB7Ci0gICAgICAgIG9mZnNldCAtPSBzLT5vdXQ7Ci0gICAgfSBlbHNlIGlmIChn
enJld2luZChmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgLyog
b2Zmc2V0IGlzIG5vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuICovCi0KLSAgICBpZiAo
b2Zmc2V0ICE9IDAgJiYgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICBzLT5vdXRidWYg
PSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSAgICAgICAgaWYgKHMtPm91dGJ1ZiA9PSBaX05V
TEwpIHJldHVybiAtMUw7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgJiYgcy0+YmFjayAhPSBFT0Yp
IHsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIG9m
ZnNldC0tOwotICAgICAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0g
ICAgfQotICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICBpbnQgc2l6ZSA9IFpfQlVG
U0laRTsKLSAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9IChpbnQpb2Zmc2V0
OwotCi0gICAgICAgIHNpemUgPSBnenJlYWQoZmlsZSwgcy0+b3V0YnVmLCAodUludClzaXplKTsK
LSAgICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIC0xTDsKLSAgICAgICAgb2Zmc2V0IC09IHNp
emU7Ci0gICAgfQotICAgIHJldHVybiBzLT5vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotICAgICBSZXdpbmRzIGlucHV0IGZpbGUuCi0qLwotaW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZp
bGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSop
ZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAtMTsK
LQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+YmFjayA9
IEVPRjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHMtPnN0cmVhbS5uZXh0X2lu
ID0gcy0+aW5idWY7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYg
KCFzLT50cmFuc3BhcmVudCkgKHZvaWQpaW5mbGF0ZVJlc2V0KCZzLT5zdHJlYW0pOwotICAgIHMt
PmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHJldHVybiBmc2VlayhzLT5maWxlLCBzLT5z
dGFydCwgU0VFS19TRVQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJu
cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9u
IHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMg
YSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0q
Lwotel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAg
ICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7Ci19Ci0KLS8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRl
Y3RlZCByZWFkaW5nIHRoZSBnaXZlbgotICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4K
LSovCi1pbnQgWkVYUE9SVCBnemVvZiAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBn
el9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgLyogV2l0aCBjb25jYXRlbmF0
ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCi0gICAgICogY3JjIHRy
YWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9G
Ci0gICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxp
Y2l0bHkgaGVyZS4KLSAgICAgKi8KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3In
KSByZXR1cm4gMDsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOwotICAgIHJldHVybiBzLT56
X2VyciA9PSBaX1NUUkVBTV9FTkQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBS
ZXR1cm5zIDEgaWYgcmVhZGluZyBhbmQgZG9pbmcgc28gdHJhbnNwYXJlbnRseSwgb3RoZXJ3aXNl
IHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3pkaXJlY3QgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7
Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09
IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIHJldHVybiBzLT50cmFuc3Bh
cmVudDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9uZyBpbiBM
U0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcgKGZpbGUs
IHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwotICAgIGZv
ciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4ZmYpLCBm
aWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0u
IFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcgZ2V0TG9u
ZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZylnZXRfYnl0
ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDg7Ci0g
ICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRlKHMpOwot
ICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCArPSAoKHVM
b25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
ICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBj
b21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lv
biBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6RmlsZSBmaWxl
OwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9
PSBOVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycp
IHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsK
LSNlbHNlCi0gICAgICAgIGlmIChkb19mbHVzaCAoZmlsZSwgWl9GSU5JU0gpICE9IFpfT0spCi0g
ICAgICAgICAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLQotICAgICAgICBw
dXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAgICAgICBwdXRMb25nIChzLT5maWxlLCAodUxv
bmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0
cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0jaWZkZWYgU1REQwotIyAgZGVmaW5lIHpzdHJl
cnJvcihlcnJudW0pIHN0cmVycm9yKGVycm51bSkKLSNlbHNlCi0jICBkZWZpbmUgenN0cmVycm9y
KGVycm51bSkgIiIKLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJu
cyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24g
dGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJv
ciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5k
IG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9F
UlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhl
IGV4YWN0IGVycm9yIGNvZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmls
ZSwgZXJybnVtKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNo
YXIgKm07Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChz
ID09IE5VTEwpIHsKLSAgICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICBy
ZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAq
ZXJybnVtID0gcy0+el9lcnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25z
dCBjaGFyKikiIjsKLQotICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJl
cnJvcihlcnJubykgOiBzLT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0g
PT0gJ1wwJykgbSA9IChjaGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+
bXNnKTsKLSAgICBzLT5tc2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVu
KG0pICsgMyk7Ci0gICAgaWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciop
RVJSX01TRyhaX01FTV9FUlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAg
c3RyY2F0KHMtPm1zZywgIjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJu
IChjb25zdCBjaGFyKilzLT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBD
bGVhciB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9y
IHRoZSByZWFsIGZpbGUuCi0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAg
Z3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQot
ICAgIGlmIChzID09IE5VTEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1f
RU5EKSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMt
PmZpbGUpOwotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2lu
ZmJhY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3ps
aWIvaW5mYmFjay5jCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvemxpYi9pbmZiYWNrLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIzICswLDAgQEAK
LS8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICog
Q29weXJpZ2h0IChDKSAxOTk1LTIwMDUgTWFyayBBZGxlcgotICogRm9yIGNvbmRpdGlvbnMgb2Yg
ZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICov
Ci0KLS8qCi0gICBUaGlzIGNvZGUgaXMgbGFyZ2VseSBjb3BpZWQgZnJvbSBpbmZsYXRlLmMuICBO
b3JtYWxseSBlaXRoZXIgaW5mYmFjay5vIG9yCi0gICBpbmZsYXRlLm8gd291bGQgYmUgbGlua2Vk
IGludG8gYW4gYXBwbGljYXRpb24tLW5vdCBib3RoLiAgVGhlIGludGVyZmFjZQotICAgd2l0aCBp
bmZmYXN0LmMgaXMgcmV0YWluZWQgc28gdGhhdCBvcHRpbWl6ZWQgYXNzZW1ibGVyLWNvZGVkIHZl
cnNpb25zIG9mCi0gICBpbmZsYXRlX2Zhc3QoKSBjYW4gYmUgdXNlZCB3aXRoIGVpdGhlciBpbmZs
YXRlLmMgb3IgaW5mYmFjay5jLgotICovCi0KLSNpbmNsdWRlICJ6dXRpbC5oIgotI2luY2x1ZGUg
ImluZnRyZWVzLmgiCi0jaW5jbHVkZSAiaW5mbGF0ZS5oIgotI2luY2x1ZGUgImluZmZhc3QuaCIK
LQotLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotbG9jYWwgdm9pZCBmaXhlZHRhYmxlcyBPRigo
c3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZSkpOwotCi0vKgotICAgc3RybSBwcm92aWRl
cyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgaW4gemFsbG9jIGFuZCB6ZnJlZSwgb3IKLSAg
IFpfTlVMTCB0byB1c2UgdGhlIGxpYnJhcnkgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgot
Ci0gICB3aW5kb3dCaXRzIGlzIGluIHRoZSByYW5nZSA4Li4xNSwgYW5kIHdpbmRvdyBpcyBhIHVz
ZXItc3VwcGxpZWQKLSAgIHdpbmRvdyBhbmQgb3V0cHV0IGJ1ZmZlciB0aGF0IGlzIDIqKndpbmRv
d0JpdHMgYnl0ZXMuCi0gKi8KLWludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8oc3RybSwgd2lu
ZG93Qml0cywgd2luZG93LCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKLXpfc3RyZWFtcCBzdHJtOwot
aW50IHdpbmRvd0JpdHM7Ci11bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OwotY29uc3QgY2hhciAq
dmVyc2lvbjsKLWludCBzdHJlYW1fc2l6ZTsKLXsKLSAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBG
QVIgKnN0YXRlOwotCi0gICAgaWYgKHZlcnNpb24gPT0gWl9OVUxMIHx8IHZlcnNpb25bMF0gIT0g
WkxJQl9WRVJTSU9OWzBdIHx8Ci0gICAgICAgIHN0cmVhbV9zaXplICE9IChpbnQpKHNpemVvZih6
X3N0cmVhbSkpKQotICAgICAgICByZXR1cm4gWl9WRVJTSU9OX0VSUk9SOwotICAgIGlmIChzdHJt
ID09IFpfTlVMTCB8fCB3aW5kb3cgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHdpbmRvd0JpdHMgPCA4
IHx8IHdpbmRvd0JpdHMgPiAxNSkKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAg
IHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJu
IGFuIGVycm9yICovCi0gICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7Ci0g
ICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7Ci0gICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2
b2lkcGYpMDsKLSAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3Ry
bS0+emZyZWUgPSB6Y2ZyZWU7Ci0gICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFS
ICopWkFMTE9DKHN0cm0sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwotICAgIGlmIChzdGF0ZSA9
PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKLSAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxh
dGU6IGFsbG9jYXRlZFxuIikpOwotICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9z
dGF0ZSBGQVIgKilzdGF0ZTsKLSAgICBzdGF0ZS0+ZG1heCA9IDMyNzY4VTsKLSAgICBzdGF0ZS0+
d2JpdHMgPSB3aW5kb3dCaXRzOwotICAgIHN0YXRlLT53c2l6ZSA9IDFVIDw8IHdpbmRvd0JpdHM7
Ci0gICAgc3RhdGUtPndpbmRvdyA9IHdpbmRvdzsKLSAgICBzdGF0ZS0+d3JpdGUgPSAwOwotICAg
IHN0YXRlLT53aGF2ZSA9IDA7Ci0gICAgcmV0dXJuIFpfT0s7Ci19Ci0KLS8qCi0gICBSZXR1cm4g
c3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXgg
c2l6ZXMgc2V0IHRvCi0gICBmaXhlZCBjb2RlIGRlY29kaW5nLiAgTm9ybWFsbHkgdGhpcyByZXR1
cm5zIGZpeGVkIHRhYmxlcyBmcm9tIGluZmZpeGVkLmguCi0gICBJZiBCVUlMREZJWEVEIGlzIGRl
ZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlCi0g
ICBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZp
cnN0IHRpbWUgYW5kCi0gICB0aGVyZWFmdGVyLiAgVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mIHRo
ZSBjb2RlIGJ5IGFib3V0IDJLIGJ5dGVzLCBpbgotICAgZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4
ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlCi0gICB1c2Vk
IGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRh
YmxlcyBhbmQgdmlyZ2luCi0gICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgotICovCi1sb2NhbCB2
b2lkIGZpeGVkdGFibGVzKHN0YXRlKQotc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsK
LXsKLSNpZmRlZiBCVUlMREZJWEVECi0gICAgc3RhdGljIGludCB2aXJnaW4gPSAxOwotICAgIHN0
YXRpYyBjb2RlICpsZW5maXgsICpkaXN0Zml4OwotICAgIHN0YXRpYyBjb2RlIGZpeGVkWzU0NF07
Ci0KLSAgICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkg
bm90IGJlIHRocmVhZCBzYWZlKSAqLwotICAgIGlmICh2aXJnaW4pIHsKLSAgICAgICAgdW5zaWdu
ZWQgc3ltLCBiaXRzOwotICAgICAgICBzdGF0aWMgY29kZSAqbmV4dDsKLQotICAgICAgICAvKiBs
aXRlcmFsL2xlbmd0aCB0YWJsZSAqLwotICAgICAgICBzeW0gPSAwOwotICAgICAgICB3aGlsZSAo
c3ltIDwgMTQ0KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA4OwotICAgICAgICB3aGlsZSAoc3ltIDwg
MjU2KSBzdGF0ZS0+bGVuc1tzeW0rK10gPSA5OwotICAgICAgICB3aGlsZSAoc3ltIDwgMjgwKSBz
dGF0ZS0+bGVuc1tzeW0rK10gPSA3OwotICAgICAgICB3aGlsZSAoc3ltIDwgMjg4KSBzdGF0ZS0+
bGVuc1tzeW0rK10gPSA4OwotICAgICAgICBuZXh0ID0gZml4ZWQ7Ci0gICAgICAgIGxlbmZpeCA9
IG5leHQ7Ci0gICAgICAgIGJpdHMgPSA5OwotICAgICAgICBpbmZsYXRlX3RhYmxlKExFTlMsIHN0
YXRlLT5sZW5zLCAyODgsICYobmV4dCksICYoYml0cyksIHN0YXRlLT53b3JrKTsKLQotICAgICAg
ICAvKiBkaXN0YW5jZSB0YWJsZSAqLwotICAgICAgICBzeW0gPSAwOwotICAgICAgICB3aGlsZSAo
c3ltIDwgMzIpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDU7Ci0gICAgICAgIGRpc3RmaXggPSBuZXh0
OwotICAgICAgICBiaXRzID0gNTsKLSAgICAgICAgaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUt
PmxlbnMsIDMyLCAmKG5leHQpLCAmKGJpdHMpLCBzdGF0ZS0+d29yayk7Ci0KLSAgICAgICAgLyog
ZG8gdGhpcyBqdXN0IG9uY2UgKi8KLSAgICAgICAgdmlyZ2luID0gMDsKLSAgICB9Ci0jZWxzZSAv
KiAhQlVJTERGSVhFRCAqLwotIyAgIGluY2x1ZGUgImluZmZpeGVkLmgiCi0jZW5kaWYgLyogQlVJ
TERGSVhFRCAqLwotICAgIHN0YXRlLT5sZW5jb2RlID0gbGVuZml4OwotICAgIHN0YXRlLT5sZW5i
aXRzID0gOTsKLSAgICBzdGF0ZS0+ZGlzdGNvZGUgPSBkaXN0Zml4OwotICAgIHN0YXRlLT5kaXN0
Yml0cyA9IDU7Ci19Ci0KLS8qIE1hY3JvcyBmb3IgaW5mbGF0ZUJhY2soKTogKi8KLQotLyogTG9h
ZCByZXR1cm5lZCBzdGF0ZSBmcm9tIGluZmxhdGVfZmFzdCgpICovCi0jZGVmaW5lIExPQUQoKSBc
Ci0gICAgZG8geyBcCi0gICAgICAgIHB1dCA9IHN0cm0tPm5leHRfb3V0OyBcCi0gICAgICAgIGxl
ZnQgPSBzdHJtLT5hdmFpbF9vdXQ7IFwKLSAgICAgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47IFwK
LSAgICAgICAgaGF2ZSA9IHN0cm0tPmF2YWlsX2luOyBcCi0gICAgICAgIGhvbGQgPSBzdGF0ZS0+
aG9sZDsgXAotICAgICAgICBiaXRzID0gc3RhdGUtPmJpdHM7IFwKLSAgICB9IHdoaWxlICgwKQot
Ci0vKiBTZXQgc3RhdGUgZnJvbSByZWdpc3RlcnMgZm9yIGluZmxhdGVfZmFzdCgpICovCi0jZGVm
aW5lIFJFU1RPUkUoKSBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gcHV0
OyBcCi0gICAgICAgIHN0cm0tPmF2YWlsX291dCA9IGxlZnQ7IFwKLSAgICAgICAgc3RybS0+bmV4
dF9pbiA9IG5leHQ7IFwKLSAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBoYXZlOyBcCi0gICAgICAg
IHN0YXRlLT5ob2xkID0gaG9sZDsgXAotICAgICAgICBzdGF0ZS0+Yml0cyA9IGJpdHM7IFwKLSAg
ICB9IHdoaWxlICgwKQotCi0vKiBDbGVhciB0aGUgaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCi0j
ZGVmaW5lIElOSVRCSVRTKCkgXAotICAgIGRvIHsgXAotICAgICAgICBob2xkID0gMDsgXAotICAg
ICAgICBiaXRzID0gMDsgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIEFzc3VyZSB0aGF0IHNvbWUg
aW5wdXQgaXMgYXZhaWxhYmxlLiAgSWYgaW5wdXQgaXMgcmVxdWVzdGVkLCBidXQgZGVuaWVkLAot
ICAgdGhlbiByZXR1cm4gYSBaX0JVRl9FUlJPUiBmcm9tIGluZmxhdGVCYWNrKCkuICovCi0jZGVm
aW5lIFBVTEwoKSBcCi0gICAgZG8geyBcCi0gICAgICAgIGlmIChoYXZlID09IDApIHsgXAotICAg
ICAgICAgICAgaGF2ZSA9IGluKGluX2Rlc2MsICZuZXh0KTsgXAotICAgICAgICAgICAgaWYgKGhh
dmUgPT0gMCkgeyBcCi0gICAgICAgICAgICAgICAgbmV4dCA9IFpfTlVMTDsgXAotICAgICAgICAg
ICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOyBcCi0gICAgICAgICAgICAgICAgZ290byBpbmZfbGVh
dmU7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9IFwKLSAgICB9IHdoaWxlICgwKQotCi0v
KiBHZXQgYSBieXRlIG9mIGlucHV0IGludG8gdGhlIGJpdCBhY2N1bXVsYXRvciwgb3IgcmV0dXJu
IGZyb20gaW5mbGF0ZUJhY2soKQotICAgd2l0aCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBpbnB1
dCBhdmFpbGFibGUuICovCi0jZGVmaW5lIFBVTExCWVRFKCkgXAotICAgIGRvIHsgXAotICAgICAg
ICBQVUxMKCk7IFwKLSAgICAgICAgaGF2ZS0tOyBcCi0gICAgICAgIGhvbGQgKz0gKHVuc2lnbmVk
IGxvbmcpKCpuZXh0KyspIDw8IGJpdHM7IFwKLSAgICAgICAgYml0cyArPSA4OyBcCi0gICAgfSB3
aGlsZSAoMCkKLQotLyogQXNzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG4gYml0cyBpbiB0
aGUgYml0IGFjY3VtdWxhdG9yLiAgSWYgdGhlcmUgaXMKLSAgIG5vdCBlbm91Z2ggYXZhaWxhYmxl
IGlucHV0IHRvIGRvIHRoYXQsIHRoZW4gcmV0dXJuIGZyb20gaW5mbGF0ZUJhY2soKSB3aXRoCi0g
ICBhbiBlcnJvci4gKi8KLSNkZWZpbmUgTkVFREJJVFMobikgXAotICAgIGRvIHsgXAotICAgICAg
ICB3aGlsZSAoYml0cyA8ICh1bnNpZ25lZCkobikpIFwKLSAgICAgICAgICAgIFBVTExCWVRFKCk7
IFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXR1cm4gdGhlIGxvdyBuIGJpdHMgb2YgdGhlIGJp
dCBhY2N1bXVsYXRvciAobiA8IDE2KSAqLwotI2RlZmluZSBCSVRTKG4pIFwKLSAgICAoKHVuc2ln
bmVkKWhvbGQgJiAoKDFVIDw8IChuKSkgLSAxKSkKLQotLyogUmVtb3ZlIG4gYml0cyBmcm9tIHRo
ZSBiaXQgYWNjdW11bGF0b3IgKi8KLSNkZWZpbmUgRFJPUEJJVFMobikgXAotICAgIGRvIHsgXAot
ICAgICAgICBob2xkID4+PSAobik7IFwKLSAgICAgICAgYml0cyAtPSAodW5zaWduZWQpKG4pOyBc
Ci0gICAgfSB3aGlsZSAoMCkKLQotLyogUmVtb3ZlIHplcm8gdG8gc2V2ZW4gYml0cyBhcyBuZWVk
ZWQgdG8gZ28gdG8gYSBieXRlIGJvdW5kYXJ5ICovCi0jZGVmaW5lIEJZVEVCSVRTKCkgXAotICAg
IGRvIHsgXAotICAgICAgICBob2xkID4+PSBiaXRzICYgNzsgXAotICAgICAgICBiaXRzIC09IGJp
dHMgJiA3OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotLyogQXNzdXJlIHRoYXQgc29tZSBvdXRwdXQg
c3BhY2UgaXMgYXZhaWxhYmxlLCBieSB3cml0aW5nIG91dCB0aGUgd2luZG93Ci0gICBpZiBpdCdz
IGZ1bGwuICBJZiB0aGUgd3JpdGUgZmFpbHMsIHJldHVybiBmcm9tIGluZmxhdGVCYWNrKCkgd2l0
aCBhCi0gICBaX0JVRl9FUlJPUi4gKi8KLSNkZWZpbmUgUk9PTSgpIFwKLSAgICBkbyB7IFwKLSAg
ICAgICAgaWYgKGxlZnQgPT0gMCkgeyBcCi0gICAgICAgICAgICBwdXQgPSBzdGF0ZS0+d2luZG93
OyBcCi0gICAgICAgICAgICBsZWZ0ID0gc3RhdGUtPndzaXplOyBcCi0gICAgICAgICAgICBzdGF0
ZS0+d2hhdmUgPSBsZWZ0OyBcCi0gICAgICAgICAgICBpZiAob3V0KG91dF9kZXNjLCBwdXQsIGxl
ZnQpKSB7IFwKLSAgICAgICAgICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsgXAotICAgICAgICAg
ICAgICAgIGdvdG8gaW5mX2xlYXZlOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSBcCi0g
ICAgfSB3aGlsZSAoMCkKLQotLyoKLSAgIHN0cm0gcHJvdmlkZXMgdGhlIG1lbW9yeSBhbGxvY2F0
aW9uIGZ1bmN0aW9ucyBhbmQgd2luZG93IGJ1ZmZlciBvbiBpbnB1dCwKLSAgIGFuZCBwcm92aWRl
cyBpbmZvcm1hdGlvbiBvbiB0aGUgdW51c2VkIGlucHV0IG9uIHJldHVybi4gIEZvciBaX0RBVEFf
RVJST1IKLSAgIHJldHVybnMsIHN0cm0gd2lsbCBhbHNvIHByb3ZpZGUgYW4gZXJyb3IgbWVzc2Fn
ZS4KLQotICAgaW4oKSBhbmQgb3V0KCkgYXJlIHRoZSBjYWxsLWJhY2sgaW5wdXQgYW5kIG91dHB1
dCBmdW5jdGlvbnMuICBXaGVuCi0gICBpbmZsYXRlQmFjaygpIG5lZWRzIG1vcmUgaW5wdXQsIGl0
IGNhbGxzIGluKCkuICBXaGVuIGluZmxhdGVCYWNrKCkgaGFzCi0gICBmaWxsZWQgdGhlIHdpbmRv
dyB3aXRoIG91dHB1dCwgb3Igd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBkYXRhIGluIHRoZQotICAg
d2luZG93LCBpdCBjYWxscyBvdXQoKSB0byB3cml0ZSBvdXQgdGhlIGRhdGEuICBUaGUgYXBwbGlj
YXRpb24gbXVzdCBub3QKLSAgIGNoYW5nZSB0aGUgcHJvdmlkZWQgaW5wdXQgdW50aWwgaW4oKSBp
cyBjYWxsZWQgYWdhaW4gb3IgaW5mbGF0ZUJhY2soKQotICAgcmV0dXJucy4gIFRoZSBhcHBsaWNh
dGlvbiBtdXN0IG5vdCBjaGFuZ2UgdGhlIHdpbmRvdy9vdXRwdXQgYnVmZmVyIHVudGlsCi0gICBp
bmZsYXRlQmFjaygpIHJldHVybnMuCi0KLSAgIGluKCkgYW5kIG91dCgpIGFyZSBjYWxsZWQgd2l0
aCBhIGRlc2NyaXB0b3IgcGFyYW1ldGVyIHByb3ZpZGVkIGluIHRoZQotICAgaW5mbGF0ZUJhY2so
KSBjYWxsLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgc3RydWN0dXJlIHRoYXQgcHJvdmlkZXMg
dGhlCi0gICBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBkbyB0aGUgcmVhZCBvciB3cml0ZSwgYXMg
d2VsbCBhcyBhY2N1bXVsYXRlZAotICAgaW5mb3JtYXRpb24gb24gdGhlIGlucHV0IGFuZCBvdXRw
dXQgc3VjaCBhcyB0b3RhbHMgYW5kIGNoZWNrIHZhbHVlcy4KLQotICAgaW4oKSBzaG91bGQgcmV0
dXJuIHplcm8gb24gZmFpbHVyZS4gIG91dCgpIHNob3VsZCByZXR1cm4gbm9uLXplcm8gb24KLSAg
IGZhaWx1cmUuICBJZiBlaXRoZXIgaW4oKSBvciBvdXQoKSBmYWlscywgdGhhbiBpbmZsYXRlQmFj
aygpIHJldHVybnMgYQotICAgWl9CVUZfRVJST1IuICBzdHJtLT5uZXh0X2luIGNhbiBiZSBjaGVj
a2VkIGZvciBaX05VTEwgdG8gc2VlIHdoZXRoZXIgaXQKLSAgIHdhcyBpbigpIG9yIG91dCgpIHRo
YXQgY2F1c2VkIGluIHRoZSBlcnJvci4gIE90aGVyd2lzZSwgIGluZmxhdGVCYWNrKCkKLSAgIHJl
dHVybnMgWl9TVFJFQU1fRU5EIG9uIHN1Y2Nlc3MsIFpfREFUQV9FUlJPUiBmb3IgYW4gZGVmbGF0
ZSBmb3JtYXQKLSAgIGVycm9yLCBvciBaX01FTV9FUlJPUiBpZiBpdCBjb3VsZCBub3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciB0aGUgc3RhdGUuCi0gICBpbmZsYXRlQmFjaygpIGNhbiBhbHNvIHJldHVy
biBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgaW5wdXQgcGFyYW1ldGVycwotICAgYXJlIG5vdCBjb3Jy
ZWN0LCBpLmUuIHN0cm0gaXMgWl9OVUxMIG9yIHRoZSBzdGF0ZSB3YXMgbm90IGluaXRpYWxpemVk
LgotICovCi1pbnQgWkVYUE9SVCBpbmZsYXRlQmFjayhzdHJtLCBpbiwgaW5fZGVzYywgb3V0LCBv
dXRfZGVzYykKLXpfc3RyZWFtcCBzdHJtOwotaW5fZnVuYyBpbjsKLXZvaWQgRkFSICppbl9kZXNj
Owotb3V0X2Z1bmMgb3V0Owotdm9pZCBGQVIgKm91dF9kZXNjOwotewotICAgIHN0cnVjdCBpbmZs
YXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8q
IG5leHQgaW5wdXQgKi8KLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBv
dXRwdXQgKi8KLSAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlu
cHV0IGFuZCBvdXRwdXQgKi8KLSAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0
IGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBiaXRzIGluIGJp
dCBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjb3B5OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9m
IHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovCi0gICAgdW5zaWduZWQgY2hhciBGQVIg
KmZyb207ICAgIC8qIHdoZXJlIHRvIGNvcHkgbWF0Y2ggYnl0ZXMgZnJvbSAqLwotICAgIGNvZGUg
dGhpczsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRhYmxlIGVudHJ5ICov
Ci0gICAgY29kZSBsYXN0OyAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAq
LwotICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGggdG8gY29weSBmb3Ig
cmVwZWF0cywgYml0cyB0byBkcm9wICovCi0gICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAg
IC8qIHJldHVybiBjb2RlICovCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG9yZGVy
WzE5XSA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqLwotICAgICAgICB7MTYsIDE3
LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAx
NX07Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSBzdHJtIGV4aXN0cyBhbmQgdGhhdCB0aGUgc3Rh
dGUgd2FzIGluaXRpYWxpemVkICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0
YXRlID09IFpfTlVMTCkKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0YXRl
ID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwotCi0gICAgLyogUmVz
ZXQgdGhlIHN0YXRlICovCi0gICAgc3RybS0+bXNnID0gWl9OVUxMOwotICAgIHN0YXRlLT5tb2Rl
ID0gVFlQRTsKLSAgICBzdGF0ZS0+bGFzdCA9IDA7Ci0gICAgc3RhdGUtPndoYXZlID0gMDsKLSAg
ICBuZXh0ID0gc3RybS0+bmV4dF9pbjsKLSAgICBoYXZlID0gbmV4dCAhPSBaX05VTEwgPyBzdHJt
LT5hdmFpbF9pbiA6IDA7Ci0gICAgaG9sZCA9IDA7Ci0gICAgYml0cyA9IDA7Ci0gICAgcHV0ID0g
c3RhdGUtPndpbmRvdzsKLSAgICBsZWZ0ID0gc3RhdGUtPndzaXplOwotCi0gICAgLyogSW5mbGF0
ZSB1bnRpbCBlbmQgb2YgYmxvY2sgbWFya2VkIGFzIGxhc3QgKi8KLSAgICBmb3IgKDs7KQotICAg
ICAgICBzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7Ci0gICAgICAgIGNhc2UgVFlQRToKLSAgICAgICAg
ICAgIC8qIGRldGVybWluZSBhbmQgZGlzcGF0Y2ggYmxvY2sgdHlwZSAqLwotICAgICAgICAgICAg
aWYgKHN0YXRlLT5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgQllURUJJVFMoKTsKLSAgICAgICAg
ICAgICAgICBzdGF0ZS0+bW9kZSA9IERPTkU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBORUVEQklUUygzKTsKLSAgICAgICAgICAgIHN0YXRlLT5s
YXN0ID0gQklUUygxKTsKLSAgICAgICAgICAgIERST1BCSVRTKDEpOwotICAgICAgICAgICAgc3dp
dGNoIChCSVRTKDIpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBzdG9yZWQgYmxvY2sgKi8KLSAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVy
ciwgImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xuIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKLSAgICAgICAgICAgICAgICBzdGF0
ZS0+bW9kZSA9IFNUT1JFRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIGJsb2NrICovCi0gICAg
ICAgICAgICAgICAgZml4ZWR0YWJsZXMoc3RhdGUpOwotICAgICAgICAgICAgICAgIFRyYWNldigo
c3RkZXJyLCAiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcbiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7Ci0gICAgICAgICAg
ICAgICAgc3RhdGUtPm1vZGUgPSBMRU47ICAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi8K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi8KLSAgICAgICAgICAgICAgICBUcmFj
ZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBkeW5hbWljIGNvZGVzIGJsb2NrJXNcbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUQUJMRTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAq
KSJpbnZhbGlkIGJsb2NrIHR5cGUiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFE
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRFJPUEJJVFMoMik7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFNUT1JFRDoKLSAgICAgICAgICAgIC8qIGdldCBhbmQgdmVy
aWZ5IHN0b3JlZCBibG9jayBsZW5ndGggKi8KLSAgICAgICAgICAgIEJZVEVCSVRTKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi8KLSAgICAgICAgICAg
IE5FRURCSVRTKDMyKTsKLSAgICAgICAgICAgIGlmICgoaG9sZCAmIDB4ZmZmZikgIT0gKChob2xk
ID4+IDE2KSBeIDB4ZmZmZikpIHsKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAq
KSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+
bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpaG9sZCAmIDB4ZmZmZjsKLSAgICAgICAg
ICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCkpOwotICAgICAgICAgICAgSU5JVEJJ
VFMoKTsKLQotICAgICAgICAgICAgLyogY29weSBzdG9yZWQgYmxvY2sgZnJvbSBpbnB1dCB0byBv
dXRwdXQgKi8KLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+bGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgICAgICAgICBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKLSAgICAgICAgICAgICAgICBQVUxMKCk7
Ci0gICAgICAgICAgICAgICAgUk9PTSgpOwotICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gaGF2
ZSkgY29weSA9IGhhdmU7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0g
bGVmdDsKLSAgICAgICAgICAgICAgICB6bWVtY3B5KHB1dCwgbmV4dCwgY29weSk7Ci0gICAgICAg
ICAgICAgICAgaGF2ZSAtPSBjb3B5OwotICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKLSAg
ICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7Ci0gICAgICAgICAgICAgICAgcHV0ICs9IGNvcHk7
Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCAtPSBjb3B5OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9yZWQgZW5kXG4i
KSk7Ci0gICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFRBQkxFOgotICAgICAgICAgICAgLyogZ2V0IGR5bmFtaWMgdGFibGUg
ZW50cmllcyBkZXNjcmlwdG9yICovCi0gICAgICAgICAgICBORUVEQklUUygxNCk7Ci0gICAgICAg
ICAgICBzdGF0ZS0+bmxlbiA9IEJJVFMoNSkgKyAyNTc7Ci0gICAgICAgICAgICBEUk9QQklUUyg1
KTsKLSAgICAgICAgICAgIHN0YXRlLT5uZGlzdCA9IEJJVFMoNSkgKyAxOwotICAgICAgICAgICAg
RFJPUEJJVFMoNSk7Ci0gICAgICAgICAgICBzdGF0ZS0+bmNvZGUgPSBCSVRTKDQpICsgNDsKLSAg
ICAgICAgICAgIERST1BCSVRTKDQpOwotI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORAotICAg
ICAgICAgICAgaWYgKHN0YXRlLT5ubGVuID4gMjg2IHx8IHN0YXRlLT5uZGlzdCA+IDMwKSB7Ci0g
ICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikidG9vIG1hbnkgbGVuZ3RoIG9yIGRp
c3RhbmNlIHN5bWJvbHMiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBU
cmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHRhYmxlIHNpemVzIG9rXG4iKSk7Ci0KLSAg
ICAgICAgICAgIC8qIGdldCBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKG5vdCBhIHR5cG8pICov
Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoc3RhdGUt
PmhhdmUgPCBzdGF0ZS0+bmNvZGUpIHsKLSAgICAgICAgICAgICAgICBORUVEQklUUygzKTsKLSAg
ICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAodW5zaWdu
ZWQgc2hvcnQpQklUUygzKTsKLSAgICAgICAgICAgICAgICBEUk9QQklUUygzKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IDE5KQotICAgICAgICAgICAg
ICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9IDA7Ci0gICAgICAgICAgICBz
dGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0g
KGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5i
aXRzID0gNzsKLSAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLT5s
ZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7Ci0gICAgICAgICAgICBpZiAocmV0KSB7
Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2RlIGxlbmd0
aHMgc2V0IjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAi
aW5mbGF0ZTogICAgICAgY29kZSBsZW5ndGhzIG9rXG4iKSk7Ci0KLSAgICAgICAgICAgIC8qIGdl
dCBsZW5ndGggYW5kIGRpc3RhbmNlIGNvZGUgY29kZSBsZW5ndGhzICovCi0gICAgICAgICAgICBz
dGF0ZS0+aGF2ZSA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCBzdGF0ZS0+
bmxlbiArIHN0YXRlLT5uZGlzdCkgewotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkodGhpcy5iaXRzKSA8PSBiaXRz
KSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAg
ICAgICAgTkVFREJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMo
dGhpcy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUr
K10gPSB0aGlzLnZhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA9PSAxNikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgTkVFREJJVFModGhpcy5iaXRzICsgMik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRlLT5oYXZlID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cg
PSAoY2hhciAqKSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxlbiA9ICh1bnNpZ25lZCkoc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUgLSAxXSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBEUk9QQklUUygyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLnZhbCA9PSAxNykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTkVFREJJVFModGhpcy5iaXRzICsgMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9Q
QklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklUUygzKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIERST1BCSVRTKDMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgTkVFREJJVFModGhpcy5iaXRz
ICsgNyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
cHkgPSAxMSArIEJJVFMoNyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyg3KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhh
dmUgKyBjb3B5ID4gc3RhdGUtPm5sZW4gKyBzdGF0ZS0+bmRpc3QpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQi
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoY29weS0tKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxl
bnNbc3RhdGUtPmhhdmUrK10gPSAodW5zaWduZWQgc2hvcnQpbGVuOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBp
biB3aGlsZSAqLwotICAgICAgICAgICAgaWYgKHN0YXRlLT5tb2RlID09IEJBRCkgYnJlYWs7Ci0K
LSAgICAgICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzICovCi0gICAgICAgICAgICBzdGF0ZS0+
bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUg
Y29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0g
OTsKLSAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUtPmxlbnMsIHN0
YXRlLT5ubGVuLCAmKHN0YXRlLT5uZXh0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKLSAgICAgICAgICAgIGlmIChyZXQp
IHsKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwv
bGVuZ3RocyBzZXQiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPmRpc3Rj
b2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIHN0YXRl
LT5kaXN0Yml0cyA9IDY7Ci0gICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBz
dGF0ZS0+bGVucyArIHN0YXRlLT5ubGVuLCBzdGF0ZS0+bmRpc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndv
cmspOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9
IChjaGFyICopImludmFsaWQgZGlzdGFuY2VzIHNldCI7Ci0gICAgICAgICAgICAgICAgc3RhdGUt
Pm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIGNvZGVzIG9rXG4iKSk7Ci0g
ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsKLQotICAgICAgICBjYXNlIExFTjoKLSAgICAg
ICAgICAgIC8qIHVzZSBpbmZsYXRlX2Zhc3QoKSBpZiB3ZSBoYXZlIGVub3VnaCBpbnB1dCBhbmQg
b3V0cHV0ICovCi0gICAgICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7Ci0g
ICAgICAgICAgICAgICAgUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+d2hh
dmUgPCBzdGF0ZS0+d3NpemUpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0
YXRlLT53c2l6ZSAtIGxlZnQ7Ci0gICAgICAgICAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIHN0
YXRlLT53c2l6ZSk7Ci0gICAgICAgICAgICAgICAgTE9BRCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBnZXQgYSBsaXRlcmFsLCBsZW5n
dGgsIG9yIGVuZC1vZi1ibG9jayBjb2RlICovCi0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMpXTsK
LSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFr
OwotICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAodGhpcy5vcCAmJiAodGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAgICAgICAgICAg
ICBsYXN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29kZVtsYXN0LnZhbCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIHRoaXMuYml0cykg
PD0gYml0cykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgc3Rh
dGUtPmxlbmd0aCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLQotICAgICAgICAgICAgLyogcHJvY2Vz
cyBsaXRlcmFsICovCi0gICAgICAgICAgICBpZiAodGhpcy5vcCA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgVHJhY2V2digoc3RkZXJyLCB0aGlzLnZhbCA+PSAweDIwICYmIHRoaXMudmFsIDwgMHg3
ZiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICcl
YydcbiIgOgotICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJh
bCAweCUwMnhcbiIsIHRoaXMudmFsKSk7Ci0gICAgICAgICAgICAgICAgUk9PTSgpOwotICAgICAg
ICAgICAgICAgICpwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZS0+bGVuZ3RoKTsKLSAgICAg
ICAgICAgICAgICBsZWZ0LS07Ci0gICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU47Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHBy
b2Nlc3MgZW5kIG9mIGJsb2NrICovCi0gICAgICAgICAgICBpZiAodGhpcy5vcCAmIDMyKSB7Ci0g
ICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBlbmQgb2Yg
YmxvY2tcbiIpKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGludmFsaWQg
Y29kZSAqLwotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiA2NCkgewotICAgICAgICAgICAgICAg
IHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGxlbmd0aCBjb2RlIC0tIGdldCBleHRyYSBi
aXRzLCBpZiBhbnkgKi8KLSAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhp
cy5vcCkgJiAxNTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZXh0cmEgIT0gMCkgewotICAgICAg
ICAgICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUt
Pmxlbmd0aCArPSBCSVRTKHN0YXRlLT5leHRyYSk7Ci0gICAgICAgICAgICAgICAgRFJPUEJJVFMo
c3RhdGUtPmV4dHJhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVy
ciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBzdGF0ZS0+bGVuZ3RoKSk7Ci0KLSAg
ICAgICAgICAgIC8qIGdldCBkaXN0YW5jZSBjb2RlICovCi0gICAgICAgICAgICBmb3IgKDs7KSB7
Ci0gICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRlLT5kaXN0
Yml0cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0
cykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICgodGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAgICAgICAgICAgICBs
YXN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbbGFzdC52YWwgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyB0aGlzLmJpdHMpIDw9
IGJpdHMpIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLm9wICYgNjQpIHsKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZh
bGlkIGRpc3RhbmNlIGNvZGUiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUt
Pm9mZnNldCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLQotICAgICAgICAgICAgLyogZ2V0IGRpc3Rh
bmNlIGV4dHJhIGJpdHMsIGlmIGFueSAqLwotICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVu
c2lnbmVkKSh0aGlzLm9wKSAmIDE1OwotICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSAhPSAw
KSB7Ci0gICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKLSAgICAgICAgICAg
ICAgICBzdGF0ZS0+b2Zmc2V0ICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKLSAgICAgICAgICAgICAg
ICBEUk9QQklUUyhzdGF0ZS0+ZXh0cmEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHN0YXRlLT5vZmZzZXQgPiBzdGF0ZS0+d3NpemUgLSAoc3RhdGUtPndoYXZlIDwgc3RhdGUtPndz
aXplID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQgOiAwKSkgewotICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQg
ZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJB
RDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRy
YWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLT5v
ZmZzZXQpKTsKLQotICAgICAgICAgICAgLyogY29weSBtYXRjaCBmcm9tIHdpbmRvdyB0byBvdXRw
dXQgKi8KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBST09NKCk7Ci0gICAgICAg
ICAgICAgICAgY29weSA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT5vZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvcHkgPCBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gPSBwdXQg
KyBjb3B5OwotICAgICAgICAgICAgICAgICAgICBjb3B5ID0gbGVmdCAtIGNvcHk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBm
cm9tID0gcHV0IC0gc3RhdGUtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgY29weSA9IGxl
ZnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUt
Pmxlbmd0aCkgY29weSA9IHN0YXRlLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxl
bmd0aCAtPSBjb3B5OwotICAgICAgICAgICAgICAgIGxlZnQgLT0gY29weTsKLSAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICpwdXQrKyA9ICpmcm9tKys7Ci0gICAgICAg
ICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRlLT5s
ZW5ndGggIT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERPTkU6Ci0g
ICAgICAgICAgICAvKiBpbmZsYXRlIHN0cmVhbSB0ZXJtaW5hdGVkIHByb3Blcmx5IC0tIHdyaXRl
IGxlZnRvdmVyIG91dHB1dCAqLwotICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EOwotICAg
ICAgICAgICAgaWYgKGxlZnQgPCBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAo
b3V0KG91dF9kZXNjLCBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d3NpemUgLSBsZWZ0KSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBnb3RvIGluZl9sZWF2ZTsKLQotICAgICAgICBjYXNlIEJBRDoKLSAgICAgICAgICAgIHJl
dCA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOwotCi0gICAgICAg
IGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIGNhbid0IGhhcHBlbiwgYnV0IG1ha2VzIGNvbXBp
bGVycyBoYXBweSAqLwotICAgICAgICAgICAgcmV0ID0gWl9TVFJFQU1fRVJST1I7Ci0gICAgICAg
ICAgICBnb3RvIGluZl9sZWF2ZTsKLSAgICAgICAgfQotCi0gICAgLyogUmV0dXJuIHVudXNlZCBp
bnB1dCAqLwotICBpbmZfbGVhdmU6Ci0gICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7Ci0gICAgc3Ry
bS0+YXZhaWxfaW4gPSBoYXZlOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludCBaRVhQT1JUIGlu
ZmxhdGVCYWNrRW5kKHN0cm0pCi16X3N0cmVhbXAgc3RybTsKLXsKLSAgICBpZiAoc3RybSA9PSBa
X05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1
bmMpMCkKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIFpGUkVFKHN0cm0sIHN0
cm0tPnN0YXRlKTsKLSAgICBzdHJtLT5zdGF0ZSA9IFpfTlVMTDsKLSAgICBUcmFjZXYoKHN0ZGVy
ciwgImluZmxhdGU6IGVuZFxuIikpOwotICAgIHJldHVybiBaX09LOwotfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZhc3QuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvaW5mZmFzdC5jCShyZXZpc2lvbiA1
MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZmYXN0LmMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzE4ICswLDAgQEAKLS8qIGluZmZhc3QuYyAtLSBmYXN0IGRl
Y29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBNYXJrIEFkbGVyCi0gKiBGb3IgY29u
ZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4g
emxpYi5oCi0gKi8KLQotI2luY2x1ZGUgInp1dGlsLmgiCi0jaW5jbHVkZSAiaW5mdHJlZXMuaCIK
LSNpbmNsdWRlICJpbmZsYXRlLmgiCi0jaW5jbHVkZSAiaW5mZmFzdC5oIgotCi0jaWZuZGVmIEFT
TUlORgotCi0vKiBBbGxvdyBtYWNoaW5lIGRlcGVuZGVudCBvcHRpbWl6YXRpb24gZm9yIHBvc3Qt
aW5jcmVtZW50IG9yIHByZS1pbmNyZW1lbnQuCi0gICBCYXNlZCBvbiB0ZXN0aW5nIHRvIGRhdGUs
Ci0gICBQcmUtaW5jcmVtZW50IHByZWZlcnJlZCBmb3I6Ci0gICAtIFBvd2VyUEMgRzMgKEFkbGVy
KQotICAgLSBNSVBTIFI1MDAwIChSYW5kZXJzLVBlaHJzb24pCi0gICBQb3N0LWluY3JlbWVudCBw
cmVmZXJyZWQgZm9yOgotICAgLSBub25lCi0gICBObyBtZWFzdXJhYmxlIGRpZmZlcmVuY2U6Ci0g
ICAtIFBlbnRpdW0gSUlJIChBbmRlcnNvbikKLSAgIC0gTTY4MDYwIChOaWtsKQotICovCi0jaWZk
ZWYgUE9TVElOQwotIyAgZGVmaW5lIE9GRiAwCi0jICBkZWZpbmUgUFVQKGEpICooYSkrKwotI2Vs
c2UKLSMgIGRlZmluZSBPRkYgMQotIyAgZGVmaW5lIFBVUChhKSAqKysoYSkKLSNlbmRpZgotCi0v
KgotICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0
ZSBvdXQgdGhlIHJlc3VsdGluZwotICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0
aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzCi0gICBhdmFpbGFibGUsIGFuIGVuZC1v
Zi1ibG9jayBpcyBlbmNvdW50ZXJlZCwgb3IgYSBkYXRhIGVycm9yIGlzIGVuY291bnRlcmVkLgot
ICAgV2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGll
ZCB0byBpbmZsYXRlKCksIGZvcgotICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBh
IDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZQotICAgaW5mbGF0ZSBleGVj
dXRpb24gdGltZSBpcyBzcGVudCBpbiB0aGlzIHJvdXRpbmUuCi0KLSAgIEVudHJ5IGFzc3VtcHRp
b25zOgotCi0gICAgICAgIHN0YXRlLT5tb2RlID09IExFTgotICAgICAgICBzdHJtLT5hdmFpbF9p
biA+PSA2Ci0gICAgICAgIHN0cm0tPmF2YWlsX291dCA+PSAyNTgKLSAgICAgICAgc3RhcnQgPj0g
c3RybS0+YXZhaWxfb3V0Ci0gICAgICAgIHN0YXRlLT5iaXRzIDwgOAotCi0gICBPbiByZXR1cm4s
IHN0YXRlLT5tb2RlIGlzIG9uZSBvZjoKLQotICAgICAgICBMRU4gLS0gcmFuIG91dCBvZiBlbm91
Z2ggb3V0cHV0IHNwYWNlIG9yIGVub3VnaCBhdmFpbGFibGUgaW5wdXQKLSAgICAgICAgVFlQRSAt
LSByZWFjaGVkIGVuZCBvZiBibG9jayBjb2RlLCBpbmZsYXRlKCkgdG8gaW50ZXJwcmV0IG5leHQg
YmxvY2sKLSAgICAgICAgQkFEIC0tIGVycm9yIGluIGJsb2NrIGRhdGEKLQotICAgTm90ZXM6Ci0K
LSAgICAtIFRoZSBtYXhpbXVtIGlucHV0IGJpdHMgdXNlZCBieSBhIGxlbmd0aC9kaXN0YW5jZSBw
YWlyIGlzIDE1IGJpdHMgZm9yIHRoZQotICAgICAgbGVuZ3RoIGNvZGUsIDUgYml0cyBmb3IgdGhl
IGxlbmd0aCBleHRyYSwgMTUgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGNvZGUsCi0gICAgICBhbmQg
MTMgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGV4dHJhLiAgVGhpcyB0b3RhbHMgNDggYml0cywgb3Ig
c2l4IGJ5dGVzLgotICAgICAgVGhlcmVmb3JlIGlmIHN0cm0tPmF2YWlsX2luID49IDYsIHRoZW4g
dGhlcmUgaXMgZW5vdWdoIGlucHV0IHRvIGF2b2lkCi0gICAgICBjaGVja2luZyBmb3IgYXZhaWxh
YmxlIGlucHV0IHdoaWxlIGRlY29kaW5nLgotCi0gICAgLSBUaGUgbWF4aW11bSBieXRlcyB0aGF0
IGEgc2luZ2xlIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGNhbiBvdXRwdXQgaXMgMjU4Ci0gICAgICBi
eXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5m
bGF0ZV9mYXN0KCkKLSAgICAgIHJlcXVpcmVzIHN0cm0tPmF2YWlsX291dCA+PSAyNTggZm9yIGVh
Y2ggbG9vcCB0byBhdm9pZCBjaGVja2luZyBmb3IKLSAgICAgIG91dHB1dCBzcGFjZS4KLSAqLwot
dm9pZCBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpCi16X3N0cmVhbXAgc3RybTsKLXVuc2lnbmVk
IHN0YXJ0OyAgICAgICAgIC8qIGluZmxhdGUoKSdzIHN0YXJ0aW5nIHZhbHVlIGZvciBzdHJtLT5h
dmFpbF9vdXQgKi8KLXsKLSAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAg
IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCi0g
ICAgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIHdoaWxlIGluIDwgbGFzdCwgZW5vdWdo
IGlucHV0IGF2YWlsYWJsZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpvdXQ7ICAgICAvKiBs
b2NhbCBzdHJtLT5uZXh0X291dCAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpiZWc7ICAgICAv
KiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0tPm5leHRfb3V0ICovCi0gICAgdW5zaWduZWQgY2hh
ciBGQVIgKmVuZDsgICAgIC8qIHdoaWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJs
ZSAqLwotI2lmZGVmIElORkxBVEVfU1RSSUNUCi0gICAgdW5zaWduZWQgZG1heDsgICAgICAgICAg
ICAgIC8qIG1heGltdW0gZGlzdGFuY2UgZnJvbSB6bGliIGhlYWRlciAqLwotI2VuZGlmCi0gICAg
dW5zaWduZWQgd3NpemU7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90
IHVzaW5nIHdpbmRvdyAqLwotICAgIHVuc2lnbmVkIHdoYXZlOyAgICAgICAgICAgICAvKiB2YWxp
ZCBieXRlcyBpbiB0aGUgd2luZG93ICovCi0gICAgdW5zaWduZWQgd3JpdGU7ICAgICAgICAgICAg
IC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3c7
ICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi8KLSAgICB1bnNp
Z25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogbG9jYWwgc3RybS0+aG9sZCAqLwotICAgIHVuc2ln
bmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLT5iaXRzICovCi0gICAgY29kZSBj
b25zdCBGQVIgKmxjb2RlOyAgICAgIC8qIGxvY2FsIHN0cm0tPmxlbmNvZGUgKi8KLSAgICBjb2Rl
IGNvbnN0IEZBUiAqZGNvZGU7ICAgICAgLyogbG9jYWwgc3RybS0+ZGlzdGNvZGUgKi8KLSAgICB1
bnNpZ25lZCBsbWFzazsgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgbGVu
Z3RoIGNvZGVzICovCi0gICAgdW5zaWduZWQgZG1hc2s7ICAgICAgICAgICAgIC8qIG1hc2sgZm9y
IGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovCi0gICAgY29kZSB0aGlzOyAgICAgICAg
ICAgICAgICAgIC8qIHJldHJpZXZlZCB0YWJsZSBlbnRyeSAqLwotICAgIHVuc2lnbmVkIG9wOyAg
ICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMsIG9wZXJhdGlvbiwgZXh0cmEgYml0cywgb3IgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2lu
ZG93IGJ5dGVzIHRvIGNvcHkgKi8KLSAgICB1bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyog
bWF0Y2ggbGVuZ3RoLCB1bnVzZWQgYnl0ZXMgKi8KLSAgICB1bnNpZ25lZCBkaXN0OyAgICAgICAg
ICAgICAgLyogbWF0Y2ggZGlzdGFuY2UgKi8KLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsg
ICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovCi0KLSAgICAvKiBjb3B5IHN0YXRlIHRv
IGxvY2FsIHZhcmlhYmxlcyAqLwotICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZB
UiAqKXN0cm0tPnN0YXRlOwotICAgIGluID0gc3RybS0+bmV4dF9pbiAtIE9GRjsKLSAgICBsYXN0
ID0gaW4gKyAoc3RybS0+YXZhaWxfaW4gLSA1KTsKLSAgICBvdXQgPSBzdHJtLT5uZXh0X291dCAt
IE9GRjsKLSAgICBiZWcgPSBvdXQgLSAoc3RhcnQgLSBzdHJtLT5hdmFpbF9vdXQpOwotICAgIGVu
ZCA9IG91dCArIChzdHJtLT5hdmFpbF9vdXQgLSAyNTcpOwotI2lmZGVmIElORkxBVEVfU1RSSUNU
Ci0gICAgZG1heCA9IHN0YXRlLT5kbWF4OwotI2VuZGlmCi0gICAgd3NpemUgPSBzdGF0ZS0+d3Np
emU7Ci0gICAgd2hhdmUgPSBzdGF0ZS0+d2hhdmU7Ci0gICAgd3JpdGUgPSBzdGF0ZS0+d3JpdGU7
Ci0gICAgd2luZG93ID0gc3RhdGUtPndpbmRvdzsKLSAgICBob2xkID0gc3RhdGUtPmhvbGQ7Ci0g
ICAgYml0cyA9IHN0YXRlLT5iaXRzOwotICAgIGxjb2RlID0gc3RhdGUtPmxlbmNvZGU7Ci0gICAg
ZGNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGU7Ci0gICAgbG1hc2sgPSAoMVUgPDwgc3RhdGUtPmxlbmJp
dHMpIC0gMTsKLSAgICBkbWFzayA9ICgxVSA8PCBzdGF0ZS0+ZGlzdGJpdHMpIC0gMTsKLQotICAg
IC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxv
Y2sgb3Igbm90IGVub3VnaAotICAgICAgIGlucHV0IGRhdGEgb3Igb3V0cHV0IHNwYWNlICovCi0g
ICAgZG8gewotICAgICAgICBpZiAoYml0cyA8IDE1KSB7Ci0gICAgICAgICAgICBob2xkICs9ICh1
bnNpZ25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOwotICAgICAgICAgICAgYml0cyArPSA4Owot
ICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKLSAg
ICAgICAgICAgIGJpdHMgKz0gODsKLSAgICAgICAgfQotICAgICAgICB0aGlzID0gbGNvZGVbaG9s
ZCAmIGxtYXNrXTsKLSAgICAgIGRvbGVuOgotICAgICAgICBvcCA9ICh1bnNpZ25lZCkodGhpcy5i
aXRzKTsKLSAgICAgICAgaG9sZCA+Pj0gb3A7Ci0gICAgICAgIGJpdHMgLT0gb3A7Ci0gICAgICAg
IG9wID0gKHVuc2lnbmVkKSh0aGlzLm9wKTsKLSAgICAgICAgaWYgKG9wID09IDApIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGxpdGVyYWwgKi8KLSAgICAgICAgICAgIFRyYWNldnYoKHN0
ZGVyciwgdGhpcy52YWwgPj0gMHgyMCAmJiB0aGlzLnZhbCA8IDB4N2YgPwotICAgICAgICAgICAg
ICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAg
ICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdGhpcy52YWwpKTsK
LSAgICAgICAgICAgIFBVUChvdXQpID0gKHVuc2lnbmVkIGNoYXIpKHRoaXMudmFsKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgLyog
bGVuZ3RoIGJhc2UgKi8KLSAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZCkodGhpcy52YWwpOwot
ICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVy
IG9mIGV4dHJhIGJpdHMgKi8KLSAgICAgICAgICAgIGlmIChvcCkgewotICAgICAgICAgICAgICAg
IGlmIChiaXRzIDwgb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQg
bG9uZykoUFVQKGluKSkgPDwgYml0czsKLSAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsZW4gKz0gKHVuc2lnbmVkKWhvbGQg
JiAoKDFVIDw8IG9wKSAtIDEpOwotICAgICAgICAgICAgICAgIGhvbGQgPj49IG9wOwotICAgICAg
ICAgICAgICAgIGJpdHMgLT0gb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUcmFjZXZ2
KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxuIiwgbGVuKSk7Ci0gICAgICAg
ICAgICBpZiAoYml0cyA8IDE1KSB7Ci0gICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQg
bG9uZykoUFVQKGluKSkgPDwgYml0czsKLSAgICAgICAgICAgICAgICBiaXRzICs9IDg7Ci0gICAg
ICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKLSAg
ICAgICAgICAgICAgICBiaXRzICs9IDg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlz
ID0gZGNvZGVbaG9sZCAmIGRtYXNrXTsKLSAgICAgICAgICBkb2Rpc3Q6Ci0gICAgICAgICAgICBv
cCA9ICh1bnNpZ25lZCkodGhpcy5iaXRzKTsKLSAgICAgICAgICAgIGhvbGQgPj49IG9wOwotICAg
ICAgICAgICAgYml0cyAtPSBvcDsKLSAgICAgICAgICAgIG9wID0gKHVuc2lnbmVkKSh0aGlzLm9w
KTsKLSAgICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRp
c3RhbmNlIGJhc2UgKi8KLSAgICAgICAgICAgICAgICBkaXN0ID0gKHVuc2lnbmVkKSh0aGlzLnZh
bCk7Ci0gICAgICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBu
dW1iZXIgb2YgZXh0cmEgYml0cyAqLwotICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsK
LSAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwg
Yml0czsKLSAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYml0cyA8IG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNp
Z25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOwotICAgICAgICAgICAgICAgICAgICAgICAgYml0
cyArPSA4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGRpc3QgKz0gKHVuc2lnbmVkKWhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpOwotI2lm
ZGVmIElORkxBVEVfU1RSSUNUCi0gICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBkbWF4KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2Ug
dG9vIGZhciBiYWNrIjsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAg
ICAgICAgICAgICAgIGhvbGQgPj49IG9wOwotICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7Ci0g
ICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBkaXN0YW5j
ZSAldVxuIiwgZGlzdCkpOwotICAgICAgICAgICAgICAgIG9wID0gKHVuc2lnbmVkKShvdXQgLSBi
ZWcpOyAgICAgLyogbWF4IGRpc3RhbmNlIGluIG91dHB1dCAqLwotICAgICAgICAgICAgICAgIGlm
IChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cg
Ki8KLSAgICAgICAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgIC8qIGRp
c3RhbmNlIGJhY2sgaW4gd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChvcCA+IHdo
YXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZh
bGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gPSB3aW5kb3cgLSBPRkY7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZSA9PSAwKSB7ICAgICAgICAgICAvKiB2ZXJ5IGNv
bW1vbiBjYXNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21l
IGZyb20gd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoLS1vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91
dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
d3JpdGUgPCBvcCkgeyAgICAgIC8qIHdyYXAgYXJvdW5kIHdpbmRvdyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHdyaXRlIC0gb3A7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvcCAtPSB3cml0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxl
bikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSBlbmQgb2Ygd2luZG93ICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuIC09IG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbSA9IHdpbmRvdyAtIE9GRjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAod3JpdGUgPCBsZW4pIHsgIC8qIHNvbWUgZnJvbSBzdGFydCBvZiB3aW5k
b3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSB3cml0ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
VVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3
aGlsZSAoLS1vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQg
LSBkaXN0OyAgICAgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNv
bnRpZ3VvdXMgaW4gd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdy
aXRlIC0gb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAg
ICAvKiBzb21lIGZyb20gd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu
IC09IG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJvbSA9IG91dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGxlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQ
KGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbiAtPSAzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0g
UFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgICAgICAgICAvKiBjb3B5IGRpcmVj
dCBmcm9tIG91dHB1dCAqLwotICAgICAgICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgLyogbWluaW11bSBsZW5ndGggaXMgdGhyZWUgKi8KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQ
KG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBV
UChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwotICAgICAgICAgICAg
ICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9
PSAwKSB7ICAgICAgICAgIC8qIDJuZCBsZXZlbCBkaXN0YW5jZSBjb2RlICovCi0gICAgICAgICAg
ICAgICAgdGhpcyA9IGRjb2RlW3RoaXMudmFsICsgKGhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpKV07
Ci0gICAgICAgICAgICAgICAgZ290byBkb2Rpc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRp
c3RhbmNlIGNvZGUiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKChvcCAmIDY0KSA9PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNv
ZGUgKi8KLSAgICAgICAgICAgIHRoaXMgPSBsY29kZVt0aGlzLnZhbCArIChob2xkICYgKCgxVSA8
PCBvcCkgLSAxKSldOwotICAgICAgICAgICAgZ290byBkb2xlbjsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChvcCAmIDMyKSB7ICAgICAgICAgICAgICAgICAgICAgLyogZW5kLW9mLWJsb2Nr
ICovCi0gICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBv
ZiBibG9ja1xuIikpOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdHJtLT5t
c2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOwotICAgICAgICAgICAg
c3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0g
d2hpbGUgKGluIDwgbGFzdCAmJiBvdXQgPCBlbmQpOwotCi0gICAgLyogcmV0dXJuIHVudXNlZCBi
eXRlcyAob24gZW50cnksIGJpdHMgPCA4LCBzbyBpbiB3b24ndCBnbyB0b28gZmFyIGJhY2spICov
Ci0gICAgbGVuID0gYml0cyA+PiAzOwotICAgIGluIC09IGxlbjsKLSAgICBiaXRzIC09IGxlbiA8
PCAzOwotICAgIGhvbGQgJj0gKDFVIDw8IGJpdHMpIC0gMTsKLQotICAgIC8qIHVwZGF0ZSBzdGF0
ZSBhbmQgcmV0dXJuICovCi0gICAgc3RybS0+bmV4dF9pbiA9IGluICsgT0ZGOwotICAgIHN0cm0t
Pm5leHRfb3V0ID0gb3V0ICsgT0ZGOwotICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKShp
biA8IGxhc3QgPyA1ICsgKGxhc3QgLSBpbikgOiA1IC0gKGluIC0gbGFzdCkpOwotICAgIHN0cm0t
PmF2YWlsX291dCA9ICh1bnNpZ25lZCkob3V0IDwgZW5kID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDI1NyArIChlbmQgLSBvdXQpIDogMjU3IC0gKG91dCAtIGVuZCkpOwotICAg
IHN0YXRlLT5ob2xkID0gaG9sZDsKLSAgICBzdGF0ZS0+Yml0cyA9IGJpdHM7Ci0gICAgcmV0dXJu
OwotfQotCi0vKgotICAgaW5mbGF0ZV9mYXN0KCkgc3BlZWR1cHMgdGhhdCB0dXJuZWQgb3V0IHNs
b3dlciAob24gYSBQb3dlclBDIEczIDc1MENYZSk6Ci0gICAtIFVzaW5nIGJpdCBmaWVsZHMgZm9y
IGNvZGUgc3RydWN0dXJlCi0gICAtIERpZmZlcmVudCBvcCBkZWZpbml0aW9uIHRvIGF2b2lkICYg
Zm9yIGV4dHJhIGJpdHMgKGRvICYgZm9yIHRhYmxlIGJpdHMpCi0gICAtIFRocmVlIHNlcGFyYXRl
IGRlY29kaW5nIGRvLWxvb3BzIGZvciBkaXJlY3QsIHdpbmRvdywgYW5kIHdyaXRlID09IDAKLSAg
IC0gU3BlY2lhbCBjYXNlIGZvciBkaXN0YW5jZSA+IDEgY29waWVzIHRvIGRvIG92ZXJsYXBwZWQg
bG9hZCBhbmQgc3RvcmUgY29weQotICAgLSBFeHBsaWNpdCBicmFuY2ggcHJlZGljdGlvbnMgKGJh
c2VkIG9uIG1lYXN1cmVkIGJyYW5jaCBwcm9iYWJpbGl0aWVzKQotICAgLSBEZWZlcnJpbmcgbWF0
Y2ggY29weSBhbmQgaW50ZXJzcGVyc2VkIGl0IHdpdGggZGVjb2Rpbmcgc3Vic2VxdWVudCBjb2Rl
cwotICAgLSBTd2FwcGluZyBsaXRlcmFsL2xlbmd0aCBlbHNlCi0gICAtIFN3YXBwaW5nIHdpbmRv
dy9kaXJlY3QgZWxzZQotICAgLSBMYXJnZXIgdW5yb2xsZWQgY29weSBsb29wcyAodGhyZWUgaXMg
YWJvdXQgcmlnaHQpCi0gICAtIE1vdmluZyBsZW4gLT0gMyBzdGF0ZW1lbnQgaW50byBtaWRkbGUg
b2YgbG9vcAotICovCi0KLSNlbmRpZiAvKiAhQVNNSU5GICovCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3psaWIvaW5mZmFzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZmYXN0LmgJKHJldmlzaW9uIDUzNzE5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZhc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMSArMCwwIEBACi0vKiBpbmZmYXN0LmggLS0gaGVhZGVyIHRvIHVzZSBp
bmZmYXN0LmMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIE1hcmsgQWRsZXIKLSAqIEZvciBj
b25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBp
biB6bGliLmgKLSAqLwotCi0vKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVz
ZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcwotICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24g
b2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCi0gICBzdWJqZWN0IHRvIGNoYW5nZS4g
QXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCi0gKi8KLQotdm9pZCBpbmZsYXRl
X2Zhc3QgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBzdGFydCkpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZpeGVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZpeGVkLmgJKHJldmlzaW9u
IDUzNzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmZpeGVk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBAQAotICAgIC8qIGluZmZpeGVkLmggLS0g
dGFibGUgZm9yIGRlY29kaW5nIGZpeGVkIGNvZGVzCi0gICAgICogR2VuZXJhdGVkIGF1dG9tYXRp
Y2FsbHkgYnkgbWFrZWZpeGVkKCkuCi0gICAgICovCi0KLSAgICAvKiBXQVJOSU5HOiB0aGlzIGZp
bGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdAotICAgICAgIGlzIHBh
cnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZAot
ICAgICAgIGlzIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNl
IHpsaWIuaC4KLSAgICAgKi8KLQotICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFs1MTJdID0g
ewotICAgICAgICB7OTYsNywwfSx7MCw4LDgwfSx7MCw4LDE2fSx7MjAsOCwxMTV9LHsxOCw3LDMx
fSx7MCw4LDExMn0sezAsOCw0OH0sCi0gICAgICAgIHswLDksMTkyfSx7MTYsNywxMH0sezAsOCw5
Nn0sezAsOCwzMn0sezAsOSwxNjB9LHswLDgsMH0sezAsOCwxMjh9LAotICAgICAgICB7MCw4LDY0
fSx7MCw5LDIyNH0sezE2LDcsNn0sezAsOCw4OH0sezAsOCwyNH0sezAsOSwxNDR9LHsxOSw3LDU5
fSwKLSAgICAgICAgezAsOCwxMjB9LHswLDgsNTZ9LHswLDksMjA4fSx7MTcsNywxN30sezAsOCwx
MDR9LHswLDgsNDB9LHswLDksMTc2fSwKLSAgICAgICAgezAsOCw4fSx7MCw4LDEzNn0sezAsOCw3
Mn0sezAsOSwyNDB9LHsxNiw3LDR9LHswLDgsODR9LHswLDgsMjB9LAotICAgICAgICB7MjEsOCwy
Mjd9LHsxOSw3LDQzfSx7MCw4LDExNn0sezAsOCw1Mn0sezAsOSwyMDB9LHsxNyw3LDEzfSx7MCw4
LDEwMH0sCi0gICAgICAgIHswLDgsMzZ9LHswLDksMTY4fSx7MCw4LDR9LHswLDgsMTMyfSx7MCw4
LDY4fSx7MCw5LDIzMn0sezE2LDcsOH0sCi0gICAgICAgIHswLDgsOTJ9LHswLDgsMjh9LHswLDks
MTUyfSx7MjAsNyw4M30sezAsOCwxMjR9LHswLDgsNjB9LHswLDksMjE2fSwKLSAgICAgICAgezE4
LDcsMjN9LHswLDgsMTA4fSx7MCw4LDQ0fSx7MCw5LDE4NH0sezAsOCwxMn0sezAsOCwxNDB9LHsw
LDgsNzZ9LAotICAgICAgICB7MCw5LDI0OH0sezE2LDcsM30sezAsOCw4Mn0sezAsOCwxOH0sezIx
LDgsMTYzfSx7MTksNywzNX0sezAsOCwxMTR9LAotICAgICAgICB7MCw4LDUwfSx7MCw5LDE5Nn0s
ezE3LDcsMTF9LHswLDgsOTh9LHswLDgsMzR9LHswLDksMTY0fSx7MCw4LDJ9LAotICAgICAgICB7
MCw4LDEzMH0sezAsOCw2Nn0sezAsOSwyMjh9LHsxNiw3LDd9LHswLDgsOTB9LHswLDgsMjZ9LHsw
LDksMTQ4fSwKLSAgICAgICAgezIwLDcsNjd9LHswLDgsMTIyfSx7MCw4LDU4fSx7MCw5LDIxMn0s
ezE4LDcsMTl9LHswLDgsMTA2fSx7MCw4LDQyfSwKLSAgICAgICAgezAsOSwxODB9LHswLDgsMTB9
LHswLDgsMTM4fSx7MCw4LDc0fSx7MCw5LDI0NH0sezE2LDcsNX0sezAsOCw4Nn0sCi0gICAgICAg
IHswLDgsMjJ9LHs2NCw4LDB9LHsxOSw3LDUxfSx7MCw4LDExOH0sezAsOCw1NH0sezAsOSwyMDR9
LHsxNyw3LDE1fSwKLSAgICAgICAgezAsOCwxMDJ9LHswLDgsMzh9LHswLDksMTcyfSx7MCw4LDZ9
LHswLDgsMTM0fSx7MCw4LDcwfSx7MCw5LDIzNn0sCi0gICAgICAgIHsxNiw3LDl9LHswLDgsOTR9
LHswLDgsMzB9LHswLDksMTU2fSx7MjAsNyw5OX0sezAsOCwxMjZ9LHswLDgsNjJ9LAotICAgICAg
ICB7MCw5LDIyMH0sezE4LDcsMjd9LHswLDgsMTEwfSx7MCw4LDQ2fSx7MCw5LDE4OH0sezAsOCwx
NH0sezAsOCwxNDJ9LAotICAgICAgICB7MCw4LDc4fSx7MCw5LDI1Mn0sezk2LDcsMH0sezAsOCw4
MX0sezAsOCwxN30sezIxLDgsMTMxfSx7MTgsNywzMX0sCi0gICAgICAgIHswLDgsMTEzfSx7MCw4
LDQ5fSx7MCw5LDE5NH0sezE2LDcsMTB9LHswLDgsOTd9LHswLDgsMzN9LHswLDksMTYyfSwKLSAg
ICAgICAgezAsOCwxfSx7MCw4LDEyOX0sezAsOCw2NX0sezAsOSwyMjZ9LHsxNiw3LDZ9LHswLDgs
ODl9LHswLDgsMjV9LAotICAgICAgICB7MCw5LDE0Nn0sezE5LDcsNTl9LHswLDgsMTIxfSx7MCw4
LDU3fSx7MCw5LDIxMH0sezE3LDcsMTd9LHswLDgsMTA1fSwKLSAgICAgICAgezAsOCw0MX0sezAs
OSwxNzh9LHswLDgsOX0sezAsOCwxMzd9LHswLDgsNzN9LHswLDksMjQyfSx7MTYsNyw0fSwKLSAg
ICAgICAgezAsOCw4NX0sezAsOCwyMX0sezE2LDgsMjU4fSx7MTksNyw0M30sezAsOCwxMTd9LHsw
LDgsNTN9LHswLDksMjAyfSwKLSAgICAgICAgezE3LDcsMTN9LHswLDgsMTAxfSx7MCw4LDM3fSx7
MCw5LDE3MH0sezAsOCw1fSx7MCw4LDEzM30sezAsOCw2OX0sCi0gICAgICAgIHswLDksMjM0fSx7
MTYsNyw4fSx7MCw4LDkzfSx7MCw4LDI5fSx7MCw5LDE1NH0sezIwLDcsODN9LHswLDgsMTI1fSwK
LSAgICAgICAgezAsOCw2MX0sezAsOSwyMTh9LHsxOCw3LDIzfSx7MCw4LDEwOX0sezAsOCw0NX0s
ezAsOSwxODZ9LHswLDgsMTN9LAotICAgICAgICB7MCw4LDE0MX0sezAsOCw3N30sezAsOSwyNTB9
LHsxNiw3LDN9LHswLDgsODN9LHswLDgsMTl9LHsyMSw4LDE5NX0sCi0gICAgICAgIHsxOSw3LDM1
fSx7MCw4LDExNX0sezAsOCw1MX0sezAsOSwxOTh9LHsxNyw3LDExfSx7MCw4LDk5fSx7MCw4LDM1
fSwKLSAgICAgICAgezAsOSwxNjZ9LHswLDgsM30sezAsOCwxMzF9LHswLDgsNjd9LHswLDksMjMw
fSx7MTYsNyw3fSx7MCw4LDkxfSwKLSAgICAgICAgezAsOCwyN30sezAsOSwxNTB9LHsyMCw3LDY3
fSx7MCw4LDEyM30sezAsOCw1OX0sezAsOSwyMTR9LHsxOCw3LDE5fSwKLSAgICAgICAgezAsOCwx
MDd9LHswLDgsNDN9LHswLDksMTgyfSx7MCw4LDExfSx7MCw4LDEzOX0sezAsOCw3NX0sezAsOSwy
NDZ9LAotICAgICAgICB7MTYsNyw1fSx7MCw4LDg3fSx7MCw4LDIzfSx7NjQsOCwwfSx7MTksNyw1
MX0sezAsOCwxMTl9LHswLDgsNTV9LAotICAgICAgICB7MCw5LDIwNn0sezE3LDcsMTV9LHswLDgs
MTAzfSx7MCw4LDM5fSx7MCw5LDE3NH0sezAsOCw3fSx7MCw4LDEzNX0sCi0gICAgICAgIHswLDgs
NzF9LHswLDksMjM4fSx7MTYsNyw5fSx7MCw4LDk1fSx7MCw4LDMxfSx7MCw5LDE1OH0sezIwLDcs
OTl9LAotICAgICAgICB7MCw4LDEyN30sezAsOCw2M30sezAsOSwyMjJ9LHsxOCw3LDI3fSx7MCw4
LDExMX0sezAsOCw0N30sezAsOSwxOTB9LAotICAgICAgICB7MCw4LDE1fSx7MCw4LDE0M30sezAs
OCw3OX0sezAsOSwyNTR9LHs5Niw3LDB9LHswLDgsODB9LHswLDgsMTZ9LAotICAgICAgICB7MjAs
OCwxMTV9LHsxOCw3LDMxfSx7MCw4LDExMn0sezAsOCw0OH0sezAsOSwxOTN9LHsxNiw3LDEwfSx7
MCw4LDk2fSwKLSAgICAgICAgezAsOCwzMn0sezAsOSwxNjF9LHswLDgsMH0sezAsOCwxMjh9LHsw
LDgsNjR9LHswLDksMjI1fSx7MTYsNyw2fSwKLSAgICAgICAgezAsOCw4OH0sezAsOCwyNH0sezAs
OSwxNDV9LHsxOSw3LDU5fSx7MCw4LDEyMH0sezAsOCw1Nn0sezAsOSwyMDl9LAotICAgICAgICB7
MTcsNywxN30sezAsOCwxMDR9LHswLDgsNDB9LHswLDksMTc3fSx7MCw4LDh9LHswLDgsMTM2fSx7
MCw4LDcyfSwKLSAgICAgICAgezAsOSwyNDF9LHsxNiw3LDR9LHswLDgsODR9LHswLDgsMjB9LHsy
MSw4LDIyN30sezE5LDcsNDN9LHswLDgsMTE2fSwKLSAgICAgICAgezAsOCw1Mn0sezAsOSwyMDF9
LHsxNyw3LDEzfSx7MCw4LDEwMH0sezAsOCwzNn0sezAsOSwxNjl9LHswLDgsNH0sCi0gICAgICAg
IHswLDgsMTMyfSx7MCw4LDY4fSx7MCw5LDIzM30sezE2LDcsOH0sezAsOCw5Mn0sezAsOCwyOH0s
ezAsOSwxNTN9LAotICAgICAgICB7MjAsNyw4M30sezAsOCwxMjR9LHswLDgsNjB9LHswLDksMjE3
fSx7MTgsNywyM30sezAsOCwxMDh9LHswLDgsNDR9LAotICAgICAgICB7MCw5LDE4NX0sezAsOCwx
Mn0sezAsOCwxNDB9LHswLDgsNzZ9LHswLDksMjQ5fSx7MTYsNywzfSx7MCw4LDgyfSwKLSAgICAg
ICAgezAsOCwxOH0sezIxLDgsMTYzfSx7MTksNywzNX0sezAsOCwxMTR9LHswLDgsNTB9LHswLDks
MTk3fSx7MTcsNywxMX0sCi0gICAgICAgIHswLDgsOTh9LHswLDgsMzR9LHswLDksMTY1fSx7MCw4
LDJ9LHswLDgsMTMwfSx7MCw4LDY2fSx7MCw5LDIyOX0sCi0gICAgICAgIHsxNiw3LDd9LHswLDgs
OTB9LHswLDgsMjZ9LHswLDksMTQ5fSx7MjAsNyw2N30sezAsOCwxMjJ9LHswLDgsNTh9LAotICAg
ICAgICB7MCw5LDIxM30sezE4LDcsMTl9LHswLDgsMTA2fSx7MCw4LDQyfSx7MCw5LDE4MX0sezAs
OCwxMH0sezAsOCwxMzh9LAotICAgICAgICB7MCw4LDc0fSx7MCw5LDI0NX0sezE2LDcsNX0sezAs
OCw4Nn0sezAsOCwyMn0sezY0LDgsMH0sezE5LDcsNTF9LAotICAgICAgICB7MCw4LDExOH0sezAs
OCw1NH0sezAsOSwyMDV9LHsxNyw3LDE1fSx7MCw4LDEwMn0sezAsOCwzOH0sezAsOSwxNzN9LAot
ICAgICAgICB7MCw4LDZ9LHswLDgsMTM0fSx7MCw4LDcwfSx7MCw5LDIzN30sezE2LDcsOX0sezAs
OCw5NH0sezAsOCwzMH0sCi0gICAgICAgIHswLDksMTU3fSx7MjAsNyw5OX0sezAsOCwxMjZ9LHsw
LDgsNjJ9LHswLDksMjIxfSx7MTgsNywyN30sezAsOCwxMTB9LAotICAgICAgICB7MCw4LDQ2fSx7
MCw5LDE4OX0sezAsOCwxNH0sezAsOCwxNDJ9LHswLDgsNzh9LHswLDksMjUzfSx7OTYsNywwfSwK
LSAgICAgICAgezAsOCw4MX0sezAsOCwxN30sezIxLDgsMTMxfSx7MTgsNywzMX0sezAsOCwxMTN9
LHswLDgsNDl9LHswLDksMTk1fSwKLSAgICAgICAgezE2LDcsMTB9LHswLDgsOTd9LHswLDgsMzN9
LHswLDksMTYzfSx7MCw4LDF9LHswLDgsMTI5fSx7MCw4LDY1fSwKLSAgICAgICAgezAsOSwyMjd9
LHsxNiw3LDZ9LHswLDgsODl9LHswLDgsMjV9LHswLDksMTQ3fSx7MTksNyw1OX0sezAsOCwxMjF9
LAotICAgICAgICB7MCw4LDU3fSx7MCw5LDIxMX0sezE3LDcsMTd9LHswLDgsMTA1fSx7MCw4LDQx
fSx7MCw5LDE3OX0sezAsOCw5fSwKLSAgICAgICAgezAsOCwxMzd9LHswLDgsNzN9LHswLDksMjQz
fSx7MTYsNyw0fSx7MCw4LDg1fSx7MCw4LDIxfSx7MTYsOCwyNTh9LAotICAgICAgICB7MTksNyw0
M30sezAsOCwxMTd9LHswLDgsNTN9LHswLDksMjAzfSx7MTcsNywxM30sezAsOCwxMDF9LHswLDgs
Mzd9LAotICAgICAgICB7MCw5LDE3MX0sezAsOCw1fSx7MCw4LDEzM30sezAsOCw2OX0sezAsOSwy
MzV9LHsxNiw3LDh9LHswLDgsOTN9LAotICAgICAgICB7MCw4LDI5fSx7MCw5LDE1NX0sezIwLDcs
ODN9LHswLDgsMTI1fSx7MCw4LDYxfSx7MCw5LDIxOX0sezE4LDcsMjN9LAotICAgICAgICB7MCw4
LDEwOX0sezAsOCw0NX0sezAsOSwxODd9LHswLDgsMTN9LHswLDgsMTQxfSx7MCw4LDc3fSx7MCw5
LDI1MX0sCi0gICAgICAgIHsxNiw3LDN9LHswLDgsODN9LHswLDgsMTl9LHsyMSw4LDE5NX0sezE5
LDcsMzV9LHswLDgsMTE1fSx7MCw4LDUxfSwKLSAgICAgICAgezAsOSwxOTl9LHsxNyw3LDExfSx7
MCw4LDk5fSx7MCw4LDM1fSx7MCw5LDE2N30sezAsOCwzfSx7MCw4LDEzMX0sCi0gICAgICAgIHsw
LDgsNjd9LHswLDksMjMxfSx7MTYsNyw3fSx7MCw4LDkxfSx7MCw4LDI3fSx7MCw5LDE1MX0sezIw
LDcsNjd9LAotICAgICAgICB7MCw4LDEyM30sezAsOCw1OX0sezAsOSwyMTV9LHsxOCw3LDE5fSx7
MCw4LDEwN30sezAsOCw0M30sezAsOSwxODN9LAotICAgICAgICB7MCw4LDExfSx7MCw4LDEzOX0s
ezAsOCw3NX0sezAsOSwyNDd9LHsxNiw3LDV9LHswLDgsODd9LHswLDgsMjN9LAotICAgICAgICB7
NjQsOCwwfSx7MTksNyw1MX0sezAsOCwxMTl9LHswLDgsNTV9LHswLDksMjA3fSx7MTcsNywxNX0s
ezAsOCwxMDN9LAotICAgICAgICB7MCw4LDM5fSx7MCw5LDE3NX0sezAsOCw3fSx7MCw4LDEzNX0s
ezAsOCw3MX0sezAsOSwyMzl9LHsxNiw3LDl9LAotICAgICAgICB7MCw4LDk1fSx7MCw4LDMxfSx7
MCw5LDE1OX0sezIwLDcsOTl9LHswLDgsMTI3fSx7MCw4LDYzfSx7MCw5LDIyM30sCi0gICAgICAg
IHsxOCw3LDI3fSx7MCw4LDExMX0sezAsOCw0N30sezAsOSwxOTF9LHswLDgsMTV9LHswLDgsMTQz
fSx7MCw4LDc5fSwKLSAgICAgICAgezAsOSwyNTV9Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25z
dCBjb2RlIGRpc3RmaXhbMzJdID0gewotICAgICAgICB7MTYsNSwxfSx7MjMsNSwyNTd9LHsxOSw1
LDE3fSx7MjcsNSw0MDk3fSx7MTcsNSw1fSx7MjUsNSwxMDI1fSwKLSAgICAgICAgezIxLDUsNjV9
LHsyOSw1LDE2Mzg1fSx7MTYsNSwzfSx7MjQsNSw1MTN9LHsyMCw1LDMzfSx7MjgsNSw4MTkzfSwK
LSAgICAgICAgezE4LDUsOX0sezI2LDUsMjA0OX0sezIyLDUsMTI5fSx7NjQsNSwwfSx7MTYsNSwy
fSx7MjMsNSwzODV9LAotICAgICAgICB7MTksNSwyNX0sezI3LDUsNjE0NX0sezE3LDUsN30sezI1
LDUsMTUzN30sezIxLDUsOTd9LHsyOSw1LDI0NTc3fSwKLSAgICAgICAgezE2LDUsNH0sezI0LDUs
NzY5fSx7MjAsNSw0OX0sezI4LDUsMTIyODl9LHsxOCw1LDEzfSx7MjYsNSwzMDczfSwKLSAgICAg
ICAgezIyLDUsMTkzfSx7NjQsNSwwfQotICAgIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3psaWIvaW5mbGF0ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZsYXRlLmMJKHJldmlzaW9uIDUzNzE5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2luZmxhdGUuYwkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzY4ICswLDAgQEAKLS8qIGluZmxhdGUuYyAtLSB6bGliIGRlY29tcHJlc3Npb24K
LSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKLSAqIEZvciBjb25kaXRpb25z
IG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgK
LSAqLwotCi0vKgotICogQ2hhbmdlIGhpc3Rvcnk6Ci0gKgotICogMS4yLmJldGEwICAgIDI0IE5v
diAyMDAyCi0gKiAtIEZpcnN0IHZlcnNpb24gLS0gY29tcGxldGUgcmV3cml0ZSBvZiBpbmZsYXRl
IHRvIHNpbXBsaWZ5IGNvZGUsIGF2b2lkCi0gKiAgIGNyZWF0aW9uIG9mIHdpbmRvdyB3aGVuIG5v
dCBuZWVkZWQsIG1pbmltaXplIHVzZSBvZiB3aW5kb3cgd2hlbiBpdCBpcwotICogICBuZWVkZWQs
IG1ha2UgaW5mZmFzdC5jIGV2ZW4gZmFzdGVyLCBpbXBsZW1lbnQgZ3ppcCBkZWNvZGluZywgYW5k
IHRvCi0gKiAgIGltcHJvdmUgY29kZSByZWFkYWJpbGl0eSBhbmQgc3R5bGUgb3ZlciB0aGUgcHJl
dmlvdXMgemxpYiBpbmZsYXRlIGNvZGUKLSAqCi0gKiAxLjIuYmV0YTEgICAgMjUgTm92IDIwMDIK
LSAqIC0gVXNlIHBvaW50ZXJzIGZvciBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCBjaGVja2lu
ZyBpbiBpbmZmYXN0LmMKLSAqIC0gUmVtb3ZlIGlucHV0IGFuZCBvdXRwdXQgY291bnRlcnMgaW4g
aW5mZmFzdC5jCi0gKiAtIENoYW5nZSBpbmZmYXN0LmMgZW50cnkgYW5kIGxvb3AgZnJvbSBhdmFp
bF9pbiA+PSA3IHRvID49IDYKLSAqIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IHNlY29uZCBieXRlIHB1
bGwgZnJvbSBsZW5ndGggZXh0cmEgaW4gaW5mZmFzdC5jCi0gKiAtIFVucm9sbCBkaXJlY3QgY29w
eSB0byB0aHJlZSBjb3BpZXMgcGVyIGxvb3AgaW4gaW5mZmFzdC5jCi0gKgotICogMS4yLmJldGEy
ICAgIDQgRGVjIDIwMDIKLSAqIC0gQ2hhbmdlIGV4dGVybmFsIHJvdXRpbmUgbmFtZXMgdG8gcmVk
dWNlIHBvdGVudGlhbCBjb25mbGljdHMKLSAqIC0gQ29ycmVjdCBmaWxlbmFtZSB0byBpbmZmaXhl
ZC5oIGZvciBmaXhlZCB0YWJsZXMgaW4gaW5mbGF0ZS5jCi0gKiAtIE1ha2UgaGJ1ZltdIHVuc2ln
bmVkIGNoYXIgdG8gbWF0Y2ggcGFyYW1ldGVyIHR5cGUgaW4gaW5mbGF0ZS5jCi0gKiAtIENoYW5n
ZSBzdHJtLT5uZXh0X291dFstc3RhdGUtPm9mZnNldF0gdG8gKihzdHJtLT5uZXh0X291dCAtIHN0
YXRlLT5vZmZzZXQpCi0gKiAgIHRvIGF2b2lkIG5lZ2F0aW9uIHByb2JsZW0gb24gQWxwaGFzICg2
NCBiaXQpIGluIGluZmxhdGUuYwotICoKLSAqIDEuMi5iZXRhMyAgICAyMiBEZWMgMjAwMgotICog
LSBBZGQgY29tbWVudHMgb24gc3RhdGUtPmJpdHMgYXNzZXJ0aW9uIGluIGluZmZhc3QuYwotICog
LSBBZGQgY29tbWVudHMgb24gb3AgZmllbGQgaW4gaW5mdHJlZXMuaAotICogLSBGaXggYnVnIGlu
IHJldXNlIG9mIGFsbG9jYXRlZCB3aW5kb3cgYWZ0ZXIgaW5mbGF0ZVJlc2V0KCkKLSAqIC0gUmVt
b3ZlIGJpdCBmaWVsZHMtLWJhY2sgdG8gYnl0ZSBzdHJ1Y3R1cmUgZm9yIHNwZWVkCi0gKiAtIFJl
bW92ZSBkaXN0YW5jZSBleHRyYSA9PSAwIGNoZWNrIGluIGluZmxhdGVfZmFzdCgpLS1vbmx5IGhl
bHBzIGZvciBsZW5ndGhzCi0gKiAtIENoYW5nZSBwb3N0LWluY3JlbWVudHMgdG8gcHJlLWluY3Jl
bWVudHMgaW4gaW5mbGF0ZV9mYXN0KCksIFBQQyBiaWFzZWQ/Ci0gKiAtIEFkZCBjb21waWxlIHRp
bWUgb3B0aW9uLCBQT1NUSU5DLCB0byB1c2UgcG9zdC1pbmNyZW1lbnRzIGluc3RlYWQgKEludGVs
PykKLSAqIC0gTWFrZSBNQVRDSCBjb3B5IGluIGluZmxhdGUoKSBtdWNoIGZhc3RlciBmb3Igd2hl
biBpbmZsYXRlX2Zhc3QoKSBub3QgdXNlZAotICogLSBVc2UgbG9jYWwgY29waWVzIG9mIHN0cmVh
bSBuZXh0IGFuZCBhdmFpbCB2YWx1ZXMsIGFzIHdlbGwgYXMgbG9jYWwgYml0Ci0gKiAgIGJ1ZmZl
ciBhbmQgYml0IGNvdW50IGluIGluZmxhdGUoKS0tZm9yIHNwZWVkIHdoZW4gaW5mbGF0ZV9mYXN0
KCkgbm90IHVzZWQKLSAqCi0gKiAxLjIuYmV0YTQgICAgMSBKYW4gMjAwMwotICogLSBTcGxpdCBw
dHIgLSAyNTcgc3RhdGVtZW50cyBpbiBpbmZsYXRlX3RhYmxlKCkgdG8gYXZvaWQgY29tcGlsZXIg
d2FybmluZ3MKLSAqIC0gTW92ZSBhIGNvbW1lbnQgb24gb3V0cHV0IGJ1ZmZlciBzaXplcyBmcm9t
IGluZmZhc3QuYyB0byBpbmZsYXRlLmMKLSAqIC0gQWRkIGNvbW1lbnRzIGluIGluZmZhc3QuYyB0
byBpbnRyb2R1Y2UgdGhlIGluZmxhdGVfZmFzdCgpIHJvdXRpbmUKLSAqIC0gUmVhcnJhbmdlIHdp
bmRvdyBjb3BpZXMgaW4gaW5mbGF0ZV9mYXN0KCkgZm9yIHNwZWVkIGFuZCBzaW1wbGlmaWNhdGlv
bgotICogLSBVbnJvbGwgbGFzdCBjb3B5IGZvciB3aW5kb3cgbWF0Y2ggaW4gaW5mbGF0ZV9mYXN0
KCkKLSAqIC0gVXNlIGxvY2FsIGNvcGllcyBvZiB3aW5kb3cgdmFyaWFibGVzIGluIGluZmxhdGVf
ZmFzdCgpIGZvciBzcGVlZAotICogLSBQdWxsIG91dCBjb21tb24gd3JpdGUgPT0gMCBjYXNlIGZv
ciBzcGVlZCBpbiBpbmZsYXRlX2Zhc3QoKQotICogLSBNYWtlIG9wIGFuZCBsZW4gaW4gaW5mbGF0
ZV9mYXN0KCkgdW5zaWduZWQgZm9yIGNvbnNpc3RlbmN5Ci0gKiAtIEFkZCBGQVIgdG8gbGNvZGUg
YW5kIGRjb2RlIGRlY2xhcmF0aW9ucyBpbiBpbmZsYXRlX2Zhc3QoKQotICogLSBTaW1wbGlmaWVk
IGJhZCBkaXN0YW5jZSBjaGVjayBpbiBpbmZsYXRlX2Zhc3QoKQotICogLSBBZGRlZCBpbmZsYXRl
QmFja0luaXQoKSwgaW5mbGF0ZUJhY2soKSwgYW5kIGluZmxhdGVCYWNrRW5kKCkgaW4gbmV3Ci0g
KiAgIHNvdXJjZSBmaWxlIGluZmJhY2suYyB0byBwcm92aWRlIGEgY2FsbC1iYWNrIGludGVyZmFj
ZSB0byBpbmZsYXRlIGZvcgotICogICBwcm9ncmFtcyBsaWtlIGd6aXAgYW5kIHVuemlwIC0tIHVz
ZXMgd2luZG93IGFzIG91dHB1dCBidWZmZXIgdG8gYXZvaWQKLSAqICAgd2luZG93IGNvcHlpbmcK
LSAqCi0gKiAxLjIuYmV0YTUgICAgMSBKYW4gMjAwMwotICogLSBJbXByb3ZlZCBpbmZsYXRlQmFj
aygpIGludGVyZmFjZSB0byBhbGxvdyB0aGUgY2FsbGVyIHRvIHByb3ZpZGUgaW5pdGlhbAotICog
ICBpbnB1dCBpbiBzdHJtLgotICogLSBGaXhlZCBzdG9yZWQgYmxvY2tzIGJ1ZyBpbiBpbmZsYXRl
QmFjaygpCi0gKgotICogMS4yLmJldGE2ICAgIDQgSmFuIDIwMDMKLSAqIC0gQWRkZWQgY29tbWVu
dHMgaW4gaW5mZmFzdC5jIG9uIGVmZmVjdGl2ZW5lc3Mgb2YgUE9TVElOQwotICogLSBUeXBlY2Fz
dGluZyBhbGwgYXJvdW5kIHRvIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncwotICogLSBDaGFuZ2Vk
IGxvb3BzIGZyb20gd2hpbGUgKDEpIG9yIGRvIHt9IHdoaWxlICgxKSB0byBmb3IgKDs7KSwgYWdh
aW4gdG8KLSAqICAgbWFrZSBjb21waWxlcnMgaGFwcHkKLSAqIC0gQ2hhbmdlZCB0eXBlIG9mIHdp
bmRvdyBpbiBpbmZsYXRlQmFja0luaXQoKSB0byB1bnNpZ25lZCBjaGFyICoKLSAqCi0gKiAxLjIu
YmV0YTcgICAgMjcgSmFuIDIwMDMKLSAqIC0gQ2hhbmdlZCBtYW55IHR5cGVzIHRvIHVuc2lnbmVk
IG9yIHVuc2lnbmVkIHNob3J0IHRvIGF2b2lkIHdhcm5pbmdzCi0gKiAtIEFkZGVkIGluZmxhdGVD
b3B5KCkgZnVuY3Rpb24KLSAqCi0gKiAxLjIuMCAgICAgICAgOSBNYXIgMjAwMwotICogLSBDaGFu
Z2VkIGluZmxhdGVCYWNrKCkgaW50ZXJmYWNlIHRvIHByb3ZpZGUgc2VwYXJhdGUgb3BhcXVlIGRl
c2NyaXB0b3JzCi0gKiAgIGZvciB0aGUgaW4oKSBhbmQgb3V0KCkgZnVuY3Rpb25zCi0gKiAtIENo
YW5nZWQgaW5mbGF0ZUJhY2soKSBhcmd1bWVudCBhbmQgaW5fZnVuYyB0eXBlZGVmIHRvIHN3YXAg
dGhlIGxlbmd0aAotICogICBhbmQgYnVmZmVyIGFkZHJlc3MgcmV0dXJuIHZhbHVlcyBmb3IgdGhl
IGlucHV0IGZ1bmN0aW9uCi0gKiAtIENoZWNrIG5leHRfaW4gYW5kIG5leHRfb3V0IGZvciBaX05V
TEwgb24gZW50cnkgdG8gaW5mbGF0ZSgpCi0gKgotICogVGhlIGhpc3RvcnkgZm9yIHZlcnNpb25z
IGFmdGVyIDEuMi4wIGFyZSBpbiBDaGFuZ2VMb2cgaW4gemxpYiBkaXN0cmlidXRpb24uCi0gKi8K
LQotI2luY2x1ZGUgInp1dGlsLmgiCi0jaW5jbHVkZSAiaW5mdHJlZXMuaCIKLSNpbmNsdWRlICJp
bmZsYXRlLmgiCi0jaW5jbHVkZSAiaW5mZmFzdC5oIgotCi0jaWZkZWYgTUFLRUZJWEVECi0jICBp
Zm5kZWYgQlVJTERGSVhFRAotIyAgICBkZWZpbmUgQlVJTERGSVhFRAotIyAgZW5kaWYKLSNlbmRp
ZgotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1sb2NhbCB2b2lkIGZpeGVkdGFibGVzIE9G
KChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlKSk7Ci1sb2NhbCBpbnQgdXBkYXRld2lu
ZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgdW5zaWduZWQgb3V0KSk7Ci0jaWZkZWYgQlVJTERGSVhF
RAotICAgdm9pZCBtYWtlZml4ZWQgT0YoKHZvaWQpKTsKLSNlbmRpZgotbG9jYWwgdW5zaWduZWQg
c3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuKSk7Ci0KLWludCBa
RVhQT1JUIGluZmxhdGVSZXNldChzdHJtKQotel9zdHJlYW1wIHN0cm07Ci17Ci0gICAgc3RydWN0
IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLQotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBz
dHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdGF0ZSA9
IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKLSAgICBzdHJtLT50b3Rh
bF9pbiA9IHN0cm0tPnRvdGFsX291dCA9IHN0YXRlLT50b3RhbCA9IDA7Ci0gICAgc3RybS0+bXNn
ID0gWl9OVUxMOwotICAgIHN0cm0tPmFkbGVyID0gMTsgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxs
LWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KLSAgICBzdGF0ZS0+bW9kZSA9IEhFQUQ7Ci0g
ICAgc3RhdGUtPmxhc3QgPSAwOwotICAgIHN0YXRlLT5oYXZlZGljdCA9IDA7Ci0gICAgc3RhdGUt
PmRtYXggPSAzMjc2OFU7Ci0gICAgc3RhdGUtPmhlYWQgPSBaX05VTEw7Ci0gICAgc3RhdGUtPndz
aXplID0gMDsKLSAgICBzdGF0ZS0+d2hhdmUgPSAwOwotICAgIHN0YXRlLT53cml0ZSA9IDA7Ci0g
ICAgc3RhdGUtPmhvbGQgPSAwOwotICAgIHN0YXRlLT5iaXRzID0gMDsKLSAgICBzdGF0ZS0+bGVu
Y29kZSA9IHN0YXRlLT5kaXN0Y29kZSA9IHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAg
IFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogcmVzZXRcbiIpKTsKLSAgICByZXR1cm4gWl9PSzsK
LX0KLQotaW50IFpFWFBPUlQgaW5mbGF0ZVByaW1lKHN0cm0sIGJpdHMsIHZhbHVlKQotel9zdHJl
YW1wIHN0cm07Ci1pbnQgYml0czsKLWludCB2YWx1ZTsKLXsKLSAgICBzdHJ1Y3QgaW5mbGF0ZV9z
dGF0ZSBGQVIgKnN0YXRlOwotCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRl
ID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0YXRlID0gKHN0cnVjdCBp
bmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwotICAgIGlmIChiaXRzID4gMTYgfHwgc3Rh
dGUtPmJpdHMgKyBiaXRzID4gMzIpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICB2YWx1ZSAm
PSAoMUwgPDwgYml0cykgLSAxOwotICAgIHN0YXRlLT5ob2xkICs9IHZhbHVlIDw8IHN0YXRlLT5i
aXRzOwotICAgIHN0YXRlLT5iaXRzICs9IGJpdHM7Ci0gICAgcmV0dXJuIFpfT0s7Ci19Ci0KLWlu
dCBaRVhQT1JUIGluZmxhdGVJbml0Ml8oc3RybSwgd2luZG93Qml0cywgdmVyc2lvbiwgc3RyZWFt
X3NpemUpCi16X3N0cmVhbXAgc3RybTsKLWludCB3aW5kb3dCaXRzOwotY29uc3QgY2hhciAqdmVy
c2lvbjsKLWludCBzdHJlYW1fc2l6ZTsKLXsKLSAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIg
KnN0YXRlOwotCi0gICAgaWYgKHZlcnNpb24gPT0gWl9OVUxMIHx8IHZlcnNpb25bMF0gIT0gWkxJ
Ql9WRVJTSU9OWzBdIHx8Ci0gICAgICAgIHN0cmVhbV9zaXplICE9IChpbnQpKHNpemVvZih6X3N0
cmVhbSkpKQotICAgICAgICByZXR1cm4gWl9WRVJTSU9OX0VSUk9SOwotICAgIGlmIChzdHJtID09
IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsg
ICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCi0gICAgaWYg
KHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7Ci0gICAgICAgIHN0cm0tPnphbGxvYyA9
IHpjYWxsb2M7Ci0gICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKLSAgICB9Ci0gICAg
aWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7Ci0g
ICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopCi0gICAgICAgICAgICBaQUxM
T0Moc3RybSwgMSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7Ci0gICAgaWYgKHN0YXRl
ID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwotICAgIFRyYWNldigoc3RkZXJyLCAiaW5m
bGF0ZTogYWxsb2NhdGVkXG4iKSk7Ci0gICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFs
X3N0YXRlIEZBUiAqKXN0YXRlOwotICAgIGlmICh3aW5kb3dCaXRzIDwgMCkgewotICAgICAgICBz
dGF0ZS0+d3JhcCA9IDA7Ci0gICAgICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKLSAgICB9
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlLT53cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAx
OwotI2lmZGVmIEdVTlpJUAotICAgICAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB3aW5kb3dCaXRz
ICY9IDE1OwotI2VuZGlmCi0gICAgfQotICAgIGlmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dC
aXRzID4gMTUpIHsKLSAgICAgICAgWkZSRUUoc3RybSwgc3RhdGUpOwotICAgICAgICBzdHJtLT5z
dGF0ZSA9IFpfTlVMTDsKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIH0KLSAg
ICBzdGF0ZS0+d2JpdHMgPSAodW5zaWduZWQpd2luZG93Qml0czsKLSAgICBzdGF0ZS0+d2luZG93
ID0gWl9OVUxMOwotICAgIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7Ci19Ci0KLWludCBaRVhQ
T1JUIGluZmxhdGVJbml0XyhzdHJtLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKLXpfc3RyZWFtcCBz
dHJtOwotY29uc3QgY2hhciAqdmVyc2lvbjsKLWludCBzdHJlYW1fc2l6ZTsKLXsKLSAgICByZXR1
cm4gaW5mbGF0ZUluaXQyXyhzdHJtLCBERUZfV0JJVFMsIHZlcnNpb24sIHN0cmVhbV9zaXplKTsK
LX0KLQotLyoKLSAgIFJldHVybiBzdGF0ZSB3aXRoIGxlbmd0aCBhbmQgZGlzdGFuY2UgZGVjb2Rp
bmcgdGFibGVzIGFuZCBpbmRleCBzaXplcyBzZXQgdG8KLSAgIGZpeGVkIGNvZGUgZGVjb2Rpbmcu
ICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC4KLSAg
IElmIEJVSUxERklYRUQgaXMgZGVmaW5lZCwgdGhlbiBpbnN0ZWFkIHRoaXMgcm91dGluZSBidWls
ZHMgdGhlIHRhYmxlcyB0aGUKLSAgIGZpcnN0IHRpbWUgaXQncyBjYWxsZWQsIGFuZCByZXR1cm5z
IHRob3NlIHRhYmxlcyB0aGUgZmlyc3QgdGltZSBhbmQKLSAgIHRoZXJlYWZ0ZXIuICBUaGlzIHJl
ZHVjZXMgdGhlIHNpemUgb2YgdGhlIGNvZGUgYnkgYWJvdXQgMksgYnl0ZXMsIGluCi0gICBleGNo
YW5nZSBmb3IgYSBsaXR0bGUgZXhlY3V0aW9uIHRpbWUuICBIb3dldmVyLCBCVUlMREZJWEVEIHNo
b3VsZCBub3QgYmUKLSAgIHVzZWQgZm9yIHRocmVhZGVkIGFwcGxpY2F0aW9ucywgc2luY2UgdGhl
IHJld3JpdGluZyBvZiB0aGUgdGFibGVzIGFuZCB2aXJnaW4KLSAgIG1heSBub3QgYmUgdGhyZWFk
LXNhZmUuCi0gKi8KLWxvY2FsIHZvaWQgZml4ZWR0YWJsZXMoc3RhdGUpCi1zdHJ1Y3QgaW5mbGF0
ZV9zdGF0ZSBGQVIgKnN0YXRlOwotewotI2lmZGVmIEJVSUxERklYRUQKLSAgICBzdGF0aWMgaW50
IHZpcmdpbiA9IDE7Ci0gICAgc3RhdGljIGNvZGUgKmxlbmZpeCwgKmRpc3RmaXg7Ci0gICAgc3Rh
dGljIGNvZGUgZml4ZWRbNTQ0XTsKLQotICAgIC8qIGJ1aWxkIGZpeGVkIGh1ZmZtYW4gdGFibGVz
IGlmIGZpcnN0IGNhbGwgKG1heSBub3QgYmUgdGhyZWFkIHNhZmUpICovCi0gICAgaWYgKHZpcmdp
bikgewotICAgICAgICB1bnNpZ25lZCBzeW0sIGJpdHM7Ci0gICAgICAgIHN0YXRpYyBjb2RlICpu
ZXh0OwotCi0gICAgICAgIC8qIGxpdGVyYWwvbGVuZ3RoIHRhYmxlICovCi0gICAgICAgIHN5bSA9
IDA7Ci0gICAgICAgIHdoaWxlIChzeW0gPCAxNDQpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDg7Ci0g
ICAgICAgIHdoaWxlIChzeW0gPCAyNTYpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDk7Ci0gICAgICAg
IHdoaWxlIChzeW0gPCAyODApIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDc7Ci0gICAgICAgIHdoaWxl
IChzeW0gPCAyODgpIHN0YXRlLT5sZW5zW3N5bSsrXSA9IDg7Ci0gICAgICAgIG5leHQgPSBmaXhl
ZDsKLSAgICAgICAgbGVuZml4ID0gbmV4dDsKLSAgICAgICAgYml0cyA9IDk7Ci0gICAgICAgIGlu
ZmxhdGVfdGFibGUoTEVOUywgc3RhdGUtPmxlbnMsIDI4OCwgJihuZXh0KSwgJihiaXRzKSwgc3Rh
dGUtPndvcmspOwotCi0gICAgICAgIC8qIGRpc3RhbmNlIHRhYmxlICovCi0gICAgICAgIHN5bSA9
IDA7Ci0gICAgICAgIHdoaWxlIChzeW0gPCAzMikgc3RhdGUtPmxlbnNbc3ltKytdID0gNTsKLSAg
ICAgICAgZGlzdGZpeCA9IG5leHQ7Ci0gICAgICAgIGJpdHMgPSA1OwotICAgICAgICBpbmZsYXRl
X3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucywgMzIsICYobmV4dCksICYoYml0cyksIHN0YXRlLT53
b3JrKTsKLQotICAgICAgICAvKiBkbyB0aGlzIGp1c3Qgb25jZSAqLwotICAgICAgICB2aXJnaW4g
PSAwOwotICAgIH0KLSNlbHNlIC8qICFCVUlMREZJWEVEICovCi0jICAgaW5jbHVkZSAiaW5mZml4
ZWQuaCIKLSNlbmRpZiAvKiBCVUlMREZJWEVEICovCi0gICAgc3RhdGUtPmxlbmNvZGUgPSBsZW5m
aXg7Ci0gICAgc3RhdGUtPmxlbmJpdHMgPSA5OwotICAgIHN0YXRlLT5kaXN0Y29kZSA9IGRpc3Rm
aXg7Ci0gICAgc3RhdGUtPmRpc3RiaXRzID0gNTsKLX0KLQotI2lmZGVmIE1BS0VGSVhFRAotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qCi0gICBXcml0ZSBvdXQgdGhlIGluZmZpeGVkLmggdGhhdCBp
cyAjaW5jbHVkZSdkIGFib3ZlLiAgRGVmaW5pbmcgTUFLRUZJWEVEIGFsc28KLSAgIGRlZmluZXMg
QlVJTERGSVhFRCwgc28gdGhlIHRhYmxlcyBhcmUgYnVpbHQgb24gdGhlIGZseS4gIG1ha2VmaXhl
ZCgpIHdyaXRlcwotICAgdGhvc2UgdGFibGVzIHRvIHN0ZG91dCwgd2hpY2ggd291bGQgYmUgcGlw
ZWQgdG8gaW5mZml4ZWQuaC4gIEEgc21hbGwgcHJvZ3JhbQotICAgY2FuIHNpbXBseSBjYWxsIG1h
a2VmaXhlZCB0byBkbyB0aGlzOgotCi0gICAgdm9pZCBtYWtlZml4ZWQodm9pZCk7Ci0KLSAgICBp
bnQgbWFpbih2b2lkKQotICAgIHsKLSAgICAgICAgbWFrZWZpeGVkKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgVGhlbiB0aGF0IGNhbiBiZSBsaW5rZWQgd2l0aCB6bGliIGJ1aWx0
IHdpdGggTUFLRUZJWEVEIGRlZmluZWQgYW5kIHJ1bjoKLQotICAgIGEub3V0ID4gaW5mZml4ZWQu
aAotICovCi12b2lkIG1ha2VmaXhlZCgpCi17Ci0gICAgdW5zaWduZWQgbG93LCBzaXplOwotICAg
IHN0cnVjdCBpbmZsYXRlX3N0YXRlIHN0YXRlOwotCi0gICAgZml4ZWR0YWJsZXMoJnN0YXRlKTsK
LSAgICBwdXRzKCIgICAgLyogaW5mZml4ZWQuaCAtLSB0YWJsZSBmb3IgZGVjb2RpbmcgZml4ZWQg
Y29kZXMiKTsKLSAgICBwdXRzKCIgICAgICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbWFr
ZWZpeGVkKCkuIik7Ci0gICAgcHV0cygiICAgICAqLyIpOwotICAgIHB1dHMoIiIpOwotICAgIHB1
dHMoIiAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBw
bGljYXRpb25zLiIpOwotICAgIHB1dHMoIiAgICAgICBJdCBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzIik7Ci0gICAgcHV0cygiICAgICAgIHN1Ympl
Y3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4iKTsKLSAg
ICBwdXRzKCIgICAgICovIik7Ci0gICAgcHV0cygiIik7Ci0gICAgc2l6ZSA9IDFVIDw8IDk7Ci0g
ICAgcHJpbnRmKCIgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WyV1XSA9IHsiLCBzaXplKTsK
LSAgICBsb3cgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAw
KSBwcmludGYoIlxuICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3Rh
dGUubGVuY29kZVtsb3ddLm9wLCBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAg
ICAgIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwotICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkg
YnJlYWs7Ci0gICAgICAgIHB1dGNoYXIoJywnKTsKLSAgICB9Ci0gICAgcHV0cygiXG4gICAgfTsi
KTsKLSAgICBzaXplID0gMVUgPDwgNTsKLSAgICBwcmludGYoIlxuICAgIHN0YXRpYyBjb25zdCBj
b2RlIGRpc3RmaXhbJXVdID0geyIsIHNpemUpOwotICAgIGxvdyA9IDA7Ci0gICAgZm9yICg7Oykg
ewotICAgICAgICBpZiAoKGxvdyAlIDYpID09IDApIHByaW50ZigiXG4gICAgICAgICIpOwotICAg
ICAgICBwcmludGYoInsldSwldSwlZH0iLCBzdGF0ZS5kaXN0Y29kZVtsb3ddLm9wLCBzdGF0ZS5k
aXN0Y29kZVtsb3ddLmJpdHMsCi0gICAgICAgICAgICAgICBzdGF0ZS5kaXN0Y29kZVtsb3ddLnZh
bCk7Ci0gICAgICAgIGlmICgrK2xvdyA9PSBzaXplKSBicmVhazsKLSAgICAgICAgcHV0Y2hhcign
LCcpOwotICAgIH0KLSAgICBwdXRzKCJcbiAgICB9OyIpOwotfQotI2VuZGlmIC8qIE1BS0VGSVhF
RCAqLwotCi0vKgotICAgVXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdCB3c2l6ZSAobm9y
bWFsbHkgMzJLKSBieXRlcyB3cml0dGVuIGJlZm9yZQotICAgcmV0dXJuaW5nLiAgSWYgd2luZG93
IGRvZXMgbm90IGV4aXN0IHlldCwgY3JlYXRlIGl0LiAgVGhpcyBpcyBvbmx5IGNhbGxlZAotICAg
d2hlbiBhIHdpbmRvdyBpcyBhbHJlYWR5IGluIHVzZSwgb3Igd2hlbiBvdXRwdXQgaGFzIGJlZW4g
d3JpdHRlbiBkdXJpbmcgdGhpcwotICAgaW5mbGF0ZSBjYWxsLCBidXQgdGhlIGVuZCBvZiB0aGUg
ZGVmbGF0ZSBzdHJlYW0gaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LgotICAgSXQgaXMgYWxzbyBj
YWxsZWQgdG8gY3JlYXRlIGEgd2luZG93IGZvciBkaWN0aW9uYXJ5IGRhdGEgd2hlbiBhIGRpY3Rp
b25hcnkKLSAgIGlzIGxvYWRlZC4KLQotICAgUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdl
ciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxkIHByb3ZpZGUgYSBzcGVlZAotICAgYWR2YW50
YWdlLCBzaW5jZSBvbmx5IHRoZSBsYXN0IDMySyBvZiBvdXRwdXQgaXMgY29waWVkIHRvIHRoZSBz
bGlkaW5nIHdpbmRvdwotICAgdXBvbiByZXR1cm4gZnJvbSBpbmZsYXRlKCksIGFuZCBzaW5jZSBh
bGwgZGlzdGFuY2VzIGFmdGVyIHRoZSBmaXJzdCAzMksgb2YKLSAgIG91dHB1dCB3aWxsIGZhbGwg
aW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rl
ci4KLSAgIFRoZSBhZHZhbnRhZ2UgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUg
cHJvY2Vzc29yJ3MgZGF0YSBjYWNoZXMuCi0gKi8KLWxvY2FsIGludCB1cGRhdGV3aW5kb3coc3Ry
bSwgb3V0KQotel9zdHJlYW1wIHN0cm07Ci11bnNpZ25lZCBvdXQ7Ci17Ci0gICAgc3RydWN0IGlu
ZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OwotCi0gICAg
c3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0KLSAgICAv
KiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUg
d2luZG93ICovCi0gICAgaWYgKHN0YXRlLT53aW5kb3cgPT0gWl9OVUxMKSB7Ci0gICAgICAgIHN0
YXRlLT53aW5kb3cgPSAodW5zaWduZWQgY2hhciBGQVIgKikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFpBTExPQyhzdHJtLCAxVSA8PCBzdGF0ZS0+d2JpdHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsKLSAgICAgICAgaWYgKHN0YXRlLT53
aW5kb3cgPT0gWl9OVUxMKSByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBpZiB3aW5kb3cgbm90
IGluIHVzZSB5ZXQsIGluaXRpYWxpemUgKi8KLSAgICBpZiAoc3RhdGUtPndzaXplID09IDApIHsK
LSAgICAgICAgc3RhdGUtPndzaXplID0gMVUgPDwgc3RhdGUtPndiaXRzOwotICAgICAgICBzdGF0
ZS0+d3JpdGUgPSAwOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSAwOwotICAgIH0KLQotICAgIC8q
IGNvcHkgc3RhdGUtPndzaXplIG9yIGxlc3Mgb3V0cHV0IGJ5dGVzIGludG8gdGhlIGNpcmN1bGFy
IHdpbmRvdyAqLwotICAgIGNvcHkgPSBvdXQgLSBzdHJtLT5hdmFpbF9vdXQ7Ci0gICAgaWYgKGNv
cHkgPj0gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3Ry
bS0+bmV4dF9vdXQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7Ci0gICAgICAgIHN0YXRl
LT53cml0ZSA9IDA7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKLSAgICB9
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBzdGF0ZS0+d3JpdGU7
Ci0gICAgICAgIGlmIChkaXN0ID4gY29weSkgZGlzdCA9IGNvcHk7Ci0gICAgICAgIHptZW1jcHko
c3RhdGUtPndpbmRvdyArIHN0YXRlLT53cml0ZSwgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBkaXN0
KTsKLSAgICAgICAgY29weSAtPSBkaXN0OwotICAgICAgICBpZiAoY29weSkgewotICAgICAgICAg
ICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGNvcHkpOwot
ICAgICAgICAgICAgc3RhdGUtPndyaXRlID0gY29weTsKLSAgICAgICAgICAgIHN0YXRlLT53aGF2
ZSA9IHN0YXRlLT53c2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHN0YXRlLT53cml0ZSArPSBkaXN0OwotICAgICAgICAgICAgaWYgKHN0YXRlLT53cml0ZSA9PSBz
dGF0ZS0+d3NpemUpIHN0YXRlLT53cml0ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPndo
YXZlIDwgc3RhdGUtPndzaXplKSBzdGF0ZS0+d2hhdmUgKz0gZGlzdDsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogTWFjcm9zIGZvciBpbmZsYXRlKCk6ICovCi0KLS8q
IGNoZWNrIGZ1bmN0aW9uIHRvIHVzZSBhZGxlcjMyKCkgZm9yIHpsaWIgb3IgY3JjMzIoKSBmb3Ig
Z3ppcCAqLwotI2lmZGVmIEdVTlpJUAotIyAgZGVmaW5lIFVQREFURShjaGVjaywgYnVmLCBsZW4p
IFwKLSAgICAoc3RhdGUtPmZsYWdzID8gY3JjMzIoY2hlY2ssIGJ1ZiwgbGVuKSA6IGFkbGVyMzIo
Y2hlY2ssIGJ1ZiwgbGVuKSkKLSNlbHNlCi0jICBkZWZpbmUgVVBEQVRFKGNoZWNrLCBidWYsIGxl
bikgYWRsZXIzMihjaGVjaywgYnVmLCBsZW4pCi0jZW5kaWYKLQotLyogY2hlY2sgbWFjcm9zIGZv
ciBoZWFkZXIgY3JjICovCi0jaWZkZWYgR1VOWklQCi0jICBkZWZpbmUgQ1JDMihjaGVjaywgd29y
ZCkgXAotICAgIGRvIHsgXAotICAgICAgICBoYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKHdvcmQp
OyBcCi0gICAgICAgIGhidWZbMV0gPSAodW5zaWduZWQgY2hhcikoKHdvcmQpID4+IDgpOyBcCi0g
ICAgICAgIGNoZWNrID0gY3JjMzIoY2hlY2ssIGhidWYsIDIpOyBcCi0gICAgfSB3aGlsZSAoMCkK
LQotIyAgZGVmaW5lIENSQzQoY2hlY2ssIHdvcmQpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgaGJ1
ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh3b3JkKTsgXAotICAgICAgICBoYnVmWzFdID0gKHVuc2ln
bmVkIGNoYXIpKCh3b3JkKSA+PiA4KTsgXAotICAgICAgICBoYnVmWzJdID0gKHVuc2lnbmVkIGNo
YXIpKCh3b3JkKSA+PiAxNik7IFwKLSAgICAgICAgaGJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSgo
d29yZCkgPj4gMjQpOyBcCi0gICAgICAgIGNoZWNrID0gY3JjMzIoY2hlY2ssIGhidWYsIDQpOyBc
Ci0gICAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKiBMb2FkIHJlZ2lzdGVycyB3aXRoIHN0YXRl
IGluIGluZmxhdGUoKSBmb3Igc3BlZWQgKi8KLSNkZWZpbmUgTE9BRCgpIFwKLSAgICBkbyB7IFwK
LSAgICAgICAgcHV0ID0gc3RybS0+bmV4dF9vdXQ7IFwKLSAgICAgICAgbGVmdCA9IHN0cm0tPmF2
YWlsX291dDsgXAotICAgICAgICBuZXh0ID0gc3RybS0+bmV4dF9pbjsgXAotICAgICAgICBoYXZl
ID0gc3RybS0+YXZhaWxfaW47IFwKLSAgICAgICAgaG9sZCA9IHN0YXRlLT5ob2xkOyBcCi0gICAg
ICAgIGJpdHMgPSBzdGF0ZS0+Yml0czsgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIFJlc3RvcmUg
c3RhdGUgZnJvbSByZWdpc3RlcnMgaW4gaW5mbGF0ZSgpICovCi0jZGVmaW5lIFJFU1RPUkUoKSBc
Ci0gICAgZG8geyBcCi0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gcHV0OyBcCi0gICAgICAgIHN0
cm0tPmF2YWlsX291dCA9IGxlZnQ7IFwKLSAgICAgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7IFwK
LSAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBoYXZlOyBcCi0gICAgICAgIHN0YXRlLT5ob2xkID0g
aG9sZDsgXAotICAgICAgICBzdGF0ZS0+Yml0cyA9IGJpdHM7IFwKLSAgICB9IHdoaWxlICgwKQot
Ci0vKiBDbGVhciB0aGUgaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCi0jZGVmaW5lIElOSVRCSVRT
KCkgXAotICAgIGRvIHsgXAotICAgICAgICBob2xkID0gMDsgXAotICAgICAgICBiaXRzID0gMDsg
XAotICAgIH0gd2hpbGUgKDApCi0KLS8qIEdldCBhIGJ5dGUgb2YgaW5wdXQgaW50byB0aGUgYml0
IGFjY3VtdWxhdG9yLCBvciByZXR1cm4gZnJvbSBpbmZsYXRlKCkKLSAgIGlmIHRoZXJlIGlzIG5v
IGlucHV0IGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgUFVMTEJZVEUoKSBcCi0gICAgZG8geyBcCi0g
ICAgICAgIGlmIChoYXZlID09IDApIGdvdG8gaW5mX2xlYXZlOyBcCi0gICAgICAgIGhhdmUtLTsg
XAotICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqbmV4dCsrKSA8PCBiaXRzOyBcCi0g
ICAgICAgIGJpdHMgKz0gODsgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIEFzc3VyZSB0aGF0IHRo
ZXJlIGFyZSBhdCBsZWFzdCBuIGJpdHMgaW4gdGhlIGJpdCBhY2N1bXVsYXRvci4gIElmIHRoZXJl
IGlzCi0gICBub3QgZW5vdWdoIGF2YWlsYWJsZSBpbnB1dCB0byBkbyB0aGF0LCB0aGVuIHJldHVy
biBmcm9tIGluZmxhdGUoKS4gKi8KLSNkZWZpbmUgTkVFREJJVFMobikgXAotICAgIGRvIHsgXAot
ICAgICAgICB3aGlsZSAoYml0cyA8ICh1bnNpZ25lZCkobikpIFwKLSAgICAgICAgICAgIFBVTExC
WVRFKCk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXR1cm4gdGhlIGxvdyBuIGJpdHMgb2Yg
dGhlIGJpdCBhY2N1bXVsYXRvciAobiA8IDE2KSAqLwotI2RlZmluZSBCSVRTKG4pIFwKLSAgICAo
KHVuc2lnbmVkKWhvbGQgJiAoKDFVIDw8IChuKSkgLSAxKSkKLQotLyogUmVtb3ZlIG4gYml0cyBm
cm9tIHRoZSBiaXQgYWNjdW11bGF0b3IgKi8KLSNkZWZpbmUgRFJPUEJJVFMobikgXAotICAgIGRv
IHsgXAotICAgICAgICBob2xkID4+PSAobik7IFwKLSAgICAgICAgYml0cyAtPSAodW5zaWduZWQp
KG4pOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotLyogUmVtb3ZlIHplcm8gdG8gc2V2ZW4gYml0cyBh
cyBuZWVkZWQgdG8gZ28gdG8gYSBieXRlIGJvdW5kYXJ5ICovCi0jZGVmaW5lIEJZVEVCSVRTKCkg
XAotICAgIGRvIHsgXAotICAgICAgICBob2xkID4+PSBiaXRzICYgNzsgXAotICAgICAgICBiaXRz
IC09IGJpdHMgJiA3OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotLyogUmV2ZXJzZSB0aGUgYnl0ZXMg
aW4gYSAzMi1iaXQgdmFsdWUgKi8KLSNkZWZpbmUgUkVWRVJTRShxKSBcCi0gICAgKCgoKHEpID4+
IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAotICAgICAoKChxKSAmIDB4
ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKLQotLyoKLSAgIGluZmxhdGUoKSB1
c2VzIGEgc3RhdGUgbWFjaGluZSB0byBwcm9jZXNzIGFzIG11Y2ggaW5wdXQgZGF0YSBhbmQgZ2Vu
ZXJhdGUgYXMKLSAgIG11Y2ggb3V0cHV0IGRhdGEgYXMgcG9zc2libGUgYmVmb3JlIHJldHVybmlu
Zy4gIFRoZSBzdGF0ZSBtYWNoaW5lIGlzCi0gICBzdHJ1Y3R1cmVkIHJvdWdobHkgYXMgZm9sbG93
czoKLQotICAgIGZvciAoOzspIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAuLi4KLSAgICBjYXNlIFNU
QVRFbjoKLSAgICAgICAgaWYgKG5vdCBlbm91Z2ggaW5wdXQgZGF0YSBvciBvdXRwdXQgc3BhY2Ug
dG8gbWFrZSBwcm9ncmVzcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLi4uIG1ha2Ug
cHJvZ3Jlc3MgLi4uCi0gICAgICAgIHN0YXRlID0gU1RBVEVtOwotICAgICAgICBicmVhazsKLSAg
ICAuLi4KLSAgICB9Ci0KLSAgIHNvIHdoZW4gaW5mbGF0ZSgpIGlzIGNhbGxlZCBhZ2FpbiwgdGhl
IHNhbWUgY2FzZSBpcyBhdHRlbXB0ZWQgYWdhaW4sIGFuZAotICAgaWYgdGhlIGFwcHJvcHJpYXRl
IHJlc291cmNlcyBhcmUgcHJvdmlkZWQsIHRoZSBtYWNoaW5lIHByb2NlZWRzIHRvIHRoZQotICAg
bmV4dCBzdGF0ZS4gIFRoZSBORUVEQklUUygpIG1hY3JvIGlzIHVzdWFsbHkgdGhlIHdheSB0aGUg
c3RhdGUgZXZhbHVhdGVzCi0gICB3aGV0aGVyIGl0IGNhbiBwcm9jZWVkIG9yIHNob3VsZCByZXR1
cm4uICBORUVEQklUUygpIGRvZXMgdGhlIHJldHVybiBpZgotICAgdGhlIHJlcXVlc3RlZCBiaXRz
IGFyZSBub3QgYXZhaWxhYmxlLiAgVGhlIHR5cGljYWwgdXNlIG9mIHRoZSBCSVRTIG1hY3Jvcwot
ICAgaXM6Ci0KLSAgICAgICAgTkVFREJJVFMobik7Ci0gICAgICAgIC4uLiBkbyBzb21ldGhpbmcg
d2l0aCBCSVRTKG4pIC4uLgotICAgICAgICBEUk9QQklUUyhuKTsKLQotICAgd2hlcmUgTkVFREJJ
VFMobikgZWl0aGVyIHJldHVybnMgZnJvbSBpbmZsYXRlKCkgaWYgdGhlcmUgaXNuJ3QgZW5vdWdo
Ci0gICBpbnB1dCBsZWZ0IHRvIGxvYWQgbiBiaXRzIGludG8gdGhlIGFjY3VtdWxhdG9yLCBvciBp
dCBjb250aW51ZXMuICBCSVRTKG4pCi0gICBnaXZlcyB0aGUgbG93IG4gYml0cyBpbiB0aGUgYWNj
dW11bGF0b3IuICBXaGVuIGRvbmUsIERST1BCSVRTKG4pIGRyb3BzCi0gICB0aGUgbG93IG4gYml0
cyBvZmYgdGhlIGFjY3VtdWxhdG9yLiAgSU5JVEJJVFMoKSBjbGVhcnMgdGhlIGFjY3VtdWxhdG9y
Ci0gICBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBiaXRzIHRvIHplcm8uICBCWVRF
QklUUygpIGRpc2NhcmRzIGp1c3QKLSAgIGVub3VnaCBiaXRzIHRvIHB1dCB0aGUgYWNjdW11bGF0
b3Igb24gYSBieXRlIGJvdW5kYXJ5LiAgQWZ0ZXIgQllURUJJVFMoKQotICAgYW5kIGEgTkVFREJJ
VFMoOCksIHRoZW4gQklUUyg4KSB3b3VsZCByZXR1cm4gdGhlIG5leHQgYnl0ZSBpbiB0aGUgc3Ry
ZWFtLgotCi0gICBORUVEQklUUyhuKSB1c2VzIFBVTExCWVRFKCkgdG8gZ2V0IGFuIGF2YWlsYWJs
ZSBieXRlIG9mIGlucHV0LCBvciB0byByZXR1cm4KLSAgIGlmIHRoZXJlIGlzIG5vIGlucHV0IGF2
YWlsYWJsZS4gIFRoZSBkZWNvZGluZyBvZiB2YXJpYWJsZSBsZW5ndGggY29kZXMgdXNlcwotICAg
UFVMTEJZVEUoKSBkaXJlY3RseSBpbiBvcmRlciB0byBwdWxsIGp1c3QgZW5vdWdoIGJ5dGVzIHRv
IGRlY29kZSB0aGUgbmV4dAotICAgY29kZSwgYW5kIG5vIG1vcmUuCi0KLSAgIFNvbWUgc3RhdGVz
IGxvb3AgdW50aWwgdGhleSBnZXQgZW5vdWdoIGlucHV0LCBtYWtpbmcgc3VyZSB0aGF0IGVub3Vn
aAotICAgc3RhdGUgaW5mb3JtYXRpb24gaXMgbWFpbnRhaW5lZCB0byBjb250aW51ZSB0aGUgbG9v
cCB3aGVyZSBpdCBsZWZ0IG9mZgotICAgaWYgTkVFREJJVFMoKSByZXR1cm5zIGluIHRoZSBsb29w
LiAgRm9yIGV4YW1wbGUsIHdhbnQsIG5lZWQsIGFuZCBrZWVwCi0gICB3b3VsZCBhbGwgaGF2ZSB0
byBhY3R1YWxseSBiZSBwYXJ0IG9mIHRoZSBzYXZlZCBzdGF0ZSBpbiBjYXNlIE5FRURCSVRTKCkK
LSAgIHJldHVybnM6Ci0KLSAgICBjYXNlIFNUQVRFdzoKLSAgICAgICAgd2hpbGUgKHdhbnQgPCBu
ZWVkKSB7Ci0gICAgICAgICAgICBORUVEQklUUyhuKTsKLSAgICAgICAgICAgIGtlZXBbd2FudCsr
XSA9IEJJVFMobik7Ci0gICAgICAgICAgICBEUk9QQklUUyhuKTsKLSAgICAgICAgfQotICAgICAg
ICBzdGF0ZSA9IFNUQVRFeDsKLSAgICBjYXNlIFNUQVRFeDoKLQotICAgQXMgc2hvd24gYWJvdmUs
IGlmIHRoZSBuZXh0IHN0YXRlIGlzIGFsc28gdGhlIG5leHQgY2FzZSwgdGhlbiB0aGUgYnJlYWsK
LSAgIGlzIG9taXR0ZWQuCi0KLSAgIEEgc3RhdGUgbWF5IGFsc28gcmV0dXJuIGlmIHRoZXJlIGlz
IG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGF2YWlsYWJsZSB0bwotICAgY29tcGxldGUgdGhhdCBz
dGF0ZS4gIFRob3NlIHN0YXRlcyBhcmUgY29weWluZyBzdG9yZWQgZGF0YSwgd3JpdGluZyBhCi0g
ICBsaXRlcmFsIGJ5dGUsIGFuZCBjb3B5aW5nIGEgbWF0Y2hpbmcgc3RyaW5nLgotCi0gICBXaGVu
IHJldHVybmluZywgYSAiZ290byBpbmZfbGVhdmUiIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSB0b3Rh
bCBjb3VudGVycywKLSAgIHVwZGF0ZSB0aGUgY2hlY2sgdmFsdWUsIGFuZCBkZXRlcm1pbmUgd2hl
dGhlciBhbnkgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZQotICAgZHVyaW5nIHRoYXQgaW5mbGF0ZSgp
IGNhbGwgaW4gb3JkZXIgdG8gcmV0dXJuIHRoZSBwcm9wZXIgcmV0dXJuIGNvZGUuCi0gICBQcm9n
cmVzcyBpcyBkZWZpbmVkIGFzIGEgY2hhbmdlIGluIGVpdGhlciBzdHJtLT5hdmFpbF9pbiBvciBz
dHJtLT5hdmFpbF9vdXQuCi0gICBXaGVuIHRoZXJlIGlzIGEgd2luZG93LCBnb3RvIGluZl9sZWF2
ZSB3aWxsIHVwZGF0ZSB0aGUgd2luZG93IHdpdGggdGhlIGxhc3QKLSAgIG91dHB1dCB3cml0dGVu
LiAgSWYgYSBnb3RvIGluZl9sZWF2ZSBvY2N1cnMgaW4gdGhlIG1pZGRsZSBvZiBkZWNvbXByZXNz
aW9uCi0gICBhbmQgdGhlcmUgaXMgbm8gd2luZG93IGN1cnJlbnRseSwgZ290byBpbmZfbGVhdmUg
d2lsbCBjcmVhdGUgb25lIGFuZCBjb3B5Ci0gICBvdXRwdXQgdG8gdGhlIHdpbmRvdyBmb3IgdGhl
IG5leHQgY2FsbCBvZiBpbmZsYXRlKCkuCi0KLSAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRo
ZSBmbHVzaCBwYXJhbWV0ZXIgb2YgaW5mbGF0ZSgpIG9ubHkgYWZmZWN0cyB0aGUKLSAgIHJldHVy
biBjb2RlIChwZXIgemxpYi5oKS4gIGluZmxhdGUoKSBhbHdheXMgd3JpdGVzIGFzIG11Y2ggYXMg
cG9zc2libGUgdG8KLSAgIHN0cm0tPm5leHRfb3V0LCBnaXZlbiB0aGUgc3BhY2UgYXZhaWxhYmxl
IGFuZCB0aGUgcHJvdmlkZWQgaW5wdXQtLXRoZSBlZmZlY3QKLSAgIGRvY3VtZW50ZWQgaW4gemxp
Yi5oIG9mIFpfU1lOQ19GTFVTSC4gIEZ1cnRoZXJtb3JlLCBpbmZsYXRlKCkgYWx3YXlzIGRlZmVy
cwotICAgdGhlIGFsbG9jYXRpb24gb2YgYW5kIGNvcHlpbmcgaW50byBhIHNsaWRpbmcgd2luZG93
IHVudGlsIG5lY2Vzc2FyeSwgd2hpY2gKLSAgIHByb3ZpZGVzIHRoZSBlZmZlY3QgZG9jdW1lbnRl
ZCBpbiB6bGliLmggZm9yIFpfRklOSVNIIHdoZW4gdGhlIGVudGlyZSBpbnB1dAotICAgc3RyZWFt
IGF2YWlsYWJsZS4gIFNvIHRoZSBvbmx5IHRoaW5nIHRoZSBmbHVzaCBwYXJhbWV0ZXIgYWN0dWFs
bHkgZG9lcyBpczoKLSAgIHdoZW4gZmx1c2ggaXMgc2V0IHRvIFpfRklOSVNILCBpbmZsYXRlKCkg
Y2Fubm90IHJldHVybiBaX09LLiAgSW5zdGVhZCBpdAotICAgd2lsbCByZXR1cm4gWl9CVUZfRVJS
T1IgaWYgaXQgaGFzIG5vdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAqLwotCi1p
bnQgWkVYUE9SVCBpbmZsYXRlKHN0cm0sIGZsdXNoKQotel9zdHJlYW1wIHN0cm07Ci1pbnQgZmx1
c2g7Ci17Ci0gICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25l
ZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwotICAgIHVuc2lnbmVkIGNoYXIg
RkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwotICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7
ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwotICAgIHVuc2lnbmVkIGxv
bmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCi0gICAgdW5zaWduZWQgYml0czsgICAg
ICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGluLCBvdXQ7
ICAgICAgICAgICAvKiBzYXZlIHN0YXJ0aW5nIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICov
Ci0gICAgdW5zaWduZWQgY29weTsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3Ig
bWF0Y2ggYnl0ZXMgdG8gY29weSAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpmcm9tOyAgICAv
KiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi8KLSAgICBjb2RlIHRoaXM7ICAgICAg
ICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqLwotICAgIGNvZGUg
bGFzdDsgICAgICAgICAgICAgICAgICAvKiBwYXJlbnQgdGFibGUgZW50cnkgKi8KLSAgICB1bnNp
Z25lZCBsZW47ICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJlcGVhdHMsIGJp
dHMgdG8gZHJvcCAqLwotICAgIGludCByZXQ7ICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4g
Y29kZSAqLwotI2lmZGVmIEdVTlpJUAotICAgIHVuc2lnbmVkIGNoYXIgaGJ1Zls0XTsgICAgICAv
KiBidWZmZXIgZm9yIGd6aXAgaGVhZGVyIGNyYyBjYWxjdWxhdGlvbiAqLwotI2VuZGlmCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG9yZGVyWzE5XSA9IC8qIHBlcm11dGF0aW9uIG9m
IGNvZGUgbGVuZ3RocyAqLwotICAgICAgICB7MTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAs
IDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNX07Ci0KLSAgICBpZiAoc3RybSA9PSBa
X05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IHN0cm0tPm5leHRfb3V0ID09IFpfTlVM
TCB8fAotICAgICAgICAoc3RybS0+bmV4dF9pbiA9PSBaX05VTEwgJiYgc3RybS0+YXZhaWxfaW4g
IT0gMCkpCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHN0YXRlID0gKHN0
cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwotICAgIGlmIChzdGF0ZS0+bW9k
ZSA9PSBUWVBFKSBzdGF0ZS0+bW9kZSA9IFRZUEVETzsgICAgICAvKiBza2lwIGNoZWNrICovCi0g
ICAgTE9BRCgpOwotICAgIGluID0gaGF2ZTsKLSAgICBvdXQgPSBsZWZ0OwotICAgIHJldCA9IFpf
T0s7Ci0gICAgZm9yICg7OykKLSAgICAgICAgc3dpdGNoIChzdGF0ZS0+bW9kZSkgewotICAgICAg
ICBjYXNlIEhFQUQ6Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPndyYXAgPT0gMCkgewotICAgICAg
ICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRURPOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVFREJJVFMoMTYpOwotI2lmZGVmIEdVTlpJUAot
ICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDIpICYmIGhvbGQgPT0gMHg4YjFmKSB7ICAv
KiBnemlwIGhlYWRlciAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5jaGVjayA9IGNyYzMyKDBM
LCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsK
LSAgICAgICAgICAgICAgICBJTklUQklUUygpOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2Rl
ID0gRkxBR1M7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzdGF0ZS0+ZmxhZ3MgPSAwOyAgICAgICAgICAgLyogZXhwZWN0IHpsaWIgaGVhZGVyICov
Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQotICAgICAgICAgICAgICAg
IHN0YXRlLT5oZWFkLT5kb25lID0gLTE7Ci0gICAgICAgICAgICBpZiAoIShzdGF0ZS0+d3JhcCAm
IDEpIHx8ICAgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqLwotI2Vsc2UKLSAgICAg
ICAgICAgIGlmICgKLSNlbmRpZgotICAgICAgICAgICAgICAgICgoQklUUyg4KSA8PCA4KSArICho
b2xkID4+IDgpKSAlIDMxKSB7Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKiki
aW5jb3JyZWN0IGhlYWRlciBjaGVjayI7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBC
QUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoQklUUyg0KSAhPSBaX0RFRkxBVEVEKSB7Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0g
KGNoYXIgKikidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiOwotICAgICAgICAgICAgICAgIHN0
YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgRFJPUEJJVFMoNCk7Ci0gICAgICAgICAgICBsZW4gPSBCSVRTKDQpICsgODsK
LSAgICAgICAgICAgIGlmIChsZW4gPiBzdGF0ZS0+d2JpdHMpIHsKLSAgICAgICAgICAgICAgICBz
dHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIHdpbmRvdyBzaXplIjsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHN0YXRlLT5kbWF4ID0gMVUgPDwgbGVuOwotICAgICAgICAgICAgVHJh
Y2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXG4iKSk7Ci0gICAgICAgICAg
ICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0g
ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IGhvbGQgJiAweDIwMCA/IERJQ1RJRCA6IFRZUEU7Ci0g
ICAgICAgICAgICBJTklUQklUUygpOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgR1VOWklQ
Ci0gICAgICAgIGNhc2UgRkxBR1M6Ci0gICAgICAgICAgICBORUVEQklUUygxNik7Ci0gICAgICAg
ICAgICBzdGF0ZS0+ZmxhZ3MgPSAoaW50KShob2xkKTsKLSAgICAgICAgICAgIGlmICgoc3RhdGUt
PmZsYWdzICYgMHhmZikgIT0gWl9ERUZMQVRFRCkgewotICAgICAgICAgICAgICAgIHN0cm0tPm1z
ZyA9IChjaGFyICopInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIjsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweGUwMDApIHsKLSAgICAgICAgICAg
ICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiOwotICAg
ICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKLSAg
ICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+dGV4dCA9IChpbnQpKChob2xkID4+IDgpICYgMSk7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSBDUkMyKHN0YXRlLT5jaGVj
aywgaG9sZCk7Ci0gICAgICAgICAgICBJTklUQklUUygpOwotICAgICAgICAgICAgc3RhdGUtPm1v
ZGUgPSBUSU1FOwotICAgICAgICBjYXNlIFRJTUU6Ci0gICAgICAgICAgICBORUVEQklUUygzMik7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQotICAgICAgICAgICAgICAg
IHN0YXRlLT5oZWFkLT50aW1lID0gaG9sZDsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3Mg
JiAweDAyMDApIENSQzQoc3RhdGUtPmNoZWNrLCBob2xkKTsKLSAgICAgICAgICAgIElOSVRCSVRT
KCk7Ci0gICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE9TOwotICAgICAgICBjYXNlIE9TOgotICAg
ICAgICAgICAgTkVFREJJVFMoMTYpOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpf
TlVMTCkgewotICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT54ZmxhZ3MgPSAoaW50KShob2xk
ICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm9zID0gKGludCkoaG9sZCA+
PiA4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAy
MDApIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKLSAgICAgICAgICAgIElOSVRCSVRTKCk7Ci0g
ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEVYTEVOOwotICAgICAgICBjYXNlIEVYTEVOOgotICAg
ICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDQwMCkgewotICAgICAgICAgICAgICAgIE5F
RURCSVRTKDE2KTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKSho
b2xkKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQotICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZXh0cmFfbGVuID0gKHVuc2lnbmVkKWhvbGQ7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgQ1JDMihzdGF0ZS0+Y2hl
Y2ssIGhvbGQpOwotICAgICAgICAgICAgICAgIElOSVRCSVRTKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpCi0gICAgICAgICAgICAg
ICAgc3RhdGUtPmhlYWQtPmV4dHJhID0gWl9OVUxMOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUg
PSBFWFRSQTsKLSAgICAgICAgY2FzZSBFWFRSQToKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+Zmxh
Z3MgJiAweDA0MDApIHsKLSAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIGNvcHkgPSBoYXZlOwotICAgICAgICAgICAg
ICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBa
X05VTEwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5leHRyYSAhPSBa
X05VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0YXRlLT5oZWFkLT5leHRy
YV9sZW4gLSBzdGF0ZS0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgem1lbWNweShz
dGF0ZS0+aGVhZC0+ZXh0cmEgKyBsZW4sIG5leHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbiArIGNvcHkgPiBzdGF0ZS0+aGVhZC0+ZXh0cmFfbWF4ID8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmV4dHJhX21heCAtIGxlbiA6IGNvcHkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+
ZmxhZ3MgJiAweDAyMDApCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBj
cmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkpOwotICAgICAgICAgICAgICAgICAgICBoYXZl
IC09IGNvcHk7Ci0gICAgICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUtPmxlbmd0aCAtPSBjb3B5OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdGUtPmxlbmd0aCkgZ290byBpbmZfbGVhdmU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHN0YXRlLT5t
b2RlID0gTkFNRTsKLSAgICAgICAgY2FzZSBOQU1FOgotICAgICAgICAgICAgaWYgKHN0YXRlLT5m
bGFncyAmIDB4MDgwMCkgewotICAgICAgICAgICAgICAgIGlmIChoYXZlID09IDApIGdvdG8gaW5m
X2xlYXZlOwotICAgICAgICAgICAgICAgIGNvcHkgPSAwOwotICAgICAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICAgICAgbGVuID0gKHVuc2lnbmVkKShuZXh0W2NvcHkrK10pOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWUgIT0gWl9OVUxMICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA8IHN0YXRlLT5oZWFkLT5uYW1lX21h
eCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5uYW1lW3N0YXRlLT5sZW5n
dGgrK10gPSBsZW47Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZl
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKQotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkp
OwotICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKLSAgICAgICAgICAgICAgICBuZXh0ICs9
IGNvcHk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbikgZ290byBpbmZfbGVhdmU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpCi0gICAg
ICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWUgPSBaX05VTEw7Ci0gICAgICAgICAgICBzdGF0
ZS0+bGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ09NTUVOVDsKLSAgICAg
ICAgY2FzZSBDT01NRU5UOgotICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MTAwMCkg
ewotICAgICAgICAgICAgICAgIGlmIChoYXZlID09IDApIGdvdG8gaW5mX2xlYXZlOwotICAgICAg
ICAgICAgICAgIGNvcHkgPSAwOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgbGVuID0gKHVuc2lnbmVkKShuZXh0W2NvcHkrK10pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUtPmhlYWQtPmNvbW1lbnQgIT0gWl9OVUxMICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUtPmxlbmd0aCA8IHN0YXRlLT5oZWFkLT5jb21tX21heCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50W3N0YXRlLT5sZW5ndGgrK10gPSBs
ZW47Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKQotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ssIG5leHQsIGNvcHkpOwotICAgICAg
ICAgICAgICAgIGhhdmUgLT0gY29weTsKLSAgICAgICAgICAgICAgICBuZXh0ICs9IGNvcHk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlbikgZ290byBpbmZfbGVhdmU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpCi0gICAgICAgICAgICAg
ICAgc3RhdGUtPmhlYWQtPmNvbW1lbnQgPSBaX05VTEw7Ci0gICAgICAgICAgICBzdGF0ZS0+bW9k
ZSA9IEhDUkM7Ci0gICAgICAgIGNhc2UgSENSQzoKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+Zmxh
Z3MgJiAweDAyMDApIHsKLSAgICAgICAgICAgICAgICBORUVEQklUUygxNik7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhvbGQgIT0gKHN0YXRlLT5jaGVjayAmIDB4ZmZmZikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaGVhZGVyIGNyYyBtaXNtYXRjaCI7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpIHsKLSAg
ICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+aGNyYyA9IChpbnQpKChzdGF0ZS0+ZmxhZ3MgPj4g
OSkgJiAxKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZG9uZSA9IDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IGNyYzMyKDBM
LCBaX05VTEwsIDApOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOwotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBESUNUSUQ6Ci0gICAgICAgICAgICBORUVE
QklUUygzMik7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFJFVkVS
U0UoaG9sZCk7Ci0gICAgICAgICAgICBJTklUQklUUygpOwotICAgICAgICAgICAgc3RhdGUtPm1v
ZGUgPSBESUNUOwotICAgICAgICBjYXNlIERJQ1Q6Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmhh
dmVkaWN0ID09IDApIHsKLSAgICAgICAgICAgICAgICBSRVNUT1JFKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFpfTkVFRF9ESUNUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RybS0+
YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAg
ICAgc3RhdGUtPm1vZGUgPSBUWVBFOwotICAgICAgICBjYXNlIFRZUEU6Ci0gICAgICAgICAgICBp
ZiAoZmx1c2ggPT0gWl9CTE9DSykgZ290byBpbmZfbGVhdmU7Ci0gICAgICAgIGNhc2UgVFlQRURP
OgotICAgICAgICAgICAgaWYgKHN0YXRlLT5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgQllURUJJ
VFMoKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IENIRUNLOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVFREJJVFMoMyk7Ci0gICAg
ICAgICAgICBzdGF0ZS0+bGFzdCA9IEJJVFMoMSk7Ci0gICAgICAgICAgICBEUk9QQklUUygxKTsK
LSAgICAgICAgICAgIHN3aXRjaCAoQklUUygyKSkgewotICAgICAgICAgICAgY2FzZSAwOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmVkIGJsb2NrICovCi0gICAgICAgICAgICAg
ICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgc3RvcmVkIGJsb2NrJXNcbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBTVE9SRUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhl
ZCBibG9jayAqLwotICAgICAgICAgICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKLSAgICAgICAg
ICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVz
XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3QgPyAiIChsYXN0KSIgOiAi
IikpOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTEVOOyAgICAgICAgICAgICAgLyog
ZGVjb2RlIGNvZGVzICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljIGJsb2NrICovCi0gICAg
ICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgZHluYW1pYyBjb2RlcyBi
bG9jayVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3QgPyAiIChsYXN0
KSIgOiAiIikpOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVEFCTEU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgc3Ry
bS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBibG9jayB0eXBlIjsKLSAgICAgICAgICAgICAgICBz
dGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERST1BCSVRTKDIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RPUkVEOgotICAgICAgICAgICAg
QllURUJJVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ28gdG8gYnl0ZSBib3VuZGFy
eSAqLwotICAgICAgICAgICAgTkVFREJJVFMoMzIpOwotICAgICAgICAgICAgaWYgKChob2xkICYg
MHhmZmZmKSAhPSAoKGhvbGQgPj4gMTYpIF4gMHhmZmZmKSkgewotICAgICAgICAgICAgICAgIHN0
cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiOwotICAgICAg
ICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZClob2xkICYg
MHhmZmZmOwotICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9y
ZWQgbGVuZ3RoICV1XG4iLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoKSk7Ci0g
ICAgICAgICAgICBJTklUQklUUygpOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBDT1BZOwot
ICAgICAgICBjYXNlIENPUFk6Ci0gICAgICAgICAgICBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKLSAg
ICAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSBj
b3B5ID0gaGF2ZTsKLSAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIGNvcHkgPSBsZWZ0
OwotICAgICAgICAgICAgICAgIGlmIChjb3B5ID09IDApIGdvdG8gaW5mX2xlYXZlOwotICAgICAg
ICAgICAgICAgIHptZW1jcHkocHV0LCBuZXh0LCBjb3B5KTsKLSAgICAgICAgICAgICAgICBoYXZl
IC09IGNvcHk7Ci0gICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwotICAgICAgICAgICAgICAg
IGxlZnQgLT0gY29weTsKLSAgICAgICAgICAgICAgICBwdXQgKz0gY29weTsKLSAgICAgICAgICAg
ICAgICBzdGF0ZS0+bGVuZ3RoIC09IGNvcHk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHN0
b3JlZCBlbmRcbiIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRBQkxFOgotICAgICAgICAgICAgTkVFREJJVFMoMTQp
OwotICAgICAgICAgICAgc3RhdGUtPm5sZW4gPSBCSVRTKDUpICsgMjU3OwotICAgICAgICAgICAg
RFJPUEJJVFMoNSk7Ci0gICAgICAgICAgICBzdGF0ZS0+bmRpc3QgPSBCSVRTKDUpICsgMTsKLSAg
ICAgICAgICAgIERST1BCSVRTKDUpOwotICAgICAgICAgICAgc3RhdGUtPm5jb2RlID0gQklUUyg0
KSArIDQ7Ci0gICAgICAgICAgICBEUk9QQklUUyg0KTsKLSNpZm5kZWYgUEtaSVBfQlVHX1dPUktB
Uk9VTkQKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+bmxlbiA+IDI4NiB8fCBzdGF0ZS0+bmRpc3Qg
PiAzMCkgewotICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopInRvbyBtYW55IGxl
bmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9
IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAg
ICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xu
IikpOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOwotICAgICAgICAgICAgc3RhdGUtPm1v
ZGUgPSBMRU5MRU5TOwotICAgICAgICBjYXNlIExFTkxFTlM6Ci0gICAgICAgICAgICB3aGlsZSAo
c3RhdGUtPmhhdmUgPCBzdGF0ZS0+bmNvZGUpIHsKLSAgICAgICAgICAgICAgICBORUVEQklUUygz
KTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAo
dW5zaWduZWQgc2hvcnQpQklUUygzKTsKLSAgICAgICAgICAgICAgICBEUk9QQklUUygzKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IDE5KQotICAgICAg
ICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9IDA7Ci0gICAgICAg
ICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5j
b2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIHN0YXRl
LT5sZW5iaXRzID0gNzsKLSAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0
YXRlLT5sZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7Ci0gICAgICAgICAgICBpZiAo
cmV0KSB7Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2Rl
IGxlbmd0aHMgc2V0IjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRyYWNldigoc3Rk
ZXJyLCAiaW5mbGF0ZTogICAgICAgY29kZSBsZW5ndGhzIG9rXG4iKSk7Ci0gICAgICAgICAgICBz
dGF0ZS0+aGF2ZSA9IDA7Ci0gICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IENPREVMRU5TOwotICAg
ICAgICBjYXNlIENPREVMRU5TOgotICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgc3Rh
dGUtPm5sZW4gKyBzdGF0ZS0+bmRpc3QpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5i
aXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0g
Yml0cykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA8IDE2KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIERST1BC
SVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5o
YXZlKytdID0gdGhpcy52YWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWwgPT0gMTYpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+
bXNnID0gKGNoYXIgKikiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsZW4gPSBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSAtIDFdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
RFJPUEJJVFMoMik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodGhpcy52YWwgPT0gMTcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURC
SVRTKHRoaXMuYml0cyArIDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhp
cy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBE
Uk9QQklUUygzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDcpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMTEg
KyBCSVRTKDcpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoNyk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oYXZlICsgY29w
eSA+IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGNvcHktLSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRl
LT5oYXZlKytdID0gKHVuc2lnbmVkIHNob3J0KWxlbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGhhbmRsZSBlcnJvciBicmVha3MgaW4gd2hpbGUg
Ki8KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBCQUQpIGJyZWFrOwotCi0gICAgICAg
ICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAqLwotICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBz
dGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZB
UiAqKShzdGF0ZS0+bmV4dCk7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7Ci0gICAg
ICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxl
biwgJihzdGF0ZS0+bmV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3Rh
dGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7Ci0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAg
ICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMg
c2V0IjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChj
b2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGJp
dHMgPSA2OwotICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxl
bnMgKyBzdGF0ZS0+bmxlbiwgc3RhdGUtPm5kaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYoc3RhdGUtPm5leHQpLCAmKHN0YXRlLT5kaXN0Yml0cyksIHN0YXRlLT53b3JrKTsKLSAg
ICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAq
KSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0g
QkFEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
VHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOwotICAgICAgICAg
ICAgc3RhdGUtPm1vZGUgPSBMRU47Ci0gICAgICAgIGNhc2UgTEVOOgotICAgICAgICAgICAgaWYg
KGhhdmUgPj0gNiAmJiBsZWZ0ID49IDI1OCkgewotICAgICAgICAgICAgICAgIFJFU1RPUkUoKTsK
LSAgICAgICAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgb3V0KTsKLSAgICAgICAgICAgICAg
ICBMT0FEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5sZW5jb2RlW0JJ
VFMoc3RhdGUtPmxlbmJpdHMpXTsKLSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlz
LmJpdHMpIDw9IGJpdHMpIGJyZWFrOwotICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmJiAodGhpcy5vcCAmIDB4ZjApID09
IDApIHsKLSAgICAgICAgICAgICAgICBsYXN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29kZVtsYXN0LnZh
bCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5v
cCkgPj4gbGFzdC5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxh
c3QuYml0cyArIHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IFBVTExCWVRFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIERST1BCSVRT
KGxhc3QuYml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJp
dHMpOwotICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLSAg
ICAgICAgICAgIGlmICgoaW50KSh0aGlzLm9wKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgVHJh
Y2V2digoc3RkZXJyLCB0aGlzLnZhbCA+PSAweDIwICYmIHRoaXMudmFsIDwgMHg3ZiA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhc
biIsIHRoaXMudmFsKSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMSVQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5v
cCAmIDMyKSB7Ci0gICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAg
ICAgICBlbmQgb2YgYmxvY2tcbiIpKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZ
UEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAodGhpcy5vcCAmIDY0KSB7Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKiki
aW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9k
ZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhpcy5vcCkgJiAxNTsKLSAgICAgICAgICAg
IHN0YXRlLT5tb2RlID0gTEVORVhUOwotICAgICAgICBjYXNlIExFTkVYVDoKLSAgICAgICAgICAg
IGlmIChzdGF0ZS0+ZXh0cmEpIHsKLSAgICAgICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0
cmEpOwotICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggKz0gQklUUyhzdGF0ZS0+ZXh0cmEp
OwotICAgICAgICAgICAgICAgIERST1BCSVRTKHN0YXRlLT5leHRyYSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAl
dVxuIiwgc3RhdGUtPmxlbmd0aCkpOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESVNUOwot
ICAgICAgICBjYXNlIERJU1Q6Ci0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcyA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRlLT5kaXN0Yml0cyldOwotICAgICAg
ICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgUFVMTEJZVEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgo
dGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAgICAgICAgICAgICBsYXN0ID0gdGhpczsKLSAg
ICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0
ZS0+ZGlzdGNvZGVbbGFzdC52YWwgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVRT
KGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyB0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgNjQpIHsK
LSAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIGNv
ZGUiOwotICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPm9mZnNldCA9ICh1bnNp
Z25lZCl0aGlzLnZhbDsKLSAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhp
cy5vcCkgJiAxNTsKLSAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gRElTVEVYVDsKLSAgICAgICAg
Y2FzZSBESVNURVhUOgotICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSkgewotICAgICAgICAg
ICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPm9m
ZnNldCArPSBCSVRTKHN0YXRlLT5leHRyYSk7Ci0gICAgICAgICAgICAgICAgRFJPUEJJVFMoc3Rh
dGUtPmV4dHJhKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBJTkZMQVRFX1NUUklDVAotICAgICAg
ICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBzdGF0ZS0+ZG1heCkgewotICAgICAgICAgICAgICAg
IHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKLSAg
ICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBz
dGF0ZS0+d2hhdmUgKyBvdXQgLSBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgc3RybS0+bXNnID0g
KGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwotICAgICAgICAgICAgICAg
IHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBkaXN0YW5j
ZSAldVxuIiwgc3RhdGUtPm9mZnNldCkpOwotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNQVRD
SDsKLSAgICAgICAgY2FzZSBNQVRDSDoKLSAgICAgICAgICAgIGlmIChsZWZ0ID09IDApIGdvdG8g
aW5mX2xlYXZlOwotICAgICAgICAgICAgY29weSA9IG91dCAtIGxlZnQ7Ci0gICAgICAgICAgICBp
ZiAoc3RhdGUtPm9mZnNldCA+IGNvcHkpIHsgICAgICAgICAvKiBjb3B5IGZyb20gd2luZG93ICov
Ci0gICAgICAgICAgICAgICAgY29weSA9IHN0YXRlLT5vZmZzZXQgLSBjb3B5OwotICAgICAgICAg
ICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPndyaXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
cHkgLT0gc3RhdGUtPndyaXRlOwotICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUtPndp
bmRvdyArIChzdGF0ZS0+d3NpemUgLSBjb3B5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBmcm9tID0gc3RhdGUtPndpbmRvdyAr
IChzdGF0ZS0+d3JpdGUgLSBjb3B5KTsKLSAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRl
LT5sZW5ndGgpIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBmcm9tIG91dHB1
dCAqLwotICAgICAgICAgICAgICAgIGZyb20gPSBwdXQgLSBzdGF0ZS0+b2Zmc2V0OwotICAgICAg
ICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0gbGVmdDsKLSAgICAgICAgICAgIGxlZnQgLT0gY29w
eTsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggLT0gY29weTsKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICAqcHV0KysgPSAqZnJvbSsrOwotICAgICAgICAgICAgfSB3aGlsZSAo
LS1jb3B5KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoID09IDApIHN0YXRlLT5tb2Rl
ID0gTEVOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTElUOgotICAgICAgICAg
ICAgaWYgKGxlZnQgPT0gMCkgZ290byBpbmZfbGVhdmU7Ci0gICAgICAgICAgICAqcHV0KysgPSAo
dW5zaWduZWQgY2hhcikoc3RhdGUtPmxlbmd0aCk7Ci0gICAgICAgICAgICBsZWZ0LS07Ci0gICAg
ICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENIRUNLOgotICAgICAgICAgICAgaWYgKHN0YXRlLT53cmFwKSB7Ci0gICAgICAgICAgICAg
ICAgTkVFREJJVFMoMzIpOwotICAgICAgICAgICAgICAgIG91dCAtPSBsZWZ0OwotICAgICAgICAg
ICAgICAgIHN0cm0tPnRvdGFsX291dCArPSBvdXQ7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnRv
dGFsICs9IG91dDsKLSAgICAgICAgICAgICAgICBpZiAob3V0KQotICAgICAgICAgICAgICAgICAg
ICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBV
UERBVEUoc3RhdGUtPmNoZWNrLCBwdXQgLSBvdXQsIG91dCk7Ci0gICAgICAgICAgICAgICAgb3V0
ID0gbGVmdDsKLSAgICAgICAgICAgICAgICBpZiAoKAotI2lmZGVmIEdVTlpJUAotICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUtPmZsYWdzID8gaG9sZCA6Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgIFJFVkVSU0UoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgewotICAgICAgICAgICAgICAg
ICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKLSAgICAg
ICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgY2hlY2sgbWF0Y2hlcyB0cmFp
bGVyXG4iKSk7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgR1VOWklQCi0gICAgICAgICAgICBzdGF0
ZS0+bW9kZSA9IExFTkdUSDsKLSAgICAgICAgY2FzZSBMRU5HVEg6Ci0gICAgICAgICAgICBpZiAo
c3RhdGUtPndyYXAgJiYgc3RhdGUtPmZsYWdzKSB7Ci0gICAgICAgICAgICAgICAgTkVFREJJVFMo
MzIpOwotICAgICAgICAgICAgICAgIGlmIChob2xkICE9IChzdGF0ZS0+dG90YWwgJiAweGZmZmZm
ZmZmVUwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29y
cmVjdCBsZW5ndGggY2hlY2siOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJB
RDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIElOSVRCSVRTKCk7Ci0gICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJp
bmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVzIHRyYWlsZXJcbiIpKTsKLSAgICAgICAgICAgIH0KLSNl
bmRpZgotICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBET05FOwotICAgICAgICBjYXNlIERPTkU6
Ci0gICAgICAgICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgICAgICAgICBnb3RvIGluZl9s
ZWF2ZTsKLSAgICAgICAgY2FzZSBCQUQ6Ci0gICAgICAgICAgICByZXQgPSBaX0RBVEFfRVJST1I7
Ci0gICAgICAgICAgICBnb3RvIGluZl9sZWF2ZTsKLSAgICAgICAgY2FzZSBNRU06Ci0gICAgICAg
ICAgICByZXR1cm4gWl9NRU1fRVJST1I7Ci0gICAgICAgIGNhc2UgU1lOQzoKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICAgICAgfQotCi0g
ICAgLyoKLSAgICAgICBSZXR1cm4gZnJvbSBpbmZsYXRlKCksIHVwZGF0aW5nIHRoZSB0b3RhbCBj
b3VudHMgYW5kIHRoZSBjaGVjayB2YWx1ZS4KLSAgICAgICBJZiB0aGVyZSB3YXMgbm8gcHJvZ3Jl
c3MgZHVyaW5nIHRoZSBpbmZsYXRlKCkgY2FsbCwgcmV0dXJuIGEgYnVmZmVyCi0gICAgICAgZXJy
b3IuICBDYWxsIHVwZGF0ZXdpbmRvdygpIHRvIGNyZWF0ZSBhbmQvb3IgdXBkYXRlIHRoZSB3aW5k
b3cgc3RhdGUuCi0gICAgICAgTm90ZTogYSBtZW1vcnkgZXJyb3IgZnJvbSBpbmZsYXRlKCkgaXMg
bm9uLXJlY292ZXJhYmxlLgotICAgICAqLwotICBpbmZfbGVhdmU6Ci0gICAgUkVTVE9SRSgpOwot
ICAgIGlmIChzdGF0ZS0+d3NpemUgfHwgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgJiYgb3V0ICE9IHN0
cm0tPmF2YWlsX291dCkpCi0gICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgb3V0KSkgewot
ICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07Ci0gICAgICAgICAgICByZXR1cm4gWl9NRU1f
RVJST1I7Ci0gICAgICAgIH0KLSAgICBpbiAtPSBzdHJtLT5hdmFpbF9pbjsKLSAgICBvdXQgLT0g
c3RybS0+YXZhaWxfb3V0OwotICAgIHN0cm0tPnRvdGFsX2luICs9IGluOwotICAgIHN0cm0tPnRv
dGFsX291dCArPSBvdXQ7Ci0gICAgc3RhdGUtPnRvdGFsICs9IG91dDsKLSAgICBpZiAoc3RhdGUt
PndyYXAgJiYgb3V0KQotICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9Ci0gICAg
ICAgICAgICBVUERBVEUoc3RhdGUtPmNoZWNrLCBzdHJtLT5uZXh0X291dCAtIG91dCwgb3V0KTsK
LSAgICBzdHJtLT5kYXRhX3R5cGUgPSBzdGF0ZS0+Yml0cyArIChzdGF0ZS0+bGFzdCA/IDY0IDog
MCkgKwotICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBUWVBFID8gMTI4IDog
MCk7Ci0gICAgaWYgKCgoaW4gPT0gMCAmJiBvdXQgPT0gMCkgfHwgZmx1c2ggPT0gWl9GSU5JU0gp
ICYmIHJldCA9PSBaX09LKQotICAgICAgICByZXQgPSBaX0JVRl9FUlJPUjsKLSAgICByZXR1cm4g
cmV0OwotfQotCi1pbnQgWkVYUE9SVCBpbmZsYXRlRW5kKHN0cm0pCi16X3N0cmVhbXAgc3RybTsK
LXsKLSAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIGlmIChzdHJtID09
IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgc3RybS0+emZyZWUgPT0gKGZyZWVf
ZnVuYykwKQotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RhdGUgPSAoc3Ry
dWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0gICAgaWYgKHN0YXRlLT53aW5k
b3cgIT0gWl9OVUxMKSBaRlJFRShzdHJtLCBzdGF0ZS0+d2luZG93KTsKLSAgICBaRlJFRShzdHJt
LCBzdHJtLT5zdGF0ZSk7Ci0gICAgc3RybS0+c3RhdGUgPSBaX05VTEw7Ci0gICAgVHJhY2V2KChz
dGRlcnIsICJpbmZsYXRlOiBlbmRcbiIpKTsKLSAgICByZXR1cm4gWl9PSzsKLX0KLQotaW50IFpF
WFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkK
LXpfc3RyZWFtcCBzdHJtOwotY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnk7Ci11SW50IGRpY3RMZW5n
dGg7Ci17Ci0gICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25l
ZCBsb25nIGlkOwotCi0gICAgLyogY2hlY2sgc3RhdGUgKi8KLSAgICBpZiAoc3RybSA9PSBaX05V
TEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAg
c3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0gICAgaWYg
KHN0YXRlLT53cmFwICE9IDAgJiYgc3RhdGUtPm1vZGUgIT0gRElDVCkKLSAgICAgICAgcmV0dXJu
IFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBp
ZCAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBESUNUKSB7Ci0gICAgICAgIGlkID0gYWRsZXIz
MigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgaWQgPSBhZGxlcjMyKGlkLCBkaWN0aW9uYXJ5LCBk
aWN0TGVuZ3RoKTsKLSAgICAgICAgaWYgKGlkICE9IHN0YXRlLT5jaGVjaykKLSAgICAgICAgICAg
IHJldHVybiBaX0RBVEFfRVJST1I7Ci0gICAgfQotCi0gICAgLyogY29weSBkaWN0aW9uYXJ5IHRv
IHdpbmRvdyAqLwotICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+YXZhaWxfb3V0KSkg
ewotICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKLSAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9S
OwotICAgIH0KLSAgICBpZiAoZGljdExlbmd0aCA+IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6
bWVtY3B5KHN0YXRlLT53aW5kb3csIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoIC0gc3RhdGUtPndz
aXplLAotICAgICAgICAgICAgICAgIHN0YXRlLT53c2l6ZSk7Ci0gICAgICAgIHN0YXRlLT53aGF2
ZSA9IHN0YXRlLT53c2l6ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHptZW1jcHkoc3Rh
dGUtPndpbmRvdyArIHN0YXRlLT53c2l6ZSAtIGRpY3RMZW5ndGgsIGRpY3Rpb25hcnksCi0gICAg
ICAgICAgICAgICAgZGljdExlbmd0aCk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IGRpY3RMZW5n
dGg7Ci0gICAgfQotICAgIHN0YXRlLT5oYXZlZGljdCA9IDE7Ci0gICAgVHJhY2V2KChzdGRlcnIs
ICJpbmZsYXRlOiAgIGRpY3Rpb25hcnkgc2V0XG4iKSk7Ci0gICAgcmV0dXJuIFpfT0s7Ci19Ci0K
LWludCBaRVhQT1JUIGluZmxhdGVHZXRIZWFkZXIoc3RybSwgaGVhZCkKLXpfc3RyZWFtcCBzdHJt
OwotZ3pfaGVhZGVycCBoZWFkOwotewotICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3Rh
dGU7Ci0KLSAgICAvKiBjaGVjayBzdGF0ZSAqLwotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBz
dHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdGF0ZSA9
IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKLSAgICBpZiAoKHN0YXRl
LT53cmFwICYgMikgPT0gMCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogc2F2ZSBo
ZWFkZXIgc3RydWN0dXJlICovCi0gICAgc3RhdGUtPmhlYWQgPSBoZWFkOwotICAgIGhlYWQtPmRv
bmUgPSAwOwotICAgIHJldHVybiBaX09LOwotfQotCi0vKgotICAgU2VhcmNoIGJ1ZlswLi5sZW4t
MV0gZm9yIHRoZSBwYXR0ZXJuOiAwLCAwLCAweGZmLCAweGZmLiAgUmV0dXJuIHdoZW4gZm91bmQK
LSAgIG9yIHdoZW4gb3V0IG9mIGlucHV0LiAgV2hlbiBjYWxsZWQsICpoYXZlIGlzIHRoZSBudW1i
ZXIgb2YgcGF0dGVybiBieXRlcwotICAgZm91bmQgaW4gb3JkZXIgc28gZmFyLCBpbiAwLi4zLiAg
T24gcmV0dXJuICpoYXZlIGlzIHVwZGF0ZWQgdG8gdGhlIG5ldwotICAgc3RhdGUuICBJZiBvbiBy
ZXR1cm4gKmhhdmUgZXF1YWxzIGZvdXIsIHRoZW4gdGhlIHBhdHRlcm4gd2FzIGZvdW5kIGFuZCB0
aGUKLSAgIHJldHVybiB2YWx1ZSBpcyBob3cgbWFueSBieXRlcyB3ZXJlIHJlYWQgaW5jbHVkaW5n
IHRoZSBsYXN0IGJ5dGUgb2YgdGhlCi0gICBwYXR0ZXJuLiAgSWYgKmhhdmUgaXMgbGVzcyB0aGFu
IGZvdXIsIHRoZW4gdGhlIHBhdHRlcm4gaGFzIG5vdCBiZWVuIGZvdW5kCi0gICB5ZXQgYW5kIHRo
ZSByZXR1cm4gdmFsdWUgaXMgbGVuLiAgSW4gdGhlIGxhdHRlciBjYXNlLCBzeW5jc2VhcmNoKCkg
Y2FuIGJlCi0gICBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGRhdGEgYW5kIHRoZSAqaGF2ZSBzdGF0
ZS4gICpoYXZlIGlzIGluaXRpYWxpemVkIHRvCi0gICB6ZXJvIGZvciB0aGUgZmlyc3QgY2FsbC4K
LSAqLwotbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKLXVuc2lnbmVk
IEZBUiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Ci11bnNpZ25lZCBsZW47Ci17Ci0g
ICAgdW5zaWduZWQgZ290OwotICAgIHVuc2lnbmVkIG5leHQ7Ci0KLSAgICBnb3QgPSAqaGF2ZTsK
LSAgICBuZXh0ID0gMDsKLSAgICB3aGlsZSAobmV4dCA8IGxlbiAmJiBnb3QgPCA0KSB7Ci0gICAg
ICAgIGlmICgoaW50KShidWZbbmV4dF0pID09IChnb3QgPCAyID8gMCA6IDB4ZmYpKQotICAgICAg
ICAgICAgZ290Kys7Ci0gICAgICAgIGVsc2UgaWYgKGJ1ZltuZXh0XSkKLSAgICAgICAgICAgIGdv
dCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdvdCA9IDQgLSBnb3Q7Ci0gICAgICAg
IG5leHQrKzsKLSAgICB9Ci0gICAgKmhhdmUgPSBnb3Q7Ci0gICAgcmV0dXJuIG5leHQ7Ci19Ci0K
LWludCBaRVhQT1JUIGluZmxhdGVTeW5jKHN0cm0pCi16X3N0cmVhbXAgc3RybTsKLXsKLSAgICB1
bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGxvb2sgYXQg
b3IgbG9va2VkIGF0ICovCi0gICAgdW5zaWduZWQgbG9uZyBpbiwgb3V0OyAgICAgIC8qIHRlbXBv
cmFyeSB0byBzYXZlIHRvdGFsX2luIGFuZCB0b3RhbF9vdXQgKi8KLSAgICB1bnNpZ25lZCBjaGFy
IGJ1Zls0XTsgICAgICAgLyogdG8gcmVzdG9yZSBiaXQgYnVmZmVyIHRvIGJ5dGUgc3RyaW5nICov
Ci0gICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLQotICAgIC8qIGNoZWNrIHBh
cmFtZXRlcnMgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9O
VUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVf
c3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0gICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYg
c3RhdGUtPmJpdHMgPCA4KSByZXR1cm4gWl9CVUZfRVJST1I7Ci0KLSAgICAvKiBpZiBmaXJzdCB0
aW1lLCBzdGFydCBzZWFyY2ggaW4gYml0IGJ1ZmZlciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAh
PSBTWU5DKSB7Ci0gICAgICAgIHN0YXRlLT5tb2RlID0gU1lOQzsKLSAgICAgICAgc3RhdGUtPmhv
bGQgPDw9IHN0YXRlLT5iaXRzICYgNzsKLSAgICAgICAgc3RhdGUtPmJpdHMgLT0gc3RhdGUtPmJp
dHMgJiA3OwotICAgICAgICBsZW4gPSAwOwotICAgICAgICB3aGlsZSAoc3RhdGUtPmJpdHMgPj0g
OCkgewotICAgICAgICAgICAgYnVmW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZS0+aG9s
ZCk7Ci0gICAgICAgICAgICBzdGF0ZS0+aG9sZCA+Pj0gODsKLSAgICAgICAgICAgIHN0YXRlLT5i
aXRzIC09IDg7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUtPmhhdmUgPSAwOwotICAgICAgICBz
eW5jc2VhcmNoKCYoc3RhdGUtPmhhdmUpLCBidWYsIGxlbik7Ci0gICAgfQotCi0gICAgLyogc2Vh
cmNoIGF2YWlsYWJsZSBpbnB1dCAqLwotICAgIGxlbiA9IHN5bmNzZWFyY2goJihzdGF0ZS0+aGF2
ZSksIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICBzdHJtLT5hdmFpbF9pbiAt
PSBsZW47Ci0gICAgc3RybS0+bmV4dF9pbiArPSBsZW47Ci0gICAgc3RybS0+dG90YWxfaW4gKz0g
bGVuOwotCi0gICAgLyogcmV0dXJuIG5vIGpveSBvciBzZXQgdXAgdG8gcmVzdGFydCBpbmZsYXRl
KCkgb24gYSBuZXcgYmxvY2sgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgIT0gNCkgcmV0dXJuIFpf
REFUQV9FUlJPUjsKLSAgICBpbiA9IHN0cm0tPnRvdGFsX2luOyAgb3V0ID0gc3RybS0+dG90YWxf
b3V0OwotICAgIGluZmxhdGVSZXNldChzdHJtKTsKLSAgICBzdHJtLT50b3RhbF9pbiA9IGluOyAg
c3RybS0+dG90YWxfb3V0ID0gb3V0OwotICAgIHN0YXRlLT5tb2RlID0gVFlQRTsKLSAgICByZXR1
cm4gWl9PSzsKLX0KLQotLyoKLSAgIFJldHVybnMgdHJ1ZSBpZiBpbmZsYXRlIGlzIGN1cnJlbnRs
eSBhdCB0aGUgZW5kIG9mIGEgYmxvY2sgZ2VuZXJhdGVkIGJ5Ci0gICBaX1NZTkNfRkxVU0ggb3Ig
Wl9GVUxMX0ZMVVNILiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb25lIFBQUAotICAgaW1wbGVt
ZW50YXRpb24gdG8gcHJvdmlkZSBhbiBhZGRpdGlvbmFsIHNhZmV0eSBjaGVjay4gUFBQIHVzZXMK
LSAgIFpfU1lOQ19GTFVTSCBidXQgcmVtb3ZlcyB0aGUgbGVuZ3RoIGJ5dGVzIG9mIHRoZSByZXN1
bHRpbmcgZW1wdHkgc3RvcmVkCi0gICBibG9jay4gV2hlbiBkZWNvbXByZXNzaW5nLCBQUFAgY2hl
Y2tzIHRoYXQgYXQgdGhlIGVuZCBvZiBpbnB1dCBwYWNrZXQsCi0gICBpbmZsYXRlIGlzIHdhaXRp
bmcgZm9yIHRoZXNlIGxlbmd0aCBieXRlcy4KLSAqLwotaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmNQ
b2ludChzdHJtKQotel9zdHJlYW1wIHN0cm07Ci17Ci0gICAgc3RydWN0IGluZmxhdGVfc3RhdGUg
RkFSICpzdGF0ZTsKLQotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBa
X05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0
ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKLSAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gU1RP
UkVEICYmIHN0YXRlLT5iaXRzID09IDA7Ci19Ci0KLWludCBaRVhQT1JUIGluZmxhdGVDb3B5KGRl
c3QsIHNvdXJjZSkKLXpfc3RyZWFtcCBkZXN0Owotel9zdHJlYW1wIHNvdXJjZTsKLXsKLSAgICBz
dHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRl
IEZBUiAqY29weTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OwotICAgIHVuc2lnbmVk
IHdzaXplOwotCi0gICAgLyogY2hlY2sgaW5wdXQgKi8KLSAgICBpZiAoZGVzdCA9PSBaX05VTEwg
fHwgc291cmNlID09IFpfTlVMTCB8fCBzb3VyY2UtPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAg
ICBzb3VyY2UtPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwIHx8IHNvdXJjZS0+emZyZWUgPT0gKGZy
ZWVfZnVuYykwKQotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RhdGUgPSAo
c3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc291cmNlLT5zdGF0ZTsKLQotICAgIC8qIGFsbG9j
YXRlIHNwYWNlICovCi0gICAgY29weSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKLSAg
ICAgICAgICAgWkFMTE9DKHNvdXJjZSwgMSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7
Ci0gICAgaWYgKGNvcHkgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7Ci0gICAgd2luZG93
ID0gWl9OVUxMOwotICAgIGlmIChzdGF0ZS0+d2luZG93ICE9IFpfTlVMTCkgewotICAgICAgICB3
aW5kb3cgPSAodW5zaWduZWQgY2hhciBGQVIgKikKLSAgICAgICAgICAgICAgICAgWkFMTE9DKHNv
dXJjZSwgMVUgPDwgc3RhdGUtPndiaXRzLCBzaXplb2YodW5zaWduZWQgY2hhcikpOwotICAgICAg
ICBpZiAod2luZG93ID09IFpfTlVMTCkgewotICAgICAgICAgICAgWkZSRUUoc291cmNlLCBjb3B5
KTsKLSAgICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8qIGNvcHkgc3RhdGUgKi8KLSAgICB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgc2l6ZW9mKHpf
c3RyZWFtKSk7Ci0gICAgem1lbWNweShjb3B5LCBzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRl
X3N0YXRlKSk7Ci0gICAgaWYgKHN0YXRlLT5sZW5jb2RlID49IHN0YXRlLT5jb2RlcyAmJgotICAg
ICAgICBzdGF0ZS0+bGVuY29kZSA8PSBzdGF0ZS0+Y29kZXMgKyBFTk9VR0ggLSAxKSB7Ci0gICAg
ICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bGVuY29kZSAtIHN0YXRl
LT5jb2Rlcyk7Ci0gICAgICAgIGNvcHktPmRpc3Rjb2RlID0gY29weS0+Y29kZXMgKyAoc3RhdGUt
PmRpc3Rjb2RlIC0gc3RhdGUtPmNvZGVzKTsKLSAgICB9Ci0gICAgY29weS0+bmV4dCA9IGNvcHkt
PmNvZGVzICsgKHN0YXRlLT5uZXh0IC0gc3RhdGUtPmNvZGVzKTsKLSAgICBpZiAod2luZG93ICE9
IFpfTlVMTCkgewotICAgICAgICB3c2l6ZSA9IDFVIDw8IHN0YXRlLT53Yml0czsKLSAgICAgICAg
em1lbWNweSh3aW5kb3csIHN0YXRlLT53aW5kb3csIHdzaXplKTsKLSAgICB9Ci0gICAgY29weS0+
d2luZG93ID0gd2luZG93OwotICAgIGRlc3QtPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0
ZSBGQVIgKiljb3B5OwotICAgIHJldHVybiBaX09LOwotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy96bGliL2luZmxhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvaW5mbGF0ZS5oCShyZXZpc2lvbiA1MzcxOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9pbmZsYXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTE1ICswLDAgQEAKLS8qIGluZmxhdGUuaCAtLSBpbnRlcm5hbCBpbmZsYXRl
IHN0YXRlIGRlZmluaXRpb24KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA0IE1hcmsgQWRsZXIK
LSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0
IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpu
b3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcwotICAgcGFydCBvZiB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCi0gICBzdWJqZWN0IHRv
IGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCi0gKi8KLQotLyog
ZGVmaW5lIE5PX0daSVAgd2hlbiBjb21waWxpbmcgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBnemlw
IGhlYWRlciBhbmQKLSAgIHRyYWlsZXIgZGVjb2RpbmcgYnkgaW5mbGF0ZSgpLiAgTk9fR1pJUCB3
b3VsZCBiZSB1c2VkIHRvIGF2b2lkIGxpbmtpbmcgaW4KLSAgIHRoZSBjcmMgY29kZSB3aGVuIGl0
IGlzIG5vdCBuZWVkZWQuICBGb3Igc2hhcmVkIGxpYnJhcmllcywgZ3ppcCBkZWNvZGluZwotICAg
c2hvdWxkIGJlIGxlZnQgZW5hYmxlZC4gKi8KLSNpZm5kZWYgTk9fR1pJUAotIyAgZGVmaW5lIEdV
TlpJUAotI2VuZGlmCi0KLS8qIFBvc3NpYmxlIGluZmxhdGUgbW9kZXMgYmV0d2VlbiBpbmZsYXRl
KCkgY2FsbHMgKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgSEVBRCwgICAgICAgLyogaTogd2FpdGlu
ZyBmb3IgbWFnaWMgaGVhZGVyICovCi0gICAgRkxBR1MsICAgICAgLyogaTogd2FpdGluZyBmb3Ig
bWV0aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi8KLSAgICBUSU1FLCAgICAgICAvKiBpOiB3YWl0aW5n
IGZvciBtb2RpZmljYXRpb24gdGltZSAoZ3ppcCkgKi8KLSAgICBPUywgICAgICAgICAvKiBpOiB3
YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi8KLSAg
ICBFWExFTiwgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBsZW5ndGggKGd6aXApICovCi0g
ICAgRVhUUkEsICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgYnl0ZXMgKGd6aXApICovCi0g
ICAgTkFNRSwgICAgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkg
Ki8KLSAgICBDT01NRU5ULCAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgY29tbWVudCAoZ3pp
cCkgKi8KLSAgICBIQ1JDLCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBoZWFkZXIgY3JjIChnemlw
KSAqLwotICAgIERJQ1RJRCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sg
dmFsdWUgKi8KLSAgICBESUNULCAgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlv
bmFyeSgpIGNhbGwgKi8KLSAgICAgICAgVFlQRSwgICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlw
ZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqLwotICAgICAgICBUWVBFRE8sICAgICAv
KiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICov
Ci0gICAgICAgIFNUT1JFRCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5n
dGggYW5kIGNvbXBsZW1lbnQpICovCi0gICAgICAgIENPUFksICAgICAgIC8qIGkvbzogd2FpdGlu
ZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovCi0gICAgICAgIFRB
QkxFLCAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAq
LwotICAgICAgICBMRU5MRU5TLCAgICAvKiBpOiB3YWl0aW5nIGZvciBjb2RlIGxlbmd0aCBjb2Rl
IGxlbmd0aHMgKi8KLSAgICAgICAgQ09ERUxFTlMsICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3Ro
L2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovCi0gICAgICAgICAgICBMRU4sICAgICAg
ICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0IGNvZGUgKi8KLSAgICAgICAgICAgIExFTkVY
VCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGxlbmd0aCBleHRyYSBiaXRzICovCi0gICAgICAgICAg
ICBESVNULCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBjb2RlICovCi0gICAgICAg
ICAgICBESVNURVhULCAgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBleHRyYSBiaXRzICov
Ci0gICAgICAgICAgICBNQVRDSCwgICAgICAvKiBvOiB3YWl0aW5nIGZvciBvdXRwdXQgc3BhY2Ug
dG8gY29weSBzdHJpbmcgKi8KLSAgICAgICAgICAgIExJVCwgICAgICAgIC8qIG86IHdhaXRpbmcg
Zm9yIG91dHB1dCBzcGFjZSB0byB3cml0ZSBsaXRlcmFsICovCi0gICAgQ0hFQ0ssICAgICAgLyog
aTogd2FpdGluZyBmb3IgMzItYml0IGNoZWNrIHZhbHVlICovCi0gICAgTEVOR1RILCAgICAgLyog
aTogd2FpdGluZyBmb3IgMzItYml0IGxlbmd0aCAoZ3ppcCkgKi8KLSAgICBET05FLCAgICAgICAv
KiBmaW5pc2hlZCBjaGVjaywgZG9uZSAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLwotICAg
IEJBRCwgICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVz
ZXQgKi8KLSAgICBNRU0sICAgICAgICAvKiBnb3QgYW4gaW5mbGF0ZSgpIG1lbW9yeSBlcnJvciAt
LSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLwotICAgIFNZTkMgICAgICAgIC8qIGxvb2tpbmcg
Zm9yIHN5bmNocm9uaXphdGlvbiBieXRlcyB0byByZXN0YXJ0IGluZmxhdGUoKSAqLwotfSBpbmZs
YXRlX21vZGU7Ci0KLS8qCi0gICAgU3RhdGUgdHJhbnNpdGlvbnMgYmV0d2VlbiBhYm92ZSBtb2Rl
cyAtCi0KLSAgICAobW9zdCBtb2RlcyBjYW4gZ28gdG8gdGhlIEJBRCBvciBNRU0gbW9kZSAtLSBu
b3Qgc2hvd24gZm9yIGNsYXJpdHkpCi0KLSAgICBQcm9jZXNzIGhlYWRlcjoKLSAgICAgICAgSEVB
RCAtPiAoZ3ppcCkgb3IgKHpsaWIpCi0gICAgICAgIChnemlwKSAtPiBGTEFHUyAtPiBUSU1FIC0+
IE9TIC0+IEVYTEVOIC0+IEVYVFJBIC0+IE5BTUUKLSAgICAgICAgTkFNRSAtPiBDT01NRU5UIC0+
IEhDUkMgLT4gVFlQRQotICAgICAgICAoemxpYikgLT4gRElDVElEIG9yIFRZUEUKLSAgICAgICAg
RElDVElEIC0+IERJQ1QgLT4gVFlQRQotICAgIFJlYWQgZGVmbGF0ZSBibG9ja3M6Ci0gICAgICAg
ICAgICBUWVBFIC0+IFNUT1JFRCBvciBUQUJMRSBvciBMRU4gb3IgQ0hFQ0sKLSAgICAgICAgICAg
IFNUT1JFRCAtPiBDT1BZIC0+IFRZUEUKLSAgICAgICAgICAgIFRBQkxFIC0+IExFTkxFTlMgLT4g
Q09ERUxFTlMgLT4gTEVOCi0gICAgUmVhZCBkZWZsYXRlIGNvZGVzOgotICAgICAgICAgICAgICAg
IExFTiAtPiBMRU5FWFQgb3IgTElUIG9yIFRZUEUKLSAgICAgICAgICAgICAgICBMRU5FWFQgLT4g
RElTVCAtPiBESVNURVhUIC0+IE1BVENIIC0+IExFTgotICAgICAgICAgICAgICAgIExJVCAtPiBM
RU4KLSAgICBQcm9jZXNzIHRyYWlsZXI6Ci0gICAgICAgIENIRUNLIC0+IExFTkdUSCAtPiBET05F
Ci0gKi8KLQotLyogc3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscy4gIEFw
cHJveGltYXRlbHkgN0sgYnl0ZXMuICovCi1zdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSB7Ci0gICAgaW5m
bGF0ZV9tb2RlIG1vZGU7ICAgICAgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZSBtb2RlICovCi0gICAg
aW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJs
b2NrICovCi0gICAgaW50IHdyYXA7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9y
IHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KLSAgICBpbnQgaGF2ZWRpY3Q7ICAgICAgICAg
ICAgICAgLyogdHJ1ZSBpZiBkaWN0aW9uYXJ5IHByb3ZpZGVkICovCi0gICAgaW50IGZsYWdzOyAg
ICAgICAgICAgICAgICAgIC8qIGd6aXAgaGVhZGVyIG1ldGhvZCBhbmQgZmxhZ3MgKDAgaWYgemxp
YikgKi8KLSAgICB1bnNpZ25lZCBkbWF4OyAgICAgICAgICAgICAgLyogemxpYiBoZWFkZXIgbWF4
IGRpc3RhbmNlIChJTkZMQVRFX1NUUklDVCkgKi8KLSAgICB1bnNpZ25lZCBsb25nIGNoZWNrOyAg
ICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2YgY2hlY2sgdmFsdWUgKi8KLSAgICB1bnNpZ25lZCBs
b25nIHRvdGFsOyAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2Ygb3V0cHV0IGNvdW50ICovCi0g
ICAgZ3pfaGVhZGVycCBoZWFkOyAgICAgICAgICAgIC8qIHdoZXJlIHRvIHNhdmUgZ3ppcCBoZWFk
ZXIgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgLyogc2xpZGluZyB3aW5kb3cgKi8KLSAgICB1bnNp
Z25lZCB3Yml0czsgICAgICAgICAgICAgLyogbG9nIGJhc2UgMiBvZiByZXF1ZXN0ZWQgd2luZG93
IHNpemUgKi8KLSAgICB1bnNpZ25lZCB3c2l6ZTsgICAgICAgICAgICAgLyogd2luZG93IHNpemUg
b3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovCi0gICAgdW5zaWduZWQgd2hhdmU7ICAgICAg
ICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi8KLSAgICB1bnNpZ25lZCB3cml0
ZTsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCi0gICAgdW5zaWduZWQgY2hh
ciBGQVIgKndpbmRvdzsgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgbmVlZGVkICov
Ci0gICAgICAgIC8qIGJpdCBhY2N1bXVsYXRvciAqLwotICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsg
ICAgICAgICAvKiBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi8KLSAgICB1bnNpZ25lZCBiaXRzOyAg
ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJpdHMgaW4gImluIiAqLwotICAgICAgICAvKiBmb3Ig
c3RyaW5nIGFuZCBzdG9yZWQgYmxvY2sgY29weWluZyAqLwotICAgIHVuc2lnbmVkIGxlbmd0aDsg
ICAgICAgICAgICAvKiBsaXRlcmFsIG9yIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkgKi8KLSAgICB1
bnNpZ25lZCBvZmZzZXQ7ICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayB0byBjb3B5IHN0cmlu
ZyBmcm9tICovCi0gICAgICAgIC8qIGZvciB0YWJsZSBhbmQgY29kZSBkZWNvZGluZyAqLwotICAg
IHVuc2lnbmVkIGV4dHJhOyAgICAgICAgICAgICAvKiBleHRyYSBiaXRzIG5lZWRlZCAqLwotICAg
ICAgICAvKiBmaXhlZCBhbmQgZHluYW1pYyBjb2RlIHRhYmxlcyAqLwotICAgIGNvZGUgY29uc3Qg
RkFSICpsZW5jb2RlOyAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29k
ZXMgKi8KLSAgICBjb2RlIGNvbnN0IEZBUiAqZGlzdGNvZGU7ICAgLyogc3RhcnRpbmcgdGFibGUg
Zm9yIGRpc3RhbmNlIGNvZGVzICovCi0gICAgdW5zaWduZWQgbGVuYml0czsgICAgICAgICAgIC8q
IGluZGV4IGJpdHMgZm9yIGxlbmNvZGUgKi8KLSAgICB1bnNpZ25lZCBkaXN0Yml0czsgICAgICAg
ICAgLyogaW5kZXggYml0cyBmb3IgZGlzdGNvZGUgKi8KLSAgICAgICAgLyogZHluYW1pYyB0YWJs
ZSBidWlsZGluZyAqLwotICAgIHVuc2lnbmVkIG5jb2RlOyAgICAgICAgICAgICAvKiBudW1iZXIg
b2YgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovCi0gICAgdW5zaWduZWQgbmxlbjsgICAgICAg
ICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGggY29kZSBsZW5ndGhzICovCi0gICAgdW5zaWduZWQg
bmRpc3Q7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXN0YW5jZSBjb2RlIGxlbmd0aHMgKi8K
LSAgICB1bnNpZ25lZCBoYXZlOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3Ro
cyBpbiBsZW5zW10gKi8KLSAgICBjb2RlIEZBUiAqbmV4dDsgICAgICAgICAgICAgLyogbmV4dCBh
dmFpbGFibGUgc3BhY2UgaW4gY29kZXNbXSAqLwotICAgIHVuc2lnbmVkIHNob3J0IGxlbnNbMzIw
XTsgICAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgY29kZSBsZW5ndGhzICovCi0gICAgdW5zaWdu
ZWQgc2hvcnQgd29ya1syODhdOyAgIC8qIHdvcmsgYXJlYSBmb3IgY29kZSB0YWJsZSBidWlsZGlu
ZyAqLwotICAgIGNvZGUgY29kZXNbRU5PVUdIXTsgICAgICAgICAvKiBzcGFjZSBmb3IgY29kZSB0
YWJsZXMgKi8KLX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIv
aW5mdHJlZXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3psaWIvaW5mdHJlZXMuYwkocmV2aXNpb24gNTM3MTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3psaWIvaW5mdHJlZXMuYwkod29ya2luZyBjb3B5KQpAQCAtMSwzMjkgKzAs
MCBAQAotLyogaW5mdHJlZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2ll
bnQgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKLSAqIEZv
ciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGlj
ZSBpbiB6bGliLmgKLSAqLwotCi0jaW5jbHVkZSAienV0aWwuaCIKLSNpbmNsdWRlICJpbmZ0cmVl
cy5oIgotCi0jZGVmaW5lIE1BWEJJVFMgMTUKLQotY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdo
dFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuMyBDb3B5cmlnaHQgMTk5NS0yMDA1IE1hcmsgQWRsZXIg
IjsKLS8qCi0gIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFj
a25vd2xlZGdtZW50IGlzIHdlbGNvbWUKLSAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBw
cm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdAotICBpbmNsdWRlIHN1Y2ggYW4g
YWNrbm93bGVkZ21lbnQsIEkgd291bGQgYXBwcmVjaWF0ZSB0aGF0IHlvdSBrZWVwIHRoaXMKLSAg
Y29weXJpZ2h0IHN0cmluZyBpbiB0aGUgZXhlY3V0YWJsZSBvZiB5b3VyIHByb2R1Y3QuCi0gKi8K
LQotLyoKLSAgIEJ1aWxkIGEgc2V0IG9mIHRhYmxlcyB0byBkZWNvZGUgdGhlIHByb3ZpZGVkIGNh
bm9uaWNhbCBIdWZmbWFuIGNvZGUuCi0gICBUaGUgY29kZSBsZW5ndGhzIGFyZSBsZW5zWzAuLmNv
ZGVzLTFdLiAgVGhlIHJlc3VsdCBzdGFydHMgYXQgKnRhYmxlLAotICAgd2hvc2UgaW5kaWNlcyBh
cmUgMC4uMl5iaXRzLTEuICB3b3JrIGlzIGEgd3JpdGFibGUgYXJyYXkgb2YgYXQgbGVhc3QKLSAg
IGxlbnMgc2hvcnRzLCB3aGljaCBpcyB1c2VkIGFzIGEgd29yayBhcmVhLiAgdHlwZSBpcyB0aGUg
dHlwZSBvZiBjb2RlCi0gICB0byBiZSBnZW5lcmF0ZWQsIENPREVTLCBMRU5TLCBvciBESVNUUy4g
IE9uIHJldHVybiwgemVybyBpcyBzdWNjZXNzLAotICAgLTEgaXMgYW4gaW52YWxpZCBjb2RlLCBh
bmQgKzEgbWVhbnMgdGhhdCBFTk9VR0ggaXNuJ3QgZW5vdWdoLiAgdGFibGUKLSAgIG9uIHJldHVy
biBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIGVudHJ5J3MgYWRkcmVzcy4gIGJpdHMgaXMg
dGhlCi0gICByZXF1ZXN0ZWQgcm9vdCB0YWJsZSBpbmRleCBiaXRzLCBhbmQgb24gcmV0dXJuIGl0
IGlzIHRoZSBhY3R1YWwgcm9vdAotICAgdGFibGUgaW5kZXggYml0cy4gIEl0IHdpbGwgZGlmZmVy
IGlmIHRoZSByZXF1ZXN0IGlzIGdyZWF0ZXIgdGhhbiB0aGUKLSAgIGxvbmdlc3QgY29kZSBvciBp
ZiBpdCBpcyBsZXNzIHRoYW4gdGhlIHNob3J0ZXN0IGNvZGUuCi0gKi8KLWludCBpbmZsYXRlX3Rh
YmxlKHR5cGUsIGxlbnMsIGNvZGVzLCB0YWJsZSwgYml0cywgd29yaykKLWNvZGV0eXBlIHR5cGU7
Ci11bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnM7Ci11bnNpZ25lZCBjb2RlczsKLWNvZGUgRkFSICog
RkFSICp0YWJsZTsKLXVuc2lnbmVkIEZBUiAqYml0czsKLXVuc2lnbmVkIHNob3J0IEZBUiAqd29y
azsKLXsKLSAgICB1bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVuZ3Ro
IGluIGJpdHMgKi8KLSAgICB1bnNpZ25lZCBzeW07ICAgICAgICAgICAgICAgLyogaW5kZXggb2Yg
Y29kZSBzeW1ib2xzICovCi0gICAgdW5zaWduZWQgbWluLCBtYXg7ICAgICAgICAgIC8qIG1pbmlt
dW0gYW5kIG1heGltdW0gY29kZSBsZW5ndGhzICovCi0gICAgdW5zaWduZWQgcm9vdDsgICAgICAg
ICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciByb290IHRhYmxlICovCi0gICAgdW5z
aWduZWQgY3VycjsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciBjdXJy
ZW50IHRhYmxlICovCi0gICAgdW5zaWduZWQgZHJvcDsgICAgICAgICAgICAgIC8qIGNvZGUgYml0
cyB0byBkcm9wIGZvciBzdWItdGFibGUgKi8KLSAgICBpbnQgbGVmdDsgICAgICAgICAgICAgICAg
ICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi8KLSAgICB1bnNpZ25lZCB1
c2VkOyAgICAgICAgICAgICAgLyogY29kZSBlbnRyaWVzIGluIHRhYmxlIHVzZWQgKi8KLSAgICB1
bnNpZ25lZCBodWZmOyAgICAgICAgICAgICAgLyogSHVmZm1hbiBjb2RlICovCi0gICAgdW5zaWdu
ZWQgaW5jcjsgICAgICAgICAgICAgIC8qIGZvciBpbmNyZW1lbnRpbmcgY29kZSwgaW5kZXggKi8K
LSAgICB1bnNpZ25lZCBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5n
IGVudHJpZXMgKi8KLSAgICB1bnNpZ25lZCBsb3c7ICAgICAgICAgICAgICAgLyogbG93IGJpdHMg
Zm9yIGN1cnJlbnQgcm9vdCBlbnRyeSAqLwotICAgIHVuc2lnbmVkIG1hc2s7ICAgICAgICAgICAg
ICAvKiBtYXNrIGZvciBsb3cgcm9vdCBiaXRzICovCi0gICAgY29kZSB0aGlzOyAgICAgICAgICAg
ICAgICAgIC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqLwotICAgIGNvZGUgRkFSICpu
ZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqLwotICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IEZBUiAqYmFzZTsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUg
dG8gdXNlICovCi0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRkFSICpleHRyYTsgICAgLyogZXh0
cmEgYml0cyB0YWJsZSB0byB1c2UgKi8KLSAgICBpbnQgZW5kOyAgICAgICAgICAgICAgICAgICAg
LyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi8KLSAgICB1bnNpZ25lZCBz
aG9ydCBjb3VudFtNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5n
dGggKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBvZmZzW01BWEJJVFMrMV07ICAgICAvKiBvZmZzZXRz
IGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqLwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBsYmFzZVszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovCi0gICAg
ICAgIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywg
MzEsCi0gICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAx
OTUsIDIyNywgMjU4LCAwLCAwfTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4
dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwotICAgICAgICAxNiwg
MTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAx
OCwKLSAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAy
MSwgMTYsIDIwMSwgMTk2fTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2Vb
MzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCi0gICAgICAgIDEsIDIsIDMs
IDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKLSAgICAg
ICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1
LAotICAgICAgICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwfTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc2hvcnQgZGV4dFszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5
IGV4dHJhICovCi0gICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE4LCAxOCwgMTksIDE5
LCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLAotICAgICAgICAyMywgMjMsIDI0LCAyNCwgMjUsIDI1
LCAyNiwgMjYsIDI3LCAyNywKLSAgICAgICAgMjgsIDI4LCAyOSwgMjksIDY0LCA2NH07Ci0KLSAg
ICAvKgotICAgICAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNh
bm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGUKLSAgICAgICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNb
MC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGUKLSAgICAgICBzeW1i
b2xzIDAuLmNvZGVzLTEuICBUaGUgSHVmZm1hbiBjb2RlIGlzIGdlbmVyYXRlZCBieSBmaXJzdCBz
b3J0aW5nIHRoZQotICAgICAgIHN5bWJvbHMgYnkgbGVuZ3RoIGZyb20gc2hvcnQgdG8gbG9uZywg
YW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyCi0gICAgICAgZm9yIGNvZGVzIHdpdGggZXF1
YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0cwotICAg
ICAgIGZvciB0aGUgZmlyc3QgY29kZSBvZiB0aGUgc2hvcnRlc3QgbGVuZ3RoLCBhbmQgdGhlIGNv
ZGVzIGFyZSBpbnRlZ2VyCi0gICAgICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBh
bmQgemVyb3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGgKLSAgICAgICBpbmNyZWFzZXMuICBG
b3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzCi0g
ICAgICAgZnJvbSB0aGVpciBtb3JlIG5hdHVyYWwgaW50ZWdlciBpbmNyZW1lbnQgb3JkZXJpbmcs
IGFuZCBzbyB3aGVuIHRoZQotICAgICAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhl
IGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNvZGVzCi0gICAgICAgYXJlIGluY3JlbWVu
dGVkIGJhY2t3YXJkcy4KLQotICAgICAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBu
b3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluCi0gICAgICAgbGVuc1tdIGFyZSBp
biB0aGUgcmFuZ2UgMC4uTUFYQklUUy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhpcy4KLSAg
ICAgICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJv
IG1lYW5zIHRoYXQgdGhhdAotICAgICAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNv
ZGUuCi0KLSAgICAgICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBv
ZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsCi0gICAgICAgY3JlYXRpbmcgZnJvbSB0aGF0IGEgdGFi
bGUgb2Ygc3RhcnRpbmcgaW5kaWNlcyBmb3IgZWFjaCBsZW5ndGggaW4gdGhlCi0gICAgICAgc29y
dGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBpbiBvcmRlciBpbiB0aGUg
c29ydGVkCi0gICAgICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0
aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5Ci0gICAgICAgdGhlIGNhbGxlci4KLQotICAgICAg
IFRoZSBsZW5ndGggY291bnRzIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBhcyB3ZWxsLCBp
LmUuIGZpbmRpbmcKLSAgICAgICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMs
IGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBhbnkKLSAgICAgICBjb2RlcyBhdCBhbGwsIGNoZWNr
aW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZAotICAgICAg
IGF0IGxlbmd0aCBjb3VudHMgdG8gZGV0ZXJtaW5lIHN1Yi10YWJsZSBzaXplcyB3aGVuIGJ1aWxk
aW5nIHRoZQotICAgICAgIGRlY29kaW5nIHRhYmxlcy4KLSAgICAgKi8KLQotICAgIC8qIGFjY3Vt
dWxhdGUgbGVuZ3RocyBmb3IgY29kZXMgKGFzc3VtZXMgbGVuc1tdIGFsbCBpbiAwLi5NQVhCSVRT
KSAqLwotICAgIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKQotICAgICAgICBj
b3VudFtsZW5dID0gMDsKLSAgICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykKLSAg
ICAgICAgY291bnRbbGVuc1tzeW1dXSsrOwotCi0gICAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBm
b3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi8KLSAgICByb290ID0gKmJpdHM7
Ci0gICAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pCi0gICAgICAgIGlmIChj
b3VudFttYXhdICE9IDApIGJyZWFrOwotICAgIGlmIChyb290ID4gbWF4KSByb290ID0gbWF4Owot
ICAgIGlmIChtYXggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHN5bWJvbHMgdG8g
Y29kZSBhdCBhbGwgKi8KLSAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAv
KiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBj
aGFyKTE7Ci0gICAgICAgIHRoaXMudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7Ci0gICAgICAgICoo
KnRhYmxlKSsrID0gdGhpczsgICAgICAgICAgICAgLyogbWFrZSBhIHRhYmxlIHRvIGZvcmNlIGFu
IGVycm9yICovCi0gICAgICAgICooKnRhYmxlKSsrID0gdGhpczsKLSAgICAgICAgKmJpdHMgPSAx
OwotICAgICAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNv
ZGluZyB0byByZXBvcnQgZXJyb3IgKi8KLSAgICB9Ci0gICAgZm9yIChtaW4gPSAxOyBtaW4gPD0g
TUFYQklUUzsgbWluKyspCi0gICAgICAgIGlmIChjb3VudFttaW5dICE9IDApIGJyZWFrOwotICAg
IGlmIChyb290IDwgbWluKSByb290ID0gbWluOwotCi0gICAgLyogY2hlY2sgZm9yIGFuIG92ZXIt
c3Vic2NyaWJlZCBvciBpbmNvbXBsZXRlIHNldCBvZiBsZW5ndGhzICovCi0gICAgbGVmdCA9IDE7
Ci0gICAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHsKLSAgICAgICAgbGVm
dCA8PD0gMTsKLSAgICAgICAgbGVmdCAtPSBjb3VudFtsZW5dOwotICAgICAgICBpZiAobGVmdCA8
IDApIHJldHVybiAtMTsgICAgICAgIC8qIG92ZXItc3Vic2NyaWJlZCAqLwotICAgIH0KLSAgICBp
ZiAobGVmdCA+IDAgJiYgKHR5cGUgPT0gQ09ERVMgfHwgbWF4ICE9IDEpKQotICAgICAgICByZXR1
cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29tcGxldGUgc2V0ICovCi0KLSAgICAv
KiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Ig
c29ydGluZyAqLwotICAgIG9mZnNbMV0gPSAwOwotICAgIGZvciAobGVuID0gMTsgbGVuIDwgTUFY
QklUUzsgbGVuKyspCi0gICAgICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFts
ZW5dOwotCi0gICAgLyogc29ydCBzeW1ib2xzIGJ5IGxlbmd0aCwgYnkgc3ltYm9sIG9yZGVyIHdp
dGhpbiBlYWNoIGxlbmd0aCAqLwotICAgIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsr
KQotICAgICAgICBpZiAobGVuc1tzeW1dICE9IDApIHdvcmtbb2Zmc1tsZW5zW3N5bV1dKytdID0g
KHVuc2lnbmVkIHNob3J0KXN5bTsKLQotICAgIC8qCi0gICAgICAgQ3JlYXRlIGFuZCBmaWxsIGlu
IGRlY29kaW5nIHRhYmxlcy4gIEluIHRoaXMgbG9vcCwgdGhlIHRhYmxlIGJlaW5nCi0gICAgICAg
ZmlsbGVkIGlzIGF0IG5leHQgYW5kIGhhcyBjdXJyIGluZGV4IGJpdHMuICBUaGUgY29kZSBiZWlu
ZyB1c2VkIGlzIGh1ZmYKLSAgICAgICB3aXRoIGxlbmd0aCBsZW4uICBUaGF0IGNvZGUgaXMgY29u
dmVydGVkIHRvIGFuIGluZGV4IGJ5IGRyb3BwaW5nIGRyb3AKLSAgICAgICBiaXRzIG9mZiBvZiB0
aGUgYm90dG9tLiAgRm9yIGNvZGVzIHdoZXJlIGxlbiBpcyBsZXNzIHRoYW4gZHJvcCArIGN1cnIs
Ci0gICAgICAgdGhvc2UgdG9wIGRyb3AgKyBjdXJyIC0gbGVuIGJpdHMgYXJlIGluY3JlbWVudGVk
IHRocm91Z2ggYWxsIHZhbHVlcyB0bwotICAgICAgIGZpbGwgdGhlIHRhYmxlIHdpdGggcmVwbGlj
YXRlZCBlbnRyaWVzLgotCi0gICAgICAgcm9vdCBpcyB0aGUgbnVtYmVyIG9mIGluZGV4IGJpdHMg
Zm9yIHRoZSByb290IHRhYmxlLiAgV2hlbiBsZW4gZXhjZWVkcwotICAgICAgIHJvb3QsIHN1Yi10
YWJsZXMgYXJlIGNyZWF0ZWQgcG9pbnRlZCB0byBieSB0aGUgcm9vdCBlbnRyeSB3aXRoIGFuIGlu
ZGV4Ci0gICAgICAgb2YgdGhlIGxvdyByb290IGJpdHMgb2YgaHVmZi4gIFRoaXMgaXMgc2F2ZWQg
aW4gbG93IHRvIGNoZWNrIGZvciB3aGVuIGEKLSAgICAgICBuZXcgc3ViLXRhYmxlIHNob3VsZCBi
ZSBzdGFydGVkLiAgZHJvcCBpcyB6ZXJvIHdoZW4gdGhlIHJvb3QgdGFibGUgaXMKLSAgICAgICBi
ZWluZyBmaWxsZWQsIGFuZCBkcm9wIGlzIHJvb3Qgd2hlbiBzdWItdGFibGVzIGFyZSBiZWluZyBm
aWxsZWQuCi0KLSAgICAgICBXaGVuIGEgbmV3IHN1Yi10YWJsZSBpcyBuZWVkZWQsIGl0IGlzIG5l
Y2Vzc2FyeSB0byBsb29rIGFoZWFkIGluIHRoZQotICAgICAgIGNvZGUgbGVuZ3RocyB0byBkZXRl
cm1pbmUgd2hhdCBzaXplIHN1Yi10YWJsZSBpcyBuZWVkZWQuICBUaGUgbGVuZ3RoCi0gICAgICAg
Y291bnRzIGFyZSB1c2VkIGZvciB0aGlzLCBhbmQgc28gY291bnRbXSBpcyBkZWNyZW1lbnRlZCBh
cyBjb2RlcyBhcmUKLSAgICAgICBlbnRlcmVkIGluIHRoZSB0YWJsZXMuCi0KLSAgICAgICB1c2Vk
IGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuIGFsbG9jYXRl
ZCBmcm9tIHRoZQotICAgICAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQg
d2hlbiBhIExFTlMgdGFibGUgaXMgYmVpbmcgbWFkZQotICAgICAgIGFnYWluc3QgdGhlIHNwYWNl
IGluICp0YWJsZSwgRU5PVUdILCBtaW51cyB0aGUgbWF4aW11bSBzcGFjZSBuZWVkZWQgYnkKLSAg
ICAgICB0aGUgd29yc3QgY2FzZSBkaXN0YW5jZSBjb2RlLCBNQVhELiAgVGhpcyBzaG91bGQgbmV2
ZXIgaGFwcGVuLCBidXQgdGhlCi0gICAgICAgc3VmZmljaWVuY3kgb2YgRU5PVUdIIGhhcyBub3Qg
YmVlbiBwcm92ZW4gZXhoYXVzdGl2ZWx5LCBoZW5jZSB0aGUgY2hlY2suCi0gICAgICAgVGhpcyBh
c3N1bWVzIHRoYXQgd2hlbiB0eXBlID09IExFTlMsIGJpdHMgPT0gOS4KLQotICAgICAgIHN5bSBp
bmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdo
ZW4KLSAgICAgICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUg
YmVlbiBwcm9jZXNzZWQuICBUaGlzCi0gICAgICAgcm91dGluZSBwZXJtaXRzIGluY29tcGxldGUg
Y29kZXMsIHNvIGFub3RoZXIgbG9vcCBhZnRlciB0aGlzIG9uZSBmaWxscwotICAgICAgIGluIHRo
ZSByZXN0IG9mIHRoZSBkZWNvZGluZyB0YWJsZXMgd2l0aCBpbnZhbGlkIGNvZGUgbWFya2Vycy4K
LSAgICAgKi8KLQotICAgIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovCi0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBDT0RFUzoKLSAgICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAg
LyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICovCi0gICAgICAgIGVuZCA9IDE5OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIExFTlM6Ci0gICAgICAgIGJhc2UgPSBsYmFzZTsKLSAgICAgICAgYmFz
ZSAtPSAyNTc7Ci0gICAgICAgIGV4dHJhID0gbGV4dDsKLSAgICAgICAgZXh0cmEgLT0gMjU3Owot
ICAgICAgICBlbmQgPSAyNTY7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgLyogRElTVFMgKi8KLSAgICAgICAgYmFzZSA9IGRiYXNlOwotICAgICAgICBleHRyYSA9IGRl
eHQ7Ci0gICAgICAgIGVuZCA9IC0xOwotICAgIH0KLQotICAgIC8qIGluaXRpYWxpemUgc3RhdGUg
Zm9yIGxvb3AgKi8KLSAgICBodWZmID0gMDsgICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcg
Y29kZSAqLwotICAgIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2Rl
IHN5bWJvbCAqLwotICAgIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBj
b2RlIGxlbmd0aCAqLwotICAgIG5leHQgPSAqdGFibGU7ICAgICAgICAgICAgICAvKiBjdXJyZW50
IHRhYmxlIHRvIGZpbGwgaW4gKi8KLSAgICBjdXJyID0gcm9vdDsgICAgICAgICAgICAgICAgLyog
Y3VycmVudCB0YWJsZSBpbmRleCBiaXRzICovCi0gICAgZHJvcCA9IDA7ICAgICAgICAgICAgICAg
ICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi8KLSAgICBs
b3cgPSAodW5zaWduZWQpKC0xKTsgICAgICAgLyogdHJpZ2dlciBuZXcgc3ViLXRhYmxlIHdoZW4g
bGVuID4gcm9vdCAqLwotICAgIHVzZWQgPSAxVSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9v
dCB0YWJsZSBlbnRyaWVzICovCi0gICAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1h
c2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KLQotICAgIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBz
cGFjZSAqLwotICAgIGlmICh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0ggLSBNQVhEKQot
ICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIHByb2Nlc3MgYWxsIGNvZGVzIGFuZCBtYWtlIHRh
YmxlIGVudHJpZXMgKi8KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8qIGNyZWF0ZSB0YWJsZSBl
bnRyeSAqLwotICAgICAgICB0aGlzLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7
Ci0gICAgICAgIGlmICgoaW50KSh3b3JrW3N5bV0pIDwgZW5kKSB7Ci0gICAgICAgICAgICB0aGlz
Lm9wID0gKHVuc2lnbmVkIGNoYXIpMDsKLSAgICAgICAgICAgIHRoaXMudmFsID0gd29ya1tzeW1d
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKChpbnQpKHdvcmtbc3ltXSkgPiBlbmQpIHsK
LSAgICAgICAgICAgIHRoaXMub3AgPSAodW5zaWduZWQgY2hhcikoZXh0cmFbd29ya1tzeW1dXSk7
Ci0gICAgICAgICAgICB0aGlzLnZhbCA9IGJhc2Vbd29ya1tzeW1dXTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMub3AgPSAodW5zaWduZWQgY2hhcikoMzIgKyA2
NCk7ICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovCi0gICAgICAgICAgICB0aGlzLnZhbCA9IDA7
Ci0gICAgICAgIH0KLQotICAgICAgICAvKiByZXBsaWNhdGUgZm9yIHRob3NlIGluZGljZXMgd2l0
aCBsb3cgbGVuIGJpdHMgZXF1YWwgdG8gaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxl
biAtIGRyb3ApOwotICAgICAgICBmaWxsID0gMVUgPDwgY3VycjsKLSAgICAgICAgbWluID0gZmls
bDsgICAgICAgICAgICAgICAgIC8qIHNhdmUgb2Zmc2V0IHRvIG5leHQgdGFibGUgKi8KLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgZmlsbCAtPSBpbmNyOwotICAgICAgICAgICAgbmV4dFsoaHVm
ZiA+PiBkcm9wKSArIGZpbGxdID0gdGhpczsKLSAgICAgICAgfSB3aGlsZSAoZmlsbCAhPSAwKTsK
LQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAq
LwotICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAm
IGluY3IpCi0gICAgICAgICAgICBpbmNyID4+PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7
Ci0gICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNy
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGh1ZmYgPSAwOwotCi0gICAg
ICAgIC8qIGdvIHRvIG5leHQgc3ltYm9sLCB1cGRhdGUgY291bnQsIGxlbiAqLwotICAgICAgICBz
eW0rKzsKLSAgICAgICAgaWYgKC0tKGNvdW50W2xlbl0pID09IDApIHsKLSAgICAgICAgICAgIGlm
IChsZW4gPT0gbWF4KSBicmVhazsKLSAgICAgICAgICAgIGxlbiA9IGxlbnNbd29ya1tzeW1dXTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qIGNyZWF0ZSBuZXcgc3ViLXRhYmxlIGlmIG5lZWRlZCAq
LwotICAgICAgICBpZiAobGVuID4gcm9vdCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgewotICAg
ICAgICAgICAgLyogaWYgZmlyc3QgdGltZSwgdHJhbnNpdGlvbiB0byBzdWItdGFibGVzICovCi0g
ICAgICAgICAgICBpZiAoZHJvcCA9PSAwKQotICAgICAgICAgICAgICAgIGRyb3AgPSByb290Owot
Ci0gICAgICAgICAgICAvKiBpbmNyZW1lbnQgcGFzdCBsYXN0IHRhYmxlICovCi0gICAgICAgICAg
ICBuZXh0ICs9IG1pbjsgICAgICAgICAgICAvKiBoZXJlIG1pbiBpcyAxIDw8IGN1cnIgKi8KLQot
ICAgICAgICAgICAgLyogZGV0ZXJtaW5lIGxlbmd0aCBvZiBuZXh0IHRhYmxlICovCi0gICAgICAg
ICAgICBjdXJyID0gbGVuIC0gZHJvcDsKLSAgICAgICAgICAgIGxlZnQgPSAoaW50KSgxIDw8IGN1
cnIpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7Ci0gICAgICAgICAg
ICAgICAgbGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07Ci0gICAgICAgICAgICAgICAgaWYgKGxl
ZnQgPD0gMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY3VycisrOwotICAgICAgICAgICAgICAg
IGxlZnQgPDw9IDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGNoZWNrIGZvciBl
bm91Z2ggc3BhY2UgKi8KLSAgICAgICAgICAgIHVzZWQgKz0gMVUgPDwgY3VycjsKLSAgICAgICAg
ICAgIGlmICh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0ggLSBNQVhEKQotICAgICAgICAg
ICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRh
YmxlIHRvIHN1Yi10YWJsZSAqLwotICAgICAgICAgICAgbG93ID0gaHVmZiAmIG1hc2s7Ci0gICAg
ICAgICAgICAoKnRhYmxlKVtsb3ddLm9wID0gKHVuc2lnbmVkIGNoYXIpY3VycjsKLSAgICAgICAg
ICAgICgqdGFibGUpW2xvd10uYml0cyA9ICh1bnNpZ25lZCBjaGFyKXJvb3Q7Ci0gICAgICAgICAg
ICAoKnRhYmxlKVtsb3ddLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkobmV4dCAtICp0YWJsZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAgIEZpbGwgaW4gcmVzdCBvZiB0YWJsZSBm
b3IgaW5jb21wbGV0ZSBjb2Rlcy4gIFRoaXMgbG9vcCBpcyBzaW1pbGFyIHRvIHRoZQotICAgICAg
IGxvb3AgYWJvdmUgaW4gaW5jcmVtZW50aW5nIGh1ZmYgZm9yIHRhYmxlIGluZGljZXMuICBJdCBp
cyBhc3N1bWVkIHRoYXQKLSAgICAgICBsZW4gaXMgZXF1YWwgdG8gY3VyciArIGRyb3AsIHNvIHRo
ZXJlIGlzIG5vIGxvb3AgbmVlZGVkIHRvIGluY3JlbWVudAotICAgICAgIHRocm91Z2ggaGlnaCBp
bmRleCBiaXRzLiAgV2hlbiB0aGUgY3VycmVudCBzdWItdGFibGUgaXMgZmlsbGVkLCB0aGUgbG9v
cAotICAgICAgIGRyb3BzIGJhY2sgdG8gdGhlIHJvb3QgdGFibGUgdG8gZmlsbCBpbiBhbnkgcmVt
YWluaW5nIGVudHJpZXMgdGhlcmUuCi0gICAgICovCi0gICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBj
aGFyKTY0OyAgICAgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgdGhp
cy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOwotICAgIHRoaXMudmFsID0gKHVu
c2lnbmVkIHNob3J0KTA7Ci0gICAgd2hpbGUgKGh1ZmYgIT0gMCkgewotICAgICAgICAvKiB3aGVu
IGRvbmUgd2l0aCBzdWItdGFibGUsIGRyb3AgYmFjayB0byByb290IHRhYmxlICovCi0gICAgICAg
IGlmIChkcm9wICE9IDAgJiYgKGh1ZmYgJiBtYXNrKSAhPSBsb3cpIHsKLSAgICAgICAgICAgIGRy
b3AgPSAwOwotICAgICAgICAgICAgbGVuID0gcm9vdDsKLSAgICAgICAgICAgIG5leHQgPSAqdGFi
bGU7Ci0gICAgICAgICAgICB0aGlzLmJpdHMgPSAodW5zaWduZWQgY2hhcilsZW47Ci0gICAgICAg
IH0KLQotICAgICAgICAvKiBwdXQgaW52YWxpZCBjb2RlIG1hcmtlciBpbiB0YWJsZSAqLwotICAg
ICAgICBuZXh0W2h1ZmYgPj4gZHJvcF0gPSB0aGlzOwotCi0gICAgICAgIC8qIGJhY2t3YXJkcyBp
bmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovCi0gICAgICAgIGluY3IgPSAxVSA8PCAo
bGVuIC0gMSk7Ci0gICAgICAgIHdoaWxlIChodWZmICYgaW5jcikKLSAgICAgICAgICAgIGluY3Ig
Pj49IDE7Ci0gICAgICAgIGlmIChpbmNyICE9IDApIHsKLSAgICAgICAgICAgIGh1ZmYgJj0gaW5j
ciAtIDE7Ci0gICAgICAgICAgICBodWZmICs9IGluY3I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgaHVmZiA9IDA7Ci0gICAgfQotCi0gICAgLyogc2V0IHJldHVybiBwYXJh
bWV0ZXJzICovCi0gICAgKnRhYmxlICs9IHVzZWQ7Ci0gICAgKmJpdHMgPSByb290OwotICAgIHJl
dHVybiAwOwotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2lu
ZnRyZWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96
bGliL2luZnRyZWVzLmgJKHJldmlzaW9uIDUzNzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy96bGliL2luZnRyZWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBA
QAotLyogaW5mdHJlZXMuaCAtLSBoZWFkZXIgdG8gdXNlIGluZnRyZWVzLmMKLSAqIENvcHlyaWdo
dCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1
dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKiBX
QVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJ
dCBpcwotICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxp
YnJhcnkgYW5kIGlzCi0gICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBv
bmx5IHVzZSB6bGliLmguCi0gKi8KLQotLyogU3RydWN0dXJlIGZvciBkZWNvZGluZyB0YWJsZXMu
ICBFYWNoIGVudHJ5IHByb3ZpZGVzIGVpdGhlciB0aGUKLSAgIGluZm9ybWF0aW9uIG5lZWRlZCB0
byBkbyB0aGUgb3BlcmF0aW9uIHJlcXVlc3RlZCBieSB0aGUgY29kZSB0aGF0Ci0gICBpbmRleGVk
IHRoYXQgdGFibGUgZW50cnksIG9yIGl0IHByb3ZpZGVzIGEgcG9pbnRlciB0byBhbm90aGVyCi0g
ICB0YWJsZSB0aGF0IGluZGV4ZXMgbW9yZSBiaXRzIG9mIHRoZSBjb2RlLiAgb3AgaW5kaWNhdGVz
IHdoZXRoZXIKLSAgIHRoZSBlbnRyeSBpcyBhIHBvaW50ZXIgdG8gYW5vdGhlciB0YWJsZSwgYSBs
aXRlcmFsLCBhIGxlbmd0aCBvcgotICAgZGlzdGFuY2UsIGFuIGVuZC1vZi1ibG9jaywgb3IgYW4g
aW52YWxpZCBjb2RlLiAgRm9yIGEgdGFibGUKLSAgIHBvaW50ZXIsIHRoZSBsb3cgZm91ciBiaXRz
IG9mIG9wIGlzIHRoZSBudW1iZXIgb2YgaW5kZXggYml0cyBvZgotICAgdGhhdCB0YWJsZS4gIEZv
ciBhIGxlbmd0aCBvciBkaXN0YW5jZSwgdGhlIGxvdyBmb3VyIGJpdHMgb2Ygb3AKLSAgIGlzIHRo
ZSBudW1iZXIgb2YgZXh0cmEgYml0cyB0byBnZXQgYWZ0ZXIgdGhlIGNvZGUuICBiaXRzIGlzCi0g
ICB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhpcyBjb2RlIG9yIHBhcnQgb2YgdGhlIGNvZGUgdG8g
ZHJvcCBvZmYKLSAgIG9mIHRoZSBiaXQgYnVmZmVyLiAgdmFsIGlzIHRoZSBhY3R1YWwgYnl0ZSB0
byBvdXRwdXQgaW4gdGhlIGNhc2UKLSAgIG9mIGEgbGl0ZXJhbCwgdGhlIGJhc2UgbGVuZ3RoIG9y
IGRpc3RhbmNlLCBvciB0aGUgb2Zmc2V0IGZyb20KLSAgIHRoZSBjdXJyZW50IHRhYmxlIHRvIHRo
ZSBuZXh0IHRhYmxlLiAgRWFjaCBlbnRyeSBpcyBmb3VyIGJ5dGVzLiAqLwotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgb3A7ICAgICAgICAgICAvKiBvcGVyYXRpb24sIGV4dHJh
IGJpdHMsIHRhYmxlIGJpdHMgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJpdHM7ICAgICAgICAgLyog
Yml0cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB2YWw7
ICAgICAgICAgLyogb2Zmc2V0IGluIHRhYmxlIG9yIGNvZGUgdmFsdWUgKi8KLX0gY29kZTsKLQot
Lyogb3AgdmFsdWVzIGFzIHNldCBieSBpbmZsYXRlX3RhYmxlKCk6Ci0gICAgMDAwMDAwMDAgLSBs
aXRlcmFsCi0gICAgMDAwMHR0dHQgLSB0YWJsZSBsaW5rLCB0dHR0ICE9IDAgaXMgdGhlIG51bWJl
ciBvZiB0YWJsZSBpbmRleCBiaXRzCi0gICAgMDAwMWVlZWUgLSBsZW5ndGggb3IgZGlzdGFuY2Us
IGVlZWUgaXMgdGhlIG51bWJlciBvZiBleHRyYSBiaXRzCi0gICAgMDExMDAwMDAgLSBlbmQgb2Yg
YmxvY2sKLSAgICAwMTAwMDAwMCAtIGludmFsaWQgY29kZQotICovCi0KLS8qIE1heGltdW0gc2l6
ZSBvZiBkeW5hbWljIHRyZWUuICBUaGUgbWF4aW11bSBmb3VuZCBpbiBhIGxvbmcgYnV0IG5vbi0K
LSAgIGV4aGF1c3RpdmUgc2VhcmNoIHdhcyAxNDQ0IGNvZGUgc3RydWN0dXJlcyAoODUyIGZvciBs
ZW5ndGgvbGl0ZXJhbHMKLSAgIGFuZCA1OTIgZm9yIGRpc3RhbmNlcywgdGhlIGxhdHRlciBhY3R1
YWxseSB0aGUgcmVzdWx0IG9mIGFuCi0gICBleGhhdXN0aXZlIHNlYXJjaCkuICBUaGUgdHJ1ZSBt
YXhpbXVtIGlzIG5vdCBrbm93biwgYnV0IHRoZSB2YWx1ZQotICAgYmVsb3cgaXMgbW9yZSB0aGFu
IHNhZmUuICovCi0jZGVmaW5lIEVOT1VHSCAyMDQ4Ci0jZGVmaW5lIE1BWEQgNTkyCi0KLS8qIFR5
cGUgb2YgY29kZSB0byBidWlsZCBmb3IgaW5mdGFibGUoKSAqLwotdHlwZWRlZiBlbnVtIHsKLSAg
ICBDT0RFUywKLSAgICBMRU5TLAotICAgIERJU1RTCi19IGNvZGV0eXBlOwotCi1leHRlcm4gaW50
IGluZmxhdGVfdGFibGUgT0YoKGNvZGV0eXBlIHR5cGUsIHVuc2lnbmVkIHNob3J0IEZBUiAqbGVu
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29kZXMsIGNvZGUgRkFS
ICogRkFSICp0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgRkFS
ICpiaXRzLCB1bnNpZ25lZCBzaG9ydCBGQVIgKndvcmspKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9tb3p6Y29uZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9tb3p6Y29uZi5oCShyZXZpc2lvbiA1MzcxOSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi9tb3p6Y29uZi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEzMCArMCwwIEBACi0vKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6
IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCi0vKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0gKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAy
LjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgot
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIG1vemlsbGEgemxpYiBjb25maWd1cmF0aW9uLgot
ICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBJQk0g
Q29ycG9yYXRpb24uCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Bl
ciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMgb2YKLSAqIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLAotICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxp
Y2FibGUgaW5zdGVhZAotICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBv
ZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8K
LSAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
TVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9u
cyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHBy
b3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBk
ZWxldGUKLSAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRo
ZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxP
Q0sgKioqKiogKi8KLQotI2lmbmRlZiBNT1paQ09ORl9ICi0jZGVmaW5lIE1PWlpDT05GX0gKLQot
I2lmIGRlZmluZWQoWFBfV0lOKSAmJiBkZWZpbmVkKFpMSUJfRExMKSAmJiAhZGVmaW5lZChNT1pf
RU5BQkxFX0xJQlhVTCkKLSN1bmRlZiBaTElCX0RMTAotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1ZJ
U0lCSUxJVFlfQVRUUklCVVRFCi0jZGVmaW5lIFpFWFRFUk4gX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpIGV4dGVybgotI2VuZGlmCi0KLS8qIEV4cG9ydGVkIFN5bWJvbHMg
Ki8KLSNkZWZpbmUgemxpYlZlcnNpb24gTU9aX1pfemxpYlZlcnNpb24KLSNkZWZpbmUgZGVmbGF0
ZSBNT1pfWl9kZWZsYXRlCi0jZGVmaW5lIGRlZmxhdGVFbmQgTU9aX1pfZGVmbGF0ZUVuZAotI2Rl
ZmluZSBpbmZsYXRlIE1PWl9aX2luZmxhdGUKLSNkZWZpbmUgaW5mbGF0ZUVuZCBNT1pfWl9pbmZs
YXRlRW5kCi0jZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5IE1PWl9aX2RlZmxhdGVTZXREaWN0
aW9uYXJ5Ci0jZGVmaW5lIGRlZmxhdGVDb3B5IE1PWl9aX2RlZmxhdGVDb3B5Ci0jZGVmaW5lIGRl
ZmxhdGVSZXNldCBNT1pfWl9kZWZsYXRlUmVzZXQKLSNkZWZpbmUgZGVmbGF0ZVBhcmFtcyBNT1pf
Wl9kZWZsYXRlUGFyYW1zCi0jZGVmaW5lIGRlZmxhdGVCb3VuZCBNT1pfWl9kZWZsYXRlQm91bmQK
LSNkZWZpbmUgZGVmbGF0ZVByaW1lIE1PWl9aX2RlZmxhdGVQcmltZQotI2RlZmluZSBpbmZsYXRl
U2V0RGljdGlvbmFyeSBNT1pfWl9pbmZsYXRlU2V0RGljdGlvbmFyeQotI2RlZmluZSBpbmZsYXRl
U3luYyBNT1pfWl9pbmZsYXRlU3luYwotI2RlZmluZSBpbmZsYXRlQ29weSBNT1pfWl9pbmZsYXRl
Q29weQotI2RlZmluZSBpbmZsYXRlUmVzZXQgTU9aX1pfaW5mbGF0ZVJlc2V0Ci0jZGVmaW5lIGlu
ZmxhdGVCYWNrIE1PWl9aX2luZmxhdGVCYWNrCi0jZGVmaW5lIGluZmxhdGVCYWNrRW5kIE1PWl9a
X2luZmxhdGVCYWNrRW5kCi0jZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgTU9aX1pfemxpYkNvbXBp
bGVGbGFncwotI2RlZmluZSBjb21wcmVzcyBNT1pfWl9jb21wcmVzcwotI2RlZmluZSBjb21wcmVz
czIgTU9aX1pfY29tcHJlc3MyCi0jZGVmaW5lIGNvbXByZXNzQm91bmQgTU9aX1pfY29tcHJlc3NC
b3VuZAotI2RlZmluZSB1bmNvbXByZXNzIE1PWl9aX3VuY29tcHJlc3MKLSNkZWZpbmUgZ3pvcGVu
IE1PWl9aX2d6b3BlbgotI2RlZmluZSBnemRvcGVuIE1PWl9aX2d6ZG9wZW4KLSNkZWZpbmUgZ3pz
ZXRwYXJhbXMgTU9aX1pfZ3pzZXRwYXJhbXMKLSNkZWZpbmUgZ3pyZWFkIE1PWl9aX2d6cmVhZAot
I2RlZmluZSBnendyaXRlIE1PWl9aX2d6d3JpdGUKLSNkZWZpbmUgZ3pwcmludGYgTU9aX1pfZ3pw
cmludGYKLSNkZWZpbmUgZ3pwdXRzIE1PWl9aX2d6cHV0cwotI2RlZmluZSBnemdldHMgTU9aX1pf
Z3pnZXRzCi0jZGVmaW5lIGd6cHV0YyBNT1pfWl9nenB1dGMKLSNkZWZpbmUgZ3pnZXRjIE1PWl9a
X2d6Z2V0YwotI2RlZmluZSBnenVuZ2V0YyBNT1pfWl9nenVuZ2V0YwotI2RlZmluZSBnemZsdXNo
IE1PWl9aX2d6Zmx1c2gKLSNkZWZpbmUgZ3pzZWVrIE1PWl9aX2d6c2VlawotI2RlZmluZSBnenJl
d2luZCBNT1pfWl9nenJld2luZAotI2RlZmluZSBnenRlbGwgTU9aX1pfZ3p0ZWxsCi0jZGVmaW5l
IGd6ZW9mIE1PWl9aX2d6ZW9mCi0jZGVmaW5lIGd6Y2xvc2UgTU9aX1pfZ3pjbG9zZQotI2RlZmlu
ZSBnemVycm9yIE1PWl9aX2d6ZXJyb3IKLSNkZWZpbmUgZ3pjbGVhcmVyciBNT1pfWl9nemNsZWFy
ZXJyCi0jZGVmaW5lIGFkbGVyMzIgTU9aX1pfYWRsZXIzMgotI2RlZmluZSBjcmMzMiBNT1pfWl9j
cmMzMgotI2RlZmluZSBkZWZsYXRlSW5pdF8gTU9aX1pfZGVmbGF0ZUluaXRfCi0jZGVmaW5lIGRl
ZmxhdGVJbml0Ml8gTU9aX1pfZGVmbGF0ZUluaXQyXwotI2RlZmluZSBpbmZsYXRlSW5pdF8gTU9a
X1pfaW5mbGF0ZUluaXRfCi0jZGVmaW5lIGluZmxhdGVJbml0Ml8gTU9aX1pfaW5mbGF0ZUluaXQy
XwotI2RlZmluZSBpbmZsYXRlQmFja0luaXRfIE1PWl9aX2luZmxhdGVCYWNrSW5pdF8KLSNkZWZp
bmUgaW5mbGF0ZVN5bmNQb2ludCBNT1pfWl9pbmZsYXRlU3luY1BvaW50Ci0jZGVmaW5lIGdldF9j
cmNfdGFibGUgTU9aX1pfZ2V0X2NyY190YWJsZQotI2RlZmluZSB6RXJyb3IgTU9aX1pfekVycm9y
Ci0KLS8qIEV4dHJhIGdsb2JhbCBzeW1ib2xzICovCi0jZGVmaW5lIF9kaXN0X2NvZGUgTU9aX1pf
X2Rpc3RfY29kZQotI2RlZmluZSBfbGVuZ3RoX2NvZGUgTU9aX1pfX2xlbmd0aF9jb2RlCi0jZGVm
aW5lIF90cl9hbGlnbiBNT1pfWl9fdHJfYWxpZ24KLSNkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrIE1P
Wl9aX190cl9mbHVzaF9ibG9jawotI2RlZmluZSBfdHJfaW5pdCBNT1pfWl9fdHJfaW5pdAotI2Rl
ZmluZSBfdHJfc3RvcmVkX2Jsb2NrIE1PWl9aX190cl9zdG9yZWRfYmxvY2sKLSNkZWZpbmUgX3Ry
X3RhbGx5IE1PWl9aX190cl90YWxseQotI2RlZmluZSBkZWZsYXRlX2NvcHlyaWdodCBNT1pfWl9k
ZWZsYXRlX2NvcHlyaWdodAotI2RlZmluZSBpbmZsYXRlX2NvcHlyaWdodCBNT1pfWl9pbmZsYXRl
X2NvcHlyaWdodAotI2RlZmluZSBpbmZsYXRlX2Zhc3QgTU9aX1pfaW5mbGF0ZV9mYXN0Ci0jZGVm
aW5lIGluZmxhdGVfdGFibGUgTU9aX1pfaW5mbGF0ZV90YWJsZQotI2RlZmluZSB6X2Vycm1zZyBN
T1pfWl96X2Vycm1zZwotI2RlZmluZSB6Y2FsbG9jIE1PWl9aX3pjYWxsb2MKLSNkZWZpbmUgemNm
cmVlIE1PWl9aX3pjZnJlZQotI2RlZmluZSBhbGxvY19mdW5jIE1PWl9aX2FsbG9jX2Z1bmMKLSNk
ZWZpbmUgZnJlZV9mdW5jIE1PWl9aX2ZyZWVfZnVuYwotI2RlZmluZSBpbl9mdW5jIE1PWl9aX2lu
X2Z1bmMKLSNkZWZpbmUgb3V0X2Z1bmMgTU9aX1pfb3V0X2Z1bmMKLQotLyogTmV3IGFzIG9mIGxp
YnBuZy0xLjIuMyAqLwotI2RlZmluZSBhZGxlcjMyX2NvbWJpbmUgTU9aX1pfYWRsZXIzMl9jb21i
aW5lCi0jZGVmaW5lIGNyYzMyX2NvbWJpbmUgTU9aX1pfY3JjMzJfY29tYmluZQotI2RlZmluZSBk
ZWZsYXRlU2V0SGVhZGVyIE1PWl9aX2RlZmxhdGVTZXRIZWFkZXIKLSNkZWZpbmUgZGVmbGF0ZVR1
bmUgTU9aX1pfZGVmbGF0ZVR1bmUKLSNkZWZpbmUgZ3pkaXJlY3QgTU9aX1pfZ3pkaXJlY3QKLSNk
ZWZpbmUgaW5mbGF0ZVByaW1lIE1PWl9aX2luZmxhdGVQcmltZQotI2RlZmluZSBpbmZsYXRlR2V0
SGVhZGVyIE1PWl9aX2luZmxhdGVHZXRIZWFkZXIKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJlZXMuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJlZXMuYwkocmV2aXNpb24gNTM3MTkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJlZXMuYwkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjE5ICswLDAgQEAKLS8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRh
dGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4t
bG91cCBHYWlsbHkKLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBz
ZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKgotICogIEFMR09SSVRITQot
ICoKLSAqICAgICAgVGhlICJkZWZsYXRpb24iIHByb2Nlc3MgdXNlcyBzZXZlcmFsIEh1ZmZtYW4g
dHJlZXMuIFRoZSBtb3JlCi0gKiAgICAgIGNvbW1vbiBzb3VyY2UgdmFsdWVzIGFyZSByZXByZXNl
bnRlZCBieSBzaG9ydGVyIGJpdCBzZXF1ZW5jZXMuCi0gKgotICogICAgICBFYWNoIGNvZGUgdHJl
ZSBpcyBzdG9yZWQgaW4gYSBjb21wcmVzc2VkIGZvcm0gd2hpY2ggaXMgaXRzZWxmCi0gKiBhIEh1
ZmZtYW4gZW5jb2Rpbmcgb2YgdGhlIGxlbmd0aHMgb2YgYWxsIHRoZSBjb2RlIHN0cmluZ3MgKGlu
Ci0gKiBhc2NlbmRpbmcgb3JkZXIgYnkgc291cmNlIHZhbHVlcykuICBUaGUgYWN0dWFsIGNvZGUg
c3RyaW5ncyBhcmUKLSAqIHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgbGVuZ3RocyBpbiB0aGUgaW5m
bGF0ZSBwcm9jZXNzLCBhcyBkZXNjcmliZWQKLSAqIGluIHRoZSBkZWZsYXRlIHNwZWNpZmljYXRp
b24uCi0gKgotICogIFJFRkVSRU5DRVMKLSAqCi0gKiAgICAgIERldXRzY2gsIEwuUC4sIidEZWZs
YXRlJyBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iLgotICogICAgICBBdmFp
bGFibGUgaW4gZnRwLnV1Lm5ldDovcHViL2FyY2hpdmluZy96aXAvZG9jL2RlZmxhdGUtMS4xLmRv
YwotICoKLSAqICAgICAgU3RvcmVyLCBKYW1lcyBBLgotICogICAgICAgICAgRGF0YSBDb21wcmVz
c2lvbjogIE1ldGhvZHMgYW5kIFRoZW9yeSwgcHAuIDQ5LTUwLgotICogICAgICAgICAgQ29tcHV0
ZXIgU2NpZW5jZSBQcmVzcywgMTk4OC4gIElTQk4gMC03MTY3LTgxNTYtNS4KLSAqCi0gKiAgICAg
IFNlZGdld2ljaywgUi4KLSAqICAgICAgICAgIEFsZ29yaXRobXMsIHAyOTAuCi0gKiAgICAgICAg
ICBBZGRpc29uLVdlc2xleSwgMTk4My4gSVNCTiAwLTIwMS0wNjY3Mi02LgotICovCi0KLS8qIEAo
IykgJElkOiB0cmVlcy5jLHYgMy42IDIwMDUvMDgvMDQgMTk6MTQ6MTQgdG9yJWNzLmJyb3duLmVk
dSBFeHAgJCAqLwotCi0vKiAjZGVmaW5lIEdFTl9UUkVFU19IICovCi0KLSNpbmNsdWRlICJkZWZs
YXRlLmgiCi0KLSNpZmRlZiBERUJVRwotIyAgaW5jbHVkZSA8Y3R5cGUuaD4KLSNlbmRpZgotCi0v
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqIENvbnN0YW50cwotICovCi0KLSNkZWZpbmUgTUFYX0JM
X0JJVFMgNwotLyogQml0IGxlbmd0aCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JMX0JJVFMg
Yml0cyAqLwotCi0jZGVmaW5lIEVORF9CTE9DSyAyNTYKLS8qIGVuZCBvZiBibG9jayBsaXRlcmFs
IGNvZGUgKi8KLQotI2RlZmluZSBSRVBfM182ICAgICAgMTYKLS8qIHJlcGVhdCBwcmV2aW91cyBi
aXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KLQotI2RlZmlu
ZSBSRVBaXzNfMTAgICAgMTcKLS8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDMtMTAgdGltZXMgICgz
IGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqLwotCi0jZGVmaW5lIFJFUFpfMTFfMTM4ICAxOAotLyog
cmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3Vu
dCkgKi8KLQotbG9jYWwgY29uc3QgaW50IGV4dHJhX2xiaXRzW0xFTkdUSF9DT0RFU10gLyogZXh0
cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqLwotICAgPSB7MCwwLDAsMCwwLDAsMCwwLDEs
MSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwfTsKLQotbG9jYWwgY29uc3Qg
aW50IGV4dHJhX2RiaXRzW0RfQ09ERVNdIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2Ug
Y29kZSAqLwotICAgPSB7MCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDks
OSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM307Ci0KLWxvY2FsIGNvbnN0IGludCBleHRyYV9ibGJp
dHNbQkxfQ09ERVNdLyogZXh0cmEgYml0cyBmb3IgZWFjaCBiaXQgbGVuZ3RoIGNvZGUgKi8KLSAg
ID0gezAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDd9OwotCi1sb2NhbCBjb25z
dCB1Y2ggYmxfb3JkZXJbQkxfQ09ERVNdCi0gICA9IHsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwx
MSw0LDEyLDMsMTMsMiwxNCwxLDE1fTsKLS8qIFRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3Ro
IGNvZGVzIGFyZSBzZW50IGluIG9yZGVyIG9mIGRlY3JlYXNpbmcKLSAqIHByb2JhYmlsaXR5LCB0
byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNv
ZGVzLgotICovCi0KLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFyKSkKLS8qIE51
bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBiZSBpbXBsZW1l
bnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikKLSAqLwotCi0v
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXpl
ZCBvbmx5IG9uY2UuCi0gKi8KLQotI2RlZmluZSBESVNUX0NPREVfTEVOICA1MTIgLyogc2VlIGRl
ZmluaXRpb24gb2YgYXJyYXkgZGlzdF9jb2RlIGJlbG93ICovCi0KLSNpZiBkZWZpbmVkKEdFTl9U
UkVFU19IKSB8fCAhZGVmaW5lZChTVERDKQotLyogbm9uIEFOU0kgY29tcGlsZXJzIG1heSBub3Qg
YWNjZXB0IHRyZWVzLmggKi8KLQotbG9jYWwgY3RfZGF0YSBzdGF0aWNfbHRyZWVbTF9DT0RFUysy
XTsKLS8qIFRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlLiBTaW5jZSB0aGUgYml0IGxlbmd0aHMgYXJl
IGltcG9zZWQsIHRoZXJlIGlzIG5vCi0gKiBuZWVkIGZvciB0aGUgTF9DT0RFUyBleHRyYSBjb2Rl
cyB1c2VkIGR1cmluZyBoZWFwIGNvbnN0cnVjdGlvbi4gSG93ZXZlcgotICogVGhlIGNvZGVzIDI4
NiBhbmQgMjg3IGFyZSBuZWVkZWQgdG8gYnVpbGQgYSBjYW5vbmljYWwgdHJlZSAoc2VlIF90cl9p
bml0Ci0gKiBiZWxvdykuCi0gKi8KLQotbG9jYWwgY3RfZGF0YSBzdGF0aWNfZHRyZWVbRF9DT0RF
U107Ci0vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJl
ZSBzaW5jZSBhbGwgY29kZXMgdXNlCi0gKiA1IGJpdHMuKQotICovCi0KLXVjaCBfZGlzdF9jb2Rl
W0RJU1RfQ09ERV9MRU5dOwotLyogRGlzdGFuY2UgY29kZXMuIFRoZSBmaXJzdCAyNTYgdmFsdWVz
IGNvcnJlc3BvbmQgdG8gdGhlIGRpc3RhbmNlcwotICogMyAuLiAyNTgsIHRoZSBsYXN0IDI1NiB2
YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgdG9wIDggYml0cyBvZgotICogdGhlIDE1IGJpdCBkaXN0
YW5jZXMuCi0gKi8KLQotdWNoIF9sZW5ndGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdOwot
LyogbGVuZ3RoIGNvZGUgZm9yIGVhY2ggbm9ybWFsaXplZCBtYXRjaCBsZW5ndGggKDAgPT0gTUlO
X01BVENIKSAqLwotCi1sb2NhbCBpbnQgYmFzZV9sZW5ndGhbTEVOR1RIX0NPREVTXTsKLS8qIEZp
cnN0IG5vcm1hbGl6ZWQgbGVuZ3RoIGZvciBlYWNoIGNvZGUgKDAgPSBNSU5fTUFUQ0gpICovCi0K
LWxvY2FsIGludCBiYXNlX2Rpc3RbRF9DT0RFU107Ci0vKiBGaXJzdCBub3JtYWxpemVkIGRpc3Rh
bmNlIGZvciBlYWNoIGNvZGUgKDAgPSBkaXN0YW5jZSBvZiAxKSAqLwotCi0jZWxzZQotIyAgaW5j
bHVkZSAidHJlZXMuaCIKLSNlbmRpZiAvKiBHRU5fVFJFRVNfSCAqLwotCi1zdHJ1Y3Qgc3RhdGlj
X3RyZWVfZGVzY19zIHsKLSAgICBjb25zdCBjdF9kYXRhICpzdGF0aWNfdHJlZTsgIC8qIHN0YXRp
YyB0cmVlIG9yIE5VTEwgKi8KLSAgICBjb25zdCBpbnRmICpleHRyYV9iaXRzOyAgICAgIC8qIGV4
dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovCi0gICAgaW50ICAgICBleHRyYV9iYXNl
OyAgICAgICAgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovCi0gICAgaW50ICAgICBl
bGVtczsgICAgICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVl
ICovCi0gICAgaW50ICAgICBtYXhfbGVuZ3RoOyAgICAgICAgICAvKiBtYXggYml0IGxlbmd0aCBm
b3IgdGhlIGNvZGVzICovCi19OwotCi1sb2NhbCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfbF9k
ZXNjID0KLXtzdGF0aWNfbHRyZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUysxLCBMX0NPREVTLCBN
QVhfQklUU307Ci0KLWxvY2FsIHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19kX2Rlc2MgPQote3N0
YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsICAgICAgICAgIERfQ09ERVMsIE1BWF9CSVRTfTsK
LQotbG9jYWwgc3RhdGljX3RyZWVfZGVzYyAgc3RhdGljX2JsX2Rlc2MgPQoteyhjb25zdCBjdF9k
YXRhICopMCwgZXh0cmFfYmxiaXRzLCAwLCAgIEJMX0NPREVTLCBNQVhfQkxfQklUU307Ci0KLS8q
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotICogTG9jYWwgKHN0YXRpYykgcm91dGluZXMgaW4gdGhpcyBm
aWxlLgotICovCi0KLWxvY2FsIHZvaWQgdHJfc3RhdGljX2luaXQgT0YoKHZvaWQpKTsKLWxvY2Fs
IHZvaWQgaW5pdF9ibG9jayAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIHZvaWQg
cHFkb3duaGVhcCAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEgKnRyZWUsIGludCBr
KSk7Ci1sb2NhbCB2b2lkIGdlbl9iaXRsZW4gICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCB0cmVl
X2Rlc2MgKmRlc2MpKTsKLWxvY2FsIHZvaWQgZ2VuX2NvZGVzICAgICAgT0YoKGN0X2RhdGEgKnRy
ZWUsIGludCBtYXhfY29kZSwgdXNoZiAqYmxfY291bnQpKTsKLWxvY2FsIHZvaWQgYnVpbGRfdHJl
ZSAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHRyZWVfZGVzYyAqZGVzYykpOwotbG9jYWwgdm9p
ZCBzY2FuX3RyZWUgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY3RfZGF0YSAqdHJlZSwgaW50
IG1heF9jb2RlKSk7Ci1sb2NhbCB2b2lkIHNlbmRfdHJlZSAgICAgIE9GKChkZWZsYXRlX3N0YXRl
ICpzLCBjdF9kYXRhICp0cmVlLCBpbnQgbWF4X2NvZGUpKTsKLWxvY2FsIGludCAgYnVpbGRfYmxf
dHJlZSAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMg
T0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBsY29kZXMsIGludCBkY29kZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYmxjb2RlcykpOwotbG9jYWwgdm9pZCBjb21wcmVzc19i
bG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY3RfZGF0YSAqbHRyZWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdF9kYXRhICpkdHJlZSkpOwotbG9jYWwgdm9pZCBzZXRfZGF0YV90
eXBlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwotbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBP
RigodW5zaWduZWQgdmFsdWUsIGludCBsZW5ndGgpKTsKLWxvY2FsIHZvaWQgYmlfd2luZHVwICAg
ICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIHZvaWQgYmlfZmx1c2ggICAgICAgT0Yo
KGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2FsIHZvaWQgY29weV9ibG9jayAgICAgT0YoKGRlZmxh
dGVfc3RhdGUgKnMsIGNoYXJmICpidWYsIHVuc2lnbmVkIGxlbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBoZWFkZXIpKTsKLQotI2lmZGVmIEdFTl9UUkVFU19ICi1sb2NhbCB2
b2lkIGdlbl90cmVlc19oZWFkZXIgT0YoKHZvaWQpKTsKLSNlbmRpZgotCi0jaWZuZGVmIERFQlVH
Ci0jICBkZWZpbmUgc2VuZF9jb2RlKHMsIGMsIHRyZWUpIHNlbmRfYml0cyhzLCB0cmVlW2NdLkNv
ZGUsIHRyZWVbY10uTGVuKQotICAgLyogU2VuZCBhIGNvZGUgb2YgdGhlIGdpdmVuIHRyZWUuIGMg
YW5kIHRyZWUgbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMgKi8KLQotI2Vsc2UgLyogREVCVUcg
Ki8KLSMgIGRlZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgXAotICAgICB7IGlmICh6X3ZlcmJv
c2U+MikgZnByaW50ZihzdGRlcnIsIlxuY2QgJTNkICIsKGMpKTsgXAotICAgICAgIHNlbmRfYml0
cyhzLCB0cmVlW2NdLkNvZGUsIHRyZWVbY10uTGVuKTsgfQotI2VuZGlmCi0KLS8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uCi0g
KiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHBlbmRpbmdCdWYuCi0gKi8K
LSNkZWZpbmUgcHV0X3Nob3J0KHMsIHcpIHsgXAotICAgIHB1dF9ieXRlKHMsICh1Y2gpKCh3KSAm
IDB4ZmYpKTsgXAotICAgIHB1dF9ieXRlKHMsICh1Y2gpKCh1c2gpKHcpID4+IDgpKTsgXAotfQot
Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNlbmQgYSB2YWx1ZSBvbiBhIGdpdmVuIG51bWJl
ciBvZiBiaXRzLgotICogSU4gYXNzZXJ0aW9uOiBsZW5ndGggPD0gMTYgYW5kIHZhbHVlIGZpdHMg
aW4gbGVuZ3RoIGJpdHMuCi0gKi8KLSNpZmRlZiBERUJVRwotbG9jYWwgdm9pZCBzZW5kX2JpdHMg
ICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IHZhbHVlLCBpbnQgbGVuZ3RoKSk7Ci0KLWxv
Y2FsIHZvaWQgc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpCi0gICAgZGVmbGF0ZV9zdGF0ZSAq
czsKLSAgICBpbnQgdmFsdWU7ICAvKiB2YWx1ZSB0byBzZW5kICovCi0gICAgaW50IGxlbmd0aDsg
LyogbnVtYmVyIG9mIGJpdHMgKi8KLXsKLSAgICBUcmFjZXZ2KChzdGRlcnIsIiBsICUyZCB2ICU0
eCAiLCBsZW5ndGgsIHZhbHVlKSk7Ci0gICAgQXNzZXJ0KGxlbmd0aCA+IDAgJiYgbGVuZ3RoIDw9
IDE1LCAiaW52YWxpZCBsZW5ndGgiKTsKLSAgICBzLT5iaXRzX3NlbnQgKz0gKHVsZylsZW5ndGg7
Ci0KLSAgICAvKiBJZiBub3QgZW5vdWdoIHJvb20gaW4gYmlfYnVmLCB1c2UgKHZhbGlkKSBiaXRz
IGZyb20gYmlfYnVmIGFuZAotICAgICAqICgxNiAtIGJpX3ZhbGlkKSBiaXRzIGZyb20gdmFsdWUs
IGxlYXZpbmcgKHdpZHRoIC0gKDE2LWJpX3ZhbGlkKSkKLSAgICAgKiB1bnVzZWQgYml0cyBpbiB2
YWx1ZS4KLSAgICAgKi8KLSAgICBpZiAocy0+YmlfdmFsaWQgPiAoaW50KUJ1Zl9zaXplIC0gbGVu
Z3RoKSB7Ci0gICAgICAgIHMtPmJpX2J1ZiB8PSAodmFsdWUgPDwgcy0+YmlfdmFsaWQpOwotICAg
ICAgICBwdXRfc2hvcnQocywgcy0+YmlfYnVmKTsKLSAgICAgICAgcy0+YmlfYnVmID0gKHVzaCl2
YWx1ZSA+PiAoQnVmX3NpemUgLSBzLT5iaV92YWxpZCk7Ci0gICAgICAgIHMtPmJpX3ZhbGlkICs9
IGxlbmd0aCAtIEJ1Zl9zaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHMtPmJpX2J1ZiB8PSB2
YWx1ZSA8PCBzLT5iaV92YWxpZDsKLSAgICAgICAgcy0+YmlfdmFsaWQgKz0gbGVuZ3RoOwotICAg
IH0KLX0KLSNlbHNlIC8qICFERUJVRyAqLwotCi0jZGVmaW5lIHNlbmRfYml0cyhzLCB2YWx1ZSwg
bGVuZ3RoKSBcCi17IGludCBsZW4gPSBsZW5ndGg7XAotICBpZiAocy0+YmlfdmFsaWQgPiAoaW50
KUJ1Zl9zaXplIC0gbGVuKSB7XAotICAgIGludCB2YWwgPSB2YWx1ZTtcCi0gICAgcy0+YmlfYnVm
IHw9ICh2YWwgPDwgcy0+YmlfdmFsaWQpO1wKLSAgICBwdXRfc2hvcnQocywgcy0+YmlfYnVmKTtc
Ci0gICAgcy0+YmlfYnVmID0gKHVzaCl2YWwgPj4gKEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQpO1wK
LSAgICBzLT5iaV92YWxpZCArPSBsZW4gLSBCdWZfc2l6ZTtcCi0gIH0gZWxzZSB7XAotICAgIHMt
PmJpX2J1ZiB8PSAodmFsdWUpIDw8IHMtPmJpX3ZhbGlkO1wKLSAgICBzLT5iaV92YWxpZCArPSBs
ZW47XAotICB9XAotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLQotLyogdGhlIGFyZ3VtZW50cyBt
dXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IEluaXRpYWxpemUgdGhlIHZhcmlvdXMgJ2NvbnN0YW50JyB0YWJsZXMuCi0gKi8KLWxvY2FsIHZv
aWQgdHJfc3RhdGljX2luaXQoKQotewotI2lmIGRlZmluZWQoR0VOX1RSRUVTX0gpIHx8ICFkZWZp
bmVkKFNUREMpCi0gICAgc3RhdGljIGludCBzdGF0aWNfaW5pdF9kb25lID0gMDsKLSAgICBpbnQg
bjsgICAgICAgIC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqLwotICAgIGludCBiaXRz
OyAgICAgLyogYml0IGNvdW50ZXIgKi8KLSAgICBpbnQgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1
ZSAqLwotICAgIGludCBjb2RlOyAgICAgLyogY29kZSB2YWx1ZSAqLwotICAgIGludCBkaXN0OyAg
ICAgLyogZGlzdGFuY2UgaW5kZXggKi8KLSAgICB1c2ggYmxfY291bnRbTUFYX0JJVFMrMV07Ci0g
ICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0
cmVlICovCi0KLSAgICBpZiAoc3RhdGljX2luaXRfZG9uZSkgcmV0dXJuOwotCi0gICAgLyogRm9y
IHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IGluaXRpYWxp
emVkOiAqLwotICAgIHN0YXRpY19sX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfbHRyZWU7Ci0g
ICAgc3RhdGljX2xfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfbGJpdHM7Ci0gICAgc3RhdGljX2Rf
ZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19kdHJlZTsKLSAgICBzdGF0aWNfZF9kZXNjLmV4dHJh
X2JpdHMgPSBleHRyYV9kYml0czsKLSAgICBzdGF0aWNfYmxfZGVzYy5leHRyYV9iaXRzID0gZXh0
cmFfYmxiaXRzOwotCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1
NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqLwotICAgIGxlbmd0aCA9IDA7Ci0gICAgZm9yIChj
b2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUy0xOyBjb2RlKyspIHsKLSAgICAgICAgYmFzZV9s
ZW5ndGhbY29kZV0gPSBsZW5ndGg7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCAoMTw8ZXh0cmFf
bGJpdHNbY29kZV0pOyBuKyspIHsKLSAgICAgICAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10g
PSAodWNoKWNvZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQXNzZXJ0IChsZW5ndGggPT0gMjU2
LCAidHJfc3RhdGljX2luaXQ6IGxlbmd0aCAhPSAyNTYiKTsKLSAgICAvKiBOb3RlIHRoYXQgdGhl
IGxlbmd0aCAyNTUgKG1hdGNoIGxlbmd0aCAyNTgpIGNhbiBiZSByZXByZXNlbnRlZAotICAgICAq
IGluIHR3byBkaWZmZXJlbnQgd2F5czogY29kZSAyODQgKyA1IGJpdHMgb3IgY29kZSAyODUsIHNv
IHdlCi0gICAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVu
Y29kaW5nOgotICAgICAqLwotICAgIF9sZW5ndGhfY29kZVtsZW5ndGgtMV0gPSAodWNoKWNvZGU7
Ci0KLSAgICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBj
b2RlICgwLi4yOSkgKi8KLSAgICBkaXN0ID0gMDsKLSAgICBmb3IgKGNvZGUgPSAwIDsgY29kZSA8
IDE2OyBjb2RlKyspIHsKLSAgICAgICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKLSAgICAgICAg
Zm9yIChuID0gMDsgbiA8ICgxPDxleHRyYV9kYml0c1tjb2RlXSk7IG4rKykgewotICAgICAgICAg
ICAgX2Rpc3RfY29kZVtkaXN0KytdID0gKHVjaCljb2RlOwotICAgICAgICB9Ci0gICAgfQotICAg
IEFzc2VydCAoZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTYiKTsKLSAg
ICBkaXN0ID4+PSA3OyAvKiBmcm9tIG5vdyBvbiwgYWxsIGRpc3RhbmNlcyBhcmUgZGl2aWRlZCBi
eSAxMjggKi8KLSAgICBmb3IgKCA7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHsKLSAgICAgICAg
YmFzZV9kaXN0W2NvZGVdID0gZGlzdCA8PCA3OwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKDE8
PChleHRyYV9kYml0c1tjb2RlXS03KSk7IG4rKykgewotICAgICAgICAgICAgX2Rpc3RfY29kZVsy
NTYgKyBkaXN0KytdID0gKHVjaCljb2RlOwotICAgICAgICB9Ci0gICAgfQotICAgIEFzc2VydCAo
ZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyIik7Ci0KLSAgICAv
KiBDb25zdHJ1Y3QgdGhlIGNvZGVzIG9mIHRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlICovCi0gICAg
Zm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSBibF9jb3VudFtiaXRzXSA9
IDA7Ci0gICAgbiA9IDA7Ci0gICAgd2hpbGUgKG4gPD0gMTQzKSBzdGF0aWNfbHRyZWVbbisrXS5M
ZW4gPSA4LCBibF9jb3VudFs4XSsrOwotICAgIHdoaWxlIChuIDw9IDI1NSkgc3RhdGljX2x0cmVl
W24rK10uTGVuID0gOSwgYmxfY291bnRbOV0rKzsKLSAgICB3aGlsZSAobiA8PSAyNzkpIHN0YXRp
Y19sdHJlZVtuKytdLkxlbiA9IDcsIGJsX2NvdW50WzddKys7Ci0gICAgd2hpbGUgKG4gPD0gMjg3
KSBzdGF0aWNfbHRyZWVbbisrXS5MZW4gPSA4LCBibF9jb3VudFs4XSsrOwotICAgIC8qIENvZGVz
IDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRo
ZQotICAgICAqIHRyZWUgY29uc3RydWN0aW9uIHRvIGdldCBhIGNhbm9uaWNhbCBIdWZmbWFuIHRy
ZWUgKGxvbmdlc3QgY29kZQotICAgICAqIGFsbCBvbmVzKQotICAgICAqLwotICAgIGdlbl9jb2Rl
cygoY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwgTF9DT0RFUysxLCBibF9jb3VudCk7Ci0KLSAgICAv
KiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUgaXMgdHJpdmlhbDogKi8KLSAgICBmb3IgKG4gPSAw
OyBuIDwgRF9DT0RFUzsgbisrKSB7Ci0gICAgICAgIHN0YXRpY19kdHJlZVtuXS5MZW4gPSA1Owot
ICAgICAgICBzdGF0aWNfZHRyZWVbbl0uQ29kZSA9IGJpX3JldmVyc2UoKHVuc2lnbmVkKW4sIDUp
OwotICAgIH0KLSAgICBzdGF0aWNfaW5pdF9kb25lID0gMTsKLQotIyAgaWZkZWYgR0VOX1RSRUVT
X0gKLSAgICBnZW5fdHJlZXNfaGVhZGVyKCk7Ci0jICBlbmRpZgotI2VuZGlmIC8qIGRlZmluZWQo
R0VOX1RSRUVTX0gpIHx8ICFkZWZpbmVkKFNUREMpICovCi19Ci0KLS8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotICogR2VuZXJlcmF0ZSB0aGUgZmlsZSB0cmVlcy5oIGRlc2NyaWJpbmcgdGhlIHN0YXRp
YyB0cmVlcy4KLSAqLwotI2lmZGVmIEdFTl9UUkVFU19ICi0jICBpZm5kZWYgREVCVUcKLSMgICAg
aW5jbHVkZSA8c3RkaW8uaD4KLSMgIGVuZGlmCi0KLSMgIGRlZmluZSBTRVBBUkFUT1IoaSwgbGFz
dCwgd2lkdGgpIFwKLSAgICAgICgoaSkgPT0gKGxhc3QpPyAiXG59O1xuXG4iIDogICAgXAotICAg
ICAgICgoaSkgJSAod2lkdGgpID09ICh3aWR0aCktMSA/ICIsXG4iIDogIiwgIikpCi0KLXZvaWQg
Z2VuX3RyZWVzX2hlYWRlcigpCi17Ci0gICAgRklMRSAqaGVhZGVyID0gZm9wZW4oInRyZWVzLmgi
LCAidyIpOwotICAgIGludCBpOwotCi0gICAgQXNzZXJ0IChoZWFkZXIgIT0gTlVMTCwgIkNhbid0
IG9wZW4gdHJlZXMuaCIpOwotICAgIGZwcmludGYoaGVhZGVyLAotICAgICAgICAgICAgIi8qIGhl
YWRlciBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2l0aCAtREdFTl9UUkVFU19IICovXG5cbiIpOwot
Ci0gICAgZnByaW50ZihoZWFkZXIsICJsb2NhbCBjb25zdCBjdF9kYXRhIHN0YXRpY19sdHJlZVtM
X0NPREVTKzJdID0ge1xuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IExfQ09ERVMrMjsgaSsrKSB7
Ci0gICAgICAgIGZwcmludGYoaGVhZGVyLCAie3slM3V9LHslM3V9fSVzIiwgc3RhdGljX2x0cmVl
W2ldLkNvZGUsCi0gICAgICAgICAgICAgICAgc3RhdGljX2x0cmVlW2ldLkxlbiwgU0VQQVJBVE9S
KGksIExfQ09ERVMrMSwgNSkpOwotICAgIH0KLQotICAgIGZwcmludGYoaGVhZGVyLCAibG9jYWwg
Y29uc3QgY3RfZGF0YSBzdGF0aWNfZHRyZWVbRF9DT0RFU10gPSB7XG4iKTsKLSAgICBmb3IgKGkg
PSAwOyBpIDwgRF9DT0RFUzsgaSsrKSB7Ci0gICAgICAgIGZwcmludGYoaGVhZGVyLCAie3slMnV9
LHslMnV9fSVzIiwgc3RhdGljX2R0cmVlW2ldLkNvZGUsCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2R0cmVlW2ldLkxlbiwgU0VQQVJBVE9SKGksIERfQ09ERVMtMSwgNSkpOwotICAgIH0KLQotICAg
IGZwcmludGYoaGVhZGVyLCAiY29uc3QgdWNoIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7
XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRElTVF9DT0RFX0xFTjsgaSsrKSB7Ci0gICAgICAg
IGZwcmludGYoaGVhZGVyLCAiJTJ1JXMiLCBfZGlzdF9jb2RlW2ldLAotICAgICAgICAgICAgICAg
IFNFUEFSQVRPUihpLCBESVNUX0NPREVfTEVOLTEsIDIwKSk7Ci0gICAgfQotCi0gICAgZnByaW50
ZihoZWFkZXIsICJjb25zdCB1Y2ggX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5fTUFUQ0grMV09
IHtcbiIpOwotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUFUQ0gtTUlOX01BVENIKzE7IGkrKykg
ewotICAgICAgICBmcHJpbnRmKGhlYWRlciwgIiUydSVzIiwgX2xlbmd0aF9jb2RlW2ldLAotICAg
ICAgICAgICAgICAgIFNFUEFSQVRPUihpLCBNQVhfTUFUQ0gtTUlOX01BVENILCAyMCkpOwotICAg
IH0KLQotICAgIGZwcmludGYoaGVhZGVyLCAibG9jYWwgY29uc3QgaW50IGJhc2VfbGVuZ3RoW0xF
TkdUSF9DT0RFU10gPSB7XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTEVOR1RIX0NPREVTOyBp
KyspIHsKLSAgICAgICAgZnByaW50ZihoZWFkZXIsICIlMXUlcyIsIGJhc2VfbGVuZ3RoW2ldLAot
ICAgICAgICAgICAgICAgIFNFUEFSQVRPUihpLCBMRU5HVEhfQ09ERVMtMSwgMjApKTsKLSAgICB9
Ci0KLSAgICBmcHJpbnRmKGhlYWRlciwgImxvY2FsIGNvbnN0IGludCBiYXNlX2Rpc3RbRF9DT0RF
U10gPSB7XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRF9DT0RFUzsgaSsrKSB7Ci0gICAgICAg
IGZwcmludGYoaGVhZGVyLCAiJTV1JXMiLCBiYXNlX2Rpc3RbaV0sCi0gICAgICAgICAgICAgICAg
U0VQQVJBVE9SKGksIERfQ09ERVMtMSwgMTApKTsKLSAgICB9Ci0KLSAgICBmY2xvc2UoaGVhZGVy
KTsKLX0KLSNlbmRpZiAvKiBHRU5fVFJFRVNfSCAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSAqIEluaXRpYWxpemUgdGhlIHRyZWUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIG5ldyB6bGliIHN0
cmVhbS4KLSAqLwotdm9pZCBfdHJfaW5pdChzKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci17Ci0g
ICAgdHJfc3RhdGljX2luaXQoKTsKLQotICAgIHMtPmxfZGVzYy5keW5fdHJlZSA9IHMtPmR5bl9s
dHJlZTsKLSAgICBzLT5sX2Rlc2Muc3RhdF9kZXNjID0gJnN0YXRpY19sX2Rlc2M7Ci0KLSAgICBz
LT5kX2Rlc2MuZHluX3RyZWUgPSBzLT5keW5fZHRyZWU7Ci0gICAgcy0+ZF9kZXNjLnN0YXRfZGVz
YyA9ICZzdGF0aWNfZF9kZXNjOwotCi0gICAgcy0+YmxfZGVzYy5keW5fdHJlZSA9IHMtPmJsX3Ry
ZWU7Ci0gICAgcy0+YmxfZGVzYy5zdGF0X2Rlc2MgPSAmc3RhdGljX2JsX2Rlc2M7Ci0KLSAgICBz
LT5iaV9idWYgPSAwOwotICAgIHMtPmJpX3ZhbGlkID0gMDsKLSAgICBzLT5sYXN0X2VvYl9sZW4g
PSA4OyAvKiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCi0jaWZkZWYgREVCVUcKLSAg
ICBzLT5jb21wcmVzc2VkX2xlbiA9IDBMOwotICAgIHMtPmJpdHNfc2VudCA9IDBMOwotI2VuZGlm
Ci0KLSAgICAvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgZmlyc3QgZmlsZTog
Ki8KLSAgICBpbml0X2Jsb2NrKHMpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIElu
aXRpYWxpemUgYSBuZXcgYmxvY2suCi0gKi8KLWxvY2FsIHZvaWQgaW5pdF9ibG9jayhzKQotICAg
IGRlZmxhdGVfc3RhdGUgKnM7Ci17Ci0gICAgaW50IG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBl
bGVtZW50cyAqLwotCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgdHJlZXMuICovCi0gICAgZm9yIChu
ID0gMDsgbiA8IExfQ09ERVM7ICBuKyspIHMtPmR5bl9sdHJlZVtuXS5GcmVxID0gMDsKLSAgICBm
b3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgcy0+ZHluX2R0cmVlW25dLkZyZXEgPSAwOwot
ICAgIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSBzLT5ibF90cmVlW25dLkZyZXEgPSAw
OwotCi0gICAgcy0+ZHluX2x0cmVlW0VORF9CTE9DS10uRnJlcSA9IDE7Ci0gICAgcy0+b3B0X2xl
biA9IHMtPnN0YXRpY19sZW4gPSAwTDsKLSAgICBzLT5sYXN0X2xpdCA9IHMtPm1hdGNoZXMgPSAw
OwotfQotCi0jZGVmaW5lIFNNQUxMRVNUIDEKLS8qIEluZGV4IHdpdGhpbiB0aGUgaGVhcCBhcnJh
eSBvZiBsZWFzdCBmcmVxdWVudCBub2RlIGluIHRoZSBIdWZmbWFuIHRyZWUgKi8KLQotCi0vKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBmcm9tIHRo
ZSBoZWFwIGFuZCByZWNyZWF0ZSB0aGUgaGVhcCB3aXRoCi0gKiBvbmUgbGVzcyBlbGVtZW50LiBV
cGRhdGVzIGhlYXAgYW5kIGhlYXBfbGVuLgotICovCi0jZGVmaW5lIHBxcmVtb3ZlKHMsIHRyZWUs
IHRvcCkgXAote1wKLSAgICB0b3AgPSBzLT5oZWFwW1NNQUxMRVNUXTsgXAotICAgIHMtPmhlYXBb
U01BTExFU1RdID0gcy0+aGVhcFtzLT5oZWFwX2xlbi0tXTsgXAotICAgIHBxZG93bmhlYXAocywg
dHJlZSwgU01BTExFU1QpOyBcCi19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29tcGFy
ZXMgdG8gc3VidHJlZXMsIHVzaW5nIHRoZSB0cmVlIGRlcHRoIGFzIHRpZSBicmVha2VyIHdoZW4K
LSAqIHRoZSBzdWJ0cmVlcyBoYXZlIGVxdWFsIGZyZXF1ZW5jeS4gVGhpcyBtaW5pbWl6ZXMgdGhl
IHdvcnN0IGNhc2UgbGVuZ3RoLgotICovCi0jZGVmaW5lIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVw
dGgpIFwKLSAgICh0cmVlW25dLkZyZXEgPCB0cmVlW21dLkZyZXEgfHwgXAotICAgKHRyZWVbbl0u
RnJlcSA9PSB0cmVlW21dLkZyZXEgJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKQotCi0vKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAqIFJlc3RvcmUgdGhlIGhlYXAgcHJvcGVydHkgYnkgbW92aW5nIGRv
d24gdGhlIHRyZWUgc3RhcnRpbmcgYXQgbm9kZSBrLAotICogZXhjaGFuZ2luZyBhIG5vZGUgd2l0
aCB0aGUgc21hbGxlc3Qgb2YgaXRzIHR3byBzb25zIGlmIG5lY2Vzc2FyeSwgc3RvcHBpbmcKLSAq
IHdoZW4gdGhlIGhlYXAgcHJvcGVydHkgaXMgcmUtZXN0YWJsaXNoZWQgKGVhY2ggZmF0aGVyIHNt
YWxsZXIgdGhhbiBpdHMKLSAqIHR3byBzb25zKS4KLSAqLwotbG9jYWwgdm9pZCBwcWRvd25oZWFw
KHMsIHRyZWUsIGspCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjdF9kYXRhICp0cmVlOyAg
LyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqLwotICAgIGludCBrOyAgICAgICAgICAgICAgIC8qIG5v
ZGUgdG8gbW92ZSBkb3duICovCi17Ci0gICAgaW50IHYgPSBzLT5oZWFwW2tdOwotICAgIGludCBq
ID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqLwotICAgIHdoaWxlIChqIDw9IHMtPmhlYXBf
bGVuKSB7Ci0gICAgICAgIC8qIFNldCBqIHRvIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIHNvbnM6
ICovCi0gICAgICAgIGlmIChqIDwgcy0+aGVhcF9sZW4gJiYKLSAgICAgICAgICAgIHNtYWxsZXIo
dHJlZSwgcy0+aGVhcFtqKzFdLCBzLT5oZWFwW2pdLCBzLT5kZXB0aCkpIHsKLSAgICAgICAgICAg
IGorKzsKLSAgICAgICAgfQotICAgICAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJv
dGggc29ucyAqLwotICAgICAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLT5oZWFwW2pdLCBzLT5k
ZXB0aCkpIGJyZWFrOwotCi0gICAgICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qg
c29uICovCi0gICAgICAgIHMtPmhlYXBba10gPSBzLT5oZWFwW2pdOyAgayA9IGo7Ci0KLSAgICAg
ICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBz
b24gb2YgayAqLwotICAgICAgICBqIDw8PSAxOwotICAgIH0KLSAgICBzLT5oZWFwW2tdID0gdjsK
LX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBs
ZW5ndGhzIGZvciBhIHRyZWUgYW5kIHVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aAotICogZm9y
IHRoZSBjdXJyZW50IGJsb2NrLgotICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGRzIGZyZXEgYW5k
IGRhZCBhcmUgc2V0LCBoZWFwW2hlYXBfbWF4XSBhbmQKLSAqICAgIGFib3ZlIGFyZSB0aGUgdHJl
ZSBub2RlcyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBmcmVxdWVuY3kuCi0gKiBPVVQgYXNzZXJ0aW9u
czogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aCwgdGhlCi0g
KiAgICAgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGZyZXF1ZW5jaWVzIGZvciBlYWNoIGJp
dCBsZW5ndGguCi0gKiAgICAgVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19s
ZW4gaXMgYWxzbyB1cGRhdGVkIGlmIHN0cmVlIGlzCi0gKiAgICAgbm90IG51bGwuCi0gKi8KLWxv
Y2FsIHZvaWQgZ2VuX2JpdGxlbihzLCBkZXNjKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAg
dHJlZV9kZXNjICpkZXNjOyAgICAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovCi17Ci0gICAgY3Rf
ZGF0YSAqdHJlZSAgICAgICAgPSBkZXNjLT5keW5fdHJlZTsKLSAgICBpbnQgbWF4X2NvZGUgICAg
ICAgICA9IGRlc2MtPm1heF9jb2RlOwotICAgIGNvbnN0IGN0X2RhdGEgKnN0cmVlID0gZGVzYy0+
c3RhdF9kZXNjLT5zdGF0aWNfdHJlZTsKLSAgICBjb25zdCBpbnRmICpleHRyYSAgICA9IGRlc2Mt
PnN0YXRfZGVzYy0+ZXh0cmFfYml0czsKLSAgICBpbnQgYmFzZSAgICAgICAgICAgICA9IGRlc2Mt
PnN0YXRfZGVzYy0+ZXh0cmFfYmFzZTsKLSAgICBpbnQgbWF4X2xlbmd0aCAgICAgICA9IGRlc2Mt
PnN0YXRfZGVzYy0+bWF4X2xlbmd0aDsKLSAgICBpbnQgaDsgICAgICAgICAgICAgIC8qIGhlYXAg
aW5kZXggKi8KLSAgICBpbnQgbiwgbTsgICAgICAgICAgIC8qIGl0ZXJhdGUgb3ZlciB0aGUgdHJl
ZSBlbGVtZW50cyAqLwotICAgIGludCBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqLwot
ICAgIGludCB4Yml0czsgICAgICAgICAgLyogZXh0cmEgYml0cyAqLwotICAgIHVzaCBmOyAgICAg
ICAgICAgICAgLyogZnJlcXVlbmN5ICovCi0gICAgaW50IG92ZXJmbG93ID0gMDsgICAvKiBudW1i
ZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqLwotCi0gICAgZm9yIChi
aXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSBzLT5ibF9jb3VudFtiaXRzXSA9IDA7
Ci0KLSAgICAvKiBJbiBhIGZpcnN0IHBhc3MsIGNvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0
aHMgKHdoaWNoIG1heQotICAgICAqIG92ZXJmbG93IGluIHRoZSBjYXNlIG9mIHRoZSBiaXQgbGVu
Z3RoIHRyZWUpLgotICAgICAqLwotICAgIHRyZWVbcy0+aGVhcFtzLT5oZWFwX21heF1dLkxlbiA9
IDA7IC8qIHJvb3Qgb2YgdGhlIGhlYXAgKi8KLQotICAgIGZvciAoaCA9IHMtPmhlYXBfbWF4KzE7
IGggPCBIRUFQX1NJWkU7IGgrKykgewotICAgICAgICBuID0gcy0+aGVhcFtoXTsKLSAgICAgICAg
Yml0cyA9IHRyZWVbdHJlZVtuXS5EYWRdLkxlbiArIDE7Ci0gICAgICAgIGlmIChiaXRzID4gbWF4
X2xlbmd0aCkgYml0cyA9IG1heF9sZW5ndGgsIG92ZXJmbG93Kys7Ci0gICAgICAgIHRyZWVbbl0u
TGVuID0gKHVzaCliaXRzOwotICAgICAgICAvKiBXZSBvdmVyd3JpdGUgdHJlZVtuXS5EYWQgd2hp
Y2ggaXMgbm8gbG9uZ2VyIG5lZWRlZCAqLwotCi0gICAgICAgIGlmIChuID4gbWF4X2NvZGUpIGNv
bnRpbnVlOyAvKiBub3QgYSBsZWFmIG5vZGUgKi8KLQotICAgICAgICBzLT5ibF9jb3VudFtiaXRz
XSsrOwotICAgICAgICB4Yml0cyA9IDA7Ci0gICAgICAgIGlmIChuID49IGJhc2UpIHhiaXRzID0g
ZXh0cmFbbi1iYXNlXTsKLSAgICAgICAgZiA9IHRyZWVbbl0uRnJlcTsKLSAgICAgICAgcy0+b3B0
X2xlbiArPSAodWxnKWYgKiAoYml0cyArIHhiaXRzKTsKLSAgICAgICAgaWYgKHN0cmVlKSBzLT5z
dGF0aWNfbGVuICs9ICh1bGcpZiAqIChzdHJlZVtuXS5MZW4gKyB4Yml0cyk7Ci0gICAgfQotICAg
IGlmIChvdmVyZmxvdyA9PSAwKSByZXR1cm47Ci0KLSAgICBUcmFjZSgoc3RkZXJyLCJcbmJpdCBs
ZW5ndGggb3ZlcmZsb3dcbiIpKTsKLSAgICAvKiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgb24g
b2JqMiBhbmQgcGljIG9mIHRoZSBDYWxnYXJ5IGNvcnB1cyAqLwotCi0gICAgLyogRmluZCB0aGUg
Zmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi8KLSAgICBkbyB7Ci0gICAg
ICAgIGJpdHMgPSBtYXhfbGVuZ3RoLTE7Ci0gICAgICAgIHdoaWxlIChzLT5ibF9jb3VudFtiaXRz
XSA9PSAwKSBiaXRzLS07Ci0gICAgICAgIHMtPmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92
ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovCi0gICAgICAgIHMtPmJsX2NvdW50W2JpdHMrMV0g
Kz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqLwotICAgICAg
ICBzLT5ibF9jb3VudFttYXhfbGVuZ3RoXS0tOwotICAgICAgICAvKiBUaGUgYnJvdGhlciBvZiB0
aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLAotICAgICAgICAgKiBidXQg
dGhpcyBkb2VzIG5vdCBhZmZlY3QgYmxfY291bnRbbWF4X2xlbmd0aF0KLSAgICAgICAgICovCi0g
ICAgICAgIG92ZXJmbG93IC09IDI7Ci0gICAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTsKLQotICAg
IC8qIE5vdyByZWNvbXB1dGUgYWxsIGJpdCBsZW5ndGhzLCBzY2FubmluZyBpbiBpbmNyZWFzaW5n
IGZyZXF1ZW5jeS4KLSAgICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlz
IHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsCi0gICAgICogbGVuZ3RocyBpbnN0ZWFkIG9mIGZp
eGluZyBvbmx5IHRoZSB3cm9uZyBvbmVzLiBUaGlzIGlkZWEgaXMgdGFrZW4KLSAgICAgKiBmcm9t
ICdhcicgd3JpdHRlbiBieSBIYXJ1aGlrbyBPa3VtdXJhLikKLSAgICAgKi8KLSAgICBmb3IgKGJp
dHMgPSBtYXhfbGVuZ3RoOyBiaXRzICE9IDA7IGJpdHMtLSkgewotICAgICAgICBuID0gcy0+Ymxf
Y291bnRbYml0c107Ci0gICAgICAgIHdoaWxlIChuICE9IDApIHsKLSAgICAgICAgICAgIG0gPSBz
LT5oZWFwWy0taF07Ci0gICAgICAgICAgICBpZiAobSA+IG1heF9jb2RlKSBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmICgodW5zaWduZWQpIHRyZWVbbV0uTGVuICE9ICh1bnNpZ25lZCkgYml0cykg
ewotICAgICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsImNvZGUgJWQgYml0cyAlZC0+JWRcbiIs
IG0sIHRyZWVbbV0uTGVuLCBiaXRzKSk7Ci0gICAgICAgICAgICAgICAgcy0+b3B0X2xlbiArPSAo
KGxvbmcpYml0cyAtIChsb25nKXRyZWVbbV0uTGVuKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihsb25nKXRyZWVbbV0uRnJlcTsKLSAgICAgICAgICAgICAgICB0cmVlW21dLkxlbiA9
ICh1c2gpYml0czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG4tLTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZW5lcmF0ZSB0aGUgY29kZXMg
Zm9yIGEgZ2l2ZW4gdHJlZSBhbmQgYml0IGNvdW50cyAod2hpY2ggbmVlZCBub3QgYmUKLSAqIG9w
dGltYWwpLgotICogSU4gYXNzZXJ0aW9uOiB0aGUgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhl
IGJpdCBsZW5ndGggc3RhdGlzdGljcyBmb3IKLSAqIHRoZSBnaXZlbiB0cmVlIGFuZCB0aGUgZmll
bGQgbGVuIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuCi0gKiBPVVQgYXNzZXJ0aW9uOiB0
aGUgZmllbGQgY29kZSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzIG9mIG5vbgotICogICAg
IHplcm8gY29kZSBsZW5ndGguCi0gKi8KLWxvY2FsIHZvaWQgZ2VuX2NvZGVzICh0cmVlLCBtYXhf
Y29kZSwgYmxfY291bnQpCi0gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRy
ZWUgdG8gZGVjb3JhdGUgKi8KLSAgICBpbnQgbWF4X2NvZGU7ICAgICAgICAgICAgICAvKiBsYXJn
ZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KLSAgICB1c2hmICpibF9jb3VudDsg
ICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoICovCi17Ci0g
ICAgdXNoIG5leHRfY29kZVtNQVhfQklUUysxXTsgLyogbmV4dCBjb2RlIHZhbHVlIGZvciBlYWNo
IGJpdCBsZW5ndGggKi8KLSAgICB1c2ggY29kZSA9IDA7ICAgICAgICAgICAgICAvKiBydW5uaW5n
IGNvZGUgdmFsdWUgKi8KLSAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5k
ZXggKi8KLSAgICBpbnQgbjsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGluZGV4ICovCi0K
LSAgICAvKiBUaGUgZGlzdHJpYnV0aW9uIGNvdW50cyBhcmUgZmlyc3QgdXNlZCB0byBnZW5lcmF0
ZSB0aGUgY29kZSB2YWx1ZXMKLSAgICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC4KLSAgICAgKi8K
LSAgICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKLSAgICAgICAg
bmV4dF9jb2RlW2JpdHNdID0gY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsK
LSAgICB9Ci0gICAgLyogQ2hlY2sgdGhhdCB0aGUgYml0IGNvdW50cyBpbiBibF9jb3VudCBhcmUg
Y29uc2lzdGVudC4gVGhlIGxhc3QgY29kZQotICAgICAqIG11c3QgYmUgYWxsIG9uZXMuCi0gICAg
ICovCi0gICAgQXNzZXJ0IChjb2RlICsgYmxfY291bnRbTUFYX0JJVFNdLTEgPT0gKDE8PE1BWF9C
SVRTKS0xLAotICAgICAgICAgICAgImluY29uc2lzdGVudCBiaXQgY291bnRzIik7Ci0gICAgVHJh
Y2V2KChzdGRlcnIsIlxuZ2VuX2NvZGVzOiBtYXhfY29kZSAlZCAiLCBtYXhfY29kZSkpOwotCi0g
ICAgZm9yIChuID0gMDsgIG4gPD0gbWF4X2NvZGU7IG4rKykgewotICAgICAgICBpbnQgbGVuID0g
dHJlZVtuXS5MZW47Ci0gICAgICAgIGlmIChsZW4gPT0gMCkgY29udGludWU7Ci0gICAgICAgIC8q
IE5vdyByZXZlcnNlIHRoZSBiaXRzICovCi0gICAgICAgIHRyZWVbbl0uQ29kZSA9IGJpX3JldmVy
c2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKLQotICAgICAgICBUcmFjZWN2KHRyZWUgIT0gc3Rh
dGljX2x0cmVlLCAoc3RkZXJyLCJcbm4gJTNkICVjIGwgJTJkIGMgJTR4ICgleCkgIiwKLSAgICAg
ICAgICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4
dF9jb2RlW2xlbl0tMSkpOwotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBD
b25zdHJ1Y3Qgb25lIEh1ZmZtYW4gdHJlZSBhbmQgYXNzaWducyB0aGUgY29kZSBiaXQgc3RyaW5n
cyBhbmQgbGVuZ3Rocy4KLSAqIFVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aCBmb3IgdGhlIGN1
cnJlbnQgYmxvY2suCi0gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZCBmcmVxIGlzIHNldCBmb3Ig
YWxsIHRyZWUgZWxlbWVudHMuCi0gKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkcyBsZW4gYW5k
IGNvZGUgYXJlIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoCi0gKiAgICAgYW5kIGNvcnJl
c3BvbmRpbmcgY29kZS4gVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19sZW4g
aXMKLSAqICAgICBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXMgbm90IG51bGwuIFRoZSBmaWVsZCBt
YXhfY29kZSBpcyBzZXQuCi0gKi8KLWxvY2FsIHZvaWQgYnVpbGRfdHJlZShzLCBkZXNjKQotICAg
IGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgdHJlZV9kZXNjICpkZXNjOyAvKiB0aGUgdHJlZSBkZXNj
cmlwdG9yICovCi17Ci0gICAgY3RfZGF0YSAqdHJlZSAgICAgICAgID0gZGVzYy0+ZHluX3RyZWU7
Ci0gICAgY29uc3QgY3RfZGF0YSAqc3RyZWUgID0gZGVzYy0+c3RhdF9kZXNjLT5zdGF0aWNfdHJl
ZTsKLSAgICBpbnQgZWxlbXMgICAgICAgICAgICAgPSBkZXNjLT5zdGF0X2Rlc2MtPmVsZW1zOwot
ICAgIGludCBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqLwot
ICAgIGludCBtYXhfY29kZSA9IC0xOyAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVx
dWVuY3kgKi8KLSAgICBpbnQgbm9kZTsgICAgICAgICAgLyogbmV3IG5vZGUgYmVpbmcgY3JlYXRl
ZCAqLwotCi0gICAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJl
cXVlbnQgZWxlbWVudCBpbgotICAgICAqIGhlYXBbU01BTExFU1RdLiBUaGUgc29ucyBvZiBoZWFw
W25dIGFyZSBoZWFwWzIqbl0gYW5kIGhlYXBbMipuKzFdLgotICAgICAqIGhlYXBbMF0gaXMgbm90
IHVzZWQuCi0gICAgICovCi0gICAgcy0+aGVhcF9sZW4gPSAwLCBzLT5oZWFwX21heCA9IEhFQVBf
U0laRTsKLQotICAgIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7Ci0gICAgICAgIGlmICh0
cmVlW25dLkZyZXEgIT0gMCkgewotICAgICAgICAgICAgcy0+aGVhcFsrKyhzLT5oZWFwX2xlbild
ID0gbWF4X2NvZGUgPSBuOwotICAgICAgICAgICAgcy0+ZGVwdGhbbl0gPSAwOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdHJlZVtuXS5MZW4gPSAwOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBkaXN0
YW5jZSBjb2RlIGV4aXN0cywKLSAgICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3Vs
ZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUKLSAgICAgKiBwb3NzaWJsZSBjb2Rl
LiBTbyB0byBhdm9pZCBzcGVjaWFsIGNoZWNrcyBsYXRlciBvbiB3ZSBmb3JjZSBhdCBsZWFzdAot
ICAgICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuCi0gICAgICovCi0gICAgd2hp
bGUgKHMtPmhlYXBfbGVuIDwgMikgewotICAgICAgICBub2RlID0gcy0+aGVhcFsrKyhzLT5oZWFw
X2xlbildID0gKG1heF9jb2RlIDwgMiA/ICsrbWF4X2NvZGUgOiAwKTsKLSAgICAgICAgdHJlZVtu
b2RlXS5GcmVxID0gMTsKLSAgICAgICAgcy0+ZGVwdGhbbm9kZV0gPSAwOwotICAgICAgICBzLT5v
cHRfbGVuLS07IGlmIChzdHJlZSkgcy0+c3RhdGljX2xlbiAtPSBzdHJlZVtub2RlXS5MZW47Ci0g
ICAgICAgIC8qIG5vZGUgaXMgMCBvciAxIHNvIGl0IGRvZXMgbm90IGhhdmUgZXh0cmEgYml0cyAq
LwotICAgIH0KLSAgICBkZXNjLT5tYXhfY29kZSA9IG1heF9jb2RlOwotCi0gICAgLyogVGhlIGVs
ZW1lbnRzIGhlYXBbaGVhcF9sZW4vMisxIC4uIGhlYXBfbGVuXSBhcmUgbGVhdmVzIG9mIHRoZSB0
cmVlLAotICAgICAqIGVzdGFibGlzaCBzdWItaGVhcHMgb2YgaW5jcmVhc2luZyBsZW5ndGhzOgot
ICAgICAqLwotICAgIGZvciAobiA9IHMtPmhlYXBfbGVuLzI7IG4gPj0gMTsgbi0tKSBwcWRvd25o
ZWFwKHMsIHRyZWUsIG4pOwotCi0gICAgLyogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgYnkg
cmVwZWF0ZWRseSBjb21iaW5pbmcgdGhlIGxlYXN0IHR3bwotICAgICAqIGZyZXF1ZW50IG5vZGVz
LgotICAgICAqLwotICAgIG5vZGUgPSBlbGVtczsgICAgICAgICAgICAgIC8qIG5leHQgaW50ZXJu
YWwgbm9kZSBvZiB0aGUgdHJlZSAqLwotICAgIGRvIHsKLSAgICAgICAgcHFyZW1vdmUocywgdHJl
ZSwgbik7ICAvKiBuID0gbm9kZSBvZiBsZWFzdCBmcmVxdWVuY3kgKi8KLSAgICAgICAgbSA9IHMt
PmhlYXBbU01BTExFU1RdOyAvKiBtID0gbm9kZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqLwot
Ci0gICAgICAgIHMtPmhlYXBbLS0ocy0+aGVhcF9tYXgpXSA9IG47IC8qIGtlZXAgdGhlIG5vZGVz
IHNvcnRlZCBieSBmcmVxdWVuY3kgKi8KLSAgICAgICAgcy0+aGVhcFstLShzLT5oZWFwX21heCld
ID0gbTsKLQotICAgICAgICAvKiBDcmVhdGUgYSBuZXcgbm9kZSBmYXRoZXIgb2YgbiBhbmQgbSAq
LwotICAgICAgICB0cmVlW25vZGVdLkZyZXEgPSB0cmVlW25dLkZyZXEgKyB0cmVlW21dLkZyZXE7
Ci0gICAgICAgIHMtPmRlcHRoW25vZGVdID0gKHVjaCkoKHMtPmRlcHRoW25dID49IHMtPmRlcHRo
W21dID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+ZGVwdGhbbl0gOiBzLT5k
ZXB0aFttXSkgKyAxKTsKLSAgICAgICAgdHJlZVtuXS5EYWQgPSB0cmVlW21dLkRhZCA9ICh1c2gp
bm9kZTsKLSNpZmRlZiBEVU1QX0JMX1RSRUUKLSAgICAgICAgaWYgKHRyZWUgPT0gcy0+YmxfdHJl
ZSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlxubm9kZSAlZCglZCksIHNvbnMgJWQo
JWQpICVkKCVkKSIsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUsIHRyZWVbbm9kZV0uRnJlcSwg
biwgdHJlZVtuXS5GcmVxLCBtLCB0cmVlW21dLkZyZXEpOwotICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi8KLSAgICAgICAg
cy0+aGVhcFtTTUFMTEVTVF0gPSBub2RlKys7Ci0gICAgICAgIHBxZG93bmhlYXAocywgdHJlZSwg
U01BTExFU1QpOwotCi0gICAgfSB3aGlsZSAocy0+aGVhcF9sZW4gPj0gMik7Ci0KLSAgICBzLT5o
ZWFwWy0tKHMtPmhlYXBfbWF4KV0gPSBzLT5oZWFwW1NNQUxMRVNUXTsKLQotICAgIC8qIEF0IHRo
aXMgcG9pbnQsIHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQuIFdlIGNhbiBub3cKLSAg
ICAgKiBnZW5lcmF0ZSB0aGUgYml0IGxlbmd0aHMuCi0gICAgICovCi0gICAgZ2VuX2JpdGxlbihz
LCAodHJlZV9kZXNjICopZGVzYyk7Ci0KLSAgICAvKiBUaGUgZmllbGQgbGVuIGlzIG5vdyBzZXQs
IHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovCi0gICAgZ2VuX2NvZGVzICgoY3RfZGF0
YSAqKXRyZWUsIG1heF9jb2RlLCBzLT5ibF9jb3VudCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotICogU2NhbiBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSB0byBkZXRlcm1pbmUgdGhl
IGZyZXF1ZW5jaWVzIG9mIHRoZSBjb2RlcwotICogaW4gdGhlIGJpdCBsZW5ndGggdHJlZS4KLSAq
LwotbG9jYWwgdm9pZCBzY2FuX3RyZWUgKHMsIHRyZWUsIG1heF9jb2RlKQotICAgIGRlZmxhdGVf
c3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVk
ICovCi0gICAgaW50IG1heF9jb2RlOyAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24g
emVybyBmcmVxdWVuY3kgKi8KLXsKLSAgICBpbnQgbjsgICAgICAgICAgICAgICAgICAgICAvKiBp
dGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovCi0gICAgaW50IHByZXZsZW4gPSAtMTsg
ICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAqLwotICAgIGludCBjdXJsZW47ICAgICAg
ICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi8KLSAgICBpbnQgbmV4dGxlbiA9
IHRyZWVbMF0uTGVuOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovCi0gICAgaW50IGNvdW50ID0g
MDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi8KLSAg
ICBpbnQgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovCi0gICAg
aW50IG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqLwotCi0gICAg
aWYgKG5leHRsZW4gPT0gMCkgbWF4X2NvdW50ID0gMTM4LCBtaW5fY291bnQgPSAzOwotICAgIHRy
ZWVbbWF4X2NvZGUrMV0uTGVuID0gKHVzaCkweGZmZmY7IC8qIGd1YXJkICovCi0KLSAgICBmb3Ig
KG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHsKLSAgICAgICAgY3VybGVuID0gbmV4dGxlbjsg
bmV4dGxlbiA9IHRyZWVbbisxXS5MZW47Ci0gICAgICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50
ICYmIGN1cmxlbiA9PSBuZXh0bGVuKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkgewotICAgICAgICAgICAgcy0+YmxfdHJlZVtj
dXJsZW5dLkZyZXEgKz0gY291bnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VybGVuICE9IDApIHsK
LSAgICAgICAgICAgIGlmIChjdXJsZW4gIT0gcHJldmxlbikgcy0+YmxfdHJlZVtjdXJsZW5dLkZy
ZXErKzsKLSAgICAgICAgICAgIHMtPmJsX3RyZWVbUkVQXzNfNl0uRnJlcSsrOwotICAgICAgICB9
IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7Ci0gICAgICAgICAgICBzLT5ibF90cmVlW1JFUFpfM18x
MF0uRnJlcSsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcy0+YmxfdHJlZVtSRVBa
XzExXzEzOF0uRnJlcSsrOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ID0gMDsgcHJldmxlbiA9
IGN1cmxlbjsKLSAgICAgICAgaWYgKG5leHRsZW4gPT0gMCkgewotICAgICAgICAgICAgbWF4X2Nv
dW50ID0gMTM4LCBtaW5fY291bnQgPSAzOwotICAgICAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PSBu
ZXh0bGVuKSB7Ci0gICAgICAgICAgICBtYXhfY291bnQgPSA2LCBtaW5fY291bnQgPSAzOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWF4X2NvdW50ID0gNywgbWluX2NvdW50ID0gNDsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEg
bGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNv
ZGVzIGluCi0gKiBibF90cmVlLgotICovCi1sb2NhbCB2b2lkIHNlbmRfdHJlZSAocywgdHJlZSwg
bWF4X2NvZGUpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjdF9kYXRhICp0cmVlOyAvKiB0
aGUgdHJlZSB0byBiZSBzY2FubmVkICovCi0gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQg
aXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi8KLXsKLSAgICBpbnQgbjsg
ICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICov
Ci0gICAgaW50IHByZXZsZW4gPSAtMTsgICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAq
LwotICAgIGludCBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNv
ZGUgKi8KLSAgICBpbnQgbmV4dGxlbiA9IHRyZWVbMF0uTGVuOyAvKiBsZW5ndGggb2YgbmV4dCBj
b2RlICovCi0gICAgaW50IGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9m
IHRoZSBjdXJyZW50IGNvZGUgKi8KLSAgICBpbnQgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBt
YXggcmVwZWF0IGNvdW50ICovCi0gICAgaW50IG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWlu
IHJlcGVhdCBjb3VudCAqLwotCi0gICAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8g
IC8qIGd1YXJkIGFscmVhZHkgc2V0ICovCi0gICAgaWYgKG5leHRsZW4gPT0gMCkgbWF4X2NvdW50
ID0gMTM4LCBtaW5fY291bnQgPSAzOwotCi0gICAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsg
bisrKSB7Ci0gICAgICAgIGN1cmxlbiA9IG5leHRsZW47IG5leHRsZW4gPSB0cmVlW24rMV0uTGVu
OwotICAgICAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT0gbmV4dGxlbikg
ewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5f
Y291bnQpIHsKLSAgICAgICAgICAgIGRvIHsgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy0+YmxfdHJl
ZSk7IH0gd2hpbGUgKC0tY291bnQgIT0gMCk7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChjdXJsZW4g
IT0gMCkgewotICAgICAgICAgICAgaWYgKGN1cmxlbiAhPSBwcmV2bGVuKSB7Ci0gICAgICAgICAg
ICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy0+YmxfdHJlZSk7IGNvdW50LS07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBBc3NlcnQoY291bnQgPj0gMyAmJiBjb3VudCA8PSA2LCAiIDNf
Nj8iKTsKLSAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLT5ibF90cmVlKTsgc2Vu
ZF9iaXRzKHMsIGNvdW50LTMsIDIpOwotCi0gICAgICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTAp
IHsKLSAgICAgICAgICAgIHNlbmRfY29kZShzLCBSRVBaXzNfMTAsIHMtPmJsX3RyZWUpOyBzZW5k
X2JpdHMocywgY291bnQtMywgMyk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNl
bmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy0+YmxfdHJlZSk7IHNlbmRfYml0cyhzLCBjb3VudC0x
MSwgNyk7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgPSAwOyBwcmV2bGVuID0gY3VybGVuOwot
ICAgICAgICBpZiAobmV4dGxlbiA9PSAwKSB7Ci0gICAgICAgICAgICBtYXhfY291bnQgPSAxMzgs
IG1pbl9jb3VudCA9IDM7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VybGVuID09IG5leHRsZW4pIHsK
LSAgICAgICAgICAgIG1heF9jb3VudCA9IDYsIG1pbl9jb3VudCA9IDM7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBtYXhfY291bnQgPSA3LCBtaW5fY291bnQgPSA0OwotICAgICAgICB9
Ci0gICAgfQotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvbnN0cnVjdCB0aGUgSHVm
Zm1hbiB0cmVlIGZvciB0aGUgYml0IGxlbmd0aHMgYW5kIHJldHVybiB0aGUgaW5kZXggaW4KLSAq
IGJsX29yZGVyIG9mIHRoZSBsYXN0IGJpdCBsZW5ndGggY29kZSB0byBzZW5kLgotICovCi1sb2Nh
bCBpbnQgYnVpbGRfYmxfdHJlZShzKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci17Ci0gICAgaW50
IG1heF9ibGluZGV4OyAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHpl
cm8gZnJlcSAqLwotCi0gICAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVz
IGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqLwotICAgIHNjYW5fdHJlZShzLCAoY3Rf
ZGF0YSAqKXMtPmR5bl9sdHJlZSwgcy0+bF9kZXNjLm1heF9jb2RlKTsKLSAgICBzY2FuX3RyZWUo
cywgKGN0X2RhdGEgKilzLT5keW5fZHRyZWUsIHMtPmRfZGVzYy5tYXhfY29kZSk7Ci0KLSAgICAv
KiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlOiAqLwotICAgIGJ1aWxkX3RyZWUocywgKHRyZWVf
ZGVzYyAqKSgmKHMtPmJsX2Rlc2MpKSk7Ci0gICAgLyogb3B0X2xlbiBub3cgaW5jbHVkZXMgdGhl
IGxlbmd0aCBvZiB0aGUgdHJlZSByZXByZXNlbnRhdGlvbnMsIGV4Y2VwdAotICAgICAqIHRoZSBs
ZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRo
ZSBjb3VudHMuCi0gICAgICovCi0KLSAgICAvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBiaXQg
bGVuZ3RoIGNvZGVzIHRvIHNlbmQuIFRoZSBwa3ppcCBmb3JtYXQKLSAgICAgKiByZXF1aXJlcyB0
aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5
cwotICAgICAqIDMgYnV0IHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpcyA0LikKLSAgICAgKi8KLSAg
ICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMtMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2Js
aW5kZXgtLSkgewotICAgICAgICBpZiAocy0+YmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF1d
LkxlbiAhPSAwKSBicmVhazsKLSAgICB9Ci0gICAgLyogVXBkYXRlIG9wdF9sZW4gdG8gaW5jbHVk
ZSB0aGUgYml0IGxlbmd0aCB0cmVlIGFuZCBjb3VudHMgKi8KLSAgICBzLT5vcHRfbGVuICs9IDMq
KG1heF9ibGluZGV4KzEpICsgNSs1KzQ7Ci0gICAgVHJhY2V2KChzdGRlcnIsICJcbmR5biB0cmVl
czogZHluICVsZCwgc3RhdCAlbGQiLAotICAgICAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGlj
X2xlbikpOwotCi0gICAgcmV0dXJuIG1heF9ibGluZGV4OwotfQotCi0vKiA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZt
YW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZQotICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBj
b2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuCi0gKiBJTiBhc3Nl
cnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuCi0gKi8KLWxv
Y2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpCi0gICAg
ZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51
bWJlciBvZiBjb2RlcyBmb3IgZWFjaCB0cmVlICovCi17Ci0gICAgaW50IHJhbms7ICAgICAgICAg
ICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqLwotCi0gICAgQXNzZXJ0IChsY29kZXMg
Pj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgIm5vdCBlbm91Z2ggY29kZXMi
KTsKLSAgICBBc3NlcnQgKGxjb2RlcyA8PSBMX0NPREVTICYmIGRjb2RlcyA8PSBEX0NPREVTICYm
IGJsY29kZXMgPD0gQkxfQ09ERVMsCi0gICAgICAgICAgICAidG9vIG1hbnkgY29kZXMiKTsKLSAg
ICBUcmFjZXYoKHN0ZGVyciwgIlxuYmwgY291bnRzOiAiKSk7Ci0gICAgc2VuZF9iaXRzKHMsIGxj
b2Rlcy0yNTcsIDUpOyAvKiBub3QgKzI1NSBhcyBzdGF0ZWQgaW4gYXBwbm90ZS50eHQgKi8KLSAg
ICBzZW5kX2JpdHMocywgZGNvZGVzLTEsICAgNSk7Ci0gICAgc2VuZF9iaXRzKHMsIGJsY29kZXMt
NCwgIDQpOyAvKiBub3QgLTMgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovCi0gICAgZm9yIChy
YW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykgewotICAgICAgICBUcmFjZXYoKHN0ZGVy
ciwgIlxuYmwgY29kZSAlMmQgIiwgYmxfb3JkZXJbcmFua10pKTsKLSAgICAgICAgc2VuZF9iaXRz
KHMsIHMtPmJsX3RyZWVbYmxfb3JkZXJbcmFua11dLkxlbiwgMyk7Ci0gICAgfQotICAgIFRyYWNl
digoc3RkZXJyLCAiXG5ibCB0cmVlOiBzZW50ICVsZCIsIHMtPmJpdHNfc2VudCkpOwotCi0gICAg
c2VuZF90cmVlKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCBsY29kZXMtMSk7IC8qIGxpdGVy
YWwgdHJlZSAqLwotICAgIFRyYWNldigoc3RkZXJyLCAiXG5saXQgdHJlZTogc2VudCAlbGQiLCBz
LT5iaXRzX3NlbnQpKTsKLQotICAgIHNlbmRfdHJlZShzLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJl
ZSwgZGNvZGVzLTEpOyAvKiBkaXN0YW5jZSB0cmVlICovCi0gICAgVHJhY2V2KChzdGRlcnIsICJc
bmRpc3QgdHJlZTogc2VudCAlbGQiLCBzLT5iaXRzX3NlbnQpKTsKLX0KLQotLyogPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gKiBTZW5kIGEgc3RvcmVkIGJsb2NrCi0gKi8KLXZvaWQgX3RyX3N0b3JlZF9i
bG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGVvZikKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotICAg
IGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrICovCi0gICAgdWxnIHN0b3JlZF9sZW47
ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCi0gICAgaW50IGVvZjsgICAgICAgICAgLyog
dHJ1ZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi8KLXsKLSAgICBzZW5k
X2JpdHMocywgKFNUT1JFRF9CTE9DSzw8MSkrZW9mLCAzKTsgIC8qIHNlbmQgYmxvY2sgdHlwZSAq
LwotI2lmZGVmIERFQlVHCi0gICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAocy0+Y29tcHJlc3NlZF9s
ZW4gKyAzICsgNykgJiAodWxnKX43TDsKLSAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAoc3RvcmVk
X2xlbiArIDQpIDw8IDM7Ci0jZW5kaWYKLSAgICBjb3B5X2Jsb2NrKHMsIGJ1ZiwgKHVuc2lnbmVk
KXN0b3JlZF9sZW4sIDEpOyAvKiB3aXRoIGhlYWRlciAqLwotfQotCi0vKiA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29r
YWhlYWQgZm9yIGluZmxhdGUuCi0gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5
IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci4KLSAqIFRoZSBjdXJyZW50IGluZmxhdGUgY29kZSBy
ZXF1aXJlcyA5IGJpdHMgb2YgbG9va2FoZWFkLiBJZiB0aGUKLSAqIGxhc3QgdHdvIGNvZGVzIGZv
ciB0aGUgcHJldmlvdXMgYmxvY2sgKHJlYWwgY29kZSBwbHVzIEVPQikgd2VyZSBjb2RlZAotICog
b24gNSBiaXRzIG9yIGxlc3MsIGluZmxhdGUgbWF5IGhhdmUgb25seSA1KzMgYml0cyBvZiBsb29r
YWhlYWQgdG8gZGVjb2RlCi0gKiB0aGUgbGFzdCByZWFsIGNvZGUuIEluIHRoaXMgY2FzZSB3ZSBz
ZW5kIHR3byBlbXB0eSBzdGF0aWMgYmxvY2tzIGluc3RlYWQKLSAqIG9mIG9uZS4gKFRoZXJlIGFy
ZSBubyBwcm9ibGVtcyBpZiB0aGUgcHJldmlvdXMgYmxvY2sgaXMgc3RvcmVkIG9yIGZpeGVkLikK
LSAqIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugb2YgbGFz
dCByZWFsIGNvZGUgZW5jb2RlZAotICogb24gb25lIGJpdCBvbmx5LgotICovCi12b2lkIF90cl9h
bGlnbihzKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci17Ci0gICAgc2VuZF9iaXRzKHMsIFNUQVRJ
Q19UUkVFUzw8MSwgMyk7Ci0gICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVl
KTsKLSNpZmRlZiBERUJVRwotICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3Ig
YmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCi0jZW5kaWYKLSAgICBiaV9mbHVzaChzKTsKLSAgICAv
KiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2Vu
dAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRzLiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFz
dCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRoZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2Nr
KSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVP
QiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQgb2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4K
LSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3RfZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQg
PCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAg
ICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0g
ICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVz
aChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gNzsKLX0KLQotLyogPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50
IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWMKLSAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0
cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS4KLSAqLwotdm9pZCBfdHJfZmx1
c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBlb2YpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsK
LSAgICBjaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xk
ICovCi0gICAgdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCi0g
ICAgaW50IGVvZjsgICAgICAgICAgLyogdHJ1ZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZv
ciBhIGZpbGUgKi8KLXsKLSAgICB1bGcgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAvKiBvcHRfbGVu
IGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovCi0gICAgaW50IG1heF9ibGluZGV4ID0gMDsgIC8q
IGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KLQotICAg
IC8qIEJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzIHVubGVzcyBhIHN0b3JlZCBibG9jayBpcyBmb3Jj
ZWQgKi8KLSAgICBpZiAocy0+bGV2ZWwgPiAwKSB7Ci0KLSAgICAgICAgLyogQ2hlY2sgaWYgdGhl
IGZpbGUgaXMgYmluYXJ5IG9yIHRleHQgKi8KLSAgICAgICAgaWYgKHN0b3JlZF9sZW4gPiAwICYm
IHMtPnN0cm0tPmRhdGFfdHlwZSA9PSBaX1VOS05PV04pCi0gICAgICAgICAgICBzZXRfZGF0YV90
eXBlKHMpOwotCi0gICAgICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJhbCBhbmQgZGlzdGFuY2Ug
dHJlZXMgKi8KLSAgICAgICAgYnVpbGRfdHJlZShzLCAodHJlZV9kZXNjICopKCYocy0+bF9kZXNj
KSkpOwotICAgICAgICBUcmFjZXYoKHN0ZGVyciwgIlxubGl0IGRhdGE6IGR5biAlbGQsIHN0YXQg
JWxkIiwgcy0+b3B0X2xlbiwKLSAgICAgICAgICAgICAgICBzLT5zdGF0aWNfbGVuKSk7Ci0KLSAg
ICAgICAgYnVpbGRfdHJlZShzLCAodHJlZV9kZXNjICopKCYocy0+ZF9kZXNjKSkpOwotICAgICAg
ICBUcmFjZXYoKHN0ZGVyciwgIlxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZCIsIHMtPm9w
dF9sZW4sCi0gICAgICAgICAgICAgICAgcy0+c3RhdGljX2xlbikpOwotICAgICAgICAvKiBBdCB0
aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0
aHMgb2YKLSAgICAgICAgICogdGhlIGNvbXByZXNzZWQgYmxvY2sgZGF0YSwgZXhjbHVkaW5nIHRo
ZSB0cmVlIHJlcHJlc2VudGF0aW9ucy4KLSAgICAgICAgICovCi0KLSAgICAgICAgLyogQnVpbGQg
dGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUg
aW5kZXgKLSAgICAgICAgICogaW4gYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2Rl
IHRvIHNlbmQuCi0gICAgICAgICAqLwotICAgICAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3Ry
ZWUocyk7Ci0KLSAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nLiBDb21wdXRl
IHRoZSBibG9jayBsZW5ndGhzIGluIGJ5dGVzLiAqLwotICAgICAgICBvcHRfbGVuYiA9IChzLT5v
cHRfbGVuKzMrNyk+PjM7Ci0gICAgICAgIHN0YXRpY19sZW5iID0gKHMtPnN0YXRpY19sZW4rMys3
KT4+MzsKLQotICAgICAgICBUcmFjZXYoKHN0ZGVyciwgIlxub3B0ICVsdSglbHUpIHN0YXQgJWx1
KCVsdSkgc3RvcmVkICVsdSBsaXQgJXUgIiwKLSAgICAgICAgICAgICAgICBvcHRfbGVuYiwgcy0+
b3B0X2xlbiwgc3RhdGljX2xlbmIsIHMtPnN0YXRpY19sZW4sIHN0b3JlZF9sZW4sCi0gICAgICAg
ICAgICAgICAgcy0+bGFzdF9saXQpKTsKLQotICAgICAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0
X2xlbmIpIG9wdF9sZW5iID0gc3RhdGljX2xlbmI7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBB
c3NlcnQoYnVmICE9IChjaGFyKikwLCAibG9zdCBidWYiKTsKLSAgICAgICAgb3B0X2xlbmIgPSBz
dGF0aWNfbGVuYiA9IHN0b3JlZF9sZW4gKyA1OyAvKiBmb3JjZSBhIHN0b3JlZCBibG9jayAqLwot
ICAgIH0KLQotI2lmZGVmIEZPUkNFX1NUT1JFRAotICAgIGlmIChidWYgIT0gKGNoYXIqKTApIHsg
LyogZm9yY2Ugc3RvcmVkIGJsb2NrICovCi0jZWxzZQotICAgIGlmIChzdG9yZWRfbGVuKzQgPD0g
b3B0X2xlbmIgJiYgYnVmICE9IChjaGFyKikwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIC8q
IDQ6IHR3byB3b3JkcyBmb3IgdGhlIGxlbmd0aHMgKi8KLSNlbmRpZgotICAgICAgICAvKiBUaGUg
dGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpF
LgotICAgICAgICAgKiBPdGhlcndpc2Ugd2UgY2FuJ3QgaGF2ZSBwcm9jZXNzZWQgbW9yZSB0aGFu
IFdTSVpFIGlucHV0IGJ5dGVzIHNpbmNlCi0gICAgICAgICAqIHRoZSBsYXN0IGJsb2NrIGZsdXNo
LCBiZWNhdXNlIGNvbXByZXNzaW9uIHdvdWxkIGhhdmUgYmVlbgotICAgICAgICAgKiBzdWNjZXNz
ZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG8KLSAg
ICAgICAgICogdHJhbnNmb3JtIGEgYmxvY2sgaW50byBhIHN0b3JlZCBibG9jay4KLSAgICAgICAg
ICovCi0gICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBlb2YpOwot
Ci0jaWZkZWYgRk9SQ0VfU1RBVElDCi0gICAgfSBlbHNlIGlmIChzdGF0aWNfbGVuYiA+PSAwKSB7
IC8qIGZvcmNlIHN0YXRpYyB0cmVlcyAqLwotI2Vsc2UKLSAgICB9IGVsc2UgaWYgKHMtPnN0cmF0
ZWd5ID09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKLSNlbmRpZgotICAg
ICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrZW9mLCAzKTsKLSAgICAgICAgY29t
cHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsIChjdF9kYXRhICopc3RhdGlj
X2R0cmVlKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsg
cy0+c3RhdGljX2xlbjsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbmRfYml0cyhz
LCAoRFlOX1RSRUVTPDwxKStlb2YsIDMpOwotICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLT5s
X2Rlc2MubWF4X2NvZGUrMSwgcy0+ZF9kZXNjLm1heF9jb2RlKzEsCi0gICAgICAgICAgICAgICAg
ICAgICAgIG1heF9ibGluZGV4KzEpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0
YSAqKXMtPmR5bl9sdHJlZSwgKGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOwotI2lmZGVmIERFQlVH
Ci0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5vcHRfbGVuOwotI2VuZGlmCi0g
ICAgfQotICAgIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCAiYmFk
IGNvbXByZXNzZWQgc2l6ZSIpOwotICAgIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAy
XjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CCi0gICAgICogYW5kIHVMb25nIGltcGxl
bWVudGVkIG9uIDMyIGJpdHMuCi0gICAgICovCi0gICAgaW5pdF9ibG9jayhzKTsKLQotICAgIGlm
IChlb2YpIHsKLSAgICAgICAgYmlfd2luZHVwKHMpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMt
PmNvbXByZXNzZWRfbGVuICs9IDc7ICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCi0jZW5k
aWYKLSAgICB9Ci0gICAgVHJhY2V2KChzdGRlcnIsIlxuY29tcHJsZW4gJWx1KCVsdSkgIiwgcy0+
Y29tcHJlc3NlZF9sZW4+PjMsCi0gICAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuLTcqZW9mKSk7
Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQg
dGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmCi0gKiB0aGUgY3VycmVu
dCBibG9jayBtdXN0IGJlIGZsdXNoZWQuCi0gKi8KLWludCBfdHJfdGFsbHkgKHMsIGRpc3QsIGxj
KQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgdW5zaWduZWQgZGlzdDsgIC8qIGRpc3RhbmNl
IG9mIG1hdGNoZWQgc3RyaW5nICovCi0gICAgdW5zaWduZWQgbGM7ICAgIC8qIG1hdGNoIGxlbmd0
aC1NSU5fTUFUQ0ggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3Q9PTApICovCi17Ci0gICAgcy0+
ZF9idWZbcy0+bGFzdF9saXRdID0gKHVzaClkaXN0OwotICAgIHMtPmxfYnVmW3MtPmxhc3RfbGl0
KytdID0gKHVjaClsYzsKLSAgICBpZiAoZGlzdCA9PSAwKSB7Ci0gICAgICAgIC8qIGxjIGlzIHRo
ZSB1bm1hdGNoZWQgY2hhciAqLwotICAgICAgICBzLT5keW5fbHRyZWVbbGNdLkZyZXErKzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzLT5tYXRjaGVzKys7Ci0gICAgICAgIC8qIEhlcmUsIGxjIGlz
IHRoZSBtYXRjaCBsZW5ndGggLSBNSU5fTUFUQ0ggKi8KLSAgICAgICAgZGlzdC0tOyAgICAgICAg
ICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovCi0gICAgICAgIEFzc2VydCgodXNo
KWRpc3QgPCAodXNoKU1BWF9ESVNUKHMpICYmCi0gICAgICAgICAgICAgICAodXNoKWxjIDw9ICh1
c2gpKE1BWF9NQVRDSC1NSU5fTUFUQ0gpICYmCi0gICAgICAgICAgICAgICAodXNoKWRfY29kZShk
aXN0KSA8ICh1c2gpRF9DT0RFUywgICJfdHJfdGFsbHk6IGJhZCBtYXRjaCIpOwotCi0gICAgICAg
IHMtPmR5bl9sdHJlZVtfbGVuZ3RoX2NvZGVbbGNdK0xJVEVSQUxTKzFdLkZyZXErKzsKLSAgICAg
ICAgcy0+ZHluX2R0cmVlW2RfY29kZShkaXN0KV0uRnJlcSsrOwotICAgIH0KLQotI2lmZGVmIFRS
VU5DQVRFX0JMT0NLCi0gICAgLyogVHJ5IHRvIGd1ZXNzIGlmIGl0IGlzIHByb2ZpdGFibGUgdG8g
c3RvcCB0aGUgY3VycmVudCBibG9jayBoZXJlICovCi0gICAgaWYgKChzLT5sYXN0X2xpdCAmIDB4
MWZmZikgPT0gMCAmJiBzLT5sZXZlbCA+IDIpIHsKLSAgICAgICAgLyogQ29tcHV0ZSBhbiB1cHBl
ciBib3VuZCBmb3IgdGhlIGNvbXByZXNzZWQgbGVuZ3RoICovCi0gICAgICAgIHVsZyBvdXRfbGVu
Z3RoID0gKHVsZylzLT5sYXN0X2xpdCo4TDsKLSAgICAgICAgdWxnIGluX2xlbmd0aCA9ICh1bGcp
KChsb25nKXMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQpOwotICAgICAgICBpbnQgZGNvZGU7
Ci0gICAgICAgIGZvciAoZGNvZGUgPSAwOyBkY29kZSA8IERfQ09ERVM7IGRjb2RlKyspIHsKLSAg
ICAgICAgICAgIG91dF9sZW5ndGggKz0gKHVsZylzLT5keW5fZHRyZWVbZGNvZGVdLkZyZXEgKgot
ICAgICAgICAgICAgICAgICg1TCtleHRyYV9kYml0c1tkY29kZV0pOwotICAgICAgICB9Ci0gICAg
ICAgIG91dF9sZW5ndGggPj49IDM7Ci0gICAgICAgIFRyYWNldigoc3RkZXJyLCJcbmxhc3RfbGl0
ICV1LCBpbiAlbGQsIG91dCB+JWxkKCVsZCUlKSAiLAotICAgICAgICAgICAgICAgcy0+bGFzdF9s
aXQsIGluX2xlbmd0aCwgb3V0X2xlbmd0aCwKLSAgICAgICAgICAgICAgIDEwMEwgLSBvdXRfbGVu
Z3RoKjEwMEwvaW5fbGVuZ3RoKSk7Ci0gICAgICAgIGlmIChzLT5tYXRjaGVzIDwgcy0+bGFzdF9s
aXQvMiAmJiBvdXRfbGVuZ3RoIDwgaW5fbGVuZ3RoLzIpIHJldHVybiAxOwotICAgIH0KLSNlbmRp
ZgotICAgIHJldHVybiAocy0+bGFzdF9saXQgPT0gcy0+bGl0X2J1ZnNpemUtMSk7Ci0gICAgLyog
V2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQg
YXQgNjRLCi0gICAgICogb24gMTYgYml0IG1hY2hpbmVzIGFuZCBiZWNhdXNlIHN0b3JlZCBibG9j
a3MgYXJlIHJlc3RyaWN0ZWQgdG8KLSAgICAgKiA2NEstMSBieXRlcy4KLSAgICAgKi8KLX0KLQot
LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIHRoZSBibG9jayBkYXRhIGNvbXByZXNzZWQg
dXNpbmcgdGhlIGdpdmVuIEh1ZmZtYW4gdHJlZXMKLSAqLwotbG9jYWwgdm9pZCBjb21wcmVzc19i
bG9jayhzLCBsdHJlZSwgZHRyZWUpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjdF9kYXRh
ICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovCi0gICAgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3Rh
bmNlIHRyZWUgKi8KLXsKLSAgICB1bnNpZ25lZCBkaXN0OyAgICAgIC8qIGRpc3RhbmNlIG9mIG1h
dGNoZWQgc3RyaW5nICovCi0gICAgaW50IGxjOyAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGgg
b3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3QgPT0gMCkgKi8KLSAgICB1bnNpZ25lZCBseCA9IDA7
ICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi8KLSAgICB1bnNpZ25lZCBjb2RlOyAgICAg
IC8qIHRoZSBjb2RlIHRvIHNlbmQgKi8KLSAgICBpbnQgZXh0cmE7ICAgICAgICAgIC8qIG51bWJl
ciBvZiBleHRyYSBiaXRzIHRvIHNlbmQgKi8KLQotICAgIGlmIChzLT5sYXN0X2xpdCAhPSAwKSBk
byB7Ci0gICAgICAgIGRpc3QgPSBzLT5kX2J1ZltseF07Ci0gICAgICAgIGxjID0gcy0+bF9idWZb
bHgrK107Ci0gICAgICAgIGlmIChkaXN0ID09IDApIHsKLSAgICAgICAgICAgIHNlbmRfY29kZShz
LCBsYywgbHRyZWUpOyAvKiBzZW5kIGEgbGl0ZXJhbCBieXRlICovCi0gICAgICAgICAgICBUcmFj
ZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLCIgJyVjJyAiLCBsYykpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRD
SCAqLwotICAgICAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107Ci0gICAgICAgICAgICBz
ZW5kX2NvZGUocywgY29kZStMSVRFUkFMUysxLCBsdHJlZSk7IC8qIHNlbmQgdGhlIGxlbmd0aCBj
b2RlICovCi0gICAgICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdOwotICAgICAgICAg
ICAgaWYgKGV4dHJhICE9IDApIHsKLSAgICAgICAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtj
b2RlXTsKLSAgICAgICAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyog
c2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGRpc3QtLTsgLyogZGlzdCBpcyBub3cgdGhlIG1hdGNoIGRpc3RhbmNlIC0gMSAqLwotICAgICAg
ICAgICAgY29kZSA9IGRfY29kZShkaXN0KTsKLSAgICAgICAgICAgIEFzc2VydCAoY29kZSA8IERf
Q09ERVMsICJiYWQgZF9jb2RlIik7Ci0KLSAgICAgICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBk
dHJlZSk7ICAgICAgIC8qIHNlbmQgdGhlIGRpc3RhbmNlIGNvZGUgKi8KLSAgICAgICAgICAgIGV4
dHJhID0gZXh0cmFfZGJpdHNbY29kZV07Ci0gICAgICAgICAgICBpZiAoZXh0cmEgIT0gMCkgewot
ICAgICAgICAgICAgICAgIGRpc3QgLT0gYmFzZV9kaXN0W2NvZGVdOwotICAgICAgICAgICAgICAg
IHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7ICAgLyogc2VuZCB0aGUgZXh0cmEgZGlzdGFuY2Ug
Yml0cyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9IC8qIGxpdGVyYWwgb3IgbWF0Y2ggcGFp
ciA/ICovCi0KLSAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgb3ZlcmxheSBiZXR3ZWVuIHBlbmRp
bmdfYnVmIGFuZCBkX2J1ZitsX2J1ZiBpcyBvazogKi8KLSAgICAgICAgQXNzZXJ0KCh1SW50KShz
LT5wZW5kaW5nKSA8IHMtPmxpdF9idWZzaXplICsgMipseCwKLSAgICAgICAgICAgICAgICJwZW5k
aW5nQnVmIG92ZXJmbG93Iik7Ci0KLSAgICB9IHdoaWxlIChseCA8IHMtPmxhc3RfbGl0KTsKLQot
ICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKLSAgICBzLT5sYXN0X2VvYl9sZW4g
PSBsdHJlZVtFTkRfQkxPQ0tdLkxlbjsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBT
ZXQgdGhlIGRhdGEgdHlwZSB0byBCSU5BUlkgb3IgVEVYVCwgdXNpbmcgYSBjcnVkZSBhcHByb3hp
bWF0aW9uOgotICogc2V0IGl0IHRvIFpfVEVYVCBpZiBhbGwgc3ltYm9scyBhcmUgZWl0aGVyIHBy
aW50YWJsZSBjaGFyYWN0ZXJzICgzMyB0byAyNTUpCi0gKiBvciB3aGl0ZSBzcGFjZXMgKDkgdG8g
MTMsIG9yIDMyKTsgb3Igc2V0IGl0IHRvIFpfQklOQVJZIG90aGVyd2lzZS4KLSAqIElOIGFzc2Vy
dGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LgotICovCi1sb2NhbCB2
b2lkIHNldF9kYXRhX3R5cGUocykKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotewotICAgIGludCBu
OwotCi0gICAgZm9yIChuID0gMDsgbiA8IDk7IG4rKykKLSAgICAgICAgaWYgKHMtPmR5bl9sdHJl
ZVtuXS5GcmVxICE9IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICBpZiAobiA9PSA5KQotICAg
ICAgICBmb3IgKG4gPSAxNDsgbiA8IDMyOyBuKyspCi0gICAgICAgICAgICBpZiAocy0+ZHluX2x0
cmVlW25dLkZyZXEgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICBzLT5zdHJtLT5k
YXRhX3R5cGUgPSAobiA9PSAzMikgPyBaX1RFWFQgOiBaX0JJTkFSWTsKLX0KLQotLyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0gKiBSZXZlcnNlIHRoZSBmaXJzdCBsZW4gYml0cyBvZiBhIGNvZGUsIHVz
aW5nIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIChhIGZhc3RlcgotICogbWV0aG9kIHdvdWxkIHVzZSBh
IHRhYmxlKQotICogSU4gYXNzZXJ0aW9uOiAxIDw9IGxlbiA8PSAxNQotICovCi1sb2NhbCB1bnNp
Z25lZCBiaV9yZXZlcnNlKGNvZGUsIGxlbikKLSAgICB1bnNpZ25lZCBjb2RlOyAvKiB0aGUgdmFs
dWUgdG8gaW52ZXJ0ICovCi0gICAgaW50IGxlbjsgICAgICAgLyogaXRzIGJpdCBsZW5ndGggKi8K
LXsKLSAgICByZWdpc3RlciB1bnNpZ25lZCByZXMgPSAwOwotICAgIGRvIHsKLSAgICAgICAgcmVz
IHw9IGNvZGUgJiAxOwotICAgICAgICBjb2RlID4+PSAxLCByZXMgPDw9IDE7Ci0gICAgfSB3aGls
ZSAoLS1sZW4gPiAwKTsKLSAgICByZXR1cm4gcmVzID4+IDE7Ci19Ci0KLS8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMg
aW4gaXQuCi0gKi8KLWxvY2FsIHZvaWQgYmlfZmx1c2gocykKLSAgICBkZWZsYXRlX3N0YXRlICpz
OwotewotICAgIGlmIChzLT5iaV92YWxpZCA9PSAxNikgewotICAgICAgICBwdXRfc2hvcnQocywg
cy0+YmlfYnVmKTsKLSAgICAgICAgcy0+YmlfYnVmID0gMDsKLSAgICAgICAgcy0+YmlfdmFsaWQg
PSAwOwotICAgIH0gZWxzZSBpZiAocy0+YmlfdmFsaWQgPj0gOCkgewotICAgICAgICBwdXRfYnl0
ZShzLCAoQnl0ZSlzLT5iaV9idWYpOwotICAgICAgICBzLT5iaV9idWYgPj49IDg7Ci0gICAgICAg
IHMtPmJpX3ZhbGlkIC09IDg7Ci0gICAgfQotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IEZsdXNoIHRoZSBiaXQgYnVmZmVyIGFuZCBhbGlnbiB0aGUgb3V0cHV0IG9uIGEgYnl0ZSBib3Vu
ZGFyeQotICovCi1sb2NhbCB2b2lkIGJpX3dpbmR1cChzKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7
Ci17Ci0gICAgaWYgKHMtPmJpX3ZhbGlkID4gOCkgewotICAgICAgICBwdXRfc2hvcnQocywgcy0+
YmlfYnVmKTsKLSAgICB9IGVsc2UgaWYgKHMtPmJpX3ZhbGlkID4gMCkgewotICAgICAgICBwdXRf
Ynl0ZShzLCAoQnl0ZSlzLT5iaV9idWYpOwotICAgIH0KLSAgICBzLT5iaV9idWYgPSAwOwotICAg
IHMtPmJpX3ZhbGlkID0gMDsKLSNpZmRlZiBERUJVRwotICAgIHMtPmJpdHNfc2VudCA9IChzLT5i
aXRzX3NlbnQrNykgJiB+NzsKLSNlbmRpZgotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IENvcHkgYSBzdG9yZWQgYmxvY2ssIHN0b3JpbmcgZmlyc3QgdGhlIGxlbmd0aCBhbmQgaXRzCi0g
KiBvbmUncyBjb21wbGVtZW50IGlmIHJlcXVlc3RlZC4KLSAqLwotbG9jYWwgdm9pZCBjb3B5X2Js
b2NrKHMsIGJ1ZiwgbGVuLCBoZWFkZXIpCi0gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjaGFy
ZiAgICAqYnVmOyAgICAvKiB0aGUgaW5wdXQgZGF0YSAqLwotICAgIHVuc2lnbmVkIGxlbjsgICAg
IC8qIGl0cyBsZW5ndGggKi8KLSAgICBpbnQgICAgICBoZWFkZXI7ICAvKiB0cnVlIGlmIGJsb2Nr
IGhlYWRlciBtdXN0IGJlIHdyaXR0ZW4gKi8KLXsKLSAgICBiaV93aW5kdXAocyk7ICAgICAgICAv
KiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCi0gICAgcy0+bGFzdF9lb2JfbGVuID0gODsgLyog
ZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZSAqLwotCi0gICAgaWYgKGhlYWRlcikgewotICAg
ICAgICBwdXRfc2hvcnQocywgKHVzaClsZW4pOwotICAgICAgICBwdXRfc2hvcnQocywgKHVzaCl+
bGVuKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBzLT5iaXRzX3NlbnQgKz0gMioxNjsKLSNlbmRp
ZgotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIHMtPmJpdHNfc2VudCArPSAodWxnKWxlbjw8MzsK
LSNlbmRpZgotICAgIHdoaWxlIChsZW4tLSkgewotICAgICAgICBwdXRfYnl0ZShzLCAqYnVmKysp
OwotICAgIH0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi90
cmVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxp
Yi90cmVlcy5oCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYi90cmVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOCArMCwwIEBACi0vKiBo
ZWFkZXIgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdpdGggLURHRU5fVFJFRVNfSCAqLwotCi1sb2Nh
bCBjb25zdCBjdF9kYXRhIHN0YXRpY19sdHJlZVtMX0NPREVTKzJdID0gewote3sgMTJ9LHsgIDh9
fSwge3sxNDB9LHsgIDh9fSwge3sgNzZ9LHsgIDh9fSwge3syMDR9LHsgIDh9fSwge3sgNDR9LHsg
IDh9fSwKLXt7MTcyfSx7ICA4fX0sIHt7MTA4fSx7ICA4fX0sIHt7MjM2fSx7ICA4fX0sIHt7IDI4
fSx7ICA4fX0sIHt7MTU2fSx7ICA4fX0sCi17eyA5Mn0seyAgOH19LCB7ezIyMH0seyAgOH19LCB7
eyA2MH0seyAgOH19LCB7ezE4OH0seyAgOH19LCB7ezEyNH0seyAgOH19LAote3syNTJ9LHsgIDh9
fSwge3sgIDJ9LHsgIDh9fSwge3sxMzB9LHsgIDh9fSwge3sgNjZ9LHsgIDh9fSwge3sxOTR9LHsg
IDh9fSwKLXt7IDM0fSx7ICA4fX0sIHt7MTYyfSx7ICA4fX0sIHt7IDk4fSx7ICA4fX0sIHt7MjI2
fSx7ICA4fX0sIHt7IDE4fSx7ICA4fX0sCi17ezE0Nn0seyAgOH19LCB7eyA4Mn0seyAgOH19LCB7
ezIxMH0seyAgOH19LCB7eyA1MH0seyAgOH19LCB7ezE3OH0seyAgOH19LAote3sxMTR9LHsgIDh9
fSwge3syNDJ9LHsgIDh9fSwge3sgMTB9LHsgIDh9fSwge3sxMzh9LHsgIDh9fSwge3sgNzR9LHsg
IDh9fSwKLXt7MjAyfSx7ICA4fX0sIHt7IDQyfSx7ICA4fX0sIHt7MTcwfSx7ICA4fX0sIHt7MTA2
fSx7ICA4fX0sIHt7MjM0fSx7ICA4fX0sCi17eyAyNn0seyAgOH19LCB7ezE1NH0seyAgOH19LCB7
eyA5MH0seyAgOH19LCB7ezIxOH0seyAgOH19LCB7eyA1OH0seyAgOH19LAote3sxODZ9LHsgIDh9
fSwge3sxMjJ9LHsgIDh9fSwge3syNTB9LHsgIDh9fSwge3sgIDZ9LHsgIDh9fSwge3sxMzR9LHsg
IDh9fSwKLXt7IDcwfSx7ICA4fX0sIHt7MTk4fSx7ICA4fX0sIHt7IDM4fSx7ICA4fX0sIHt7MTY2
fSx7ICA4fX0sIHt7MTAyfSx7ICA4fX0sCi17ezIzMH0seyAgOH19LCB7eyAyMn0seyAgOH19LCB7
ezE1MH0seyAgOH19LCB7eyA4Nn0seyAgOH19LCB7ezIxNH0seyAgOH19LAote3sgNTR9LHsgIDh9
fSwge3sxODJ9LHsgIDh9fSwge3sxMTh9LHsgIDh9fSwge3syNDZ9LHsgIDh9fSwge3sgMTR9LHsg
IDh9fSwKLXt7MTQyfSx7ICA4fX0sIHt7IDc4fSx7ICA4fX0sIHt7MjA2fSx7ICA4fX0sIHt7IDQ2
fSx7ICA4fX0sIHt7MTc0fSx7ICA4fX0sCi17ezExMH0seyAgOH19LCB7ezIzOH0seyAgOH19LCB7
eyAzMH0seyAgOH19LCB7ezE1OH0seyAgOH19LCB7eyA5NH0seyAgOH19LAote3syMjJ9LHsgIDh9
fSwge3sgNjJ9LHsgIDh9fSwge3sxOTB9LHsgIDh9fSwge3sxMjZ9LHsgIDh9fSwge3syNTR9LHsg
IDh9fSwKLXt7ICAxfSx7ICA4fX0sIHt7MTI5fSx7ICA4fX0sIHt7IDY1fSx7ICA4fX0sIHt7MTkz
fSx7ICA4fX0sIHt7IDMzfSx7ICA4fX0sCi17ezE2MX0seyAgOH19LCB7eyA5N30seyAgOH19LCB7
ezIyNX0seyAgOH19LCB7eyAxN30seyAgOH19LCB7ezE0NX0seyAgOH19LAote3sgODF9LHsgIDh9
fSwge3syMDl9LHsgIDh9fSwge3sgNDl9LHsgIDh9fSwge3sxNzd9LHsgIDh9fSwge3sxMTN9LHsg
IDh9fSwKLXt7MjQxfSx7ICA4fX0sIHt7ICA5fSx7ICA4fX0sIHt7MTM3fSx7ICA4fX0sIHt7IDcz
fSx7ICA4fX0sIHt7MjAxfSx7ICA4fX0sCi17eyA0MX0seyAgOH19LCB7ezE2OX0seyAgOH19LCB7
ezEwNX0seyAgOH19LCB7ezIzM30seyAgOH19LCB7eyAyNX0seyAgOH19LAote3sxNTN9LHsgIDh9
fSwge3sgODl9LHsgIDh9fSwge3syMTd9LHsgIDh9fSwge3sgNTd9LHsgIDh9fSwge3sxODV9LHsg
IDh9fSwKLXt7MTIxfSx7ICA4fX0sIHt7MjQ5fSx7ICA4fX0sIHt7ICA1fSx7ICA4fX0sIHt7MTMz
fSx7ICA4fX0sIHt7IDY5fSx7ICA4fX0sCi17ezE5N30seyAgOH19LCB7eyAzN30seyAgOH19LCB7
ezE2NX0seyAgOH19LCB7ezEwMX0seyAgOH19LCB7ezIyOX0seyAgOH19LAote3sgMjF9LHsgIDh9
fSwge3sxNDl9LHsgIDh9fSwge3sgODV9LHsgIDh9fSwge3syMTN9LHsgIDh9fSwge3sgNTN9LHsg
IDh9fSwKLXt7MTgxfSx7ICA4fX0sIHt7MTE3fSx7ICA4fX0sIHt7MjQ1fSx7ICA4fX0sIHt7IDEz
fSx7ICA4fX0sIHt7MTQxfSx7ICA4fX0sCi17eyA3N30seyAgOH19LCB7ezIwNX0seyAgOH19LCB7
eyA0NX0seyAgOH19LCB7ezE3M30seyAgOH19LCB7ezEwOX0seyAgOH19LAote3syMzd9LHsgIDh9
fSwge3sgMjl9LHsgIDh9fSwge3sxNTd9LHsgIDh9fSwge3sgOTN9LHsgIDh9fSwge3syMjF9LHsg
IDh9fSwKLXt7IDYxfSx7ICA4fX0sIHt7MTg5fSx7ICA4fX0sIHt7MTI1fSx7ICA4fX0sIHt7MjUz
fSx7ICA4fX0sIHt7IDE5fSx7ICA5fX0sCi17ezI3NX0seyAgOX19LCB7ezE0N30seyAgOX19LCB7
ezQwM30seyAgOX19LCB7eyA4M30seyAgOX19LCB7ezMzOX0seyAgOX19LAote3syMTF9LHsgIDl9
fSwge3s0Njd9LHsgIDl9fSwge3sgNTF9LHsgIDl9fSwge3szMDd9LHsgIDl9fSwge3sxNzl9LHsg
IDl9fSwKLXt7NDM1fSx7ICA5fX0sIHt7MTE1fSx7ICA5fX0sIHt7MzcxfSx7ICA5fX0sIHt7MjQz
fSx7ICA5fX0sIHt7NDk5fSx7ICA5fX0sCi17eyAxMX0seyAgOX19LCB7ezI2N30seyAgOX19LCB7
ezEzOX0seyAgOX19LCB7ezM5NX0seyAgOX19LCB7eyA3NX0seyAgOX19LAote3szMzF9LHsgIDl9
fSwge3syMDN9LHsgIDl9fSwge3s0NTl9LHsgIDl9fSwge3sgNDN9LHsgIDl9fSwge3syOTl9LHsg
IDl9fSwKLXt7MTcxfSx7ICA5fX0sIHt7NDI3fSx7ICA5fX0sIHt7MTA3fSx7ICA5fX0sIHt7MzYz
fSx7ICA5fX0sIHt7MjM1fSx7ICA5fX0sCi17ezQ5MX0seyAgOX19LCB7eyAyN30seyAgOX19LCB7
ezI4M30seyAgOX19LCB7ezE1NX0seyAgOX19LCB7ezQxMX0seyAgOX19LAote3sgOTF9LHsgIDl9
fSwge3szNDd9LHsgIDl9fSwge3syMTl9LHsgIDl9fSwge3s0NzV9LHsgIDl9fSwge3sgNTl9LHsg
IDl9fSwKLXt7MzE1fSx7ICA5fX0sIHt7MTg3fSx7ICA5fX0sIHt7NDQzfSx7ICA5fX0sIHt7MTIz
fSx7ICA5fX0sIHt7Mzc5fSx7ICA5fX0sCi17ezI1MX0seyAgOX19LCB7ezUwN30seyAgOX19LCB7
eyAgN30seyAgOX19LCB7ezI2M30seyAgOX19LCB7ezEzNX0seyAgOX19LAote3szOTF9LHsgIDl9
fSwge3sgNzF9LHsgIDl9fSwge3szMjd9LHsgIDl9fSwge3sxOTl9LHsgIDl9fSwge3s0NTV9LHsg
IDl9fSwKLXt7IDM5fSx7ICA5fX0sIHt7Mjk1fSx7ICA5fX0sIHt7MTY3fSx7ICA5fX0sIHt7NDIz
fSx7ICA5fX0sIHt7MTAzfSx7ICA5fX0sCi17ezM1OX0seyAgOX19LCB7ezIzMX0seyAgOX19LCB7
ezQ4N30seyAgOX19LCB7eyAyM30seyAgOX19LCB7ezI3OX0seyAgOX19LAote3sxNTF9LHsgIDl9
fSwge3s0MDd9LHsgIDl9fSwge3sgODd9LHsgIDl9fSwge3szNDN9LHsgIDl9fSwge3syMTV9LHsg
IDl9fSwKLXt7NDcxfSx7ICA5fX0sIHt7IDU1fSx7ICA5fX0sIHt7MzExfSx7ICA5fX0sIHt7MTgz
fSx7ICA5fX0sIHt7NDM5fSx7ICA5fX0sCi17ezExOX0seyAgOX19LCB7ezM3NX0seyAgOX19LCB7
ezI0N30seyAgOX19LCB7ezUwM30seyAgOX19LCB7eyAxNX0seyAgOX19LAote3syNzF9LHsgIDl9
fSwge3sxNDN9LHsgIDl9fSwge3szOTl9LHsgIDl9fSwge3sgNzl9LHsgIDl9fSwge3szMzV9LHsg
IDl9fSwKLXt7MjA3fSx7ICA5fX0sIHt7NDYzfSx7ICA5fX0sIHt7IDQ3fSx7ICA5fX0sIHt7MzAz
fSx7ICA5fX0sIHt7MTc1fSx7ICA5fX0sCi17ezQzMX0seyAgOX19LCB7ezExMX0seyAgOX19LCB7
ezM2N30seyAgOX19LCB7ezIzOX0seyAgOX19LCB7ezQ5NX0seyAgOX19LAote3sgMzF9LHsgIDl9
fSwge3syODd9LHsgIDl9fSwge3sxNTl9LHsgIDl9fSwge3s0MTV9LHsgIDl9fSwge3sgOTV9LHsg
IDl9fSwKLXt7MzUxfSx7ICA5fX0sIHt7MjIzfSx7ICA5fX0sIHt7NDc5fSx7ICA5fX0sIHt7IDYz
fSx7ICA5fX0sIHt7MzE5fSx7ICA5fX0sCi17ezE5MX0seyAgOX19LCB7ezQ0N30seyAgOX19LCB7
ezEyN30seyAgOX19LCB7ezM4M30seyAgOX19LCB7ezI1NX0seyAgOX19LAote3s1MTF9LHsgIDl9
fSwge3sgIDB9LHsgIDd9fSwge3sgNjR9LHsgIDd9fSwge3sgMzJ9LHsgIDd9fSwge3sgOTZ9LHsg
IDd9fSwKLXt7IDE2fSx7ICA3fX0sIHt7IDgwfSx7ICA3fX0sIHt7IDQ4fSx7ICA3fX0sIHt7MTEy
fSx7ICA3fX0sIHt7ICA4fSx7ICA3fX0sCi17eyA3Mn0seyAgN319LCB7eyA0MH0seyAgN319LCB7
ezEwNH0seyAgN319LCB7eyAyNH0seyAgN319LCB7eyA4OH0seyAgN319LAote3sgNTZ9LHsgIDd9
fSwge3sxMjB9LHsgIDd9fSwge3sgIDR9LHsgIDd9fSwge3sgNjh9LHsgIDd9fSwge3sgMzZ9LHsg
IDd9fSwKLXt7MTAwfSx7ICA3fX0sIHt7IDIwfSx7ICA3fX0sIHt7IDg0fSx7ICA3fX0sIHt7IDUy
fSx7ICA3fX0sIHt7MTE2fSx7ICA3fX0sCi17eyAgM30seyAgOH19LCB7ezEzMX0seyAgOH19LCB7
eyA2N30seyAgOH19LCB7ezE5NX0seyAgOH19LCB7eyAzNX0seyAgOH19LAote3sxNjN9LHsgIDh9
fSwge3sgOTl9LHsgIDh9fSwge3syMjd9LHsgIDh9fQotfTsKLQotbG9jYWwgY29uc3QgY3RfZGF0
YSBzdGF0aWNfZHRyZWVbRF9DT0RFU10gPSB7Ci17eyAwfSx7IDV9fSwge3sxNn0seyA1fX0sIHt7
IDh9LHsgNX19LCB7ezI0fSx7IDV9fSwge3sgNH0seyA1fX0sCi17ezIwfSx7IDV9fSwge3sxMn0s
eyA1fX0sIHt7Mjh9LHsgNX19LCB7eyAyfSx7IDV9fSwge3sxOH0seyA1fX0sCi17ezEwfSx7IDV9
fSwge3syNn0seyA1fX0sIHt7IDZ9LHsgNX19LCB7ezIyfSx7IDV9fSwge3sxNH0seyA1fX0sCi17
ezMwfSx7IDV9fSwge3sgMX0seyA1fX0sIHt7MTd9LHsgNX19LCB7eyA5fSx7IDV9fSwge3syNX0s
eyA1fX0sCi17eyA1fSx7IDV9fSwge3syMX0seyA1fX0sIHt7MTN9LHsgNX19LCB7ezI5fSx7IDV9
fSwge3sgM30seyA1fX0sCi17ezE5fSx7IDV9fSwge3sxMX0seyA1fX0sIHt7Mjd9LHsgNX19LCB7
eyA3fSx7IDV9fSwge3syM30seyA1fX0KLX07Ci0KLWNvbnN0IHVjaCBfZGlzdF9jb2RlW0RJU1Rf
Q09ERV9MRU5dID0gewotIDAsICAxLCAgMiwgIDMsICA0LCAgNCwgIDUsICA1LCAgNiwgIDYsICA2
LCAgNiwgIDcsICA3LCAgNywgIDcsICA4LCAgOCwgIDgsICA4LAotIDgsICA4LCAgOCwgIDgsICA5
LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAs
IDEwLAotMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMSwgMTEsIDExLCAxMSwgMTEs
IDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAotMTEsIDExLCAxMSwgMTEsIDEyLCAxMiwgMTIs
IDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAotMTIs
IDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwg
MTIsIDEzLCAxMywgMTMsIDEzLAotMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywg
MTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAotMTMsIDEzLCAxMywg
MTMsIDEzLCAxMywgMTMsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAx
NCwgMTQsIDE0LAotMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAx
NCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAotMTQsIDE0LCAxNCwgMTQsIDE0LCAx
NCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0
LAotMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTUsIDE1
LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAotMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1
LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAotMTUsIDE1
LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUs
IDE1LCAxNSwgMTUsIDE1LAotMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUs
IDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsICAwLCAgMCwgMTYsIDE3LAotMTgsIDE4LCAxOSwgMTks
IDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwg
MjIsIDIyLAotMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyNCwgMjQsIDI0LCAyNCwg
MjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LAotMjQsIDI0LCAyNCwgMjQsIDI1LCAyNSwg
MjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LAot
MjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAy
NiwgMjYsIDI2LCAyNiwgMjYsIDI2LAotMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAy
NiwgMjYsIDI2LCAyNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LAotMjcsIDI3LCAy
NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3
LCAyNywgMjcsIDI3LAotMjcsIDI3LCAyNywgMjcsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4
LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LAotMjgsIDI4LCAyOCwgMjgsIDI4
LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgs
IDI4LAotMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgs
IDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LAotMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgs
IDI4LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LAotMjks
IDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwg
MjksIDI5LCAyOSwgMjksIDI5LAotMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwg
MjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LAotMjksIDI5LCAyOSwg
MjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOQotfTsKLQotY29uc3QgdWNoIF9sZW5n
dGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdPSB7Ci0gMCwgIDEsICAyLCAgMywgIDQsICA1
LCAgNiwgIDcsICA4LCAgOCwgIDksICA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMiwgMTIs
Ci0xMywgMTMsIDEzLCAxMywgMTQsIDE0LCAxNCwgMTQsIDE1LCAxNSwgMTUsIDE1LCAxNiwgMTYs
IDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCi0xNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcs
IDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTksIDE5LCAxOSwgMTksCi0xOSwgMTks
IDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwg
MjAsIDIwLCAyMCwgMjAsCi0yMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwg
MjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMiwgMjIsCi0yMiwgMjIsIDIyLCAyMiwg
MjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAy
MywgMjMsCi0yMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDI0LCAyNCwgMjQsIDI0LCAy
NCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsCi0yNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAy
NCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsCi0y
NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1
LCAyNSwgMjUsIDI1LCAyNSwgMjUsCi0yNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1
LCAyNSwgMjUsIDI1LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsCi0yNiwgMjYsIDI2
LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYs
IDI2LCAyNiwgMjYsCi0yNiwgMjYsIDI2LCAyNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcs
IDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsCi0yNywgMjcsIDI3LCAyNywgMjcs
IDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyOAotfTsKLQotbG9jYWwg
Y29uc3QgaW50IGJhc2VfbGVuZ3RoW0xFTkdUSF9DT0RFU10gPSB7Ci0wLCAxLCAyLCAzLCA0LCA1
LCA2LCA3LCA4LCAxMCwgMTIsIDE0LCAxNiwgMjAsIDI0LCAyOCwgMzIsIDQwLCA0OCwgNTYsCi02
NCwgODAsIDk2LCAxMTIsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMAotfTsKLQotbG9jYWwgY29uc3Qg
aW50IGJhc2VfZGlzdFtEX0NPREVTXSA9IHsKLSAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDYsICAgICA4LCAgICAxMiwgICAgMTYsICAgIDI0LAotICAgMzIsICAgIDQ4LCAg
ICA2NCwgICAgOTYsICAgMTI4LCAgIDE5MiwgICAyNTYsICAgMzg0LCAgIDUxMiwgICA3NjgsCi0g
MTAyNCwgIDE1MzYsICAyMDQ4LCAgMzA3MiwgIDQwOTYsICA2MTQ0LCAgODE5MiwgMTIyODgsIDE2
Mzg0LCAyNDU3NgotfTsKLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96
bGliL3VuY29tcHIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3psaWIvdW5jb21wci5jCShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvemxpYi91bmNvbXByLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAs
MCBAQAotLyogdW5jb21wci5jIC0tIGRlY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gKiBDb3B5
cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMg
b2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAot
ICovCi0KLS8qIEAoIykgJElkOiB1bmNvbXByLmMsdiAzLjYgMjAwNS8wOC8wNCAxOToxNDoxNCB0
b3IlY3MuYnJvd24uZWR1IEV4cCAkICovCi0KLSNkZWZpbmUgWkxJQl9JTlRFUk5BTAotI2luY2x1
ZGUgInpsaWIuaCIKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIERlY29tcHJlc3NlcyB0
aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4g
aXMKLSAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwg
ZGVzdExlbiBpcyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwg
d2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKLSAgIGVudGlyZSB1bmNvbXBy
ZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUK
LSAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0
ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgotICAgYnkgc29tZSBtZWNoYW5pc20gb3V0c2lkZSB0aGUg
c2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKLSAgIFVwb24gZXhpdCwgZGVzdExl
biBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgotICAgICBUaGlz
IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgYSB3aG9sZSBmaWxlIGF0IG9uY2Ug
aWYgdGhlCi0gICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCi0KLSAgICAgdW5jb21wcmVzcyByZXR1
cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAotICAgZW5v
dWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0
aGUgb3V0cHV0Ci0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3
YXMgY29ycnVwdGVkLgotKi8KLWludCBaRVhQT1JUIHVuY29tcHJlc3MgKGRlc3QsIGRlc3RMZW4s
IHNvdXJjZSwgc291cmNlTGVuKQotICAgIEJ5dGVmICpkZXN0OwotICAgIHVMb25nZiAqZGVzdExl
bjsKLSAgICBjb25zdCBCeXRlZiAqc291cmNlOwotICAgIHVMb25nIHNvdXJjZUxlbjsKLXsKLSAg
ICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50IGVycjsKLQotICAgIHN0cmVhbS5uZXh0X2luID0g
KEJ5dGVmKilzb3VyY2U7Ci0gICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwot
ICAgIC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCi0gICAg
aWYgKCh1TG9uZylzdHJlYW0uYXZhaWxfaW4gIT0gc291cmNlTGVuKSByZXR1cm4gWl9CVUZfRVJS
T1I7Ci0KLSAgICBzdHJlYW0ubmV4dF9vdXQgPSBkZXN0OwotICAgIHN0cmVhbS5hdmFpbF9vdXQg
PSAodUludCkqZGVzdExlbjsKLSAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9vdXQgIT0gKmRl
c3RMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKLQotICAgIHN0cmVhbS56YWxsb2MgPSAoYWxsb2Nf
ZnVuYykwOwotICAgIHN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLQotICAgIGVyciA9IGlu
ZmxhdGVJbml0KCZzdHJlYW0pOwotICAgIGlmIChlcnIgIT0gWl9PSykgcmV0dXJuIGVycjsKLQot
ICAgIGVyciA9IGluZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOwotICAgIGlmIChlcnIgIT0gWl9T
VFJFQU1fRU5EKSB7Ci0gICAgICAgIGluZmxhdGVFbmQoJnN0cmVhbSk7Ci0gICAgICAgIGlmIChl
cnIgPT0gWl9ORUVEX0RJQ1QgfHwgKGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzdHJlYW0uYXZhaWxf
aW4gPT0gMCkpCi0gICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1
cm4gZXJyOwotICAgIH0KLSAgICAqZGVzdExlbiA9IHN0cmVhbS50b3RhbF9vdXQ7Ci0KLSAgICBl
cnIgPSBpbmZsYXRlRW5kKCZzdHJlYW0pOwotICAgIHJldHVybiBlcnI7Ci19CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemNvbmYuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemNvbmYuaAkocmV2aXNpb24gNTM3
MTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemNvbmYuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMzUgKzAsMCBAQAotLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9u
IG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0y
MDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24g
YW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogQCgjKSAk
SWQ6IHpjb25mLmgsdiAzLjkgMjAwNS8wOC8wNCAxOToxNDoxNCB0b3IlY3MuYnJvd24uZWR1IEV4
cCAkICovCi0KLSNpZm5kZWYgWkNPTkZfSAotI2RlZmluZSBaQ09ORl9ICi0KLS8qIFRoaXMgaW5j
bHVkZSBkb2VzIHByZWZpeGluZyBhcyBiZWxvdywgYnV0IHdpdGggYW4gdXBkYXRlZCBzZXQgb2Yg
bmFtZXMgKi8KLSNpbmNsdWRlICJtb3p6Y29uZi5oIgotCi0vKgotICogSWYgeW91ICpyZWFsbHkq
IG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25z
LAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxk
IGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNpZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5l
IGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwotIyAgZGVmaW5lIGRlZmxhdGUg
ICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAg
el9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUlu
aXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5l
IGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5p
dDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25h
cnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAg
ICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxh
dGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMK
LSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmlu
ZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRl
SW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rp
b25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAg
ICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2lu
ZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRl
Q29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAotIyAg
ZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5m
bGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKLSMgIGRlZmluZSBjb21wcmVzcyAg
ICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6
X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91
bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZp
bmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgotIyAgZGVmaW5lIGNyYzMyICAgICAg
ICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0
X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotCi0j
ICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZy
ZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAg
ICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRf
ZnVuYwotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1
SW50ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAg
ICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAg
ZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAg
ICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJ
bnRmCi0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUg
dm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAg
ICAgICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZp
bmVkKE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8
fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5l
IFdJTkRPV1MKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9X
Q0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgaWZuZGVmIFdJTjMyCi0jICAgIGRlZmluZSBX
SU4zMgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9T
MikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCi0jICBpZiAhZGVmaW5l
ZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCi0j
ICAgIGlmbmRlZiBTWVMxNkJJVAotIyAgICAgIGRlZmluZSBTWVMxNkJJVAotIyAgICBlbmRpZgot
IyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0
aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKLSAqIHRoYW4gNjRrIGJ5dGVz
IGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KLSAqLwotI2lm
ZGVmIFNZUzE2QklUCi0jICBkZWZpbmUgTUFYU0VHXzY0SwotI2VuZGlmCi0jaWZkZWYgTVNET1MK
LSMgIGRlZmluZSBVTkFMSUdORURfT0sKLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX1ZFUlNJT05f
XwotIyAgaWZuZGVmIFNUREMKLSMgICAgZGVmaW5lIFNUREMKLSMgIGVuZGlmCi0jICBpZiBfX1NU
RENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgICAgaWZuZGVmIFNUREM5OQotIyAgICAgIGRlZmlu
ZSBTVERDOTkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERD
KSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCi0jICBkZWZp
bmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18p
IHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAh
ZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBk
ZWZpbmVkKFdJTjMyKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERD
KSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQotIyAgZGVmaW5lIFNU
REMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAg
IC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCi0jICBkZWZpbmUgU1REQwotI2VuZGlm
Ci0KLSNpZm5kZWYgU1REQwotIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQo
U1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwotIyAgICBkZWZpbmUgY29uc3QgICAg
ICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KLSMgIGVuZGlm
Ci0jZW5kaWYKLQotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNv
cnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRl
ZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wK
LSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIg
Ki8KLSNpZm5kZWYgTUFYX01FTV9MRVZFTAotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZp
bmUgTUFYX01FTV9MRVZFTCA4Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkK
LSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBk
ZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KLSAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9X
QklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKLSAqIGNyZWF0
ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJh
Y3RlZCBieQotICogZ3ppcC4pCi0gKi8KLSNpZm5kZWYgTUFYX1dCSVRTCi0jICBkZWZpbmUgTUFY
X1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCi0jZW5kaWYKLQotLyogVGhlIG1lbW9y
eSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6Ci0gICAgICAgICAgICAo
MSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQotIHRoYXQgaXM6IDEy
OEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQg
dmFsdWVzKQotIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhh
bXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCi0gdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVt
ZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCi0gICAgIG1ha2UgQ0ZMQUdTPSIt
TyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKLSBPZiBjb3Vyc2UgdGhpcyB3aWxs
IGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgot
Ci0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAx
IDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQg
dmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCi0gZm9yIHNtYWxsIG9iamVjdHMuCi0qLwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLwotCi0jaWZuZGVm
IE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSMgIGlmZGVmIFNUREMKLSMgICAgZGVmaW5l
IE9GKGFyZ3MpICBhcmdzCi0jICBlbHNlCi0jICAgIGRlZmluZSBPRihhcmdzKSAgKCkKLSMgIGVu
ZGlmCi0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBu
ZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKLSAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBv
ciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCi0gKiBUaGlzIHdhcyB0
ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhh
dmUKLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVk
IHRoZSBtaXhlZCBtb2RlbCwKLSAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KLSAqLwot
I2lmZGVmIFNZUzE2QklUCi0jICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZN
TSkKLSAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01B
TExfTUVESVVNCi0jICAgIGlmZGVmIF9NU0NfVkVSCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0j
ICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMg
IGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKLSAgICAgLyog
VHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElV
TQotIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAg
ZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCi0gICAvKiBJZiBidWls
ZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCi0gICAgKiBUaGlz
IGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5j
cmVhc2UuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmIGRlZmluZWQoV0lOMzIp
ICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQot
IyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVy
biBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgWkVY
VEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZW5kaWYKLSMgICAgZW5k
aWYKLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLwotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcg
emxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCi0gICAgKiBk
ZWZpbmUgWkxJQl9XSU5BUEkuCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExM
IGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KLSAgICAqLwotIyAgaWZkZWYgWkxJ
Ql9XSU5BUEkKLSMgICAgaWZkZWYgRkFSCi0jICAgICAgdW5kZWYgRkFSCi0jICAgIGVuZGlmCi0j
ICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNl
IFpMSUIuREVGIGluc3RlYWQuICovCi0gICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBh
dGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCi0jICAgIGRlZmluZSBaRVhQ
T1JUIFdJTkFQSQotIyAgICBpZmRlZiBXSU4zMgotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lO
QVBJVgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKLSMgICAg
ZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQotIyAgaWZk
ZWYgWkxJQl9ETEwKLSMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgIGRlZmluZSBaRVhQ
T1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2Rl
Y2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRs
bGltcG9ydCkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBaRVhURVJO
Ci0jICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUCi0jICBk
ZWZpbmUgWkVYUE9SVAotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlRWQQotIyAgZGVmaW5lIFpFWFBP
UlRWQQotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jICBkZWZpbmUgRkFSCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8q
IDggYml0cyAqLwotI2VuZGlmCi10eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBi
aXRzIG9yIG1vcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMg
b3IgbW9yZSAqLwotCi0jaWZkZWYgU01BTExfTUVESVVNCi0gICAvKiBCb3JsYW5kIEMvQysrIGFu
ZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLwotIyAg
ZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCi0jZWxzZQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7
Ci0jZW5kaWYKLXR5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwotdHlwZWRlZiBpbnQgICBGQVIgaW50
ZjsKLXR5cGVkZWYgdUludCAgRkFSIHVJbnRmOwotdHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOwot
Ci0jaWZkZWYgU1REQwotICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVm
IHZvaWQgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7Ci0jZWxz
ZQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIEJ5dGUgRkFSICAg
KnZvaWRwZjsKLSAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7Ci0jZW5kaWYKLQotI2lmIDAg
ICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVwZGF0ZWQgYnkgLi9j
b25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSMg
IGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZk
ZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5k
aWYKLSMgIGRlZmluZSB6X29mZl90IG9mZl90Ci0jZW5kaWYKLSNpZm5kZWYgU0VFS19TRVQKLSMg
IGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9m
IGZpbGUuICAqLwotIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJv
bSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KLSMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAg
ICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCi0jZW5kaWYKLSNp
Zm5kZWYgel9vZmZfdAotIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwotI2VuZGlmCi0KLSNpZiBkZWZp
bmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVm
aW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgRkFSCi0jICAg
IHVuZGVmIEZBUgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1
cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwotI2lmIGRlZmluZWQo
X19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAgcHJhZ21h
IG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJE
RUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBwcmFnbWEg
bWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJ
TklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJhZ21hIG1h
cChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFy
eSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKLSMgICBw
cmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRl
X2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIp
Ci0jZW5kaWYKLQotI2VuZGlmIC8qIFpDT05GX0ggKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvemxpYi96bGliLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy96bGliL3psaWIuaAkocmV2aXNpb24gNTM3MTkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemxpYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEzNTcgKzAsMCBAQAotLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVy
YWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjMsIEp1bHkgMTh0
aCwgMjAwNQotCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkgYW5k
IE1hcmsgQWRsZXIKLQotICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhv
dXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAotICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwg
dGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi0gIGFyaXNpbmcgZnJv
bSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi0KLSAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRv
IGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gIGluY2x1ZGlu
ZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1
dGUgaXQKLSAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgot
Ci0gIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNl
bnRlZDsgeW91IG11c3Qgbm90Ci0gICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5h
bCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi0gICAgIGluIGEgcHJvZHVjdCwg
YW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQot
ICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgotICAyLiBBbHRlcmVkIHNvdXJj
ZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBi
ZQotICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi0g
IDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNv
dXJjZSBkaXN0cmlidXRpb24uCi0KLSAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxl
cgotICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1Ci0K
LQotICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJl
ZCBieSBSRkNzIChSZXF1ZXN0IGZvcgotICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBm
aWxlcyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dAotICAoemxpYiBmb3JtYXQp
LCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3Jt
YXQpLgotKi8KLQotI2lmbmRlZiBaTElCX0gKLSNkZWZpbmUgWkxJQl9ICi0KLSNpbmNsdWRlICJ6
Y29uZi5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNk
ZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuMyIKLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjMwCi0K
LS8qCi0gICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1v
cnkgY29tcHJlc3Npb24gYW5kCi0gIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcg
aW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkCi0gIGRhdGEuICBUaGlzIHZlcnNp
b24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kCi0g
IChkZWZsYXRpb24pIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5k
IHdpbGwgaGF2ZSB0aGUgc2FtZQotICBzdHJlYW0gaW50ZXJmYWNlLgotCi0gICAgIENvbXByZXNz
aW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdl
Ci0gIGVub3VnaCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwgb3Ig
Y2FuIGJlIGRvbmUgYnkKLSAgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0
aW9uLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKLSAgYXBwbGljYXRpb24gbXVzdCBwcm92aWRl
IG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAotICAocHJvdmlkaW5nIG1vcmUg
b3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLgotCi0gICAgIFRoZSBjb21wcmVzc2VkIGRh
dGEgZm9ybWF0IHVzZWQgYnkgZGVmYXVsdCBieSB0aGUgaW4tbWVtb3J5IGZ1bmN0aW9ucyBpcwot
ICB0aGUgemxpYiBmb3JtYXQsIHdoaWNoIGlzIGEgemxpYiB3cmFwcGVyIGRvY3VtZW50ZWQgaW4g
UkZDIDE5NTAsIHdyYXBwZWQKLSAgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0sIHdoaWNoIGlzIGl0
c2VsZiBkb2N1bWVudGVkIGluIFJGQyAxOTUxLgotCi0gICAgIFRoZSBsaWJyYXJ5IGFsc28gc3Vw
cG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdAotICB3
aXRoIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8gdXNpbmcgdGhlIGZ1bmN0
aW9ucyB0aGF0IHN0YXJ0Ci0gIHdpdGggImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEKLSAgZ3ppcCB3cmFwcGVyLCBkb2N1
bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgotCi0g
ICAgIFRoaXMgbGlicmFyeSBjYW4gb3B0aW9uYWxseSByZWFkIGFuZCB3cml0ZSBnemlwIHN0cmVh
bXMgaW4gbWVtb3J5IGFzIHdlbGwuCi0KLSAgICAgVGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25l
ZCB0byBiZSBjb21wYWN0IGFuZCBmYXN0IGZvciB1c2UgaW4gbWVtb3J5Ci0gIGFuZCBvbiBjb21t
dW5pY2F0aW9ucyBjaGFubmVscy4gIFRoZSBnemlwIGZvcm1hdCB3YXMgZGVzaWduZWQgZm9yIHNp
bmdsZS0KLSAgZmlsZSBjb21wcmVzc2lvbiBvbiBmaWxlIHN5c3RlbXMsIGhhcyBhIGxhcmdlciBo
ZWFkZXIgdGhhbiB6bGliIHRvIG1haW50YWluCi0gIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgYW5k
IHVzZXMgYSBkaWZmZXJlbnQsIHNsb3dlciBjaGVjayBtZXRob2QgdGhhbiB6bGliLgotCi0gICAg
IFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLiBUaGUgZGVj
b2RlciBjaGVja3MKLSAgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHNv
IHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlcgotICBjcmFzaCBldmVuIGluIGNhc2Ugb2YgY29ycnVw
dGVkIGlucHV0LgotKi8KLQotdHlwZWRlZiB2b2lkcGYgKCphbGxvY19mdW5jKSBPRigodm9pZHBm
IG9wYXF1ZSwgdUludCBpdGVtcywgdUludCBzaXplKSk7Ci10eXBlZGVmIHZvaWQgICAoKmZyZWVf
ZnVuYykgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgYWRkcmVzcykpOwotCi1zdHJ1Y3QgaW50
ZXJuYWxfc3RhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgewotICAgIEJ5dGVmICAg
ICpuZXh0X2luOyAgLyogbmV4dCBpbnB1dCBieXRlICovCi0gICAgdUludCAgICAgYXZhaWxfaW47
ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAg
ICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCi0K
LSAgICBCeXRlZiAgICAqbmV4dF9vdXQ7IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1
dCB0aGVyZSAqLwotICAgIHVJbnQgICAgIGF2YWlsX291dDsgLyogcmVtYWluaW5nIGZyZWUgc3Bh
Y2UgYXQgbmV4dF9vdXQgKi8KLSAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG5iIG9m
IGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KLQotICAgIGNoYXIgICAgICptc2c7ICAgICAgLyogbGFz
dCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCi0gICAgc3RydWN0IGludGVybmFs
X3N0YXRlIEZBUiAqc3RhdGU7IC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLwotCi0g
ICAgYWxsb2NfZnVuYyB6YWxsb2M7ICAvKiB1c2VkIHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBz
dGF0ZSAqLwotICAgIGZyZWVfZnVuYyAgemZyZWU7ICAgLyogdXNlZCB0byBmcmVlIHRoZSBpbnRl
cm5hbCBzdGF0ZSAqLwotICAgIHZvaWRwZiAgICAgb3BhcXVlOyAgLyogcHJpdmF0ZSBkYXRhIG9i
amVjdCBwYXNzZWQgdG8gemFsbG9jIGFuZCB6ZnJlZSAqLwotCi0gICAgaW50ICAgICBkYXRhX3R5
cGU7ICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGJpbmFyeSBvciB0ZXh0ICov
Ci0gICAgdUxvbmcgICBhZGxlcjsgICAgICAvKiBhZGxlcjMyIHZhbHVlIG9mIHRoZSB1bmNvbXBy
ZXNzZWQgZGF0YSAqLwotICAgIHVMb25nICAgcmVzZXJ2ZWQ7ICAgLyogcmVzZXJ2ZWQgZm9yIGZ1
dHVyZSB1c2UgKi8KLX0gel9zdHJlYW07Ci0KLXR5cGVkZWYgel9zdHJlYW0gRkFSICp6X3N0cmVh
bXA7Ci0KLS8qCi0gICAgIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHBhc3NlZCB0byBhbmQgZnJv
bSB6bGliIHJvdXRpbmVzLiAgU2VlIFJGQyAxOTUyCi0gIGZvciBtb3JlIGRldGFpbHMgb24gdGhl
IG1lYW5pbmdzIG9mIHRoZXNlIGZpZWxkcy4KLSovCi10eXBlZGVmIHN0cnVjdCBnel9oZWFkZXJf
cyB7Ci0gICAgaW50ICAgICB0ZXh0OyAgICAgICAvKiB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBi
ZWxpZXZlZCB0byBiZSB0ZXh0ICovCi0gICAgdUxvbmcgICB0aW1lOyAgICAgICAvKiBtb2RpZmlj
YXRpb24gdGltZSAqLwotICAgIGludCAgICAgeGZsYWdzOyAgICAgLyogZXh0cmEgZmxhZ3MgKG5v
dCB1c2VkIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi8KLSAgICBpbnQgICAgIG9zOyAgICAg
ICAgIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KLSAgICBCeXRlZiAgICpleHRyYTsgICAgIC8qIHBv
aW50ZXIgdG8gZXh0cmEgZmllbGQgb3IgWl9OVUxMIGlmIG5vbmUgKi8KLSAgICB1SW50ICAgIGV4
dHJhX2xlbjsgIC8qIGV4dHJhIGZpZWxkIGxlbmd0aCAodmFsaWQgaWYgZXh0cmEgIT0gWl9OVUxM
KSAqLwotICAgIHVJbnQgICAgZXh0cmFfbWF4OyAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hl
biByZWFkaW5nIGhlYWRlcikgKi8KLSAgICBCeXRlZiAgICpuYW1lOyAgICAgIC8qIHBvaW50ZXIg
dG8gemVyby10ZXJtaW5hdGVkIGZpbGUgbmFtZSBvciBaX05VTEwgKi8KLSAgICB1SW50ICAgIG5h
bWVfbWF4OyAgIC8qIHNwYWNlIGF0IG5hbWUgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8K
LSAgICBCeXRlZiAgICpjb21tZW50OyAgIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5hdGVkIGNv
bW1lbnQgb3IgWl9OVUxMICovCi0gICAgdUludCAgICBjb21tX21heDsgICAvKiBzcGFjZSBhdCBj
b21tZW50IChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCi0gICAgaW50ICAgICBoY3JjOyAg
ICAgICAvKiB0cnVlIGlmIHRoZXJlIHdhcyBvciB3aWxsIGJlIGEgaGVhZGVyIGNyYyAqLwotICAg
IGludCAgICAgZG9uZTsgICAgICAgLyogdHJ1ZSB3aGVuIGRvbmUgcmVhZGluZyBnemlwIGhlYWRl
ciAobm90IHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gd3JpdGluZyBhIGd6
aXAgZmlsZSkgKi8KLX0gZ3pfaGVhZGVyOwotCi10eXBlZGVmIGd6X2hlYWRlciBGQVIgKmd6X2hl
YWRlcnA7Ci0KLS8qCi0gICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgbmV4dF9pbiBhbmQg
YXZhaWxfaW4gd2hlbiBhdmFpbF9pbiBoYXMKLSAgIGRyb3BwZWQgdG8gemVyby4gSXQgbXVzdCB1
cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dCB3aGVuIGF2YWlsX291dAotICAgaGFzIGRyb3Bw
ZWQgdG8gemVyby4gVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSB6YWxsb2MsIHpmcmVl
IGFuZAotICAgb3BhcXVlIGJlZm9yZSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLiBBbGwgb3Ro
ZXIgZmllbGRzIGFyZSBzZXQgYnkgdGhlCi0gICBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBtdXN0
IG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLQotICAgVGhlIG9wYXF1ZSB2YWx1
ZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0
Ci0gICBwYXJhbWV0ZXIgZm9yIGNhbGxzIG9mIHphbGxvYyBhbmQgemZyZWUuIFRoaXMgY2FuIGJl
IHVzZWZ1bCBmb3IgY3VzdG9tCi0gICBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvbXByZXNzaW9u
IGxpYnJhcnkgYXR0YWNoZXMgbm8gbWVhbmluZyB0byB0aGUKLSAgIG9wYXF1ZSB2YWx1ZS4KLQot
ICAgemFsbG9jIG11c3QgcmV0dXJuIFpfTlVMTCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9y
eSBmb3IgdGhlIG9iamVjdC4KLSAgIElmIHpsaWIgaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVk
IGFwcGxpY2F0aW9uLCB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUKLSAgIHRocmVhZCBzYWZlLgot
Ci0gICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11
c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQotICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwg
bm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzCi0gICBpZiB0aGUgc3lt
Ym9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiBXQVJOSU5HOiBPbiBNU0RP
UywKLSAgIHBvaW50ZXJzIHJldHVybmVkIGJ5IHphbGxvYyBmb3Igb2JqZWN0cyBvZiBleGFjdGx5
IDY1NTM2IGJ5dGVzICptdXN0KgotICAgaGF2ZSB0aGVpciBvZmZzZXQgbm9ybWFsaXplZCB0byB6
ZXJvLiBUaGUgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9uCi0gICBwcm92aWRlZCBieSB0aGlz
IGxpYnJhcnkgZW5zdXJlcyB0aGlzIChzZWUgenV0aWwuYykuIFRvIHJlZHVjZSBtZW1vcnkKLSAg
IHJlcXVpcmVtZW50cyBhbmQgYXZvaWQgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMsIGF0
IHRoZSBleHBlbnNlIG9mCi0gICBjb21wcmVzc2lvbiByYXRpbywgY29tcGlsZSB0aGUgbGlicmFy
eSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCi0KLSAgIFRoZSBmaWVsZHMgdG90
YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvcgotICAgcHJv
Z3Jlc3MgcmVwb3J0cy4gQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3Rh
bCBzaXplIG9mCi0gICB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3Ig
dXNlIGluIHRoZSBkZWNvbXByZXNzb3IKLSAgIChwYXJ0aWN1bGFybHkgaWYgdGhlIGRlY29tcHJl
c3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4KLSAgIGEgc2luZ2xlIHN0ZXAp
LgotKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc3RhbnRzICovCi0KLSNkZWZp
bmUgWl9OT19GTFVTSCAgICAgIDAKLSNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDEgLyogd2lsbCBi
ZSByZW1vdmVkLCB1c2UgWl9TWU5DX0ZMVVNIIGluc3RlYWQgKi8KLSNkZWZpbmUgWl9TWU5DX0ZM
VVNIICAgIDIKLSNkZWZpbmUgWl9GVUxMX0ZMVVNIICAgIDMKLSNkZWZpbmUgWl9GSU5JU0ggICAg
ICAgIDQKLSNkZWZpbmUgWl9CTE9DSyAgICAgICAgIDUKLS8qIEFsbG93ZWQgZmx1c2ggdmFsdWVz
OyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KLQotI2Rl
ZmluZSBaX09LICAgICAgICAgICAgMAotI2RlZmluZSBaX1NUUkVBTV9FTkQgICAgMQotI2RlZmlu
ZSBaX05FRURfRElDVCAgICAgMgotI2RlZmluZSBaX0VSUk5PICAgICAgICAoLTEpCi0jZGVmaW5l
IFpfU1RSRUFNX0VSUk9SICgtMikKLSNkZWZpbmUgWl9EQVRBX0VSUk9SICAgKC0zKQotI2RlZmlu
ZSBaX01FTV9FUlJPUiAgICAoLTQpCi0jZGVmaW5lIFpfQlVGX0VSUk9SICAgICgtNSkKLSNkZWZp
bmUgWl9WRVJTSU9OX0VSUk9SICgtNikKLS8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNz
aW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZQotICogdmFsdWVzIGFyZSBlcnJv
cnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50
cy4KLSAqLwotCi0jZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gICAgICAgICAwCi0jZGVmaW5lIFpf
QkVTVF9TUEVFRCAgICAgICAgICAgICAxCi0jZGVmaW5lIFpfQkVTVF9DT01QUkVTU0lPTiAgICAg
ICA5Ci0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAgKC0xKQotLyogY29tcHJlc3Npb24g
bGV2ZWxzICovCi0KLSNkZWZpbmUgWl9GSUxURVJFRCAgICAgICAgICAgIDEKLSNkZWZpbmUgWl9I
VUZGTUFOX09OTFkgICAgICAgIDIKLSNkZWZpbmUgWl9STEUgICAgICAgICAgICAgICAgIDMKLSNk
ZWZpbmUgWl9GSVhFRCAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgWl9ERUZBVUxUX1NUUkFURUdZ
ICAgIDAKLS8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQyKCkgYmVsb3cg
Zm9yIGRldGFpbHMgKi8KLQotI2RlZmluZSBaX0JJTkFSWSAgIDAKLSNkZWZpbmUgWl9URVhUICAg
ICAxCi0jZGVmaW5lIFpfQVNDSUkgICAgWl9URVhUICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0
aCAxLjIuMiBhbmQgZWFybGllciAqLwotI2RlZmluZSBaX1VOS05PV04gIDIKLS8qIFBvc3NpYmxl
IHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi8K
LQotI2RlZmluZSBaX0RFRkxBVEVEICAgOAotLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0
aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbikgKi8KLQotI2RlZmlu
ZSBaX05VTEwgIDAgIC8qIGZvciBpbml0aWFsaXppbmcgemFsbG9jLCB6ZnJlZSwgb3BhcXVlICov
Ci0KLSNkZWZpbmUgemxpYl92ZXJzaW9uIHpsaWJWZXJzaW9uKCkKLS8qIGZvciBjb21wYXRpYmls
aXR5IHdpdGggdmVyc2lvbnMgPCAxLjAuMiAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
KiBiYXNpYyBmdW5jdGlvbnMgKi8KLQotWkVYVEVSTiBjb25zdCBjaGFyICogWkVYUE9SVCB6bGli
VmVyc2lvbiBPRigodm9pZCkpOwotLyogVGhlIGFwcGxpY2F0aW9uIGNhbiBjb21wYXJlIHpsaWJW
ZXJzaW9uIGFuZCBaTElCX1ZFUlNJT04gZm9yIGNvbnNpc3RlbmN5LgotICAgSWYgdGhlIGZpcnN0
IGNoYXJhY3RlciBkaWZmZXJzLCB0aGUgbGlicmFyeSBjb2RlIGFjdHVhbGx5IHVzZWQgaXMKLSAg
IG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSB1c2VkIGJ5IHRoZSBh
cHBsaWNhdGlvbi4KLSAgIFRoaXMgY2hlY2sgaXMgYXV0b21hdGljYWxseSBtYWRlIGJ5IGRlZmxh
dGVJbml0IGFuZCBpbmZsYXRlSW5pdC4KLSAqLwotCi0vKgotWkVYVEVSTiBpbnQgWkVYUE9SVCBk
ZWZsYXRlSW5pdCBPRigoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCkpOwotCi0gICAgIEluaXRp
YWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGNvbXByZXNzaW9uLiBUaGUgZmll
bGRzCi0gICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZv
cmUgYnkgdGhlIGNhbGxlci4KLSAgIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05V
TEwsIGRlZmxhdGVJbml0IHVwZGF0ZXMgdGhlbSB0bwotICAgdXNlIGRlZmF1bHQgYWxsb2NhdGlv
biBmdW5jdGlvbnMuCi0KLSAgICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIG11c3QgYmUgWl9ERUZB
VUxUX0NPTVBSRVNTSU9OLCBvciBiZXR3ZWVuIDAgYW5kIDk6Ci0gICAxIGdpdmVzIGJlc3Qgc3Bl
ZWQsIDkgZ2l2ZXMgYmVzdCBjb21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBhdAot
ICAgYWxsICh0aGUgaW5wdXQgZGF0YSBpcyBzaW1wbHkgY29waWVkIGEgYmxvY2sgYXQgYSB0aW1l
KS4KLSAgIFpfREVGQVVMVF9DT01QUkVTU0lPTiByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlz
ZSBiZXR3ZWVuIHNwZWVkIGFuZAotICAgY29tcHJlc3Npb24gKGN1cnJlbnRseSBlcXVpdmFsZW50
IHRvIGxldmVsIDYpLgotCi0gICAgIGRlZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNz
LCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90Ci0gICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVB
TV9FUlJPUiBpZiBsZXZlbCBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBsZXZlbCwKLSAgIFpf
VkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gKHpsaWJfdmVyc2lvbikg
aXMgaW5jb21wYXRpYmxlCi0gICB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxl
ciAoWkxJQl9WRVJTSU9OKS4KLSAgIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBl
cnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXBy
ZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCi0qLwotCi0KLVpFWFRFUk4g
aW50IFpFWFBPUlQgZGVmbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOwotLyoK
LSAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3Rv
cHMgd2hlbiB0aGUgaW5wdXQKLSAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBi
dWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKLSAgb3V0cHV0IGxhdGVu
Y3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdo
ZW4KLSAgZm9yY2VkIHRvIGZsdXNoLgotCi0gICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUg
YXMgZm9sbG93cy4gZGVmbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKLSAgZm9sbG93
aW5nIGFjdGlvbnM6Ci0KLSAgLSBDb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRf
aW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbgotICAgIGFjY29yZGluZ2x5LiBJZiBu
b3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90Ci0gICAg
ZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBh
cmUgdXBkYXRlZCBhbmQKLSAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQg
Zm9yIHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgotCi0gIC0gUHJvdmlkZSBtb3JlIG91dHB1
dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQK
LSAgICBhY2NvcmRpbmdseS4gVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIg
Zmx1c2ggaXMgbm9uIHplcm8uCi0gICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVz
IHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKLSAgICBzaG91bGQgYmUg
c2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCi0g
ICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4K
LQotICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxk
IGVuc3VyZSB0aGF0IGF0IGxlYXN0Ci0gIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwg
YnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZwotICBtb3JlIG91dHB1dCwg
YW5kIHVwZGF0aW5nIGF2YWlsX2luIG9yIGF2YWlsX291dCBhY2NvcmRpbmdseTsgYXZhaWxfb3V0
Ci0gIHNob3VsZCBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUgY2FsbC4gVGhlIGFwcGxpY2F0aW9u
IGNhbiBjb25zdW1lIHRoZQotICBjb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3Ig
ZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwKLSAgKGF2YWlsX291dCA9PSAw
KSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mIGRlZmxhdGUoKS4gSWYgZGVmbGF0ZSByZXR1cm5zIFpf
T0sKLSAgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFm
dGVyIG1ha2luZyByb29tIGluIHRoZQotICBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWln
aHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KLQotICAgIE5vcm1hbGx5IHRoZSBwYXJhbWV0ZXIg
Zmx1c2ggaXMgc2V0IHRvIFpfTk9fRkxVU0gsIHdoaWNoIGFsbG93cyBkZWZsYXRlIHRvCi0gIGRl
Y2lkZSBob3cgbXVjaCBkYXRhIHRvIGFjY3VtdWFsdGUgYmVmb3JlIHByb2R1Y2luZyBvdXRwdXQs
IGluIG9yZGVyIHRvCi0gIG1heGltaXplIGNvbXByZXNzaW9uLgotCi0gICAgSWYgdGhlIHBhcmFt
ZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9TWU5DX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMK
LSAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVk
IG9uIGEgYnl0ZSBib3VuZGFyeSwgc28KLSAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBnZXQg
YWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gKEluIHBhcnRpY3VsYXIKLSAgYXZhaWxf
aW4gaXMgemVybyBhZnRlciB0aGUgY2FsbCBpZiBlbm91Z2ggb3V0cHV0IHNwYWNlIGhhcyBiZWVu
IHByb3ZpZGVkCi0gIGJlZm9yZSB0aGUgY2FsbC4pICBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21w
cmVzc2lvbiBmb3Igc29tZSBjb21wcmVzc2lvbgotICBhbGdvcml0aG1zIGFuZCBzbyBpdCBzaG91
bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LgotCi0gICAgSWYgZmx1c2ggaXMgc2V0IHRv
IFpfRlVMTF9GTFVTSCwgYWxsIG91dHB1dCBpcyBmbHVzaGVkIGFzIHdpdGgKLSAgWl9TWU5DX0ZM
VVNILCBhbmQgdGhlIGNvbXByZXNzaW9uIHN0YXRlIGlzIHJlc2V0IHNvIHRoYXQgZGVjb21wcmVz
c2lvbiBjYW4KLSAgcmVzdGFydCBmcm9tIHRoaXMgcG9pbnQgaWYgcHJldmlvdXMgY29tcHJlc3Nl
ZCBkYXRhIGhhcyBiZWVuIGRhbWFnZWQgb3IgaWYKLSAgcmFuZG9tIGFjY2VzcyBpcyBkZXNpcmVk
LiBVc2luZyBaX0ZVTExfRkxVU0ggdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQotICBj
b21wcmVzc2lvbi4KLQotICAgIElmIGRlZmxhdGUgcmV0dXJucyB3aXRoIGF2YWlsX291dCA9PSAw
LCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluCi0gIHdpdGggdGhlIHNhbWUgdmFs
dWUgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQK
LSAgYXZhaWxfb3V0KSwgdW50aWwgdGhlIGZsdXNoIGlzIGNvbXBsZXRlIChkZWZsYXRlIHJldHVy
bnMgd2l0aCBub24temVybwotICBhdmFpbF9vdXQpLiBJbiB0aGUgY2FzZSBvZiBhIFpfRlVMTF9G
TFVTSCBvciBaX1NZTkNfRkxVU0gsIG1ha2Ugc3VyZSB0aGF0Ci0gIGF2YWlsX291dCBpcyBncmVh
dGVyIHRoYW4gc2l4IHRvIGF2b2lkIHJlcGVhdGVkIGZsdXNoIG1hcmtlcnMgZHVlIHRvCi0gIGF2
YWlsX291dCA9PSAwIG9uIHJldHVybi4KLQotICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMg
c2V0IHRvIFpfRklOSVNILCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCwKLSAgcGVuZGluZyBv
dXRwdXQgaXMgZmx1c2hlZCBhbmQgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIGlm
IHRoZXJlCi0gIHdhcyBlbm91Z2ggb3V0cHV0IHNwYWNlOyBpZiBkZWZsYXRlIHJldHVybnMgd2l0
aCBaX09LLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKLSAgY2FsbGVkIGFnYWluIHdpdGggWl9GSU5J
U0ggYW5kIG1vcmUgb3V0cHV0IHNwYWNlICh1cGRhdGVkIGF2YWlsX291dCkgYnV0IG5vCi0gIG1v
cmUgaW5wdXQgZGF0YSwgdW50aWwgaXQgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBvciBhbiBl
cnJvci4gQWZ0ZXIKLSAgZGVmbGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25s
eSBwb3NzaWJsZSBvcGVyYXRpb25zIG9uIHRoZQotICBzdHJlYW0gYXJlIGRlZmxhdGVSZXNldCBv
ciBkZWZsYXRlRW5kLgotCi0gICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0
ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZSBjb21wcmVzc2lvbgotICBpcyB0byBiZSBkb25lIGlu
IGEgc2luZ2xlIHN0ZXAuIEluIHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QK
LSAgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gSWYgZGVm
bGF0ZSBkb2VzIG5vdCByZXR1cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2Fs
bGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KLQotICAgIGRlZmxhdGUoKSBzZXRzIHN0cm0t
PmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCi0gIHNvIGZh
ciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLgotCi0gICAgZGVmbGF0ZSgpIG1heSB1cGRhdGUg
c3RybS0+ZGF0YV90eXBlIGlmIGl0IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhYm91dAotICB0aGUg
aW5wdXQgZGF0YSB0eXBlIChaX0JJTkFSWSBvciBaX1RFWFQpLiBJbiBkb3VidCwgdGhlIGRhdGEg
aXMgY29uc2lkZXJlZAotICBiaW5hcnkuIFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRp
b24gcHVycG9zZXMgYW5kIGRvZXMgbm90IGFmZmVjdAotICB0aGUgY29tcHJlc3Npb24gYWxnb3Jp
dGhtIGluIGFueSBtYW5uZXIuCi0KLSAgICBkZWZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUg
cHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dAotICBwcm9jZXNzZWQgb3IgbW9yZSBv
dXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgYWxsIGlucHV0IGhhcyBiZWVuCi0gIGNv
bnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkIChvbmx5IHdoZW4gZmx1c2gg
aXMgc2V0IHRvCi0gIFpfRklOSVNIKSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0
ZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQotICBpZiBuZXh0X2luIG9yIG5leHRfb3V0
IHdhcyBOVUxMKSwgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUKLSAgKGZv
ciBleGFtcGxlIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuIE5vdGUgdGhhdCBaX0JV
Rl9FUlJPUiBpcyBub3QKLSAgZmF0YWwsIGFuZCBkZWZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2Fp
biB3aXRoIG1vcmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0Ci0gIHNwYWNlIHRvIGNvbnRpbnVlIGNv
bXByZXNzaW5nLgotKi8KLQotCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVFbmQgT0YoKHpf
c3RyZWFtcCBzdHJtKSk7Ci0vKgotICAgICBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEg
c3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZyZWVkLgotICAgVGhpcyBmdW5jdGlvbiBk
aXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueQotICAg
cGVuZGluZyBvdXRwdXQuCi0KLSAgICAgZGVmbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vz
cywgWl9TVFJFQU1fRVJST1IgaWYgdGhlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVu
dCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBzdHJlYW0gd2FzIGZyZWVkCi0gICBwcmVtYXR1cmVseSAo
c29tZSBpbnB1dCBvciBvdXRwdXQgd2FzIGRpc2NhcmRlZCkuIEluIHRoZSBlcnJvciBjYXNlLAot
ICAgbXNnIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hp
Y2ggbXVzdCBub3QgYmUKLSAgIGRlYWxsb2NhdGVkKS4KLSovCi0KLQotLyoKLVpFWFRFUk4gaW50
IFpFWFBPUlQgaW5mbGF0ZUluaXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7Ci0KLSAgICAgSW5pdGlh
bGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgZGVjb21wcmVzc2lvbi4gVGhlIGZp
ZWxkcwotICAgbmV4dF9pbiwgYXZhaWxfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0
IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQotICAgdGhlIGNhbGxlci4gSWYgbmV4dF9pbiBpcyBu
b3QgWl9OVUxMIGFuZCBhdmFpbF9pbiBpcyBsYXJnZSBlbm91Z2ggKHRoZSBleGFjdAotICAgdmFs
dWUgZGVwZW5kcyBvbiB0aGUgY29tcHJlc3Npb24gbWV0aG9kKSwgaW5mbGF0ZUluaXQgZGV0ZXJt
aW5lcyB0aGUKLSAgIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB6bGliIGhlYWRlciBhbmQg
YWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMKLSAgIGFjY29yZGluZ2x5OyBvdGhlcndpc2Ug
dGhlIGFsbG9jYXRpb24gd2lsbCBiZSBkZWZlcnJlZCB0byB0aGUgZmlyc3QgY2FsbCBvZgotICAg
aW5mbGF0ZS4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05VTEwsIGluZmxhdGVJ
bml0IHVwZGF0ZXMgdGhlbSB0bwotICAgdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMu
Ci0KLSAgICAgaW5mbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9S
IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCi0gICBtZW1vcnksIFpfVkVSU0lPTl9FUlJPUiBpZiB0
aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCi0gICB2ZXJz
aW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlci4gIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBp
cyBubyBlcnJvcgotICAgbWVzc2FnZS4gaW5mbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkg
ZGVjb21wcmVzc2lvbiBhcGFydCBmcm9tIHJlYWRpbmcKLSAgIHRoZSB6bGliIGhlYWRlciBpZiBw
cmVzZW50OiB0aGlzIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4dF9pbiBhbmQK
LSAgIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0IG5leHRfb3V0IGFuZCBhdmFpbF9vdXQg
YXJlIHVuY2hhbmdlZC4pCi0qLwotCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZSBPRigo
el9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOwotLyoKLSAgICBpbmZsYXRlIGRlY29tcHJlc3Nl
cyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAotICBi
dWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0
IG1heSBpbnRyb2R1Y2UKLSAgc29tZSBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRo
b3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hlbgotICBmb3JjZWQgdG8gZmx1c2gu
Ci0KLSAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gaW5mbGF0ZSBwZXJm
b3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKLSAgZm9sbG93aW5nIGFjdGlvbnM6Ci0KLSAgLSBEZWNv
bXByZXNzIG1vcmUgaW5wdXQgc3RhcnRpbmcgYXQgbmV4dF9pbiBhbmQgdXBkYXRlIG5leHRfaW4g
YW5kIGF2YWlsX2luCi0gICAgYWNjb3JkaW5nbHkuIElmIG5vdCBhbGwgaW5wdXQgY2FuIGJlIHBy
b2Nlc3NlZCAoYmVjYXVzZSB0aGVyZSBpcyBub3QKLSAgICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0
cHV0IGJ1ZmZlciksIG5leHRfaW4gaXMgdXBkYXRlZCBhbmQgcHJvY2Vzc2luZwotICAgIHdpbGwg
cmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgaW5mbGF0ZSgpLgotCi0g
IC0gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5l
eHRfb3V0IGFuZCBhdmFpbF9vdXQKLSAgICBhY2NvcmRpbmdseS4gIGluZmxhdGUoKSBwcm92aWRl
cyBhcyBtdWNoIG91dHB1dCBhcyBwb3NzaWJsZSwgdW50aWwgdGhlcmUKLSAgICBpcyBubyBtb3Jl
IGlucHV0IGRhdGEgb3Igbm8gbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAoc2VlIGJl
bG93Ci0gICAgYWJvdXQgdGhlIGZsdXNoIHBhcmFtZXRlcikuCi0KLSAgQmVmb3JlIHRoZSBjYWxs
IG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFz
dAotICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlu
cHV0IGFuZC9vciBjb25zdW1pbmcKLSAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4
dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4KLSAgVGhlIGFwcGxpY2F0aW9uIGNh
biBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvcgotICBl
eGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0ID09IDApLCBv
ciBhZnRlciBlYWNoCi0gIGNhbGwgb2YgaW5mbGF0ZSgpLiBJZiBpbmZsYXRlIHJldHVybnMgWl9P
SyBhbmQgd2l0aCB6ZXJvIGF2YWlsX291dCwgaXQKLSAgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYWZ0
ZXIgbWFraW5nIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIgYmVjYXVzZSB0aGVyZQotICBtaWdo
dCBiZSBtb3JlIG91dHB1dCBwZW5kaW5nLgotCi0gICAgVGhlIGZsdXNoIHBhcmFtZXRlciBvZiBp
bmZsYXRlKCkgY2FuIGJlIFpfTk9fRkxVU0gsIFpfU1lOQ19GTFVTSCwKLSAgWl9GSU5JU0gsIG9y
IFpfQkxPQ0suIFpfU1lOQ19GTFVTSCByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKSBmbHVzaCBhcyBt
dWNoCi0gIG91dHB1dCBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gWl9CTE9DSyBy
ZXF1ZXN0cyB0aGF0IGluZmxhdGUoKSBzdG9wCi0gIGlmIGFuZCB3aGVuIGl0IGdldHMgdG8gdGhl
IG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gV2hlbiBkZWNvZGluZyB0aGUKLSAgemxpYiBv
ciBnemlwIGZvcm1hdCwgdGhpcyB3aWxsIGNhdXNlIGluZmxhdGUoKSB0byByZXR1cm4gaW1tZWRp
YXRlbHkgYWZ0ZXIKLSAgdGhlIGhlYWRlciBhbmQgYmVmb3JlIHRoZSBmaXJzdCBibG9jay4gV2hl
biBkb2luZyBhIHJhdyBpbmZsYXRlLCBpbmZsYXRlKCkKLSAgd2lsbCBnbyBhaGVhZCBhbmQgcHJv
Y2VzcyB0aGUgZmlyc3QgYmxvY2ssIGFuZCB3aWxsIHJldHVybiB3aGVuIGl0IGdldHMgdG8KLSAg
dGhlIGVuZCBvZiB0aGF0IGJsb2NrLCBvciB3aGVuIGl0IHJ1bnMgb3V0IG9mIGRhdGEuCi0KLSAg
ICBUaGUgWl9CTE9DSyBvcHRpb24gYXNzaXN0cyBpbiBhcHBlbmRpbmcgdG8gb3IgY29tYmluaW5n
IGRlZmxhdGUgc3RyZWFtcy4KLSAgQWxzbyB0byBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGlu
ZmxhdGUoKSB3aWxsIHNldCBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCi0gIG51bWJlciBvZiB1bnVz
ZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2
NAotICBpZiBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGlu
IHRoZSBkZWZsYXRlIHN0cmVhbSwKLSAgcGx1cyAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGlt
bWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jawotICBjb2RlIG9yIGRlY29k
aW5nIHRoZSBjb21wbGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUg
b2YgdGhlCi0gIGRlZmxhdGUgc3RyZWFtLiBUaGUgZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGlu
ZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlCi0gIHVuY29tcHJlc3NlZCBkYXRhIGZyb20gdGhhdCBi
bG9jayBoYXMgYmVlbiB3cml0dGVuIHRvIHN0cm0tPm5leHRfb3V0LiAgVGhlCi0gIG51bWJlciBv
ZiB1bnVzZWQgYml0cyBtYXkgaW4gZ2VuZXJhbCBiZSBncmVhdGVyIHRoYW4gc2V2ZW4sIGV4Y2Vw
dCB3aGVuCi0gIGJpdCA3IG9mIGRhdGFfdHlwZSBpcyBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG51
bWJlciBvZiB1bnVzZWQgYml0cyB3aWxsIGJlCi0gIGxlc3MgdGhhbiBlaWdodC4KLQotICAgIGlu
ZmxhdGUoKSBzaG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgWl9TVFJF
QU1fRU5EIG9yIGFuCi0gIGVycm9yLiBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRv
IGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwCi0gIChhIHNpbmdsZSBjYWxsIG9mIGluZmxh
dGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8KLSAgWl9GSU5JU0guIElu
IHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5n
Ci0gIG91dHB1dCBpcyBmbHVzaGVkOyBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8g
aG9sZCBhbGwgdGhlCi0gIHVuY29tcHJlc3NlZCBkYXRhLiAoVGhlIHNpemUgb2YgdGhlIHVuY29t
cHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4gc2F2ZWQKLSAgYnkgdGhlIGNvbXByZXNzb3IgZm9y
IHRoaXMgcHVycG9zZS4pIFRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGlzIHN0cmVhbSBtdXN0Ci0g
IGJlIGluZmxhdGVFbmQgdG8gZGVhbGxvY2F0ZSB0aGUgZGVjb21wcmVzc2lvbiBzdGF0ZS4gVGhl
IHVzZSBvZiBaX0ZJTklTSAotICBpcyBuZXZlciByZXF1aXJlZCwgYnV0IGNhbiBiZSB1c2VkIHRv
IGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2gKLSAgbWF5IGJlIHVzZWQgZm9y
IHRoZSBzaW5nbGUgaW5mbGF0ZSgpIGNhbGwuCi0KLSAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlv
biwgaW5mbGF0ZSgpIGFsd2F5cyBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0IGFzCi0gIHBvc3NpYmxl
IHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2Fj
aCBvbiB0aGUKLSAgZmlyc3QgY2FsbC4gU28gdGhlIG9ubHkgZWZmZWN0IG9mIHRoZSBmbHVzaCBw
YXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICBpcyBvbiB0aGUgcmV0dXJuIHZhbHVl
IG9mIGluZmxhdGUoKSwgYXMgbm90ZWQgYmVsb3csIG9yIHdoZW4gaXQgcmV0dXJucyBlYXJseQot
ICBiZWNhdXNlIFpfQkxPQ0sgaXMgdXNlZC4KLQotICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5
IGlzIG5lZWRlZCBhZnRlciB0aGlzIGNhbGwgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeQotICBi
ZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBv
ZiB0aGUgZGljdGlvbmFyeQotICBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMg
Wl9ORUVEX0RJQ1Q7IG90aGVyd2lzZSBpdCBzZXRzCi0gIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxl
cjMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAotICB0
b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJv
ciBjb2RlIGFzIGRlc2NyaWJlZAotICBiZWxvdy4gQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBp
bmZsYXRlKCkgY2hlY2tzIHRoYXQgaXRzIGNvbXB1dGVkIGFkbGVyMzIKLSAgY2hlY2tzdW0gaXMg
ZXF1YWwgdG8gdGhhdCBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX1NUUkVB
TV9FTkQKLSAgb25seSBpZiB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdC4KLQotICAgIGluZmxhdGUo
KSB3aWxsIGRlY29tcHJlc3MgYW5kIGNoZWNrIGVpdGhlciB6bGliLXdyYXBwZWQgb3IgZ3ppcC13
cmFwcGVkCi0gIGRlZmxhdGUgZGF0YS4gIFRoZSBoZWFkZXIgdHlwZSBpcyBkZXRlY3RlZCBhdXRv
bWF0aWNhbGx5LiAgQW55IGluZm9ybWF0aW9uCi0gIGNvbnRhaW5lZCBpbiB0aGUgZ3ppcCBoZWFk
ZXIgaXMgbm90IHJldGFpbmVkLCBzbyBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRoYXQKLSAgaW5m
b3JtYXRpb24gc2hvdWxkIGluc3RlYWQgdXNlIHJhdyBpbmZsYXRlLCBzZWUgaW5mbGF0ZUluaXQy
KCkgYmVsb3csIG9yCi0gIGluZmxhdGVCYWNrKCkgYW5kIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nl
c3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZAotICB0cmFpbGVyLgotCi0gICAgaW5mbGF0ZSgp
IHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQg
cHJvY2Vzc2VkCi0gIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIHRo
ZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKLSAgYmVlbiByZWFjaGVkIGFuZCBhbGwg
dW5jb21wcmVzc2VkIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCwgWl9ORUVEX0RJQ1QgaWYgYQot
ICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgWl9EQVRBX0VSUk9S
IGlmIHRoZSBpbnB1dCBkYXRhIHdhcwotICBjb3JydXB0ZWQgKGlucHV0IHN0cmVhbSBub3QgY29u
Zm9ybWluZyB0byB0aGUgemxpYiBmb3JtYXQgb3IgaW5jb3JyZWN0IGNoZWNrCi0gIHZhbHVlKSwg
Wl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudCAo
Zm9yIGV4YW1wbGUKLSAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgTlVMTCksIFpfTUVNX0VS
Uk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSwKLSAgWl9CVUZfRVJST1IgaWYgbm8g
cHJvZ3Jlc3MgaXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0
aGUKLSAgb3V0cHV0IGJ1ZmZlciB3aGVuIFpfRklOSVNIIGlzIHVzZWQuIE5vdGUgdGhhdCBaX0JV
Rl9FUlJPUiBpcyBub3QgZmF0YWwsIGFuZAotICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2Fp
biB3aXRoIG1vcmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0IHNwYWNlIHRvCi0gIGNvbnRpbnVlIGRl
Y29tcHJlc3NpbmcuIElmIFpfREFUQV9FUlJPUiBpcyByZXR1cm5lZCwgdGhlIGFwcGxpY2F0aW9u
IG1heSB0aGVuCi0gIGNhbGwgaW5mbGF0ZVN5bmMoKSB0byBsb29rIGZvciBhIGdvb2QgY29tcHJl
c3Npb24gYmxvY2sgaWYgYSBwYXJ0aWFsIHJlY292ZXJ5Ci0gIG9mIHRoZSBkYXRhIGlzIGRlc2ly
ZWQuCi0qLwotCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUVuZCBPRigoel9zdHJlYW1w
IHN0cm0pKTsKLS8qCi0gICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1
cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCi0gICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRz
IGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55Ci0gICBwZW5kaW5n
IG91dHB1dC4KLQotICAgICBpbmZsYXRlRW5kIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NU
UkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlCi0gICB3YXMgaW5jb25zaXN0ZW50LiBJbiB0
aGUgZXJyb3IgY2FzZSwgbXNnIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEKLSAgIHN0
YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkKS4KLSovCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2VkIGZ1bmN0aW9ucyAqLwotCi0vKgotICAgIFRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQgb25seSBpbiBzb21lIHNwZWNpYWwgYXBw
bGljYXRpb25zLgotKi8KLQotLyoKLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUluaXQyIE9G
KCh6X3N0cmVhbXAgc3RybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbWV0
aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1lbUxldmVsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgc3RyYXRlZ3kpKTsKLQot
ICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBkZWZsYXRlSW5pdCB3aXRoIG1vcmUgY29t
cHJlc3Npb24gb3B0aW9ucy4gVGhlCi0gICBmaWVsZHMgbmV4dF9pbiwgemFsbG9jLCB6ZnJlZSBh
bmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5Ci0gICB0aGUgY2FsbGVyLgot
Ci0gICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuIEl0
IG11c3QgYmUgWl9ERUZMQVRFRCBpbgotICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5Lgot
Ci0gICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGht
IG9mIHRoZSB3aW5kb3cgc2l6ZQotICAgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlciku
IEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMKLSAgIHZlcnNpb24gb2Yg
dGhlIGxpYnJhcnkuIExhcmdlciB2YWx1ZXMgb2YgdGhpcyBwYXJhbWV0ZXIgcmVzdWx0IGluIGJl
dHRlcgotICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUg
ZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZgotICAgZGVmbGF0ZUluaXQgaXMgdXNlZCBpbnN0ZWFkLgot
Ci0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGRlZmxhdGUuIElu
IHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKLSAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiBk
ZWZsYXRlKCkgd2lsbCB0aGVuIGdlbmVyYXRlIHJhdyBkZWZsYXRlIGRhdGEKLSAgIHdpdGggbm8g
emxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBj
aGVjayB2YWx1ZS4KLQotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIGdyZWF0ZXIgdGhhbiAx
NSBmb3Igb3B0aW9uYWwgZ3ppcCBlbmNvZGluZy4gQWRkCi0gICAxNiB0byB3aW5kb3dCaXRzIHRv
IHdyaXRlIGEgc2ltcGxlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGFyb3VuZCB0aGUKLSAgIGNv
bXByZXNzZWQgZGF0YSBpbnN0ZWFkIG9mIGEgemxpYiB3cmFwcGVyLiBUaGUgZ3ppcCBoZWFkZXIg
d2lsbCBoYXZlIG5vCi0gICBmaWxlIG5hbWUsIG5vIGV4dHJhIGRhdGEsIG5vIGNvbW1lbnQsIG5v
IG1vZGlmaWNhdGlvbiB0aW1lIChzZXQgdG8gemVybyksCi0gICBubyBoZWFkZXIgY3JjLCBhbmQg
dGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBiZSBzZXQgdG8gMjU1ICh1bmtub3duKS4gIElmIGEK
LSAgIGd6aXAgc3RyZWFtIGlzIGJlaW5nIHdyaXR0ZW4sIHN0cm0tPmFkbGVyIGlzIGEgY3JjMzIg
aW5zdGVhZCBvZiBhbiBhZGxlcjMyLgotCi0gICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3Bl
Y2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCi0gICBmb3IgdGhlIGlu
dGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkg
YnV0Ci0gICBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOyBtZW1MZXZlbD05
IHVzZXMgbWF4aW11bSBtZW1vcnkKLSAgIGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2
YWx1ZSBpcyA4LiBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5Ci0gICB1c2FnZSBhcyBhIGZ1
bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgotCi0gICAgIFRoZSBzdHJhdGVneSBw
YXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0
aGUKLSAgIHZhbHVlIFpfREVGQVVMVF9TVFJBVEVHWSBmb3Igbm9ybWFsIGRhdGEsIFpfRklMVEVS
RUQgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYQotICAgZmlsdGVyIChvciBwcmVkaWN0b3IpLCBaX0hV
RkZNQU5fT05MWSB0byBmb3JjZSBIdWZmbWFuIGVuY29kaW5nIG9ubHkgKG5vCi0gICBzdHJpbmcg
bWF0Y2gpLCBvciBaX1JMRSB0byBsaW1pdCBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVu
Z3RoCi0gICBlbmNvZGluZykuIEZpbHRlcmVkIGRhdGEgY29uc2lzdHMgbW9zdGx5IG9mIHNtYWxs
IHZhbHVlcyB3aXRoIGEgc29tZXdoYXQKLSAgIHJhbmRvbSBkaXN0cmlidXRpb24uIEluIHRoaXMg
Y2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyB0dW5lZCB0bwotICAgY29tcHJlc3Mg
dGhlbSBiZXR0ZXIuIFRoZSBlZmZlY3Qgb2YgWl9GSUxURVJFRCBpcyB0byBmb3JjZSBtb3JlIEh1
ZmZtYW4KLSAgIGNvZGluZyBhbmQgbGVzcyBzdHJpbmcgbWF0Y2hpbmc7IGl0IGlzIHNvbWV3aGF0
IGludGVybWVkaWF0ZSBiZXR3ZWVuCi0gICBaX0RFRkFVTFQgYW5kIFpfSFVGRk1BTl9PTkxZLiBa
X1JMRSBpcyBkZXNpZ25lZCB0byBiZSBhbG1vc3QgYXMgZmFzdCBhcwotICAgWl9IVUZGTUFOX09O
TFksIGJ1dCBnaXZlIGJldHRlciBjb21wcmVzc2lvbiBmb3IgUE5HIGltYWdlIGRhdGEuIFRoZSBz
dHJhdGVneQotICAgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Npb24gcmF0aW8g
YnV0IG5vdCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlCi0gICBjb21wcmVzc2VkIG91dHB1dCBldmVu
IGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4gIFpfRklYRUQgcHJldmVudHMgdGhlCi0g
ICB1c2Ugb2YgZHluYW1pYyBIdWZmbWFuIGNvZGVzLCBhbGxvd2luZyBmb3IgYSBzaW1wbGVyIGRl
Y29kZXIgZm9yIHNwZWNpYWwKLSAgIGFwcGxpY2F0aW9ucy4KLQotICAgICAgZGVmbGF0ZUluaXQy
IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVu
b3VnaAotICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlk
IChzdWNoIGFzIGFuIGludmFsaWQKLSAgIG1ldGhvZCkuIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0
aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQyIGRvZXMKLSAgIG5vdCBwZXJm
b3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgotKi8K
LQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1w
IHN0cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBCeXRlZiAqZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKLS8qCi0gICAgIEluaXRpYWxpemVzIHRoZSBj
b21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKLSAgIHdp
dGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBtdXN0
IGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0
MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkKLSAgIGNhbGwgb2YgZGVmbGF0ZS4gVGhlIGNv
bXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCi0gICBk
aWN0aW9uYXJ5IChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgotCi0gICAgIFRoZSBkaWN0aW9u
YXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBs
aWtlbHkKLSAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXBy
ZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKLSAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5
IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKLSAgIGRpY3Rp
b25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNo
b3J0IGFuZCBjYW4gYmUKLSAgIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRh
IGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyIHRoYW4KLSAgIHdpdGggdGhlIGRlZmF1bHQg
ZW1wdHkgZGljdGlvbmFyeS4KLQotICAgICBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNv
bXByZXNzaW9uIGRhdGEgc3RydWN0dXJlcyBzZWxlY3RlZCBieQotICAgZGVmbGF0ZUluaXQgb3Ig
ZGVmbGF0ZUluaXQyLCBhIHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkgbWF5IGluIGVmZmVjdCBiZQot
ICAgZGlzY2FyZGVkLCBmb3IgZXhhbXBsZSBpZiB0aGUgZGljdGlvbmFyeSBpcyBsYXJnZXIgdGhh
biB0aGUgd2luZG93IHNpemUgaW4KLSAgIGRlZmxhdGUgb3IgZGVmbGF0ZTIuIFRodXMgdGhlIHN0
cmluZ3MgbW9zdCBsaWtlbHkgdG8gYmUgdXNlZnVsIHNob3VsZCBiZQotICAgcHV0IGF0IHRoZSBl
bmQgb2YgdGhlIGRpY3Rpb25hcnksIG5vdCBhdCB0aGUgZnJvbnQuIEluIGFkZGl0aW9uLCB0aGUK
LSAgIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZGVmbGF0ZSB3aWxsIHVzZSBhdCBtb3N0IHRo
ZSB3aW5kb3cgc2l6ZSBtaW51cwotICAgMjYyIGJ5dGVzIG9mIHRoZSBwcm92aWRlZCBkaWN0aW9u
YXJ5LgotCi0gICAgIFVwb24gcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24sIHN0cm0tPmFkbGVyIGlz
IHNldCB0byB0aGUgYWRsZXIzMiB2YWx1ZQotICAgb2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNv
bXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZhbHVlIHRvIGRldGVybWluZQotICAgd2hpY2gg
ZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLiAoVGhlIGFkbGVyMzIg
dmFsdWUKLSAgIGFwcGxpZXMgdG8gdGhlIHdob2xlIGRpY3Rpb25hcnkgZXZlbiBpZiBvbmx5IGEg
c3Vic2V0IG9mIHRoZSBkaWN0aW9uYXJ5IGlzCi0gICBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjb21w
cmVzc29yLikgSWYgYSByYXcgZGVmbGF0ZSB3YXMgcmVxdWVzdGVkLCB0aGVuIHRoZQotICAgYWRs
ZXIzMiB2YWx1ZSBpcyBub3QgY29tcHV0ZWQgYW5kIHN0cm0tPmFkbGVyIGlzIG5vdCBzZXQuCi0K
LSAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpf
U1RSRUFNX0VSUk9SIGlmIGEKLSAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwg
ZGljdGlvbmFyeSkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwotICAgaW5jb25zaXN0ZW50IChmb3Ig
ZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVh
bQotICAgb3IgaWYgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuIGRlZmxhdGVTZXRE
aWN0aW9uYXJ5IGRvZXMgbm90Ci0gICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxs
IGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgotKi8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRl
Q29weSBPRigoel9zdHJlYW1wIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB6X3N0cmVhbXAgc291cmNlKSk7Ci0vKgotICAgICBTZXRzIHRoZSBkZXN0aW5hdGlvbiBz
dHJlYW0gYXMgYSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb3VyY2Ugc3RyZWFtLgotCi0gICAgIFRo
aXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHNldmVyYWwgY29tcHJlc3Npb24gc3RyYXRl
Z2llcyB3aWxsIGJlCi0gICB0cmllZCwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSBhcmUgc2V2ZXJh
bCB3YXlzIG9mIHByZS1wcm9jZXNzaW5nIHRoZSBpbnB1dAotICAgZGF0YSB3aXRoIGEgZmlsdGVy
LiBUaGUgc3RyZWFtcyB0aGF0IHdpbGwgYmUgZGlzY2FyZGVkIHNob3VsZCB0aGVuIGJlIGZyZWVk
Ci0gICBieSBjYWxsaW5nIGRlZmxhdGVFbmQuICBOb3RlIHRoYXQgZGVmbGF0ZUNvcHkgZHVwbGlj
YXRlcyB0aGUgaW50ZXJuYWwKLSAgIGNvbXByZXNzaW9uIHN0YXRlIHdoaWNoIGNhbiBiZSBxdWl0
ZSBsYXJnZSwgc28gdGhpcyBzdHJhdGVneSBpcyBzbG93IGFuZAotICAgY2FuIGNvbnN1bWUgbG90
cyBvZiBtZW1vcnkuCi0KLSAgICAgZGVmbGF0ZUNvcHkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3Ms
IFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKLSAgIGVub3VnaCBtZW1vcnksIFpfU1RSRUFN
X0VSUk9SIGlmIHRoZSBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQKLSAgIChz
dWNoIGFzIHphbGxvYyBiZWluZyBOVUxMKS4gbXNnIGlzIGxlZnQgdW5jaGFuZ2VkIGluIGJvdGgg
c291cmNlIGFuZAotICAgZGVzdGluYXRpb24uCi0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGRl
ZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsKLS8qCi0gICAgIFRoaXMgZnVuY3Rpb24g
aXMgZXF1aXZhbGVudCB0byBkZWZsYXRlRW5kIGZvbGxvd2VkIGJ5IGRlZmxhdGVJbml0LAotICAg
YnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBjb21wcmVz
c2lvbiBzdGF0ZS4KLSAgIFRoZSBzdHJlYW0gd2lsbCBrZWVwIHRoZSBzYW1lIGNvbXByZXNzaW9u
IGxldmVsIGFuZCBhbnkgb3RoZXIgYXR0cmlidXRlcwotICAgdGhhdCBtYXkgaGF2ZSBiZWVuIHNl
dCBieSBkZWZsYXRlSW5pdDIuCi0KLSAgICAgIGRlZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYg
c3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRl
IHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIE5VTEwpLgot
Ki8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zIE9GKCh6X3N0cmVhbXAgc3Ry
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyYXRlZ3kpKTsKLS8qCi0g
ICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNz
aW9uIHN0cmF0ZWd5LiAgVGhlCi0gICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRl
Z3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAgVGhpcyBjYW4gYmUKLSAgIHVzZWQgdG8gc3dpdGNo
IGJldHdlZW4gY29tcHJlc3Npb24gYW5kIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIGlucHV0IGRhdGEs
IG9yCi0gICB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVp
cmluZyBhIGRpZmZlcmVudAotICAgc3RyYXRlZ3kuIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBp
cyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhcgotICAgaXMgY29tcHJlc3NlZCB3
aXRoIHRoZSBvbGQgbGV2ZWwgKGFuZCBtYXkgYmUgZmx1c2hlZCk7IHRoZSBuZXcgbGV2ZWwgd2ls
bAotICAgdGFrZSBlZmZlY3Qgb25seSBhdCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KLQot
ICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZVBhcmFtcywgdGhlIHN0cmVhbSBzdGF0ZSBt
dXN0IGJlIHNldCBhcyBmb3IKLSAgIGEgY2FsbCBvZiBkZWZsYXRlKCksIHNpbmNlIHRoZSBjdXJy
ZW50bHkgYXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvCi0gICBiZSBjb21wcmVzc2VkIGFuZCBm
bHVzaGVkLiBJbiBwYXJ0aWN1bGFyLCBzdHJtLT5hdmFpbF9vdXQgbXVzdCBiZSBub24temVyby4K
LQotICAgICBkZWZsYXRlUGFyYW1zIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9F
UlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCBvciBp
ZiBhIHBhcmFtZXRlciB3YXMgaW52YWxpZCwgWl9CVUZfRVJST1IKLSAgIGlmIHN0cm0tPmF2YWls
X291dCB3YXMgemVyby4KLSovCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVR1bmUgT0Yo
KHpfc3RyZWFtcCBzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGdvb2RfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1h
eF9sYXp5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5pY2VfbGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9jaGFpbikp
OwotLyoKLSAgICAgRmluZSB0dW5lIGRlZmxhdGUncyBpbnRlcm5hbCBjb21wcmVzc2lvbiBwYXJh
bWV0ZXJzLiAgVGhpcyBzaG91bGQgb25seSBiZQotICAgdXNlZCBieSBzb21lb25lIHdobyB1bmRl
cnN0YW5kcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgemxpYidzIGRlZmxhdGUgZm9yCi0gICBzZWFy
Y2hpbmcgZm9yIHRoZSBiZXN0IG1hdGNoaW5nIHN0cmluZywgYW5kIGV2ZW4gdGhlbiBvbmx5IGJ5
IHRoZSBtb3N0Ci0gICBmYW5hdGljIG9wdGltaXplciB0cnlpbmcgdG8gc3F1ZWV6ZSBvdXQgdGhl
IGxhc3QgY29tcHJlc3NlZCBiaXQgZm9yIHRoZWlyCi0gICBzcGVjaWZpYyBpbnB1dCBkYXRhLiAg
UmVhZCB0aGUgZGVmbGF0ZS5jIHNvdXJjZSBjb2RlIGZvciB0aGUgbWVhbmluZyBvZiB0aGUKLSAg
IG1heF9sYXp5LCBnb29kX2xlbmd0aCwgbmljZV9sZW5ndGgsIGFuZCBtYXhfY2hhaW4gcGFyYW1l
dGVycy4KLQotICAgICBkZWZsYXRlVHVuZSgpIGNhbiBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUlu
aXQoKSBvciBkZWZsYXRlSW5pdDIoKSwgYW5kCi0gICByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywg
b3IgWl9TVFJFQU1fRVJST1IgZm9yIGFuIGludmFsaWQgZGVmbGF0ZSBzdHJlYW0uCi0gKi8KLQot
WkVYVEVSTiB1TG9uZyBaRVhQT1JUIGRlZmxhdGVCb3VuZCBPRigoel9zdHJlYW1wIHN0cm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBzb3VyY2VMZW4pKTsK
LS8qCi0gICAgIGRlZmxhdGVCb3VuZCgpIHJldHVybnMgYW4gdXBwZXIgYm91bmQgb24gdGhlIGNv
bXByZXNzZWQgc2l6ZSBhZnRlcgotICAgZGVmbGF0aW9uIG9mIHNvdXJjZUxlbiBieXRlcy4gIEl0
IG11c3QgYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkKLSAgIG9yIGRlZmxhdGVJbml0Migp
LiAgVGhpcyB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIKLSAgIGZv
ciBkZWZsYXRpb24gaW4gYSBzaW5nbGUgcGFzcywgYW5kIHNvIHdvdWxkIGJlIGNhbGxlZCBiZWZv
cmUgZGVmbGF0ZSgpLgotKi8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0Yo
KHpfc3RyZWFtcCBzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkp
OwotLyoKLSAgICAgZGVmbGF0ZVByaW1lKCkgaW5zZXJ0cyBiaXRzIGluIHRoZSBkZWZsYXRlIG91
dHB1dCBzdHJlYW0uICBUaGUgaW50ZW50Ci0gIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IHRvIHN0YXJ0IG9mZiB0aGUgZGVmbGF0ZSBvdXRwdXQgd2l0aCB0aGUKLSAgYml0cyBsZWZ0b3Zl
ciBmcm9tIGEgcHJldmlvdXMgZGVmbGF0ZSBzdHJlYW0gd2hlbiBhcHBlbmRpbmcgdG8gaXQuICBB
cyBzdWNoLAotICB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHJhdyBkZWZsYXRl
LCBhbmQgbXVzdCBiZSB1c2VkIGJlZm9yZSB0aGUKLSAgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgYWZ0
ZXIgYSBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZQotICBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25p
ZmljYW50IGJpdHMgb2YKLSAgdmFsdWUgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgb3V0cHV0Lgot
Ci0gICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFN
X0VSUk9SIGlmIHRoZSBzb3VyY2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50Lgot
Ki8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAg
c3RybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pfaGVhZGVy
cCBoZWFkKSk7Ci0vKgotICAgICAgZGVmbGF0ZVNldEhlYWRlcigpIHByb3ZpZGVzIGd6aXAgaGVh
ZGVyIGluZm9ybWF0aW9uIGZvciB3aGVuIGEgZ3ppcAotICAgc3RyZWFtIGlzIHJlcXVlc3RlZCBi
eSBkZWZsYXRlSW5pdDIoKS4gIGRlZmxhdGVTZXRIZWFkZXIoKSBtYXkgYmUgY2FsbGVkCi0gICBh
ZnRlciBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIHRoZSBmaXJz
dCBjYWxsIG9mCi0gICBkZWZsYXRlKCkuICBUaGUgdGV4dCwgdGltZSwgb3MsIGV4dHJhIGZpZWxk
LCBuYW1lLCBhbmQgY29tbWVudCBpbmZvcm1hdGlvbgotICAgaW4gdGhlIHByb3ZpZGVkIGd6X2hl
YWRlciBzdHJ1Y3R1cmUgYXJlIHdyaXR0ZW4gdG8gdGhlIGd6aXAgaGVhZGVyICh4ZmxhZyBpcwot
ICAgaWdub3JlZCAtLSB0aGUgZXh0cmEgZmxhZ3MgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGNv
bXByZXNzaW9uIGxldmVsKS4gIFRoZQotICAgY2FsbGVyIG11c3QgYXNzdXJlIHRoYXQsIGlmIG5v
dCBaX05VTEwsIG5hbWUgYW5kIGNvbW1lbnQgYXJlIHRlcm1pbmF0ZWQgd2l0aAotICAgYSB6ZXJv
IGJ5dGUsIGFuZCB0aGF0IGlmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoYXQgZXh0cmFfbGVuIGJ5
dGVzIGFyZQotICAgYXZhaWxhYmxlIHRoZXJlLiAgSWYgaGNyYyBpcyB0cnVlLCBhIGd6aXAgaGVh
ZGVyIGNyYyBpcyBpbmNsdWRlZC4gIE5vdGUgdGhhdAotICAgdGhlIGN1cnJlbnQgdmVyc2lvbnMg
b2YgdGhlIGNvbW1hbmQtbGluZSB2ZXJzaW9uIG9mIGd6aXAgKHVwIHRocm91Z2ggdmVyc2lvbgot
ICAgMS4zLngpIGRvIG5vdCBzdXBwb3J0IGhlYWRlciBjcmMncywgYW5kIHdpbGwgcmVwb3J0IHRo
YXQgaXQgaXMgYSAibXVsdGktcGFydAotICAgZ3ppcCBmaWxlIiBhbmQgZ2l2ZSB1cC4KLQotICAg
ICAgSWYgZGVmbGF0ZVNldEhlYWRlciBpcyBub3QgdXNlZCwgdGhlIGRlZmF1bHQgZ3ppcCBoZWFk
ZXIgaGFzIHRleHQgZmFsc2UsCi0gICB0aGUgdGltZSBzZXQgdG8gemVybywgYW5kIG9zIHNldCB0
byAyNTUsIHdpdGggbm8gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQKLSAgIGZpZWxkcy4gIFRoZSBn
emlwIGhlYWRlciBpcyByZXR1cm5lZCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBieSBkZWZsYXRlUmVz
ZXQoKS4KLQotICAgICAgZGVmbGF0ZVNldEhlYWRlciByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywg
b3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNv
bnNpc3RlbnQuCi0qLwotCi0vKgotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdDIgT0Yo
KHpfc3RyZWFtcCBzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAgd2luZG93Qml0cykpOwotCi0gICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGluZmxh
dGVJbml0IHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyLiBUaGUKLSAgIGZpZWxkcyBuZXh0X2luLCBh
dmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQKLSAg
IGJlZm9yZSBieSB0aGUgY2FsbGVyLgotCi0gICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBp
cyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdwotICAgc2l6ZSAo
dGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFu
Z2UgOC4uMTUgZm9yCi0gICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIFRoZSBkZWZhdWx0
IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKLSAgIGluc3RlYWQuIHdpbmRvd0Jp
dHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdpbmRvd0JpdHMgdmFsdWUK
LSAgIHByb3ZpZGVkIHRvIGRlZmxhdGVJbml0MigpIHdoaWxlIGNvbXByZXNzaW5nLCBvciBpdCBt
dXN0IGJlIGVxdWFsIHRvIDE1IGlmCi0gICBkZWZsYXRlSW5pdDIoKSB3YXMgbm90IHVzZWQuIElm
IGEgY29tcHJlc3NlZCBzdHJlYW0gd2l0aCBhIGxhcmdlciB3aW5kb3cKLSAgIHNpemUgaXMgZ2l2
ZW4gYXMgaW5wdXQsIGluZmxhdGUoKSB3aWxsIHJldHVybiB3aXRoIHRoZSBlcnJvciBjb2RlCi0g
ICBaX0RBVEFfRVJST1IgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYWxsb2NhdGUgYSBsYXJnZXIgd2lu
ZG93LgotCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGluZmxh
dGUuIEluIHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKLSAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBz
aXplLiBpbmZsYXRlKCkgd2lsbCB0aGVuIHByb2Nlc3MgcmF3IGRlZmxhdGUgZGF0YSwKLSAgIG5v
dCBsb29raW5nIGZvciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIsIG5vdCBnZW5lcmF0aW5nIGEgY2hl
Y2sgdmFsdWUsIGFuZCBub3QKLSAgIGxvb2tpbmcgZm9yIGFueSBjaGVjayB2YWx1ZXMgZm9yIGNv
bXBhcmlzb24gYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBUaGlzCi0gICBpcyBmb3IgdXNlIHdp
dGggb3RoZXIgZm9ybWF0cyB0aGF0IHVzZSB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9y
bWF0Ci0gICBzdWNoIGFzIHppcC4gIFRob3NlIGZvcm1hdHMgcHJvdmlkZSB0aGVpciBvd24gY2hl
Y2sgdmFsdWVzLiBJZiBhIGN1c3RvbQotICAgZm9ybWF0IGlzIGRldmVsb3BlZCB1c2luZyB0aGUg
cmF3IGRlZmxhdGUgZm9ybWF0IGZvciBjb21wcmVzc2VkIGRhdGEsIGl0IGlzCi0gICByZWNvbW1l
bmRlZCB0aGF0IGEgY2hlY2sgdmFsdWUgc3VjaCBhcyBhbiBhZGxlcjMyIG9yIGEgY3JjMzIgYmUg
YXBwbGllZCB0bwotICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHps
aWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZvcgotICAgbW9zdCBhcHBsaWNhdGlvbnMsIHRo
ZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBhcyBpcy4gTm90ZSB0aGF0IGNvbW1lbnRzCi0g
ICBhYm92ZSBvbiB0aGUgdXNlIGluIGRlZmxhdGVJbml0MigpIGFwcGxpZXMgdG8gdGhlIG1hZ25p
dHVkZSBvZiB3aW5kb3dCaXRzLgotCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRl
ciB0aGFuIDE1IGZvciBvcHRpb25hbCBnemlwIGRlY29kaW5nLiBBZGQKLSAgIDMyIHRvIHdpbmRv
d0JpdHMgdG8gZW5hYmxlIHpsaWIgYW5kIGd6aXAgZGVjb2Rpbmcgd2l0aCBhdXRvbWF0aWMgaGVh
ZGVyCi0gICBkZXRlY3Rpb24sIG9yIGFkZCAxNiB0byBkZWNvZGUgb25seSB0aGUgZ3ppcCBmb3Jt
YXQgKHRoZSB6bGliIGZvcm1hdCB3aWxsCi0gICByZXR1cm4gYSBaX0RBVEFfRVJST1IpLiAgSWYg
YSBnemlwIHN0cmVhbSBpcyBiZWluZyBkZWNvZGVkLCBzdHJtLT5hZGxlciBpcwotICAgYSBjcmMz
MiBpbnN0ZWFkIG9mIGFuIGFkbGVyMzIuCi0KLSAgICAgaW5mbGF0ZUluaXQyIHJldHVybnMgWl9P
SyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAotICAgbWVt
b3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGEg
bnVsbCBzdHJtKS4gbXNnCi0gICBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBt
ZXNzYWdlLiAgaW5mbGF0ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0KLSAgIGFueSBkZWNvbXByZXNz
aW9uIGFwYXJ0IGZyb20gcmVhZGluZyB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3
aWxsCi0gICBiZSBkb25lIGJ5IGluZmxhdGUoKS4gKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1h
eSBiZSBtb2RpZmllZCwgYnV0IG5leHRfb3V0Ci0gICBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5n
ZWQuKQotKi8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeSBPRigo
el9zdHJlYW1wIHN0cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBCeXRlZiAqZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKLS8qCi0gICAgIEluaXRpYWxp
emVzIHRoZSBkZWNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gdW5jb21wcmVz
c2VkIGJ5dGUKLSAgIHNlcXVlbmNlLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVk
aWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlLAotICAgaWYgdGhhdCBjYWxsIHJldHVybmVk
IFpfTkVFRF9ESUNULiBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKLSAg
IGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhh
dCBjYWxsIG9mIGluZmxhdGUuCi0gICBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11
c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCi0gICBkZWZsYXRlU2V0RGlj
dGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAot
ICAgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5mbGF0ZUluaXQyKCkgb3IgaW5mbGF0ZVJlc2V0KCkgYW5k
IGJlZm9yZSBhbnkgY2FsbCBvZgotICAgaW5mbGF0ZSgpIHRvIHNldCB0aGUgZGljdGlvbmFyeS4g
IFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZQotICAgZGljdGlvbmFyeSB0aGF0
IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KLQotICAgICBpbmZsYXRlU2V0
RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQot
ICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUg
c3RyZWFtIHN0YXRlIGlzCi0gICBpbmNvbnNpc3RlbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgZ2l2
ZW4gZGljdGlvbmFyeSBkb2Vzbid0IG1hdGNoIHRoZQotICAgZXhwZWN0ZWQgb25lIChpbmNvcnJl
Y3QgYWRsZXIzMiB2YWx1ZSkuIGluZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90Ci0gICBwZXJm
b3JtIGFueSBkZWNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBzdWJzZXF1ZW50IGNh
bGxzIG9mCi0gICBpbmZsYXRlKCkuCi0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVT
eW5jIE9GKCh6X3N0cmVhbXAgc3RybSkpOwotLyoKLSAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNz
ZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKLSAgZGVzY3Jp
cHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRp
bCBhbGwKLSAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuIE5vIG91dHB1dCBpcyBwcm92aWRl
ZC4KLQotICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQg
aGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3Zp
ZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCi0gIG9y
IFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQu
IEluIHRoZSBzdWNjZXNzCi0gIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3Vy
cmVudCBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luIHdoaWNoCi0gIGluZGljYXRlcyB3aGVyZSB2
YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlCi0g
IGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBt
b3JlIGlucHV0IGVhY2ggdGltZSwKLSAgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0
IGRhdGEuCi0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVh
bXAgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc3RyZWFtcCBz
b3VyY2UpKTsKLS8qCi0gICAgIFNldHMgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSBhcyBhIGNvbXBs
ZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJlYW0uCi0KLSAgICAgVGhpcyBmdW5jdGlvbiBjYW4g
YmUgdXNlZnVsIHdoZW4gcmFuZG9tbHkgYWNjZXNzaW5nIGEgbGFyZ2Ugc3RyZWFtLiAgVGhlCi0g
ICBmaXJzdCBwYXNzIHRocm91Z2ggdGhlIHN0cmVhbSBjYW4gcGVyaW9kaWNhbGx5IHJlY29yZCB0
aGUgaW5mbGF0ZSBzdGF0ZSwKLSAgIGFsbG93aW5nIHJlc3RhcnRpbmcgaW5mbGF0ZSBhdCB0aG9z
ZSBwb2ludHMgd2hlbiByYW5kb21seSBhY2Nlc3NpbmcgdGhlCi0gICBzdHJlYW0uCi0KLSAgICAg
aW5mbGF0ZUNvcHkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJl
IHdhcyBub3QKLSAgIGVub3VnaCBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2Ug
c3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQKLSAgIChzdWNoIGFzIHphbGxvYyBiZWluZyBO
VUxMKS4gbXNnIGlzIGxlZnQgdW5jaGFuZ2VkIGluIGJvdGggc291cmNlIGFuZAotICAgZGVzdGlu
YXRpb24uCi0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldCBPRigoel9zdHJl
YW1wIHN0cm0pKTsKLS8qCi0gICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBpbmZs
YXRlRW5kIGZvbGxvd2VkIGJ5IGluZmxhdGVJbml0LAotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5k
IHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBkZWNvbXByZXNzaW9uIHN0YXRlLgotICAgVGhl
IHN0cmVhbSB3aWxsIGtlZXAgYXR0cmlidXRlcyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGlu
ZmxhdGVJbml0Mi4KLQotICAgICAgaW5mbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNz
LCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGlu
Y29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCi0qLwotCi1a
RVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7Ci0vKgotICAgICBUaGlzIGZ1bmN0
aW9uIGluc2VydHMgYml0cyBpbiB0aGUgaW5mbGF0ZSBpbnB1dCBzdHJlYW0uICBUaGUgaW50ZW50
IGlzCi0gIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IGluZmxhdGluZyBhdCBh
IGJpdCBwb3NpdGlvbiBpbiB0aGUKLSAgbWlkZGxlIG9mIGEgYnl0ZS4gIFRoZSBwcm92aWRlZCBi
aXRzIHdpbGwgYmUgdXNlZCBiZWZvcmUgYW55IGJ5dGVzIGFyZSB1c2VkCi0gIGZyb20gbmV4dF9p
bi4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBpbmZsYXRlLCBh
bmQKLSAgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdCBpbmZsYXRlKCkgY2FsbCBhZnRl
ciBpbmZsYXRlSW5pdDIoKSBvcgotICBpbmZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNz
IHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlCi0gIGxlYXN0IHNpZ25p
ZmljYW50IGJpdHMgb2YgdmFsdWUgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgaW5wdXQuCi0KLSAg
ICAgIGluZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJS
T1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCi0qLwot
Ci1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJt
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnel9oZWFkZXJwIGhl
YWQpKTsKLS8qCi0gICAgICBpbmZsYXRlR2V0SGVhZGVyKCkgcmVxdWVzdHMgdGhhdCBnemlwIGhl
YWRlciBpbmZvcm1hdGlvbiBiZSBzdG9yZWQgaW4gdGhlCi0gICBwcm92aWRlZCBnel9oZWFkZXIg
c3RydWN0dXJlLiAgaW5mbGF0ZUdldEhlYWRlcigpIG1heSBiZSBjYWxsZWQgYWZ0ZXIKLSAgIGlu
ZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpLCBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxs
IG9mIGluZmxhdGUoKS4KLSAgIEFzIGluZmxhdGUoKSBwcm9jZXNzZXMgdGhlIGd6aXAgc3RyZWFt
LCBoZWFkLT5kb25lIGlzIHplcm8gdW50aWwgdGhlIGhlYWRlcgotICAgaXMgY29tcGxldGVkLCBh
dCB3aGljaCB0aW1lIGhlYWQtPmRvbmUgaXMgc2V0IHRvIG9uZS4gIElmIGEgemxpYiBzdHJlYW0g
aXMKLSAgIGJlaW5nIGRlY29kZWQsIHRoZW4gaGVhZC0+ZG9uZSBpcyBzZXQgdG8gLTEgdG8gaW5k
aWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlCi0gICBubyBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBm
b3J0aGNvbWluZy4gIE5vdGUgdGhhdCBaX0JMT0NLIGNhbiBiZSB1c2VkIHRvCi0gICBmb3JjZSBp
bmZsYXRlKCkgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGhlYWRlciBwcm9jZXNzaW5nIGlz
IGNvbXBsZXRlCi0gICBhbmQgYmVmb3JlIGFueSBhY3R1YWwgZGF0YSBpcyBkZWNvbXByZXNzZWQu
Ci0KLSAgICAgIFRoZSB0ZXh0LCB0aW1lLCB4ZmxhZ3MsIGFuZCBvcyBmaWVsZHMgYXJlIGZpbGxl
ZCBpbiB3aXRoIHRoZSBnemlwIGhlYWRlcgotICAgY29udGVudHMuICBoY3JjIGlzIHNldCB0byB0
cnVlIGlmIHRoZXJlIGlzIGEgaGVhZGVyIENSQy4gIChUaGUgaGVhZGVyIENSQwotICAgd2FzIHZh
bGlkIGlmIGRvbmUgaXMgc2V0IHRvIG9uZS4pICBJZiBleHRyYSBpcyBub3QgWl9OVUxMLCB0aGVu
IGV4dHJhX21heAotICAgY29udGFpbnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdy
aXRlIHRvIGV4dHJhLiAgT25jZSBkb25lIGlzIHRydWUsCi0gICBleHRyYV9sZW4gY29udGFpbnMg
dGhlIGFjdHVhbCBleHRyYSBmaWVsZCBsZW5ndGgsIGFuZCBleHRyYSBjb250YWlucyB0aGUKLSAg
IGV4dHJhIGZpZWxkLCBvciB0aGF0IGZpZWxkIHRydW5jYXRlZCBpZiBleHRyYV9tYXggaXMgbGVz
cyB0aGFuIGV4dHJhX2xlbi4KLSAgIElmIG5hbWUgaXMgbm90IFpfTlVMTCwgdGhlbiB1cCB0byBu
YW1lX21heCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRoZXJlLAotICAgdGVybWluYXRlZCB3aXRo
IGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gbmFtZV9tYXguICBJZgot
ICAgY29tbWVudCBpcyBub3QgWl9OVUxMLCB0aGVuIHVwIHRvIGNvbW1fbWF4IGNoYXJhY3RlcnMg
YXJlIHdyaXR0ZW4gdGhlcmUsCi0gICB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIHVubGVzcyB0aGUg
bGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBjb21tX21heC4gIFdoZW4KLSAgIGFueSBvZiBleHRyYSwg
bmFtZSwgb3IgY29tbWVudCBhcmUgbm90IFpfTlVMTCBhbmQgdGhlIHJlc3BlY3RpdmUgZmllbGQg
aXMKLSAgIG5vdCBwcmVzZW50IGluIHRoZSBoZWFkZXIsIHRoZW4gdGhhdCBmaWVsZCBpcyBzZXQg
dG8gWl9OVUxMIHRvIHNpZ25hbCBpdHMKLSAgIGFic2VuY2UuICBUaGlzIGFsbG93cyB0aGUgdXNl
IG9mIGRlZmxhdGVTZXRIZWFkZXIoKSB3aXRoIHRoZSByZXR1cm5lZAotICAgc3RydWN0dXJlIHRv
IGR1cGxpY2F0ZSB0aGUgaGVhZGVyLiAgSG93ZXZlciBpZiB0aG9zZSBmaWVsZHMgYXJlIHNldCB0
bwotICAgYWxsb2NhdGVkIG1lbW9yeSwgdGhlbiB0aGUgYXBwbGljYXRpb24gd2lsbCBuZWVkIHRv
IHNhdmUgdGhvc2UgcG9pbnRlcnMKLSAgIGVsc2V3aGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGV2
ZW50dWFsbHkgZnJlZWQuCi0KLSAgICAgIElmIGluZmxhdGVHZXRIZWFkZXIgaXMgbm90IHVzZWQs
IHRoZW4gdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBzaW1wbHkKLSAgIGRpc2NhcmRlZC4gIFRo
ZSBoZWFkZXIgaXMgYWx3YXlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5LCBpbmNsdWRpbmcgdGhlIGhl
YWRlcgotICAgQ1JDIGlmIHByZXNlbnQuICBpbmZsYXRlUmVzZXQoKSB3aWxsIHJlc2V0IHRoZSBw
cm9jZXNzIHRvIGRpc2NhcmQgdGhlIGhlYWRlcgotICAgaW5mb3JtYXRpb24uICBUaGUgYXBwbGlj
YXRpb24gd291bGQgbmVlZCB0byBjYWxsIGluZmxhdGVHZXRIZWFkZXIoKSBhZ2FpbiB0bwotICAg
cmV0cmlldmUgdGhlIGhlYWRlciBmcm9tIHRoZSBuZXh0IGd6aXAgc3RyZWFtLgotCi0gICAgICBp
bmZsYXRlR2V0SGVhZGVyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJP
UiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KLSovCi0K
LS8qCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdCBPRigoel9zdHJlYW1wIHN0
cm0sIGludCB3aW5kb3dCaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3cpKTsKLQotICAgICBJbml0aWFsaXplIHRoZSBp
bnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24gdXNpbmcgaW5mbGF0ZUJhY2so
KQotICAgY2FsbHMuICBUaGUgZmllbGRzIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBpbiBzdHJt
IG11c3QgYmUgaW5pdGlhbGl6ZWQKLSAgIGJlZm9yZSB0aGUgY2FsbC4gIElmIHphbGxvYyBhbmQg
emZyZWUgYXJlIFpfTlVMTCwgdGhlbiB0aGUgZGVmYXVsdCBsaWJyYXJ5LQotICAgZGVyaXZlZCBt
ZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBhcmUgdXNlZC4gIHdpbmRvd0JpdHMgaXMgdGhlIGJh
c2UgdHdvCi0gICBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplLCBpbiB0aGUgcmFuZ2UgOC4u
MTUuICB3aW5kb3cgaXMgYSBjYWxsZXIKLSAgIHN1cHBsaWVkIGJ1ZmZlciBvZiB0aGF0IHNpemUu
ICBFeGNlcHQgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zIHdoZXJlIGl0IGlzCi0gICBhc3N1cmVk
IHRoYXQgZGVmbGF0ZSB3YXMgdXNlZCB3aXRoIHNtYWxsIHdpbmRvdyBzaXplcywgd2luZG93Qml0
cyBtdXN0IGJlIDE1Ci0gICBhbmQgYSAzMksgYnl0ZSB3aW5kb3cgbXVzdCBiZSBzdXBwbGllZCB0
byBiZSBhYmxlIHRvIGRlY29tcHJlc3MgZ2VuZXJhbAotICAgZGVmbGF0ZSBzdHJlYW1zLgotCi0g
ICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ugcm91dGluZXMuCi0K
LSAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9TVFJF
QU1fRVJST1IgaWYgYW55IG9mCi0gICB0aGUgcGFyYW1hdGVycyBhcmUgaW52YWxpZCwgWl9NRU1f
RVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdAotICAgYmUgYWxsb2NhdGVkLCBv
ciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QK
LSAgIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KLSovCi0KLXR5cGVkZWYg
dW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiBG
QVIgKikpOwotdHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVk
IGNoYXIgRkFSICosIHVuc2lnbmVkKSk7Ci0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJh
Y2sgT0YoKHpfc3RyZWFtcCBzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5fZnVuYyBpbiwgdm9pZCBGQVIgKmluX2Rlc2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwotLyoKLSAg
ICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVz
aW5nIGEgY2FsbC1iYWNrCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlz
IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGlj
YXRpb25zIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0
aGUKLSAgIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYg
dGhlIG91dHB1dCBidWZmZXIuICBUaGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0
aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0
cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCi0KLSAg
ICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhl
IGludGVybmFsIHN0YXRlCi0gICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUg
dXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgotICAgaW5mbGF0ZUJhY2soKSBtYXkgdGhlbiBi
ZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIGluZmxhdGUgYSBjb21wbGV0ZSwgcmF3Ci0gICBkZWZs
YXRlIHN0cmVhbSB3aXRoIGVhY2ggY2FsbC4gIGluZmxhdGVCYWNrRW5kKCkgaXMgdGhlbiBjYWxs
ZWQgdG8gZnJlZQotICAgdGhlIGFsbG9jYXRlZCBzdGF0ZS4KLQotICAgICBBIHJhdyBkZWZsYXRl
IHN0cmVhbSBpcyBvbmUgd2l0aCBubyB6bGliIG9yIGd6aXAgaGVhZGVyIG9yIHRyYWlsZXIuCi0g
ICBUaGlzIHJvdXRpbmUgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBpbiBhIHV0aWxpdHkgdGhhdCBy
ZWFkcyB6aXAgb3IgZ3ppcAotICAgZmlsZXMgYW5kIHdyaXRlcyBvdXQgdW5jb21wcmVzc2VkIGZp
bGVzLiAgVGhlIHV0aWxpdHkgd291bGQgZGVjb2RlIHRoZQotICAgaGVhZGVyIGFuZCBwcm9jZXNz
IHRoZSB0cmFpbGVyIG9uIGl0cyBvd24sIGhlbmNlIHRoaXMgcm91dGluZSBleHBlY3RzCi0gICBv
bmx5IHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0gdG8gZGVjb21wcmVzcy4gIFRoaXMgaXMgZGlmZmVy
ZW50IGZyb20gdGhlCi0gICBub3JtYWwgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBl
Y3RzIGVpdGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kCi0gICB0cmFpbGVyIGFyb3VuZCB0
aGUgZGVmbGF0ZSBzdHJlYW0uCi0KLSAgICAgaW5mbGF0ZUJhY2soKSB1c2VzIHR3byBzdWJyb3V0
aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJlIHRoZW4KLSAgIGNhbGxlZCBieSBp
bmZsYXRlQmFjaygpIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgaW5mbGF0ZUJhY2soKSBjYWxscyB0
aG9zZQotICAgcm91dGluZXMgdW50aWwgaXQgcmVhZHMgYSBjb21wbGV0ZSBkZWZsYXRlIHN0cmVh
bSBhbmQgd3JpdGVzIG91dCBhbGwgb2YgdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSwgb3IgdW50
aWwgaXQgZW5jb3VudGVycyBhbiBlcnJvci4gIFRoZSBmdW5jdGlvbidzCi0gICBwYXJhbWV0ZXJz
IGFuZCByZXR1cm4gdHlwZXMgYXJlIGRlZmluZWQgYWJvdmUgaW4gdGhlIGluX2Z1bmMgYW5kIG91
dF9mdW5jCi0gICB0eXBlZGVmcy4gIGluZmxhdGVCYWNrKCkgd2lsbCBjYWxsIGluKGluX2Rlc2Ms
ICZidWYpIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlCi0gICBudW1iZXIgb2YgYnl0ZXMgb2YgcHJv
dmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJZgotICAg
dGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBpbigpIG11c3QgcmV0dXJuIHplcm8tLWJ1ZiBp
cyBpZ25vcmVkIGluIHRoYXQKLSAgIGNhc2UtLWFuZCBpbmZsYXRlQmFjaygpIHdpbGwgcmV0dXJu
IGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwKLSAgIG91dChvdXRfZGVz
YywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4ubGVuLTFd
LiAgb3V0KCkKLSAgIHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBvciBub24temVybyBv
biBmYWlsdXJlLiAgSWYgb3V0KCkgcmV0dXJucwotICAgbm9uLXplcm8sIGluZmxhdGVCYWNrKCkg
d2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIE5laXRoZXIgaW4oKSBub3Igb3V0KCkKLSAgIGFy
ZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHByb3ZpZGVk
IHRvCi0gICBpbmZsYXRlQmFja0luaXQoKSwgd2hpY2ggaXMgYWxzbyB0aGUgYnVmZmVyIHRoYXQg
b3V0KCkgdXNlcyB0byB3cml0ZSBmcm9tLgotICAgVGhlIGxlbmd0aCB3cml0dGVuIGJ5IG91dCgp
IHdpbGwgYmUgYXQgbW9zdCB0aGUgd2luZG93IHNpemUuICBBbnkgbm9uLXplcm8KLSAgIGFtb3Vu
dCBvZiBpbnB1dCBtYXkgYmUgcHJvdmlkZWQgYnkgaW4oKS4KLQotICAgICBGb3IgY29udmVuaWVu
Y2UsIGluZmxhdGVCYWNrKCkgY2FuIGJlIHByb3ZpZGVkIGlucHV0IG9uIHRoZSBmaXJzdCBjYWxs
IGJ5Ci0gICBzZXR0aW5nIHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWlsX2luLiAgSWYgdGhh
dCBpbnB1dCBpcyBleGhhdXN0ZWQsIHRoZW4KLSAgIGluKCkgd2lsbCBiZSBjYWxsZWQuICBUaGVy
ZWZvcmUgc3RybS0+bmV4dF9pbiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZQotICAgY2FsbGlu
ZyBpbmZsYXRlQmFjaygpLiAgSWYgc3RybS0+bmV4dF9pbiBpcyBaX05VTEwsIHRoZW4gaW4oKSB3
aWxsIGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgZm9yIGlucHV0LiAgSWYgc3RybS0+bmV4dF9p
biBpcyBub3QgWl9OVUxMLCB0aGVuIHN0cm0tPmF2YWlsX2luCi0gICBtdXN0IGFsc28gYmUgaW5p
dGlhbGl6ZWQsIGFuZCB0aGVuIGlmIHN0cm0tPmF2YWlsX2luIGlzIG5vdCB6ZXJvLCBpbnB1dCB3
aWxsCi0gICBpbml0aWFsbHkgYmUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luWzAgLi4gc3RybS0+
YXZhaWxfaW4gLSAxXS4KLQotICAgICBUaGUgaW5fZGVzYyBhbmQgb3V0X2Rlc2MgcGFyYW1ldGVy
cyBvZiBpbmZsYXRlQmFjaygpIGlzIHBhc3NlZCBhcyB0aGUKLSAgIGZpcnN0IHBhcmFtZXRlciBv
ZiBpbigpIGFuZCBvdXQoKSByZXNwZWN0aXZlbHkgd2hlbiB0aGV5IGFyZSBjYWxsZWQuICBUaGVz
ZQotICAgZGVzY3JpcHRvcnMgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCB0byBwYXNzIGFueSBpbmZv
cm1hdGlvbiB0aGF0IHRoZSBjYWxsZXItCi0gICBzdXBwbGllZCBpbigpIGFuZCBvdXQoKSBmdW5j
dGlvbnMgbmVlZCB0byBkbyB0aGVpciBqb2IuCi0KLSAgICAgT24gcmV0dXJuLCBpbmZsYXRlQmFj
aygpIHdpbGwgc2V0IHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWlsX2luIHRvCi0gICBwYXNz
IGJhY2sgYW55IHVudXNlZCBpbnB1dCB0aGF0IHdhcyBwcm92aWRlZCBieSB0aGUgbGFzdCBpbigp
IGNhbGwuICBUaGUKLSAgIHJldHVybiB2YWx1ZXMgb2YgaW5mbGF0ZUJhY2soKSBjYW4gYmUgWl9T
VFJFQU1fRU5EIG9uIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SCi0gICBpZiBpbigpIG9yIG91dCgpIHJl
dHVybmVkIGFuIGVycm9yLCBaX0RBVEFfRVJST1IgaWYgdGhlcmUgd2FzIGEgZm9ybWF0Ci0gICBl
cnJvciBpbiB0aGUgZGVmbGF0ZSBzdHJlYW0gKGluIHdoaWNoIGNhc2Ugc3RybS0+bXNnIGlzIHNl
dCB0byBpbmRpY2F0ZSB0aGUKLSAgIG5hdHVyZSBvZiB0aGUgZXJyb3IpLCBvciBaX1NUUkVBTV9F
UlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBub3QgcHJvcGVybHkKLSAgIGluaXRpYWxpemVkLiAgSW4g
dGhlIGNhc2Ugb2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1dCBlcnJvciBjYW4gYmUK
LSAgIGRpc3Rpbmd1aXNoZWQgdXNpbmcgc3RybS0+bmV4dF9pbiB3aGljaCB3aWxsIGJlIFpfTlVM
TCBvbmx5IGlmIGluKCkgcmV0dXJuZWQKLSAgIGFuIGVycm9yLiAgSWYgc3RybS0+bmV4dCBpcyBu
b3QgWl9OVUxMLCB0aGVuIHRoZSBaX0JVRl9FUlJPUiB3YXMgZHVlIHRvCi0gICBvdXQoKSByZXR1
cm5pbmcgbm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIG91dCgp
LCBzbwotICAgc3RybS0+bmV4dF9pbiBpcyBhc3N1cmVkIHRvIGJlIGRlZmluZWQgaWYgb3V0KCkg
cmV0dXJucyBub24temVyby4pICBOb3RlCi0gICB0aGF0IGluZmxhdGVCYWNrKCkgY2Fubm90IHJl
dHVybiBaX09LLgotKi8KLQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0VuZCBPRigo
el9zdHJlYW1wIHN0cm0pKTsKLS8qCi0gICAgIEFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGluZmxh
dGVCYWNrSW5pdCgpIGlzIGZyZWVkLgotCi0gICAgIGluZmxhdGVCYWNrRW5kKCkgcmV0dXJucyBa
X09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0KLSAgIHN0YXRl
IHdhcyBpbmNvbnNpc3RlbnQuCi0qLwotCi1aRVhURVJOIHVMb25nIFpFWFBPUlQgemxpYkNvbXBp
bGVGbGFncyBPRigodm9pZCkpOwotLyogUmV0dXJuIGZsYWdzIGluZGljYXRpbmcgY29tcGlsZS10
aW1lIG9wdGlvbnMuCi0KLSAgICBUeXBlIHNpemVzLCB0d28gYml0cyBlYWNoLCAwMCA9IDE2IGJp
dHMsIDAxID0gMzIsIDEwID0gNjQsIDExID0gb3RoZXI6Ci0gICAgIDEuMDogc2l6ZSBvZiB1SW50
Ci0gICAgIDMuMjogc2l6ZSBvZiB1TG9uZwotICAgICA1LjQ6IHNpemUgb2Ygdm9pZHBmIChwb2lu
dGVyKQotICAgICA3LjY6IHNpemUgb2Ygel9vZmZfdAotCi0gICAgQ29tcGlsZXIsIGFzc2VtYmxl
ciwgYW5kIGRlYnVnIG9wdGlvbnM6Ci0gICAgIDg6IERFQlVHCi0gICAgIDk6IEFTTVYgb3IgQVNN
SU5GIC0tIHVzZSBBU00gY29kZQotICAgICAxMDogWkxJQl9XSU5BUEkgLS0gZXhwb3J0ZWQgZnVu
Y3Rpb25zIHVzZSB0aGUgV0lOQVBJIGNhbGxpbmcgY29udmVudGlvbgotICAgICAxMTogMCAocmVz
ZXJ2ZWQpCi0KLSAgICBPbmUtdGltZSB0YWJsZSBidWlsZGluZyAoc21hbGxlciBjb2RlLCBidXQg
bm90IHRocmVhZC1zYWZlIGlmIHRydWUpOgotICAgICAxMjogQlVJTERGSVhFRCAtLSBidWlsZCBz
dGF0aWMgYmxvY2sgZGVjb2RpbmcgdGFibGVzIHdoZW4gbmVlZGVkCi0gICAgIDEzOiBEWU5BTUlD
X0NSQ19UQUJMRSAtLSBidWlsZCBDUkMgY2FsY3VsYXRpb24gdGFibGVzIHdoZW4gbmVlZGVkCi0g
ICAgIDE0LDE1OiAwIChyZXNlcnZlZCkKLQotICAgIExpYnJhcnkgY29udGVudCAoaW5kaWNhdGVz
IG1pc3NpbmcgZnVuY3Rpb25hbGl0eSk6Ci0gICAgIDE2OiBOT19HWkNPTVBSRVNTIC0tIGd6KiBm
dW5jdGlvbnMgY2Fubm90IGNvbXByZXNzICh0byBhdm9pZCBsaW5raW5nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmxhdGUgY29kZSB3aGVuIG5vdCBuZWVkZWQpCi0gICAgIDE3OiBOT19H
WklQIC0tIGRlZmxhdGUgY2FuJ3Qgd3JpdGUgZ3ppcCBzdHJlYW1zLCBhbmQgaW5mbGF0ZSBjYW4n
dCBkZXRlY3QKLSAgICAgICAgICAgICAgICAgICAgYW5kIGRlY29kZSBnemlwIHN0cmVhbXMgKHRv
IGF2b2lkIGxpbmtpbmcgY3JjIGNvZGUpCi0gICAgIDE4LTE5OiAwIChyZXNlcnZlZCkKLQotICAg
IE9wZXJhdGlvbiB2YXJpYXRpb25zIChjaGFuZ2VzIGluIGxpYnJhcnkgZnVuY3Rpb25hbGl0eSk6
Ci0gICAgIDIwOiBQS1pJUF9CVUdfV09SS0FST1VORCAtLSBzbGlnaHRseSBtb3JlIHBlcm1pc3Np
dmUgaW5mbGF0ZQotICAgICAyMTogRkFTVEVTVCAtLSBkZWZsYXRlIGFsZ29yaXRobSB3aXRoIG9u
bHkgb25lLCBsb3dlc3QgY29tcHJlc3Npb24gbGV2ZWwKLSAgICAgMjIsMjM6IDAgKHJlc2VydmVk
KQotCi0gICAgVGhlIHNwcmludGYgdmFyaWFudCB1c2VkIGJ5IGd6cHJpbnRmICh6ZXJvIGlzIGJl
c3QpOgotICAgICAyNDogMCA9IHZzKiwgMSA9IHMqIC0tIDEgbWVhbnMgbGltaXRlZCB0byAyMCBh
cmd1bWVudHMgYWZ0ZXIgdGhlIGZvcm1hdAotICAgICAyNTogMCA9ICpucHJpbnRmLCAxID0gKnBy
aW50ZiAtLSAxIG1lYW5zIGd6cHJpbnRmKCkgbm90IHNlY3VyZSEKLSAgICAgMjY6IDAgPSByZXR1
cm5zIHZhbHVlLCAxID0gdm9pZCAtLSAxIG1lYW5zIGluZmVycmVkIHN0cmluZyBsZW5ndGggcmV0
dXJuZWQKLQotICAgIFJlbWFpbmRlcjoKLSAgICAgMjctMzE6IDAgKHJlc2VydmVkKQotICovCi0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KLQotLyoK
LSAgICAgVGhlIGZvbGxvd2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24g
dG9wIG9mIHRoZQotICAgYmFzaWMgc3RyZWFtLW9yaWVudGVkIGZ1bmN0aW9ucy4gVG8gc2ltcGxp
ZnkgdGhlIGludGVyZmFjZSwgc29tZQotICAgZGVmYXVsdCBvcHRpb25zIGFyZSBhc3N1bWVkIChj
b21wcmVzc2lvbiBsZXZlbCBhbmQgbWVtb3J5IHVzYWdlLAotICAgc3RhbmRhcmQgbWVtb3J5IGFs
bG9jYXRpb24gZnVuY3Rpb25zKS4gVGhlIHNvdXJjZSBjb2RlIG9mIHRoZXNlCi0gICB1dGlsaXR5
IGZ1bmN0aW9ucyBjYW4gZWFzaWx5IGJlIG1vZGlmaWVkIGlmIHlvdSBuZWVkIHNwZWNpYWwgb3B0
aW9ucy4KLSovCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgY29tcHJlc3MgT0YoKEJ5dGVmICpkZXN0
LCAgIHVMb25nZiAqZGVzdExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOwotLyoKLSAgICAgQ29tcHJlc3Nl
cyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VM
ZW4gaXMKLSAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRy
eSwgZGVzdExlbiBpcyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZl
ciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQKLSAgIGJ5IGNvbXBy
ZXNzQm91bmQoc291cmNlTGVuKS4gVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6
ZSBvZiB0aGUKLSAgIGNvbXByZXNzZWQgYnVmZmVyLgotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBi
ZSB1c2VkIHRvIGNvbXByZXNzIGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQotICAgaW5wdXQg
ZmlsZSBpcyBtbWFwJ2VkLgotICAgICBjb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywg
Wl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAotICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJS
T1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0Ci0gICBidWZmZXIu
Ci0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGNvbXByZXNzMiBPRigoQnl0ZWYgKmRlc3QsICAg
dUxvbmdmICpkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbGV2ZWwpKTsKLS8qCi0gICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBi
dWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiBUaGUgbGV2ZWwKLSAgIHBhcmFtZXRl
ciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBkZWZsYXRlSW5pdC4gIHNvdXJjZUxlbiBpcyB0
aGUgYnl0ZQotICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0
TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQotICAgZGVzdGluYXRpb24gYnVmZmVyLCB3aGlj
aCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQotICAgY29tcHJlc3NCb3Vu
ZChzb3VyY2VMZW4pLiBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRo
ZQotICAgY29tcHJlc3NlZCBidWZmZXIuCi0KLSAgICAgY29tcHJlc3MyIHJldHVybnMgWl9PSyBp
ZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAotICAgbWVtb3J5
LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQg
YnVmZmVyLAotICAgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGxldmVsIHBhcmFtZXRlciBpcyBpbnZh
bGlkLgotKi8KLQotWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNvbXByZXNzQm91bmQgT0YoKHVMb25n
IHNvdXJjZUxlbikpOwotLyoKLSAgICAgY29tcHJlc3NCb3VuZCgpIHJldHVybnMgYW4gdXBwZXIg
Ym91bmQgb24gdGhlIGNvbXByZXNzZWQgc2l6ZSBhZnRlcgotICAgY29tcHJlc3MoKSBvciBjb21w
cmVzczIoKSBvbiBzb3VyY2VMZW4gYnl0ZXMuICBJdCB3b3VsZCBiZSB1c2VkIGJlZm9yZQotICAg
YSBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGRlc3RpbmF0
aW9uIGJ1ZmZlci4KLSovCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgdW5jb21wcmVzcyBPRigoQnl0
ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pKTsKLS8qCi0gICAg
IERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZm
ZXIuICBzb3VyY2VMZW4gaXMKLSAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZl
ci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3Rp
bmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKLSAg
IGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQg
ZGF0YSBtdXN0IGhhdmUKLSAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3Nv
ciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgotICAgYnkgc29tZSBtZWNoYW5p
c20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKLSAgIFVw
b24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVm
ZmVyLgotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgYSB3aG9s
ZSBmaWxlIGF0IG9uY2UgaWYgdGhlCi0gICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCi0KLSAgICAg
dW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUg
d2FzIG5vdAotICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBl
bm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0Ci0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0
aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuCi0qLwotCi0KLXR5cGVk
ZWYgdm9pZHAgZ3pGaWxlOwotCi1aRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiAgT0YoKGNv
bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpKTsKLS8qCi0gICAgIE9wZW5zIGEgZ3pp
cCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuIFRoZSBtb2RlIHBhcmFtZXRlcgot
ICAgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikgYnV0IGNhbiBhbHNvIGluY2x1ZGUgYSBj
b21wcmVzc2lvbiBsZXZlbAotICAgKCJ3YjkiKSBvciBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRl
cmVkIGRhdGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yCi0gICBIdWZmbWFuIG9ubHkgY29tcHJlc3Np
b24gYXMgaW4gIndiMWgiLCBvciAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcKLSAgIGFzIGlu
ICJ3YjFSIi4gKFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGlu
Zm9ybWF0aW9uCi0gICBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikKLQotICAgICBnem9w
ZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0
OyBpbiB0aGlzCi0gICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmls
ZSB3aXRob3V0IGRlY29tcHJlc3Npb24uCi0KLSAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0
aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJlIHdhcwotICAgaW5zdWZmaWNp
ZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlOyBlcnJubwot
ICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjYXNlcyAoaWYgZXJybm8g
aXMgemVybywgdGhlCi0gICB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4gICovCi0KLVpFWFRF
Uk4gZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAgT0YoKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkp
OwotLyoKLSAgICAgZ3pkb3BlbigpIGFzc29jaWF0ZXMgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBk
ZXNjcmlwdG9yIGZkLiAgRmlsZQotICAgZGVzY3JpcHRvcnMgYXJlIG9idGFpbmVkIGZyb20gY2Fs
bHMgbGlrZSBvcGVuLCBkdXAsIGNyZWF0LCBwaXBlIG9yCi0gICBmaWxlbm8gKGluIHRoZSBmaWxl
IGhhcyBiZWVuIHByZXZpb3VzbHkgb3BlbmVkIHdpdGggZm9wZW4pLgotICAgVGhlIG1vZGUgcGFy
YW1ldGVyIGlzIGFzIGluIGd6b3Blbi4KLSAgICAgVGhlIG5leHQgY2FsbCBvZiBnemNsb3NlIG9u
IHRoZSByZXR1cm5lZCBnekZpbGUgd2lsbCBhbHNvIGNsb3NlIHRoZQotICAgZmlsZSBkZXNjcmlw
dG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCksIG1vZGUpIGNsb3NlcyB0aGUgZmls
ZQotICAgZGVzY3JpcHRvciBmZC4gSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgZ3pk
b3BlbihkdXAoZmQpLCBtb2RlKS4KLSAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUg
d2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUKLSAgIHRoZSAoZGUpY29tcHJlc3Np
b24gc3RhdGUuCi0qLwotCi1aRVhURVJOIGludCBaRVhQT1JUIGd6c2V0cGFyYW1zIE9GKChnekZp
bGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpKTsKLS8qCi0gICAgIER5bmFtaWNhbGx5
IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgb3Igc3RyYXRlZ3kuIFNlZSB0aGUgZGVzY3Jp
cHRpb24KLSAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1l
dGVycy4KLSAgICAgZ3pzZXRwYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RS
RUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBub3QKLSAgIG9wZW5lZCBmb3Igd3JpdGluZy4KLSov
Ci0KLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pyZWFkICBPRigoZ3pGaWxlIGZpbGUsIHZvaWRw
IGJ1ZiwgdW5zaWduZWQgbGVuKSk7Ci0vKgotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9m
IHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBJZiB0aGUg
aW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZl
biBudW1iZXIKLSAgIG9mIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KLSAgICAgZ3pyZWFkIHJldHVy
bnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IK
LSAgIGVuZCBvZiBmaWxlLCAtMSBmb3IgZXJyb3IpLiAqLwotCi1aRVhURVJOIGludCBaRVhQT1JU
ICAgIGd6d3JpdGUgT0YoKGd6RmlsZSBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkcGMgYnVmLCB1bnNpZ25lZCBsZW4pKTsKLS8qCi0gICAgIFdyaXRlcyB0aGUg
Z2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGZp
bGUuCi0gICBnendyaXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMg
YWN0dWFsbHkgd3JpdHRlbgotICAgKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotCi1aRVhURVJO
IGludCBaRVhQT1JUVkEgICBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKSk7Ci0vKgotICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUg
YXJncyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCi0gICBjb250cm9sIG9mIHRoZSBmb3Jt
YXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YK
LSAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNhc2Ugb2YgZXJy
b3IpLiAgVGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gaXMgbGlt
aXRlZCB0byA0MDk1LiBUaGUgY2FsbGVyIHNob3VsZCBhc3N1cmUgdGhhdAotICAgdGhpcyBsaW1p
dCBpcyBub3QgZXhjZWVkZWQuIElmIGl0IGlzIGV4Y2VlZGVkLCB0aGVuIGd6cHJpbnRmKCkgd2ls
bCByZXR1cm4KLSAgIHJldHVybiBhbiBlcnJvciAoMCkgd2l0aCBub3RoaW5nIHdyaXR0ZW4uIElu
IHRoaXMgY2FzZSwgdGhlcmUgbWF5IGFsc28gYmUgYQotICAgYnVmZmVyIG92ZXJmbG93IHdpdGgg
dW5wcmVkaWN0YWJsZSBjb25zZXF1ZW5jZXMsIHdoaWNoIGlzIHBvc3NpYmxlIG9ubHkgaWYKLSAg
IHpsaWIgd2FzIGNvbXBpbGVkIHdpdGggdGhlIGluc2VjdXJlIGZ1bmN0aW9ucyBzcHJpbnRmKCkg
b3IgdnNwcmludGYoKQotICAgYmVjYXVzZSB0aGUgc2VjdXJlIHNucHJpbnRmKCkgb3IgdnNucHJp
bnRmKCkgZnVuY3Rpb25zIHdlcmUgbm90IGF2YWlsYWJsZS4KLSovCi0KLVpFWFRFUk4gaW50IFpF
WFBPUlQgZ3pwdXRzIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqcykpOwotLyoKLSAgICAg
IFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3Nl
ZCBmaWxlLCBleGNsdWRpbmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAg
ICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAt
MSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLQotWkVYVEVSTiBjaGFyICogWkVYUE9SVCBnemdldHMg
T0YoKGd6RmlsZSBmaWxlLCBjaGFyICpidWYsIGludCBsZW4pKTsKLS8qCi0gICAgICBSZWFkcyBi
eXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBhcmUg
cmVhZCwgb3IKLSAgIGEgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQg
dG8gYnVmLCBvciBhbiBlbmQtb2YtZmlsZQotICAgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLiAg
VGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwKLSAgIGNoYXJhY3Rlci4K
LSAgICAgIGd6Z2V0cyByZXR1cm5zIGJ1Ziwgb3IgWl9OVUxMIGluIGNhc2Ugb2YgZXJyb3IuCi0q
LwotCi1aRVhURVJOIGludCBaRVhQT1JUICAgIGd6cHV0YyBPRigoZ3pGaWxlIGZpbGUsIGludCBj
KSk7Ci0vKgotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBp
bnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhh
dCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi0KLVpFWFRFUk4gaW50
IFpFWFBPUlQgICAgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwotLyoKLSAgICAgIFJlYWRzIG9u
ZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRl
Ci0gICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgotKi8KLQotWkVYVEVS
TiBpbnQgWkVYUE9SVCAgICBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7Ci0vKgot
ICAgICAgUHVzaCBvbmUgY2hhcmFjdGVyIGJhY2sgb250byB0aGUgc3RyZWFtIHRvIGJlIHJlYWQg
YWdhaW4gbGF0ZXIuCi0gICBPbmx5IG9uZSBjaGFyYWN0ZXIgb2YgcHVzaC1iYWNrIGlzIGFsbG93
ZWQuICBnenVuZ2V0YygpIHJldHVybnMgdGhlCi0gICBjaGFyYWN0ZXIgcHVzaGVkLCBvciAtMSBv
biBmYWlsdXJlLiAgZ3p1bmdldGMoKSB3aWxsIGZhaWwgaWYgYQotICAgY2hhcmFjdGVyIGhhcyBi
ZWVuIHB1c2hlZCBidXQgbm90IHJlYWQgeWV0LCBvciBpZiBjIGlzIC0xLiBUaGUgcHVzaGVkCi0g
ICBjaGFyYWN0ZXIgd2lsbCBiZSBkaXNjYXJkZWQgaWYgdGhlIHN0cmVhbSBpcyByZXBvc2l0aW9u
ZWQgd2l0aCBnenNlZWsoKQotICAgb3IgZ3pyZXdpbmQoKS4KLSovCi0KLVpFWFRFUk4gaW50IFpF
WFBPUlQgICAgZ3pmbHVzaCBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwotLyoKLSAgICAg
Rmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUg
cGFyYW1ldGVyCi0gICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLiBUaGUg
cmV0dXJuIHZhbHVlIGlzIHRoZSB6bGliCi0gICBlcnJvciBudW1iZXIgKHNlZSBmdW5jdGlvbiBn
emVycm9yIGJlbG93KS4gZ3pmbHVzaCByZXR1cm5zIFpfT0sgaWYKLSAgIHRoZSBmbHVzaCBwYXJh
bWV0ZXIgaXMgWl9GSU5JU0ggYW5kIGFsbCBvdXRwdXQgY291bGQgYmUgZmx1c2hlZC4KLSAgICAg
Z3pmbHVzaCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVj
YXVzZSBpdCBjYW4KLSAgIGRlZ3JhZGUgY29tcHJlc3Npb24uCi0qLwotCi1aRVhURVJOIHpfb2Zm
X3QgWkVYUE9SVCAgICBnenNlZWsgT0YoKGd6RmlsZSBmaWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB6X29mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOwotLyoKLSAg
ICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3
cml0ZSBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNl
bnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFt
LiBUaGUgd2hlbmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOwotICAgdGhl
IHZhbHVlIFNFRUtfRU5EIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgIElmIHRoZSBmaWxlIGlzIG9w
ZW5lZCBmb3IgcmVhZGluZywgdGhpcyBmdW5jdGlvbiBpcyBlbXVsYXRlZCBidXQgY2FuIGJlCi0g
ICBleHRyZW1lbHkgc2xvdy4gSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nLCBvbmx5
IGZvcndhcmQgc2Vla3MgYXJlCi0gICBzdXBwb3J0ZWQ7IGd6c2VlayB0aGVuIGNvbXByZXNzZXMg
YSBzZXF1ZW5jZSBvZiB6ZXJvZXMgdXAgdG8gdGhlIG5ldwotICAgc3RhcnRpbmcgcG9zaXRpb24u
Ci0KLSAgICAgIGd6c2VlayByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGxvY2F0aW9uIGFz
IG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KLSAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJl
c3NlZCBzdHJlYW0sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IsIGluCi0gICBwYXJ0aWN1bGFyIGlm
IHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZyBhbmQgdGhlIG5ldyBzdGFydGluZyBwb3Np
dGlvbgotICAgd291bGQgYmUgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotKi8KLQotWkVY
VEVSTiBpbnQgWkVYUE9SVCAgICBnenJld2luZCBPRigoZ3pGaWxlIGZpbGUpKTsKLS8qCi0gICAg
IFJld2luZHMgdGhlIGdpdmVuIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkg
Zm9yIHJlYWRpbmcuCi0KLSAgIGd6cmV3aW5kKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gKGludCln
enNlZWsoZmlsZSwgMEwsIFNFRUtfU0VUKQotKi8KLQotWkVYVEVSTiB6X29mZl90IFpFWFBPUlQg
ICAgZ3p0ZWxsIE9GKChnekZpbGUgZmlsZSkpOwotLyoKLSAgICAgUmV0dXJucyB0aGUgc3RhcnRp
bmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2
ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0KLSAgIGd6dGVsbChm
aWxlKSBpcyBlcXVpdmFsZW50IHRvIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpCi0qLwotCi1a
RVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOwotLyoKLSAgICAgUmV0
dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVhZGluZyB0aGUg
Z2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotCi1aRVhURVJOIGlu
dCBaRVhQT1JUIGd6ZGlyZWN0IE9GKChnekZpbGUgZmlsZSkpOwotLyoKLSAgICAgUmV0dXJucyAx
IGlmIGZpbGUgaXMgYmVpbmcgcmVhZCBkaXJlY3RseSB3aXRob3V0IGRlY29tcHJlc3Npb24sIG90
aGVyd2lzZQotICAgemVyby4KLSovCi0KLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBP
RigoZ3pGaWxlIGZpbGUpKTsKLS8qCi0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlm
IG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRl
cyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUg
emxpYgotICAgZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gZ3plcnJvciBiZWxvdykuCi0qLwot
Ci1aRVhURVJOIGNvbnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IgT0YoKGd6RmlsZSBmaWxlLCBp
bnQgKmVycm51bSkpOwotLyoKLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhl
IGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZp
bGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBv
Y2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGli
cmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1h
eSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCi0qLwotCi1a
RVhURVJOIHZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIE9GKChnekZpbGUgZmlsZSkpOwotLyoKLSAg
ICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuIFRoaXMg
aXMgYW5hbG9nb3VzIHRvIHRoZQotICAgY2xlYXJlcnIoKSBmdW5jdGlvbiBpbiBzdGRpby4gVGhp
cyBpcyB1c2VmdWwgZm9yIGNvbnRpbnVpbmcgdG8gcmVhZCBhIGd6aXAKLSAgIGZpbGUgdGhhdCBp
cyBiZWluZyB3cml0dGVuIGNvbmN1cnJlbnRseS4KLSovCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLwotCi0vKgotICAgICBUaGVzZSBmdW5jdGlvbnMg
YXJlIG5vdCByZWxhdGVkIHRvIGNvbXByZXNzaW9uIGJ1dCBhcmUgZXhwb3J0ZWQKLSAgIGFueXdh
eSBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUK
LSAgIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0qLwotCi1aRVhURVJOIHVMb25nIFpFWFBPUlQgYWRs
ZXIzMiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7Ci0vKgot
ICAgICBVcGRhdGUgYSBydW5uaW5nIEFkbGVyLTMyIGNoZWNrc3VtIHdpdGggdGhlIGJ5dGVzIGJ1
ZlswLi5sZW4tMV0gYW5kCi0gICByZXR1cm4gdGhlIHVwZGF0ZWQgY2hlY2tzdW0uIElmIGJ1ZiBp
cyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAgIHRoZSByZXF1aXJlZCBpbml0aWFsIHZh
bHVlIGZvciB0aGUgY2hlY2tzdW0uCi0gICBBbiBBZGxlci0zMiBjaGVja3N1bSBpcyBhbG1vc3Qg
YXMgcmVsaWFibGUgYXMgYSBDUkMzMiBidXQgY2FuIGJlIGNvbXB1dGVkCi0gICBtdWNoIGZhc3Rl
ci4gVXNhZ2UgZXhhbXBsZToKLQotICAgICB1TG9uZyBhZGxlciA9IGFkbGVyMzIoMEwsIFpfTlVM
TCwgMCk7Ci0KLSAgICAgd2hpbGUgKHJlYWRfYnVmZmVyKGJ1ZmZlciwgbGVuZ3RoKSAhPSBFT0Yp
IHsKLSAgICAgICBhZGxlciA9IGFkbGVyMzIoYWRsZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAg
fQotICAgICBpZiAoYWRsZXIgIT0gb3JpZ2luYWxfYWRsZXIpIGVycm9yKCk7Ci0qLwotCi1aRVhU
RVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZyBhZGxlcjEsIHVMb25n
IGFkbGVyMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2Zm
X3QgbGVuMikpOwotLyoKLSAgICAgQ29tYmluZSB0d28gQWRsZXItMzIgY2hlY2tzdW1zIGludG8g
b25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsIHNlcTEKLSAgIGFuZCBzZXEyIHdpdGgg
bGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBBZGxlci0zMiBjaGVja3N1bXMgd2VyZSBjYWxjdWxhdGVk
IGZvcgotICAgZWFjaCwgYWRsZXIxIGFuZCBhZGxlcjIuICBhZGxlcjMyX2NvbWJpbmUoKSByZXR1
cm5zIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZgotICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0
ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4KLSovCi0KLVpFWFRF
Uk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYs
IHVJbnQgbGVuKSk7Ci0vKgotICAgICBVcGRhdGUgYSBydW5uaW5nIENSQy0zMiB3aXRoIHRoZSBi
eXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCi0gICB1cGRhdGVkIENSQy0zMi4gSWYg
YnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5pdGlhbAot
ICAgdmFsdWUgZm9yIHRoZSBmb3IgdGhlIGNyYy4gUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcg
KG9uZSdzIGNvbXBsZW1lbnQpIGlzCi0gICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24g
c28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgotICAgVXNhZ2UgZXhh
bXBsZToKLQotICAgICB1TG9uZyBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLQotICAgICB3
aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgewotICAgICAgIGNyYyA9
IGNyYzMyKGNyYywgYnVmZmVyLCBsZW5ndGgpOwotICAgICB9Ci0gICAgIGlmIChjcmMgIT0gb3Jp
Z2luYWxfY3JjKSBlcnJvcigpOwotKi8KLQotWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2Nv
bWJpbmUgT0YoKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmX3QgbGVuMikpOwotCi0vKgot
ICAgICBDb21iaW5lIHR3byBDUkMtMzIgY2hlY2sgdmFsdWVzIGludG8gb25lLiAgRm9yIHR3byBz
ZXF1ZW5jZXMgb2YgYnl0ZXMsCi0gICBzZXExIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFu
ZCBsZW4yLCBDUkMtMzIgY2hlY2sgdmFsdWVzIHdlcmUKLSAgIGNhbGN1bGF0ZWQgZm9yIGVhY2gs
IGNyYzEgYW5kIGNyYzIuICBjcmMzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQ1JDLTMyCi0gICBj
aGVjayB2YWx1ZSBvZiBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkg
Y3JjMSwgY3JjMiwgYW5kCi0gICBsZW4yLgotKi8KLQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvKiB2YXJpb3VzIGhhY2tzLCBkb24ndCBsb29rIDopICovCi0KLS8qIGRlZmxhdGVJbml0IGFu
ZCBpbmZsYXRlSW5pdCBhcmUgbWFjcm9zIHRvIGFsbG93IGNoZWNraW5nIHRoZSB6bGliIHZlcnNp
b24KLSAqIGFuZCB0aGUgY29tcGlsZXIncyB2aWV3IG9mIHpfc3RyZWFtOgotICovCi1aRVhURVJO
IGludCBaRVhQT1JUIGRlZmxhdGVJbml0XyBPRigoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9u
LCBpbnQgc3RyZWFtX3NpemUpKTsKLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXRfIE9G
KCh6X3N0cmVhbXAgc3RybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsKLVpFWFRFUk4gaW50IFpFWFBP
UlQgZGVmbGF0ZUluaXQyXyBPRigoel9zdHJlYW1wIHN0cm0sIGludCAgbGV2ZWwsIGludCAgbWV0
aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2luZG93Qml0
cywgaW50IG1lbUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc3RyYXRlZ3ksIGNvbnN0IGNoYXIgKnZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzdHJlYW1fc2l6ZSkpOwotWkVYVEVSTiBpbnQgWkVYUE9SVCBp
bmZsYXRlSW5pdDJfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50ICB3aW5kb3dCaXRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQg
c3RyZWFtX3NpemUpKTsKLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2tJbml0XyBPRigo
el9zdHJlYW1wIHN0cm0sIGludCB3aW5kb3dCaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKLSNk
ZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKLSAgICAgICAgZGVmbGF0ZUluaXRfKChz
dHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQotI2Rl
ZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCi0gICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksICAg
ICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKLSNkZWZpbmUgZGVm
bGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJh
dGVneSkgXAotICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3
aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKLSAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kp
LCAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQotI2RlZmluZSBpbmZs
YXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAotICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJt
KSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCi0jZGVmaW5l
IGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKLSAgICAgICAgaW5m
bGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKLSAgICAgICAg
WkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQotCi0KLSNpZiAhZGVmaW5lZChaVVRJTF9I
KSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQotICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7
aW50IGR1bW15O307IC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwotI2VuZGlmCi0KLVpF
WFRFUk4gY29uc3QgY2hhciAgICogWkVYUE9SVCB6RXJyb3IgICAgICAgICAgIE9GKChpbnQpKTsK
LVpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0
cmVhbXAgeikpOwotWkVYVEVSTiBjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUg
ICAgT0YoKHZvaWQpKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlm
IC8qIFpMSUJfSCAqLwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGli
L3p1dGlsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96
bGliL3p1dGlsLmMJKHJldmlzaW9uIDUzNzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy96bGliL3p1dGlsLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsMzE4ICswLDAgQEAKLS8q
IHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIGNv
bXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBH
YWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNv
cHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogQCgjKSAkSWQ6IHp1dGlsLmMsdiAz
LjExIDIwMDUvMDgvMDQgMTk6MTQ6MTQgdG9yJWNzLmJyb3duLmVkdSBFeHAgJCAqLwotCi0jaW5j
bHVkZSAienV0aWwuaCIKLQotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxf
c3RhdGUgICAgICB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRp
ZgotCi1jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdID0gewotIm5lZWQgZGljdGlvbmFy
eSIsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqLwotInN0cmVhbSBlbmQiLCAgICAgICAg
ICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqLwotIiIsICAgICAgICAgICAgICAgICAgICAvKiBa
X09LICAgICAgICAgICAgICAwICAqLwotImZpbGUgZXJyb3IiLCAgICAgICAgICAvKiBaX0VSUk5P
ICAgICAgICAgKC0xKSAqLwotInN0cmVhbSBlcnJvciIsICAgICAgICAvKiBaX1NUUkVBTV9FUlJP
UiAgKC0yKSAqLwotImRhdGEgZXJyb3IiLCAgICAgICAgICAvKiBaX0RBVEFfRVJST1IgICAgKC0z
KSAqLwotImluc3VmZmljaWVudCBtZW1vcnkiLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqLwot
ImJ1ZmZlciBlcnJvciIsICAgICAgICAvKiBaX0JVRl9FUlJPUiAgICAgKC01KSAqLwotImluY29t
cGF0aWJsZSB2ZXJzaW9uIiwvKiBaX1ZFUlNJT05fRVJST1IgKC02KSAqLwotIiJ9OwotCi0KLWNv
bnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uKCkKLXsKLSAgICByZXR1cm4gWkxJQl9WRVJT
SU9OOwotfQotCi11TG9uZyBaRVhQT1JUIHpsaWJDb21waWxlRmxhZ3MoKQotewotICAgIHVMb25n
IGZsYWdzOwotCi0gICAgZmxhZ3MgPSAwOwotICAgIHN3aXRjaCAoc2l6ZW9mKHVJbnQpKSB7Ci0g
ICAgY2FzZSAyOiAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMTsgICAgIGJy
ZWFrOwotICAgIGNhc2UgODogICAgIGZsYWdzICs9IDI7ICAgICBicmVhazsKLSAgICBkZWZhdWx0
OiAgICBmbGFncyArPSAzOwotICAgIH0KLSAgICBzd2l0Y2ggKHNpemVvZih1TG9uZykpIHsKLSAg
ICBjYXNlIDI6ICAgICBicmVhazsKLSAgICBjYXNlIDQ6ICAgICBmbGFncyArPSAxIDw8IDI7ICAg
ICAgICBicmVhazsKLSAgICBjYXNlIDg6ICAgICBmbGFncyArPSAyIDw8IDI7ICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDI7Ci0gICAgfQotICAgIHN3aXRjaCAo
c2l6ZW9mKHZvaWRwZikpIHsKLSAgICBjYXNlIDI6ICAgICBicmVhazsKLSAgICBjYXNlIDQ6ICAg
ICBmbGFncyArPSAxIDw8IDQ7ICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6ICAgICBmbGFncyAr
PSAyIDw8IDQ7ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDQ7
Ci0gICAgfQotICAgIHN3aXRjaCAoc2l6ZW9mKHpfb2ZmX3QpKSB7Ci0gICAgY2FzZSAyOiAgICAg
YnJlYWs7Ci0gICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMSA8PCA2OyAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSA4OiAgICAgZmxhZ3MgKz0gMiA8PCA2OyAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDogICAgZmxhZ3MgKz0gMyA8PCA2OwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGZsYWdzICs9
IDEgPDwgODsKLSNlbmRpZgotI2lmIGRlZmluZWQoQVNNVikgfHwgZGVmaW5lZChBU01JTkYpCi0g
ICAgZmxhZ3MgKz0gMSA8PCA5OwotI2VuZGlmCi0jaWZkZWYgWkxJQl9XSU5BUEkKLSAgICBmbGFn
cyArPSAxIDw8IDEwOwotI2VuZGlmCi0jaWZkZWYgQlVJTERGSVhFRAotICAgIGZsYWdzICs9IDEg
PDwgMTI7Ci0jZW5kaWYKLSNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQotICAgIGZsYWdzICs9IDEg
PDwgMTM7Ci0jZW5kaWYKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgZmxhZ3MgKz0gMUwgPDwg
MTY7Ci0jZW5kaWYKLSNpZmRlZiBOT19HWklQCi0gICAgZmxhZ3MgKz0gMUwgPDwgMTc7Ci0jZW5k
aWYKLSNpZmRlZiBQS1pJUF9CVUdfV09SS0FST1VORAotICAgIGZsYWdzICs9IDFMIDw8IDIwOwot
I2VuZGlmCi0jaWZkZWYgRkFTVEVTVAotICAgIGZsYWdzICs9IDFMIDw8IDIxOwotI2VuZGlmCi0j
aWZkZWYgU1REQwotIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8
IDI1OwotIyAgICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8
PCAyNjsKLSMgICAgZW5kaWYKLSMgIGVsc2UKLSMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lk
Ci0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OwotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbHNl
Ci0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI0OwotIyAgaWZkZWYgTk9fc25wcmludGYKLSAgICAg
ICAgZmxhZ3MgKz0gMUwgPDwgMjU7Ci0jICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAg
ICAgZmxhZ3MgKz0gMUwgPDwgMjY7Ci0jICAgIGVuZGlmCi0jICBlbHNlCi0jICAgIGlmZGVmIEhB
U19zbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OwotIyAgICBlbmRpZgot
IyAgZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiBmbGFnczsKLX0KLQotI2lmZGVmIERFQlVHCi0K
LSMgIGlmbmRlZiB2ZXJib3NlCi0jICAgIGRlZmluZSB2ZXJib3NlIDAKLSMgIGVuZGlmCi1pbnQg
el92ZXJib3NlID0gdmVyYm9zZTsKLQotdm9pZCB6X2Vycm9yIChtKQotICAgIGNoYXIgKm07Ci17
Ci0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbSk7Ci0gICAgZXhpdCgxKTsKLX0KLSNlbmRp
ZgotCi0vKiBleHBvcnRlZCB0byBhbGxvdyBjb252ZXJzaW9uIG9mIGVycm9yIGNvZGUgdG8gc3Ry
aW5nIGZvciBjb21wcmVzcygpIGFuZAotICogdW5jb21wcmVzcygpCi0gKi8KLWNvbnN0IGNoYXIg
KiBaRVhQT1JUIHpFcnJvcihlcnIpCi0gICAgaW50IGVycjsKLXsKLSAgICByZXR1cm4gRVJSX01T
RyhlcnIpOwotfQotCi0jaWYgZGVmaW5lZChfV0lOMzJfV0NFKQotICAgIC8qIFRoZSBNaWNyb3Nv
ZnQgQyBSdW4tVGltZSBMaWJyYXJ5IGZvciBXaW5kb3dzIENFIGRvZXNuJ3QgaGF2ZQotICAgICAq
IGVycm5vLiAgV2UgZGVmaW5lIGl0IGFzIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIHNpbXBsaWZ5IHBv
cnRpbmcuCi0gICAgICogSXRzIHZhbHVlIGlzIGFsd2F5cyAwIGFuZCBzaG91bGQgbm90IGJlIHVz
ZWQuCi0gICAgICovCi0gICAgaW50IGVycm5vID0gMDsKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVf
TUVNQ1BZCi0KLXZvaWQgem1lbWNweShkZXN0LCBzb3VyY2UsIGxlbikKLSAgICBCeXRlZiogZGVz
dDsKLSAgICBjb25zdCBCeXRlZiogc291cmNlOwotICAgIHVJbnQgIGxlbjsKLXsKLSAgICBpZiAo
bGVuID09IDApIHJldHVybjsKLSAgICBkbyB7Ci0gICAgICAgICpkZXN0KysgPSAqc291cmNlKys7
IC8qID8/PyB0byBiZSB1bnJvbGxlZCAqLwotICAgIH0gd2hpbGUgKC0tbGVuICE9IDApOwotfQot
Ci1pbnQgem1lbWNtcChzMSwgczIsIGxlbikKLSAgICBjb25zdCBCeXRlZiogczE7Ci0gICAgY29u
c3QgQnl0ZWYqIHMyOwotICAgIHVJbnQgIGxlbjsKLXsKLSAgICB1SW50IGo7Ci0KLSAgICBmb3Ig
KGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgaWYgKHMxW2pdICE9IHMyW2pdKSByZXR1
cm4gMiooczFbal0gPiBzMltqXSktMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
em1lbXplcm8oZGVzdCwgbGVuKQotICAgIEJ5dGVmKiBkZXN0OwotICAgIHVJbnQgIGxlbjsKLXsK
LSAgICBpZiAobGVuID09IDApIHJldHVybjsKLSAgICBkbyB7Ci0gICAgICAgICpkZXN0KysgPSAw
OyAgLyogPz8/IHRvIGJlIHVucm9sbGVkICovCi0gICAgfSB3aGlsZSAoLS1sZW4gIT0gMCk7Ci19
Ci0jZW5kaWYKLQotCi0jaWZkZWYgU1lTMTZCSVQKLQotI2lmZGVmIF9fVFVSQk9DX18KLS8qIFR1
cmJvIEMgaW4gMTYtYml0IG1vZGUgKi8KLQotIyAgZGVmaW5lIE1ZX1pDQUxMT0MKLQotLyogVHVy
Ym8gQyBtYWxsb2MoKSBkb2VzIG5vdCBhbGxvdyBkeW5hbWljIGFsbG9jYXRpb24gb2YgNjRLIGJ5
dGVzCi0gKiBhbmQgZmFybWFsbG9jKDY0SykgcmV0dXJucyBhIHBvaW50ZXIgd2l0aCBhbiBvZmZz
ZXQgb2YgOCwgc28gd2UKLSAqIG11c3QgZml4IHRoZSBwb2ludGVyLiBXYXJuaW5nOiB0aGUgcG9p
bnRlciBtdXN0IGJlIHB1dCBiYWNrIHRvIGl0cwotICogb3JpZ2luYWwgZm9ybSBpbiBvcmRlciB0
byBmcmVlIGl0LCB1c2UgemNmcmVlKCkuCi0gKi8KLQotI2RlZmluZSBNQVhfUFRSIDEwCi0vKiAx
MCo2NEsgPSA2NDBLICovCi0KLWxvY2FsIGludCBuZXh0X3B0ciA9IDA7Ci0KLXR5cGVkZWYgc3Ry
dWN0IHB0cl90YWJsZV9zIHsKLSAgICB2b2lkcGYgb3JnX3B0cjsKLSAgICB2b2lkcGYgbmV3X3B0
cjsKLX0gcHRyX3RhYmxlOwotCi1sb2NhbCBwdHJfdGFibGUgdGFibGVbTUFYX1BUUl07Ci0vKiBU
aGlzIHRhYmxlIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhlIG9yaWdpbmFsIGZvcm0gb2YgcG9pbnRl
cnMKLSAqIHRvIGxhcmdlIGJ1ZmZlcnMgKDY0SykuIFN1Y2ggcG9pbnRlcnMgYXJlIG5vcm1hbGl6
ZWQgd2l0aCBhIHplcm8gb2Zmc2V0LgotICogU2luY2UgTVNET1MgaXMgbm90IGEgcHJlZW1wdGl2
ZSBtdWx0aXRhc2tpbmcgT1MsIHRoaXMgdGFibGUgaXMgbm90Ci0gKiBwcm90ZWN0ZWQgZnJvbSBj
b25jdXJyZW50IGFjY2Vzcy4gVGhpcyBoYWNrIGRvZXNuJ3Qgd29yayBhbnl3YXkgb24KLSAqIGEg
cHJvdGVjdGVkIHN5c3RlbSBsaWtlIE9TLzIuIFVzZSBNaWNyb3NvZnQgQyBpbnN0ZWFkLgotICov
Ci0KLXZvaWRwZiB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWdu
ZWQgc2l6ZSkKLXsKLSAgICB2b2lkcGYgYnVmID0gb3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29t
ZSBjb21waWxlcnMgaGFwcHkgKi8KLSAgICB1bGcgYnNpemUgPSAodWxnKWl0ZW1zKnNpemU7Ci0K
LSAgICAvKiBJZiB3ZSBhbGxvY2F0ZSBsZXNzIHRoYW4gNjU1MjAgYnl0ZXMsIHdlIGFzc3VtZSB0
aGF0IGZhcm1hbGxvYwotICAgICAqIHdpbGwgcmV0dXJuIGEgdXNhYmxlIHBvaW50ZXIgd2hpY2gg
ZG9lc24ndCBoYXZlIHRvIGJlIG5vcm1hbGl6ZWQuCi0gICAgICovCi0gICAgaWYgKGJzaXplIDwg
NjU1MjBMKSB7Ci0gICAgICAgIGJ1ZiA9IGZhcm1hbGxvYyhic2l6ZSk7Ci0gICAgICAgIGlmICgq
KHVzaCopJmJ1ZiAhPSAwKSByZXR1cm4gYnVmOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZiA9
IGZhcm1hbGxvYyhic2l6ZSArIDE2TCk7Ci0gICAgfQotICAgIGlmIChidWYgPT0gTlVMTCB8fCBu
ZXh0X3B0ciA+PSBNQVhfUFRSKSByZXR1cm4gTlVMTDsKLSAgICB0YWJsZVtuZXh0X3B0cl0ub3Jn
X3B0ciA9IGJ1ZjsKLQotICAgIC8qIE5vcm1hbGl6ZSB0aGUgcG9pbnRlciB0byBzZWc6MCAqLwot
ICAgICooKHVzaCopJmJ1ZisxKSArPSAoKHVzaCkoKHVjaCopYnVmLTApICsgMTUpID4+IDQ7Ci0g
ICAgKih1c2gqKSZidWYgPSAwOwotICAgIHRhYmxlW25leHRfcHRyKytdLm5ld19wdHIgPSBidWY7
Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotdm9pZCAgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lk
cGYgcHRyKQotewotICAgIGludCBuOwotICAgIGlmICgqKHVzaCopJnB0ciAhPSAwKSB7IC8qIG9i
amVjdCA8IDY0SyAqLwotICAgICAgICBmYXJmcmVlKHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLyogRmluZCB0aGUgb3JpZ2luYWwgcG9pbnRlciAqLwotICAgIGZvciAobiA9IDA7
IG4gPCBuZXh0X3B0cjsgbisrKSB7Ci0gICAgICAgIGlmIChwdHIgIT0gdGFibGVbbl0ubmV3X3B0
cikgY29udGludWU7Ci0KLSAgICAgICAgZmFyZnJlZSh0YWJsZVtuXS5vcmdfcHRyKTsKLSAgICAg
ICAgd2hpbGUgKCsrbiA8IG5leHRfcHRyKSB7Ci0gICAgICAgICAgICB0YWJsZVtuLTFdID0gdGFi
bGVbbl07Ci0gICAgICAgIH0KLSAgICAgICAgbmV4dF9wdHItLTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBwdHIgPSBvcGFxdWU7IC8qIGp1c3QgdG8gbWFrZSBzb21lIGNvbXBpbGVycyBo
YXBweSAqLwotICAgIEFzc2VydCgwLCAiemNmcmVlOiBwdHIgbm90IGZvdW5kIik7Ci19Ci0KLSNl
bmRpZiAvKiBfX1RVUkJPQ19fICovCi0KLQotI2lmZGVmIE1fSTg2Ci0vKiBNaWNyb3NvZnQgQyBp
biAxNi1iaXQgbW9kZSAqLwotCi0jICBkZWZpbmUgTVlfWkNBTExPQwotCi0jaWYgKCFkZWZpbmVk
KF9NU0NfVkVSKSB8fCAoX01TQ19WRVIgPD0gNjAwKSkKLSMgIGRlZmluZSBfaGFsbG9jICBoYWxs
b2MKLSMgIGRlZmluZSBfaGZyZWUgICBoZnJlZQotI2VuZGlmCi0KLXZvaWRwZiB6Y2FsbG9jICh2
b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKLXsKLSAgICBpZiAo
b3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCi0gICAgcmV0
dXJuIF9oYWxsb2MoKGxvbmcpaXRlbXMsIHNpemUpOwotfQotCi12b2lkICB6Y2ZyZWUgKHZvaWRw
ZiBvcGFxdWUsIHZvaWRwZiBwdHIpCi17Ci0gICAgaWYgKG9wYXF1ZSkgb3BhcXVlID0gMDsgLyog
dG8gbWFrZSBjb21waWxlciBoYXBweSAqLwotICAgIF9oZnJlZShwdHIpOwotfQotCi0jZW5kaWYg
LyogTV9JODYgKi8KLQotI2VuZGlmIC8qIFNZUzE2QklUICovCi0KLQotI2lmbmRlZiBNWV9aQ0FM
TE9DIC8qIEFueSBzeXN0ZW0gd2l0aG91dCBhIHNwZWNpYWwgYWxsb2MgZnVuY3Rpb24gKi8KLQot
I2lmbmRlZiBTVERDCi1leHRlcm4gdm9pZHAgIG1hbGxvYyBPRigodUludCBzaXplKSk7Ci1leHRl
cm4gdm9pZHAgIGNhbGxvYyBPRigodUludCBpdGVtcywgdUludCBzaXplKSk7Ci1leHRlcm4gdm9p
ZCAgIGZyZWUgICBPRigodm9pZHBmIHB0cikpOwotI2VuZGlmCi0KLXZvaWRwZiB6Y2FsbG9jIChv
cGFxdWUsIGl0ZW1zLCBzaXplKQotICAgIHZvaWRwZiBvcGFxdWU7Ci0gICAgdW5zaWduZWQgaXRl
bXM7Ci0gICAgdW5zaWduZWQgc2l6ZTsKLXsKLSAgICBpZiAob3BhcXVlKSBpdGVtcyArPSBzaXpl
IC0gc2l6ZTsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLwotICAgIHJldHVybiBzaXplb2YodUlu
dCkgPiAyID8gKHZvaWRwZiltYWxsb2MoaXRlbXMgKiBzaXplKSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodm9pZHBmKWNhbGxvYyhpdGVtcywgc2l6ZSk7Ci19Ci0KLXZvaWQgIHpj
ZnJlZSAob3BhcXVlLCBwdHIpCi0gICAgdm9pZHBmIG9wYXF1ZTsKLSAgICB2b2lkcGYgcHRyOwot
ewotICAgIGZyZWUocHRyKTsKLSAgICBpZiAob3BhcXVlKSByZXR1cm47IC8qIG1ha2UgY29tcGls
ZXIgaGFwcHkgKi8KLX0KLQotI2VuZGlmIC8qIE1ZX1pDQUxMT0MgKi8KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96dXRpbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96dXRpbC5oCShyZXZpc2lvbiA1MzcxOSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96dXRpbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI2OSArMCwwIEBACi0vKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFj
ZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJp
Z2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9m
IGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAq
LwotCi0vKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGlj
YXRpb25zLiBJdCBpcwotICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXBy
ZXNzaW9uIGxpYnJhcnkgYW5kIGlzCi0gICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25z
IHNob3VsZCBvbmx5IHVzZSB6bGliLmguCi0gKi8KLQotLyogQCgjKSAkSWQ6IHp1dGlsLmgsdiAz
LjEwIDIwMDUvMDgvMDQgMTk6MTQ6MTQgdG9yJWNzLmJyb3duLmVkdSBFeHAgJCAqLwotCi0jaWZu
ZGVmIFpVVElMX0gKLSNkZWZpbmUgWlVUSUxfSAotCi0jZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNp
bmNsdWRlICJ6bGliLmgiCi0KLSNpZmRlZiBTVERDCi0jICBpZm5kZWYgX1dJTjMyX1dDRQotIyAg
ICBpbmNsdWRlIDxzdGRkZWYuaD4KLSMgIGVuZGlmCi0jICBpbmNsdWRlIDxzdHJpbmcuaD4KLSMg
IGluY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWZkZWYgTk9fRVJSTk9fSAotIyAgIGlmZGVm
IF9XSU4zMl9XQ0UKLSAgICAgIC8qIFRoZSBNaWNyb3NvZnQgQyBSdW4tVGltZSBMaWJyYXJ5IGZv
ciBXaW5kb3dzIENFIGRvZXNuJ3QgaGF2ZQotICAgICAgICogZXJybm8uICBXZSBkZWZpbmUgaXQg
YXMgYSBnbG9iYWwgdmFyaWFibGUgdG8gc2ltcGxpZnkgcG9ydGluZy4KLSAgICAgICAqIEl0cyB2
YWx1ZSBpcyBhbHdheXMgMCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAgV2UgcmVuYW1lIGl0IHRv
Ci0gICAgICAgKiBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIGxpYnJhcmllcyB0aGF0IHVzZSB0
aGUgc2FtZSB3b3JrYXJvdW5kLgotICAgICAgICovCi0jICAgICBkZWZpbmUgZXJybm8gel9lcnJu
bwotIyAgIGVuZGlmCi0gICAgZXh0ZXJuIGludCBlcnJubzsKLSNlbHNlCi0jICBpZm5kZWYgX1dJ
TjMyX1dDRQotIyAgICBpbmNsdWRlIDxlcnJuby5oPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZu
ZGVmIGxvY2FsCi0jICBkZWZpbmUgbG9jYWwgc3RhdGljCi0jZW5kaWYKLS8qIGNvbXBpbGUgd2l0
aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scyAqLwot
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKLXR5cGVkZWYgdWNoIEZBUiB1Y2hmOwotdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVzaCBGQVIgdXNoZjsKLXR5cGVkZWYg
dW5zaWduZWQgbG9uZyAgdWxnOwotCi1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNn
WzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KLS8qIChzaXplIGdpdmVuIHRvIGF2
b2lkIHNpbGx5IHdhcm5pbmdzIHdpdGggVmlzdWFsIEMrKykgKi8KLQotI2RlZmluZSBFUlJfTVNH
KGVycikgel9lcnJtc2dbWl9ORUVEX0RJQ1QtKGVycildCi0KLSNkZWZpbmUgRVJSX1JFVFVSTihz
dHJtLGVycikgXAotICByZXR1cm4gKHN0cm0tPm1zZyA9IChjaGFyKilFUlJfTVNHKGVyciksIChl
cnIpKQotLyogVG8gYmUgdXNlZCBvbmx5IHdoZW4gdGhlIHN0YXRlIGlzIGtub3duIHRvIGJlIHZh
bGlkICovCi0KLSAgICAgICAgLyogY29tbW9uIGNvbnN0YW50cyAqLwotCi0jaWZuZGVmIERFRl9X
QklUUwotIyAgZGVmaW5lIERFRl9XQklUUyBNQVhfV0JJVFMKLSNlbmRpZgotLyogZGVmYXVsdCB3
aW5kb3dCaXRzIGZvciBkZWNvbXByZXNzaW9uLiBNQVhfV0JJVFMgaXMgZm9yIGNvbXByZXNzaW9u
IG9ubHkgKi8KLQotI2lmIE1BWF9NRU1fTEVWRUwgPj0gOAotIyAgZGVmaW5lIERFRl9NRU1fTEVW
RUwgOAotI2Vsc2UKLSMgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xFVkVMCi0jZW5k
aWYKLS8qIGRlZmF1bHQgbWVtTGV2ZWwgKi8KLQotI2RlZmluZSBTVE9SRURfQkxPQ0sgMAotI2Rl
ZmluZSBTVEFUSUNfVFJFRVMgMQotI2RlZmluZSBEWU5fVFJFRVMgICAgMgotLyogVGhlIHRocmVl
IGtpbmRzIG9mIGJsb2NrIHR5cGUgKi8KLQotI2RlZmluZSBNSU5fTUFUQ0ggIDMKLSNkZWZpbmUg
TUFYX01BVENIICAyNTgKLS8qIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG1hdGNoIGxlbmd0aHMg
Ki8KLQotI2RlZmluZSBQUkVTRVRfRElDVCAweDIwIC8qIHByZXNldCBkaWN0aW9uYXJ5IGZsYWcg
aW4gemxpYiBoZWFkZXIgKi8KLQotICAgICAgICAvKiB0YXJnZXQgZGVwZW5kZW5jaWVzICovCi0K
LSNpZiBkZWZpbmVkKE1TRE9TKSB8fCAoZGVmaW5lZChXSU5ET1dTKSAmJiAhZGVmaW5lZChXSU4z
MikpCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwMAotIyAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8
fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgICAgaWYoX19TVERDX18gPT0gMSkgJiYgKGRlZmlu
ZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKLSAgICAgICAvKiBBbGxvdyBj
b21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBlbmFibGVkICovCi0gICAgICAgdm9p
ZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKLSAgICAgICB2b2lkICpfQ2RlY2wgZmFy
bWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOwotIyAgICBlbHNlCi0jICAgICAgaW5jbHVk
ZSA8YWxsb2MuaD4KLSMgICAgZW5kaWYKLSMgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCi0jICAg
IGluY2x1ZGUgPG1hbGxvYy5oPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQU1JR0EKLSMg
IGRlZmluZSBPU19DT0RFICAweDAxCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVkFYQykgfHwgZGVm
aW5lZChWTVMpCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwMgotIyAgZGVmaW5lIEZfT1BFTihuYW1l
LCBtb2RlKSBcCi0gICAgIGZvcGVuKChuYW1lKSwgKG1vZGUpLCAibWJjPTYwIiwgImN0eD1zdG0i
LCAicmZtPWZpeCIsICJtcnM9NTEyIikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBVEFSSSkgfHwg
ZGVmaW5lZChhdGFyaXN0KQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDUKLSNlbmRpZgotCi0jaWZk
ZWYgT1MyCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwNgotIyAgaWZkZWYgTV9JODYKLSAgICAgI2lu
Y2x1ZGUgPG1hbGxvYy5oPgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChNQUNPUykg
fHwgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDcKLSMgIGlm
IGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29z
ICE9IF9fd2luMzJfb3MKLSMgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCi0j
ICBlbHNlCi0jICAgIGlmbmRlZiBmZG9wZW4KLSMgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUp
IE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQot
I2lmZGVmIFRPUFMyMAotIyAgZGVmaW5lIE9TX0NPREUgIDB4MGEKLSNlbmRpZgotCi0jaWZkZWYg
V0lOMzIKLSMgIGlmbmRlZiBfX0NZR1dJTl9fICAvKiBDeWd3aW4gaXMgVW5peCwgbm90IFdpbjMy
ICovCi0jICAgIGRlZmluZSBPU19DT0RFICAweDBiCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZmRl
ZiBfXzUwU0VSSUVTIC8qIFByaW1lL1BSSU1PUyAqLwotIyAgZGVmaW5lIE9TX0NPREUgIDB4MGYK
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfQkVPU18pIHx8IGRlZmluZWQoUklTQ09TKQotIyAgZGVm
aW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCi0jZW5kaWYKLQotI2lm
IChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPiA2MDApKQotIyAgaWYgZGVmaW5lZChf
V0lOMzJfV0NFKQotIyAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVu
KCkgKi8KLSMgICAgaWZuZGVmIF9QVFJESUZGX1RfREVGSU5FRAotICAgICAgIHR5cGVkZWYgaW50
IHB0cmRpZmZfdDsKLSMgICAgICBkZWZpbmUgX1BUUkRJRkZfVF9ERUZJTkVECi0jICAgIGVuZGlm
Ci0jICBlbHNlCi0jICAgIGRlZmluZSBmZG9wZW4oZmQsdHlwZSkgIF9mZG9wZW4oZmQsdHlwZSkK
LSMgIGVuZGlmCi0jZW5kaWYKLQotICAgICAgICAvKiBjb21tb24gZGVmYXVsdHMgKi8KLQotI2lm
bmRlZiBPU19DT0RFCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwMyAgLyogYXNzdW1lIFVuaXggKi8K
LSNlbmRpZgotCi0jaWZuZGVmIEZfT1BFTgotIyAgZGVmaW5lIEZfT1BFTihuYW1lLCBtb2RlKSBm
b3BlbigobmFtZSksIChtb2RlKSkKLSNlbmRpZgotCi0gICAgICAgICAvKiBmdW5jdGlvbnMgKi8K
LQotI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJP
Q19fID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZF
X1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMg
IGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVu
ZGlmCi0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAg
IC8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8p
LAotICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAg
ICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAg
ICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyog
SW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnBy
aW50Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25w
cmludGYpCi0jICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCi0jICAgIGVuZGlmCi0j
ICBlbmRpZgotIyAgaWZkZWYgX19TQVNDCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVu
ZGlmCi0jZW5kaWYKLSNpZmRlZiBWTVMKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChweXIpCi0jICBkZWZpbmUgTk9fTUVNQ1BZCi0jZW5kaWYKLSNpZiBkZWZp
bmVkKFNNQUxMX01FRElVTSkgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fU0Nf
XykKLSAvKiBVc2Ugb3VyIG93biBmdW5jdGlvbnMgZm9yIHNtYWxsIGFuZCBtZWRpdW0gbW9kZWwg
d2l0aCBNU0MgPD0gNS4wLgotICAqIFlvdSBtYXkgaGF2ZSB0byB1c2UgdGhlIHNhbWUgc3RyYXRl
Z3kgZm9yIEJvcmxhbmQgQyAodW50ZXN0ZWQpLgotICAqIFRoZSBfX1NDX18gY2hlY2sgaXMgZm9y
IFN5bWFudGVjLgotICAqLwotIyAgZGVmaW5lIE5PX01FTUNQWQotI2VuZGlmCi0jaWYgZGVmaW5l
ZChTVERDKSAmJiAhZGVmaW5lZChIQVZFX01FTUNQWSkgJiYgIWRlZmluZWQoTk9fTUVNQ1BZKQot
IyAgZGVmaW5lIEhBVkVfTUVNQ1BZCi0jZW5kaWYKLSNpZmRlZiBIQVZFX01FTUNQWQotIyAgaWZk
ZWYgU01BTExfTUVESVVNIC8qIE1TRE9TIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBk
ZWZpbmUgem1lbWNweSBfZm1lbWNweQotIyAgICBkZWZpbmUgem1lbWNtcCBfZm1lbWNtcAotIyAg
ICBkZWZpbmUgem1lbXplcm8oZGVzdCwgbGVuKSBfZm1lbXNldChkZXN0LCAwLCBsZW4pCi0jICBl
bHNlCi0jICAgIGRlZmluZSB6bWVtY3B5IG1lbWNweQotIyAgICBkZWZpbmUgem1lbWNtcCBtZW1j
bXAKLSMgICAgZGVmaW5lIHptZW16ZXJvKGRlc3QsIGxlbikgbWVtc2V0KGRlc3QsIDAsIGxlbikK
LSMgIGVuZGlmCi0jZWxzZQotICAgZXh0ZXJuIHZvaWQgem1lbWNweSAgT0YoKEJ5dGVmKiBkZXN0
LCBjb25zdCBCeXRlZiogc291cmNlLCB1SW50IGxlbikpOwotICAgZXh0ZXJuIGludCAgem1lbWNt
cCAgT0YoKGNvbnN0IEJ5dGVmKiBzMSwgY29uc3QgQnl0ZWYqIHMyLCB1SW50IGxlbikpOwotICAg
ZXh0ZXJuIHZvaWQgem1lbXplcm8gT0YoKEJ5dGVmKiBkZXN0LCB1SW50IGxlbikpOwotI2VuZGlm
Ci0KLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKLSMgIGluY2x1ZGUg
PHN0ZGlvLmg+Ci0gICBleHRlcm4gaW50IHpfdmVyYm9zZTsKLSAgIGV4dGVybiB2b2lkIHpfZXJy
b3IgICAgT0YoKGNoYXIgKm0pKTsKLSMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpIHtpZighKGNv
bmQpKSB6X2Vycm9yKG1zZyk7fQotIyAgZGVmaW5lIFRyYWNlKHgpIHtpZiAoel92ZXJib3NlPj0w
KSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZXYoeCkge2lmICh6X3ZlcmJvc2U+MCkgZnBy
aW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHpfdmVyYm9zZT4xKSBmcHJpbnRm
IHggO30KLSMgIGRlZmluZSBUcmFjZWMoYyx4KSB7aWYgKHpfdmVyYm9zZT4wICYmIChjKSkgZnBy
aW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAoel92ZXJib3NlPjEgJiYgKGMp
KSBmcHJpbnRmIHggO30KLSNlbHNlCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQotIyAgZGVm
aW5lIFRyYWNlKHgpCi0jICBkZWZpbmUgVHJhY2V2KHgpCi0jICBkZWZpbmUgVHJhY2V2dih4KQot
IyAgZGVmaW5lIFRyYWNlYyhjLHgpCi0jICBkZWZpbmUgVHJhY2VjdihjLHgpCi0jZW5kaWYKLQot
Ci12b2lkcGYgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2ln
bmVkIHNpemUpKTsKLXZvaWQgICB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRy
KSk7Ci0KLSNkZWZpbmUgWkFMTE9DKHN0cm0sIGl0ZW1zLCBzaXplKSBcCi0gICAgICAgICAgICgq
KChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKLSNkZWZp
bmUgWkZSRUUoc3RybSwgYWRkcikgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwg
KHZvaWRwZikoYWRkcikpCi0jZGVmaW5lIFRSWV9GUkVFKHMsIHApIHtpZiAocCkgWkZSRUUocywg
cCk7fQotCi0jZW5kaWYgLyogWlVUSUxfSCAqLwo=
</data>
<flag name="review"
          id="29653"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>