<?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>15821</bug_id>
          
          <creation_ts>2007-11-03 16:39:37 -0700</creation_ts>
          <short_desc>remove unused PCRE features for speed</short_desc>
          <delta_ts>2007-11-03 22:37:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60198</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-03 16:39:37 -0700</bug_when>
    <thetext>I think it&apos;s time for our PCRE to officially fork from the original version.

Up until this point we&apos;ve tried to keep it in a state where we can easily merge, but we haven&apos;t merged often and there aren&apos;t a lot of improvements in the newer versions that we want.

If we remove the features we don&apos;t use at all we should be able to get some speed-up without even making any real changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60201</commentid>
    <comment_count>1</comment_count>
      <attachid>17026</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-03 17:10:26 -0700</bug_when>
    <thetext>Created attachment 17026
patch (all regression tests pass)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60209</commentid>
    <comment_count>2</comment_count>
      <attachid>17026</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-03 19:40:02 -0700</bug_when>
    <thetext>Comment on attachment 17026
patch (all regression tests pass)

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17026</attachid>
            <date>2007-11-03 17:10:26 -0700</date>
            <delta_ts>2007-11-03 19:40:02 -0700</delta_ts>
            <desc>patch (all regression tests pass)</desc>
            <filename>PCREDietPatch.txt</filename>
            <type>text/plain</type>
            <size>294326</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBACisyMDA3LTExLTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1ODIxCisgICAgICAgICAgcmVtb3ZlIHVudXNlZCBQQ1JFIGZlYXR1cmVzIGZvciBzcGVlZAor
CisgICAgICAgIEEgZmlyc3Qgc3RlcCB0b3dhcmQgcmVtb3ZpbmcgdGhlIFBDUkUgZmVhdHVyZXMg
d2UgZG9uJ3QgdXNlLgorICAgICAgICBUaGlzIGdpdmVzIGEgMC44JSBzcGVlZHVwIG9uIFN1blNw
aWRlciwgYW5kIGEgNi41JSBzcGVlZHVwIG9uCisgICAgICAgIHRoZSBTdW5TcGlkZXIgcmVndWxh
ciBleHByZXNzaW9uIHRlc3QuCisKKyAgICAgICAgUmVwbGFjZWQgdGhlIHB1YmxpYyBpbnRlcmZh
Y2Ugd2l0aCBvbmUgdGhhdCBkb2Vzbid0IHVzZSB0aGUKKyAgICAgICAgbmFtZSBQQ1JFLiBSZW1v
dmVkIGNvZGUgd2UgZG9uJ3QgbmVlZCBmb3IgSmF2YVNjcmlwdCBhbmQgdmFyaW91cworICAgICAg
ICBjb25maWd1cmF0aW9ucyB3ZSBkb24ndCB1c2UuIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9y
IHN0aWxsCisgICAgICAgIG1vcmUgY2hhbmdlcyBpbiB0aGUgZnV0dXJlLiBXZSdsbCBwcm9iYWJs
eSBzd2l0Y2ggdG8gQysrIGFuZAorICAgICAgICBtYWtlIHNvbWUgZXZlbiBtb3JlIHNpZ25pZmlj
YW50IGNoYW5nZXMgdG8gdGhlIHJlZ2V4cCBlbmdpbmUKKyAgICAgICAgdG8gZ2V0IHNvbWUgYWRk
aXRpb25hbCBzcGVlZC4KKworICAgICAgICBUaGVyZSdzIHByb2JhYmx5IGFkZGl0aW9uYWwgdW51
c2VkIHN0dWZmIHRoYXQgSSBoYXZlbid0CisgICAgICAgIGRlbGV0ZWQgeWV0LgorCisgICAgICAg
IFRoaXMgZG9lcyBtZWFuIHRoYXQgb3VyIFBDUkUgaXMgbm93IGEgZm9yaywgYnV0IEkgdGhpbmsg
dGhhdCdzCisgICAgICAgIG5vdCByZWFsbHkgYSBiaWcgZGVhbC4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLmV4cDogUmVtb3ZlIHRoZSA1IG9sZCBlbnRyeSBwb2ludHMgYW5kIGFkZAorICAg
ICAgICB0aGUgMyBuZXcgZW50cnkgcG9pbnRzIGZvciBXZWJDb3JlJ3MgZGlyZWN0IHVzZSBvZiB0
aGUgcmVndWxhcgorICAgICAgICBleHByZXNzaW9uIGVuZ2luZS4KKworICAgICAgICAqIGtqcy9j
b25maWcuaDogUmVtb3ZlIHRoZSBVU0UoUENSRTE2KSBkZWZpbmUuIEkgZGVjaWRlZCB0byBmbGlw
CisgICAgICAgIGl0cyBzZW5zZSBhbmQgbm93IHRoZXJlJ3MgYSBVU0UoUE9TSVhfUkVHRVgpIGlu
c3RlYWQsIHdoaWNoIHNob3VsZAorICAgICAgICBwcm9iYWJseSBub3QgYmUgc2V0IGJ5IGFueW9u
ZS4gTWF5YmUgbGF0ZXIgd2UnbGwganVzdCBnZXQgcmlkIG9mIGl0CisgICAgICAgIGFsdG9nZXRo
ZXIuCisKKyAgICAgICAgKiBranMvcmVnZXhwLmg6CisgICAgICAgICoga2pzL3JlZ2V4cC5jcHA6
CisgICAgICAgIChLSlM6OlJlZ0V4cDo6UmVnRXhwKTogU3dpdGNoIHRvIG5ldyBqc1JlZ0V4cCBm
dW5jdGlvbiBuYW1lcyBhbmQKKyAgICAgICAgZGVmaW5lcy4gQ3V0IGRvd24gb24gdGhlIG51bWJl
ciBvZiBmdW5jdGlvbnMgdXNlZC4KKyAgICAgICAgKEtKUzo6UmVnRXhwOjp+UmVnRXhwKTogRGl0
dG8uCisgICAgICAgIChLSlM6OlJlZ0V4cDo6bWF0Y2gpOiBEaXR0by4KKworICAgICAgICAqIHBj
cmUvZGZ0YWJsZXMuYzogKG1haW4pOiBHZXQgcmlkIG9mIGN0eXBlX2xldHRlciBhbmQgY3R5cGVf
bWV0YSwKKyAgICAgICAgd2hpY2ggYXJlIHVudXNlZC4KKworICAgICAgICAqIHBjcmUvcGNyZS1j
b25maWcuaDogR2V0IHJpZCBvZiBFQkNJRElDLCBQQ1JFX0RBVEFfU0NPUEUsIGNvbnN0LAorICAg
ICAgICBzaXplX3QsIEhBVkVfU1RSRVJST1IsIEhBVkVfTUVNTU9WRSwgSEFWRV9CQ09QWSwgTkVX
TElORSwKKyAgICAgICAgUE9TSVhfTUFMTE9DX1RIUkVTSE9MRCwgTk9fUkVDVVJTRSwgU1VQUE9S
VF9VQ1AsIFNVUFBPUlRfVVRGOCwKKyAgICAgICAgYW5kIEpBVkFTQ1JJUFQuIFRoZXNlIGFyZSBh
bGwgbm8gbG9uZ2VyIGNvbmZpZ3VyYWJsZSBpbiBvdXIgY29weQorICAgICAgICBvZiB0aGUgbGli
cmFyeS4KKworICAgICAgICAqIHBjcmUvcGNyZS5oOiBSZW1vdmUgdGhlIG1hY3JvLWJhc2VkIGtq
cyBwcmVmaXggaGFjaywgdGhlIFBDUkUKKyAgICAgICAgdmVyc2lvbiBtYWNyb3MsIFBDUkVfVVRG
MTYsIHRoZSBjb2RlIHRvIHNldCB1cCBQQ1JFX0RBVEFfU0NPUEUsCisgICAgICAgIHRoZSBpbmNs
dWRlIG9mIDxzdGRsaWIuaD4sIGFuZCBtb3N0IG9mIHRoZSBjb25zdGFudHMgYW5kCisgICAgICAg
IGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgaGVhZGVyLiBDaGFuZ2VkIHRoZSBuYW1pbmcgc2No
ZW1lIHRvCisgICAgICAgIHVzZSBhIEpTUmVnRXhwIHByZWZpeCByYXRoZXIgdGhhbiBhIHBjcmUg
cHJlZml4LiBJbiB0aGUgZnV0dXJlLAorICAgICAgICB3ZSdsbCBwcm9iYWJseSBjaGFuZ2UgdGhp
cyB0byBiZSBhIEMrKyBoZWFkZXIuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfY29tcGlsZS5jOiBS
ZW1vdmVkIGFsbCB1bnVzZWQgY29kZSBicmFuY2hlcywKKyAgICAgICAgaW5jbHVkaW5nIG1hbnkg
d2hvbGUgZnVuY3Rpb25zIGFuZCB2YXJpb3VzIGJ5dGUgY29kZXMuCisgICAgICAgIEtlcHQgY2hh
bmdlcyBvdXRzaWRlIG9mIHJlbW92YWwgdG8gYSBtaW5pbXVtLgorICAgICAgICAoY2hlY2tfZXNj
YXBlKToKKyAgICAgICAgKGZpcnN0X3NpZ25pZmljYW50X2NvZGUpOgorICAgICAgICAoZmluZF9m
aXhlZGxlbmd0aCk6CisgICAgICAgIChmaW5kX3JlY3Vyc2UpOgorICAgICAgICAoY291bGRfYmVf
ZW1wdHlfYnJhbmNoKToKKyAgICAgICAgKGNvbXBpbGVfYnJhbmNoKToKKyAgICAgICAgKGNvbXBp
bGVfcmVnZXgpOgorICAgICAgICAoaXNfYW5jaG9yZWQpOgorICAgICAgICAoaXNfc3RhcnRsaW5l
KToKKyAgICAgICAgKGZpbmRfZmlyc3Rhc3NlcnRlZGNoYXIpOgorICAgICAgICAoanNSZWdFeHBD
b21waWxlKTogUmVuYW1lZCBmcm9tIHBjcmVfY29tcGlsZTIgYW5kIGNoYW5nZWQgdGhlCisgICAg
ICAgIHBhcmFtZXRlcnMgYXJvdW5kIGEgYml0LgorICAgICAgICAoanNSZWdFeHBGcmVlKTogQWRk
ZWQuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jOiBSZW1vdmVkIG1hbnkgdW51c2VkIG9w
Y29kZXMgYW5kIHZhcmlhYmxlcy4KKyAgICAgICAgQWxzbyBzdGFydGVkIHRlYXJpbmcgZG93biB0
aGUgTk9fUkVDVVJTRSBtZWNoYW5pc20gc2luY2UgaXQncworICAgICAgICBub3cgdGhlIGRlZmF1
bHQuIEluIHNvbWUgY2FzZXMgdGhlcmUgd2VyZSB0aGluZ3MgaW4gdGhlIGV4cGxpY2l0CisgICAg
ICAgIGZyYW1lIHRoYXQgY291bGQgYmUgdHVybmVkIGludG8gcGxhaW4gb2xkIGxvY2FsIHZhcmlh
YmxlcyBhbmQKKyAgICAgICAgb3RoZXIgc21hbGwgbGlrZSBvcHRpbWl6YXRpb25zLgorICAgICAg
ICAocGNoYXJzKToKKyAgICAgICAgKG1hdGNoX3JlZik6CisgICAgICAgIChtYXRjaCk6IENoYW5n
ZWQgcGFyYW1ldGVycyBxdWl0ZSBhIGJpdCBzaW5jZSBpdCdzIG5vdyBub3QgdXNlZAorICAgICAg
ICByZWN1cnNpdmVseS4KKyAgICAgICAgKGpzUmVnRXhwRXhlY3V0ZSk6IFJlbmFtZWQgZnJvbSBw
Y3JlX2V4ZWMuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfaW50ZXJuYWwuaDogR2V0IHJpZCBvZiBQ
Q1JFX0RFRklOSVRJT04sIFBDUkVfU1BUUiwKKyAgICAgICAgUENSRV9JTVMsIFBDUkVfSUNIQU5H
RUQsIFBDUkVfTk9QQVJUSUFMLCBQQ1JFX1NUVURZX01BUFBFRCwKKyAgICAgICAgUFVCTElDX09Q
VElPTlMsIFBVQkxJQ19FWEVDX09QVElPTlMsIFBVQkxJQ19ERkFfRVhFQ19PUFRJT05TLAorICAg
ICAgICBQVUJMSUNfU1RVRFlfT1BUSU9OUywgTUFHSUNfTlVNQkVSLCAxNiBvZiB0aGUgb3Bjb2Rl
cywKKyAgICAgICAgX3BjcmVfdXR0LCBfcGNyZV91dHRfc2l6ZSwgX3BjcmVfdHJ5X2ZsaXBwZWQs
IF9wY3JlX3VjcF9maW5kcHJvcCwKKyAgICAgICAgYW5kIF9wY3JlX3ZhbGlkX3V0ZjguIEFsc28g
bW92ZWQgcGNyZV9tYWxsb2MgYW5kIHBjcmVfZnJlZSBoZXJlLgorCisgICAgICAgICogcGNyZS9w
Y3JlX21ha2V0YWJsZXMuYzogQ2hhbmdlZCB0byBvbmx5IGNvbXBpbGUgaW4gZGZ0YWJsZXMuCisg
ICAgICAgIEFsc28gZ290IHJpZCBvZiBtYW55IG9mIHRoZSB0YWJsZXMgdGhhdCB3ZSBkb24ndCB1
c2UuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfdGFibGVzLmM6IFJlbW92ZWQgdGhlIHVudXNlZCBV
bmljb2RlIHByb3BlcnR5IHRhYmxlcy4KKworICAgICAgICAqIHBjcmUvcGNyZV91Y3Bfc2VhcmNo
ZnVuY3MuYzogUmVtb3ZlZCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IKKyAgICAgICAgX3BjcmVfdWNw
X290aGVyY2FzZS4KKworICAgICAgICAqIHBjcmUvcGNyZV94Y2xhc3MuYzogKF9wY3JlX3hjbGFz
cyk6IFJlbW92ZWQgdW5lZWRlZCBzdXBwb3J0CisgICAgICAgIGZvciBjbGFzc2VzIGJhc2VkIG9u
IFVuaWNvZGUgcHJvcGVydGllcy4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jUENSRS5jcHA6
IFJlbW92ZWQgdW51c2VkIGJpdHMuIEl0IHdvdWxkIGJlIGdvb2QKKyAgICAgICAgdG8gZWxpbWlu
YXRlIHRoaXMgY29tcGxldGVseSwgYnV0IHdlIG5lZWQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgor
ICAgICAgICBjb2RlIHRvIGJlIEMrKyBmaXJzdC4KKworICAgICAgICAqIHBjcmUvcGNyZV9mdWxs
aW5mby5jOgorICAgICAgICAqIHBjcmUvcGNyZV9nZXQuYzoKKyAgICAgICAgKiBwY3JlL3VjcC5o
OgorICAgICAgICBGaWxlcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLiBJIGRpZG4ndCByZW1v
dmUgdGhlbSB3aXRoIHRoaXMKKyAgICAgICAgY2hlY2staW4sIGJlY2F1c2UgSSBkaWRuJ3Qgd2Fu
dCB0byBtb2RpZnkgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgorCiAyMDA3LTExLTAzICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDI3NDExKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTIg
KzI4MywxMCBAQCBfX1pUVk4zS0pTMTRTdHJpbmdJbnN0YW5jZUUKIF9fWlRWTjNLSlMxNUpTV3Jh
cHBlck9iamVjdEUKIF9fWlRWTjNLSlMxOUludGVybmFsRnVuY3Rpb25JbXBFCiBfX1pUVk4zS0pT
OEpTT2JqZWN0RQorX2pzUmVnRXhwQ29tcGlsZQorX2pzUmVnRXhwRXhlY3V0ZQorX2pzUmVnRXhw
RnJlZQogX2pzY29yZV9jb2xsZWN0b3JfaW50cm9zcGVjdGlvbgogX2pzY29yZV9mYXN0bWFsbG9j
X2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0eQotX2tqc19wY3JlX2NvbXBp
bGUKLV9ranNfcGNyZV9leGVjCi1fa2pzX3BjcmVfZnJlZQotX2tqc19wY3JlX2ZyZWVfc3Vic3Ry
aW5nCi1fa2pzX3BjcmVfZ2V0X3N1YnN0cmluZwogX2tqc19zdHJ0b2QKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29u
ZmlnLmgJKHJldmlzaW9uIDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBACiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9OUF9I
IDEKICNlbmRpZgogCi0jZGVmaW5lIFdURl9VU0VfUENSRTE2IDEKLQogLyogRklYTUU6IGlmIGFs
bCBwbGF0Zm9ybXMgaGF2ZSB0aGVzZSwgZG8gdGhleSByZWFsbHkgbmVlZCAjZGVmaW5lcz8gKi8K
ICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3JlZ2V4cC5jcHAJKHJldmlzaW9uIDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUva2pz
L3JlZ2V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDI3ICszMywyMyBAQCBuYW1lc3BhY2Ug
S0pTIHsKIFJlZ0V4cDo6UmVnRXhwKGNvbnN0IFVTdHJpbmcgJnAsIGludCBmbGFncykKICAgOiBt
X2ZsYWdzKGZsYWdzKSwgbV9jb25zdHJ1Y3Rpb25FcnJvcigwKSwgbV9udW1TdWJQYXR0ZXJucygw
KQogewotI2lmIFVTRShQQ1JFMTYpCisjaWYgIVVTRShQT1NJWF9SRUdFWCkKIAotICBpbnQgb3B0
aW9ucyA9IFBDUkVfVVRGODsKKyAgaW50IG9wdGlvbnMgPSAwOwogICBpZiAoZmxhZ3MgJiBJZ25v
cmVDYXNlKQotICAgIG9wdGlvbnMgfD0gUENSRV9DQVNFTEVTUzsKKyAgICBvcHRpb25zIHw9IEpT
X1JFR0VYUF9DQVNFTEVTUzsKICAgaWYgKGZsYWdzICYgTXVsdGlsaW5lKQotICAgIG9wdGlvbnMg
fD0gUENSRV9NVUxUSUxJTkU7CisgICAgb3B0aW9ucyB8PSBKU19SRUdFWFBfTVVMVElMSU5FOwog
CiAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZTsKLSAgaW50IGVycm9yT2Zmc2V0OwotICBtX3Jl
Z2V4ID0gcGNyZV9jb21waWxlMihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4ocC5k
YXRhKCkpLCBwLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywgTlVM
TCwgJmVycm9yTWVzc2FnZSwgJmVycm9yT2Zmc2V0LCBOVUxMKTsKKyAgbV9yZWdleCA9IGpzUmVn
RXhwQ29tcGlsZShyZWludGVycHJldF9jYXN0PGNvbnN0IEpTUmVnRXhwQ2hhcio+KHAuZGF0YSgp
KSwgcC5zaXplKCksIG9wdGlvbnMsCisgICAgJm1fbnVtU3ViUGF0dGVybnMsICZlcnJvck1lc3Nh
Z2UpOwogICBpZiAoIW1fcmVnZXgpIHsKICAgICBtX2NvbnN0cnVjdGlvbkVycm9yID0gc3RyZHVw
KGVycm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgLy8gR2V0IG51bWJlciBvZiBz
dWJwYXR0ZXJucyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuCi0gIHBjcmVfZnVsbGluZm8obV9yZWdl
eCwgTlVMTCwgUENSRV9JTkZPX0NBUFRVUkVDT1VOVCwgJm1fbnVtU3ViUGF0dGVybnMpOwotCi0j
ZWxzZSAvKiBVU0UoUENSRTE2KSAqLworI2Vsc2UgLyogVVNFKFBPU0lYX1JFR0VYKSAqLwogCiAg
IGludCByZWdmbGFncyA9IDA7CiAjaWZkZWYgUkVHX0VYVEVOREVECkBAIC04Myw4ICs3OSw4IEBA
IFJlZ0V4cDo6UmVnRXhwKGNvbnN0IFVTdHJpbmcgJnAsIGludCBmbGEKIAogUmVnRXhwOjp+UmVn
RXhwKCkKIHsKLSNpZiBVU0UoUENSRTE2KQotICBwY3JlX2ZyZWUobV9yZWdleCk7CisjaWYgIVVT
RShQT1NJWF9SRUdFWCkKKyAganNSZWdFeHBGcmVlKG1fcmVnZXgpOwogI2Vsc2UKICAgLyogVE9E
TzogaXMgdGhpcyByZWFsbHkgb2theSBhZnRlciBhbiBlcnJvciA/ICovCiAgIHJlZ2ZyZWUoJm1f
cmVnZXgpOwpAQCAtMTAyLDcgKzk4LDcgQEAgaW50IFJlZ0V4cDo6bWF0Y2goY29uc3QgVVN0cmlu
ZyYgcywgaW50IAogICBpZiAoaSA+IHMuc2l6ZSgpIHx8IHMuaXNOdWxsKCkpCiAgICAgcmV0dXJu
IC0xOwogCi0jaWYgVVNFKFBDUkUxNikKKyNpZiAhVVNFKFBPU0lYX1JFR0VYKQogCiAgIGlmICgh
bV9yZWdleCkKICAgICByZXR1cm4gLTE7CkBAIC0xMjEsMTEgKzExNywxMSBAQCBpbnQgUmVnRXhw
OjptYXRjaChjb25zdCBVU3RyaW5nJiBzLCBpbnQgCiAgICAgb3ZlY3Rvci0+c2V0KG9mZnNldFZl
Y3Rvcik7CiAgIH0KIAotICBpbnQgbnVtTWF0Y2hlcyA9IHBjcmVfZXhlYyhtX3JlZ2V4LCBOVUxM
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHMuZGF0YSgpKSwgcy5zaXplKCks
IGksIDAsIG9mZnNldFZlY3Rvciwgb2Zmc2V0VmVjdG9yU2l6ZSk7CisgIGludCBudW1NYXRjaGVz
ID0ganNSZWdFeHBFeGVjdXRlKG1fcmVnZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSlNSZWdF
eHBDaGFyKj4ocy5kYXRhKCkpLCBzLnNpemUoKSwgaSwgb2Zmc2V0VmVjdG9yLCBvZmZzZXRWZWN0
b3JTaXplKTsKIAogICBpZiAobnVtTWF0Y2hlcyA8IDApIHsKICNpZm5kZWYgTkRFQlVHCi0gICAg
aWYgKG51bU1hdGNoZXMgIT0gUENSRV9FUlJPUl9OT01BVENIKQorICAgIGlmIChudW1NYXRjaGVz
ICE9IEpTX1JFR0VYUF9FUlJPUl9OT01BVENIKQogICAgICAgZnByaW50ZihzdGRlcnIsICJLSlM6
IHBjcmVfZXhlYygpIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwgbnVtTWF0Y2hlcyk7CiAjZW5k
aWYKICAgICBpZiAob3ZlY3RvcikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwLmgJKHJldmlzaW9uIDI3NDEx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3
ICsyNCw3IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2lmIFVTRShQQ1JFMTYpCisj
aWYgIVVTRShQT1NJWF9SRUdFWCkKICNpbmNsdWRlIDxwY3JlLmg+CiAjZWxzZQogLy8gUE9TSVgg
cmVnZXggLSBub3Qgc28gZ29vZC4KQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdW5zaWduZWQgc3ViUGF0dGVybnMoKSBjb25zdCB7IHJldHVybiBtX251bVN1YlBhdHRlcm5z
OyB9CiAKICAgcHJpdmF0ZToKLSNpZiBVU0UoUENSRTE2KQotICAgIHBjcmUqIG1fcmVnZXg7Cisj
aWYgIVVTRShQT1NJWF9SRUdFWCkKKyAgICBKU1JlZ0V4cCogbV9yZWdleDsKICNlbHNlCiAgICAg
cmVnZXhfdCBtX3JlZ2V4OwogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFi
bGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9kZnRhYmxlcy5jCShyZXZp
c2lvbiAyNzQxMSkKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvZGZ0YWJsZXMuYwkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDEzICsxMzMsMTAgQEAgZnByaW50ZihmLCAiLFxuXG4iKTsKIGZwcmludGYo
ZiwKICAgIi8qIFRoaXMgdGFibGUgaWRlbnRpZmllcyB2YXJpb3VzIGNsYXNzZXMgb2YgY2hhcmFj
dGVyIGJ5IGluZGl2aWR1YWwgYml0czpcbiIKICAgIiAgMHglMDJ4ICAgd2hpdGUgc3BhY2UgY2hh
cmFjdGVyXG4iCi0gICIgIDB4JTAyeCAgIGxldHRlclxuIgogICAiICAweCUwMnggICBkZWNpbWFs
IGRpZ2l0XG4iCiAgICIgIDB4JTAyeCAgIGhleGFkZWNpbWFsIGRpZ2l0XG4iCi0gICIgIDB4JTAy
eCAgIGFscGhhbnVtZXJpYyBvciAnXydcbiIKLSAgIiAgMHglMDJ4ICAgcmVndWxhciBleHByZXNz
aW9uIG1ldGFjaGFyYWN0ZXIgb3IgYmluYXJ5IHplcm9cbiovXG5cbiIsCi0gIGN0eXBlX3NwYWNl
LCBjdHlwZV9sZXR0ZXIsIGN0eXBlX2RpZ2l0LCBjdHlwZV94ZGlnaXQsIGN0eXBlX3dvcmQsCi0g
IGN0eXBlX21ldGEpOworICAiICAweCUwMnggICBhbHBoYW51bWVyaWMgb3IgJ18nXG4qL1xuXG4i
LAorICBjdHlwZV9zcGFjZSwgY3R5cGVfZGlnaXQsIGN0eXBlX3hkaWdpdCwgY3R5cGVfd29yZCk7
CiAKIGZwcmludGYoZiwgIiAgIik7CiBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9wY3JlL3BjcmUtY29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcGNyZS9wY3JlLWNvbmZpZy5oCShyZXZpc2lvbiAyNzQxMSkKKysrIEphdmFTY3JpcHRD
b3JlL3BjcmUvcGNyZS1jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSwzIEBACi0K
LS8qIE9uIFVuaXgtbGlrZSBzeXN0ZW1zIGNvbmZpZy5pbiBpcyBjb252ZXJ0ZWQgYnkgImNvbmZp
Z3VyZSIgaW50byBjb25maWcuaC4KLVNvbWUgb3RoZXIgZW52aXJvbm1lbnRzIGFsc28gc3VwcG9y
dCB0aGUgdXNlIG9mICJjb25maWd1cmUiLiBQQ1JFIGlzIHdyaXR0ZW4gaW4KLVN0YW5kYXJkIEMs
IGJ1dCB0aGVyZSBhcmUgYSBmZXcgbm9uLXN0YW5kYXJkIHRoaW5ncyBpdCBjYW4gY29wZSB3aXRo
LCBhbGxvd2luZwotaXQgdG8gcnVuIG9uIFN1bk9TNCBhbmQgb3RoZXIgImNsb3NlIHRvIHN0YW5k
YXJkIiBzeXN0ZW1zLgotCi1PbiBhIG5vbi1Vbml4LWxpa2Ugc3lzdGVtIHlvdSBzaG91bGQganVz
dCBjb3B5IHRoaXMgZmlsZSBpbnRvIGNvbmZpZy5oLCBhbmQgc2V0Ci11cCB0aGUgbWFjcm9zIHRo
ZSB3YXkgeW91IG5lZWQgdGhlbS4gWW91IHNob3VsZCBub3JtYWxseSBjaGFuZ2UgdGhlIGRlZmlu
aXRpb25zCi1vZiBIQVZFX1NUUkVSUk9SIGFuZCBIQVZFX01FTU1PVkUgdG8gMS4gVW5mb3J0dW5h
dGVseSwgYmVjYXVzZSBvZiB0aGUgd2F5Ci1hdXRvY29uZiB3b3JrcywgdGhlc2UgY2Fubm90IGJl
IG1hZGUgdGhlIGRlZmF1bHRzLiBJZiB5b3VyIHN5c3RlbSBoYXMgYmNvcHkoKQotYW5kIG5vdCBt
ZW1tb3ZlKCksIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBIQVZFX0JDT1BZIGluc3RlYWQgb2Yg
SEFWRV9NRU1NT1ZFLgotSWYgeW91ciBzeXN0ZW0gaGFzIG5laXRoZXIgYmNvcHkoKSBub3IgbWVt
bW92ZSgpLCBsZWF2ZSB0aGVtIGJvdGggYXMgMDsgYW4KLWVtdWxhdGlvbiBmdW5jdGlvbiB3aWxs
IGJlIHVzZWQuICovCi0KLS8qIElmIHlvdSBhcmUgY29tcGlsaW5nIGZvciBhIHN5c3RlbSB0aGF0
IHVzZXMgRUJDRElDIGluc3RlYWQgb2YgQVNDSUkKLWNoYXJhY3RlciBjb2RlcywgZGVmaW5lIHRo
aXMgbWFjcm8gYXMgMS4gT24gc3lzdGVtcyB0aGF0IGNhbiB1c2UgImNvbmZpZ3VyZSIsCi10aGlz
IGNhbiBiZSBkb25lIHZpYSAtLWVuYWJsZS1lYmNkaWMuICovCi0KLSNpZm5kZWYgRUJDRElDCi0j
ZGVmaW5lIEVCQ0RJQyAwCi0jZW5kaWYKLQotLyogSWYgeW91IGFyZSBjb21waWxpbmcgZm9yIGEg
c3lzdGVtIG90aGVyIHRoYW4gYSBVbml4LWxpa2Ugc3lzdGVtIG9yIFdpbjMyLAotYW5kIGl0IG5l
ZWRzIHNvbWUgbWFnaWMgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBkZWZpbml0aW9uIG9mIGEg
ZnVuY3Rpb24gdGhhdAotaXMgZXhwb3J0ZWQgYnkgdGhlIGxpYnJhcnksIGRlZmluZSB0aGlzIG1h
Y3JvIHRvIGNvbnRhaW4gdGhlIHJlbGV2YW50IG1hZ2ljLiBJZgoteW91IGRvIG5vdCBkZWZpbmUg
dGhpcyBtYWNybywgaXQgZGVmYXVsdHMgdG8gImV4dGVybiIgZm9yIGEgQyBjb21waWxlciBhbmQK
LSJleHRlcm4gQyIgZm9yIGEgQysrIGNvbXBpbGVyIG9uIG5vbi1XaW4zMiBzeXN0ZW1zLiBUaGlz
IG1hY3JvIGFwZWFycyBhdCB0aGUKLXN0YXJ0IG9mIGV2ZXJ5IGV4cG9ydGVkIGZ1bmN0aW9uIHRo
YXQgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBJdCBkb2VzIG5vdAotYXBwZWFyIG9uIGZ1
bmN0aW9ucyB0aGF0IGFyZSAiZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLCBidXQgd2hpY2ggYXJl
IGludGVybmFsCi10byB0aGUgbGlicmFyeS4gKi8KLQotI2RlZmluZSBQQ1JFX0RBVEFfU0NPUEUg
ZXh0ZXJuCi0KLS8qIERlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIGVtcHR5IGlmIHRoZSAi
Y29uc3QiIGtleXdvcmQgZG9lcyBub3Qgd29yay4gKi8KLQotI3VuZGVmIGNvbnN0Ci0KLS8qIERl
ZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvICJ1bnNpZ25lZCIgaWYgPHN0ZGRlZi5oPiBkb2Vz
IG5vdCBkZWZpbmUKLXNpemVfdC4gKi8KLQotI3VuZGVmIHNpemVfdAotCi0vKiBUaGUgZm9sbG93
aW5nIHR3byBkZWZpbml0aW9ucyBhcmUgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBTdW5PUzQs
IHdoaWNoCi1kb2VzIG5vdCBoYXZlIHRoZSBzdHJlcnJvcigpIG9yIG1lbW1vdmUoKSBmdW5jdGlv
bnMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBpbgotYWxsIFN0YW5kYXJkIEMgbGlicmFyaWVzLiBU
aGUgbWFjcm9zIEhBVkVfU1RSRVJST1IgYW5kIEhBVkVfTUVNTU9WRSBzaG91bGQKLW5vcm1hbGx5
IGJlIGRlZmluZWQgd2l0aCB0aGUgdmFsdWUgMSBmb3Igb3RoZXIgc3lzdGVtcywgYnV0IHVuZm9y
dHVuYXRlbHkgd2UKLWNhbm5vdCBtYWtlIHRoaXMgdGhlIGRlZmF1bHQgYmVjYXVzZSAiY29uZmln
dXJlIiBmaWxlcyBnZW5lcmF0ZWQgYnkgYXV0b2NvbmYKLXdpbGwgb25seSBjaGFuZ2UgMCB0byAx
OyB0aGV5IHdvbid0IGNoYW5nZSAxIHRvIDAgaWYgdGhlIGZ1bmN0aW9ucyBhcmUgbm90Ci1mb3Vu
ZC4gKi8KLQotI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKLSNkZWZpbmUgSEFWRV9NRU1NT1ZFICAx
Ci0KLS8qIFRoZXJlIGFyZSBzb21lIG5vbi1Vbml4LWxpa2Ugc3lzdGVtcyB0aGF0IGRvbid0IGV2
ZW4gaGF2ZSBiY29weSgpLiBJZiB0aGlzCi1tYWNybyBpcyBmYWxzZSwgYW4gZW11bGF0aW9uIGlz
IHVzZWQuIElmIEhBVkVfTUVNTU9WRSBpcyBzZXQgdG8gMSwgdGhlIHZhbHVlIG9mCi1IQVZFX0JD
T1BZIGlzIG5vdCByZWxldmFudC4gKi8KLQotI2RlZmluZSBIQVZFX0JDT1BZICAgIDAKLQotLyog
VGhlIHZhbHVlIG9mIE5FV0xJTkUgZGV0ZXJtaW5lcyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIuIFRo
ZSBkZWZhdWx0IGlzIHRvCi1sZWF2ZSBpdCB1cCB0byB0aGUgY29tcGlsZXIsIGJ1dCBzb21lIHNp
dGVzIHdhbnQgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyIHZhbHVlLgotT24gVW5peC1saWtlIHN5c3Rl
bXMsICJjb25maWd1cmUiIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4gKi8K
LQotI2lmbmRlZiBORVdMSU5FCi0jZGVmaW5lIE5FV0xJTkUgJ1xuJwotI2VuZGlmCi0KIC8qIFRo
ZSB2YWx1ZSBvZiBMSU5LX1NJWkUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQg
dG8gc3RvcmUgbGlua3MgYXMKIG9mZnNldHMgd2l0aGluIHRoZSBjb21waWxlZCByZWdleC4gVGhl
IGRlZmF1bHQgaXMgMiwgd2hpY2ggYWxsb3dzIGZvciBjb21waWxlZAogcGF0dGVybnMgdXAgdG8g
NjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLiBIb3dldmVy
LCBQQ1JFCkBAIC03MiwzMiArNSw3IEBAIGNhbiBhbHNvIGJlIGNvbXBpbGVkIHRvIHVzZSAzIG9y
IDQgYnl0ZXMKIHBhdHRlcm5zIGluIGV4dHJlbWUgY2FzZXMuIE9uIHN5c3RlbXMgdGhhdCBzdXBw
b3J0IGl0LCAiY29uZmlndXJlIiBjYW4gYmUgdXNlZAogdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0
LiAqLwogCi0jaWZuZGVmIExJTktfU0laRQogI2RlZmluZSBMSU5LX1NJWkUgICAyCi0jZW5kaWYK
LQotLyogV2hlbiBjYWxsaW5nIFBDUkUgdmlhIHRoZSBQT1NJWCBpbnRlcmZhY2UsIGFkZGl0aW9u
YWwgd29ya2luZyBzdG9yYWdlIGlzCi1yZXF1aXJlZCBmb3IgaG9sZGluZyB0aGUgcG9pbnRlcnMg
dG8gY2FwdHVyaW5nIHN1YnN0cmluZ3MgYmVjYXVzZSBQQ1JFIHJlcXVpcmVzCi10aHJlZSBpbnRl
Z2VycyBwZXIgc3Vic3RyaW5nLCB3aGVyZWFzIHRoZSBQT1NJWCBpbnRlcmZhY2UgcHJvdmlkZXMg
b25seSB0d28uIElmCi10aGUgbnVtYmVyIG9mIGV4cGVjdGVkIHN1YnN0cmluZ3MgaXMgc21hbGws
IHRoZSB3cmFwcGVyIGZ1bmN0aW9uIHVzZXMgc3BhY2Ugb24KLXRoZSBzdGFjaywgYmVjYXVzZSB0
aGlzIGlzIGZhc3RlciB0aGFuIHVzaW5nIG1hbGxvYygpIGZvciBlYWNoIGNhbGwuIFRoZQotdGhy
ZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBzdGFjayBpcyBubyBsb25nZXIgdXNlZCBpcyBkZWZpbmVk
IGJ5IFBPU0lYX01BTExPQ18KLVRIUkVTSE9MRC4gT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQs
ICJjb25maWd1cmUiIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMKLWRlZmF1bHQuICovCi0K
LSNpZm5kZWYgUE9TSVhfTUFMTE9DX1RIUkVTSE9MRAotI2RlZmluZSBQT1NJWF9NQUxMT0NfVEhS
RVNIT0xEIDEwCi0jZW5kaWYKLQotLyogUENSRSB1c2VzIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxs
cyB0byBoYW5kbGUgYmFja3RyYWNraW5nIHdoaWxlIG1hdGNoaW5nLgotVGhpcyBjYW4gc29tZXRp
bWVzIGJlIGEgcHJvYmxlbSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBzdGFja3Mgb2YgbGltaXRlZCBz
aXplLgotRGVmaW5lIE5PX1JFQ1VSU0UgdG8gZ2V0IGEgdmVyc2lvbiB0aGF0IGRvZXNuJ3QgdXNl
IHJlY3Vyc2lvbiBpbiB0aGUgbWF0Y2goKQotZnVuY3Rpb247IGluc3RlYWQgaXQgY3JlYXRlcyBp
dHMgb3duIHN0YWNrIGJ5IHN0ZWFtIHVzaW5nIHBjcmVfcmVjdXJzZV9tYWxsb2MoKQotdG8gb2J0
YWluIG1lbW9yeSBmcm9tIHRoZSBoZWFwLiBGb3IgbW9yZSBkZXRhaWwsIHNlZSB0aGUgY29tbWVu
dHMgYW5kIG90aGVyCi1zdHVmZiBqdXN0IGFib3ZlIHRoZSBtYXRjaCgpIGZ1bmN0aW9uLiBPbiBz
eXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgImNvbmZpZ3VyZSIKLWNhbiBiZSB1c2VkIHRvIHNldCB0
aGlzIGluIHRoZSBNYWtlZmlsZSAodXNlIC0tZGlzYWJsZS1zdGFjay1mb3ItcmVjdXJzaW9uKS4g
Ki8KLQotI2RlZmluZSBOT19SRUNVUlNFCiAKIC8qIFRoZSB2YWx1ZSBvZiBNQVRDSF9MSU1JVCBk
ZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG51bWJlciBvZiB0aW1lcyB0aGUgaW50ZXJuYWwKIG1hdGNo
KCkgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcgYSBzaW5nbGUgZXhlY3V0aW9uIG9mIHBj
cmVfZXhlYygpLiBUaGVyZQpAQCAtMTA3LDkgKzE1LDcgQEAgZG8gbm90IG1hdGNoLiBUaGUgZGVm
YXVsdCBpcyBzZXQgdmVyeSBsYQogY2F0Y2ggbGVnaXRpbWF0ZSBjYXNlcy4gT24gc3lzdGVtcyB0
aGF0IHN1cHBvcnQgaXQsICJjb25maWd1cmUiIGNhbiBiZSB1c2VkIHRvCiBvdmVycmlkZSB0aGlz
IGRlZmF1bHQgZGVmYXVsdC4gKi8KIAotI2lmbmRlZiBNQVRDSF9MSU1JVAogI2RlZmluZSBNQVRD
SF9MSU1JVCAxMDAwMDAwMAotI2VuZGlmCiAKIC8qIFRoZSBhYm92ZSBsaW1pdCBhcHBsaWVzIHRv
IGFsbCBjYWxscyBvZiBtYXRjaCgpLCB3aGV0aGVyIG9yIG5vdCB0aGV5CiBpbmNyZWFzZSB0aGUg
cmVjdXJzaW9uIGRlcHRoLiBJbiBzb21lIGVudmlyb25tZW50cyBpdCBpcyBkZXNpcmFibGUgdG8g
bGltaXQgdGhlCkBAIC0xMjAsMTMgKzI2LDYgQEAgaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdCwgaXQg
bXVzdCBiZSBsZXNzIAogYSBydW50aW1lIG1ldGhvZCBmb3Igc2V0dGluZyBhIGRpZmZlcmVudCBs
aW1pdC4gT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsCiAiY29uZmlndXJlIiBjYW4gYmUgdXNl
ZCB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgZGVmYXVsdC4gKi8KIAotI2lmbmRlZiBNQVRDSF9M
SU1JVF9SRUNVUlNJT04KICNkZWZpbmUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OIE1BVENIX0xJTUlU
Ci0jZW5kaWYKLQotI2RlZmluZSBTVVBQT1JUX1VDUCAxCi0jZGVmaW5lIFNVUFBPUlRfVVRGOCAx
Ci0KLSNkZWZpbmUgSkFWQVNDUklQVCAxCiAKIC8qIEVuZCAqLwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcGNyZS9wY3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlLmgJ
KHJldmlzaW9uIDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOSArMSw4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotKiAgICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNz
aW9ucyAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLS8qIFRoaXMgaXMgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZSBmb3IgdGhlIFBDUkUg
bGlicmFyeSwgdG8gYmUgI2luY2x1ZGVkIGJ5Ci1hcHBsaWNhdGlvbnMgdGhhdCBjYWxsIHRoZSBQ
Q1JFIGZ1bmN0aW9ucy4KKy8qIFRoaXMgaXMgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZSBmb3IgSmF2
YVNjcmlwdENvcmUncyB2YXJpYW50IG9mIHRoZSBQQ1JFCitsaWJyYXJ5LiBXaGlsZSB0aGlzIGxp
YnJhcnkgc3RhcnRlZCBvdXQgYXMgYSBjb3B5IG9mIFBDUkUsIG1hbnkgb2YgdGhlCitmZWF0dXJl
cyBvZiBQQ1JFIGhhdmUgYmVlbiByZW1vdmVkLiBUaGlzIGxpYnJhcnkgbm93IHN1cHBvcnRzIG9u
bHkgdGhlCityZWd1bGFyIGV4cHJlc3Npb24gZmVhdHVyZXMgcmVxdWlyZWQgYnkgdGhlIEphdmFT
Y3JpcHQgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKK2FuZCBoYXMgb25seSB0aGUgZnVuY3Rpb25z
IG5lZWRlZCBieSBKYXZhU2NyaXB0Q29yZSBhbmQgdGhlIHJlc3Qgb2YgV2ViS2l0LgogCiAgICAg
ICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDA1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCiAg
ICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
CkBAIC0zNywyODIgKzM2LDQxIEBAIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICovCiAKLSNpZm5kZWYgX1BDUkVfSAotI2RlZmluZSBfUENSRV9ICi0K
LSNkZWZpbmUgcGNyZV9jYWxsb3V0IGtqc19wY3JlX2NhbGxvdXQKLSNkZWZpbmUgcGNyZV9jb21w
aWxlIGtqc19wY3JlX2NvbXBpbGUKLSNkZWZpbmUgcGNyZV9jb21waWxlMiBranNfcGNyZV9jb21w
aWxlMgotI2RlZmluZSBwY3JlX2NvbmZpZyBranNfcGNyZV9jb25maWcKLSNkZWZpbmUgcGNyZV9j
b3B5X25hbWVkX3N1YnN0cmluZyBranNfcGNyZV9jb3B5X25hbWVkX3N1YnN0cmluZwotI2RlZmlu
ZSBwY3JlX2NvcHlfc3Vic3RyaW5nIGtqc19wY3JlX2NvcHlfc3Vic3RyaW5nCi0jZGVmaW5lIHBj
cmVfZGZhX2V4ZWMga2pzX3BjcmVfZGZhX2V4ZWMKLSNkZWZpbmUgcGNyZV9leGVjIGtqc19wY3Jl
X2V4ZWMKLSNkZWZpbmUgcGNyZV9mcmVlIGtqc19wY3JlX2ZyZWUKLSNkZWZpbmUgcGNyZV9mcmVl
X3N1YnN0cmluZyBranNfcGNyZV9mcmVlX3N1YnN0cmluZwotI2RlZmluZSBwY3JlX2ZyZWVfc3Vi
c3RyaW5nX2xpc3Qga2pzX3BjcmVfZnJlZV9zdWJzdHJpbmdfbGlzdAotI2RlZmluZSBwY3JlX2Z1
bGxpbmZvIGtqc19wY3JlX2Z1bGxpbmZvCi0jZGVmaW5lIHBjcmVfZ2V0X25hbWVkX3N1YnN0cmlu
ZyBranNfcGNyZV9nZXRfbmFtZWRfc3Vic3RyaW5nCi0jZGVmaW5lIHBjcmVfZ2V0X3N1YnN0cmlu
ZyBranNfcGNyZV9nZXRfc3Vic3RyaW5nCi0jZGVmaW5lIHBjcmVfZ2V0X3N1YnN0cmluZ19saXN0
IGtqc19wY3JlX2dldF9zdWJzdHJpbmdfbGlzdAotI2RlZmluZSBwY3JlX2luZm8ga2pzX3BjcmVf
aW5mbwotI2RlZmluZSBwY3JlX21ha2V0YWJsZXMga2pzX3BjcmVfbWFrZXRhYmxlcwotI2RlZmlu
ZSBwY3JlX21hbGxvYyBranNfcGNyZV9tYWxsb2MKLSNkZWZpbmUgcGNyZV9yZWZjb3VudCBranNf
cGNyZV9yZWZjb3VudAotI2RlZmluZSBwY3JlX3N0YWNrX2ZyZWUga2pzX3BjcmVfc3RhY2tfZnJl
ZQotI2RlZmluZSBwY3JlX3N0YWNrX21hbGxvYyBranNfcGNyZV9zdGFja19tYWxsb2MKLSNkZWZp
bmUgcGNyZV9zdHVkeSBranNfcGNyZV9zdHVkeQotI2RlZmluZSBwY3JlX3ZlcnNpb24ga2pzX3Bj
cmVfdmVyc2lvbgotCi0vKiBUaGUgY3VycmVudCBQQ1JFIHZlcnNpb24gaW5mb3JtYXRpb24uICov
Ci0KLS8qIE5PVEVTIEZPUiBGVVRVUkUgTUFJTlRBSU5FUlM6IERvIG5vdCB1c2UgbnVtYmVycyB3
aXRoIGxlYWRpbmcgemVyb3MsIGJlY2F1c2UKLXRoZXkgbWF5IGJlIHRyZWF0ZWQgYXMgb2N0YWwg
Y29uc3RhbnRzLiBUaGUgUENSRV9QUkVSRUxFQVNFIGZlYXR1cmUgaXMgZm9yCi1pZGVudGlmeWlu
ZyByZWxlYXNlIGNhbmRpZGF0ZXMuIEl0IG1pZ2h0IGJlIGRlZmluZWQgYXMgLVJDMiwgZm9yIGV4
YW1wbGUuIEluCi1yZWFsIHJlbGVhc2VzLCBpdCBzaG91bGQgYmUgZGVmaW5lZCBlbXB0eS4gRG8g
bm90IGNoYW5nZSB0aGUgYWxpZ25tZW50IG9mIHRoZXNlCi1zdGF0bWVudHMuIFRoZSBjb2RlIGlu
IC4vY29uZmlndXJlIGdyZXBzIG91dCB0aGUgdmVyc2lvbiBudW1iZXJzIGJ5IHVzaW5nICJjdXQi
Ci10byBnZXQgdmFsdWVzIGZyb20gY29sdW1uIDI5IG9ud2FyZHMuIFRoZXNlIGFyZSBzdWJzdGl0
dXRlZCBpbnRvIHBjcmUtY29uZmlnCi1hbmQgbGlicGNyZS5wYy4gVGhlIHZhbHVlcyBhcmUgbm90
IHB1dCBpbnRvIGNvbmZpZ3VyZS5hYyBhbmQgc3Vic3RpdHV0ZWQgaGVyZQotKHdoaWNoIHdvdWxk
IHNpbXBsaWZ5IHRoaXMgaXNzdWUpIGJlY2F1c2UgdGhhdCBtYWtlcyBsaWZlIGhhcmRlciBmb3Ig
dGhvc2Ugd2hvCi1jYW5ub3QgcnVuIC4vY29uZmlndXJlLiBBcyBpdCBub3cgc3RhbmRzLCB0aGlz
IGZpbGUgbmVlZCBub3QgYmUgZWRpdGVkIGluIHRoYXQKLWNpcmN1bXN0YW5jZS4gKi8KLQotI2Rl
ZmluZSBQQ1JFX01BSk9SICAgICAgICAgIDYKLSNkZWZpbmUgUENSRV9NSU5PUiAgICAgICAgICA1
Ci0jZGVmaW5lIFBDUkVfUFJFUkVMRUFTRQotI2RlZmluZSBQQ1JFX0RBVEUgICAgICAgICAgIDAx
LUZlYi0yMDA2Ci0KLSNkZWZpbmUgUENSRV9VVEYxNiAgICAgICAgICAxCi0KLS8qIFdpbjMyIHVz
ZXMgRExMIGJ5IGRlZmF1bHQ7IGl0IG5lZWRzIHNwZWNpYWwgc3R1ZmYgZm9yIGV4cG9ydGVkIGZ1
bmN0aW9ucy4gKi8KLQotI2lmIDAKLSNpZmRlZiBfV0lOMzIKLSMgIGlmZGVmIFBDUkVfREVGSU5J
VElPTgotIyAgICBpZmRlZiBETExfRVhQT1JUCi0jICAgICAgZGVmaW5lIFBDUkVfREFUQV9TQ09Q
RSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZW5kaWYKLSMgIGVsc2UKLSMgICAgaWZuZGVm
IFBDUkVfU1RBVElDCi0jICAgICAgZGVmaW5lIFBDUkVfREFUQV9TQ09QRSBleHRlcm4gX19kZWNs
c3BlYyhkbGxpbXBvcnQpCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQot
LyogRm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCB3ZSB1c2UgdGhlIHN0YW5kYXJkICJleHRl
cm4iLiAqLwotCi0jaWZuZGVmIFBDUkVfREFUQV9TQ09QRQotIyAgaWZkZWYgX19jcGx1c3BsdXMK
LSMgICAgZGVmaW5lIFBDUkVfREFUQV9TQ09QRSAgICAgZXh0ZXJuICJDIgotIyAgZWxzZQotIyAg
ICBkZWZpbmUgUENSRV9EQVRBX1NDT1BFICAgICBleHRlcm4KLSMgIGVuZGlmCi0jZW5kaWYKKy8v
IEZJWE1FOiBIZWFkZXIgbmVlZHMgdG8gYmUgcmVuYW1lZC4KIAotLyogSGF2ZSB0byBpbmNsdWRl
IHN0ZGxpYi5oIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHNpemVfdCBpcyBkZWZpbmVkOwotaXQg
aXMgbmVlZGVkIGhlcmUgZm9yIG1hbGxvYy4gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0v
KiBBbGxvdyBmb3IgQysrIHVzZXJzICovCisjaWZuZGVmIFBDUkVfSAorI2RlZmluZSBQQ1JFX0gK
IAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0vKiBPcHRpb25z
ICovCisvKiBqc1JlZ0V4cENvbXBpbGUgb3B0aW9ucyAqLworLyogRklYTUU6IFVzZSB0d28gYm9v
bGVhbnMgaW5zdGVhZD8gKi8KIAotI2RlZmluZSBQQ1JFX0NBU0VMRVNTICAgICAgICAgICAweDAw
MDAwMDAxCi0jZGVmaW5lIFBDUkVfTVVMVElMSU5FICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZp
bmUgUENSRV9ET1RBTEwgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQQ1JFX0VYVEVO
REVEICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBDUkVfQU5DSE9SRUQgICAgICAgICAg
IDB4MDAwMDAwMTAKLSNkZWZpbmUgUENSRV9ET0xMQVJfRU5ET05MWSAgICAgMHgwMDAwMDAyMAot
I2RlZmluZSBQQ1JFX0VYVFJBICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBDUkVf
Tk9UQk9MICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUENSRV9OT1RFT0wgICAgICAg
ICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQQ1JFX1VOR1JFRURZICAgICAgICAgICAweDAwMDAw
MjAwCi0jZGVmaW5lIFBDUkVfTk9URU1QVFkgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUg
UENSRV9VVEY4ICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQQ1JFX05PX0FVVE9f
Q0FQVFVSRSAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBDUkVfTk9fVVRGOF9DSEVDSyAgICAgIDB4
MDAwMDIwMDAKLSNkZWZpbmUgUENSRV9BVVRPX0NBTExPVVQgICAgICAgMHgwMDAwNDAwMAotI2Rl
ZmluZSBQQ1JFX1BBUlRJQUwgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBDUkVfREZB
X1NIT1JURVNUICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUENSRV9ERkFfUkVTVEFSVCAgICAg
ICAgMHgwMDAyMDAwMAotI2RlZmluZSBQQ1JFX0ZJUlNUTElORSAgICAgICAgICAweDAwMDQwMDAw
Ci0KLS8qIEV4ZWMtdGltZSBhbmQgZ2V0L3NldC10aW1lIGVycm9yIGNvZGVzICovCi0KLSNkZWZp
bmUgUENSRV9FUlJPUl9OT01BVENIICAgICAgICAgKC0xKQotI2RlZmluZSBQQ1JFX0VSUk9SX05V
TEwgICAgICAgICAgICAoLTIpCi0jZGVmaW5lIFBDUkVfRVJST1JfQkFET1BUSU9OICAgICAgICgt
MykKLSNkZWZpbmUgUENSRV9FUlJPUl9CQURNQUdJQyAgICAgICAgKC00KQotI2RlZmluZSBQQ1JF
X0VSUk9SX1VOS05PV05fTk9ERSAgICAoLTUpCi0jZGVmaW5lIFBDUkVfRVJST1JfTk9NRU1PUlkg
ICAgICAgICgtNikKLSNkZWZpbmUgUENSRV9FUlJPUl9OT1NVQlNUUklORyAgICAgKC03KQotI2Rl
ZmluZSBQQ1JFX0VSUk9SX01BVENITElNSVQgICAgICAoLTgpCi0jZGVmaW5lIFBDUkVfRVJST1Jf
Q0FMTE9VVCAgICAgICAgICgtOSkgIC8qIE5ldmVyIHVzZWQgYnkgUENSRSBpdHNlbGYgKi8KLSNk
ZWZpbmUgUENSRV9FUlJPUl9CQURVVEY4ICAgICAgICAoLTEwKQotI2RlZmluZSBQQ1JFX0VSUk9S
X0JBRFVURjhfT0ZGU0VUICgtMTEpCi0jZGVmaW5lIFBDUkVfRVJST1JfUEFSVElBTCAgICAgICAg
KC0xMikKLSNkZWZpbmUgUENSRV9FUlJPUl9CQURQQVJUSUFMICAgICAoLTEzKQotI2RlZmluZSBQ
Q1JFX0VSUk9SX0lOVEVSTkFMICAgICAgICgtMTQpCi0jZGVmaW5lIFBDUkVfRVJST1JfQkFEQ09V
TlQgICAgICAgKC0xNSkKLSNkZWZpbmUgUENSRV9FUlJPUl9ERkFfVUlURU0gICAgICAoLTE2KQot
I2RlZmluZSBQQ1JFX0VSUk9SX0RGQV9VQ09ORCAgICAgICgtMTcpCi0jZGVmaW5lIFBDUkVfRVJS
T1JfREZBX1VNTElNSVQgICAgKC0xOCkKLSNkZWZpbmUgUENSRV9FUlJPUl9ERkFfV1NTSVpFICAg
ICAoLTE5KQotI2RlZmluZSBQQ1JFX0VSUk9SX0RGQV9SRUNVUlNFICAgICgtMjApCi0jZGVmaW5l
IFBDUkVfRVJST1JfUkVDVVJTSU9OTElNSVQgKC0yMSkKLQotLyogUmVxdWVzdCB0eXBlcyBmb3Ig
cGNyZV9mdWxsaW5mbygpICovCi0KLSNkZWZpbmUgUENSRV9JTkZPX09QVElPTlMgICAgICAgICAg
ICAwCi0jZGVmaW5lIFBDUkVfSU5GT19TSVpFICAgICAgICAgICAgICAgMQotI2RlZmluZSBQQ1JF
X0lORk9fQ0FQVFVSRUNPVU5UICAgICAgIDIKLSNkZWZpbmUgUENSRV9JTkZPX0JBQ0tSRUZNQVgg
ICAgICAgICAzCi0jZGVmaW5lIFBDUkVfSU5GT19GSVJTVEJZVEUgICAgICAgICAgNAotI2RlZmlu
ZSBQQ1JFX0lORk9fRklSU1RDSEFSICAgICAgICAgIDQgIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0
aWJpbGl0eSAqLwotI2RlZmluZSBQQ1JFX0lORk9fRklSU1RUQUJMRSAgICAgICAgIDUKLSNkZWZp
bmUgUENSRV9JTkZPX0xBU1RMSVRFUkFMICAgICAgICA2Ci0jZGVmaW5lIFBDUkVfSU5GT19OQU1F
RU5UUllTSVpFICAgICAgNwotI2RlZmluZSBQQ1JFX0lORk9fTkFNRUNPVU5UICAgICAgICAgIDgK
LSNkZWZpbmUgUENSRV9JTkZPX05BTUVUQUJMRSAgICAgICAgICA5Ci0jZGVmaW5lIFBDUkVfSU5G
T19TVFVEWVNJWkUgICAgICAgICAxMAotI2RlZmluZSBQQ1JFX0lORk9fREVGQVVMVF9UQUJMRVMg
ICAgMTEKLQotLyogUmVxdWVzdCB0eXBlcyBmb3IgcGNyZV9jb25maWcoKS4gRG8gbm90IHJlLWFy
cmFuZ2UsIGluIG9yZGVyIHRvIHJlbWFpbgotY29tcGF0aWJsZS4gKi8KLQotI2RlZmluZSBQQ1JF
X0NPTkZJR19VVEY4ICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBDUkVfQ09ORklHX05F
V0xJTkUgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUENSRV9DT05GSUdfTElOS19TSVpFICAg
ICAgICAgICAgICAgMgotI2RlZmluZSBQQ1JFX0NPTkZJR19QT1NJWF9NQUxMT0NfVEhSRVNIT0xE
ICAzCi0jZGVmaW5lIFBDUkVfQ09ORklHX01BVENIX0xJTUlUICAgICAgICAgICAgIDQKLSNkZWZp
bmUgUENSRV9DT05GSUdfU1RBQ0tSRUNVUlNFICAgICAgICAgICAgNQotI2RlZmluZSBQQ1JFX0NP
TkZJR19VTklDT0RFX1BST1BFUlRJRVMgICAgICA2Ci0jZGVmaW5lIFBDUkVfQ09ORklHX01BVENI
X0xJTUlUX1JFQ1VSU0lPTiAgIDcKLQotLyogQml0IGZsYWdzIGZvciB0aGUgcGNyZV9leHRyYSBz
dHJ1Y3R1cmUuIERvIG5vdCByZS1hcnJhbmdlIG9yIHJlZGVmaW5lCi10aGVzZSBiaXRzLCBqdXN0
IGFkZCBuZXcgb25lcyBvbiB0aGUgZW5kLCBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZS4g
Ki8KLQotI2RlZmluZSBQQ1JFX0VYVFJBX1NUVURZX0RBVEEgICAgICAgICAgICAgMHgwMDAxCi0j
ZGVmaW5lIFBDUkVfRVhUUkFfTUFUQ0hfTElNSVQgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUg
UENSRV9FWFRSQV9DQUxMT1VUX0RBVEEgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBQQ1JFX0VY
VFJBX1RBQkxFUyAgICAgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIFBDUkVfRVhUUkFfTUFU
Q0hfTElNSVRfUkVDVVJTSU9OICAweDAwMTAKLQotLyogVHlwZXMgKi8KLQotI2lmIFBDUkVfVVRG
MTYKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGNyZV9jaGFyOwotI2Vsc2UKLXR5cGVkZWYgY2hh
ciBwY3JlX2NoYXI7Ci0jZW5kaWYKKyNkZWZpbmUgSlNfUkVHRVhQX0NBU0VMRVNTICAgICAgMHgw
MDAwMDAwMQorI2RlZmluZSBKU19SRUdFWFBfTVVMVElMSU5FICAgICAweDAwMDAwMDAyCiAKLXN0
cnVjdCByZWFsX3BjcmU7ICAgICAgICAgICAgICAgICAvKiBkZWNsYXJhdGlvbjsgdGhlIGRlZmlu
aXRpb24gaXMgcHJpdmF0ZSAgKi8KLXR5cGVkZWYgc3RydWN0IHJlYWxfcGNyZSBwY3JlOworLyog
anNSZWdFeHBFeGVjdXRlIGVycm9yIGNvZGVzICovCisvKiBGSVhNRTogVXNlIGNvbnN0IGFmdGVy
IGNoYW5naW5nIHRoaXMgdG8gQysrPyAqLwogCi0vKiBXaGVuIFBDUkUgaXMgY29tcGlsZWQgYXMg
YSBDKysgbGlicmFyeSwgdGhlIHN1YmplY3QgcG9pbnRlciB0eXBlIGNhbiBiZQotcmVwbGFjZWQg
d2l0aCBhIGN1c3RvbSB0eXBlLiBGb3IgY29udmVudGlvbmFsIHVzZSwgdGhlIHB1YmxpYyBpbnRl
cmZhY2UgaXMgYQotY29uc3QgY2hhciAqLiAqLworI2RlZmluZSBKU19SRUdFWFBfRVJST1JfTk9N
QVRDSCAgICAgICAgICgtMSkKKyNkZWZpbmUgSlNfUkVHRVhQX0VSUk9SX05PTUVNT1JZICAgICAg
ICAoLTYpCisjZGVmaW5lIEpTX1JFR0VYUF9FUlJPUl9NQVRDSExJTUlUICAgICAgKC04KQorI2Rl
ZmluZSBKU19SRUdFWFBfRVJST1JfSU5URVJOQUwgICAgICAgKC0xNCkKKyNkZWZpbmUgSlNfUkVH
RVhQX0VSUk9SX1JFQ1VSU0lPTkxJTUlUICgtMjEpCiAKLSNpZm5kZWYgUENSRV9TUFRSCi0jZGVm
aW5lIFBDUkVfU1BUUiBjb25zdCBwY3JlX2NoYXIgKgotI2VuZGlmCisvKiBGSVhNRTogTWVyZ2Ug
d2l0aCBXVEYncyBVQ2hhcj8gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgSlNSZWdFeHBDaGFy
OworCit0eXBlZGVmIHN0cnVjdCBKU1JlZ0V4cCBKU1JlZ0V4cDsKIAotLyogVGhlIHN0cnVjdHVy
ZSBmb3IgcGFzc2luZyBhZGRpdGlvbmFsIGRhdGEgdG8gcGNyZV9leGVjKCkuIFRoaXMgaXMgZGVm
aW5lZCBpbgotc3VjaCBhcyB3YXkgYXMgdG8gYmUgZXh0ZW5zaWJsZS4gQWx3YXlzIGFkZCBuZXcg
ZmllbGRzIGF0IHRoZSBlbmQsIGluIG9yZGVyIHRvCi1yZW1haW4gY29tcGF0aWJsZS4gKi8KLQot
dHlwZWRlZiBzdHJ1Y3QgcGNyZV9leHRyYSB7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOyAg
ICAgICAgLyogQml0cyBmb3Igd2hpY2ggZmllbGRzIGFyZSBzZXQgKi8KLSAgdm9pZCAqc3R1ZHlf
ZGF0YTsgICAgICAgICAgICAgICAvKiBPcGFxdWUgZGF0YSBmcm9tIHBjcmVfc3R1ZHkoKSAqLwot
ICB1bnNpZ25lZCBsb25nIGludCBtYXRjaF9saW1pdDsgIC8qIE1heGltdW0gbnVtYmVyIG9mIGNh
bGxzIHRvIG1hdGNoKCkgKi8KLSAgdm9pZCAqY2FsbG91dF9kYXRhOyAgICAgICAgICAgICAvKiBE
YXRhIHBhc3NlZCBiYWNrIGluIGNhbGxvdXRzICovCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRh
YmxlczsgICAgLyogUG9pbnRlciB0byBjaGFyYWN0ZXIgdGFibGVzICovCi0gIHVuc2lnbmVkIGxv
bmcgaW50IG1hdGNoX2xpbWl0X3JlY3Vyc2lvbjsgLyogTWF4IHJlY3Vyc2l2ZSBjYWxscyB0byBt
YXRjaCgpICovCi19IHBjcmVfZXh0cmE7Ci0KLS8qIFRoZSBzdHJ1Y3R1cmUgZm9yIHBhc3Npbmcg
b3V0IGRhdGEgdmlhIHRoZSBwY3JlX2NhbGxvdXRfZnVuY3Rpb24uIFdlIHVzZSBhCi1zdHJ1Y3R1
cmUgc28gdGhhdCBuZXcgZmllbGRzIGNhbiBiZSBhZGRlZCBvbiB0aGUgZW5kIGluIGZ1dHVyZSB2
ZXJzaW9ucywKLXdpdGhvdXQgY2hhbmdpbmcgdGhlIEFQSSBvZiB0aGUgZnVuY3Rpb24sIHRoZXJl
YnkgYWxsb3dpbmcgb2xkIGNsaWVudHMgdG8gd29yawotd2l0aG91dCBtb2RpZmljYXRpb24uICov
Ci0KLXR5cGVkZWYgc3RydWN0IHBjcmVfY2FsbG91dF9ibG9jayB7Ci0gIGludCAgICAgICAgICB2
ZXJzaW9uOyAgICAgICAgICAgLyogSWRlbnRpZmllcyB2ZXJzaW9uIG9mIGJsb2NrICovCi0gIC8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWZXJzaW9uIDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwotICBpbnQgICAgICAgICAgY2FsbG91dF9udW1iZXI7ICAgIC8qIE51bWJl
ciBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8KLSAgaW50ICAgICAgICAgKm9mZnNldF92ZWN0b3I7
ICAgICAvKiBUaGUgb2Zmc2V0IHZlY3RvciAqLwotICBQQ1JFX1NQVFIgICAgc3ViamVjdDsgICAg
ICAgICAgIC8qIFRoZSBzdWJqZWN0IGJlaW5nIG1hdGNoZWQgKi8KLSAgaW50ICAgICAgICAgIHN1
YmplY3RfbGVuZ3RoOyAgICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0ICovCi0gIGludCAg
ICAgICAgICBzdGFydF9tYXRjaDsgICAgICAgLyogT2Zmc2V0IHRvIHN0YXJ0IG9mIHRoaXMgbWF0
Y2ggYXR0ZW1wdCAqLwotICBpbnQgICAgICAgICAgY3VycmVudF9wb3NpdGlvbjsgIC8qIFdoZXJl
IHdlIGN1cnJlbnRseSBhcmUgaW4gdGhlIHN1YmplY3QgKi8KLSAgaW50ICAgICAgICAgIGNhcHR1
cmVfdG9wOyAgICAgICAvKiBNYXggY3VycmVudCBjYXB0dXJlICovCi0gIGludCAgICAgICAgICBj
YXB0dXJlX2xhc3Q7ICAgICAgLyogTW9zdCByZWNlbnRseSBjbG9zZWQgY2FwdHVyZSAqLwotICB2
b2lkICAgICAgICAqY2FsbG91dF9kYXRhOyAgICAgIC8qIERhdGEgcGFzc2VkIGluIHdpdGggdGhl
IGNhbGwgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRlZCBmb3IgVmVyc2lvbiAxIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gIGludCAgICAgICAgICBwYXR0ZXJuX3Bvc2l0
aW9uOyAgLyogT2Zmc2V0IHRvIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLwotICBpbnQgICAg
ICAgICAgbmV4dF9pdGVtX2xlbmd0aDsgIC8qIExlbmd0aCBvZiBuZXh0IGl0ZW0gaW4gdGhlIHBh
dHRlcm4gKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi19IHBjcmVfY2FsbG91dF9ibG9jazsKLQotLyog
SW5kaXJlY3Rpb24gZm9yIHN0b3JlIGdldCBhbmQgZnJlZSBmdW5jdGlvbnMuIFRoZXNlIGNhbiBi
ZSBzZXQgdG8KLWFsdGVybmF0aXZlIG1hbGxvYy9mcmVlIGZ1bmN0aW9ucyBpZiByZXF1aXJlZC4g
U3BlY2lhbCBvbmVzIGFyZSB1c2VkIGluIHRoZQotbm9uLXJlY3Vyc2l2ZSBjYXNlIGZvciAiZnJh
bWVzIi4gVGhlcmUgaXMgYWxzbyBhbiBvcHRpb25hbCBjYWxsb3V0IGZ1bmN0aW9uCi10aGF0IGlz
IHRyaWdnZXJlZCBieSB0aGUgKD8pIHJlZ2V4IGl0ZW0uIEZvciBWaXJ0dWFsIFBhc2NhbCwgdGhl
c2UgZGVmaW5pdGlvbnMKLWhhdmUgdG8gdGFrZSBhbm90aGVyIGZvcm0uICovCi0KLSNpZm5kZWYg
VlBDT01QQVQKLVBDUkVfREFUQV9TQ09QRSB2b2lkICooKnBjcmVfbWFsbG9jKShzaXplX3QpOwot
UENSRV9EQVRBX1NDT1BFIHZvaWQgICgqcGNyZV9mcmVlKSh2b2lkICopOwotUENSRV9EQVRBX1ND
T1BFIHZvaWQgKigqcGNyZV9zdGFja19tYWxsb2MpKHNpemVfdCk7Ci1QQ1JFX0RBVEFfU0NPUEUg
dm9pZCAgKCpwY3JlX3N0YWNrX2ZyZWUpKHZvaWQgKik7Ci1QQ1JFX0RBVEFfU0NPUEUgaW50ICAg
KCpwY3JlX2NhbGxvdXQpKHBjcmVfY2FsbG91dF9ibG9jayAqKTsKLSNlbHNlICAgLyogVlBDT01Q
QVQgKi8KLVBDUkVfREFUQV9TQ09QRSB2b2lkICpwY3JlX21hbGxvYyhzaXplX3QpOwotUENSRV9E
QVRBX1NDT1BFIHZvaWQgIHBjcmVfZnJlZSh2b2lkICopOwotUENSRV9EQVRBX1NDT1BFIHZvaWQg
KnBjcmVfc3RhY2tfbWFsbG9jKHNpemVfdCk7Ci1QQ1JFX0RBVEFfU0NPUEUgdm9pZCAgcGNyZV9z
dGFja19mcmVlKHZvaWQgKik7Ci1QQ1JFX0RBVEFfU0NPUEUgaW50ICAgcGNyZV9jYWxsb3V0KHBj
cmVfY2FsbG91dF9ibG9jayAqKTsKLSNlbmRpZiAgLyogVlBDT01QQVQgKi8KLQotLyogRXhwb3J0
ZWQgUENSRSBmdW5jdGlvbnMgKi8KLQotUENSRV9EQVRBX1NDT1BFIHBjcmUgKnBjcmVfY29tcGls
ZShjb25zdCBwY3JlX2NoYXIgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiosIGludCAqLAotICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKLVBDUkVfREFUQV9TQ09QRSBw
Y3JlICpwY3JlX2NvbXBpbGUyKGNvbnN0IHBjcmVfY2hhciAqLCBpbnQsIGludCwgaW50ICosIGNv
bnN0IGNoYXIgKiosCi0gICAgICAgICAgICAgICAgICBpbnQgKiwgY29uc3QgdW5zaWduZWQgY2hh
ciAqKTsKLVBDUkVfREFUQV9TQ09QRSBpbnQgIHBjcmVfY29uZmlnKGludCwgdm9pZCAqKTsKLVBD
UkVfREFUQV9TQ09QRSBpbnQgIHBjcmVfY29weV9uYW1lZF9zdWJzdHJpbmcoY29uc3QgcGNyZSAq
LCBjb25zdCBwY3JlX2NoYXIgKiwKLSAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGNvbnN0
IHBjcmVfY2hhciAqLCBwY3JlX2NoYXIgKiwgaW50KTsKLVBDUkVfREFUQV9TQ09QRSBpbnQgIHBj
cmVfY29weV9zdWJzdHJpbmcoY29uc3QgcGNyZV9jaGFyICosIGludCAqLCBpbnQsIGludCwgcGNy
ZV9jaGFyICosCi0gICAgICAgICAgICAgICAgICBpbnQpOwotUENSRV9EQVRBX1NDT1BFIGludCAg
cGNyZV9kZmFfZXhlYyhjb25zdCBwY3JlICosIGNvbnN0IHBjcmVfZXh0cmEgKiwKLSAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBjcmVfY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICwg
aW50ICosIGludCk7Ci1QQ1JFX0RBVEFfU0NPUEUgaW50ICBwY3JlX2V4ZWMoY29uc3QgcGNyZSAq
LCBjb25zdCBwY3JlX2V4dHJhICosIFBDUkVfU1BUUiwKLSAgICAgICAgICAgICAgICAgICBpbnQs
IGludCwgaW50LCBpbnQgKiwgaW50KTsKLVBDUkVfREFUQV9TQ09QRSB2b2lkIHBjcmVfZnJlZV9z
dWJzdHJpbmcoY29uc3QgcGNyZV9jaGFyICopOwotUENSRV9EQVRBX1NDT1BFIHZvaWQgcGNyZV9m
cmVlX3N1YnN0cmluZ19saXN0KGNvbnN0IHBjcmVfY2hhciAqKik7Ci1QQ1JFX0RBVEFfU0NPUEUg
aW50ICBwY3JlX2Z1bGxpbmZvKGNvbnN0IHBjcmUgKiwgY29uc3QgcGNyZV9leHRyYSAqLCBpbnQs
Ci0gICAgICAgICAgICAgICAgICB2b2lkICopOwotUENSRV9EQVRBX1NDT1BFIGludCAgcGNyZV9n
ZXRfbmFtZWRfc3Vic3RyaW5nKGNvbnN0IHBjcmUgKiwgY29uc3QgcGNyZV9jaGFyICosCi0gICAg
ICAgICAgICAgICAgICBpbnQgKiwgaW50LCBjb25zdCBwY3JlX2NoYXIgKiwgY29uc3QgcGNyZV9j
aGFyICoqKTsKLVBDUkVfREFUQV9TQ09QRSBpbnQgIHBjcmVfZ2V0X3N0cmluZ251bWJlcihjb25z
dCBwY3JlICosIGNvbnN0IHBjcmVfY2hhciAqKTsKLVBDUkVfREFUQV9TQ09QRSBpbnQgIHBjcmVf
Z2V0X3N1YnN0cmluZyhjb25zdCBwY3JlX2NoYXIgKiwgaW50ICosIGludCwgaW50LAotICAgICAg
ICAgICAgICAgICAgY29uc3QgcGNyZV9jaGFyICoqKTsKLVBDUkVfREFUQV9TQ09QRSBpbnQgIHBj
cmVfZ2V0X3N1YnN0cmluZ19saXN0KGNvbnN0IHBjcmVfY2hhciAqLCBpbnQgKiwgaW50LAotICAg
ICAgICAgICAgICAgICAgY29uc3QgcGNyZV9jaGFyICoqKik7Ci1QQ1JFX0RBVEFfU0NPUEUgaW50
ICBwY3JlX2luZm8oY29uc3QgcGNyZSAqLCBpbnQgKiwgaW50ICopOwotUENSRV9EQVRBX1NDT1BF
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBjcmVfbWFrZXRhYmxlcyh2b2lkKTsKLVBDUkVfREFUQV9T
Q09QRSBpbnQgIHBjcmVfcmVmY291bnQocGNyZSAqLCBpbnQpOwotUENSRV9EQVRBX1NDT1BFIHBj
cmVfZXh0cmEgKnBjcmVfc3R1ZHkoY29uc3QgcGNyZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiopOwot
UENSRV9EQVRBX1NDT1BFIGNvbnN0IGNoYXIgKnBjcmVfdmVyc2lvbih2b2lkKTsKK0pTUmVnRXhw
KiBqc1JlZ0V4cENvbXBpbGUoY29uc3QgSlNSZWdFeHBDaGFyKiBwYXR0ZXJuLCBpbnQgcGF0dGVy
bkxlbmd0aCwgaW50IG9wdGlvbnMsIHVuc2lnbmVkKiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hh
cioqIGVycm9yTWVzc2FnZSk7CitpbnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhwKiwg
Y29uc3QgSlNSZWdFeHBDaGFyKiwgaW50LCBpbnQsIGludCosIGludCk7Cit2b2lkIGpzUmVnRXhw
RnJlZShKU1JlZ0V4cCopOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8qIGV4dGVybiAiQyIg
Ki8KK30gLyogZXh0ZXJuICJDIiAqLwogI2VuZGlmCiAKLSNlbmRpZiAvKiBFbmQgb2YgcGNyZS5o
ICovCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuYwkocmV2aXNpb24g
Mjc0MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMyArNDcsNyBAQCBzdXBwb3J0aW5nIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0
IGFyZSBuCiAKIAogLyogV0FSTklORzogVGhlc2UgbWFjcm9zIGV2YWx1YXRlIHRoZWlyIHBhcmFt
ZXRlcnMgbW9yZSB0aGFuIG9uY2UuICovCi0jaWYgUENSRV9VVEYxNgotI2RlZmluZSBDVFlQRVMo
Y2QsIHgpICgoeCkgPD0gMjU1ID8gKGNkKS0+Y3R5cGVzWyh4KV0gOiAwKQotI2RlZmluZSBESUdJ
VEFCKHgpICgoeCkgPD0gMjU1ID8gZGlnaXRhYlsoeCldIDogMCkKLSNlbHNlCi0jZGVmaW5lIENU
WVBFUyhjZCwgeCkgY2QtPmN0eXBlc1soeCldCi0jZGVmaW5lIERJR0lUQUIoeCkgZGlnaXRhYlso
eCldCi0jZW5kaWYKKyNkZWZpbmUgRElHSVRBQih4KSAoKHgpIDwgMTI4ID8gZGlnaXRhYlsoeCld
IDogMCkKIAogCiAvKiBXaGVuIERFQlVHIGlzIGRlZmluZWQsIHdlIG5lZWQgdGhlIHBjcmVfcHJp
bnRpbnQoKSBmdW5jdGlvbiwgd2hpY2ggaXMgYWxzbwpAQCAtODMsNyArNzcsNiBAQCBhcmUgc2lt
cGxlIGRhdGEgdmFsdWVzOyBuZWdhdGl2ZSB2YWx1ZXMgCiBvbi4gWmVybyBtZWFucyBmdXJ0aGVy
IHByb2Nlc3NpbmcgaXMgbmVlZGVkIChmb3IgdGhpbmdzIGxpa2UgXHgpLCBvciB0aGUgZXNjYXBl
CiBpcyBpbnZhbGlkLiAqLwogCi0jaWYgSkFWQVNDUklQVCAgIC8qIFRoaXMgaXMgdGhlICJKYXZh
U2NyaXB0IiB0YWJsZSBmb3IgQVNDSUkgc3lzdGVtcyAqLwogc3RhdGljIGNvbnN0IHNob3J0IGlu
dCBlc2NhcGVzW10gPSB7CiAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwg
ICAgICAwLCAgICAgIDAsICAgICAgMCwgICAvKiAwIC0gNyAqLwogICAgICAwLCAgICAgIDAsICAg
ICc6JywgICAgJzsnLCAgICAnPCcsICAgICc9JywgICAgJz4nLCAgICAnPycsICAgLyogOCAtID8g
Ki8KQEAgLTk2LDkzICs4OSw2IEBAIHN0YXRpYyBjb25zdCBzaG9ydCBpbnQgZXNjYXBlc1tdID0g
ewogICAgICAwLCAgICAgIDAsICBFU0NfciwgLUVTQ19zLCAgRVNDX3RlZSwgICAgMCwgIEVTQ192
LCAtRVNDX3csICAgLyogcCAtIHcgKi8KICAgICAgMCwgICAgICAwLCAgICAgIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHggLSB6ICovCiB9OwotI2Vsc2UK
LSNpZiAhRUJDRElDICAgLyogVGhpcyBpcyB0aGUgIm5vcm1hbCIgdGFibGUgZm9yIEFTQ0lJIHN5
c3RlbXMgKi8KLXN0YXRpYyBjb25zdCBzaG9ydCBpbnQgZXNjYXBlc1tdID0gewotICAgICAwLCAg
ICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAg
LyogMCAtIDcgKi8KLSAgICAgMCwgICAgICAwLCAgICAnOicsICAgICc7JywgICAgJzwnLCAgICAn
PScsICAgICc+JywgICAgJz8nLCAgIC8qIDggLSA/ICovCi0gICAnQCcsIC1FU0NfQSwgLUVTQ19C
LCAtRVNDX0MsIC1FU0NfRCwgLUVTQ19FLCAgICAgIDAsIC1FU0NfRywgICAvKiBAIC0gRyAqLwot
ICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAg
ICAgIDAsICAgLyogSCAtIE8gKi8KLS1FU0NfUCwgLUVTQ19RLCAgICAgIDAsIC1FU0NfUywgICAg
ICAwLCAgICAgIDAsICAgICAgMCwgLUVTQ19XLCAgIC8qIFAgLSBXICovCi0tRVNDX1gsICAgICAg
MCwgLUVTQ19aLCAgICAnWycsICAgJ1xcJywgICAgJ10nLCAgICAnXicsICAgICdfJywgICAvKiBY
IC0gXyAqLwotICAgJ2AnLCAgICAgIDcsIC1FU0NfYiwgICAgICAwLCAtRVNDX2QsICBFU0NfZSwg
IEVTQ19mLCAgICAgIDAsICAgLyogYCAtIGcgKi8KLSAgICAgMCwgICAgICAwLCAgICAgIDAsICAg
ICAgMCwgICAgICAwLCAgICAgIDAsICBFU0NfbiwgICAgICAwLCAgIC8qIGggLSBvICovCi0tRVND
X3AsICAgICAgMCwgIEVTQ19yLCAtRVNDX3MsICBFU0NfdGVlLCAgICAwLCAgICAgIDAsIC1FU0Nf
dywgICAvKiBwIC0gdyAqLwotICAgICAwLCAgICAgIDAsIC1FU0NfeiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeCAtIHogKi8KLX07Ci0KLSNlbHNlICAgICAg
ICAgLyogVGhpcyBpcyB0aGUgImFibm9ybWFsIiB0YWJsZSBmb3IgRUJDRElDIHN5c3RlbXMgKi8K
LXN0YXRpYyBjb25zdCBzaG9ydCBpbnQgZXNjYXBlc1tdID0gewotLyogIDQ4ICovICAgICAwLCAg
ICAgMCwgICAgICAwLCAgICAgJy4nLCAgICAnPCcsICAgJygnLCAgICAnKycsICAgICd8JywKLS8q
ICA1MCAqLyAgICcmJywgICAgIDAsICAgICAgMCwgICAgICAgMCwgICAgICAwLCAgICAgMCwgICAg
ICAwLCAgICAgIDAsCi0vKiAgNTggKi8gICAgIDAsICAgICAwLCAgICAnIScsICAgICAnJCcsICAg
ICcqJywgICAnKScsICAgICc7JywgICAgJ34nLAotLyogIDYwICovICAgJy0nLCAgICcvJywgICAg
ICAwLCAgICAgICAwLCAgICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgMCwKLS8qICA2OCAqLyAg
ICAgMCwgICAgIDAsICAgICd8JywgICAgICcsJywgICAgJyUnLCAgICdfJywgICAgJz4nLCAgICAn
PycsCi0vKiAgNzAgKi8gICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgIDAsICAgICAgMCwgICAg
IDAsICAgICAgMCwgICAgICAwLAotLyogIDc4ICovICAgICAwLCAgICdgJywgICAgJzonLCAgICAg
JyMnLCAgICAnQCcsICAnXCcnLCAgICAnPScsICAgICciJywKLS8qICA4MCAqLyAgICAgMCwgICAg
IDcsIC1FU0NfYiwgICAgICAgMCwgLUVTQ19kLCBFU0NfZSwgIEVTQ19mLCAgICAgIDAsCi0vKiAg
ODggKi8gICAgIDAsICAgICAwLCAgICAgIDAsICAgICAneycsICAgICAgMCwgICAgIDAsICAgICAg
MCwgICAgICAwLAotLyogIDkwICovICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgJ2wnLCAgICAg
IDAsIEVTQ19uLCAgICAgIDAsIC1FU0NfcCwKLS8qICA5OCAqLyAgICAgMCwgRVNDX3IsICAgICAg
MCwgICAgICd9JywgICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgIDAsCi0vKiAgQTAgKi8gICAg
IDAsICAgJ34nLCAtRVNDX3MsIEVTQ190ZWUsICAgICAgMCwgICAgIDAsIC1FU0NfdywgICAgICAw
LAotLyogIEE4ICovICAgICAwLC1FU0NfeiwgICAgICAwLCAgICAgICAwLCAgICAgIDAsICAgJ1sn
LCAgICAgIDAsICAgICAgMCwKLS8qICBCMCAqLyAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAg
MCwgICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgIDAsCi0vKiAgQjggKi8gICAgIDAsICAgICAw
LCAgICAgIDAsICAgICAgIDAsICAgICAgMCwgICAnXScsICAgICc9JywgICAgJy0nLAotLyogIEMw
ICovICAgJ3snLC1FU0NfQSwgLUVTQ19CLCAgLUVTQ19DLCAtRVNDX0QsLUVTQ19FLCAgICAgIDAs
IC1FU0NfRywKLS8qICBDOCAqLyAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAgMCwgICAgICAw
LCAgICAgMCwgICAgICAwLCAgICAgIDAsCi0vKiAgRDAgKi8gICAnfScsICAgICAwLCAgICAgIDAs
ICAgICAgIDAsICAgICAgMCwgICAgIDAsICAgICAgMCwgLUVTQ19QLAotLyogIEQ4ICovLUVTQ19R
LCAgICAgMCwgICAgICAwLCAgICAgICAwLCAgICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgMCwK
LS8qICBFMCAqLyAgJ1xcJywgICAgIDAsIC1FU0NfUywgICAgICAgMCwgICAgICAwLCAgICAgMCwg
LUVTQ19XLCAtRVNDX1gsCi0vKiAgRTggKi8gICAgIDAsLUVTQ19aLCAgICAgIDAsICAgICAgIDAs
ICAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAwLAotLyogIEYwICovICAgICAwLCAgICAgMCwg
ICAgICAwLCAgICAgICAwLCAgICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgMCwKLS8qICBGOCAq
LyAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAgMCwgICAgICAwLCAgICAgMCwgICAgICAwLCAg
ICAgIDAKLX07Ci0jZW5kaWYKLSNlbmRpZgotCi0KLSNpZiAhSkFWQVNDUklQVAotCi0vKiBUYWJs
ZXMgb2YgbmFtZXMgb2YgUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMgYW5kIHRoZWlyIGxlbmd0aHMu
IFRoZSBsaXN0IGlzCi10ZXJtaW5hdGVkIGJ5IGEgemVybyBsZW5ndGggZW50cnkuIFRoZSBmaXJz
dCB0aHJlZSBtdXN0IGJlIGFscGhhLCBsb3dlciwgdXBwZXIsCi1hcyB0aGlzIGlzIGFzc3VtZWQg
Zm9yIGhhbmRsaW5nIGNhc2UgaW5kZXBlbmRlbmNlLiAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAq
Y29uc3QgcG9zaXhfbmFtZXNbXSA9IHsKLSAgImFscGhhIiwgImxvd2VyIiwgInVwcGVyIiwKLSAg
ImFsbnVtIiwgImFzY2lpIiwgImJsYW5rIiwgImNudHJsIiwgImRpZ2l0IiwgImdyYXBoIiwKLSAg
InByaW50IiwgInB1bmN0IiwgInNwYWNlIiwgIndvcmQiLCAgInhkaWdpdCIgfTsKLQotc3RhdGlj
IGNvbnN0IHVzY2hhciBwb3NpeF9uYW1lX2xlbmd0aHNbXSA9IHsKLSAgNSwgNSwgNSwgNSwgNSwg
NSwgNSwgNSwgNSwgNSwgNSwgNSwgNCwgNiwgMCB9OwotCi0vKiBUYWJsZSBvZiBjbGFzcyBiaXQg
bWFwcyBmb3IgZWFjaCBQT1NJWCBjbGFzcy4gRWFjaCBjbGFzcyBpcyBmb3JtZWQgZnJvbSBhCi1i
YXNlIG1hcCwgd2l0aCBhbiBvcHRpb25hbCBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGFub3RoZXIg
bWFwLiBUaGVuLCBmb3Igc29tZQotY2xhc3NlcywgdGhlcmUgaXMgc29tZSBhZGRpdGlvbmFsIHR3
ZWFraW5nOiBmb3IgWzpibGFuazpdIHRoZSB2ZXJ0aWNhbCBzcGFjZQotY2hhcmFjdGVycyBhcmUg
cmVtb3ZlZCwgYW5kIGZvciBbOmFscGhhOl0gYW5kIFs6YWxudW06XSB0aGUgdW5kZXJzY29yZQot
Y2hhcmFjdGVyIGlzIHJlbW92ZWQuIFRoZSB0cmlwbGVzIGluIHRoZSB0YWJsZSBjb25zaXN0IG9m
IHRoZSBiYXNlIG1hcCBvZmZzZXQsCi1zZWNvbmQgbWFwIG9mZnNldCBvciAtMSBpZiBubyBzZWNv
bmQgbWFwLCBhbmQgYSBub24tbmVnYXRpdmUgdmFsdWUgZm9yIG1hcAotYWRkaXRpb24gb3IgYSBu
ZWdhdGl2ZSB2YWx1ZSBmb3IgbWFwIHN1YnRyYWN0aW9uIChpZiB0aGVyZSBhcmUgdHdvIG1hcHMp
LiBUaGUKLWFic29sdXRlIHZhbHVlIG9mIHRoZSB0aGlyZCBmaWVsZCBoYXMgdGhlc2UgbWVhbmlu
Z3M6IDAgPT4gbm8gdHdlYWtpbmcsIDEgPT4KLXJlbW92ZSB2ZXJ0aWNhbCBzcGFjZSBjaGFyYWN0
ZXJzLCAyID0+IHJlbW92ZSB1bmRlcnNjb3JlLiAqLwotCi1zdGF0aWMgY29uc3QgaW50IHBvc2l4
X2NsYXNzX21hcHNbXSA9IHsKLSAgY2JpdF93b3JkLCAgY2JpdF9kaWdpdCwgLTIsICAgICAgICAg
ICAgIC8qIGFscGhhICovCi0gIGNiaXRfbG93ZXIsIC0xLCAgICAgICAgICAwLCAgICAgICAgICAg
ICAvKiBsb3dlciAqLwotICBjYml0X3VwcGVyLCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAg
LyogdXBwZXIgKi8KLSAgY2JpdF93b3JkLCAgLTEsICAgICAgICAgIDIsICAgICAgICAgICAgIC8q
IGFsbnVtIC0gd29yZCB3aXRob3V0IHVuZGVyc2NvcmUgKi8KLSAgY2JpdF9wcmludCwgY2JpdF9j
bnRybCwgIDAsICAgICAgICAgICAgIC8qIGFzY2lpICovCi0gIGNiaXRfc3BhY2UsIC0xLCAgICAg
ICAgICAxLCAgICAgICAgICAgICAvKiBibGFuayAtIGEgR05VIGV4dGVuc2lvbiAqLwotICBjYml0
X2NudHJsLCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAgLyogY250cmwgKi8KLSAgY2JpdF9k
aWdpdCwgLTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIGRpZ2l0ICovCi0gIGNiaXRfZ3Jh
cGgsIC0xLCAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBncmFwaCAqLwotICBjYml0X3ByaW50
LCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAgLyogcHJpbnQgKi8KLSAgY2JpdF9wdW5jdCwg
LTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIHB1bmN0ICovCi0gIGNiaXRfc3BhY2UsIC0x
LCAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBzcGFjZSAqLwotICBjYml0X3dvcmQsICAtMSwg
ICAgICAgICAgMCwgICAgICAgICAgICAgLyogd29yZCAtIGEgUGVybCBleHRlbnNpb24gKi8KLSAg
Y2JpdF94ZGlnaXQsLTEsICAgICAgICAgIDAgICAgICAgICAgICAgIC8qIHhkaWdpdCAqLwotfTsK
LQotI2VuZGlmCiAKIAogLyogVGhlIHRleHRzIG9mIGNvbXBpbGUtdGltZSBlcnJvciBtZXNzYWdl
cy4gVGhlc2UgYXJlICJjaGFyICoiIGJlY2F1c2UgdGhleQpAQCAtMjQxLDExICsxNDcsNyBAQCBz
dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVycm9yX3RleHRzW10gCiAgICJ1bnJlY29nbml6ZWQg
Y2hhcmFjdGVyIGFmdGVyICg/UCIsCiAgICJzeW50YXggZXJyb3IgYWZ0ZXIgKD9QIiwKICAgInR3
byBuYW1lZCBncm91cHMgaGF2ZSB0aGUgc2FtZSBuYW1lIiwKLSNpZiBQQ1JFX1VURjE2CiAgICJp
bnZhbGlkIFVURi0xNiBzdHJpbmciLAotI2Vsc2UKLSAgImludmFsaWQgVVRGLTggc3RyaW5nIiwK
LSNlbmRpZgogICAvKiA0NSAqLwogICAic3VwcG9ydCBmb3IgXFxQLCBcXHAsIGFuZCBcXFggaGFz
IG5vdCBiZWVuIGNvbXBpbGVkIiwKICAgIm1hbGZvcm1lZCBcXFAgb3IgXFxwIHNlcXVlbmNlIiwK
QEAgLTI2OSw3ICsxNzEsNiBAQCBGb3IgY29udmVuaWVuY2UsIHdlIHVzZSB0aGUgc2FtZSBiaXQg
ZGVmCiAKIFRoZW4gd2UgY2FuIHVzZSBjdHlwZV9kaWdpdCBhbmQgY3R5cGVfeGRpZ2l0IGluIHRo
ZSBjb2RlLiAqLwogCi0jaWYgIUVCQ0RJQyAgICAvKiBUaGlzIGlzIHRoZSAibm9ybWFsIiBjYXNl
LCBmb3IgQVNDSUkgc3lzdGVtcyAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnaXRh
YltdID0KICAgewogICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8q
ICAgMC0gIDcgKi8KQEAgLTMwNSw4MiArMjA2LDExIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGRpZ2l0YWJbXSA9CiAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw
MCwgLyogMjQwLTI0NyAqLwogICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4
MDB9Oy8qIDI0OC0yNTUgKi8KIAotI2Vsc2UgICAgICAgICAgLyogVGhpcyBpcyB0aGUgImFibm9y
bWFsIiBjYXNlLCBmb3IgRUJDRElDIHN5c3RlbXMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGRpZ2l0YWJbXSA9Ci0gIHsKLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw
MCwweDAwLCAvKiAgIDAtICA3ICAwICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw
LDB4MDAsMHgwMCwgLyogICA4LSAxNSAgICAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwweDAwLDB4MDAsIC8qICAxNi0gMjMgMTAgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCww
eDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgMjQtIDMxICAgICovCi0gIDB4MDAsMHgwMCwweDAwLDB4
MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIDMyLSAzOSAyMCAqLwotICAweDAwLDB4MDAsMHgw
MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICA0MC0gNDcgICAgKi8KLSAgMHgwMCwweDAw
LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgNDgtIDU1IDMwICovCi0gIDB4MDAs
MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIDU2LSA2MyAgICAqLwotICAw
eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICAgIC0gNzEgNDAgKi8K
LSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgNzItIHwgICAg
ICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogICYgLSA4
NyA1MCAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICA4
OC0gMHhBQyAgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAv
KiAgLSAtMTAzIDYwICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw
MCwgLyogMTA0LSA/ICAgICAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw
LDB4MDAsIC8qIDExMi0xMTkgNzAgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwweDAwLCAvKiAxMjAtICIgICAgICovCi0gIDB4MDAsMHgwOCwweDA4LDB4MDgsMHgwOCww
eDA4LDB4MDgsMHgwMCwgLyogMTI4LSBnICA4MCAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4
MDAsMHgwMCwweDAwLDB4MDAsIC8qICBoIC0xNDMgICAgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgw
MCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxNDQtIHAgIDkwICovCi0gIDB4MDAsMHgwMCwweDAw
LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIHEgLTE1OSAgICAqLwotICAweDAwLDB4MDAs
MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE2MC0geCAgQTAgKi8KLSAgMHgwMCww
eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgeSAtMTc1ICAgICovCi0gIDB4
MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIF4gLTE4MyBCMCAqLwot
ICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE4NC0xOTEgICAg
Ki8KLSAgMHgwMCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDAwLCAvKiAgeyAtIEcg
IEMwICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIEgg
LTIwNyAgICAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8q
ICB9IC0gUCAgRDAgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw
LCAvKiAgUSAtMjIzICAgICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwgLyogIFwgLSBYICBFMCAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww
eDAwLDB4MDAsIC8qICBZIC0yMzkgICAgKi8KLSAgMHgwYywweDBjLDB4MGMsMHgwYywweDBjLDB4
MGMsMHgwYywweDBjLCAvKiAgMCAtIDcgIEYwICovCi0gIDB4MGMsMHgwYywweDAwLDB4MDAsMHgw
MCwweDAwLDB4MDAsMHgwMH07LyogIDggLTI1NSAgICAqLwotCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBlYmNkaWNfY2hhcnRhYltdID0geyAvKiBjaGFydGFibGUgcGFydGlhbCBkdXAgKi8K
LSAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLCAvKiAgIDAtICA3ICov
Ci0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAxLDB4MDAsMHgwMCwgLyogICA4LSAxNSAq
LwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsIC8qICAxNi0gMjMg
Ki8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgMjQtIDMx
ICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwgLyogIDMyLSAz
OSAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICA0MC0g
NDcgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgNDgt
IDU1ICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIDU2
LSA2MyAqLwotICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICAg
IC0gNzEgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ODAsMHg4MCwweDgwLCAvKiAg
NzItIHwgICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyog
ICYgLSA4NyAqLwotICAweDAwLDB4MDAsMHgwMCwweDgwLDB4ODAsMHg4MCwweDAwLDB4MDAsIC8q
ICA4OC0gMHhBQyAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
IC8qICAtIC0xMDMgKi8KLSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDgw
LCAvKiAxMDQtID8gICovCi0gIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw
MCwgLyogMTEyLTExOSAqLwotICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4
MDAsIC8qIDEyMC0gIiAgKi8KLSAgMHgwMCwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxYSww
eDEyLCAvKiAxMjgtIGcgICovCi0gIDB4MTIsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwgLyogIGggLTE0MyAqLwotICAweDAwLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEy
LDB4MTIsIC8qIDE0NC0gcCAgKi8KLSAgMHgxMiwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw
MCwweDAwLCAvKiAgcSAtMTU5ICovCi0gIDB4MDAsMHgwMCwweDEyLDB4MTIsMHgxMiwweDEyLDB4
MTIsMHgxMiwgLyogMTYwLSB4ICAqLwotICAweDEyLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCww
eDAwLDB4MDAsIC8qICB5IC0xNzUgKi8KLSAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwweDAwLCAvKiAgXiAtMTgzICovCi0gIDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAw
LDB4MDAsMHgwMCwgLyogMTg0LTE5MSAqLwotICAweDgwLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgx
YSwweDFhLDB4MTIsIC8qICB7IC0gRyAgKi8KLSAgMHgxMiwweDEyLDB4MDAsMHgwMCwweDAwLDB4
MDAsMHgwMCwweDAwLCAvKiAgSCAtMjA3ICovCi0gIDB4MDAsMHgxMiwweDEyLDB4MTIsMHgxMiww
eDEyLDB4MTIsMHgxMiwgLyogIH0gLSBQICAqLwotICAweDEyLDB4MTIsMHgwMCwweDAwLDB4MDAs
MHgwMCwweDAwLDB4MDAsIC8qICBRIC0yMjMgKi8KLSAgMHgwMCwweDAwLDB4MTIsMHgxMiwweDEy
LDB4MTIsMHgxMiwweDEyLCAvKiAgXCAtIFggICovCi0gIDB4MTIsMHgxMiwweDAwLDB4MDAsMHgw
MCwweDAwLDB4MDAsMHgwMCwgLyogIFkgLTIzOSAqLwotICAweDFjLDB4MWMsMHgxYywweDFjLDB4
MWMsMHgxYywweDFjLDB4MWMsIC8qICAwIC0gNyAgKi8KLSAgMHgxYywweDFjLDB4MDAsMHgwMCww
eDAwLDB4MDAsMHgwMCwweDAwfTsvKiAgOCAtMjU1ICovCi0jZW5kaWYKLQogCiAvKiBEZWZpbml0
aW9uIHRvIGFsbG93IG11dHVhbCByZWN1cnNpb24gKi8KIAogc3RhdGljIEJPT0wKLSAgY29tcGls
ZV9yZWdleChpbnQsIGludCwgaW50ICosIHVzY2hhciAqKiwgY29uc3QgcGNyZV91Y2hhciAqKiwg
Y29uc3QgcGNyZV91Y2hhciAqLCBpbnQgKiwgQk9PTCwgaW50LAorICBjb21waWxlX3JlZ2V4KGlu
dCwgaW50ICosIHVzY2hhciAqKiwgY29uc3QgcGNyZV91Y2hhciAqKiwgY29uc3QgcGNyZV91Y2hh
ciAqLCBpbnQgKiwgaW50LAogICAgIGludCAqLCBpbnQgKiwgYnJhbmNoX2NoYWluICosIGNvbXBp
bGVfZGF0YSAqKTsKIAogCkBAIC00MDksOSArMjM5LDggQEAgUmV0dXJuczogICAgICAgICB6ZXJv
IG9yIHBvc2l0aXZlID0+IGEgZAogCiBzdGF0aWMgaW50CiBjaGVja19lc2NhcGUoY29uc3QgcGNy
ZV91Y2hhciAqKnB0cnB0ciwgY29uc3QgcGNyZV91Y2hhciAqcGF0dGVybkVuZCwgaW50ICplcnJv
cmNvZGVwdHIsIGludCBicmFjb3VudCwKLSAgaW50IG9wdGlvbnMsIEJPT0wgaXNjbGFzcykKKyAg
Qk9PTCBpc2NsYXNzKQogewotQk9PTCB1dGY4ID0gKG9wdGlvbnMgJiBQQ1JFX1VURjgpICE9IDA7
CiBjb25zdCBwY3JlX3VjaGFyICpwdHIgPSAqcHRycHRyICsgMTsKIGludCBjLCBpOwogCkBAIC00
MzAsMTUgKzI1OSw5IEBAIGlmICgwKSB7IH0gLyogTWF0Y2hlcyB3aXRoIGVsc2UgYmVsb3c7IHQK
IGEgdGFibGUuIEEgbm9uLXplcm8gcmVzdWx0IGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXR1
cm5lZCBpbW1lZGlhdGVseS4KIE90aGVyd2lzZSBmdXJ0aGVyIHByb2Nlc3NpbmcgbWF5IGJlIHJl
cXVpcmVkLiAqLwogCi0jaWYgIUVCQ0RJQyAgICAvKiBBU0NJSSBjb2RpbmcgKi8KIGVsc2UgaWYg
KGMgPCAnMCcgfHwgYyA+ICd6Jykge30gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qg
YWxwaGFtZXJpYyAqLwogZWxzZSBpZiAoKGkgPSBlc2NhcGVzW2MgLSAnMCddKSAhPSAwKSBjID0g
aTsKIAotI2Vsc2UgICAgICAgICAgLyogRUJDRElDIGNvZGluZyAqLwotZWxzZSBpZiAoYyA8ICdh
JyB8fCAoZWJjZGljX2NoYXJ0YWJbY10gJiAweDBFKSA9PSAwKSB7fSAgIC8qIE5vdCBhbHBoYW1l
cmljICovCi1lbHNlIGlmICgoaSA9IGVzY2FwZXNbYyAtIDB4NDhdKSAhPSAwKSAgYyA9IGk7Ci0j
ZW5kaWYKLQogLyogRXNjYXBlcyB0aGF0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nLCBvciBhcmUg
aWxsZWdhbC4gKi8KIAogZWxzZQpAQCAtNDQ5LDE2ICsyNzIsNiBAQCBlbHNlCiAgICAgLyogQSBu
dW1iZXIgb2YgUGVybCBlc2NhcGVzIGFyZSBub3QgaGFuZGxlZCBieSBQQ1JFLiBXZSBnaXZlIGFu
IGV4cGxpY2l0CiAgICAgZXJyb3IuICovCiAKLSNpZiAhSkFWQVNDUklQVAotICAgIGNhc2UgJ2wn
OgotICAgIGNhc2UgJ0wnOgotICAgIGNhc2UgJ04nOgotICAgIGNhc2UgJ3UnOgotICAgIGNhc2Ug
J1UnOgotICAgICplcnJvcmNvZGVwdHIgPSBFUlIzNzsKLSAgICBicmVhazsKLSNlbmRpZgotCiAg
ICAgLyogVGhlIGhhbmRsaW5nIG9mIGVzY2FwZSBzZXF1ZW5jZXMgY29uc2lzdGluZyBvZiBhIHN0
cmluZyBvZiBkaWdpdHMKICAgICBzdGFydGluZyB3aXRoIG9uZSB0aGF0IGlzIG5vdCB6ZXJvIGlz
IG5vdCBzdHJhaWdodGZvcndhcmQuIEJ5IGV4cGVyaW1lbnQsCiAgICAgdGhlIHdheSBQZXJsIHdv
cmtzIHNlZW1zIHRvIGJlIGFzIGZvbGxvd3M6CkBAIC01MjYsMTggKzMzOSwxMyBAQCBlbHNlCiAg
ICAgICAgIGlmIChjID09IDAgJiYgY2MgPT0gJzAnKSBjb250aW51ZTsgICAgIC8qIExlYWRpbmcg
emVyb2VzICovCiAgICAgICAgIGNvdW50Kys7CiAKLSNpZiAhRUJDRElDICAgIC8qIEFTQ0lJIGNv
ZGluZyAqLwogICAgICAgICBpZiAoY2MgPj0gJ2EnKSBjYyAtPSAzMjsgICAgICAgICAgICAgICAv
KiBDb252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KICAgICAgICAgYyA9IChjIDw8IDQpICsgY2MgLSAo
KGNjIDwgJ0EnKT8gJzAnIDogKCdBJyAtIDEwKSk7Ci0jZWxzZSAgICAgICAgICAvKiBFQkNESUMg
Y29kaW5nICovCi0gICAgICAgIGlmIChjYyA+PSAnYScgJiYgY2MgPD0gJ3onKSBjYyArPSA2NDsg
IC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZSAqLwotICAgICAgICBjID0gKGMgPDwgNCkgKyBjYyAt
ICgoY2MgPj0gJzAnKT8gJzAnIDogKCdBJyAtIDEwKSk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAg
ICAgICBpZiAocHQgPCBwYXR0ZXJuRW5kICYmICpwdCA9PSAnfScpCiAgICAgICAgIHsKLSAgICAg
ICAgaWYgKGMgPCAwIHx8IGNvdW50ID4gKHV0Zjg/IDggOiAyKSkgKmVycm9yY29kZXB0ciA9IEVS
UjM0OworICAgICAgICBpZiAoYyA8IDAgfHwgY291bnQgPiA4KSAqZXJyb3Jjb2RlcHRyID0gRVJS
MzQ7CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSAqZXJyb3Jj
b2RlcHRyID0gRVJSMzQ7IC8vIGhhbGYgb2Ygc3Vycm9nYXRlIHBhaXIKICAgICAgICAgZWxzZSBp
ZiAoYyA+PSAweEZERDAgJiYgYyA8PSAweEZERUYpICplcnJvcmNvZGVwdHIgPSBFUlIzNDsgLy8g
PwogICAgICAgICBlbHNlIGlmIChjID09IDB4RkZGRSkgKmVycm9yY29kZXB0ciA9IEVSUjM0OyAv
LyBub3QgYSBjaGFyYWN0ZXIKQEAgLTU1OCwxNyArMzY2LDExIEBAIGVsc2UKICAgICAgIHsKICAg
ICAgIGludCBjYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU29tZSBjb21waWxl
cnMgZG9uJ3QgbGlrZSArKyAqLwogICAgICAgY2MgPSAqKCsrcHRyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBpbiBpbml0aWFsaXplcnMgKi8KLSNpZiAhRUJDRElDICAgIC8qIEFTQ0lJIGNv
ZGluZyAqLwogICAgICAgaWYgKGNjID49ICdhJykgY2MgLT0gMzI7ICAgICAgICAgICAgICAvKiBD
b252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KICAgICAgIGMgPSBjICogMTYgKyBjYyAtICgoY2MgPCAn
QScpPyAnMCcgOiAoJ0EnIC0gMTApKTsKLSNlbHNlICAgICAgICAgIC8qIEVCQ0RJQyBjb2Rpbmcg
Ki8KLSAgICAgIGlmIChjYyA8PSAneicpIGNjICs9IDY0OyAgICAgICAgICAgICAgLyogQ29udmVy
dCB0byB1cHBlciBjYXNlICovCi0gICAgICBjID0gYyAqIDE2ICsgY2MgLSAoKGNjID49ICcwJyk/
ICcwJyA6ICgnQScgLSAxMCkpOwotI2VuZGlmCiAgICAgICB9CiAgICAgYnJlYWs7CiAKLSNpZiBK
QVZBU0NSSVBUCiAgICAgY2FzZSAndSc6IHsKICAgICBjb25zdCBwY3JlX3VjaGFyICpwdCA9IHB0
cjsKICAgICBjID0gMDsKQEAgLTU5MSw3ICszOTMsNiBAQCBlbHNlCiAgICAgcHRyID0gcHQ7CiAg
ICAgYnJlYWs7CiAgICAgfQotI2VuZGlmCiAKICAgICAvKiBPdGhlciBzcGVjaWFsIGVzY2FwZXMg
bm90IHN0YXJ0aW5nIHdpdGggYSBkaWdpdCBhcmUgc3RyYWlnaHRmb3J3YXJkICovCiAKQEAgLTYw
NywyOCArNDA4LDExIEBAIGVsc2UKICAgICBpcyBBU0NJSS1zcGVjaWZpYywgYnV0IHRoZW4gdGhl
IHdob2xlIGNvbmNlcHQgb2YgXGN4IGlzIEFTQ0lJLXNwZWNpZmljLgogICAgIChIb3dldmVyLCBh
biBFQkNESUMgZXF1aXZhbGVudCBoYXMgbm93IGJlZW4gYWRkZWQuKSAqLwogCi0jaWYgIUVCQ0RJ
QyAgICAvKiBBU0NJSSBjb2RpbmcgKi8KICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpIGMg
LT0gMzI7CiAgICAgYyBePSAweDQwOwotI2Vsc2UgICAgICAgICAgLyogRUJDRElDIGNvZGluZyAq
LwotICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykgYyArPSA2NDsKLSAgICBjIF49IDB4QzA7
Ci0jZW5kaWYKICAgICBicmVhazsKIAotICAgIC8qIFBDUkVfRVhUUkEgZW5hYmxlcyBleHRlbnNp
b25zIHRvIFBlcmwgaW4gdGhlIG1hdHRlciBvZiBlc2NhcGVzLiBBbnkKLSAgICBvdGhlciBhbHBo
YW1lcmljIGZvbGxvd2luZyBcIGlzIGFuIGVycm9yIGlmIFBDUkVfRVhUUkEgd2FzIHNldDsgb3Ro
ZXJ3aXNlLAotICAgIGZvciBQZXJsIGNvbXBhdGliaWxpdHksIGl0IGlzIGEgbGl0ZXJhbC4gVGhp
cyBjb2RlIGxvb2tzIGEgYml0IG9kZCwgYnV0Ci0gICAgdGhlcmUgdXNlZCB0byBiZSBzb21lIGNh
c2VzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQsIGFuZCB0aGVyZSBtYXkgYmUgYWdhaW4KLSAgICBp
biBmdXR1cmUsIHNvIEkgaGF2ZW4ndCAib3B0aW1pemVkIiBpdC4gKi8KLQogICAgIGRlZmF1bHQ6
Ci0gICAgaWYgKChvcHRpb25zICYgUENSRV9FWFRSQSkgIT0gMCkgc3dpdGNoKGMpCi0gICAgICB7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjM7Ci0gICAgICBicmVh
azsKLSAgICAgIH0KICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTYzOSwxMDEgKzQyMyw2IEBA
IHJldHVybiBjOwogCiAKIAotI2lmICFKQVZBU0NSSVBUCi0jaWZkZWYgU1VQUE9SVF9VQ1AKLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAg
ICAgICAgICAgSGFuZGxlIFxQIGFuZCBccCAgICAgICAgICAgICAgICAgKgotKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgYWZ0ZXIgXFAgb3IgXHAgaGFzIGJlZW4gZW5jb3VudGVyZWQsIHByb3ZpZGVk
IHRoYXQKLVBDUkUgaXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBVbmljb2RlIHByb3BlcnRp
ZXMuIE9uIGVudHJ5LCBwdHJwdHIgaXMKLXBvaW50aW5nIGF0IHRoZSBQIG9yIHAuIE9uIGV4aXQs
IGl0IGlzIHBvaW50aW5nIGF0IHRoZSBmaW5hbCBjaGFyYWN0ZXIgb2YgdGhlCi1lc2NhcGUgc2Vx
dWVuY2UuCi0KLUFyZ3VtZW50OgotICBwdHJwdHIgICAgICAgICBwb2ludHMgdG8gdGhlIHBhdHRl
cm4gcG9zaXRpb24gcG9pbnRlcgotICBuZWdwdHIgICAgICAgICBwb2ludHMgdG8gYSBib29sZWFu
IHRoYXQgaXMgc2V0IFRSVUUgZm9yIG5lZ2F0aW9uIGVsc2UgRkFMU0UKLSAgZHB0ciAgICAgICAg
ICAgcG9pbnRzIHRvIGFuIGludCB0aGF0IGlzIHNldCB0byB0aGUgZGV0YWlsZWQgcHJvcGVydHkg
dmFsdWUKLSAgZXJyb3Jjb2RlcHRyICAgcG9pbnRzIHRvIHRoZSBlcnJvciBjb2RlIHZhcmlhYmxl
Ci0KLVJldHVybnM6ICAgICB2YWx1ZSBmcm9tIHVjcF90eXBlX3RhYmxlLCBvciAtMSBmb3IgYW4g
aW52YWxpZCB0eXBlCi0qLwotCi1zdGF0aWMgaW50Ci1nZXRfdWNwKGNvbnN0IHVzY2hhciAqKnB0
cnB0ciwgQk9PTCAqbmVncHRyLCBpbnQgKmRwdHIsIGludCAqZXJyb3Jjb2RlcHRyKQotewotaW50
IGMsIGksIGJvdCwgdG9wOwotY29uc3QgdXNjaGFyICpwdHIgPSAqcHRycHRyOwotY2hhciBuYW1l
WzMyXTsKLQotYyA9ICooKytwdHIpOwotaWYgKGMgPT0gMCkgZ290byBFUlJPUl9SRVRVUk47Ci0K
LSpuZWdwdHIgPSBGQUxTRTsKLQotLyogXFAgb3IgXHAgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgbmFt
ZSBpbiB7fSwgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBeIGZvcgotbmVnYXRpb24uICovCi0KLWlm
IChjID09ICd7JykKLSAgewotICBpZiAocHRyWzFdID09ICdeJykKLSAgICB7Ci0gICAgKm5lZ3B0
ciA9IFRSVUU7Ci0gICAgcHRyKys7Ci0gICAgfQotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG5h
bWUpIC0gMTsgaSsrKQotICAgIHsKLSAgICBjID0gKigrK3B0cik7Ci0gICAgaWYgKGMgPT0gMCkg
Z290byBFUlJPUl9SRVRVUk47Ci0gICAgaWYgKGMgPT0gJ30nKSBicmVhazsKLSAgICBuYW1lW2ld
ID0gYzsKLSAgICB9Ci0gIGlmIChjICE9J30nKSBnb3RvIEVSUk9SX1JFVFVSTjsKLSAgbmFtZVtp
XSA9IDA7Ci0gIH0KLQotLyogT3RoZXJ3aXNlIHRoZXJlIGlzIGp1c3Qgb25lIGZvbGxvd2luZyBj
aGFyYWN0ZXIgKi8KLQotZWxzZQotICB7Ci0gIG5hbWVbMF0gPSBjOwotICBuYW1lWzFdID0gMDsK
LSAgfQotCi0qcHRycHRyID0gcHRyOwotCi0vKiBTZWFyY2ggZm9yIGEgcmVjb2duaXplZCBwcm9w
ZXJ0eSBuYW1lIHVzaW5nIGJpbmFyeSBjaG9wICovCi0KLWJvdCA9IDA7Ci10b3AgPSBfcGNyZV91
dHRfc2l6ZTsKLQotd2hpbGUgKGJvdCA8IHRvcCkKLSAgewotICBpID0gKGJvdCArIHRvcCkgPj4g
MTsKLSAgYyA9IHN0cmNtcChuYW1lLCBfcGNyZV91dHRbaV0ubmFtZSk7Ci0gIGlmIChjID09IDAp
Ci0gICAgewotICAgICpkcHRyID0gX3BjcmVfdXR0W2ldLnZhbHVlOwotICAgIHJldHVybiBfcGNy
ZV91dHRbaV0udHlwZTsKLSAgICB9Ci0gIGlmIChjID4gMCkgYm90ID0gaSArIDE7IGVsc2UgdG9w
ID0gaTsKLSAgfQotCi0qZXJyb3Jjb2RlcHRyID0gRVJSNDc7Ci0qcHRycHRyID0gcHRyOwotcmV0
dXJuIC0xOwotCi1FUlJPUl9SRVRVUk46Ci0qZXJyb3Jjb2RlcHRyID0gRVJSNDY7Ci0qcHRycHRy
ID0gcHRyOwotcmV0dXJuIC0xOwotfQotI2VuZGlmCi0jZW5kaWYKLQotCi0KLQogLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICBD
aGVjayBmb3IgY291bnRlZCByZXBlYXQgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODU1LDMxICs1NDQsMTkgQEAgYXNz
ZXJ0aW9ucywgYW5kIGFsc28gdGhlIFxiIGFzc2VydGlvbjsgZgogCiBBcmd1bWVudHM6CiAgIGNv
ZGUgICAgICAgICBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZ3JvdXAKLSAgb3B0aW9ucyAg
ICAgIHBvaW50ZXIgdG8gZXh0ZXJuYWwgb3B0aW9ucwotICBvcHRiaXQgICAgICAgdGhlIG9wdGlv
biBiaXQgd2hvc2UgY2hhbmdpbmcgaXMgc2lnbmlmaWNhbnQsIG9yCi0gICAgICAgICAgICAgICAg
IHplcm8gaWYgbm9uZSBhcmUKICAgc2tpcGFzc2VydCAgIFRSVUUgaWYgY2VydGFpbiBhc3NlcnRp
b25zIGFyZSB0byBiZSBza2lwcGVkCiAKIFJldHVybnM6ICAgICAgIHBvaW50ZXIgdG8gdGhlIGZp
cnN0IHNpZ25pZmljYW50IG9wY29kZQogKi8KIAogc3RhdGljIGNvbnN0IHVzY2hhcioKLWZpcnN0
X3NpZ25pZmljYW50X2NvZGUoY29uc3QgdXNjaGFyICpjb2RlLCBpbnQgKm9wdGlvbnMsIGludCBv
cHRiaXQsCi0gIEJPT0wgc2tpcGFzc2VydCkKK2ZpcnN0X3NpZ25pZmljYW50X2NvZGUoY29uc3Qg
dXNjaGFyICpjb2RlLCBCT09MIHNraXBhc3NlcnQpCiB7CiBmb3IgKDs7KQogICB7CiAgIHN3aXRj
aCAoKGludCkqY29kZSkKICAgICB7Ci0gICAgY2FzZSBPUF9PUFQ6Ci0gICAgaWYgKG9wdGJpdCA+
IDAgJiYgKChpbnQpY29kZVsxXSAmIG9wdGJpdCkgIT0gKCpvcHRpb25zICYgb3B0Yml0KSkKLSAg
ICAgICpvcHRpb25zID0gKGludCljb2RlWzFdOwotICAgIGNvZGUgKz0gMjsKLSAgICBicmVhazsK
LQogICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKLSAgICBjYXNlIE9QX0FTU0VSVEJBQ0s6Ci0gICAg
Y2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKICAgICBpZiAoIXNraXBhc3NlcnQpIHJldHVybiBjb2Rl
OwogICAgIGRvIGNvZGUgKz0gR0VUKGNvZGUsIDEpOyB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsK
ICAgICBjb2RlICs9IF9wY3JlX09QX2xlbmd0aHNbKmNvZGVdOwpAQCAtODkwLDggKzU2Nyw2IEBA
IGZvciAoOzspCiAgICAgaWYgKCFza2lwYXNzZXJ0KSByZXR1cm4gY29kZTsKICAgICAvKiBGYWxs
IHRocm91Z2ggKi8KIAotICAgIGNhc2UgT1BfQ0FMTE9VVDoKLSAgICBjYXNlIE9QX0NSRUY6CiAg
ICAgY2FzZSBPUF9CUkFOVU1CRVI6CiAgICAgY29kZSArPSBfcGNyZV9PUF9sZW5ndGhzWypjb2Rl
XTsKICAgICBicmVhazsKQEAgLTk0Myw3ICs2MTgsNiBAQCBmb3IgKDs7KQogICAgIHsKICAgICBj
YXNlIE9QX0JSQToKICAgICBjYXNlIE9QX09OQ0U6Ci0gICAgY2FzZSBPUF9DT05EOgogICAgIGQg
PSBmaW5kX2ZpeGVkbGVuZ3RoKGNjLCBvcHRpb25zKTsKICAgICBpZiAoZCA8IDApIHJldHVybiBk
OwogICAgIGJyYW5jaGxlbmd0aCArPSBkOwpAQCAtOTcxLDIyICs2NDUsMTIgQEAgZm9yICg7OykK
IAogICAgIGNhc2UgT1BfQVNTRVJUOgogICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKLSAgICBjYXNl
IE9QX0FTU0VSVEJBQ0s6Ci0gICAgY2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKICAgICBkbyBjYyAr
PSBHRVQoY2MsIDEpOyB3aGlsZSAoKmNjID09IE9QX0FMVCk7CiAgICAgLyogRmFsbCB0aHJvdWdo
ICovCiAKICAgICAvKiBTa2lwIG92ZXIgdGhpbmdzIHRoYXQgZG9uJ3QgbWF0Y2ggY2hhcnMgKi8K
IAotICAgIGNhc2UgT1BfUkVWRVJTRToKICAgICBjYXNlIE9QX0JSQU5VTUJFUjoKLSAgICBjYXNl
IE9QX0NSRUY6Ci0gICAgY2FzZSBPUF9PUFQ6Ci0gICAgY2FzZSBPUF9DQUxMT1VUOgotICAgIGNh
c2UgT1BfU09EOgotICAgIGNhc2UgT1BfU09NOgotICAgIGNhc2UgT1BfRU9EOgotICAgIGNhc2Ug
T1BfRU9ETjoKICAgICBjYXNlIE9QX0NJUkM6CiAgICAgY2FzZSBPUF9ET0xMOgogICAgIGNhc2Ug
T1BfTk9UX1dPUkRfQk9VTkRBUlk6CkBAIC0xMDAwLDEyICs2NjQsNyBAQCBmb3IgKDs7KQogICAg
IGNhc2UgT1BfQ0hBUk5DOgogICAgIGJyYW5jaGxlbmd0aCsrOwogICAgIGNjICs9IDI7Ci0jaWZk
ZWYgU1VQUE9SVF9VVEY4Ci0gICAgaWYgKChvcHRpb25zICYgUENSRV9VVEY4KSAhPSAwKQotICAg
ICAgewogICAgICAgd2hpbGUgKCgqY2MgJiAweGMwKSA9PSAweDgwKSBjYysrOwotICAgICAgfQot
I2VuZGlmCiAgICAgYnJlYWs7CiAKICAgICAvKiBIYW5kbGUgZXhhY3QgcmVwZXRpdGlvbnMuIFRo
ZSBjb3VudCBpcyBhbHJlYWR5IGluIGNoYXJhY3RlcnMsIGJ1dCB3ZQpAQCAtMTAxNCwxMiArNjcz
LDcgQEAgZm9yICg7OykKICAgICBjYXNlIE9QX0VYQUNUOgogICAgIGJyYW5jaGxlbmd0aCArPSBH
RVQyKGNjLDEpOwogICAgIGNjICs9IDQ7Ci0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgaWYgKChv
cHRpb25zICYgUENSRV9VVEY4KSAhPSAwKQotICAgICAgewogICAgICAgd2hpbGUoKCpjYyAmIDB4
ODApID09IDB4ODApIGNjKys7Ci0gICAgICB9Ci0jZW5kaWYKICAgICBicmVhazsKIAogICAgIGNh
c2UgT1BfVFlQRUVYQUNUOgpAQCAtMTAyOSwxMSArNjgzLDYgQEAgZm9yICg7OykKIAogICAgIC8q
IEhhbmRsZSBzaW5nbGUtY2hhciBtYXRjaGVycyAqLwogCi0gICAgY2FzZSBPUF9QUk9QOgotICAg
IGNhc2UgT1BfTk9UUFJPUDoKLSAgICBjYyArPSAyOwotICAgIC8qIEZhbGwgdGhyb3VnaCAqLwot
CiAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CiAgICAgY2FzZSBPUF9ESUdJVDoKICAgICBjYXNlIE9Q
X05PVF9XSElURVNQQUNFOgpAQCAtMTA0NSwxOCArNjk0LDExIEBAIGZvciAoOzspCiAgICAgY2Mr
KzsKICAgICBicmVhazsKIAotICAgIC8qIFRoZSBzaW5nbGUtYnl0ZSBtYXRjaGVyIGlzbid0IGFs
bG93ZWQgKi8KLQotICAgIGNhc2UgT1BfQU5ZQllURToKLSAgICByZXR1cm4gLTI7Ci0KICAgICAv
KiBDaGVjayBhIGNsYXNzIGZvciB2YXJpYWJsZSBxdWFudGlmaWNhdGlvbiAqLwogCi0jaWZkZWYg
U1VQUE9SVF9VVEY4CiAgICAgY2FzZSBPUF9YQ0xBU1M6CiAgICAgY2MgKz0gR0VUKGNjLCAxKSAt
IDMzOwogICAgIC8qIEZhbGwgdGhyb3VnaCAqLwotI2VuZGlmCiAKICAgICBjYXNlIE9QX0NMQVNT
OgogICAgIGNhc2UgT1BfTkNMQVNTOgpAQCAtMTA5NSwxNTcgKzczNyw2IEBAIGZvciAoOzspCiAK
IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSog
ICAgU2NhbiBjb21waWxlZCByZWdleCBmb3IgbnVtYmVyZWQgYnJhY2tldCAgICAqCi0qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGxp
dHRsZSBmdW5jdGlvbiBzY2FucyB0aHJvdWdoIGEgY29tcGlsZWQgcGF0dGVybiB1bnRpbCBpdCBm
aW5kcyBhCi1jYXB0dXJpbmcgYnJhY2tldCB3aXRoIHRoZSBnaXZlbiBudW1iZXIuCi0KLUFyZ3Vt
ZW50czoKLSAgY29kZSAgICAgICAgcG9pbnRzIHRvIHN0YXJ0IG9mIGV4cHJlc3Npb24KLSAgdXRm
OCAgICAgICAgVFJVRSBpbiBVVEYtOCBtb2RlCi0gIG51bWJlciAgICAgIHRoZSByZXF1aXJlZCBi
cmFja2V0IG51bWJlcgotCi1SZXR1cm5zOiAgICAgIHBvaW50ZXIgdG8gdGhlIG9wY29kZSBmb3Ig
dGhlIGJyYWNrZXQsIG9yIE5VTEwgaWYgbm90IGZvdW5kCi0qLwotCi0jaWYgIUpBVkFTQ1JJUFQK
LQotc3RhdGljIGNvbnN0IHVzY2hhciAqCi1maW5kX2JyYWNrZXQoY29uc3QgdXNjaGFyICpjb2Rl
LCBCT09MIHV0ZjgsIGludCBudW1iZXIpCi17Ci0jaWZuZGVmIFNVUFBPUlRfVVRGOAotdXRmOCA9
IHV0Zjg7ICAgICAgICAgICAgICAgLyogU3RvcCBwZWRhbnRpYyBjb21waWxlcnMgY29tcGxhaW5p
bmcgKi8KLSNlbmRpZgotCi1mb3IgKDs7KQotICB7Ci0gIHJlZ2lzdGVyIGludCBjID0gKmNvZGU7
Ci0gIGlmIChjID09IE9QX0VORCkgcmV0dXJuIE5VTEw7Ci0gIGVsc2UgaWYgKGMgPiBPUF9CUkEp
Ci0gICAgewotICAgIGludCBuID0gYyAtIE9QX0JSQTsKLSAgICBpZiAobiA+IEVYVFJBQ1RfQkFT
SUNfTUFYKSBuID0gR0VUMihjb2RlLCAyK0xJTktfU0laRSk7Ci0gICAgaWYgKG4gPT0gbnVtYmVy
KSByZXR1cm4gKHVzY2hhciAqKWNvZGU7Ci0gICAgY29kZSArPSBfcGNyZV9PUF9sZW5ndGhzW09Q
X0JSQV07Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgIGNvZGUgKz0gX3BjcmVfT1BfbGVuZ3Ro
c1tjXTsKLQotI2lmZGVmIFNVUFBPUlRfVVRGOAotCi0gICAgLyogSW4gVVRGLTggbW9kZSwgb3Bj
b2RlcyB0aGF0IGFyZSBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBtYXkgYmUgZm9sbG93ZWQKLSAg
ICBieSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiBUaGUgbGVuZ3RoIGluIHRoZSB0YWJsZSBpcyBh
IG1pbmltdW0sIHNvIHdlIGhhdmUKLSAgICB0byBzY2FuIGFsb25nIHRvIHNraXAgdGhlIGV4dHJh
IGJ5dGVzLiBBbGwgb3Bjb2RlcyBhcmUgbGVzcyB0aGFuIDEyOCwgc28gd2UKLSAgICBjYW4gdXNl
IHJlbGF0aXZlbHkgZWZmaWNpZW50IGNvZGUuICovCi0KLSAgICBpZiAodXRmOCkgc3dpdGNoKGMp
Ci0gICAgICB7Ci0gICAgICBjYXNlIE9QX0NIQVI6Ci0gICAgICBjYXNlIE9QX0NIQVJOQzoKLSAg
ICAgIGNhc2UgT1BfRVhBQ1Q6Ci0gICAgICBjYXNlIE9QX1VQVE86Ci0gICAgICBjYXNlIE9QX01J
TlVQVE86Ci0gICAgICBjYXNlIE9QX1NUQVI6Ci0gICAgICBjYXNlIE9QX01JTlNUQVI6Ci0gICAg
ICBjYXNlIE9QX1BMVVM6Ci0gICAgICBjYXNlIE9QX01JTlBMVVM6Ci0gICAgICBjYXNlIE9QX1FV
RVJZOgotICAgICAgY2FzZSBPUF9NSU5RVUVSWToKLSAgICAgIHdoaWxlICgoKmNvZGUgJiAweGMw
KSA9PSAweDgwKSBjb2RlKys7Ci0gICAgICBicmVhazsKLQotICAgICAgLyogWENMQVNTIGlzIHVz
ZWQgZm9yIGNsYXNzZXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQganVzdCBieSBhIGJpdAot
ICAgICAgbWFwLiBUaGlzIGluY2x1ZGVzIG5lZ2F0ZWQgc2luZ2xlIGhpZ2gtdmFsdWVkIGNoYXJh
Y3RlcnMuIFRoZSBsZW5ndGggaW4KLSAgICAgIHRoZSB0YWJsZSBpcyB6ZXJvOyB0aGUgYWN0dWFs
IGxlbmd0aCBpcyBzdG9yZWQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuICovCi0KLSAgICAgIGNhc2Ug
T1BfWENMQVNTOgotICAgICAgY29kZSArPSBHRVQoY29kZSwgMSkgKyAxOwotICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gIH0KLX0KLQotI2VuZGlmCi0KLQotCi0vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIFNjYW4gY29t
cGlsZWQgcmVnZXggZm9yIHJlY3Vyc2lvbiByZWZlcmVuY2UgICoKLSoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGl0dGxlIGZ1bmN0
aW9uIHNjYW5zIHRocm91Z2ggYSBjb21waWxlZCBwYXR0ZXJuIHVudGlsIGl0IGZpbmRzIGFuCi1p
bnN0YW5jZSBvZiBPUF9SRUNVUlNFLgotCi1Bcmd1bWVudHM6Ci0gIGNvZGUgICAgICAgIHBvaW50
cyB0byBzdGFydCBvZiBleHByZXNzaW9uCi0gIHV0ZjggICAgICAgIFRSVUUgaW4gVVRGLTggbW9k
ZQotCi1SZXR1cm5zOiAgICAgIHBvaW50ZXIgdG8gdGhlIG9wY29kZSBmb3IgT1BfUkVDVVJTRSwg
b3IgTlVMTCBpZiBub3QgZm91bmQKLSovCi0KLXN0YXRpYyBjb25zdCB1c2NoYXIgKgotZmluZF9y
ZWN1cnNlKGNvbnN0IHVzY2hhciAqY29kZSwgQk9PTCB1dGY4KQotewotI2lmbmRlZiBTVVBQT1JU
X1VURjgKLXV0ZjggPSB1dGY4OyAgICAgICAgICAgICAgIC8qIFN0b3AgcGVkYW50aWMgY29tcGls
ZXJzIGNvbXBsYWluaW5nICovCi0jZW5kaWYKLQotZm9yICg7OykKLSAgewotICByZWdpc3RlciBp
bnQgYyA9ICpjb2RlOwotICBpZiAoYyA9PSBPUF9FTkQpIHJldHVybiBOVUxMOwotICBlbHNlIGlm
IChjID09IE9QX1JFQ1VSU0UpIHJldHVybiBjb2RlOwotICBlbHNlIGlmIChjID4gT1BfQlJBKQot
ICAgIHsKLSAgICBjb2RlICs9IF9wY3JlX09QX2xlbmd0aHNbT1BfQlJBXTsKLSAgICB9Ci0gIGVs
c2UKLSAgICB7Ci0gICAgY29kZSArPSBfcGNyZV9PUF9sZW5ndGhzW2NdOwotCi0jaWZkZWYgU1VQ
UE9SVF9VVEY4Ci0KLSAgICAvKiBJbiBVVEYtOCBtb2RlLCBvcGNvZGVzIHRoYXQgYXJlIGZvbGxv
d2VkIGJ5IGEgY2hhcmFjdGVyIG1heSBiZSBmb2xsb3dlZAotICAgIGJ5IGEgbXVsdGktYnl0ZSBj
aGFyYWN0ZXIuIFRoZSBsZW5ndGggaW4gdGhlIHRhYmxlIGlzIGEgbWluaW11bSwgc28gd2UgaGF2
ZQotICAgIHRvIHNjYW4gYWxvbmcgdG8gc2tpcCB0aGUgZXh0cmEgYnl0ZXMuIEFsbCBvcGNvZGVz
IGFyZSBsZXNzIHRoYW4gMTI4LCBzbyB3ZQotICAgIGNhbiB1c2UgcmVsYXRpdmVseSBlZmZpY2ll
bnQgY29kZS4gKi8KLQotICAgIGlmICh1dGY4KSBzd2l0Y2goYykKLSAgICAgIHsKLSAgICAgIGNh
c2UgT1BfQ0hBUjoKLSAgICAgIGNhc2UgT1BfQ0hBUk5DOgotICAgICAgY2FzZSBPUF9FWEFDVDoK
LSAgICAgIGNhc2UgT1BfVVBUTzoKLSAgICAgIGNhc2UgT1BfTUlOVVBUTzoKLSAgICAgIGNhc2Ug
T1BfU1RBUjoKLSAgICAgIGNhc2UgT1BfTUlOU1RBUjoKLSAgICAgIGNhc2UgT1BfUExVUzoKLSAg
ICAgIGNhc2UgT1BfTUlOUExVUzoKLSAgICAgIGNhc2UgT1BfUVVFUlk6Ci0gICAgICBjYXNlIE9Q
X01JTlFVRVJZOgotICAgICAgd2hpbGUgKCgqY29kZSAmIDB4YzApID09IDB4ODApIGNvZGUrKzsK
LSAgICAgIGJyZWFrOwotCi0gICAgICAvKiBYQ0xBU1MgaXMgdXNlZCBmb3IgY2xhc3NlcyB0aGF0
IGNhbm5vdCBiZSByZXByZXNlbnRlZCBqdXN0IGJ5IGEgYml0Ci0gICAgICBtYXAuIFRoaXMgaW5j
bHVkZXMgbmVnYXRlZCBzaW5nbGUgaGlnaC12YWx1ZWQgY2hhcmFjdGVycy4gVGhlIGxlbmd0aCBp
bgotICAgICAgdGhlIHRhYmxlIGlzIHplcm87IHRoZSBhY3R1YWwgbGVuZ3RoIGlzIHN0b3JlZCBp
biB0aGUgY29tcGlsZWQgY29kZS4gKi8KLQotICAgICAgY2FzZSBPUF9YQ0xBU1M6Ci0gICAgICBj
b2RlICs9IEdFVChjb2RlLCAxKSArIDE7Ci0gICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLSAgfQotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKICogICAgU2NhbiBjb21waWxlZCBicmFuY2ggZm9yIG5vbi1lbXB0aW5l
c3MgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCkBAIC0xMjU4LDE4ICs3NDksMTcgQEAgd2hvc2UgY3VycmVudCBicmFuY2ggd2lsbCBh
bHJlYWR5IGhhdmUgYgogQXJndW1lbnRzOgogICBjb2RlICAgICAgICBwb2ludHMgdG8gc3RhcnQg
b2Ygc2VhcmNoCiAgIGVuZGNvZGUgICAgIHBvaW50cyB0byB3aGVyZSB0byBzdG9wCi0gIHV0Zjgg
ICAgICAgIFRSVUUgaWYgaW4gVVRGOCBtb2RlCiAKIFJldHVybnM6ICAgICAgVFJVRSBpZiB3aGF0
IGlzIG1hdGNoZWQgY291bGQgYmUgZW1wdHkKICovCiAKIHN0YXRpYyBCT09MCi1jb3VsZF9iZV9l
bXB0eV9icmFuY2goY29uc3QgdXNjaGFyICpjb2RlLCBjb25zdCB1c2NoYXIgKmVuZGNvZGUsIEJP
T0wgdXRmOCkKK2NvdWxkX2JlX2VtcHR5X2JyYW5jaChjb25zdCB1c2NoYXIgKmNvZGUsIGNvbnN0
IHVzY2hhciAqZW5kY29kZSkKIHsKIHJlZ2lzdGVyIGludCBjOwotZm9yIChjb2RlID0gZmlyc3Rf
c2lnbmlmaWNhbnRfY29kZShjb2RlICsgMSArIExJTktfU0laRSwgTlVMTCwgMCwgVFJVRSk7Citm
b3IgKGNvZGUgPSBmaXJzdF9zaWduaWZpY2FudF9jb2RlKGNvZGUgKyAxICsgTElOS19TSVpFLCBU
UlVFKTsKICAgICAgY29kZSA8IGVuZGNvZGU7Ci0gICAgIGNvZGUgPSBmaXJzdF9zaWduaWZpY2Fu
dF9jb2RlKGNvZGUgKyBfcGNyZV9PUF9sZW5ndGhzW2NdLCBOVUxMLCAwLCBUUlVFKSkKKyAgICAg
Y29kZSA9IGZpcnN0X3NpZ25pZmljYW50X2NvZGUoY29kZSArIF9wY3JlX09QX2xlbmd0aHNbY10s
IFRSVUUpKQogICB7CiAgIGNvbnN0IHVzY2hhciAqY2NvZGU7CiAKQEAgLTEyODUsNyArNzc1LDcg
QEAgZm9yIChjb2RlID0gZmlyc3Rfc2lnbmlmaWNhbnRfY29kZShjb2RlIAogICAgIGVtcHR5X2Jy
YW5jaCA9IEZBTFNFOwogICAgIGRvCiAgICAgICB7Ci0gICAgICBpZiAoIWVtcHR5X2JyYW5jaCAm
JiBjb3VsZF9iZV9lbXB0eV9icmFuY2goY29kZSwgZW5kY29kZSwgdXRmOCkpCisgICAgICBpZiAo
IWVtcHR5X2JyYW5jaCAmJiBjb3VsZF9iZV9lbXB0eV9icmFuY2goY29kZSwgZW5kY29kZSkpCiAg
ICAgICAgIGVtcHR5X2JyYW5jaCA9IFRSVUU7CiAgICAgICBjb2RlICs9IEdFVChjb2RlLCAxKTsK
ICAgICAgIH0KQEAgLTEyOTksMTkgKzc4OSwxNSBAQCBmb3IgKGNvZGUgPSBmaXJzdF9zaWduaWZp
Y2FudF9jb2RlKGNvZGUgCiAgICAgewogICAgIC8qIENoZWNrIGZvciBxdWFudGlmaWVycyBhZnRl
ciBhIGNsYXNzICovCiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKICAgICBjYXNlIE9QX1hDTEFTUzoK
ICAgICBjY29kZSA9IGNvZGUgKyBHRVQoY29kZSwgMSk7CiAgICAgZ290byBDSEVDS19DTEFTU19S
RVBFQVQ7Ci0jZW5kaWYKIAogICAgIGNhc2UgT1BfQ0xBU1M6CiAgICAgY2FzZSBPUF9OQ0xBU1M6
CiAgICAgY2NvZGUgPSBjb2RlICsgMzM7CiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKICAgICBDSEVD
S19DTEFTU19SRVBFQVQ6Ci0jZW5kaWYKIAogICAgIHN3aXRjaCAoKmNjb2RlKQogICAgICAgewpA
QCAtMTMzNSw5ICs4MjEsNiBAQCBmb3IgKGNvZGUgPSBmaXJzdF9zaWduaWZpY2FudF9jb2RlKGNv
ZGUgCiAKICAgICAvKiBPcGNvZGVzIHRoYXQgbXVzdCBtYXRjaCBhIGNoYXJhY3RlciAqLwogCi0g
ICAgY2FzZSBPUF9QUk9QOgotICAgIGNhc2UgT1BfTk9UUFJPUDoKLSAgICBjYXNlIE9QX0VYVFVO
SToKICAgICBjYXNlIE9QX05PVF9ESUdJVDoKICAgICBjYXNlIE9QX0RJR0lUOgogICAgIGNhc2Ug
T1BfTk9UX1dISVRFU1BBQ0U6CkBAIC0xMzQ1LDcgKzgyOCw2IEBAIGZvciAoY29kZSA9IGZpcnN0
X3NpZ25pZmljYW50X2NvZGUoY29kZSAKICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKICAgICBj
YXNlIE9QX1dPUkRDSEFSOgogICAgIGNhc2UgT1BfQU5ZOgotICAgIGNhc2UgT1BfQU5ZQllURToK
ICAgICBjYXNlIE9QX0NIQVI6CiAgICAgY2FzZSBPUF9DSEFSTkM6CiAgICAgY2FzZSBPUF9OT1Q6
CkBAIC0xMzcxLDE2ICs4NTMsMTQgQEAgZm9yIChjb2RlID0gZmlyc3Rfc2lnbmlmaWNhbnRfY29k
ZShjb2RlIAogICAgIC8qIEluIFVURi04IG1vZGUsIFNUQVIsIE1JTlNUQVIsIFFVRVJZLCBNSU5R
VUVSWSwgVVBUTywgYW5kIE1JTlVQVE8gIG1heSBiZQogICAgIGZvbGxvd2VkIGJ5IGEgbXVsdGli
eXRlIGNoYXJhY3RlciAqLwogCi0jaWZkZWYgU1VQUE9SVF9VVEY4CiAgICAgY2FzZSBPUF9TVEFS
OgogICAgIGNhc2UgT1BfTUlOU1RBUjoKICAgICBjYXNlIE9QX1FVRVJZOgogICAgIGNhc2UgT1Bf
TUlOUVVFUlk6CiAgICAgY2FzZSBPUF9VUFRPOgogICAgIGNhc2UgT1BfTUlOVVBUTzoKLSAgICBp
ZiAodXRmOCkgd2hpbGUgKChjb2RlWzJdICYgMHhjMCkgPT0gMHg4MCkgY29kZSsrOworICAgIHdo
aWxlICgoY29kZVsyXSAmIDB4YzApID09IDB4ODApIGNvZGUrKzsKICAgICBicmVhazsKLSNlbmRp
ZgogICAgIH0KICAgfQogCkBAIC0xMzkwLDE3MyArODcwLDYgQEAgcmV0dXJuIFRSVUU7CiAKIAog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAg
U2NhbiBjb21waWxlZCByZWdleCBmb3Igbm9uLWVtcHRpbmVzcyAgICAgICAqCi0qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB0byBjaGVjayBmb3IgbGVmdCByZWN1cnNpdmUgY2FsbHMuIFdlIHdhbnQg
dG8gY2hlY2sKLXRoZSBjdXJyZW50IGJyYW5jaCBvZiB0aGUgY3VycmVudCBwYXR0ZXJuIHRvIHNl
ZSBpZiBpdCBjb3VsZCBtYXRjaCB0aGUgZW1wdHkKLXN0cmluZy4gSWYgaXQgY291bGQsIHdlIG11
c3QgbG9vayBvdXR3YXJkcyBmb3IgYnJhbmNoZXMgYXQgb3RoZXIgbGV2ZWxzLAotc3RvcHBpbmcg
d2hlbiB3ZSBwYXNzIGJleW9uZCB0aGUgYnJhY2tldCB3aGljaCBpcyB0aGUgc3ViamVjdCBvZiB0
aGUgcmVjdXJzaW9uLgotCi1Bcmd1bWVudHM6Ci0gIGNvZGUgICAgICAgIHBvaW50cyB0byBzdGFy
dCBvZiB0aGUgcmVjdXJzaW9uCi0gIGVuZGNvZGUgICAgIHBvaW50cyB0byB3aGVyZSB0byBzdG9w
IChjdXJyZW50IFJFQ1VSU0UgaXRlbSkKLSAgYmNwdHIgICAgICAgcG9pbnRzIHRvIHRoZSBjaGFp
biBvZiBjdXJyZW50ICh1bmNsb3NlZCkgYnJhbmNoIHN0YXJ0cwotICB1dGY4ICAgICAgICBUUlVF
IGlmIGluIFVURi04IG1vZGUKLQotUmV0dXJuczogICAgICBUUlVFIGlmIHdoYXQgaXMgbWF0Y2hl
ZCBjb3VsZCBiZSBlbXB0eQotKi8KLQotI2lmICFKQVZBU0NSSVBUCi0KLXN0YXRpYyBCT09MCi1j
b3VsZF9iZV9lbXB0eShjb25zdCB1c2NoYXIgKmNvZGUsIGNvbnN0IHVzY2hhciAqZW5kY29kZSwg
YnJhbmNoX2NoYWluICpiY3B0ciwKLSAgQk9PTCB1dGY4KQotewotd2hpbGUgKGJjcHRyICE9IE5V
TEwgJiYgYmNwdHItPmN1cnJlbnQgPj0gY29kZSkKLSAgewotICBpZiAoIWNvdWxkX2JlX2VtcHR5
X2JyYW5jaChiY3B0ci0+Y3VycmVudCwgZW5kY29kZSwgdXRmOCkpIHJldHVybiBGQUxTRTsKLSAg
YmNwdHIgPSBiY3B0ci0+b3V0ZXI7Ci0gIH0KLXJldHVybiBUUlVFOwotfQotCi0jZW5kaWYKLQot
Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0q
ICAgICAgICAgICBDaGVjayBmb3IgUE9TSVggY2xhc3Mgc3ludGF4ICAgICAgICAgKgotKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc2VxdWVuY2UgIls6IiBvciAiWy4iIG9yICJbPSIg
aXMKLWVuY291bnRlcmVkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiBJdCBjaGVja3Mgd2hldGhlciB0
aGlzIGlzIGZvbGxvd2VkIGJ5IGFuCi1vcHRpb25hbCBeIGFuZCB0aGVuIGEgc2VxdWVuY2Ugb2Yg
bGV0dGVycywgdGVybWluYXRlZCBieSBhIG1hdGNoaW5nICI6XSIgb3IKLSIuXSIgb3IgIj1dIi4K
LQotQXJndW1lbnQ6Ci0gIHB0ciAgICAgIHBvaW50ZXIgdG8gdGhlIGluaXRpYWwgWwotICBlbmRw
dHIgICB3aGVyZSB0byByZXR1cm4gdGhlIGVuZCBwb2ludGVyCi0gIGNkICAgICAgIHBvaW50ZXIg
dG8gY29tcGlsZSBkYXRhCi0KLVJldHVybnM6ICAgVFJVRSBvciBGQUxTRQotKi8KLQotI2lmICFK
QVZBU0NSSVBUCi0KLXN0YXRpYyBCT09MCi1jaGVja19wb3NpeF9zeW50YXgoY29uc3QgdXNjaGFy
ICpwdHIsIGNvbnN0IHVzY2hhciAqKmVuZHB0ciwgY29tcGlsZV9kYXRhICpjZCkKLXsKLWludCB0
ZXJtaW5hdG9yOyAgICAgICAgICAvKiBEb24ndCBjb21iaW5lIHRoZXNlIGxpbmVzOyB0aGUgU29s
YXJpcyBjYyAqLwotdGVybWluYXRvciA9ICooKytwdHIpOyAgIC8qIGNvbXBpbGVyIHdhcm5zIGFi
b3V0ICJub24tY29uc3RhbnQiIGluaXRpYWxpemVyLiAqLwotaWYgKCooKytwdHIpID09ICdeJykg
cHRyKys7Ci13aGlsZSAoKGNkLT5jdHlwZXNbKnB0cl0gJiBjdHlwZV9sZXR0ZXIpICE9IDApIHB0
cisrOwotaWYgKCpwdHIgPT0gdGVybWluYXRvciAmJiBwdHJbMV0gPT0gJ10nKQotICB7Ci0gICpl
bmRwdHIgPSBwdHI7Ci0gIHJldHVybiBUUlVFOwotICB9Ci1yZXR1cm4gRkFMU0U7Ci19Ci0KLQot
Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0q
ICAgICAgICAgIENoZWNrIFBPU0lYIGNsYXNzIG5hbWUgICAgICAgICAgICAgICAgKgotKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgdG8gY2hlY2sgdGhlIG5hbWUgZ2l2ZW4gaW4gYSBQT1NJWC1zdHls
ZSBjbGFzcyBlbnRyeQotc3VjaCBhcyBbOmFsbnVtOl0uCi0KLUFyZ3VtZW50czoKLSAgcHRyICAg
ICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGxldHRlcgotICBsZW4gICAgICAgIHRoZSBsZW5ndGgg
b2YgdGhlIG5hbWUKLQotUmV0dXJuczogICAgIGEgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBuYW1l
LCBvciAtMSBpZiB1bmtub3duCi0qLwotCi1zdGF0aWMgaW50Ci1jaGVja19wb3NpeF9uYW1lKGNv
bnN0IHVzY2hhciAqcHRyLCBpbnQgbGVuKQotewotcmVnaXN0ZXIgaW50IHlpZWxkID0gMDsKLXdo
aWxlIChwb3NpeF9uYW1lX2xlbmd0aHNbeWllbGRdICE9IDApCi0gIHsKLSAgaWYgKGxlbiA9PSBw
b3NpeF9uYW1lX2xlbmd0aHNbeWllbGRdICYmCi0gICAgc3RybmNtcCgoY29uc3QgY2hhciAqKXB0
ciwgcG9zaXhfbmFtZXNbeWllbGRdLCBsZW4pID09IDApIHJldHVybiB5aWVsZDsKLSAgeWllbGQr
KzsKLSAgfQotcmV0dXJuIC0xOwotfQotCi0jZW5kaWYKLQotCi0vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICBBZGp1c3QgT1BfUkVDVVJTRSBp
dGVtcyBpbiByZXBlYXRlZCBncm91cCAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE9QX1JFQ1VSU0UgaXRlbXMgY29udGFpbiBhbiBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJlZ2V4IHRvIHRoZSBncm91cAotdGhhdCBpcyBy
ZWZlcmVuY2VkLiBUaGlzIG1lYW5zIHRoYXQgZ3JvdXBzIGNhbiBiZSByZXBsaWNhdGVkIGZvciBm
aXhlZAotcmVwZXRpdGlvbiBzaW1wbHkgYnkgY29weWluZyAoYmVjYXVzZSB0aGUgcmVjdXJzaW9u
IGlzIGFsbG93ZWQgdG8gcmVmZXIgdG8KLWVhcmxpZXIgZ3JvdXBzIHRoYXQgYXJlIG91dHNpZGUg
dGhlIGN1cnJlbnQgZ3JvdXApLiBIb3dldmVyLCB3aGVuIGEgZ3JvdXAgaXMKLW9wdGlvbmFsIChp
LmUuIHRoZSBtaW5pbXVtIHF1YW50aWZpZXIgaXMgemVybyksIE9QX0JSQVpFUk8gaXMgaW5zZXJ0
ZWQgYmVmb3JlCi1pdCwgYWZ0ZXIgaXQgaGFzIGJlZW4gY29tcGlsZWQuIFRoaXMgbWVhbnMgdGhh
dCBhbnkgT1BfUkVDVVJTRSBpdGVtcyB3aXRoaW4gaXQKLXRoYXQgcmVmZXIgdG8gdGhlIGdyb3Vw
IGl0c2VsZiBvciBhbnkgY29udGFpbmVkIGdyb3VwcyBoYXZlIHRvIGhhdmUgdGhlaXIKLW9mZnNl
dHMgYWRqdXN0ZWQuIFRoYXQgaXMgdGhlIGpvYiBvZiB0aGlzIGZ1bmN0aW9uLiBCZWZvcmUgaXQg
aXMgY2FsbGVkLCB0aGUKLXBhcnRpYWxseSBjb21waWxlZCByZWdleCBtdXN0IGJlIHRlbXBvcmFy
aWx5IHRlcm1pbmF0ZWQgd2l0aCBPUF9FTkQuCi0KLUFyZ3VtZW50czoKLSAgZ3JvdXAgICAgICBw
b2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBncm91cAotICBhZGp1c3QgICAgIHRoZSBhbW91bnQg
Ynkgd2hpY2ggdGhlIGdyb3VwIGlzIHRvIGJlIG1vdmVkCi0gIHV0ZjggICAgICAgVFJVRSBpbiBV
VEYtOCBtb2RlCi0gIGNkICAgICAgICAgY29udGFpbnMgcG9pbnRlcnMgdG8gdGFibGVzIGV0Yy4K
LQotUmV0dXJuczogICAgIG5vdGhpbmcKLSovCi0KLXN0YXRpYyB2b2lkCi1hZGp1c3RfcmVjdXJz
ZSh1c2NoYXIgKmdyb3VwLCBpbnQgYWRqdXN0LCBCT09MIHV0ZjgsIGNvbXBpbGVfZGF0YSAqY2Qp
Ci17Ci11c2NoYXIgKnB0ciA9IGdyb3VwOwotd2hpbGUgKChwdHIgPSAodXNjaGFyICopZmluZF9y
ZWN1cnNlKHB0ciwgdXRmOCkpICE9IE5VTEwpCi0gIHsKLSAgaW50IG9mZnNldCA9IEdFVChwdHIs
IDEpOwotICBpZiAoY2QtPnN0YXJ0X2NvZGUgKyBvZmZzZXQgPj0gZ3JvdXApIFBVVChwdHIsIDEs
IG9mZnNldCArIGFkanVzdCk7Ci0gIHB0ciArPSAxICsgTElOS19TSVpFOwotICB9Ci19Ci0KLQot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAg
ICAgICAgSW5zZXJ0IGFuIGF1dG9tYXRpYyBjYWxsb3V0IHBvaW50ICAgICAgICoKLSoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIFBDUkVfQVVUT19DQUxMT1VUIG9wdGlvbiBpcyBzZXQs
IHRvIGluc2VydAotY2FsbG91dCBwb2ludHMgYmVmb3JlIGVhY2ggcGF0dGVybiBpdGVtLgotCi1B
cmd1bWVudHM6Ci0gIGNvZGUgICAgICAgICAgIGN1cnJlbnQgY29kZSBwb2ludGVyCi0gIHB0ciAg
ICAgICAgICAgIGN1cnJlbnQgcGF0dGVybiBwb2ludGVyCi0gIGNkICAgICAgICAgICAgIHBvaW50
ZXJzIHRvIHRhYmxlcyBldGMKLQotUmV0dXJuczogICAgICAgICBuZXcgY29kZSBwb2ludGVyCi0q
LwotCi1zdGF0aWMgdXNjaGFyICoKLWF1dG9fY2FsbG91dCh1c2NoYXIgKmNvZGUsIGNvbnN0IHBj
cmVfdWNoYXIgKnB0ciwgY29tcGlsZV9kYXRhICpjZCkKLXsKLSpjb2RlKysgPSBPUF9DQUxMT1VU
OwotKmNvZGUrKyA9IDI1NTsKLVBVVChjb2RlLCAwLCBwdHIgLSBjZC0+c3RhcnRfcGF0dGVybik7
ICAvKiBQYXR0ZXJuIG9mZnNldCAqLwotUFVUKGNvZGUsIExJTktfU0laRSwgMCk7ICAgICAgICAg
ICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoICovCi1yZXR1cm4gY29kZSArIDIqTElOS19TSVpFOwot
fQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICogICAgICAgICBDb21wbGV0ZSBhIGNhbGxvdXQgaXRlbSAgICAgICAgICAgICAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0x
NTgxLDcgKzg5NCw2IEBAIFBVVChwcmV2aW91c19jYWxsb3V0LCAyICsgTElOS19TSVpFLCBsZW4K
IAogCiAKLSNpZmRlZiBTVVBQT1JUX1VDUAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIEdldCBvdGhlcmNhc2UgcmFuZ2UgICAg
ICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwpAQCAtMTYyNCw3ICs5MzYsNiBAQCBmb3IgKCsrYzsgYyA8PSBkOyBjKyspCiAK
IHJldHVybiBUUlVFOwogfQotI2VuZGlmICAvKiBTVVBQT1JUX1VDUCAqLwogCiAKIC8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjU4LDE5ICs5
NjksMTQgQEAgY29tcGlsZV9icmFuY2goaW50ICpvcHRpb25zcHRyLCBpbnQgKmJyYQogaW50IHJl
cGVhdF90eXBlLCBvcF90eXBlOwogaW50IHJlcGVhdF9taW4gPSAwLCByZXBlYXRfbWF4ID0gMDsg
ICAgICAvKiBUbyBwbGVhc2UgcGlja3kgY29tcGlsZXJzICovCiBpbnQgYnJhdmFsdWUgPSAwOwot
aW50IGdyZWVkeV9kZWZhdWx0LCBncmVlZHlfbm9uX2RlZmF1bHQ7CiBpbnQgZmlyc3RieXRlLCBy
ZXFieXRlOwogaW50IHplcm9yZXFieXRlLCB6ZXJvZmlyc3RieXRlOwogaW50IHJlcV9jYXNlb3B0
LCByZXF2YXJ5LCB0ZW1wcmVxdmFyeTsKLWludCBjb25kY291bnQgPSAwOwogaW50IG9wdGlvbnMg
PSAqb3B0aW9uc3B0cjsKIGludCBhZnRlcl9tYW51YWxfY2FsbG91dCA9IDA7CiByZWdpc3RlciBp
bnQgYzsKIHJlZ2lzdGVyIHVzY2hhciAqY29kZSA9ICpjb2RlcHRyOwogdXNjaGFyICp0ZW1wY29k
ZTsKLSNpZiAhSkFWQVNDUklQVAotQk9PTCBpbmVzY3EgPSBGQUxTRTsKLSNlbmRpZgogQk9PTCBn
cm91cHNldGZpcnN0Ynl0ZSA9IEZBTFNFOwogY29uc3QgcGNyZV91Y2hhciAqcHRyID0gKnB0cnB0
cjsKIGNvbnN0IHBjcmVfdWNoYXIgKnRlbXBwdHI7CkBAIC0xNjc4LDE5ICs5ODQsOSBAQCB1c2No
YXIgKnByZXZpb3VzID0gTlVMTDsKIHVzY2hhciAqcHJldmlvdXNfY2FsbG91dCA9IE5VTEw7CiB1
c2NoYXIgY2xhc3NiaXRzWzMyXTsKIAotI2lmZGVmIFNVUFBPUlRfVVRGOAogQk9PTCBjbGFzc191
dGY4OwotQk9PTCB1dGY4ID0gKG9wdGlvbnMgJiBQQ1JFX1VURjgpICE9IDA7CiB1c2NoYXIgKmNs
YXNzX3V0ZjhkYXRhOwogdXNjaGFyIHV0ZjhfY2hhcls2XTsKLSNlbHNlCi1CT09MIHV0ZjggPSBG
QUxTRTsKLSNlbmRpZgotCi0vKiBTZXQgdXAgdGhlIGRlZmF1bHQgYW5kIG5vbi1kZWZhdWx0IHNl
dHRpbmdzIGZvciBncmVlZGluZXNzICovCi0KLWdyZWVkeV9kZWZhdWx0ID0gKChvcHRpb25zICYg
UENSRV9VTkdSRUVEWSkgIT0gMCk7Ci1ncmVlZHlfbm9uX2RlZmF1bHQgPSBncmVlZHlfZGVmYXVs
dCBeIDE7CiAKIC8qIEluaXRpYWxpemUgbm8gZmlyc3QgYnl0ZSwgbm8gcmVxdWlyZWQgYnl0ZS4g
UkVRX1VOU0VUIG1lYW5zICJubyBjaGFyCiBtYXRjaGluZyBlbmNvdW50ZXJlZCB5ZXQiLiBJdCBn
ZXRzIGNoYW5nZWQgdG8gUkVRX05PTkUgaWYgd2UgaGl0IHNvbWV0aGluZyB0aGF0CkBAIC0xNzIy
LDkgKzEwMTgsNiBAQCBmb3IgKDs7IHB0cisrKQogICBpbnQgY2xhc3NfY2hhcmNvdW50OwogICBp
bnQgY2xhc3NfbGFzdGNoYXI7CiAgIGludCBuZXdvcHRpb25zOwotI2lmICFKQVZBU0NSSVBUCi0g
IGludCByZWNubzsKLSNlbmRpZgogICBpbnQgc2tpcGJ5dGVzOwogICBpbnQgc3VicmVxYnl0ZTsK
ICAgaW50IHN1YmZpcnN0Ynl0ZTsKQEAgLTE3MzUsMzQgKzEwMjgsNiBAQCBmb3IgKDs7IHB0cisr
KQogCiAgIGMgPSBwdHIgPCBwYXR0ZXJuRW5kID8gKnB0ciA6IDA7CiAKLSNpZiAhSkFWQVNDUklQ
VAotICAvKiBJZiBpbiBcUS4uLlxFLCBjaGVjayBmb3IgdGhlIGVuZDsgaWYgbm90LCB3ZSBoYXZl
IGEgbGl0ZXJhbCAqLwotCi0gIGlmIChpbmVzY3EgJiYgYyAhPSAwKQotICAgIHsKLSAgICBpZiAo
YyA9PSAnXFwnICYmIHB0clsxXSA9PSAnRScpCi0gICAgICB7Ci0gICAgICBpbmVzY3EgPSBGQUxT
RTsKLSAgICAgIHB0cisrOwotICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgZWxzZQotICAg
ICAgewotICAgICAgaWYgKHByZXZpb3VzX2NhbGxvdXQgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICBjb21wbGV0ZV9jYWxsb3V0KHByZXZpb3VzX2NhbGxvdXQsIHB0ciwgY2QpOwotICAgICAg
ICBwcmV2aW91c19jYWxsb3V0ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgaWYgKChvcHRpb25z
ICYgUENSRV9BVVRPX0NBTExPVVQpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgcHJldmlvdXNf
Y2FsbG91dCA9IGNvZGU7Ci0gICAgICAgIGNvZGUgPSBhdXRvX2NhbGxvdXQoY29kZSwgcHRyLCBj
ZCk7Ci0gICAgICAgIH0KLSAgICAgIGdvdG8gTk9STUFMX0NIQVI7Ci0gICAgICB9Ci0gICAgfQot
I2VuZGlmCi0KICAgLyogRmlsbCBpbiBsZW5ndGggb2YgYSBwcmV2aW91cyBjYWxsb3V0LCBleGNl
cHQgd2hlbiB0aGUgbmV4dCB0aGluZyBpcwogICBhIHF1YW50aWZpZXIuICovCiAKQEAgLTE3NzYs
MjkgKzEwNDEsNiBAQCBmb3IgKDs7IHB0cisrKQogICAgIHByZXZpb3VzX2NhbGxvdXQgPSBOVUxM
OwogICAgIH0KIAotICAvKiBJbiBleHRlbmRlZCBtb2RlLCBza2lwIHdoaXRlIHNwYWNlIGFuZCBj
b21tZW50cyAqLwotCi0gIGlmICgob3B0aW9ucyAmIFBDUkVfRVhURU5ERUQpICE9IDApCi0gICAg
ewotICAgIGlmICgoQ1RZUEVTKGNkLCBjKSAmIGN0eXBlX3NwYWNlKSAhPSAwKSBjb250aW51ZTsK
LSAgICBpZiAoYyA9PSAnIycpCi0gICAgICB7Ci0gICAgICB3aGlsZSAoKytwdHIgPCBwYXR0ZXJu
RW5kICYmIChjID0gKnB0cikgIT0gTkVXTElORSkKLSAgICAgICAgICA7Ci0gICAgICBpZiAocHRy
IDwgcGF0dGVybkVuZCkKLSAgICAgICAgICBjb250aW51ZTsgICAvKiBFbHNlIGZhbGwgdGhyb3Vn
aCB0byBoYW5kbGUgZW5kIG9mIHN0cmluZyAqLwotICAgICAgYyA9IDA7Ci0gICAgICB9Ci0gICAg
fQotCi0gIC8qIE5vIGF1dG8gY2FsbG91dCBmb3IgcXVhbnRpZmllcnMuICovCi0KLSAgaWYgKChv
cHRpb25zICYgUENSRV9BVVRPX0NBTExPVVQpICE9IDAgJiYgIWlzX3F1YW50aWZpZXIpCi0gICAg
ewotICAgIHByZXZpb3VzX2NhbGxvdXQgPSBjb2RlOwotICAgIGNvZGUgPSBhdXRvX2NhbGxvdXQo
Y29kZSwgcHRyLCBjZCk7Ci0gICAgfQotCiAgIHN3aXRjaChjKQogICAgIHsKICAgICAvKiBUaGUg
YnJhbmNoIHRlcm1pbmF0ZXMgYXQgZW5kIG9mIHN0cmluZywgfCwgb3IgKS4gKi8KQEAgLTE4NjIs
MTUgKzExMDQsNiBAQCBmb3IgKDs7IHB0cisrKQogICAgIC8qIFBDUkUgc3VwcG9ydHMgUE9TSVgg
Y2xhc3Mgc3R1ZmYgaW5zaWRlIGEgY2xhc3MuIFBlcmwgZ2l2ZXMgYW4gZXJyb3IgaWYKICAgICB0
aGV5IGFyZSBlbmNvdW50ZXJlZCBhdCB0aGUgdG9wIGxldmVsLCBzbyB3ZSdsbCBkbyB0aGF0IHRv
by4gKi8KIAotI2lmICFKQVZBU0NSSVBUCi0gICAgaWYgKChwdHJbMV0gPT0gJzonIHx8IHB0clsx
XSA9PSAnLicgfHwgcHRyWzFdID09ICc9JykgJiYKLSAgICAgICAgY2hlY2tfcG9zaXhfc3ludGF4
KHB0ciwgJnRlbXBwdHIsIGNkKSkKLSAgICAgIHsKLSAgICAgICplcnJvcmNvZGVwdHIgPSAocHRy
WzFdID09ICc6Jyk/IEVSUjEzIDogRVJSMzE7Ci0gICAgICBnb3RvIEZBSUxFRDsKLSAgICAgIH0K
LSNlbmRpZgotCiAgICAgLyogSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAnXicsIHNldCB0aGUg
bmVnYXRpb24gZmxhZyBhbmQgc2tpcCBpdC4gKi8KIAogICAgIGlmICgoYyA9ICooKytwdHIpKSA9
PSAnXicpCkBAIC0xODkwLDEwICsxMTIzLDggQEAgZm9yICg7OyBwdHIrKykKICAgICBjbGFzc19j
aGFyY291bnQgPSAwOwogICAgIGNsYXNzX2xhc3RjaGFyID0gLTE7CiAKLSNpZmRlZiBTVVBQT1JU
X1VURjgKICAgICBjbGFzc191dGY4ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAvKiBO
byBjaGFycyA+PSAyNTYgKi8KICAgICBjbGFzc191dGY4ZGF0YSA9IGNvZGUgKyBMSU5LX1NJWkUg
KyAzNDsgICAvKiBGb3IgVVRGLTggaXRlbXMgKi8KLSNlbmRpZgogCiAgICAgLyogSW5pdGlhbGl6
ZSB0aGUgMzItY2hhciBiaXQgbWFwIHRvIGFsbCB6ZXJvcy4gV2UgaGF2ZSB0byBidWlsZCB0aGUK
ICAgICBtYXAgaW4gYSB0ZW1wb3JhcnkgYml0IG9mIHN0b3JlLCBpbiBjYXNlIHRoZSBjbGFzcyBj
b250YWlucyBvbmx5IDEKQEAgLTE5MTAsMTE2ICsxMTQxLDEwIEBAIGZvciAoOzsgcHRyKyspCiAK
ICAgICBkbwogICAgICAgewotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgaWYgKHV0ZjggJiYg
YyA+IDEyNykKKyAgICAgIGlmIChjID4gMTI3KQogICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogQnJhY2VzIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoZSAqLwogICAgICAgICBH
RVRDSEFSTEVOKGMsIHB0ciwgcHRyKTsgICAgLyogbWFjcm8gZ2VuZXJhdGVzIG11bHRpcGxlIHN0
YXRlbWVudHMgKi8KICAgICAgICAgfQotI2VuZGlmCi0KLSNpZiAhSkFWQVNDUklQVAotCi0gICAg
ICAvKiBJbnNpZGUgXFEuLi5cRSBldmVyeXRoaW5nIGlzIGxpdGVyYWwgZXhjZXB0IFxFICovCi0K
LSAgICAgIGlmIChpbmVzY3EpCi0gICAgICAgIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xcJyAmJiBw
dHJbMV0gPT0gJ0UnKQotICAgICAgICAgIHsKLSAgICAgICAgICBpbmVzY3EgPSBGQUxTRTsKLSAg
ICAgICAgICBwdHIrKzsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAg
IGVsc2UgZ290byBMT05FX1NJTkdMRV9DSEFSQUNURVI7Ci0gICAgICAgIH0KLQotICAgICAgLyog
SGFuZGxlIFBPU0lYIGNsYXNzIG5hbWVzLiBQZXJsIGFsbG93cyBhIG5lZ2F0aW9uIGV4dGVuc2lv
biBvZiB0aGUKLSAgICAgIGZvcm0gWzpebmFtZTpdLiBBIHNxdWFyZSBicmFja2V0IHRoYXQgZG9l
c24ndCBtYXRjaCB0aGUgc3ludGF4IGlzCi0gICAgICB0cmVhdGVkIGFzIGEgbGl0ZXJhbC4gV2Ug
YWxzbyByZWNvZ25pemUgdGhlIFBPU0lYIGNvbnN0cnVjdGlvbnMKLSAgICAgIFsuY2guXSBhbmQg
Wz1jaD1dICgiY29sbGF0aW5nIGVsZW1lbnRzIikgYW5kIGZhdWx0IHRoZW0sIGFzIFBlcmwKLSAg
ICAgIDUuNiBhbmQgNS44IGRvLiAqLwotCi0gICAgICBpZiAoYyA9PSAnWycgJiYKLSAgICAgICAg
ICAocHRyWzFdID09ICc6JyB8fCBwdHJbMV0gPT0gJy4nIHx8IHB0clsxXSA9PSAnPScpICYmCi0g
ICAgICAgICAgY2hlY2tfcG9zaXhfc3ludGF4KHB0ciwgJnRlbXBwdHIsIGNkKSkKLSAgICAgICAg
ewotICAgICAgICBCT09MIGxvY2FsX25lZ2F0ZSA9IEZBTFNFOwotICAgICAgICBpbnQgcG9zaXhf
Y2xhc3MsIHRhYm9mZnNldCwgdGFib3B0OwotICAgICAgICByZWdpc3RlciBjb25zdCB1c2NoYXIg
KmNiaXRzID0gY2QtPmNiaXRzOwotICAgICAgICB1c2NoYXIgcGJpdHNbMzJdOwotCi0gICAgICAg
IGlmIChwdHJbMV0gIT0gJzonKQotICAgICAgICAgIHsKLSAgICAgICAgICAqZXJyb3Jjb2RlcHRy
ID0gRVJSMzE7Ci0gICAgICAgICAgZ290byBGQUlMRUQ7Ci0gICAgICAgICAgfQotCi0gICAgICAg
IHB0ciArPSAyOwotICAgICAgICBpZiAoKnB0ciA9PSAnXicpCi0gICAgICAgICAgewotICAgICAg
ICAgIGxvY2FsX25lZ2F0ZSA9IFRSVUU7Ci0gICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgIHBvc2l4X2NsYXNzID0gY2hlY2tfcG9zaXhfbmFtZShwdHIsIHRlbXBwdHIgLSBw
dHIpOwotICAgICAgICBpZiAocG9zaXhfY2xhc3MgPCAwKQotICAgICAgICAgIHsKLSAgICAgICAg
ICAqZXJyb3Jjb2RlcHRyID0gRVJSMzA7Ci0gICAgICAgICAgZ290byBGQUlMRUQ7Ci0gICAgICAg
ICAgfQotCi0gICAgICAgIC8qIElmIG1hdGNoaW5nIGlzIGNhc2VsZXNzLCB1cHBlciBhbmQgbG93
ZXIgYXJlIGNvbnZlcnRlZCB0bwotICAgICAgICBhbHBoYS4gVGhpcyByZWxpZXMgb24gdGhlIGZh
Y3QgdGhhdCB0aGUgY2xhc3MgdGFibGUgc3RhcnRzIHdpdGgKLSAgICAgICAgYWxwaGEsIGxvd2Vy
LCB1cHBlciBhcyB0aGUgZmlyc3QgMyBlbnRyaWVzLiAqLwotCi0gICAgICAgIGlmICgob3B0aW9u
cyAmIFBDUkVfQ0FTRUxFU1MpICE9IDAgJiYgcG9zaXhfY2xhc3MgPD0gMikKLSAgICAgICAgICBw
b3NpeF9jbGFzcyA9IDA7Ci0KLSAgICAgICAgLyogV2UgYnVpbGQgdGhlIGJpdCBtYXAgZm9yIHRo
ZSBQT1NJWCBjbGFzcyBpbiBhIGNodW5rIG9mIGxvY2FsIHN0b3JlCi0gICAgICAgIGJlY2F1c2Ug
d2UgbWF5IGJlIGFkZGluZyBhbmQgc3VidHJhY3RpbmcgZnJvbSBpdCwgYW5kIHdlIGRvbid0IHdh
bnQgdG8KLSAgICAgICAgc3VidHJhY3QgYml0cyB0aGF0IG1heSBiZSBpbiB0aGUgbWFpbiBtYXAg
YWxyZWFkeS4gQXQgdGhlIGVuZCB3ZSBvciB0aGUKLSAgICAgICAgcmVzdWx0IGludG8gdGhlIGJp
dCBtYXAgdGhhdCBpcyBiZWluZyBidWlsdC4gKi8KLQotICAgICAgICBwb3NpeF9jbGFzcyAqPSAz
OwotCi0gICAgICAgIC8qIENvcHkgaW4gdGhlIGZpcnN0IHRhYmxlIChhbHdheXMgcHJlc2VudCkg
Ki8KLQotICAgICAgICBtZW1jcHkocGJpdHMsIGNiaXRzICsgcG9zaXhfY2xhc3NfbWFwc1twb3Np
eF9jbGFzc10sCi0gICAgICAgICAgMzIgKiBzaXplb2YodXNjaGFyKSk7Ci0KLSAgICAgICAgLyog
SWYgdGhlcmUgaXMgYSBzZWNvbmQgdGFibGUsIGFkZCBvciByZW1vdmUgaXQgYXMgcmVxdWlyZWQu
ICovCi0KLSAgICAgICAgdGFib2Zmc2V0ID0gcG9zaXhfY2xhc3NfbWFwc1twb3NpeF9jbGFzcyAr
IDFdOwotICAgICAgICB0YWJvcHQgPSBwb3NpeF9jbGFzc19tYXBzW3Bvc2l4X2NsYXNzICsgMl07
Ci0KLSAgICAgICAgaWYgKHRhYm9mZnNldCA+PSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICBp
ZiAodGFib3B0ID49IDApCi0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgcGJp
dHNbY10gfD0gY2JpdHNbYyArIHRhYm9mZnNldF07Ci0gICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIHBiaXRzW2NdICY9IH5jYml0c1tjICsgdGFib2Zm
c2V0XTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgLyogTm90IHNlZSBpZiB3ZSBuZWVkIHRvIHJl
bW92ZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBBbiBvcHRpb24KLSAgICAgICAgdmFsdWUgb2Yg
MSByZW1vdmVzIHZlcnRpY2FsIHNwYWNlIGFuZCAyIHJlbW92ZXMgdW5kZXJzY29yZS4gKi8KLQot
ICAgICAgICBpZiAodGFib3B0IDwgMCkgdGFib3B0ID0gLXRhYm9wdDsKLSAgICAgICAgaWYgKHRh
Ym9wdCA9PSAxKSBwYml0c1sxXSAmPSB+MHgzYzsKLSAgICAgICAgICBlbHNlIGlmICh0YWJvcHQg
PT0gMikgcGJpdHNbMTFdICY9IDB4N2Y7Ci0KLSAgICAgICAgLyogQWRkIHRoZSBQT1NJWCB0YWJs
ZSBvciBpdHMgY29tcGxlbWVudCBpbnRvIHRoZSBtYWluIHRhYmxlIHRoYXQgaXMKLSAgICAgICAg
YmVpbmcgYnVpbHQgYW5kIHdlIGFyZSBkb25lLiAqLwotCi0gICAgICAgIGlmIChsb2NhbF9uZWdh
dGUpCi0gICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIGNsYXNzYml0c1tjXSB8PSB+
cGJpdHNbY107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMr
KykgY2xhc3NiaXRzW2NdIHw9IHBiaXRzW2NdOwotCi0gICAgICAgIHB0ciA9IHRlbXBwdHIgKyAx
OwotICAgICAgICBjbGFzc19jaGFyY291bnQgPSAxMDsgIC8qIFNldCA+IDE7IGFzc3VtZXMgbW9y
ZSB0aGFuIDEgcGVyIGNsYXNzICovCi0gICAgICAgIGNvbnRpbnVlOyAgICAvKiBFbmQgb2YgUE9T
SVggc3ludGF4IGhhbmRsaW5nICovCi0gICAgICAgIH0KLQotI2VuZGlmCiAKICAgICAgIC8qIEJh
Y2tzbGFzaCBtYXkgaW50cm9kdWNlIGEgc2luZ2xlIGNoYXJhY3Rlciwgb3IgaXQgbWF5IGludHJv
ZHVjZSBvbmUKICAgICAgIG9mIHRoZSBzcGVjaWFscywgd2hpY2gganVzdCBzZXQgYSBmbGFnLiBF
c2NhcGVkIGl0ZW1zIGFyZSBjaGVja2VkIGZvcgpAQCAtMjAzMSwyMSArMTE1NiwxMCBAQCBmb3Ig
KDs7IHB0cisrKQogCiAgICAgICBpZiAoYyA9PSAnXFwnKQogICAgICAgICB7Ci0gICAgICAgIGMg
PSBjaGVja19lc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMs
IG9wdGlvbnMsIFRSVUUpOworICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5F
bmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBUUlVFKTsKIAogICAgICAgICBpZiAoLWMgPT0g
RVNDX2IpIGMgPSAnXGInOyAgICAgICAvKiBcYiBpcyBiYWNrc2xhc2ggaW4gYSBjbGFzcyAqLwog
ICAgICAgICBlbHNlIGlmICgtYyA9PSBFU0NfWCkgYyA9ICdYJzsgICAvKiBcWCBpcyBsaXRlcmFs
IFggaW4gYSBjbGFzcyAqLwotI2lmICFKQVZBU0NSSVBUCi0gICAgICAgIGVsc2UgaWYgKC1jID09
IEVTQ19RKSAgICAgICAgICAgIC8qIEhhbmRsZSBzdGFydCBvZiBxdW90ZWQgc3RyaW5nICovCi0g
ICAgICAgICAgewotICAgICAgICAgIGlmIChwdHIgKyAyIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0g
PT0gJ1xcJyAmJiBwdHJbMl0gPT0gJ0UnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgcHRy
ICs9IDI7IC8qIGF2b2lkIGVtcHR5IHN0cmluZyAqLwotICAgICAgICAgICAgfQotICAgICAgICAg
IGVsc2UgaW5lc2NxID0gVFJVRTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0j
ZW5kaWYKIAogICAgICAgICBpZiAoYyA8IDApCiAgICAgICAgICAgewpAQCAtMjA3Myw0OSArMTE4
NywxOCBAQCBmb3IgKDs7IHB0cisrKQogCiAgICAgICAgICAgICBjYXNlIEVTQ19zOgogICAgICAg
ICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIGNsYXNzYml0c1tjXSB8PSBjYml0c1tjK2Ni
aXRfc3BhY2VdOwotI2lmICFKQVZBU0NSSVBUCi0gICAgICAgICAgICBjbGFzc2JpdHNbMV0gJj0g
fjB4MDg7ICAgLyogUGVybCA1LjAwNCBvbndhcmRzIG9taXRzIFZUIGZyb20gXHMgKi8KLSNlbmRp
ZgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGNhc2UgRVNDX1M6CiAgICAg
ICAgICAgICBzaG91bGRfZmxpcF9uZWdhdGlvbiA9IFRSVUU7CiAgICAgICAgICAgICBmb3IgKGMg
PSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdIHw9IH5jYml0c1tjK2NiaXRfc3BhY2VdOwot
I2lmICFKQVZBU0NSSVBUCi0gICAgICAgICAgICBjbGFzc2JpdHNbMV0gfD0gMHgwODsgICAgLyog
UGVybCA1LjAwNCBvbndhcmRzIG9taXRzIFZUIGZyb20gXHMgKi8KLSNlbmRpZgotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSNpZiAhSkFWQVNDUklQVAotI2lmZGVmIFNVUFBPUlRfVUNQCi0gICAg
ICAgICAgICBjYXNlIEVTQ19wOgotICAgICAgICAgICAgY2FzZSBFU0NfUDoKLSAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBCT09MIG5lZ2F0ZWQ7Ci0gICAgICAgICAgICAgIGludCBwZGF0
YTsKLSAgICAgICAgICAgICAgaW50IHB0eXBlID0gZ2V0X3VjcCgmcHRyLCAmbmVnYXRlZCwgJnBk
YXRhLCBlcnJvcmNvZGVwdHIpOwotICAgICAgICAgICAgICBpZiAocHR5cGUgPCAwKSBnb3RvIEZB
SUxFRDsKLSAgICAgICAgICAgICAgY2xhc3NfdXRmOCA9IFRSVUU7Ci0gICAgICAgICAgICAgICpj
bGFzc191dGY4ZGF0YSsrID0gKCgtYyA9PSBFU0NfcCkgIT0gbmVnYXRlZCk/Ci0gICAgICAgICAg
ICAgICAgWENMX1BST1AgOiBYQ0xfTk9UUFJPUDsKLSAgICAgICAgICAgICAgKmNsYXNzX3V0Zjhk
YXRhKysgPSBwdHlwZTsKLSAgICAgICAgICAgICAgKmNsYXNzX3V0ZjhkYXRhKysgPSBwZGF0YTsK
LSAgICAgICAgICAgICAgY2xhc3NfY2hhcmNvdW50IC09IDI7ICAgLyogTm90IGEgPCAyNTYgY2hh
cmFjdGVyICovCi0gICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlm
Ci0jZW5kaWYKIAogICAgICAgICAgICAgLyogVW5yZWNvZ25pemVkIGVzY2FwZXMgYXJlIGZhdWx0
ZWQgaWYgUENSRSBpcyBydW5uaW5nIGluIGl0cwogICAgICAgICAgICAgc3RyaWN0IG1vZGUuIEJ5
IGRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybCwgdGhleSBhcmUKICAgICAgICAg
ICAgIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuICovCiAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFX0VYVFJBKSAhPSAwKQotICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI3OwotICAgICAgICAgICAgICBnb3Rv
IEZBSUxFRDsKLSAgICAgICAgICAgICAgfQogICAgICAgICAgICAgYyA9ICpwdHI7ICAgICAgICAg
ICAgICAvKiBUaGUgZmluYWwgY2hhcmFjdGVyICovCiAgICAgICAgICAgICBjbGFzc19jaGFyY291
bnQgLT0gMjsgIC8qIFVuZG8gdGhlIGRlZmF1bHQgY291bnQgZnJvbSBhYm92ZSAqLwogICAgICAg
ICAgICAgfQpAQCAtMjEzNSwxNCArMTIxOCw3IEBAIGZvciAoOzsgcHRyKyspCiAgICAgICAgIGlu
dCBkOwogICAgICAgICBwdHIgKz0gMjsKIAotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgICBp
ZiAodXRmOCkKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2Vz
IGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoZSAqLwotICAgICAgICAgIEdFVENIQVJMRU4oZCwgcHRy
LCBwdHIpOyAgICAvKiBtYWNybyBnZW5lcmF0ZXMgbXVsdGlwbGUgc3RhdGVtZW50cyAqLwotICAg
ICAgICAgIH0KLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGQgPSAqcHRyOyAgLyogTm90
IFVURi04IG1vZGUgKi8KKyAgICAgICAgR0VUQ0hBUkxFTihkLCBwdHIsIHB0cik7CiAKICAgICAg
ICAgLyogVGhlIHNlY29uZCBwYXJ0IG9mIGEgcmFuZ2UgY2FuIGJlIGEgc2luZ2xlLWNoYXJhY3Rl
ciBlc2NhcGUsIGJ1dAogICAgICAgICBub3QgYW55IG9mIHRoZSBvdGhlciBlc2NhcGVzLiBQZXJs
IDUuNiB0cmVhdHMgYSBoeXBoZW4gYXMgYSBsaXRlcmFsCkBAIC0yMTUxLDcgKzEyMjcsNyBAQCBm
b3IgKDs7IHB0cisrKQogICAgICAgICBpZiAoZCA9PSAnXFwnKQogICAgICAgICAgIHsKICAgICAg
ICAgICBjb25zdCBwY3JlX3VjaGFyICpvbGRwdHIgPSBwdHI7Ci0gICAgICAgICAgZCA9IGNoZWNr
X2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJvcmNvZGVwdHIsICpicmFja2V0cywgb3B0aW9u
cywgVFJVRSk7CisgICAgICAgICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBl
cnJvcmNvZGVwdHIsICpicmFja2V0cywgVFJVRSk7CiAKICAgICAgICAgICAvKiBcYiBpcyBiYWNr
c2xhc2g7IFxYIGlzIGxpdGVyYWwgWDsgYW55IG90aGVyIHNwZWNpYWwgbWVhbnMgdGhlICctJwog
ICAgICAgICAgIHdhcyBsaXRlcmFsICovCkBAIC0yMTc3LDggKzEyNTMsNyBAQCBmb3IgKDs7IHB0
cisrKQogICAgICAgICBtYXRjaGluZyBmb3IgY2hhcmFjdGVycyA+IDEyNyBpcyBhdmFpbGFibGUg
b25seSBpZiBVQ1Agc3VwcG9ydCBpcwogICAgICAgICBhdmFpbGFibGUuICovCiAKLSNpZmRlZiBT
VVBQT1JUX1VURjgKLSAgICAgICAgaWYgKHV0ZjggJiYgKGQgPiAyNTUgfHwgKChvcHRpb25zICYg
UENSRV9DQVNFTEVTUykgIT0gMCAmJiBkID4gMTI3KSkpCisgICAgICAgIGlmICgoZCA+IDI1NSB8
fCAoKG9wdGlvbnMgJiBQQ1JFX0NBU0VMRVNTKSAhPSAwICYmIGQgPiAxMjcpKSkKICAgICAgICAg
ICB7CiAgICAgICAgICAgY2xhc3NfdXRmOCA9IFRSVUU7CiAKQEAgLTIxODYsNyArMTI2MSw2IEBA
IGZvciAoOzsgcHRyKyspCiAgICAgICAgICAgdGhlIHJlbGV2YW50IGNoYXJhY3RlcnMuIFRoZXJl
IG1heSBiZSBzZXZlcmFsIHJhbmdlcy4gT3B0aW1pemUgaG93CiAgICAgICAgICAgdGhleSBmaXQg
d2l0aCB0aGUgYmFzaWMgcmFuZ2UuICovCiAKLSNpZmRlZiBTVVBQT1JUX1VDUAogICAgICAgICAg
IGlmICgob3B0aW9ucyAmIFBDUkVfQ0FTRUxFU1MpICE9IDApCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICBpbnQgb2NjLCBvY2Q7CkBAIC0yMjE5LDcgKzEyOTMsNiBAQCBmb3IgKDs7IHB0cisr
KQogICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRmOChvY2QsIGNs
YXNzX3V0ZjhkYXRhKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotI2VuZGlmICAv
KiBTVVBQT1JUX1VDUCAqLwogCiAgICAgICAgICAgLyogTm93IHJlY29yZCB0aGUgb3JpZ2luYWwg
cmFuZ2UsIHBvc3NpYmx5IG1vZGlmaWVkIGZvciBVQ1AgY2FzZWxlc3MKICAgICAgICAgICBvdmVy
bGFwcGluZyByYW5nZXMuICovCkBAIC0yMjMyLDE4ICsxMzA1LDggQEAgZm9yICg7OyBwdHIrKykK
ICAgICAgICAgICBjYXNlbGVzcyBtYXRjaGluZyBmb3IgVVRGLTggY2hhcmFjdGVycyA+IDEyNzsg
d2UgY2FuIHVzZSB0aGUgYml0IG1hcAogICAgICAgICAgIGZvciB0aGUgc21hbGxlciBvbmVzLiAq
LwogCi0jaWZkZWYgU1VQUE9SVF9VQ1AKICAgICAgICAgICBjb250aW51ZTsgICAgLyogV2l0aCBu
ZXh0IGNoYXJhY3RlciBpbiB0aGUgY2xhc3MgKi8KLSNlbHNlCi0gICAgICAgICAgaWYgKChvcHRp
b25zICYgUENSRV9DQVNFTEVTUykgPT0gMCB8fCBjID4gMTI3KSBjb250aW51ZTsKLQotICAgICAg
ICAgIC8qIEFkanVzdCB1cHBlciBsaW1pdCBhbmQgZmFsbCB0aHJvdWdoIHRvIHNldCB1cCB0aGUg
bWFwICovCi0KLSAgICAgICAgICBkID0gMTI3OwotCi0jZW5kaWYgIC8qIFNVUFBPUlRfVUNQICov
CiAgICAgICAgICAgfQotI2VuZGlmICAvKiBTVVBQT1JUX1VURjggKi8KIAogICAgICAgICAvKiBX
ZSB1c2UgdGhlIGJpdCBtYXAgZm9yIGFsbCBjYXNlcyB3aGVuIG5vdCBpbiBVVEYtOCBtb2RlOyBl
bHNlCiAgICAgICAgIHJhbmdlcyB0aGF0IGxpZSBlbnRpcmVseSB3aXRoaW4gMC0xMjcgd2hlbiB0
aGVyZSBpcyBVQ1Agc3VwcG9ydDsgZWxzZQpAQCAtMjI3MiwxNCArMTMzNSwxMiBAQCBmb3IgKDs7
IHB0cisrKQogCiAgICAgICAvKiBIYW5kbGUgYSBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgZ28gaW4g
dGhlIGJpdCBtYXAgKi8KIAotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgaWYgKHV0ZjggJiYg
KGMgPiAyNTUgfHwgKChvcHRpb25zICYgUENSRV9DQVNFTEVTUykgIT0gMCAmJiBjID4gMTI3KSkp
CisgICAgICBpZiAoKGMgPiAyNTUgfHwgKChvcHRpb25zICYgUENSRV9DQVNFTEVTUykgIT0gMCAm
JiBjID4gMTI3KSkpCiAgICAgICAgIHsKICAgICAgICAgY2xhc3NfdXRmOCA9IFRSVUU7CiAgICAg
ICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKICAgICAgICAgY2xhc3NfdXRmOGRh
dGEgKz0gX3BjcmVfb3JkMnV0ZjgoYywgY2xhc3NfdXRmOGRhdGEpOwogCi0jaWZkZWYgU1VQUE9S
VF9VQ1AKICAgICAgICAgaWYgKChvcHRpb25zICYgUENSRV9DQVNFTEVTUykgIT0gMCkKICAgICAg
ICAgICB7CiAgICAgICAgICAgaW50IG90aGVyY2FzZTsKQEAgLTIyODksMTEgKzEzNTAsOSBAQCBm
b3IgKDs7IHB0cisrKQogICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gX3BjcmVfb3JkMnV0
Zjgob3RoZXJjYXNlLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
fQotI2VuZGlmICAvKiBTVVBQT1JUX1VDUCAqLwogCiAgICAgICAgIH0KICAgICAgIGVsc2UKLSNl
bmRpZiAgLyogU1VQUE9SVF9VVEY4ICovCiAKICAgICAgIC8qIEhhbmRsZSBhIHNpbmdsZS1ieXRl
IGNoYXJhY3RlciAqLwogICAgICAgICB7CkBAIC0yMzExLDExICsxMzcwLDcgQEAgZm9yICg7OyBw
dHIrKykKICAgICAvKiBMb29wIHVudGlsICddJyByZWFjaGVkOyB0aGUgY2hlY2sgZm9yIGVuZCBv
ZiBzdHJpbmcgaGFwcGVucyBpbnNpZGUgdGhlCiAgICAgbG9vcC4gVGhpcyAid2hpbGUiIGlzIHRo
ZSBlbmQgb2YgdGhlICJkbyIgYWJvdmUuICovCiAKLSNpZiBKQVZBU0NSSVBUCiAgICAgd2hpbGUg
KChjID0gKigrK3B0cikpICE9ICddJyk7Ci0jZWxzZQotICAgIHdoaWxlICgoYyA9ICooKytwdHIp
KSAhPSAnXScgfHwgaW5lc2NxKTsKLSNlbmRpZgogCiAgICAgLyogSWYgY2xhc3NfY2hhcmNvdW50
IGlzIDEsIHdlIHNhdyBwcmVjaXNlbHkgb25lIGNoYXJhY3RlciB3aG9zZSB2YWx1ZSBpcwogICAg
IGxlc3MgdGhhbiAyNTYuIEluIG5vbi1VVEYtOCBtb2RlIHdlIGNhbiBhbHdheXMgb3B0aW1pemUu
IEluIFVURi04IG1vZGUsIHdlCkBAIC0yMzMxLDE0ICsxMzg2LDggQEAgZm9yICg7OyBwdHIrKykK
ICAgICB0aGlzIGl0ZW0gaXMgZmlyc3QsIHdoYXRldmVyIHJlcGVhdCBjb3VudCBtYXkgZm9sbG93
LiBJbiB0aGUgY2FzZSBvZgogICAgIHJlcWJ5dGUsIHNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIGZv
ciByZWluc3RhdGluZy4gKi8KIAotI2lmZGVmIFNVUFBPUlRfVVRGOAogICAgIGlmIChjbGFzc19j
aGFyY291bnQgPT0gMSAmJgotICAgICAgICAgICghdXRmOCB8fAotICAgICAgICAgICghY2xhc3Nf
dXRmOCAmJiAoIW5lZ2F0ZV9jbGFzcyB8fCBjbGFzc19sYXN0Y2hhciA8IDEyOCkpKSkKLQotI2Vs
c2UKLSAgICBpZiAoY2xhc3NfY2hhcmNvdW50ID09IDEpCi0jZW5kaWYKKyAgICAgICAgICAoIWNs
YXNzX3V0ZjggJiYgKCFuZWdhdGVfY2xhc3MgfHwgY2xhc3NfbGFzdGNoYXIgPCAxMjgpKSkKICAg
ICAgIHsKICAgICAgIHplcm9yZXFieXRlID0gcmVxYnl0ZTsKIApAQCAtMjM1NiwxMSArMTQwNSw5
IEBAIGZvciAoOzsgcHRyKyspCiAgICAgICAvKiBGb3IgYSBzaW5nbGUsIHBvc2l0aXZlIGNoYXJh
Y3RlciwgZ2V0IHRoZSB2YWx1ZSBpbnRvIG1jYnVmZmVyLCBhbmQKICAgICAgIHRoZW4gd2UgY2Fu
IGhhbmRsZSB0aGlzIHdpdGggdGhlIG5vcm1hbCBvbmUtY2hhcmFjdGVyIGNvZGUuICovCiAKLSNp
ZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgIGlmICh1dGY4ICYmIGNsYXNzX2xhc3RjaGFyID4gMTI3
KQorICAgICAgaWYgKGNsYXNzX2xhc3RjaGFyID4gMTI3KQogICAgICAgICBtY2xlbmd0aCA9IF9w
Y3JlX29yZDJ1dGY4KGNsYXNzX2xhc3RjaGFyLCBtY2J1ZmZlcik7CiAgICAgICBlbHNlCi0jZW5k
aWYKICAgICAgICAgewogICAgICAgICBtY2J1ZmZlclswXSA9IGNsYXNzX2xhc3RjaGFyOwogICAg
ICAgICBtY2xlbmd0aCA9IDE7CkBAIC0yMzgxLDcgKzE0MjgsNiBAQCBmb3IgKDs7IHB0cisrKQog
ICAgIGV4dGVuZGVkIGNsYXNzLCB3aXRoIGl0cyBvd24gb3Bjb2RlLiBJZiB0aGVyZSBhcmUgbm8g
Y2hhcmFjdGVycyA8IDI1NiwKICAgICB3ZSBjYW4gb21pdCB0aGUgYml0bWFwLiAqLwogCi0jaWZk
ZWYgU1VQUE9SVF9VVEY4CiAgICAgaWYgKGNsYXNzX3V0ZjggJiYgIXNob3VsZF9mbGlwX25lZ2F0
aW9uKQogICAgICAgewogICAgICAgKmNsYXNzX3V0ZjhkYXRhKysgPSBYQ0xfRU5EOyAgICAvKiBN
YXJrcyB0aGUgZW5kIG9mIGV4dHJhIGRhdGEgKi8KQEAgLTI0MTMsNyArMTQ1OSw2IEBAIGZvciAo
OzsgcHRyKyspCiAgICAgICBQVVQocHJldmlvdXMsIDEsIGNvZGUgLSBwcmV2aW91cyk7CiAgICAg
ICBicmVhazsgICAvKiBFbmQgb2YgY2xhc3MgaGFuZGxpbmcgKi8KICAgICAgIH0KLSNlbmRpZgog
CiAgICAgLyogSWYgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgPiAyNTUsIG5lZ2F0ZSB0aGUgMzIt
Ynl0ZSBtYXAgaWYgbmVjZXNzYXJ5LAogICAgIGFuZCBjb3B5IGl0IGludG8gdGhlIGNvZGUgdmVj
dG9yLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgYnJhbmNoLApAQCAtMjQ5NCwy
NCArMTUzOSwxMCBAQCBmb3IgKDs7IHB0cisrKQogICAgICAgfQogICAgIGVsc2UgaWYgKHB0ciAr
IDEgPCBwYXR0ZXJuRW5kICYmIHB0clsxXSA9PSAnPycpCiAgICAgICB7Ci0gICAgICByZXBlYXRf
dHlwZSA9IGdyZWVkeV9ub25fZGVmYXVsdDsKKyAgICAgIHJlcGVhdF90eXBlID0gMTsKICAgICAg
IHB0cisrOwogICAgICAgfQotICAgIGVsc2UgcmVwZWF0X3R5cGUgPSBncmVlZHlfZGVmYXVsdDsK
LQotICAgIC8qIElmIHByZXZpb3VzIHdhcyBhIHJlY3Vyc2lvbiwgd2UgbmVlZCB0byB3cmFwIGl0
IGluc2lkZSBicmFja2V0cyBzbyB0aGF0Ci0gICAgaXQgY2FuIGJlIHJlcGxpY2F0ZWQgaWYgbmVj
ZXNzYXJ5LiAqLwotCi0gICAgaWYgKCpwcmV2aW91cyA9PSBPUF9SRUNVUlNFKQotICAgICAgewot
ICAgICAgbWVtbW92ZShwcmV2aW91cyArIDEgKyBMSU5LX1NJWkUsIHByZXZpb3VzLCAxICsgTElO
S19TSVpFKTsKLSAgICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKLSAgICAgICpwcmV2aW91cyA9
IE9QX0JSQTsKLSAgICAgIFBVVChwcmV2aW91cywgMSwgY29kZSAtIHByZXZpb3VzKTsKLSAgICAg
ICpjb2RlID0gT1BfS0VUOwotICAgICAgUFVUKGNvZGUsIDEsIGNvZGUgLSBwcmV2aW91cyk7Ci0g
ICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICB9CisgICAgZWxzZSByZXBlYXRfdHlw
ZSA9IDA7CiAKICAgICAvKiBJZiBwcmV2aW91cyB3YXMgYSBjaGFyYWN0ZXIgbWF0Y2gsIGFib2xp
c2ggdGhlIGl0ZW0gYW5kIGdlbmVyYXRlIGEKICAgICByZXBlYXQgaXRlbSBpbnN0ZWFkLiBJZiBh
IGNoYXIgaXRlbSBoYXMgYSBtaW51bXVtIG9mIG1vcmUgdGhhbiBvbmUsIGVuc3VyZQpAQCAtMjUy
Niw4ICsxNTU3LDcgQEAgZm9yICg7OyBwdHIrKykKICAgICAgIGhvbGQgdGhlIGxlbmd0aCBvZiB0
aGUgY2hhcmFjdGVyIGluIGJ5dGVzLCBwbHVzIDB4ODAgdG8gZmxhZyB0aGF0IGl0J3MgYQogICAg
ICAgbGVuZ3RoIHJhdGhlciB0aGFuIGEgc21hbGwgY2hhcmFjdGVyLiAqLwogCi0jaWZkZWYgU1VQ
UE9SVF9VVEY4Ci0gICAgICBpZiAodXRmOCAmJiAoY29kZVstMV0gJiAweDgwKSAhPSAwKQorICAg
ICAgaWYgKChjb2RlWy0xXSAmIDB4ODApICE9IDApCiAgICAgICAgIHsKICAgICAgICAgdXNjaGFy
ICpsYXN0Y2hhciA9IGNvZGUgLSAxOwogICAgICAgICB3aGlsZSgoKmxhc3RjaGFyICYgMHhjMCkg
PT0gMHg4MCkgbGFzdGNoYXItLTsKQEAgLTI1MzYsNyArMTU2Niw2IEBAIGZvciAoOzsgcHRyKysp
CiAgICAgICAgIGMgfD0gMHg4MDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBjIGFzIGEg
bGVuZ3RoICovCiAgICAgICAgIH0KICAgICAgIGVsc2UKLSNlbmRpZgogCiAgICAgICAvKiBIYW5k
bGUgdGhlIGNhc2Ugb2YgYSBzaW5nbGUgYnl0ZSAtIGVpdGhlciB3aXRoIG5vIFVURjggc3VwcG9y
dCwgb3IKICAgICAgIHdpdGggVVRGLTggZGlzYWJsZWQsIG9yIGZvciBhIFVURi04IGNoYXJhY3Rl
ciA8IDEyOC4gKi8KQEAgLTI1NjMsMTIgKzE1OTIsOSBAQCBmb3IgKDs7IHB0cisrKQogCiAgICAg
LyogSWYgcHJldmlvdXMgd2FzIGEgY2hhcmFjdGVyIHR5cGUgbWF0Y2ggKFxkIG9yIHNpbWlsYXIp
LCBhYm9saXNoIGl0IGFuZAogICAgIGNyZWF0ZSBhIHN1aXRhYmxlIHJlcGVhdCBpdGVtLiBUaGUg
Y29kZSBpcyBzaGFyZWQgd2l0aCBzaW5nbGUtY2hhcmFjdGVyCi0gICAgcmVwZWF0cyBieSBzZXR0
aW5nIG9wX3R5cGUgdG8gYWRkIGEgc3VpdGFibGUgb2Zmc2V0IGludG8gcmVwZWF0X3R5cGUuIE5v
dGUKLSAgICB0aGUgdGhlIFVuaWNvZGUgcHJvcGVydHkgdHlwZXMgd2lsbCBiZSBwcmVzZW50IG9u
bHkgd2hlbiBTVVBQT1JUX1VDUCBpcwotICAgIGRlZmluZWQsIGJ1dCB3ZSBkb24ndCB3cmFwIHRo
ZSBsaXR0bGUgYml0cyBvZiBjb2RlIGhlcmUgYmVjYXVzZSBpdCBqdXN0Ci0gICAgbWFrZXMgaXQg
aG9ycmlibHkgbWVzc3kuICovCisgICAgcmVwZWF0cyBieSBzZXR0aW5nIG9wX3R5cGUgdG8gYWRk
IGEgc3VpdGFibGUgb2Zmc2V0IGludG8gcmVwZWF0X3R5cGUuICovCiAKLSAgICBlbHNlIGlmICgq
cHJldmlvdXMgPCBPUF9FT0ROKQorICAgIGVsc2UgaWYgKCpwcmV2aW91cyA8PSBPUF9BTlkpCiAg
ICAgICB7CiAgICAgICB1c2NoYXIgKm9sZGNvZGU7CiAgICAgICBpbnQgcHJvcF90eXBlLCBwcm9w
X3ZhbHVlOwpAQCAtMjU3NiwxMiArMTYwMiw3IEBAIGZvciAoOzsgcHRyKyspCiAgICAgICBjID0g
KnByZXZpb3VzOwogCiAgICAgICBPVVRQVVRfU0lOR0xFX1JFUEVBVDoKLSAgICAgIGlmICgqcHJl
dmlvdXMgPT0gT1BfUFJPUCB8fCAqcHJldmlvdXMgPT0gT1BfTk9UUFJPUCkKLSAgICAgICAgewot
ICAgICAgICBwcm9wX3R5cGUgPSBwcmV2aW91c1sxXTsKLSAgICAgICAgcHJvcF92YWx1ZSA9IHBy
ZXZpb3VzWzJdOwotICAgICAgICB9Ci0gICAgICBlbHNlIHByb3BfdHlwZSA9IHByb3BfdmFsdWUg
PSAtMTsKKyAgICAgIHByb3BfdHlwZSA9IHByb3BfdmFsdWUgPSAtMTsKIAogICAgICAgb2xkY29k
ZSA9IGNvZGU7CiAgICAgICBjb2RlID0gcHJldmlvdXM7ICAgICAgICAgICAgICAgICAgLyogVXN1
YWxseSBvdmVyd3JpdGUgcHJldmlvdXMgaXRlbSAqLwpAQCAtMjU5MSwxMSArMTYxMiw2IEBAIGZv
ciAoOzsgcHRyKyspCiAKICAgICAgIGlmIChyZXBlYXRfbWF4ID09IDApIGdvdG8gRU5EX1JFUEVB
VDsKIAotICAgICAgLyogQWxsIHJlYWwgcmVwZWF0cyBtYWtlIGl0IGltcG9zc2libGUgdG8gaGFu
ZGxlIHBhcnRpYWwgbWF0Y2hpbmcgKG1heWJlCi0gICAgICBvbmUgZGF5IHdlIHdpbGwgYmUgYWJs
ZSB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbikuICovCi0KLSAgICAgIGlmIChyZXBlYXRfbWF4
ICE9IDEpIGNkLT5ub3BhcnRpYWwgPSBUUlVFOwotCiAgICAgICAvKiBDb21iaW5lIHRoZSBvcF90
eXBlIHdpdGggdGhlIHJlcGVhdF90eXBlICovCiAKICAgICAgIHJlcGVhdF90eXBlICs9IG9wX3R5
cGU7CkBAIC0yNjQ4LDE0ICsxNjY0LDEyIEBAIGZvciAoOzsgcHRyKyspCiAKICAgICAgICAgaWYg
KHJlcGVhdF9tYXggPCAwKQogICAgICAgICAgIHsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAg
ICAgICBpZiAodXRmOCAmJiBjID49IDEyOCkKKyAgICAgICAgICBpZiAoYyA+PSAxMjgpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICBtZW1jcHkoY29kZSwgdXRmOF9jaGFyLCBjICYgNyk7CiAg
ICAgICAgICAgICBjb2RlICs9IGMgJiA3OwogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UK
LSNlbmRpZgogICAgICAgICAgICAgewogICAgICAgICAgICAgKmNvZGUrKyA9IGM7CiAgICAgICAg
ICAgICBpZiAocHJvcF90eXBlID49IDApCkBAIC0yNjcyLDE0ICsxNjg2LDEyIEBAIGZvciAoOzsg
cHRyKyspCiAKICAgICAgICAgZWxzZSBpZiAocmVwZWF0X21heCAhPSByZXBlYXRfbWluKQogICAg
ICAgICAgIHsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICAgICBpZiAodXRmOCAmJiBjID49
IDEyOCkKKyAgICAgICAgICBpZiAoYyA+PSAxMjgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICBtZW1jcHkoY29kZSwgdXRmOF9jaGFyLCBjICYgNyk7CiAgICAgICAgICAgICBjb2RlICs9IGMg
JiA3OwogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKLSNlbmRpZgogICAgICAgICAgICpj
b2RlKysgPSBjOwogICAgICAgICAgIGlmIChwcm9wX3R5cGUgPj0gMCkKICAgICAgICAgICAgIHsK
QEAgLTI2OTQsMjYgKzE3MDYsMjIgQEAgZm9yICg7OyBwdHIrKykKIAogICAgICAgLyogVGhlIGNo
YXJhY3RlciBvciBjaGFyYWN0ZXIgdHlwZSBpdHNlbGYgY29tZXMgbGFzdCBpbiBhbGwgY2FzZXMu
ICovCiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgIGlmICh1dGY4ICYmIGMgPj0gMTI4KQor
ICAgICAgaWYgKGMgPj0gMTI4KQogICAgICAgICB7CiAgICAgICAgIG1lbWNweShjb2RlLCB1dGY4
X2NoYXIsIGMgJiA3KTsKICAgICAgICAgY29kZSArPSBjICYgNzsKICAgICAgICAgfQogICAgICAg
ZWxzZQotI2VuZGlmCiAgICAgICAqY29kZSsrID0gYzsKIAogICAgICAgLyogRm9yIGEgcmVwZWF0
ZWQgVW5pY29kZSBwcm9wZXJ0eSBtYXRjaCwgdGhlcmUgYXJlIHR3byBleHRyYSBieXRlcyB0aGF0
CiAgICAgICBkZWZpbmUgdGhlIHJlcXVpcmVkIHByb3BlcnR5LiAqLwogCi0jaWZkZWYgU1VQUE9S
VF9VQ1AKICAgICAgIGlmIChwcm9wX3R5cGUgPj0gMCkKICAgICAgICAgewogICAgICAgICAqY29k
ZSsrID0gcHJvcF90eXBlOwogICAgICAgICAqY29kZSsrID0gcHJvcF92YWx1ZTsKICAgICAgICAg
fQotI2VuZGlmCiAgICAgICB9CiAKICAgICAvKiBJZiBwcmV2aW91cyB3YXMgYSBjaGFyYWN0ZXIg
Y2xhc3Mgb3IgYSBiYWNrIHJlZmVyZW5jZSwgd2UgcHV0IHRoZSByZXBlYXQKQEAgLTI3MjEsOSAr
MTcyOSw3IEBAIGZvciAoOzsgcHRyKyspCiAKICAgICBlbHNlIGlmICgqcHJldmlvdXMgPT0gT1Bf
Q0xBU1MgfHwKICAgICAgICAgICAgICAqcHJldmlvdXMgPT0gT1BfTkNMQVNTIHx8Ci0jaWZkZWYg
U1VQUE9SVF9VVEY4CiAgICAgICAgICAgICAgKnByZXZpb3VzID09IE9QX1hDTEFTUyB8fAotI2Vu
ZGlmCiAgICAgICAgICAgICAgKnByZXZpb3VzID09IE9QX1JFRikKICAgICAgIHsKICAgICAgIGlm
IChyZXBlYXRfbWF4ID09IDApCkBAIC0yNzMyLDExICsxNzM4LDYgQEAgZm9yICg7OyBwdHIrKykK
ICAgICAgICAgZ290byBFTkRfUkVQRUFUOwogICAgICAgICB9CiAKLSAgICAgIC8qIEFsbCByZWFs
IHJlcGVhdHMgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGhhbmRsZSBwYXJ0aWFsIG1hdGNoaW5nICht
YXliZQotICAgICAgb25lIGRheSB3ZSB3aWxsIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgcmVzdHJp
Y3Rpb24pLiAqLwotCi0gICAgICBpZiAocmVwZWF0X21heCAhPSAxKSBjZC0+bm9wYXJ0aWFsID0g
VFJVRTsKLQogICAgICAgaWYgKHJlcGVhdF9taW4gPT0gMCAmJiByZXBlYXRfbWF4ID09IC0xKQog
ICAgICAgICAqY29kZSsrID0gT1BfQ1JTVEFSICsgcmVwZWF0X3R5cGU7CiAgICAgICBlbHNlIGlm
IChyZXBlYXRfbWluID09IDEgJiYgcmVwZWF0X21heCA9PSAtMSkKQEAgLTI3NTUsOCArMTc1Niw3
IEBAIGZvciAoOzsgcHRyKyspCiAgICAgLyogSWYgcHJldmlvdXMgd2FzIGEgYnJhY2tldCBncm91
cCwgd2UgbWF5IGhhdmUgdG8gcmVwbGljYXRlIGl0IGluIGNlcnRhaW4KICAgICBjYXNlcy4gKi8K
IAotICAgIGVsc2UgaWYgKCpwcmV2aW91cyA+PSBPUF9CUkEgfHwgKnByZXZpb3VzID09IE9QX09O
Q0UgfHwKLSAgICAgICAgICAgICAqcHJldmlvdXMgPT0gT1BfQ09ORCkKKyAgICBlbHNlIGlmICgq
cHJldmlvdXMgPj0gT1BfQlJBIHx8ICpwcmV2aW91cyA9PSBPUF9PTkNFKQogICAgICAgewogICAg
ICAgcmVnaXN0ZXIgaW50IGk7CiAgICAgICBpbnQga2V0b2Zmc2V0ID0gMDsKQEAgLTI4MDMsNyAr
MTgwMyw2IEBAIGZvciAoOzsgcHRyKyspCiAgICAgICAgIGlmIChyZXBlYXRfbWF4IDw9IDEpCiAg
ICAgICAgICAgewogICAgICAgICAgICpjb2RlID0gT1BfRU5EOwotICAgICAgICAgIGFkanVzdF9y
ZWN1cnNlKHByZXZpb3VzLCAxLCB1dGY4LCBjZCk7CiAgICAgICAgICAgbWVtbW92ZShwcmV2aW91
cysxLCBwcmV2aW91cywgbGVuKTsKICAgICAgICAgICBjb2RlKys7CiAgICAgICAgICAgKnByZXZp
b3VzKysgPSBPUF9CUkFaRVJPICsgcmVwZWF0X3R5cGU7CkBAIC0yODIxLDcgKzE4MjAsNiBAQCBm
b3IgKDs7IHB0cisrKQogICAgICAgICAgIHsKICAgICAgICAgICBpbnQgb2Zmc2V0OwogICAgICAg
ICAgICpjb2RlID0gT1BfRU5EOwotICAgICAgICAgIGFkanVzdF9yZWN1cnNlKHByZXZpb3VzLCAy
ICsgTElOS19TSVpFLCB1dGY4LCBjZCk7CiAgICAgICAgICAgbWVtbW92ZShwcmV2aW91cyArIDIg
KyBMSU5LX1NJWkUsIHByZXZpb3VzLCBsZW4pOwogICAgICAgICAgIGNvZGUgKz0gMiArIExJTktf
U0laRTsKICAgICAgICAgICAqcHJldmlvdXMrKyA9IE9QX0JSQVpFUk8gKyByZXBlYXRfdHlwZTsK
QEAgLTI5NTgsNjMgKzE5NTYsMTMgQEAgZm9yICg7OyBwdHIrKykKIAogICAgIGlmICgqKCsrcHRy
KSA9PSAnPycpCiAgICAgICB7Ci0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgIGludCBzZXQsIHVuc2V0
OwotICAgICAgaW50ICpvcHRzZXQ7Ci0jZW5kaWYKLQogICAgICAgc3dpdGNoICgqKCsrcHRyKSkK
ICAgICAgICAgewotI2lmICFKQVZBU0NSSVBUCi0gICAgICAgIGNhc2UgJyMnOiAgICAgICAgICAg
ICAgICAgLyogQ29tbWVudDsgc2tpcCB0byBrZXQgKi8KLSAgICAgICAgcHRyKys7Ci0gICAgICAg
IHdoaWxlICgqcHRyICE9ICcpJykgcHRyKys7Ci0gICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0K
ICAgICAgICAgY2FzZSAnOic6ICAgICAgICAgICAgICAgICAvKiBOb24tZXh0cmFjdGluZyBicmFj
a2V0ICovCiAgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBOwogICAgICAgICBwdHIrKzsKICAgICAg
ICAgYnJlYWs7CiAKLSNpZiAhSkFWQVNDUklQVAotICAgICAgICBjYXNlICcoJzoKLSAgICAgICAg
YnJhdmFsdWUgPSBPUF9DT05EOyAgICAgICAvKiBDb25kaXRpb25hbCBncm91cCAqLwotCi0gICAg
ICAgIC8qIENvbmRpdGlvbiB0byB0ZXN0IGZvciByZWN1cnNpb24gKi8KLQotICAgICAgICBpZiAo
cHRyWzFdID09ICdSJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgY29kZVsxK0xJTktfU0laRV0g
PSBPUF9DUkVGOwotICAgICAgICAgIFBVVDIoY29kZSwgMitMSU5LX1NJWkUsIENSRUZfUkVDVVJT
RSk7Ci0gICAgICAgICAgc2tpcGJ5dGVzID0gMzsKLSAgICAgICAgICBwdHIgKz0gMzsKLSAgICAg
ICAgICB9Ci0KLSAgICAgICAgLyogQ29uZGl0aW9uIHRvIHRlc3QgZm9yIGEgbnVtYmVyZWQgc3Vi
cGF0dGVybiBtYXRjaC4gV2Uga25vdyB0aGF0Ci0gICAgICAgIGlmIGEgZGlnaXQgZm9sbG93cyAo
IHRoZW4gdGhlcmUgd2lsbCBqdXN0IGJlIGRpZ2l0cyB1bnRpbCApIGJlY2F1c2UKLSAgICAgICAg
dGhlIHN5bnRheCB3YXMgY2hlY2tlZCBpbiB0aGUgZmlyc3QgcGFzcy4gKi8KLQotICAgICAgICBl
bHNlIGlmICgoZGlnaXRhYltwdHJbMV1dICYmIGN0eXBlX2RpZ2l0KSAhPSAwKQotICAgICAgICAg
IHsKLSAgICAgICAgICBpbnQgY29uZHJlZjsgICAgICAgICAgICAgICAgIC8qIERvbid0IGFtYWxn
YW1hdGU7IHNvbWUgY29tcGlsZXJzICovCi0gICAgICAgICAgY29uZHJlZiA9ICooKytwdHIpIC0g
JzAnOyAgICAvKiBncnVtYmxlIGF0IGF1dG9pbmNyZW1lbnQgaW4gZGVjbGFyYXRpb24gKi8KLSAg
ICAgICAgICB3aGlsZSAoKigrK3B0cikgIT0gJyknKSBjb25kcmVmID0gY29uZHJlZioxMCArICpw
dHIgLSAnMCc7Ci0gICAgICAgICAgaWYgKGNvbmRyZWYgPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIzNTsKLSAgICAgICAgICAgIGdvdG8gRkFJTEVE
OwotICAgICAgICAgICAgfQotICAgICAgICAgIHB0cisrOwotICAgICAgICAgIGNvZGVbMStMSU5L
X1NJWkVdID0gT1BfQ1JFRjsKLSAgICAgICAgICBQVVQyKGNvZGUsIDIrTElOS19TSVpFLCBjb25k
cmVmKTsKLSAgICAgICAgICBza2lwYnl0ZXMgPSAzOwotICAgICAgICAgIH0KLSAgICAgICAgLyog
Rm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgYXNzZXJ0aW9ucywgd2UganVzdCBmYWxsIHRocm91Z2gs
IGhhdmluZwotICAgICAgICBzZXQgYnJhdmFsdWUgYWJvdmUuICovCi0gICAgICAgIGJyZWFrOwot
I2VuZGlmCi0KICAgICAgICAgY2FzZSAnPSc6ICAgICAgICAgICAgICAgICAvKiBQb3NpdGl2ZSBs
b29rYWhlYWQgKi8KICAgICAgICAgYnJhdmFsdWUgPSBPUF9BU1NFUlQ7CiAgICAgICAgIHB0cisr
OwpAQCAtMzAyNSwyNzkgKzE5NzMsMjAgQEAgZm9yICg7OyBwdHIrKykKICAgICAgICAgcHRyKys7
CiAgICAgICAgIGJyZWFrOwogCi0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgICAgY2FzZSAnPCc6ICAg
ICAgICAgICAgICAgICAvKiBMb29rYmVoaW5kcyAqLwotICAgICAgICBzd2l0Y2ggKCooKytwdHIp
KQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlICc9JzogICAgICAgICAgICAgICAvKiBQb3Np
dGl2ZSBsb29rYmVoaW5kICovCi0gICAgICAgICAgYnJhdmFsdWUgPSBPUF9BU1NFUlRCQUNLOwot
ICAgICAgICAgIHB0cisrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnISc6
ICAgICAgICAgICAgICAgLyogTmVnYXRpdmUgbG9va2JlaGluZCAqLwotICAgICAgICAgIGJyYXZh
bHVlID0gT1BfQVNTRVJUQkFDS19OT1Q7Ci0gICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICc+JzogICAg
ICAgICAgICAgICAgIC8qIE9uZS10aW1lIGJyYWNrZXRzICovCi0gICAgICAgIGJyYXZhbHVlID0g
T1BfT05DRTsKLSAgICAgICAgcHRyKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
J0MnOiAgICAgICAgICAgICAgICAgLyogQ2FsbG91dCAtIG1heSBiZSBmb2xsb3dlZCBieSBkaWdp
dHM7ICovCi0gICAgICAgIHByZXZpb3VzX2NhbGxvdXQgPSBjb2RlOyAgLyogU2F2ZSBmb3IgbGF0
ZXIgY29tcGxldGlvbiAqLwotICAgICAgICBhZnRlcl9tYW51YWxfY2FsbG91dCA9IDE7IC8qIFNr
aXAgb25lIGl0ZW0gYmVmb3JlIGNvbXBsZXRpbmcgKi8KLSAgICAgICAgKmNvZGUrKyA9IE9QX0NB
TExPVVQ7ICAgICAvKiBBbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgdGVybWluYXRpbmcgKi8KLSAg
ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zaW5nIHBhcmVudGhlc2lzIGlz
IHByZXNlbnQuICovCi0gICAgICAgICAgaW50IG4gPSAwOwotICAgICAgICAgICsrcHRyOwotICAg
ICAgICAgIHdoaWxlICgoZGlnaXRhYlsqcHRyXSAmIGN0eXBlX2RpZ2l0KSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgbiA9IG4gKiAxMCArICpwdHIgLSAnMCc7Ci0gICAgICAgICAg
ICArK3B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobiA+IDI1NSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIzODsKLSAgICAgICAgICAgIGdv
dG8gRkFJTEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICpjb2RlKysgPSBuOwotICAgICAg
ICAgIFBVVChjb2RlLCAwLCBwdHIgLSBjZC0+c3RhcnRfcGF0dGVybiArIDEpOyAgLyogUGF0dGVy
biBvZmZzZXQgKi8KLSAgICAgICAgICBQVVQoY29kZSwgTElOS19TSVpFLCAwKTsgICAgICAgICAg
ICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoICovCi0gICAgICAgICAgY29kZSArPSAyICogTElO
S19TSVpFOwotICAgICAgICAgIH0KLSAgICAgICAgcHJldmlvdXMgPSBOVUxMOwotICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBjYXNlICdQJzogICAgICAgICAgICAgICAgIC8qIE5hbWVkIHN1
YnBhdHRlcm4gaGFuZGxpbmcgKi8KLSAgICAgICAgaWYgKCooKytwdHIpID09ICc8JykgICAgICAv
KiBEZWZpbml0aW9uICovCi0gICAgICAgICAgewotICAgICAgICAgIGludCBpLCBuYW1lbGVuOwot
ICAgICAgICAgIHVzY2hhciAqc2xvdCA9IGNkLT5uYW1lX3RhYmxlOwotICAgICAgICAgIGNvbnN0
IHBjcmVfdWNoYXIgKm5hbWU7IC8qIERvbid0IGFtYWxnYW1hdGU7IHNvbWUgY29tcGlsZXJzICov
Ci0gICAgICAgICAgbmFtZSA9ICsrcHRyOyAgICAgICAgICAgLyogZ3J1bWJsZSBhdCBhdXRvaW5j
cmVtZW50IGluIGRlY2xhcmF0aW9uICovCi0KLSAgICAgICAgICB3aGlsZSAoKnB0cisrICE9ICc+
Jyk7Ci0gICAgICAgICAgbmFtZWxlbiA9IHB0ciAtIG5hbWUgLSAxOwotCi0gICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGNkLT5uYW1lc19mb3VuZDsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgaW50IGNyYyA9IG1lbWNtcChuYW1lLCBzbG90KzIsIG5hbWVsZW4pOwotICAgICAgICAg
ICAgaWYgKGNyYyA9PSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChzbG90
WzIrbmFtZWxlbl0gPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKmVy
cm9yY29kZXB0ciA9IEVSUjQzOwotICAgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY3JjID0gLTE7ICAgICAgICAgICAgIC8qIEN1cnJl
bnQgbmFtZSBpcyBzdWJzdHJpbmcgKi8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGNyYyA8IDApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVtbW92ZShzbG90ICsg
Y2QtPm5hbWVfZW50cnlfc2l6ZSwgc2xvdCwKLSAgICAgICAgICAgICAgICAoY2QtPm5hbWVzX2Zv
dW5kIC0gaSkgKiBjZC0+bmFtZV9lbnRyeV9zaXplKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNsb3QgKz0gY2QtPm5hbWVfZW50cnlfc2l6ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgIFBVVDIoc2xvdCwgMCwgKmJyYWNrZXRzICsgMSk7
Ci0gICAgICAgICAgbWVtY3B5KHNsb3QgKyAyLCBuYW1lLCBuYW1lbGVuKTsKLSAgICAgICAgICBz
bG90WzIrbmFtZWxlbl0gPSAwOwotICAgICAgICAgIGNkLT5uYW1lc19mb3VuZCsrOwotICAgICAg
ICAgIGdvdG8gTlVNQkVSRURfR1JPVVA7Ci0gICAgICAgICAgfQotCi0gICAgICAgIGlmICgqcHRy
ID09ICc9JyB8fCAqcHRyID09ICc+JykgIC8qIFJlZmVyZW5jZSBvciByZWN1cnNpb24gKi8KLSAg
ICAgICAgICB7Ci0gICAgICAgICAgaW50IGksIG5hbWVsZW47Ci0gICAgICAgICAgaW50IHR5cGUg
PSAqcHRyKys7Ci0gICAgICAgICAgY29uc3QgdXNjaGFyICpuYW1lID0gcHRyOwotICAgICAgICAg
IHVzY2hhciAqc2xvdCA9IGNkLT5uYW1lX3RhYmxlOwotCi0gICAgICAgICAgd2hpbGUgKCpwdHIg
IT0gJyknKSBwdHIrKzsKLSAgICAgICAgICBuYW1lbGVuID0gcHRyIC0gbmFtZTsKLQotICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBjZC0+bmFtZXNfZm91bmQ7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChzdHJuY21wKChjaGFyICopbmFtZSwgKGNoYXIgKilzbG90KzIsIG5h
bWVsZW4pID09IDApIGJyZWFrOwotICAgICAgICAgICAgc2xvdCArPSBjZC0+bmFtZV9lbnRyeV9z
aXplOwotICAgICAgICAgICAgfQotICAgICAgICAgIGlmIChpID49IGNkLT5uYW1lc19mb3VuZCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxNTsKLSAgICAg
ICAgICAgIGdvdG8gRkFJTEVEOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgcmVjbm8gPSBH
RVQyKHNsb3QsIDApOwotCi0gICAgICAgICAgaWYgKHR5cGUgPT0gJz4nKSBnb3RvIEhBTkRMRV9S
RUNVUlNJT047ICAvKiBBIGZldyBsaW5lcyBiZWxvdyAqLwotCi0gICAgICAgICAgLyogQmFjayBy
ZWZlcmVuY2UgKi8KLQotICAgICAgICAgIHByZXZpb3VzID0gY29kZTsKLSAgICAgICAgICAqY29k
ZSsrID0gT1BfUkVGOwotICAgICAgICAgIFBVVDJJTkMoY29kZSwgMCwgcmVjbm8pOwotICAgICAg
ICAgIGNkLT5iYWNrcmVmX21hcCB8PSAocmVjbm8gPCAzMik/ICgxIDw8IHJlY25vKSA6IDE7Ci0g
ICAgICAgICAgaWYgKHJlY25vID4gY2QtPnRvcF9iYWNrcmVmKSBjZC0+dG9wX2JhY2tyZWYgPSBy
ZWNubzsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgLyogU2hv
dWxkIG5ldmVyIGhhcHBlbiAqLwotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdSJzog
ICAgICAgICAgICAgICAgIC8qIFBhdHRlcm4gcmVjdXJzaW9uICovCi0gICAgICAgIHB0cisrOyAg
ICAgICAgICAgICAgICAgICAgLyogU2FtZSBhcyAoPzApICAgICAgKi8KLSAgICAgICAgLyogRmFs
bCB0aHJvdWdoICovCi0KLSAgICAgICAgLyogUmVjdXJzaW9uIG9yICJzdWJyb3V0aW5lIiBjYWxs
ICovCi0KLSAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNh
c2UgJzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4Jzog
Y2FzZSAnOSc6Ci0gICAgICAgICAgewotICAgICAgICAgIGNvbnN0IHVzY2hhciAqY2FsbGVkOwot
ICAgICAgICAgIHJlY25vID0gMDsKLSAgICAgICAgICB3aGlsZSgoZGlnaXRhYlsqcHRyXSAmIGN0
eXBlX2RpZ2l0KSAhPSAwKQotICAgICAgICAgICAgcmVjbm8gPSByZWNubyAqIDEwICsgKnB0cisr
IC0gJzAnOwotCi0gICAgICAgICAgLyogQ29tZSBoZXJlIGZyb20gY29kZSBhYm92ZSB0aGF0IGhh
bmRsZXMgYSBuYW1lZCByZWN1cnNpb24gKi8KLQotICAgICAgICAgIEhBTkRMRV9SRUNVUlNJT046
Ci0KLSAgICAgICAgICBwcmV2aW91cyA9IGNvZGU7Ci0KLSAgICAgICAgICAvKiBGaW5kIHRoZSBi
cmFja2V0IHRoYXQgaXMgYmVpbmcgcmVmZXJlbmNlZC4gVGVtcG9yYXJpbHkgZW5kIHRoZQotICAg
ICAgICAgIHJlZ2V4IGluIGNhc2UgaXQgZG9lc24ndCBleGlzdC4gKi8KLQotICAgICAgICAgICpj
b2RlID0gT1BfRU5EOwotICAgICAgICAgIGNhbGxlZCA9IChyZWNubyA9PSAwKT8KLSAgICAgICAg
ICAgIGNkLT5zdGFydF9jb2RlIDogZmluZF9icmFja2V0KGNkLT5zdGFydF9jb2RlLCB1dGY4LCBy
ZWNubyk7Ci0KLSAgICAgICAgICBpZiAoY2FsbGVkID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTU7Ci0gICAgICAgICAgICBnb3RvIEZBSUxF
RDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIElmIHRoZSBzdWJwYXR0ZXJuIGlzIHN0
aWxsIG9wZW4sIHRoaXMgaXMgYSByZWN1cnNpdmUgY2FsbC4gV2UKLSAgICAgICAgICBjaGVjayB0
byBzZWUgaWYgdGhpcyBpcyBhIGxlZnQgcmVjdXJzaW9uIHRoYXQgY291bGQgbG9vcCBmb3IgZXZl
ciwKLSAgICAgICAgICBhbmQgZGlhZ25vc2UgdGhhdCBjYXNlLiAqLwotCi0gICAgICAgICAgaWYg
KEdFVChjYWxsZWQsIDEpID09IDAgJiYgY291bGRfYmVfZW1wdHkoY2FsbGVkLCBjb2RlLCBiY3B0
ciwgdXRmOCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJS
NDA7Ci0gICAgICAgICAgICBnb3RvIEZBSUxFRDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
IC8qIEluc2VydCB0aGUgcmVjdXJzaW9uL3N1YnJvdXRpbmUgaXRlbSwgYXV0b21hdGljYWxseSB3
cmFwcGVkIGluc2lkZQotICAgICAgICAgICJvbmNlIiBicmFja2V0cy4gKi8KLQotICAgICAgICAg
ICpjb2RlID0gT1BfT05DRTsKLSAgICAgICAgICBQVVQoY29kZSwgMSwgMiArIDIqTElOS19TSVpF
KTsKLSAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7Ci0KLSAgICAgICAgICAqY29kZSA9
IE9QX1JFQ1VSU0U7Ci0gICAgICAgICAgUFVUKGNvZGUsIDEsIGNhbGxlZCAtIGNkLT5zdGFydF9j
b2RlKTsKLSAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7Ci0KLSAgICAgICAgICAqY29k
ZSA9IE9QX0tFVDsKLSAgICAgICAgICBQVVQoY29kZSwgMSwgMiArIDIqTElOS19TSVpFKTsKLSAg
ICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICAgICAgfQotICAgICAgICBjb250
aW51ZTsKLSNlbmRpZgotCiAgICAgICAgIC8qIENoYXJhY3RlciBhZnRlciAoPyBub3Qgc3BlY2lh
bGx5IHJlY29nbml6ZWQgKi8KIAogICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIC8q
IE9wdGlvbiBzZXR0aW5nICovCi0jaWYgSkFWQVNDUklQVAogICAgICAgICAqZXJyb3Jjb2RlcHRy
ID0gRVJSMTI7CiAgICAgICAgIGdvdG8gRkFJTEVEOwotI2Vsc2UKLSAgICAgICAgc2V0ID0gdW5z
ZXQgPSAwOwotICAgICAgICBvcHRzZXQgPSAmc2V0OwotCi0gICAgICAgIHdoaWxlICgqcHRyICE9
ICcpJyAmJiAqcHRyICE9ICc6JykKLSAgICAgICAgICB7Ci0gICAgICAgICAgc3dpdGNoICgqcHRy
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlICctJzogb3B0c2V0ID0gJnVuc2V0
OyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnaSc6ICpvcHRzZXQgfD0gUENSRV9DQVNFTEVT
UzsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdtJzogKm9wdHNldCB8PSBQQ1JFX01VTFRJTElO
RTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdzJzogKm9wdHNldCB8PSBQQ1JFX0RPVEFMTDsg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd4JzogKm9wdHNldCB8PSBQQ1JFX0VYVEVOREVEOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1UnOiAqb3B0c2V0IHw9IFBDUkVfVU5HUkVFRFk7IGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSAnWCc6ICpvcHRzZXQgfD0gUENSRV9FWFRSQTsgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgIC8qIFNldCB1cCB0aGUgY2hh
bmdlZCBvcHRpb24gYml0cywgYnV0IGRvbid0IGNoYW5nZSBhbnl0aGluZyB5ZXQuICovCi0KLSAg
ICAgICAgbmV3b3B0aW9ucyA9IChvcHRpb25zIHwgc2V0KSAmICh+dW5zZXQpOwotCi0gICAgICAg
IC8qIElmIHRoZSBvcHRpb25zIGVuZGVkIHdpdGggJyknIHRoaXMgaXMgbm90IHRoZSBzdGFydCBv
ZiBhIG5lc3RlZAotICAgICAgICBncm91cCB3aXRoIG9wdGlvbiBjaGFuZ2VzLCBzbyB0aGUgb3B0
aW9ucyBjaGFuZ2UgYXQgdGhpcyBsZXZlbC4gQ29tcGlsZQotICAgICAgICBjb2RlIHRvIGNoYW5n
ZSB0aGUgaW1zIG9wdGlvbnMgaWYgdGhpcyBzZXR0aW5nIGFjdHVhbGx5IGNoYW5nZXMgYW55IG9m
Ci0gICAgICAgIHRoZW0uIFdlIGFsc28gcGFzcyB0aGUgbmV3IHNldHRpbmcgYmFjayBzbyB0aGF0
IGl0IGNhbiBiZSBwdXQgYXQgdGhlCi0gICAgICAgIHN0YXJ0IG9mIGFueSBmb2xsb3dpbmcgYnJh
bmNoZXMsIGFuZCB3aGVuIHRoaXMgZ3JvdXAgZW5kcyAoaWYgd2UgYXJlIGluCi0gICAgICAgIGEg
Z3JvdXApLCBhIHJlc2V0dGluZyBpdGVtIGNhbiBiZSBjb21waWxlZC4KLQotICAgICAgICBOb3Rl
IHRoYXQgaWYgdGhpcyBpdGVtIGlzIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwg
dGhlCi0gICAgICAgIG9wdGlvbnMgd2lsbCBoYXZlIGJlZW4gYWJzdHJhY3RlZCBhbmQgbWFkZSBn
bG9iYWwsIHNvIHRoZXJlIHdpbGwgYmUgbm8KLSAgICAgICAgY2hhbmdlIHRvIGNvbXBpbGUuICov
Ci0KLSAgICAgICAgaWYgKCpwdHIgPT0gJyknKQotICAgICAgICAgIHsKLSAgICAgICAgICBpZiAo
KG9wdGlvbnMgJiBQQ1JFX0lNUykgIT0gKG5ld29wdGlvbnMgJiBQQ1JFX0lNUykpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAqY29kZSsrID0gT1BfT1BUOwotICAgICAgICAgICAgKmNvZGUr
KyA9IG5ld29wdGlvbnMgJiBQQ1JFX0lNUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIC8q
IENoYW5nZSBvcHRpb25zIGF0IHRoaXMgbGV2ZWwsIGFuZCBwYXNzIHRoZW0gYmFjayBmb3IgdXNl
Ci0gICAgICAgICAgaW4gc3Vic2VxdWVudCBicmFuY2hlcy4gUmVzZXQgdGhlIGdyZWVkeSBkZWZh
dWx0cyBhbmQgdGhlIGNhc2UKLSAgICAgICAgICB2YWx1ZSBmb3IgZmlyc3RieXRlIGFuZCByZXFi
eXRlLiAqLwotCi0gICAgICAgICAgKm9wdGlvbnNwdHIgPSBvcHRpb25zID0gbmV3b3B0aW9uczsK
LSAgICAgICAgICBncmVlZHlfZGVmYXVsdCA9ICgobmV3b3B0aW9ucyAmIFBDUkVfVU5HUkVFRFkp
ICE9IDApOwotICAgICAgICAgIGdyZWVkeV9ub25fZGVmYXVsdCA9IGdyZWVkeV9kZWZhdWx0IF4g
MTsKLSAgICAgICAgICByZXFfY2FzZW9wdCA9ICgob3B0aW9ucyAmIFBDUkVfQ0FTRUxFU1MpICE9
IDApPyBSRVFfQ0FTRUxFU1MgOiAwOwotCi0gICAgICAgICAgcHJldmlvdXMgPSBOVUxMOyAgICAg
ICAvKiBUaGlzIGl0ZW0gY2FuJ3QgYmUgcmVwZWF0ZWQgKi8KLSAgICAgICAgICBjb250aW51ZTsg
ICAgICAgICAgICAgIC8qIEl0IGlzIGNvbXBsZXRlICovCi0gICAgICAgICAgfQotCi0gICAgICAg
IC8qIElmIHRoZSBvcHRpb25zIGVuZGVkIHdpdGggJzonIHdlIGFyZSBoZWFkaW5nIGludG8gYSBu
ZXN0ZWQgZ3JvdXAKLSAgICAgICAgd2l0aCBwb3NzaWJsZSBjaGFuZ2Ugb2Ygb3B0aW9ucy4gU3Vj
aCBncm91cHMgYXJlIG5vbi1jYXB0dXJpbmcgYW5kIGFyZQotICAgICAgICBub3QgYXNzZXJ0aW9u
cyBvZiBhbnkga2luZC4gQWxsIHdlIG5lZWQgdG8gZG8gaXMgc2tpcCBvdmVyIHRoZSAnOic7Ci0g
ICAgICAgIHRoZSBuZXdvcHRpb25zIHZhbHVlIGlzIGhhbmRsZWQgYmVsb3cuICovCi0KLSAgICAg
ICAgYnJhdmFsdWUgPSBPUF9CUkE7Ci0gICAgICAgIHB0cisrOwotI2VuZGlmCiAgICAgICAgIH0K
ICAgICAgIH0KIAotICAgIC8qIElmIFBDUkVfTk9fQVVUT19DQVBUVVJFIGlzIHNldCwgYWxsIHVu
YWRvcm5lZCBicmFja2V0cyBiZWNvbWUKLSAgICBub24tY2FwdHVyaW5nIGFuZCBiZWhhdmUgbGlr
ZSAoPzouLi4pIGJyYWNrZXRzICovCi0KLSAgICBlbHNlIGlmICgob3B0aW9ucyAmIFBDUkVfTk9f
QVVUT19DQVBUVVJFKSAhPSAwKQotICAgICAgewotICAgICAgYnJhdmFsdWUgPSBPUF9CUkE7Ci0g
ICAgICB9Ci0KICAgICAvKiBFbHNlIHdlIGhhdmUgYSByZWZlcmVuY2luZyBncm91cDsgYWRqdXN0
IHRoZSBvcGNvZGUuIElmIHRoZSBicmFja2V0CiAgICAgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBF
WFRSQUNUX0JBU0lDX01BWCwgd2Ugc2V0IHRoZSBvcGNvZGUgb25lIGhpZ2hlciwgYW5kCiAgICAg
YXJyYW5nZSBmb3IgdGhlIHRydWUgbnVtYmVyIHRvIGZvbGxvdyBsYXRlciwgaW4gYW4gT1BfQlJB
TlVNQkVSIGl0ZW0uICovCiAKICAgICBlbHNlCiAgICAgICB7Ci0jaWYgIUpBVkFTQ1JJUFQKLSAg
ICAgIE5VTUJFUkVEX0dST1VQOgotI2VuZGlmCiAgICAgICBpZiAoKysoKmJyYWNrZXRzKSA+IEVY
VFJBQ1RfQkFTSUNfTUFYKQogICAgICAgICB7CiAgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBICsg
RVhUUkFDVF9CQVNJQ19NQVggKyAxOwpAQCAtMzMyMCwxNCArMjAwOSwxMSBAQCBmb3IgKDs7IHB0
cisrKQogCiAgICAgaWYgKCFjb21waWxlX3JlZ2V4KAogICAgICAgICAgbmV3b3B0aW9ucywgICAg
ICAgICAgICAgICAgICAgLyogVGhlIGNvbXBsZXRlIG5ldyBvcHRpb24gc3RhdGUgKi8KLSAgICAg
ICAgIG9wdGlvbnMgJiBQQ1JFX0lNUywgICAgICAgICAgIC8qIFRoZSBwcmV2aW91cyBpbXMgb3B0
aW9uIHN0YXRlICovCiAgICAgICAgICBicmFja2V0cywgICAgICAgICAgICAgICAgICAgICAvKiBF
eHRyYWN0aW5nIGJyYWNrZXQgY291bnQgKi8KICAgICAgICAgICZ0ZW1wY29kZSwgICAgICAgICAg
ICAgICAgICAgIC8qIFdoZXJlIHRvIHB1dCBjb2RlICh1cGRhdGVkKSAqLwogICAgICAgICAgJnB0
ciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgcG9pbnRlciAodXBkYXRlZCkgKi8K
ICAgICAgICAgIHBhdHRlcm5FbmQsCiAgICAgICAgICBlcnJvcmNvZGVwdHIsICAgICAgICAgICAg
ICAgICAvKiBXaGVyZSB0byBwdXQgYW4gZXJyb3IgbWVzc2FnZSAqLwotICAgICAgICAgKGJyYXZh
bHVlID09IE9QX0FTU0VSVEJBQ0sgfHwKLSAgICAgICAgICBicmF2YWx1ZSA9PSBPUF9BU1NFUlRC
QUNLX05PVCksIC8qIFRSVUUgaWYgYmFjayBhc3NlcnQgKi8KICAgICAgICAgIHNraXBieXRlcywg
ICAgICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBPUF9DT05EL09QX0JSQU5VTUJFUiAqLwog
ICAgICAgICAgJnN1YmZpcnN0Ynl0ZSwgICAgICAgICAgICAgICAgLyogRm9yIHBvc3NpYmxlIGZp
cnN0IGNoYXIgKi8KICAgICAgICAgICZzdWJyZXFieXRlLCAgICAgICAgICAgICAgICAgIC8qIEZv
ciBwb3NzaWJsZSBsYXN0IGNoYXIgKi8KQEAgLTMzNDAsMzIgKzIwMjYsNiBAQCBmb3IgKDs7IHB0
cisrKQogICAgIGFuZCBhbnkgb3B0aW9uIHJlc2V0dGluZyB0aGF0IG1heSBmb2xsb3cgaXQuIFRo
ZSBwYXR0ZXJuIHBvaW50ZXIgKHB0cikKICAgICBpcyBvbiB0aGUgYnJhY2tldC4gKi8KIAotICAg
IC8qIElmIHRoaXMgaXMgYSBjb25kaXRpb25hbCBicmFja2V0LCBjaGVjayB0aGF0IHRoZXJlIGFy
ZSBubyBtb3JlIHRoYW4KLSAgICB0d28gYnJhbmNoZXMgaW4gdGhlIGdyb3VwLiAqLwotCi0gICAg
ZWxzZSBpZiAoYnJhdmFsdWUgPT0gT1BfQ09ORCkKLSAgICAgIHsKLSAgICAgIHVzY2hhciAqdGMg
PSBjb2RlOwotICAgICAgY29uZGNvdW50ID0gMDsKLQotICAgICAgZG8gewotICAgICAgICAgY29u
ZGNvdW50Kys7Ci0gICAgICAgICB0YyArPSBHRVQodGMsMSk7Ci0gICAgICAgICB9Ci0gICAgICB3
aGlsZSAoKnRjICE9IE9QX0tFVCk7Ci0KLSAgICAgIGlmIChjb25kY291bnQgPiAyKQotICAgICAg
ICB7Ci0gICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyNzsKLSAgICAgICAgZ290byBGQUlMRUQ7
Ci0gICAgICAgIH0KLQotICAgICAgLyogSWYgdGhlcmUgaXMganVzdCBvbmUgYnJhbmNoLCB3ZSBt
dXN0IG5vdCBtYWtlIHVzZSBvZiBpdHMgZmlyc3RieXRlIG9yCi0gICAgICByZXFieXRlLCBiZWNh
dXNlIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzZWNvbmQgYnJhbmNoLiAqLwotCi0g
ICAgICBpZiAoY29uZGNvdW50ID09IDEpIHN1YmZpcnN0Ynl0ZSA9IHN1YnJlcWJ5dGUgPSBSRVFf
Tk9ORTsKLSAgICAgIH0KLQogICAgIC8qIEhhbmRsZSB1cGRhdGluZyBvZiB0aGUgcmVxdWlyZWQg
YW5kIGZpcnN0IGNoYXJhY3RlcnMuIFVwZGF0ZSBmb3Igbm9ybWFsCiAgICAgYnJhY2tldHMgb2Yg
YWxsIGtpbmRzLCBhbmQgY29uZGl0aW9ucyB3aXRoIHR3byBicmFuY2hlcyAoc2VlIGNvZGUgYWJv
dmUpLgogICAgIElmIHRoZSBicmFja2V0IGlzIGZvbGxvd2VkIGJ5IGEgcXVhbnRpZmllciB3aXRo
IHplcm8gcmVwZWF0LCB3ZSBoYXZlIHRvCkBAIC0zMzc2LDcgKzIwMzYsNyBAQCBmb3IgKDs7IHB0
cisrKQogICAgIHplcm9maXJzdGJ5dGUgPSBmaXJzdGJ5dGU7CiAgICAgZ3JvdXBzZXRmaXJzdGJ5
dGUgPSBGQUxTRTsKIAotICAgIGlmIChicmF2YWx1ZSA+PSBPUF9CUkEgfHwgYnJhdmFsdWUgPT0g
T1BfT05DRSB8fCBicmF2YWx1ZSA9PSBPUF9DT05EKQorICAgIGlmIChicmF2YWx1ZSA+PSBPUF9C
UkEgfHwgYnJhdmFsdWUgPT0gT1BfT05DRSkKICAgICAgIHsKICAgICAgIC8qIElmIHdlIGhhdmUg
bm90IHlldCBzZXQgYSBmaXJzdGJ5dGUgaW4gdGhpcyBicmFuY2gsIHRha2UgaXQgZnJvbSB0aGUK
ICAgICAgIHN1YnBhdHRlcm4sIHJlbWVtYmVyaW5nIHRoYXQgaXQgd2FzIHNldCBoZXJlIHNvIHRo
YXQgYSByZXBlYXQgb2YgbW9yZQpAQCAtMzQzNyw3ICsyMDk3LDcgQEAgZm9yICg7OyBwdHIrKykK
IAogICAgIGNhc2UgJ1xcJzoKICAgICB0ZW1wcHRyID0gcHRyOwotICAgIGMgPSBjaGVja19lc2Nh
cGUoJnB0ciwgcGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIG9wdGlvbnMsIEZB
TFNFKTsKKyAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0
ciwgKmJyYWNrZXRzLCBGQUxTRSk7CiAKICAgICAvKiBIYW5kbGUgbWV0YWNoYXJhY3RlcnMgaW50
cm9kdWNlZCBieSBcLiBGb3Igb25lcyBsaWtlIFxkLCB0aGUgRVNDXyB2YWx1ZXMKICAgICBhcmUg
YXJyYW5nZWQgdG8gYmUgdGhlIG5lZ2F0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIE9QX3ZhbHVl
cy4gRm9yIHRoZQpAQCAtMzQ0OCwxNSArMjEwOCw2IEBAIGZvciAoOzsgcHRyKyspCiAKICAgICBp
ZiAoYyA8IDApCiAgICAgICB7Ci0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgIGlmICgtYyA9PSBFU0Nf
USkgICAgICAgICAgICAvKiBIYW5kbGUgc3RhcnQgb2YgcXVvdGVkIHN0cmluZyAqLwotICAgICAg
ICB7Ci0gICAgICAgIGlmIChwdHIgKyAyIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0gPT0gJ1xcJyAm
JiBwdHJbMl0gPT0gJ0UnKSBwdHIgKz0gMjsgLyogYXZvaWQgZW1wdHkgc3RyaW5nICovCi0gICAg
ICAgICAgZWxzZSBpbmVzY3EgPSBUUlVFOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
I2VuZGlmCi0KICAgICAgIC8qIEZvciBtZXRhc2VxdWVuY2VzIHRoYXQgYWN0dWFsbHkgbWF0Y2gg
YSBjaGFyYWN0ZXIsIHdlIGRpc2FibGUgdGhlCiAgICAgICBzZXR0aW5nIG9mIGEgZmlyc3QgY2hh
cmFjdGVyIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gc2V0LiAqLwogCkBAIC0zNDc0LDI3ICsy
MTI1LDkgQEAgZm9yICg7OyBwdHIrKykKICAgICAgICAgewogICAgICAgICBpbnQgbnVtYmVyID0g
LWMgLSBFU0NfUkVGOwogICAgICAgICBwcmV2aW91cyA9IGNvZGU7Ci0gICAgICAgICpjb2RlKysg
PSBPUF9SRUY7Ci0gICAgICAgIFBVVDJJTkMoY29kZSwgMCwgbnVtYmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAvKiBTbyBhcmUgVW5pY29kZSBwcm9wZXJ0eSBtYXRjaGVzLCBpZiBzdXBwb3J0ZWQu
IFdlIGtub3cgdGhhdCBnZXRfdWNwCi0gICAgICB3b24ndCBmYWlsIGJlY2F1c2UgaXQgd2FzIHRl
c3RlZCBpbiB0aGUgcHJlLXBhc3MuICovCi0KLSNpZiAhSkFWQVNDUklQVAotI2lmZGVmIFNVUFBP
UlRfVUNQCi0gICAgICBlbHNlIGlmICgtYyA9PSBFU0NfUCB8fCAtYyA9PSBFU0NfcCkKLSAgICAg
ICAgewotICAgICAgICBCT09MIG5lZ2F0ZWQ7Ci0gICAgICAgIGludCBwZGF0YTsKLSAgICAgICAg
aW50IHB0eXBlID0gZ2V0X3VjcCgmcHRyLCAmbmVnYXRlZCwgJnBkYXRhLCBlcnJvcmNvZGVwdHIp
OwotICAgICAgICBwcmV2aW91cyA9IGNvZGU7Ci0gICAgICAgICpjb2RlKysgPSAoKC1jID09IEVT
Q19wKSAhPSBuZWdhdGVkKT8gT1BfUFJPUCA6IE9QX05PVFBST1A7Ci0gICAgICAgICpjb2RlKysg
PSBwdHlwZTsKLSAgICAgICAgKmNvZGUrKyA9IHBkYXRhOworICAgICAgICAqY29kZSsrID0gT1Bf
UkVGOworICAgICAgICBQVVQySU5DKGNvZGUsIDAsIG51bWJlcik7CiAgICAgICAgIH0KLSNlbmRp
ZgotI2VuZGlmCiAKICAgICAgIC8qIEZvciB0aGUgcmVzdCwgd2UgY2FuIG9idGFpbiB0aGUgT1Ag
dmFsdWUgYnkgbmVnYXRpbmcgdGhlIGVzY2FwZQogICAgICAgdmFsdWUgKi8KQEAgLTM1MTEsMTIg
KzIxNDQsOSBAQCBmb3IgKDs7IHB0cisrKQogICAgIGEgdmFsdWUgPiAxMjcuIFdlIHNldCBpdHMg
cmVwcmVzZW50YXRpb24gaW4gdGhlIGxlbmd0aC9idWZmZXIsIGFuZCB0aGVuCiAgICAgaGFuZGxl
IGl0IGFzIGEgZGF0YSBjaGFyYWN0ZXIuICovCiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICBp
ZiAodXRmOCAmJiBjID4gMTI3KQorICAgIGlmIChjID4gMTI3KQogICAgICAgbWNsZW5ndGggPSBf
cGNyZV9vcmQydXRmOChjLCBtY2J1ZmZlcik7CiAgICAgZWxzZQotI2VuZGlmCi0KICAgICAgewog
ICAgICBtY2J1ZmZlclswXSA9IGM7CiAgICAgIG1jbGVuZ3RoID0gMTsKQEAgLTM1MzAsNyArMjE2
MCw2IEBAIGZvciAoOzsgcHRyKyspCiAKICAgICBkZWZhdWx0OgogICAgIE5PUk1BTF9DSEFSOgot
I2lmIFBDUkVfVVRGMTYKICAgICBpZiAoYyA8IDEyOCkKICAgICAgIHsKICAgICAgICBtY2xlbmd0
aCA9IDE7CkBAIC0zNTM4LDE4ICsyMTY3LDYgQEAgZm9yICg7OyBwdHIrKykKICAgICAgfQogICAg
IGVsc2UKICAgICAgIG1jbGVuZ3RoID0gX3BjcmVfb3JkMnV0ZjgoYywgbWNidWZmZXIpOwotI2Vs
c2UKLSAgICBtY2xlbmd0aCA9IDE7Ci0gICAgbWNidWZmZXJbMF0gPSBjOwotCi0jaWZkZWYgU1VQ
UE9SVF9VVEY4Ci0gICAgaWYgKHV0ZjggJiYgKGMgJiAweGMwKSA9PSAweGMwKQotICAgICAgewot
ICAgICAgd2hpbGUgKChwdHJbMV0gJiAweGMwKSA9PSAweDgwKQotICAgICAgICBtY2J1ZmZlcltt
Y2xlbmd0aCsrXSA9ICooKytwdHIpOwotICAgICAgfQotI2VuZGlmCi0jZW5kaWYKIAogICAgIC8q
IEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgaW4gbWNidWZmZXIs
IGFuZCB0aGUgbGVuZ3RoCiAgICAgaW4gbWNsZW5ndGguIFdoZW4gbm90IGluIFVURi04IG1vZGUs
IHRoZSBsZW5ndGggaXMgYWx3YXlzIDEuICovCkBAIC0zNjIxLDEyICsyMjM4LDEwIEBAIHRoZSBu
ZXcgb3B0aW9ucyBpbnRvIGV2ZXJ5IHN1YnNlcXVlbnQgYnIKIAogQXJndW1lbnQ6CiAgIG9wdGlv
bnMgICAgICAgIG9wdGlvbiBiaXRzLCBpbmNsdWRpbmcgYW55IGNoYW5nZXMgZm9yIHRoaXMgc3Vi
cGF0dGVybgotICBvbGRpbXMgICAgICAgICBwcmV2aW91cyBzZXR0aW5ncyBvZiBpbXMgb3B0aW9u
IGJpdHMKICAgYnJhY2tldHMgICAgICAgLT4gaW50IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBl
eHRyYWN0aW5nIGJyYWNrZXRzIHVzZWQKICAgY29kZXB0ciAgICAgICAgLT4gdGhlIGFkZHJlc3Mg
b2YgdGhlIGN1cnJlbnQgY29kZSBwb2ludGVyCiAgIHB0cnB0ciAgICAgICAgIC0+IHRoZSBhZGRy
ZXNzIG9mIHRoZSBjdXJyZW50IHBhdHRlcm4gcG9pbnRlcgogICBlcnJvcmNvZGVwdHIgICAtPiBw
b2ludGVyIHRvIGVycm9yIGNvZGUgdmFyaWFibGUKLSAgbG9va2JlaGluZCAgICAgVFJVRSBpZiB0
aGlzIGlzIGEgbG9va2JlaGluZCBhc3NlcnRpb24KICAgc2tpcGJ5dGVzICAgICAgc2tpcCB0aGlz
IG1hbnkgYnl0ZXMgYXQgc3RhcnQgKGZvciBPUF9DT05ELCBPUF9CUkFOVU1CRVIpCiAgIGZpcnN0
Ynl0ZXB0ciAgIHBsYWNlIHRvIHB1dCB0aGUgZmlyc3QgcmVxdWlyZWQgY2hhcmFjdGVyLCBvciBh
IG5lZ2F0aXZlIG51bWJlcgogICByZXFieXRlcHRyICAgICBwbGFjZSB0byBwdXQgdGhlIGxhc3Qg
cmVxdWlyZWQgY2hhcmFjdGVyLCBvciBhIG5lZ2F0aXZlIG51bWJlcgpAQCAtMzYzNywxNSArMjI1
MiwxNCBAQCBSZXR1cm5zOiAgICAgIFRSVUUgb24gc3VjY2VzcwogKi8KIAogc3RhdGljIEJPT0wK
LWNvbXBpbGVfcmVnZXgoaW50IG9wdGlvbnMsIGludCBvbGRpbXMsIGludCAqYnJhY2tldHMsIHVz
Y2hhciAqKmNvZGVwdHIsCi0gIGNvbnN0IHBjcmVfdWNoYXIgKipwdHJwdHIsIGNvbnN0IHBjcmVf
dWNoYXIgKnBhdHRlcm5FbmQsIGludCAqZXJyb3Jjb2RlcHRyLCBCT09MIGxvb2tiZWhpbmQsIGlu
dCBza2lwYnl0ZXMsCitjb21waWxlX3JlZ2V4KGludCBvcHRpb25zLCBpbnQgKmJyYWNrZXRzLCB1
c2NoYXIgKipjb2RlcHRyLAorICBjb25zdCBwY3JlX3VjaGFyICoqcHRycHRyLCBjb25zdCBwY3Jl
X3VjaGFyICpwYXR0ZXJuRW5kLCBpbnQgKmVycm9yY29kZXB0ciwgaW50IHNraXBieXRlcywKICAg
aW50ICpmaXJzdGJ5dGVwdHIsIGludCAqcmVxYnl0ZXB0ciwgYnJhbmNoX2NoYWluICpiY3B0ciwg
Y29tcGlsZV9kYXRhICpjZCkKIHsKIGNvbnN0IHBjcmVfdWNoYXIgKnB0ciA9ICpwdHJwdHI7CiB1
c2NoYXIgKmNvZGUgPSAqY29kZXB0cjsKIHVzY2hhciAqbGFzdF9icmFuY2ggPSBjb2RlOwogdXNj
aGFyICpzdGFydF9icmFja2V0ID0gY29kZTsKLXVzY2hhciAqcmV2ZXJzZV9jb3VudCA9IE5VTEw7
CiBpbnQgZmlyc3RieXRlLCByZXFieXRlOwogaW50IGJyYW5jaGZpcnN0Ynl0ZSwgYnJhbmNocmVx
Ynl0ZTsKIGJyYW5jaF9jaGFpbiBiYzsKQEAgLTM2NjQsMjMgKzIyNzgsNiBAQCBjb2RlICs9IDEg
KyBMSU5LX1NJWkUgKyBza2lwYnl0ZXM7CiAKIGZvciAoOzspCiAgIHsKLSAgLyogSGFuZGxlIGEg
Y2hhbmdlIG9mIGltcyBvcHRpb25zIGF0IHRoZSBzdGFydCBvZiB0aGUgYnJhbmNoICovCi0KLSAg
aWYgKChvcHRpb25zICYgUENSRV9JTVMpICE9IG9sZGltcykKLSAgICB7Ci0gICAgKmNvZGUrKyA9
IE9QX09QVDsKLSAgICAqY29kZSsrID0gb3B0aW9ucyAmIFBDUkVfSU1TOwotICAgIH0KLQotICAv
KiBTZXQgdXAgZHVtbXkgT1BfUkVWRVJTRSBpZiBsb29rYmVoaW5kIGFzc2VydGlvbiAqLwotCi0g
IGlmIChsb29rYmVoaW5kKQotICAgIHsKLSAgICAqY29kZSsrID0gT1BfUkVWRVJTRTsKLSAgICBy
ZXZlcnNlX2NvdW50ID0gY29kZTsKLSAgICBQVVRJTkMoY29kZSwgMCwgMCk7Ci0gICAgfQotCiAg
IC8qIE5vdyBjb21waWxlIHRoZSBicmFuY2ggKi8KIAogICBpZiAoIWNvbXBpbGVfYnJhbmNoKCZv
cHRpb25zLCBicmFja2V0cywgJmNvZGUsICZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwK
QEAgLTM3MjksMjUgKzIzMjYsNiBAQCBmb3IgKDs7KQogICAgIGVsc2UgcmVxYnl0ZSB8PSBicmFu
Y2hyZXFieXRlOyAgIC8qIFRvICJvciIgUkVRX1ZBUlkgKi8KICAgICB9CiAKLSAgLyogSWYgbG9v
a2JlaGluZCwgY2hlY2sgdGhhdCB0aGlzIGJyYW5jaCBtYXRjaGVzIGEgZml4ZWQtbGVuZ3RoIHN0
cmluZywKLSAgYW5kIHB1dCB0aGUgbGVuZ3RoIGludG8gdGhlIE9QX1JFVkVSU0UgaXRlbS4gVGVt
cG9yYXJpbHkgbWFyayB0aGUgZW5kIG9mCi0gIHRoZSBicmFuY2ggd2l0aCBPUF9FTkQuICovCi0K
LSAgaWYgKGxvb2tiZWhpbmQpCi0gICAgewotICAgIGludCBsZW5ndGg7Ci0gICAgKmNvZGUgPSBP
UF9FTkQ7Ci0gICAgbGVuZ3RoID0gZmluZF9maXhlZGxlbmd0aChsYXN0X2JyYW5jaCwgb3B0aW9u
cyk7Ci0gICAgRFBSSU5URigoImZpeGVkIGxlbmd0aCA9ICVkXG4iLCBsZW5ndGgpKTsKLSAgICBp
ZiAobGVuZ3RoIDwgMCkKLSAgICAgIHsKLSAgICAgICplcnJvcmNvZGVwdHIgPSAobGVuZ3RoID09
IC0yKT8gRVJSMzYgOiBFUlIyNTsKLSAgICAgICpwdHJwdHIgPSBwdHI7Ci0gICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgICB9Ci0gICAgUFVUKHJldmVyc2VfY291bnQsIDAsIGxlbmd0aCk7Ci0gICAg
fQotCiAgIC8qIFJlYWNoZWQgZW5kIG9mIGV4cHJlc3Npb24sIGVpdGhlciAnKScgb3IgZW5kIG9m
IHBhdHRlcm4uIEdvIGJhY2sgdGhyb3VnaAogICB0aGUgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgYW5k
IHJldmVyc2UgdGhlIGNoYWluIG9mIG9mZnNldHMsIHdpdGggdGhlIGZpZWxkIGluCiAgIHRoZSBC
UkEgaXRlbSBub3cgYmVjb21pbmcgYW4gb2Zmc2V0IHRvIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4g
SWYgdGhlcmUgYXJlCkBAIC0zNzc1LDE0ICsyMzUzLDYgQEAgZm9yICg7OykKICAgICBQVVQoY29k
ZSwgMSwgY29kZSAtIHN0YXJ0X2JyYWNrZXQpOwogICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsK
IAotICAgIC8qIFJlc2V0dGluZyBvcHRpb24gaWYgbmVlZGVkICovCi0KLSAgICBpZiAoKG9wdGlv
bnMgJiBQQ1JFX0lNUykgIT0gb2xkaW1zICYmIHB0ciA8IHBhdHRlcm5FbmQgJiYgKnB0ciA9PSAn
KScpCi0gICAgICB7Ci0gICAgICAqY29kZSsrID0gT1BfT1BUOwotICAgICAgKmNvZGUrKyA9IG9s
ZGltczsKLSAgICAgIH0KLQogICAgIC8qIFNldCB2YWx1ZXMgdG8gcGFzcyBiYWNrICovCiAKICAg
ICAqY29kZXB0ciA9IGNvZGU7CkBAIC0zODUzLDcgKzI0MjMsNyBAQCBpc19hbmNob3JlZChyZWdp
c3RlciBjb25zdCB1c2NoYXIgKmNvZGUsCiB7CiBkbyB7CiAgICBjb25zdCB1c2NoYXIgKnNjb2Rl
ID0KLSAgICAgZmlyc3Rfc2lnbmlmaWNhbnRfY29kZShjb2RlICsgMStMSU5LX1NJWkUsIG9wdGlv
bnMsIFBDUkVfTVVMVElMSU5FLCBGQUxTRSk7CisgICAgIGZpcnN0X3NpZ25pZmljYW50X2NvZGUo
Y29kZSArIDErTElOS19TSVpFLCBGQUxTRSk7CiAgICByZWdpc3RlciBpbnQgb3AgPSAqc2NvZGU7
CiAKICAgIC8qIENhcHR1cmluZyBicmFja2V0cyAqLwpAQCAtMzg2OSwyNCArMjQzOSwxNCBAQCBk
byB7CiAKICAgIC8qIE90aGVyIGJyYWNrZXRzICovCiAKLSAgIGVsc2UgaWYgKG9wID09IE9QX0JS
QSB8fCBvcCA9PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05DRSB8fCBvcCA9PSBPUF9DT05EKQor
ICAgZWxzZSBpZiAob3AgPT0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCB8fCBvcCA9PSBPUF9P
TkNFKQogICAgICB7CiAgICAgIGlmICghaXNfYW5jaG9yZWQoc2NvZGUsIG9wdGlvbnMsIGJyYWNr
ZXRfbWFwLCBiYWNrcmVmX21hcCkpIHJldHVybiBGQUxTRTsKICAgICAgfQogCi0gICAvKiAuKiBp
cyBub3QgYW5jaG9yZWQgdW5sZXNzIERPVEFMTCBpcyBzZXQgYW5kIGl0IGlzbid0IGluIGJyYWNr
ZXRzIHRoYXQKLSAgIGFyZSBvciBtYXkgYmUgcmVmZXJlbmNlZC4gKi8KLQotICAgZWxzZSBpZiAo
KG9wID09IE9QX1RZUEVTVEFSIHx8IG9wID09IE9QX1RZUEVNSU5TVEFSKSAmJgotICAgICAgICAg
ICAgKCpvcHRpb25zICYgUENSRV9ET1RBTEwpICE9IDApCi0gICAgIHsKLSAgICAgaWYgKHNjb2Rl
WzFdICE9IE9QX0FOWSB8fCAoYnJhY2tldF9tYXAgJiBiYWNrcmVmX21hcCkgIT0gMCkgcmV0dXJu
IEZBTFNFOwotICAgICB9Ci0KICAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBhbmNob3JpbmcgKi8K
IAotICAgZWxzZSBpZiAob3AgIT0gT1BfU09EICYmIG9wICE9IE9QX1NPTSAmJgotICAgICAgICAg
ICAoKCpvcHRpb25zICYgUENSRV9NVUxUSUxJTkUpICE9IDAgfHwgb3AgIT0gT1BfQ0lSQykpCisg
ICBlbHNlIGlmICgoKCpvcHRpb25zICYgUENSRV9NVUxUSUxJTkUpICE9IDAgfHwgb3AgIT0gT1Bf
Q0lSQykpCiAgICAgIHJldHVybiBGQUxTRTsKICAgIGNvZGUgKz0gR0VUKGNvZGUsIDEpOwogICAg
fQpAQCAtMzkyMiw4ICsyNDgyLDcgQEAgaXNfc3RhcnRsaW5lKGNvbnN0IHVzY2hhciAqY29kZSwg
dW5zaWduZQogICB1bnNpZ25lZCBpbnQgYmFja3JlZl9tYXApCiB7CiBkbyB7Ci0gICBjb25zdCB1
c2NoYXIgKnNjb2RlID0gZmlyc3Rfc2lnbmlmaWNhbnRfY29kZShjb2RlICsgMStMSU5LX1NJWkUs
IE5VTEwsIDAsCi0gICAgIEZBTFNFKTsKKyAgIGNvbnN0IHVzY2hhciAqc2NvZGUgPSBmaXJzdF9z
aWduaWZpY2FudF9jb2RlKGNvZGUgKyAxK0xJTktfU0laRSwgRkFMU0UpOwogICAgcmVnaXN0ZXIg
aW50IG9wID0gKnNjb2RlOwogCiAgICAvKiBDYXB0dXJpbmcgYnJhY2tldHMgKi8KQEAgLTM5Mzks
NyArMjQ5OCw3IEBAIGRvIHsKIAogICAgLyogT3RoZXIgYnJhY2tldHMgKi8KIAotICAgZWxzZSBp
ZiAob3AgPT0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCB8fCBvcCA9PSBPUF9PTkNFIHx8IG9w
ID09IE9QX0NPTkQpCisgICBlbHNlIGlmIChvcCA9PSBPUF9CUkEgfHwgb3AgPT0gT1BfQVNTRVJU
IHx8IG9wID09IE9QX09OQ0UpCiAgICAgIHsgaWYgKCFpc19zdGFydGxpbmUoc2NvZGUsIGJyYWNr
ZXRfbWFwLCBiYWNrcmVmX21hcCkpIHJldHVybiBGQUxTRTsgfQogCiAgICAvKiAuKiBtZWFucyAi
c3RhcnQgYXQgc3RhcnQgb3IgYWZ0ZXIgXG4iIGlmIGl0IGlzbid0IGluIGJyYWNrZXRzIHRoYXQK
QEAgLTM5OTEsNyArMjU1MCw3IEBAIHJlZ2lzdGVyIGludCBjID0gLTE7CiBkbyB7CiAgICBpbnQg
ZDsKICAgIGNvbnN0IHVzY2hhciAqc2NvZGUgPQotICAgICBmaXJzdF9zaWduaWZpY2FudF9jb2Rl
KGNvZGUgKyAxK0xJTktfU0laRSwgb3B0aW9ucywgUENSRV9DQVNFTEVTUywgVFJVRSk7CisgICAg
IGZpcnN0X3NpZ25pZmljYW50X2NvZGUoY29kZSArIDErTElOS19TSVpFLCBUUlVFKTsKICAgIHJl
Z2lzdGVyIGludCBvcCA9ICpzY29kZTsKIAogICAgaWYgKG9wID49IE9QX0JSQSkgb3AgPSBPUF9C
UkE7CkBAIC00MDA0LDcgKzI1NjMsNiBAQCBkbyB7CiAgICAgIGNhc2UgT1BfQlJBOgogICAgICBj
YXNlIE9QX0FTU0VSVDoKICAgICAgY2FzZSBPUF9PTkNFOgotICAgICBjYXNlIE9QX0NPTkQ6CiAg
ICAgIGlmICgoZCA9IGZpbmRfZmlyc3Rhc3NlcnRlZGNoYXIoc2NvZGUsIG9wdGlvbnMsIG9wID09
IE9QX0FTU0VSVCkpIDwgMCkKICAgICAgICByZXR1cm4gLTE7CiAgICAgIGlmIChjIDwgMCkgYyA9
IGQ7IGVsc2UgaWYgKGMgIT0gZCkgcmV0dXJuIC0xOwpAQCAtNDA1NywxNyArMjYxNSw4IEBAIFJl
dHVybnM6ICAgICAgICBwb2ludGVyIHRvIGNvbXBpbGVkIGRhdGEKICAgICAgICAgICAgICAgICB3
aXRoIGVycm9ycHRyIGFuZCBlcnJvcm9mZnNldCBzZXQKICovCiAKLVBDUkVfREFUQV9TQ09QRSBw
Y3JlICoKLXBjcmVfY29tcGlsZShjb25zdCBwY3JlX2NoYXIgKnBhdHRlcm4sIGludCBwYXR0ZXJu
TGVuZ3RoLCBpbnQgb3B0aW9ucywgY29uc3QgY2hhciAqKmVycm9ycHRyLAotICBpbnQgKmVycm9y
b2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWJsZXMpCi17Ci1yZXR1cm4gcGNyZV9jb21w
aWxlMihwYXR0ZXJuLCBwYXR0ZXJuTGVuZ3RoLCBvcHRpb25zLCBOVUxMLCBlcnJvcnB0ciwgZXJy
b3JvZmZzZXQsIHRhYmxlcyk7Ci19Ci0KLQotUENSRV9EQVRBX1NDT1BFIHBjcmUgKgotcGNyZV9j
b21waWxlMihjb25zdCBwY3JlX2NoYXIgKnBhdHRlcm4sIGludCBwYXR0ZXJuTGVuZ3RoLCBpbnQg
b3B0aW9ucywgaW50ICplcnJvcmNvZGVwdHIsCi0gIGNvbnN0IGNoYXIgKiplcnJvcnB0ciwgaW50
ICplcnJvcm9mZnNldCwgY29uc3QgdW5zaWduZWQgY2hhciAqdGFibGVzKQorcGNyZSAqCitqc1Jl
Z0V4cENvbXBpbGUoY29uc3QgcGNyZV9jaGFyKiBwYXR0ZXJuLCBpbnQgcGF0dGVybkxlbmd0aCwg
aW50IG9wdGlvbnMsIHVuc2lnbmVkKiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhcioqIGVycm9y
cHRyKQogewogcmVhbF9wY3JlICpyZTsKIGludCBsZW5ndGggPSAxICsgTElOS19TSVpFOyAgICAg
IC8qIEZvciBpbml0aWFsIEJSQSBwbHVzIGxlbmd0aCAqLwpAQCAtNDA4MCwxMyArMjYyOSw3IEBA
IGludCBuYW1lX2NvdW50ID0gMDsKIGludCBtYXhfbmFtZV9zaXplID0gMDsKIGludCBsYXN0aXRl
bWxlbmd0aCA9IDA7CiBpbnQgZXJyb3Jjb2RlID0gMDsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLUJP
T0wgdXRmODsKIEJPT0wgY2xhc3NfdXRmODsKLSNlbmRpZgotI2lmICFKQVZBU0NSSVBUCi1CT09M
IGluZXNjcSA9IEZBTFNFOwotI2VuZGlmCiBCT09MIGNhcHR1cmluZzsKIHVuc2lnbmVkIGludCBi
cmFzdGFja3B0ciA9IDA7CiBzaXplX3Qgc2l6ZTsKQEAgLTQxMDQsNjIgKzI2NDcsMTcgQEAgcG9p
bnRlci4gKi8KIAogaWYgKGVycm9ycHRyID09IE5VTEwpCiAgIHsKLSAgaWYgKGVycm9yY29kZXB0
ciAhPSBOVUxMKSAqZXJyb3Jjb2RlcHRyID0gOTk7CiAgIHJldHVybiBOVUxMOwogICB9CiAKICpl
cnJvcnB0ciA9IE5VTEw7Ci1pZiAoZXJyb3Jjb2RlcHRyICE9IE5VTEwpICplcnJvcmNvZGVwdHIg
PSBFUlIwOwotCi0vKiBIb3dldmVyLCB3ZSBjYW4gZ2l2ZSBhIG1lc3NhZ2UgZm9yIHRoaXMgZXJy
b3IgKi8KLQotaWYgKGVycm9yb2Zmc2V0ID09IE5VTEwpCi0gIHsKLSAgZXJyb3Jjb2RlID0gRVJS
MTY7Ci0gIGdvdG8gUENSRV9FQVJMWV9FUlJPUl9SRVRVUk47Ci0gIH0KLQotKmVycm9yb2Zmc2V0
ID0gMDsKLQotLyogQWx3YXlzIHNldCB0aGUgVVRGLTggZmxhZyBpZiBjb21waWxlZCBmb3IgVVRG
LTE2OyBzYXZlcyBvbiBpZmRlZnMgKGVhc2llciB0byBtZXJnZSkuICovCi0KLSNpZiBQQ1JFX1VU
RjE2Ci1vcHRpb25zIHw9IFBDUkVfVVRGODsKLSNlbmRpZgotCi0vKiBDYW4ndCBzdXBwb3J0IFVU
RjggdW5sZXNzIFBDUkUgaGFzIGJlZW4gY29tcGlsZWQgdG8gaW5jbHVkZSB0aGUgY29kZS4gKi8K
LQotI2lmZGVmIFNVUFBPUlRfVVRGOAotdXRmOCA9IChvcHRpb25zICYgUENSRV9VVEY4KSAhPSAw
OwotI2lmICFQQ1JFX1VURjE2Ci1pZiAodXRmOCAmJiAob3B0aW9ucyAmIFBDUkVfTk9fVVRGOF9D
SEVDSykgPT0gMCAmJgotICAgICAoKmVycm9yb2Zmc2V0ID0gX3BjcmVfdmFsaWRfdXRmOCgocGNy
ZV91Y2hhciAqKXBhdHRlcm4sIC0xKSkgPj0gMCkKLSAgewotICBlcnJvcmNvZGUgPSBFUlI0NDsK
LSAgZ290byBQQ1JFX0VBUkxZX0VSUk9SX1JFVFVSTjsKLSAgfQotI2VuZGlmCi0jZWxzZQotaWYg
KChvcHRpb25zICYgUENSRV9VVEY4KSAhPSAwKQotICB7Ci0gIGVycm9yY29kZSA9IEVSUjMyOwot
ICBnb3RvIFBDUkVfRUFSTFlfRVJST1JfUkVUVVJOOwotICB9Ci0jZW5kaWYKLQotaWYgKChvcHRp
b25zICYgflBVQkxJQ19PUFRJT05TKSAhPSAwKQotICB7Ci0gIGVycm9yY29kZSA9IEVSUjE3Owot
ICBnb3RvIFBDUkVfRUFSTFlfRVJST1JfUkVUVVJOOwotICB9CiAKIC8qIFNldCB1cCBwb2ludGVy
cyB0byB0aGUgaW5kaXZpZHVhbCBjaGFyYWN0ZXIgdGFibGVzICovCiAKLWlmICh0YWJsZXMgPT0g
TlVMTCkgdGFibGVzID0gX3BjcmVfZGVmYXVsdF90YWJsZXM7Ci1jb21waWxlX2Jsb2NrLmxjYyA9
IHRhYmxlcyArIGxjY19vZmZzZXQ7Ci1jb21waWxlX2Jsb2NrLmZjYyA9IHRhYmxlcyArIGZjY19v
ZmZzZXQ7Ci1jb21waWxlX2Jsb2NrLmNiaXRzID0gdGFibGVzICsgY2JpdHNfb2Zmc2V0OwotY29t
cGlsZV9ibG9jay5jdHlwZXMgPSB0YWJsZXMgKyBjdHlwZXNfb2Zmc2V0OworY29tcGlsZV9ibG9j
ay5sY2MgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGxjY19vZmZzZXQ7Citjb21waWxlX2Jsb2Nr
LmZjYyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgZmNjX29mZnNldDsKK2NvbXBpbGVfYmxvY2su
Y2JpdHMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGNiaXRzX29mZnNldDsKK2NvbXBpbGVfYmxv
Y2suY3R5cGVzID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBjdHlwZXNfb2Zmc2V0OwogCiAvKiBN
YXhpbXVtIGJhY2sgcmVmZXJlbmNlIGFuZCBiYWNrcmVmIGJpdG1hcC4gVGhpcyBpcyB1cGRhdGVk
IGZvciBudW1lcmljCiByZWZlcmVuY2VzIGR1cmluZyB0aGUgZmlyc3QgcGFzcywgYnV0IGZvciBu
YW1lZCByZWZlcmVuY2VzIGR1cmluZyB0aGUgYWN0dWFsCkBAIC00MTcyLDkgKzI2NzAsNiBAQCBj
b21waWxlX2Jsb2NrLmJhY2tyZWZfbWFwID0gMDsKIC8qIFJlZmxlY3QgcGF0dGVybiBmb3IgZGVi
dWdnaW5nIG91dHB1dCAqLwogCiBEUFJJTlRGKCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKSk7Ci0jaWYgIVBDUkVf
VVRGMTYKLURQUklOVEYoKCIlc1xuIiwgcGF0dGVybikpOwotI2VuZGlmCiAKIC8qIFRoZSBmaXJz
dCB0aGluZyB0byBkbyBpcyB0byBtYWtlIGEgcGFzcyBvdmVyIHRoZSBwYXR0ZXJuIHRvIGNvbXB1
dGUgdGhlCiBhbW91bnQgb2Ygc3RvcmUgcmVxdWlyZWQgdG8gaG9sZCB0aGUgY29tcGlsZWQgY29k
ZS4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlCkBAIC00MTk3LDQ1ICsyNjkyLDE1IEBAIHdoaWxl
ICgrK3B0ciA8IHBhdHRlcm5FbmQpCiAgIAogICAvKiBJZiB3ZSBhcmUgaW5zaWRlIGEgXFEuLi5c
RSBzZXF1ZW5jZSwgYWxsIGNoYXJzIGFyZSBsaXRlcmFsICovCiAKLSNpZiAhSkFWQVNDUklQVAot
ICBpZiAoaW5lc2NxKQotICAgIHsKLSAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFX0FVVE9fQ0FMTE9V
VCkgIT0gMCkgbGVuZ3RoICs9IDIgKyAyKkxJTktfU0laRTsKLSAgICBnb3RvIE5PUk1BTF9DSEFS
OwotICAgIH0KLSNlbmRpZgotCi0gIC8qIE90aGVyd2lzZSwgZmlyc3QgY2hlY2sgZm9yIGlnbm9y
ZWQgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMgKi8KLQotICBpZiAoKG9wdGlvbnMgJiBQQ1JFX0VY
VEVOREVEKSAhPSAwKQotICAgIHsKLSAgICBpZiAoKENUWVBFUygmY29tcGlsZV9ibG9jaywgYykg
JiBjdHlwZV9zcGFjZSkgIT0gMCkgY29udGludWU7Ci0gICAgaWYgKGMgPT0gJyMnKQotICAgICAg
ewotICAgICAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCAmJiAoYyA9ICpwdHIpICE9IE5FV0xJ
TkUpCi0gICAgICAgIDsKLSAgICAgIGlmIChwdHIgPT0gcGF0dGVybkVuZCkKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9Ci0KICAgaXRlbV9jb3VudCsrOyAg
ICAvKiBJcyB6ZXJvIGZvciB0aGUgZmlyc3Qgbm9uLWNvbW1lbnQgaXRlbSAqLwogCi0gIC8qIEFs
bG93IHNwYWNlIGZvciBhdXRvIGNhbGxvdXQgYmVmb3JlIGV2ZXJ5IGl0ZW0gZXhjZXB0IHF1YW50
aWZpZXJzLiAqLwotCi0gIGlmICgob3B0aW9ucyAmIFBDUkVfQVVUT19DQUxMT1VUKSAhPSAwICYm
Ci0gICAgICAgYyAhPSAnKicgJiYgYyAhPSAnKycgJiYgYyAhPSAnPycgJiYKLSAgICAgICAoYyAh
PSAneycgfHwgIWlzX2NvdW50ZWRfcmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKSkKLSAgICBs
ZW5ndGggKz0gMiArIDIqTElOS19TSVpFOwotCiAgIHN3aXRjaChjKQogICAgIHsKICAgICAvKiBB
IGJhY2tzbGFzaGVkIGl0ZW0gbWF5IGJlIGFuIGVzY2FwZWQgZGF0YSBjaGFyYWN0ZXIgb3IgaXQg
bWF5IGJlIGEKICAgICBjaGFyYWN0ZXIgdHlwZS4gKi8KIAogICAgIGNhc2UgJ1xcJzoKLSAgICBj
ID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBv
cHRpb25zLCBGQUxTRSk7CisgICAgYyA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAm
ZXJyb3Jjb2RlLCBicmFjb3VudCwgRkFMU0UpOwogICAgIGlmIChlcnJvcmNvZGUgIT0gMCkgZ290
byBQQ1JFX0VSUk9SX1JFVFVSTjsKIAogICAgIGxhc3RpdGVtbGVuZ3RoID0gMTsgICAgIC8qIERl
ZmF1bHQgbGVuZ3RoIG9mIGxhc3QgaXRlbSBmb3IgcmVwZWF0cyAqLwpAQCAtNDI0NCw4ICsyNzA5
LDcgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgIHsKICAgICAgIGxlbmd0aCAr
PSAyOyAgICAgICAgICAvKiBGb3IgYSBvbmUtYnl0ZSBjaGFyYWN0ZXIgKi8KIAotI2lmZGVmIFNV
UFBPUlRfVVRGOAotICAgICAgaWYgKHV0ZjggJiYgYyA+IDEyNykKKyAgICAgIGlmIChjID4gMTI3
KQogICAgICAgICB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3Bj
cmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQpAQCAtNDI1Myw1MiArMjcxNywxMCBAQCB3aGlsZSAo
KytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAgICBsZW5ndGggKz0gaTsKICAgICAgICAgbGFzdGl0
ZW1sZW5ndGggKz0gaTsKICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotCi0jaWYgIUpBVkFTQ1JJUFQKLQotICAgIC8qIElmIFxRLCBlbnRlciAibGl0ZXJhbCIg
bW9kZSAqLwotCi0gICAgaWYgKC1jID09IEVTQ19RKQotICAgICAgewotICAgICAgaW5lc2NxID0g
VFJVRTsKLSAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgLyogXFggaXMgc3VwcG9ydGVk
IG9ubHkgaWYgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0IGlzIGNvbXBpbGVkICovCi0KLSNpZm5k
ZWYgU1VQUE9SVF9VQ1AKLSAgICBpZiAoLWMgPT0gRVNDX1gpCi0gICAgICB7Ci0gICAgICBlcnJv
cmNvZGUgPSBFUlI0NTsKLSAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0gICAgICB9Ci0j
ZW5kaWYKIAotICAgIC8qIFxQIGFuZCBccCBhcmUgZm9yIFVuaWNvZGUgcHJvcGVydGllcywgYnV0
IG9ubHkgd2hlbiB0aGUgc3VwcG9ydCBoYXMKLSAgICBiZWVuIGNvbXBpbGVkLiBFYWNoIGl0ZW0g
bmVlZHMgMyBieXRlcy4gKi8KLQotICAgIGVsc2UgaWYgKC1jID09IEVTQ19QIHx8IC1jID09IEVT
Q19wKQotICAgICAgewotI2lmZGVmIFNVUFBPUlRfVUNQCi0gICAgICBCT09MIG5lZ2F0ZWQ7Ci0g
ICAgICBCT09MIHBkYXRhOwotICAgICAgbGVuZ3RoICs9IDM7Ci0gICAgICBsYXN0aXRlbWxlbmd0
aCA9IDM7Ci0gICAgICBpZiAoZ2V0X3VjcCgmcHRyLCAmbmVnYXRlZCwgJnBkYXRhLCAmZXJyb3Jj
b2RlKSA8IDApCi0gICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47CiAgICAgICBjb250aW51
ZTsKLSNlbHNlCi0gICAgICBlcnJvcmNvZGUgPSBFUlI0NTsKLSAgICAgIGdvdG8gUENSRV9FUlJP
Ul9SRVRVUk47Ci0jZW5kaWYKICAgICAgIH0KIAotI2VuZGlmCi0KICAgICAvKiBPdGhlciBlc2Nh
cGVzIG5lZWQgb25lIGJ5dGUgKi8KIAogICAgIGxlbmd0aCsrOwpAQCAtNDQwMiwzMSArMjgyNCwx
NyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAgfQogICAgIGVsc2UgY2xhc3Nf
b3B0Y291bnQgPSAwOwogCi0jaWZkZWYgU1VQUE9SVF9VVEY4CiAgICAgY2xhc3NfdXRmOCA9IEZB
TFNFOwotI2VuZGlmCiAKICAgICAvKiBXcml0dGVuIGFzIGEgImRvIiBzbyB0aGF0IGFuIGluaXRp
YWwgJ10nIGlzIHRha2VuIGFzIGRhdGEgKi8KIAogICAgIGlmICgqcHRyICE9IDApIGRvCiAgICAg
ICB7Ci0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgIC8qIEluc2lkZSBcUS4uLlxFIGV2ZXJ5dGhpbmcg
aXMgbGl0ZXJhbCBleGNlcHQgXEUgKi8KLQotICAgICAgaWYgKGluZXNjcSkKLSAgICAgICAgewot
ICAgICAgICBpZiAoKnB0ciAhPSAnXFwnIHx8IHB0clsxXSAhPSAnRScpIGdvdG8gR0VUX09ORV9D
SEFSQUNURVI7Ci0gICAgICAgIGluZXNjcSA9IEZBTFNFOwotICAgICAgICBwdHIgKz0gMTsKLSAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAvKiBPdXRzaWRlIFxR
Li4uXEUsIGNoZWNrIGZvciBlc2NhcGVzICovCiAKICAgICAgIGlmICgqcHRyID09ICdcXCcpCiAg
ICAgICAgIHsKLSAgICAgICAgYyA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJy
b3Jjb2RlLCBicmFjb3VudCwgb3B0aW9ucywgVFJVRSk7CisgICAgICAgIGMgPSBjaGVja19lc2Nh
cGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIFRSVUUpOwogICAgICAg
ICBpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47CiAKICAgICAgICAg
LyogXGIgaXMgYmFja3NwYWNlIGluc2lkZSBhIGNsYXNzOyBcWCBpcyBsaXRlcmFsICovCkBAIC00
NDM0LDE2ICsyODQyLDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgICAgaWYg
KC1jID09IEVTQ19iKSBjID0gJ1xiJzsKICAgICAgICAgZWxzZSBpZiAoLWMgPT0gRVNDX1gpIGMg
PSAnWCc7CiAKLSNpZiAhSkFWQVNDUklQVAotICAgICAgICAvKiBcUSBlbnRlcnMgcXVvdGluZyBt
b2RlICovCi0KLSAgICAgICAgZWxzZSBpZiAoLWMgPT0gRVNDX1EpCi0gICAgICAgICAgewotICAg
ICAgICAgIGluZXNjcSA9IFRSVUU7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQot
I2VuZGlmCi0KICAgICAgICAgLyogSGFuZGxlIGVzY2FwZXMgdGhhdCB0dXJuIGludG8gY2hhcmFj
dGVycyAqLwogCiAgICAgICAgIGlmIChjID49IDApIGdvdG8gTk9OX1NQRUNJQUxfQ0hBUkFDVEVS
OwpAQCAtNDQ1NCw3ICsyODUyLDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAg
ICAgZWxzZQogICAgICAgICAgIHsKICAgICAgICAgICBjbGFzc19vcHRjb3VudCA9IDEwOyAgICAg
ICAgIC8qIFxkLCBccyBldGM7IG1ha2Ugc3VyZSA+IDEgKi8KLSNpZmRlZiBTVVBQT1JUX1VURjgK
ICAgICAgICAgICBpZiAoLWMgPT0gRVNDX3AgfHwgLWMgPT0gRVNDX1ApCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIWNsYXNzX3V0ZjgpCkBAIC00NDY0LDIzICsyODYxLDkgQEAgd2hp
bGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVu
Z3RoICs9IDM7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotI2lmICFKQVZBU0NSSVBUCi0KLSAgICAgIC8qIENoZWNrIHRoZSBzeW50YXggZm9yIFBPU0lY
IHN0dWZmLiBUaGUgYml0cyB3ZSBhY3R1YWxseSBoYW5kbGUgYXJlCi0gICAgICBjaGVja2VkIGR1
cmluZyB0aGUgcmVhbCBjb21waWxlIHBoYXNlLiAqLwotCi0gICAgICBlbHNlIGlmICgqcHRyID09
ICdbJyAmJiBjaGVja19wb3NpeF9zeW50YXgocHRyLCAmcHRyLCAmY29tcGlsZV9ibG9jaykpCi0g
ICAgICAgIHsKLSAgICAgICAgcHRyKys7Ci0gICAgICAgIGNsYXNzX29wdGNvdW50ID0gMTA7ICAg
IC8qIE1ha2Ugc3VyZSA+IDEgKi8KLSAgICAgICAgfQotCi0jZW5kaWYKLQogICAgICAgLyogQW55
dGhpbmcgZWxzZSBpbmNyZW1lbnRzIHRoZSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gY291bnQuIFdl
IGhhdmUgdG8KICAgICAgIGRldGVjdCByYW5nZXMgaGVyZSBzbyB0aGF0IHdlIGNhbiBjb21wdXRl
IHRoZSBudW1iZXIgb2YgZXh0cmEgcmFuZ2VzIGZvcgogICAgICAgY2FzZWxlc3Mgd2lkZSBjaGFy
YWN0ZXJzIHdoZW4gVUNQIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiBJZiB0aGVyZSBhcmUgd2lkZQpA
QCAtNDQ5MSwyMSArMjg3NCwxMSBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAg
ICB7CiAgICAgICAgIGludCBkOwogCi0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgICAgR0VUX09ORV9D
SEFSQUNURVI6Ci0jZW5kaWYKLQotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgICBpZiAodXRm
OCkKICAgICAgICAgICB7CiAgICAgICAgICAgaW50IGV4dHJhID0gMDsKICAgICAgICAgICBHRVRD
SEFSTEVORU5EKGMsIHB0ciwgcGF0dGVybkVuZCwgZXh0cmEpOwogICAgICAgICAgIHB0ciArPSBl
eHRyYTsKICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgYyA9ICpwdHI7Ci0jZWxzZQotICAgICAg
ICBjID0gKnB0cjsKLSNlbmRpZgogCiAgICAgICAgIC8qIENvbWUgaGVyZSBmcm9tIGhhbmRsaW5n
IFwgYWJvdmUgd2hlbiBpdCBlc2NhcGVzIHRvIGEgY2hhciB2YWx1ZSAqLwogCkBAIC00NTE5LDcg
KzI4OTIsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAgICAgIGlmIChwdHIg
KyAxIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0gPT0gJ1xcJykKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgIHB0cisrOwotICAgICAgICAgICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJu
RW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgb3B0aW9ucywgVFJVRSk7CisgICAgICAgICAgICBk
ID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBU
UlVFKTsKICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkgZ290byBQQ1JFX0VSUk9SX1JF
VFVSTjsKICAgICAgICAgICAgIGlmICgtZCA9PSBFU0NfYikgZCA9ICdcYic7ICAgICAgICAvKiBi
YWNrc3BhY2UgKi8KICAgICAgICAgICAgIGVsc2UgaWYgKC1kID09IEVTQ19YKSBkID0gJ1gnOyAg
ICAvKiBsaXRlcmFsIFggaW4gYSBjbGFzcyAqLwpAQCAtNDUyNywxNiArMjkwMCwxMSBAQCB3aGls
ZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAgICAgIGVsc2UgaWYgKHB0ciArIDEgPCBwYXR0
ZXJuRW5kICYmIHB0clsxXSAhPSAnXScpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBwdHIr
KzsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICAgICAgIGlmICh1dGY4KQogICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgIGludCBleHRyYSA9IDA7CiAgICAgICAgICAgICAgIEdFVENI
QVJMRU5FTkQoZCwgcHRyLCBwYXR0ZXJuRW5kLCBleHRyYSk7CiAgICAgICAgICAgICAgIHB0ciAr
PSBleHRyYTsKICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAg
ICAgICAgICBkID0gKnB0cjsKICAgICAgICAgICAgIH0KICAgICAgICAgICBpZiAoZCA8IDApIHB0
ciA9IGh5cHRyOyAgICAgIC8qIGdvIGJhY2sgdG8gaHlwaGVuIGFzIGRhdGEgKi8KICAgICAgICAg
ICB9CkBAIC00NTUzLDggKzI5MjEsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAg
ICAgICAgICAgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKICAgICAgICAgICAgIH0KIAotI2lmZGVm
IFNVUFBPUlRfVVRGOAotICAgICAgICAgIGlmICh1dGY4ICYmIChkID4gMjU1IHx8ICgob3B0aW9u
cyAmIFBDUkVfQ0FTRUxFU1MpICE9IDAgJiYgZCA+IDEyNykpKQorICAgICAgICAgIGlmICgoZCA+
IDI1NSB8fCAoKG9wdGlvbnMgJiBQQ1JFX0NBU0VMRVNTKSAhPSAwICYmIGQgPiAxMjcpKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgIHVzY2hhciBidWZmZXJbNl07CiAgICAgICAgICAgICBp
ZiAoIWNsYXNzX3V0ZjgpICAgICAgICAgLyogQWxsb3cgZm9yIFhDTEFTUyBvdmVyaGVhZCAqLwpA
QCAtNDU2Myw3ICsyOTMwLDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgICAg
ICAgICAgbGVuZ3RoICs9IExJTktfU0laRSArIDI7CiAgICAgICAgICAgICAgIH0KIAotI2lmZGVm
IFNVUFBPUlRfVUNQCiAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIFVDUCBzdXBwb3J0LCBmaW5k
IG91dCBob3cgbWFueSBleHRyYSByYW5nZXMgYXJlCiAgICAgICAgICAgICBuZWVkZWQgdG8gbWFw
IHRoZSBvdGhlciBjYXNlIG9mIGNoYXJhY3RlcnMgd2l0aGluIHRoaXMgcmFuZ2UuIFdlCiAgICAg
ICAgICAgICBoYXZlIHRvIG1pbWljIHRoZSByYW5nZSBvcHRpbWl6YXRpb24gaGVyZSwgYmVjYXVz
ZSBleHRlbmRpbmcgdGhlCkBAIC00NTk2LDEzICsyOTYyLDExIEBAIHdoaWxlICgrK3B0ciA8IHBh
dHRlcm5FbmQpCiAgICAgICAgICAgICAgICAgICAoKG9jYyA9PSBvY2QpPyAwIDogX3BjcmVfb3Jk
MnV0Zjgob2NkLCBidWZmZXIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0K
LSNlbmRpZiAgLyogU1VQUE9SVF9VQ1AgKi8KIAogICAgICAgICAgICAgLyogVGhlIGxlbmd0aCBv
ZiB0aGUgKHBvc3NpYmx5IGV4dGVuZGVkKSByYW5nZSAqLwogCiAgICAgICAgICAgICBsZW5ndGgg
Kz0gMSArIF9wY3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikgKyBfcGNyZV9vcmQydXRmOChkLCBidWZm
ZXIpOwogICAgICAgICAgICAgfQotI2VuZGlmICAvKiBTVVBQT1JUX1VURjggKi8KIAogICAgICAg
ICAgIH0KIApAQCAtNDYxMyw4ICsyOTc3LDcgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkK
IAogICAgICAgICBlbHNlCiAgICAgICAgICAgewotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAg
ICAgIGlmICh1dGY4ICYmIChjID4gMjU1IHx8ICgob3B0aW9ucyAmIFBDUkVfQ0FTRUxFU1MpICE9
IDAgJiYgYyA+IDEyNykpKQorICAgICAgICAgIGlmICgoYyA+IDI1NSB8fCAoKG9wdGlvbnMgJiBQ
Q1JFX0NBU0VMRVNTKSAhPSAwICYmIGMgPiAxMjcpKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgIHVzY2hhciBidWZmZXJbNl07CiAgICAgICAgICAgICBjbGFzc19vcHRjb3VudCA9IDEwOyAg
ICAgLyogRW5zdXJlID4gMSAqLwpAQCAtNDYyMywyMiArMjk4NiwxMyBAQCB3aGlsZSAoKytwdHIg
PCBwYXR0ZXJuRW5kKQogICAgICAgICAgICAgICBjbGFzc191dGY4ID0gVFJVRTsKICAgICAgICAg
ICAgICAgbGVuZ3RoICs9IExJTktfU0laRSArIDI7CiAgICAgICAgICAgICAgIH0KLSNpZmRlZiBT
VVBQT1JUX1VDUAogICAgICAgICAgICAgbGVuZ3RoICs9ICgoKG9wdGlvbnMgJiBQQ1JFX0NBU0VM
RVNTKSAhPSAwKT8gMiA6IDEpICoKICAgICAgICAgICAgICAgKDEgKyBfcGNyZV9vcmQydXRmOChj
LCBidWZmZXIpKTsKLSNlbHNlICAgLyogU1VQUE9SVF9VQ1AgKi8KLSAgICAgICAgICAgIGxlbmd0
aCArPSAxICsgX3BjcmVfb3JkMnV0ZjgoYywgYnVmZmVyKTsKLSNlbmRpZiAgLyogU1VQUE9SVF9V
Q1AgKi8KICAgICAgICAgICAgIH0KLSNlbmRpZiAgLyogU1VQUE9SVF9VVEY4ICovCiAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICB9Ci0jaWYgSkFWQVNDUklQVAogICAgIHdoaWxlICgrK3B0
ciA8IHBhdHRlcm5FbmQgJiYgKnB0ciAhPSAnXScpOyAvKiBDb25jbHVkZXMgImRvIiBhYm92ZSAq
LwotI2Vsc2UKLSAgICB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kICYmIChpbmVzY3EgfHwgKnB0
ciAhPSAnXScpKTsgLyogQ29uY2x1ZGVzICJkbyIgYWJvdmUgKi8KLSNlbmRpZgogCiAgICAgaWYg
KHB0ciA+PSBwYXR0ZXJuRW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWlzc2luZyB0
ZXJtaW5hdGluZyAnXScgKi8KICAgICAgIHsKQEAgLTQ2ODYsMjYgKzMwNDAsOCBAQCB3aGlsZSAo
KytwdHIgPCBwYXR0ZXJuRW5kKQogCiAgICAgaWYgKHB0ciArIDEgPCBwYXR0ZXJuRW5kICYmIHB0
clsxXSA9PSAnPycpCiAgICAgICB7Ci0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgIGludCBzZXQsIHVu
c2V0OwotICAgICAgaW50ICpvcHRzZXQ7Ci0jZW5kaWYKLQogICAgICAgc3dpdGNoIChjID0gKHB0
ciArIDIgPCBwYXR0ZXJuRW5kID8gcHRyWzJdIDogMCkpCiAgICAgICAgIHsKLSNpZiAhSkFWQVND
UklQVAotICAgICAgICAvKiBTa2lwIG92ZXIgY29tbWVudHMgZW50aXJlbHkgKi8KLSAgICAgICAg
Y2FzZSAnIyc6Ci0gICAgICAgIHB0ciArPSAzOwotICAgICAgICB3aGlsZSAocHRyIDwgcGF0dGVy
bkVuZCAmJiAqcHRyICE9ICcpJykgcHRyKys7Ci0gICAgICAgIGlmIChwdHIgPT0gcGF0dGVybkVu
ZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTg7Ci0gICAgICAgICAg
Z290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLSAgICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwot
I2VuZGlmCi0KICAgICAgICAgLyogTm9uLXJlZmVyZW5jaW5nIGdyb3VwcyBhbmQgbG9va2FoZWFk
cyBqdXN0IG1vdmUgdGhlIHBvaW50ZXIgb24sIGFuZAogICAgICAgICB0aGVuIGJlaGF2ZSBsaWtl
IGEgbm9uLXNwZWNpYWwgYnJhY2tldCwgZXhjZXB0IHRoYXQgdGhleSBkb24ndCBpbmNyZW1lbnQK
ICAgICAgICAgdGhlIGNvdW50IG9mIGV4dHJhY3RpbmcgYnJhY2tldHMuIERpdHRvIGZvciB0aGUg
Im9uY2Ugb25seSIgYnJhY2tldCwKQEAgLTQ3MTQsMjkyICszMDUwLDIxIEBAIHdoaWxlICgrK3B0
ciA8IHBhdHRlcm5FbmQpCiAgICAgICAgIGNhc2UgJzonOgogICAgICAgICBjYXNlICc9JzoKICAg
ICAgICAgY2FzZSAnISc6Ci0jaWYgIUpBVkFTQ1JJUFQKLSAgICAgICAgY2FzZSAnPic6Ci0jZW5k
aWYKLSAgICAgICAgcHRyICs9IDI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qICg/Uikg
c3BlY2lmaWVzIGEgcmVjdXJzaXZlIGNhbGwgdG8gdGhlIHJlZ2V4LCB3aGljaCBpcyBhbiBleHRl
bnNpb24KLSAgICAgICAgdG8gcHJvdmlkZSB0aGUgZmFjaWxpdHkgd2hpY2ggY2FuIGJlIG9idGFp
bmVkIGJ5ICg/cHtwZXJsLWNvZGV9KSBpbgotICAgICAgICBQZXJsIDUuNi4gSW4gUGVybCA1Ljgg
dGhpcyBoYXMgYmVjb21lICg/P3twZXJsLWNvZGV9KS4KLQotICAgICAgICBGcm9tIFBDUkUgNC4w
MCwgaXRlbXMgc3VjaCBhcyAoPzMpIHNwZWNpZnkgc3Vicm91dGluZS1saWtlICJjYWxscyIgdG8K
LSAgICAgICAgdGhlIGFwcHJvcHJpYXRlIG51bWJlcmVkIGJyYWNrZXRzLiBUaGlzIGluY2x1ZGVz
IGJvdGggcmVjdXJzaXZlIGFuZAotICAgICAgICBub24tcmVjdXJzaXZlIGNhbGxzLiAoP1IpIGlz
IG5vdyBzeW5vbnltb3VzIHdpdGggKD8wKS4gKi8KLQotI2lmICFKQVZBU0NSSVBUCi0KLSAgICAg
ICAgY2FzZSAnUic6Ci0gICAgICAgIHB0cisrOwotCi0gICAgICAgIGNhc2UgJzAnOiBjYXNlICcx
JzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLSAgICAgICAgY2FzZSAnNSc6IGNhc2Ug
JzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAgICAgICBwdHIgKz0gMjsKLSAg
ICAgICAgaWYgKGMgIT0gJ1InKQotICAgICAgICAgIHdoaWxlICgoZGlnaXRhYlsqKCsrcHRyKV0g
JiBjdHlwZV9kaWdpdCkgIT0gMCk7Ci0gICAgICAgIGlmICgqcHRyICE9ICcpJykKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMjk7Ci0gICAgICAgICAgZ290byBQQ1JFX0VS
Uk9SX1JFVFVSTjsKLSAgICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCArPSAzICsgMypMSU5LX1NJ
WkU7ICAvKiBBbGxvd3MgZm9yIHRoZSBhdXRvbWF0aWMgIm9uY2UiICovCi0KLSAgICAgICAgLyog
SWYgdGhpcyBpdGVtIGlzIHF1YW50aWZpZWQsIGl0IHdpbGwgZ2V0IHdyYXBwZWQgaW5zaWRlIGJy
YWNrZXRzIHNvCi0gICAgICAgIGFzIHRvIHVzZSB0aGUgY29kZSBmb3IgcXVhbnRpZmllZCBicmFj
a2V0cy4gV2UganVtcCBkb3duIGFuZCB1c2UgdGhlCi0gICAgICAgIGNvZGUgdGhhdCBoYW5kbGVz
IHRoaXMgZm9yIHJlYWwgYnJhY2tldHMuICovCi0KLSAgICAgICAgaWYgKHB0clsxXSA9PSAnKycg
fHwgcHRyWzFdID09ICcqJyB8fCBwdHJbMV0gPT0gJz8nIHx8IHB0clsxXSA9PSAneycpCi0gICAg
ICAgICAgewotICAgICAgICAgIGxlbmd0aCArPSAyICsgMiAqIExJTktfU0laRTsgICAgICAgLyog
dG8gbWFrZSBicmFja2V0ZWQgKi8KLSAgICAgICAgICBkdXBsZW5ndGggPSA1ICsgMyAqIExJTktf
U0laRTsKLSAgICAgICAgICBnb3RvIEhBTkRMRV9RVUFOVElGSUVEX0JSQUNLRVRTOwotICAgICAg
ICAgIH0KLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogKD9DKSBpcyBhbiBleHRlbnNp
b24gd2hpY2ggcHJvdmlkZXMgImNhbGxvdXQiIC0gdG8gcHJvdmlkZSBhIGJpdCBvZgotICAgICAg
ICB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgUGVybCAoP3suLi59KSBmZWF0dXJlLiBBbiBvcHRp
b25hbCBudW1iZXIgbWF5Ci0gICAgICAgIGZvbGxvdyAoZGVmYXVsdCBpcyB6ZXJvKS4gKi8KLQot
ICAgICAgICBjYXNlICdDJzoKICAgICAgICAgcHRyICs9IDI7Ci0gICAgICAgIHdoaWxlICgoZGln
aXRhYlsqKCsrcHRyKV0gJiBjdHlwZV9kaWdpdCkgIT0gMCk7Ci0gICAgICAgIGlmICgqcHRyICE9
ICcpJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMzk7Ci0gICAgICAg
ICAgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLSAgICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCAr
PSAyICsgMipMSU5LX1NJWkU7Ci0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIE5hbWVk
IHN1YnBhdHRlcm5zIGFyZSBhbiBleHRlbnNpb24gY29waWVkIGZyb20gUHl0aG9uICovCi0KLSAg
ICAgICAgY2FzZSAnUCc6Ci0gICAgICAgIHB0ciArPSAzOwotCi0gICAgICAgIC8qIEhhbmRsZSB0
aGUgZGVmaW5pdGlvbiBvZiBhIG5hbWVkIHN1YnBhdHRlcm4gKi8KLQotICAgICAgICBpZiAoKnB0
ciA9PSAnPCcpCi0gICAgICAgICAgewotICAgICAgICAgIGNvbnN0IHVzY2hhciAqcDsgICAgLyog
RG9uJ3QgYW1hbGdhbWF0ZTsgc29tZSBjb21waWxlcnMgKi8KLSAgICAgICAgICBwID0gKytwdHI7
ICAgICAgICAgIC8qIGdydW1ibGUgYXQgYXV0b2luY3JlbWVudCBpbiBkZWNsYXJhdGlvbiAqLwot
ICAgICAgICAgIHdoaWxlICgoY29tcGlsZV9ibG9jay5jdHlwZXNbKnB0cl0gJiBjdHlwZV93b3Jk
KSAhPSAwKSBwdHIrKzsKLSAgICAgICAgICBpZiAoKnB0ciAhPSAnPicpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICBlcnJvcmNvZGUgPSBFUlI0MjsKLSAgICAgICAgICAgIGdvdG8gUENSRV9F
UlJPUl9SRVRVUk47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgbmFtZV9jb3VudCsrOwotICAg
ICAgICAgIGlmIChwdHIgLSBwID4gbWF4X25hbWVfc2l6ZSkgbWF4X25hbWVfc2l6ZSA9IChwdHIg
LSBwKTsKLSAgICAgICAgICBjYXB0dXJpbmcgPSBUUlVFOyAgIC8qIE5hbWVkIHBhcmVudGhlc2Vz
IGFyZSBhbHdheXMgY2FwdHVyaW5nICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgIC8qIEhhbmRsZSBiYWNrIHJlZmVyZW5jZXMgYW5kIHJlY3Vyc2l2ZSBjYWxscyB0
byBuYW1lZCBzdWJwYXR0ZXJucyAqLwotCi0gICAgICAgIGlmICgqcHRyID09ICc9JyB8fCAqcHRy
ID09ICc+JykKLSAgICAgICAgICB7Ci0gICAgICAgICAgbGVuZ3RoICs9IDIgKyAyKkxJTktfU0la
RTsgIC8qIEFsbG93IGZvciB0aGUgYXV0b21hdGljICJvbmNlIiAqLwotICAgICAgICAgIHdoaWxl
ICgoY29tcGlsZV9ibG9jay5jdHlwZXNbKigrK3B0cildICYgY3R5cGVfd29yZCkgIT0gMCk7Ci0g
ICAgICAgICAgaWYgKCpwdHIgIT0gJyknKQotICAgICAgICAgICAgewotICAgICAgICAgICAgZXJy
b3Jjb2RlID0gRVJSNDI7Ci0gICAgICAgICAgICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAvKiBV
bmtub3duIGNoYXJhY3RlciBhZnRlciAoP1AgKi8KLQotICAgICAgICBlcnJvcmNvZGUgPSBFUlI0
MTsKLSAgICAgICAgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLQotICAgICAgICAvKiBMb29rYmVo
aW5kcyBhcmUgaW4gUGVybCBmcm9tIHZlcnNpb24gNS4wMDUgKi8KLQotICAgICAgICBjYXNlICc8
JzoKLSAgICAgICAgcHRyICs9IDM7Ci0gICAgICAgIGlmICgqcHRyID09ICc9JyB8fCAqcHRyID09
ICchJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgYnJhbmNoX25ld2V4dHJhID0gMSArIExJTktf
U0laRTsKLSAgICAgICAgICBsZW5ndGggKz0gMSArIExJTktfU0laRTsgICAgICAgICAvKiBGb3Ig
dGhlIGZpcnN0IGJyYW5jaCAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgZXJyb3Jjb2RlID0gRVJSMjQ7Ci0gICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0K
LSAgICAgICAgLyogQ29uZGl0aW9uYWxzIGFyZSBpbiBQZXJsIGZyb20gdmVyc2lvbiA1LjAwNS4g
VGhlIGJyYWNrZXQgbXVzdCBlaXRoZXIKLSAgICAgICAgYmUgZm9sbG93ZWQgYnkgYSBudW1iZXIg
KGZvciBicmFja2V0IHJlZmVyZW5jZSkgb3IgYnkgYW4gYXNzZXJ0aW9uCi0gICAgICAgIGdyb3Vw
LCBvciAoYSBQQ1JFIGV4dGVuc2lvbikgYnkgJ1InIGZvciBhIHJlY3Vyc2lvbiB0ZXN0LiAqLwot
Ci0gICAgICAgIGNhc2UgJygnOgotICAgICAgICBpZiAocHRyWzNdID09ICdSJyAmJiBwdHJbNF0g
PT0gJyknKQotICAgICAgICAgIHsKLSAgICAgICAgICBwdHIgKz0gNDsKLSAgICAgICAgICBsZW5n
dGggKz0gMzsKLSAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKChkaWdpdGFiW3B0clszXV0g
JiBjdHlwZV9kaWdpdCkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgcHRyICs9IDQ7Ci0g
ICAgICAgICAgbGVuZ3RoICs9IDM7Ci0gICAgICAgICAgd2hpbGUgKChkaWdpdGFiWypwdHJdICYg
Y3R5cGVfZGlnaXQpICE9IDApIHB0cisrOwotICAgICAgICAgIGlmICgqcHRyICE9ICcpJykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yY29kZSA9IEVSUjI2OwotICAgICAgICAgICAg
Z290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgICAvKiBBbiBhc3NlcnRpb24gbXVzdCBmb2xsb3cgKi8KLSAgICAgICAgICB7Ci0g
ICAgICAgICAgcHRyKys7ICAgLyogQ2FuIHRyZWF0IGxpa2UgJzonIGFzIGZhciBhcyBzcGFjaW5n
IGlzIGNvbmNlcm5lZCAqLwotICAgICAgICAgIGlmIChwdHJbMl0gIT0gJz8nIHx8Ci0gICAgICAg
ICAgICAgKHB0clszXSAhPSAnPScgJiYgcHRyWzNdICE9ICchJyAmJiBwdHJbM10gIT0gJzwnKSAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBwdHIgKz0gMjsgICAgLyogVG8gZ2V0IHJpZ2h0
IG9mZnNldCBpbiBtZXNzYWdlICovCi0gICAgICAgICAgICBlcnJvcmNvZGUgPSBFUlIyODsKLSAg
ICAgICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQogICAgICAgICBicmVhazsKIAotI2VuZGlmCi0KICAgICAgICAgLyogRWxzZSBsb29wIGNo
ZWNraW5nIHZhbGlkIG9wdGlvbnMgdW50aWwgKSBpcyBtZXQuIEFueXRoaW5nIGVsc2UgaXMgYW4K
ICAgICAgICAgZXJyb3IuIElmIHdlIGFyZSB3aXRob3V0IGFueSBicmFja2V0cywgaS5lLiBhdCB0
b3AgbGV2ZWwsIHRoZSBzZXR0aW5ncwogICAgICAgICBhY3QgYXMgaWYgc3BlY2lmaWVkIGluIHRo
ZSBvcHRpb25zLCBzbyBtYXNzYWdlIHRoZSBvcHRpb25zIGltbWVkaWF0ZWx5LgogICAgICAgICBU
aGlzIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggUGVybCA1LjAwNC4gKi8KIAog
ICAgICAgICBkZWZhdWx0OgotI2lmIEpBVkFTQ1JJUFQKICAgICAgICAgZXJyb3Jjb2RlID0gRVJS
MTI7CiAgICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0jZWxzZQotICAgICAgICBzZXQg
PSB1bnNldCA9IDA7Ci0gICAgICAgIG9wdHNldCA9ICZzZXQ7Ci0gICAgICAgIHB0ciArPSAyOwot
Ci0gICAgICAgIGZvciAoOzsgcHRyKyspCi0gICAgICAgICAgewotICAgICAgICAgIGMgPSAqcHRy
OwotICAgICAgICAgIHN3aXRjaCAoYykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2Ug
J2knOgotICAgICAgICAgICAgKm9wdHNldCB8PSBQQ1JFX0NBU0VMRVNTOwotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIGNhc2UgJ20nOgotICAgICAgICAgICAgKm9wdHNldCB8
PSBQQ1JFX01VTFRJTElORTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBj
YXNlICdzJzoKLSAgICAgICAgICAgICpvcHRzZXQgfD0gUENSRV9ET1RBTEw7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAqb3B0c2V0
IHw9IFBDUkVfRVhURU5ERUQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
Y2FzZSAnWCc6Ci0gICAgICAgICAgICAqb3B0c2V0IHw9IFBDUkVfRVhUUkE7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICAqb3B0c2V0
IHw9IFBDUkVfVU5HUkVFRFk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
Y2FzZSAnLSc6Ci0gICAgICAgICAgICBvcHRzZXQgPSAmdW5zZXQ7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgLyogQSB0ZXJtaW5hdGlvbiBieSAnKScgaW5kaWNhdGVzIGFu
IG9wdGlvbnMtc2V0dGluZy1vbmx5IGl0ZW07IGlmCi0gICAgICAgICAgICB0aGlzIGlzIGF0IHRo
ZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIChpbmRpY2F0ZWQgYnkgaXRlbV9jb3VudAotICAg
ICAgICAgICAgYmVpbmcgemVybyksIHdlIHVzZSBpdCB0byBzZXQgdGhlIGdsb2JhbCBvcHRpb25z
LiBUaGlzIGlzIGhlbHBmdWwKLSAgICAgICAgICAgIHdoZW4gYW5hbHl6aW5nIHRoZSBwYXR0ZXJu
IGZvciBmaXJzdCBjaGFyYWN0ZXJzLCBldGMuIE90aGVyd2lzZQotICAgICAgICAgICAgbm90aGlu
ZyBpcyBkb25lIGhlcmUgYW5kIGl0IGlzIGhhbmRsZWQgZHVyaW5nIHRoZSBjb21waWxpbmcKLSAg
ICAgICAgICAgIHByb2Nlc3MuCi0KLSAgICAgICAgICAgIFdlIGFsbG93IGZvciBtb3JlIHRoYW4g
b25lIG9wdGlvbnMgc2V0dGluZyBhdCB0aGUgc3RhcnQuIElmIHN1Y2gKLSAgICAgICAgICAgIHNl
dHRpbmdzIGRvIG5vdCBjaGFuZ2UgdGhlIGV4aXN0aW5nIG9wdGlvbnMsIG5vdGhpbmcgaXMgY29t
cGlsZWQuCi0gICAgICAgICAgICBIb3dldmVyLCB3ZSBtdXN0IGxlYXZlIHNwYWNlIGp1c3QgaW4g
Y2FzZSBzb21ldGhpbmcgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICBUaGlzIGNhbiBoYXBwZW4g
Zm9yIHBhdGhvbG9naWNhbCBzZXF1ZW5jZXMgc3VjaCBhcyAoP2kpKD8taSkKLSAgICAgICAgICAg
IGJlY2F1c2UgdGhlIGdsb2JhbCBvcHRpb25zIHdpbGwgZW5kIHVwIHdpdGggLWkgc2V0LiBUaGUg
c3BhY2UgaXMKLSAgICAgICAgICAgIHNtYWxsIGFuZCBub3Qgc2lnbmlmaWNhbnQuIChCZWZvcmUg
SSBkaWQgdGhpcyB0aGVyZSB3YXMgYSByZXBvcnRlZAotICAgICAgICAgICAgYnVnIHdpdGggKD9p
KSg/LWkpIGluIGEgbWFjaGluZS1nZW5lcmF0ZWQgcGF0dGVybi4pCi0KLSAgICAgICAgICAgIFtI
aXN0b3JpY2FsIG5vdGU6IFVwIHRvIFBlcmwgNS44LCBvcHRpb25zIHNldHRpbmdzIGF0IHRvcCBs
ZXZlbAotICAgICAgICAgICAgd2VyZSBhbHdheXMgZ2xvYmFsIHNldHRpbmdzLCB3aGVyZXZlciB0
aGV5IGFwcGVhcmVkIGluIHRoZSBwYXR0ZXJuLgotICAgICAgICAgICAgVGhhdCBpcywgdGhleSB3
ZXJlIGVxdWl2YWxlbnQgdG8gYW4gZXh0ZXJuYWwgc2V0dGluZy4gRnJvbSA1LjgKLSAgICAgICAg
ICAgIG9ud2FyZHMsIHRoZXkgYXBwbHkgb25seSB0byB3aGF0IGZvbGxvd3MgKHdoaWNoIGlzIHdo
YXQgeW91IG1pZ2h0Ci0gICAgICAgICAgICBleHBlY3QpLl0gKi8KLQotICAgICAgICAgICAgY2Fz
ZSAnKSc6Ci0gICAgICAgICAgICBpZiAoaXRlbV9jb3VudCA9PSAwKQotICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIG9wdGlvbnMgPSAob3B0aW9ucyB8IHNldCkgJiAofnVuc2V0KTsKLSAg
ICAgICAgICAgICAgc2V0ID0gdW5zZXQgPSAwOyAgICAgLyogVG8gc2F2ZSBsZW5ndGggKi8KLSAg
ICAgICAgICAgICAgaXRlbV9jb3VudC0tOyAgICAgICAgLyogVG8gYWxsb3cgZm9yIHNldmVyYWwg
Ki8KLSAgICAgICAgICAgICAgbGVuZ3RoICs9IDI7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLyogRmFsbCB0aHJvdWdoICovCi0KLSAgICAgICAgICAgIC8qIEEgdGVybWluYXRpb24g
YnkgJzonIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBuZXN0ZWQgZ3JvdXAgd2l0aAotICAgICAg
ICAgICAgdGhlIGdpdmVuIG9wdGlvbnMgc2V0LiBUaGlzIGlzIGFnYWluIGhhbmRsZWQgYXQgY29t
cGlsZSB0aW1lLCBidXQKLSAgICAgICAgICAgIHdlIG11c3QgYWxsb3cgZm9yIGNvbXBpbGVkIHNw
YWNlIGlmIGFueSBvZiB0aGUgaW1zIG9wdGlvbnMgYXJlCi0gICAgICAgICAgICBzZXQuIFdlIGFs
c28gaGF2ZSB0byBhbGxvdyBmb3IgcmVzZXR0aW5nIHNwYWNlIGF0IHRoZSBlbmQgb2YKLSAgICAg
ICAgICAgIHRoZSBncm91cCwgd2hpY2ggaXMgd2h5IDQgaXMgYWRkZWQgdG8gdGhlIGxlbmd0aCBh
bmQgbm90IGp1c3QgMi4KLSAgICAgICAgICAgIElmIHRoZXJlIGFyZSBzZXZlcmFsIGNoYW5nZXMg
b2Ygb3B0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAsIHRoaXMKLSAgICAgICAgICAgIHdpbGwg
bGVhZCB0byBhbiBvdmVyLWVzdGltYXRlIG9uIHRoZSBsZW5ndGgsIGJ1dCB0aGlzIHNob3VsZG4n
dAotICAgICAgICAgICAgbWF0dGVyIHZlcnkgbXVjaC4gV2UgYWxzbyBoYXZlIHRvIGFsbG93IGZv
ciByZXNldHRpbmcgb3B0aW9ucyBhdAotICAgICAgICAgICAgdGhlIHN0YXJ0IG9mIGFueSBhbHRl
cm5hdGlvbnMsIHdoaWNoIHdlIGRvIGJ5IHNldHRpbmcKLSAgICAgICAgICAgIGJyYW5jaF9uZXdl
eHRyYSB0byAyLiBGaW5hbGx5LCB3ZSByZWNvcmQgd2hldGhlciB0aGUgY2FzZS1kZXBlbmRlbnQK
LSAgICAgICAgICAgIGZsYWcgZXZlciBjaGFuZ2VzIHdpdGhpbiB0aGUgcmVnZXguIFRoaXMgaXMg
dXNlZCBieSB0aGUgInJlcXVpcmVkCi0gICAgICAgICAgICBjaGFyYWN0ZXIiIGNvZGUuICovCi0K
LSAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgaWYgKCgoc2V0fHVuc2V0KSAmIFBD
UkVfSU1TKSAhPSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGxlbmd0aCArPSA0
OwotICAgICAgICAgICAgICBicmFuY2hfbmV3ZXh0cmEgPSAyOwotICAgICAgICAgICAgICBpZiAo
KChzZXR8dW5zZXQpICYgUENSRV9DQVNFTEVTUykgIT0gMCkgb3B0aW9ucyB8PSBQQ1JFX0lDSEFO
R0VEOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBnb3RvIEVORF9PUFRJT05TOwotCi0g
ICAgICAgICAgICAvKiBVbnJlY29nbml6ZWQgb3B0aW9uIGNoYXJhY3RlciAqLwotCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTI7Ci0gICAgICAgICAg
ICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQot
ICAgICAgICAvKiBJZiB3ZSBoaXQgYSBjbG9zaW5nIGJyYWNrZXQsIHRoYXQncyBpdCAtIHRoaXMg
aXMgYSBmcmVlc3RhbmRpbmcKLSAgICAgICAgb3B0aW9uLXNldHRpbmcuIFdlIG5lZWQgdG8gZW5z
dXJlIHRoYXQgYnJhbmNoX2V4dHJhIGlzIHVwZGF0ZWQgaWYKLSAgICAgICAgbmVjZXNzYXJ5LiBU
aGUgb25seSB2YWx1ZXMgYnJhbmNoX25ld2V4dHJhIGNhbiBoYXZlIGhlcmUgYXJlIDAgb3IgMi4K
LSAgICAgICAgSWYgdGhlIHZhbHVlIGlzIDIsIHRoZW4gYnJhbmNoX2V4dHJhIG11c3QgZWl0aGVy
IGJlIDIgb3IgNSwgZGVwZW5kaW5nCi0gICAgICAgIG9uIHdoZXRoZXIgdGhpcyBpcyBhIGxvb2ti
ZWhpbmQgZ3JvdXAgb3Igbm90LiAqLwotCi0gICAgICAgIEVORF9PUFRJT05TOgotICAgICAgICBp
ZiAoYyA9PSAnKScpCi0gICAgICAgICAgewotICAgICAgICAgIGlmIChicmFuY2hfbmV3ZXh0cmEg
PT0gMiAmJgotICAgICAgICAgICAgICAoYnJhbmNoX2V4dHJhID09IDAgfHwgYnJhbmNoX2V4dHJh
ID09IDErTElOS19TSVpFKSkKLSAgICAgICAgICAgIGJyYW5jaF9leHRyYSArPSBicmFuY2hfbmV3
ZXh0cmE7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgIC8qIElm
IG9wdGlvbnMgd2VyZSB0ZXJtaW5hdGVkIGJ5ICc6JyBjb250cm9sIGNvbWVzIGhlcmUuIFRoaXMg
aXMgYQotICAgICAgICBub24tY2FwdHVyaW5nIGdyb3VwIHdpdGggYW4gb3B0aW9ucyBjaGFuZ2Uu
IFRoZXJlIGlzIG5vdGhpbmcgbW9yZSB0aGF0Ci0gICAgICAgIG5lZWRzIHRvIGJlIGRvbmUgYmVj
YXVzZSAiY2FwdHVyaW5nIiBpcyBhbHJlYWR5IHNldCBGQUxTRSBieSBkZWZhdWx0OwotICAgICAg
ICB3ZSBjYW4ganVzdCBmYWxsIHRocm91Z2guICovCi0KLSNlbmRpZgogICAgICAgICB9CiAgICAg
ICB9CiAKLSAgICAvKiBPcmRpbmFyeSBwYXJlbnRoZXNlcywgbm90IGZvbGxvd2VkIGJ5ICc/Jywg
YXJlIGNhcHR1cmluZyB1bmxlc3MKLSAgICBQQ1JFX05PX0FVVE9fQ0FQVFVSRSBpcyBzZXQuICov
Ci0KLSAgICBlbHNlIGNhcHR1cmluZyA9IChvcHRpb25zICYgUENSRV9OT19BVVRPX0NBUFRVUkUp
ID09IDA7CisgICAgZWxzZSBjYXB0dXJpbmcgPSAxOwogCiAgICAgLyogQ2FwdHVyaW5nIGJyYWNr
ZXRzIG11c3QgYmUgY291bnRlZCBzbyB3ZSBjYW4gcHJvY2VzcyBlc2NhcGVzIGluIGEKICAgICBQ
ZXJsaXNoIHdheS4gSWYgdGhlIG51bWJlciBleGNlZWRzIEVYVFJBQ1RfQkFTSUNfTUFYIHdlIGFy
ZSBnb2luZyB0byBuZWVkCkBAIC01MDQ0LDE1ICszMTA5LDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0
dGVybkVuZCkKICAgICAgIH0KICAgICBlbHNlIGR1cGxlbmd0aCA9IDA7CiAKLSAgICAvKiBUaGUg
Zm9sbG93aW5nIGNvZGUgaXMgYWxzbyB1c2VkIHdoZW4gYSByZWN1cnNpb24gc3VjaCBhcyAoPzMp
IGlzCi0gICAgZm9sbG93ZWQgYnkgYSBxdWFudGlmaWVyLCBiZWNhdXNlIGluIHRoYXQgY2FzZSwg
aXQgaGFzIHRvIGJlIHdyYXBwZWQgaW5zaWRlCi0gICAgYnJhY2tldHMgc28gdGhhdCB0aGUgcXVh
bnRpZmllciB3b3Jrcy4gVGhlIHZhbHVlIG9mIGR1cGxlbmd0aCBtdXN0IGJlCi0gICAgc2V0IGJl
Zm9yZSBhcnJpdmFsLiAqLwotCi0jaWYgIUpBVkFTQ1JJUFQKLSAgICBIQU5ETEVfUVVBTlRJRklF
RF9CUkFDS0VUUzoKLSNlbmRpZgotCiAgICAgLyogTGVhdmUgcHRyIGF0IHRoZSBmaW5hbCBjaGFy
OyBmb3IgcmVhZF9yZXBlYXRfY291bnRzIHRoaXMgaGFwcGVucwogICAgIGF1dG9tYXRpY2FsbHk7
IGZvciB0aGUgb3RoZXJzIHdlIG5lZWQgYW4gaW5jcmVtZW50LiAqLwogCkBAIC01MTA3LDIxICsz
MTYzLDExIEBAIHdoaWxlICgrK3B0ciA8IHBhdHRlcm5FbmQpCiAgICAgZGVmYXVsdDoKICAgICBO
T1JNQUxfQ0hBUjoKIAotI2lmICFKQVZBU0NSSVBUCi0gICAgaWYgKGluZXNjcSAmJiBjID09ICdc
XCcgJiYgcHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFdID09ICdFJykKLSAgICAgIHsKLSAg
ICAgIGluZXNjcSA9IEZBTFNFOwotICAgICAgcHRyKys7Ci0gICAgICBjb250aW51ZTsKLSAgICAg
IH0KLSNlbmRpZgotCiAgICAgbGVuZ3RoICs9IDI7ICAgICAgICAgIC8qIEZvciBhIG9uZS1ieXRl
IGNoYXJhY3RlciAqLwogICAgIGxhc3RpdGVtbGVuZ3RoID0gMTsgICAvKiBEZWZhdWx0IGxlbmd0
aCBvZiBsYXN0IGl0ZW0gZm9yIHJlcGVhdHMgKi8KIAogICAgIC8qIEluIFVURi04IG1vZGUsIGNo
ZWNrIGZvciBhZGRpdGlvbmFsIGJ5dGVzLiAqLwogCi0jaWYgUENSRV9VVEYxNgogICAgIGlmIChj
ID4gMTI3KQogICAgICAgewogICAgICAgICBpZiAoSVNfTEVBRElOR19TVVJST0dBVEUoYykpCkBA
IC01MTM4LDE5ICszMTg0LDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgICAg
ICBsYXN0aXRlbWxlbmd0aCArPSBpOwogICAgICAgICB9CiAgICAgICB9Ci0jZWxzZQotI2lmZGVm
IFNVUFBPUlRfVVRGOAotICAgIGlmICh1dGY4ICYmIChjICYgMHhjMCkgPT0gMHhjMCkKLSAgICAg
IHsKLSAgICAgIHdoaWxlIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiAocHRyWzFdICYgMHhjMCkg
PT0gMHg4MCkgICAgICAgICAvKiBDYW4ndCBmbG93IG92ZXIgdGhlIGVuZCAqLwotICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJlY2F1c2UgdGhlIGVuZCBp
cyBtYXJrZWQgKi8KLSAgICAgICAgbGFzdGl0ZW1sZW5ndGgrKzsgICAgICAgICAgICAgICAgICAg
ICAvKiBieSBhIHplcm8gYnl0ZS4gKi8KLSAgICAgICAgbGVuZ3RoKys7Ci0gICAgICAgIHB0cisr
OwotICAgICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSNlbmRpZgogCiAgICAgY29udGludWU7CiAg
ICAgfQpAQCAtNTE1OCw5ICszMTkxLDYgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKIAog
bGVuZ3RoICs9IDIgKyBMSU5LX1NJWkU7ICAgIC8qIEZvciBmaW5hbCBLRVQgYW5kIEVORCAqLwog
Ci1pZiAoKG9wdGlvbnMgJiBQQ1JFX0FVVE9fQ0FMTE9VVCkgIT0gMCkKLSAgbGVuZ3RoICs9IDIg
KyAyKkxJTktfU0laRTsgIC8qIEZvciBmaW5hbCBjYWxsb3V0ICovCi0KIGlmIChsZW5ndGggPiBN
QVhfUEFUVEVSTl9TSVpFKQogICB7CiAgIGVycm9yY29kZSA9IEVSUjIwOwpAQCAtNTE4NCwxNSAr
MzIxNCwxMyBAQCBwb2ludGVyLiBOVUxMIGlzIHVzZWQgZm9yIHRoZSBkZWZhdWx0IGNoCiB0aGUg
ZW5kOyBpdCdzIHRoZXJlIHRvIGhlbHAgaW4gdGhlIGNhc2Ugd2hlbiBhIHJlZ2V4IGNvbXBpbGVk
IG9uIGEgc3lzdGVtIHdpdGgKIDQtYnl0ZSBwb2ludGVycyBpcyBydW4gb24gYW5vdGhlciB3aXRo
IDgtYnl0ZSBwb2ludGVycy4gKi8KIAotcmUtPm1hZ2ljX251bWJlciA9IChwY3JlX3VpbnQzMilN
QUdJQ19OVU1CRVI7CiByZS0+c2l6ZSA9IChwY3JlX3VpbnQzMilzaXplOwogcmUtPm9wdGlvbnMg
PSBvcHRpb25zOwotcmUtPmR1bW15MSA9IDA7CiByZS0+bmFtZV90YWJsZV9vZmZzZXQgPSBzaXpl
b2YocmVhbF9wY3JlKTsKIHJlLT5uYW1lX2VudHJ5X3NpemUgPSBtYXhfbmFtZV9zaXplICsgMzsK
IHJlLT5uYW1lX2NvdW50ID0gbmFtZV9jb3VudDsKIHJlLT5yZWZfY291bnQgPSAwOwotcmUtPnRh
YmxlcyA9ICh0YWJsZXMgPT0gX3BjcmVfZGVmYXVsdF90YWJsZXMpPyBOVUxMIDogdGFibGVzOwor
cmUtPnRhYmxlcyA9IDA7CiByZS0+bnVsbHBhZCA9IE5VTEw7CiAKIC8qIFRoZSBzdGFydGluZyBw
b2ludHMgb2YgdGhlIG5hbWUvbnVtYmVyIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCBvZiB0aGUgY29k
ZSBhcmUKQEAgLTUyMDUsNyArMzIzMyw2IEBAIGNvZGVzdGFydCA9IGNvbXBpbGVfYmxvY2submFt
ZV90YWJsZSArIHIKIGNvbXBpbGVfYmxvY2suc3RhcnRfY29kZSA9IGNvZGVzdGFydDsKIGNvbXBp
bGVfYmxvY2suc3RhcnRfcGF0dGVybiA9IChjb25zdCBwY3JlX3VjaGFyICopcGF0dGVybjsKIGNv
bXBpbGVfYmxvY2sucmVxX3ZhcnlvcHQgPSAwOwotY29tcGlsZV9ibG9jay5ub3BhcnRpYWwgPSBG
QUxTRTsKIAogLyogU2V0IHVwIGEgc3RhcnRpbmcsIG5vbi1leHRyYWN0aW5nIGJyYWNrZXQsIHRo
ZW4gY29tcGlsZSB0aGUgZXhwcmVzc2lvbi4gT24KIGVycm9yLCBlcnJvcmNvZGUgd2lsbCBiZSBz
ZXQgbm9uLXplcm8sIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCB0aGUgcmVzdWx0CkBAIC01
MjE1LDE0ICszMjQyLDEyIEBAIHB0ciA9IChjb25zdCBwY3JlX3VjaGFyICopcGF0dGVybjsKIGNv
ZGUgPSAodXNjaGFyICopY29kZXN0YXJ0OwogKmNvZGUgPSBPUF9CUkE7CiBicmFjb3VudCA9IDA7
Ci0odm9pZCljb21waWxlX3JlZ2V4KG9wdGlvbnMsIG9wdGlvbnMgJiBQQ1JFX0lNUywgJmJyYWNv
dW50LCAmY29kZSwgJnB0ciwKKyh2b2lkKWNvbXBpbGVfcmVnZXgob3B0aW9ucywgJmJyYWNvdW50
LCAmY29kZSwgJnB0ciwKICAgcGF0dGVybkVuZCwKLSAgJmVycm9yY29kZSwgRkFMU0UsIDAsICZm
aXJzdGJ5dGUsICZyZXFieXRlLCBOVUxMLCAmY29tcGlsZV9ibG9jayk7CisgICZlcnJvcmNvZGUs
IDAsICZmaXJzdGJ5dGUsICZyZXFieXRlLCBOVUxMLCAmY29tcGlsZV9ibG9jayk7CiByZS0+dG9w
X2JyYWNrZXQgPSBicmFjb3VudDsKIHJlLT50b3BfYmFja3JlZiA9IGNvbXBpbGVfYmxvY2sudG9w
X2JhY2tyZWY7CiAKLWlmIChjb21waWxlX2Jsb2NrLm5vcGFydGlhbCkgcmUtPm9wdGlvbnMgfD0g
UENSRV9OT1BBUlRJQUw7Ci0KIC8qIElmIG5vdCByZWFjaGVkIGVuZCBvZiBwYXR0ZXJuIG9uIHN1
Y2Nlc3MsIHRoZXJlJ3MgYW4gZXhjZXNzIGJyYWNrZXQuICovCiAKIGlmIChlcnJvcmNvZGUgPT0g
MCAmJiBwdHIgPCBwYXR0ZXJuRW5kKSBlcnJvcmNvZGUgPSBFUlIyMjsKQEAgLTUyNDcsMTAgKzMy
NzIsOCBAQCBpZiAoZXJyb3Jjb2RlICE9IDApCiAgIHsKICAgKHBjcmVfZnJlZSkocmUpOwogICBQ
Q1JFX0VSUk9SX1JFVFVSTjoKLSAgKmVycm9yb2Zmc2V0ID0gcHRyIC0gKGNvbnN0IHBjcmVfdWNo
YXIgKilwYXR0ZXJuOwogICBQQ1JFX0VBUkxZX0VSUk9SX1JFVFVSTjoKICAgKmVycm9ycHRyID0g
ZXJyb3JfdGV4dHNbZXJyb3Jjb2RlXTsKLSAgaWYgKGVycm9yY29kZXB0ciAhPSBOVUxMKSAqZXJy
b3Jjb2RlcHRyID0gZXJyb3Jjb2RlOwogICByZXR1cm4gTlVMTDsKICAgfQogCkBAIC01MjY0LDcg
KzMyODcsNiBAQCBQQ1JFX1NUQVJUTElORSBmbGFnLiBUaGlzIGlzIGhlbHBmdWwgZm9yCiBzdGFy
dCB3aXRoIF4uIGFuZCBhbHNvIHdoZW4gYWxsIGJyYW5jaGVzIHN0YXJ0IHdpdGggLiogZm9yIG5v
bi1ET1RBTEwgbWF0Y2hlcy4KICovCiAKLWlmICgob3B0aW9ucyAmIFBDUkVfQU5DSE9SRUQpID09
IDApCiAgIHsKICAgaW50IHRlbXBfb3B0aW9ucyA9IG9wdGlvbnM7CiAgIGlmIChpc19hbmNob3Jl
ZChjb2Rlc3RhcnQsICZ0ZW1wX29wdGlvbnMsIDAsIGNvbXBpbGVfYmxvY2suYmFja3JlZl9tYXAp
KQpAQCAtNTI3Niw5ICszMjk4LDcgQEAgaWYgKChvcHRpb25zICYgUENSRV9BTkNIT1JFRCkgPT0g
MCkKICAgICBpZiAoZmlyc3RieXRlID49IDApICAgLyogUmVtb3ZlIGNhc2VsZXNzIGZsYWcgZm9y
IG5vbi1jYXNlYWJsZSBjaGFycyAqLwogICAgICAgewogICAgICAgaW50IGNoID0gZmlyc3RieXRl
ICYgMjU1OwotI2lmIFBDUkVfVVRGMTYKICAgICAgIGlmIChjaCA8IDEyNykKLSNlbmRpZgogICAg
ICAgeyAvKiBTdHJhbmdlIGluZGVudGF0aW9uIHRvIGFpZCBpbiBtZXJnaW5nLiAqLwogICAgICAg
cmUtPmZpcnN0X2J5dGUgPSAoKGZpcnN0Ynl0ZSAmIFJFUV9DQVNFTEVTUykgIT0gMCAmJgogICAg
ICAgICAgY29tcGlsZV9ibG9jay5mY2NbY2hdID09IGNoKT8gY2ggOiBmaXJzdGJ5dGU7CkBAIC01
Mjk4LDkgKzMzMTgsNyBAQCBpZiAocmVxYnl0ZSA+PSAwICYmCiAgICAgICgocmUtPm9wdGlvbnMg
JiBQQ1JFX0FOQ0hPUkVEKSA9PSAwIHx8IChyZXFieXRlICYgUkVRX1ZBUlkpICE9IDApKQogICB7
CiAgIGludCBjaCA9IHJlcWJ5dGUgJiAyNTU7Ci0jaWYgUENSRV9VVEYxNgogICBpZiAoY2ggPCAx
MjcpCi0jZW5kaWYKICAgeyAvKiBTdHJhbmdlIGluZGVudGF0aW9uIHRvIGFpZCBpbiBtZXJnaW5n
LiAqLwogICByZS0+cmVxX2J5dGUgPSAoKHJlcWJ5dGUgJiBSRVFfQ0FTRUxFU1MpICE9IDAgJiYK
ICAgICAgIGNvbXBpbGVfYmxvY2suZmNjW2NoXSA9PSBjaCk/IChyZXFieXRlICYgflJFUV9DQVNF
TEVTUykgOiByZXFieXRlOwpAQCAtNTMxOCwxNyArMzMzNiwxMCBAQCBwcmludGYoIkxlbmd0aCA9
ICVkIHRvcF9icmFja2V0ID0gJWQgdG9wCiAKIGlmIChyZS0+b3B0aW9ucyAhPSAwKQogICB7Ci0g
IHByaW50ZigiJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsCi0gICAgKChyZS0+b3B0aW9ucyAmIFBD
UkVfTk9QQVJUSUFMKSAhPSAwKT8gIm5vcGFydGlhbCAiIDogIiIsCisgIHByaW50ZigiJXMlcyVz
XG4iLAogICAgICgocmUtPm9wdGlvbnMgJiBQQ1JFX0FOQ0hPUkVEKSAhPSAwKT8gImFuY2hvcmVk
ICIgOiAiIiwKICAgICAoKHJlLT5vcHRpb25zICYgUENSRV9DQVNFTEVTUykgIT0gMCk/ICJjYXNl
bGVzcyAiIDogIiIsCi0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfSUNIQU5HRUQpICE9IDApPyAi
Y2FzZSBzdGF0ZSBjaGFuZ2VkICIgOiAiIiwKLSAgICAoKHJlLT5vcHRpb25zICYgUENSRV9FWFRF
TkRFRCkgIT0gMCk/ICJleHRlbmRlZCAiIDogIiIsCi0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVf
TVVMVElMSU5FKSAhPSAwKT8gIm11bHRpbGluZSAiIDogIiIsCi0gICAgKChyZS0+b3B0aW9ucyAm
IFBDUkVfRE9UQUxMKSAhPSAwKT8gImRvdGFsbCAiIDogIiIsCi0gICAgKChyZS0+b3B0aW9ucyAm
IFBDUkVfRE9MTEFSX0VORE9OTFkpICE9IDApPyAiZW5kb25seSAiIDogIiIsCi0gICAgKChyZS0+
b3B0aW9ucyAmIFBDUkVfRVhUUkEpICE9IDApPyAiZXh0cmEgIiA6ICIiLAotICAgICgocmUtPm9w
dGlvbnMgJiBQQ1JFX1VOR1JFRURZKSAhPSAwKT8gInVuZ3JlZWR5ICIgOiAiIik7CisgICAgKChy
ZS0+b3B0aW9ucyAmIFBDUkVfTVVMVElMSU5FKSAhPSAwKT8gIm11bHRpbGluZSAiIDogIiIpOwog
ICB9CiAKIGlmICgocmUtPm9wdGlvbnMgJiBQQ1JFX0ZJUlNUU0VUKSAhPSAwKQpAQCAtNTM1OCwx
MyArMzM2OSwxOCBAQCBpZiAoY29kZSAtIGNvZGVzdGFydCA+IGxlbmd0aCkKICAgewogICAocGNy
ZV9mcmVlKShyZSk7CiAgICplcnJvcnB0ciA9IGVycm9yX3RleHRzW0VSUjIzXTsKLSAgKmVycm9y
b2Zmc2V0ID0gcHRyIC0gKHBjcmVfdWNoYXIgKilwYXR0ZXJuOwotICBpZiAoZXJyb3Jjb2RlcHRy
ICE9IE5VTEwpICplcnJvcmNvZGVwdHIgPSBFUlIyMzsKICAgcmV0dXJuIE5VTEw7CiAgIH0KICNl
bmRpZgogCitpZiAobnVtU3VicGF0dGVybnMpCisgICAgKm51bVN1YnBhdHRlcm5zID0gcmUtPnRv
cF9icmFja2V0OwogcmV0dXJuIChwY3JlICopcmU7CiB9CiAKK3ZvaWQganNSZWdFeHBGcmVlKEpT
UmVnRXhwKiByZSkKK3sKKyAgICBwY3JlX2ZyZWUocmUpOworfQorCiAvKiBFbmQgb2YgcGNyZV9j
b21waWxlLmMgKi8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMuYwkocmV2aXNpb24gMjc0MTEp
CisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jCSh3b3JraW5nIGNvcHkpCkBAIC02
MiwxMCArNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBlcHRyYmxvY2sgewogICBVU1BUUiBlcGJfc2F2
ZWRfZXB0cjsKIH0gZXB0cmJsb2NrOwogCi0vKiBGbGFnIGJpdHMgZm9yIHRoZSBtYXRjaCgpIGZ1
bmN0aW9uICovCi0KLSNkZWZpbmUgbWF0Y2hfY29uZGFzc2VydCAgIDB4MDEgICAgLyogQ2FsbGVk
IHRvIGNoZWNrIGEgY29uZGl0aW9uIGFzc2VydGlvbiAqLwotI2RlZmluZSBtYXRjaF9pc2dyb3Vw
ICAgICAgMHgwMiAgICAvKiBTZXQgaWYgc3RhcnQgb2YgYnJhY2tldGVkIGdyb3VwICovCisjZGVm
aW5lIG1hdGNoX2lzZ3JvdXAgICAgICBUUlVFICAgIC8qIFNldCBpZiBzdGFydCBvZiBicmFja2V0
ZWQgZ3JvdXAgKi8KIAogLyogTm9uLWVycm9yIHJldHVybnMgZnJvbSB0aGUgbWF0Y2goKSBmdW5j
dGlvbi4gRXJyb3IgcmV0dXJucyBhcmUgZXh0ZXJuYWxseQogZGVmaW5lZCBQQ1JFX0VSUk9SX3h4
eCBjb2Rlcywgd2hpY2ggYXJlIGFsbCBuZWdhdGl2ZS4gKi8KQEAgLTczLDEyICs3MCw2IEBAIGRl
ZmluZWQgUENSRV9FUlJPUl94eHggY29kZXMsIHdoaWNoIGFyZSAKICNkZWZpbmUgTUFUQ0hfTUFU
Q0ggICAgICAgIDEKICNkZWZpbmUgTUFUQ0hfTk9NQVRDSCAgICAgIDAKIAotLyogTWF4aW11bSBu
dW1iZXIgb2YgaW50cyBvZiBvZmZzZXQgdG8gc2F2ZSBvbiB0aGUgc3RhY2sgZm9yIHJlY3Vyc2l2
ZSBjYWxscy4KLUlmIHRoZSBvZmZzZXQgdmVjdG9yIGlzIGJpZ2dlciwgbWFsbG9jIGlzIHVzZWQu
IFRoaXMgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMywKLWJlY2F1c2UgdGhlIG9mZnNldCB2ZWN0
b3IgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgMyBsb25nLiAqLwotCi0jZGVmaW5lIFJFQ19TVEFD
S19TQVZFX01BWCAzMAotCiAvKiBNaW4gYW5kIG1heCB2YWx1ZXMgZm9yIHRoZSBjb21tb24gcmVw
ZWF0czsgZm9yIHRoZSBtYXhpbWEsIDAgPT4gaW5maW5pdHkgKi8KIAogc3RhdGljIGNvbnN0IGNo
YXIgcmVwX21pbltdID0geyAwLCAwLCAxLCAxLCAwLCAwIH07CkBAIC0xMTAsMTIgKzEwMSw4IEBA
IGludCBjOwogaWYgKGlzX3N1YmplY3QgJiYgbGVuZ3RoID4gbWQtPmVuZF9zdWJqZWN0IC0gcCkg
bGVuZ3RoID0gbWQtPmVuZF9zdWJqZWN0IC0gcDsKIHdoaWxlIChsZW5ndGgtLSA+IDApCiAgIGlm
IChpc3ByaW50KGMgPSAqKHArKykpKSBwcmludGYoIiVjIiwgYyk7Ci0jaWYgUENSRV9VVEYxNgog
ICBlbHNlIGlmIChjIDwgMjU2KSBwcmludGYoIlxceCUwMngiLCBjKTsKICAgZWxzZSBwcmludGYo
IlxceHsleH0iLCBjKTsKLSNlbHNlCi0gIGVsc2UgcHJpbnRmKCJcXHglMDJ4IiwgYyk7Ci0jZW5k
aWYKIH0KICNlbmRpZgogCkBAIC0xMzMsMTQgKzEyMCwxMiBAQCBBcmd1bWVudHM6CiAgIGVwdHIg
ICAgICAgIHBvaW50cyBpbnRvIHRoZSBzdWJqZWN0CiAgIGxlbmd0aCAgICAgIGxlbmd0aCB0byBi
ZSBtYXRjaGVkCiAgIG1kICAgICAgICAgIHBvaW50cyB0byBtYXRjaCBkYXRhIGJsb2NrCi0gIGlt
cyAgICAgICAgIHRoZSBpbXMgZmxhZ3MKIAogUmV0dXJuczogICAgICBUUlVFIGlmIG1hdGNoZWQK
ICovCiAKIHN0YXRpYyBCT09MCi1tYXRjaF9yZWYoaW50IG9mZnNldCwgcmVnaXN0ZXIgVVNQVFIg
ZXB0ciwgaW50IGxlbmd0aCwgbWF0Y2hfZGF0YSAqbWQsCi0gIHVuc2lnbmVkIGxvbmcgaW50IGlt
cykKK21hdGNoX3JlZihpbnQgb2Zmc2V0LCByZWdpc3RlciBVU1BUUiBlcHRyLCBpbnQgbGVuZ3Ro
LCBtYXRjaF9kYXRhICptZCkKIHsKIFVTUFRSIHAgPSBtZC0+c3RhcnRfc3ViamVjdCArIG1kLT5v
ZmZzZXRfdmVjdG9yW29mZnNldF07CiAKQEAgLTE2MywxMCArMTQ4LDE1IEBAIGlmIChsZW5ndGgg
PiBtZC0+ZW5kX3N1YmplY3QgLSBlcHRyKSByZXQKIAogLyogU2VwYXJhdGUgdGhlIGNhc2VsZXNz
cyBjYXNlIGZvciBzcGVlZCAqLwogCi1pZiAoKGltcyAmIFBDUkVfQ0FTRUxFU1MpICE9IDApCitp
ZiAobWQtPmNhc2VsZXNzKQogICB7CiAgIHdoaWxlIChsZW5ndGgtLSA+IDApCi0gICAgaWYgKG1k
LT5sY2NbKnArK10gIT0gbWQtPmxjY1sqZXB0cisrXSkgcmV0dXJuIEZBTFNFOworICAgIHsKKyAg
ICBwY3JlX3VjaGFyIGMgPSAqcCsrOworICAgIGludCBvdGhlcmNhc2UgPSBfcGNyZV91Y3Bfb3Ro
ZXJjYXNlKGMpOworICAgIHBjcmVfdWNoYXIgZCA9ICplcHRyKys7CisgICAgaWYgKGMgIT0gZCAm
JiBvdGhlcmNhc2UgIT0gZCkgcmV0dXJuIEZBTFNFOworICAgIH0KICAgfQogZWxzZQogICB7IHdo
aWxlIChsZW5ndGgtLSA+IDApIGlmICgqcCsrICE9ICplcHRyKyspIHJldHVybiBGQUxTRTsgfQpA
QCAtMjA0LDM1ICsxOTQsNiBAQCBhbHdheXMgdXNlZCB0by4KIC8qIFRoZXNlIHZlcnNpb25zIG9m
IHRoZSBtYWNyb3MgdXNlIHRoZSBzdGFjaywgYXMgbm9ybWFsLiBUaGVyZSBhcmUgZGVidWdnaW5n
CiB2ZXJzaW9ucyBhbmQgcHJvZHVjdGlvbiB2ZXJzaW9ucy4gKi8KIAotI2lmbmRlZiBOT19SRUNV
UlNFCi0jZGVmaW5lIFJFR0lTVEVSIHJlZ2lzdGVyCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgUk1B
VENIKHJ4LHJhLHJiLHJjLHJkLHJlLHJmLHJnKSBcCi0gIHsgXAotICBwcmludGYoIm1hdGNoKCkg
Y2FsbGVkIGluIGxpbmUgJWRcbiIsIF9fTElORV9fKTsgXAotICByeCA9IG1hdGNoKHJhLHJiLHJj
LHJkLHJlLHJmLHJnLHJkZXB0aCsxKTsgXAotICBwcmludGYoInRvIGxpbmUgJWRcbiIsIF9fTElO
RV9fKTsgXAotICB9Ci0jZGVmaW5lIFJSRVRVUk4ocmEpIFwKLSAgeyBcCi0gIHByaW50ZigibWF0
Y2goKSByZXR1cm5lZCAlZCBmcm9tIGxpbmUgJWQgIiwgcmEsIF9fTElORV9fKTsgXAotICByZXR1
cm4gcmE7IFwKLSAgfQotI2Vsc2UKLSNkZWZpbmUgUk1BVENIKHJ4LHJhLHJiLHJjLHJkLHJlLHJm
LHJnKSBcCi0gIHJ4ID0gbWF0Y2gocmEscmIscmMscmQscmUscmYscmcscmRlcHRoKzEpCi0jZGVm
aW5lIFJSRVRVUk4ocmEpIHJldHVybiByYQotI2VuZGlmCi0KLSNlbHNlCi0KLQotLyogVGhlc2Ug
dmVyc2lvbnMgb2YgdGhlIG1hY3JvcyBtYW5hZ2UgYSBwcml2YXRlIHN0YWNrIG9uIHRoZSBoZWFw
LiBOb3RlCi10aGF0IHRoZSByZCBhcmd1bWVudCBvZiBSTUFUQ0ggaXNuJ3QgYWN0dWFsbHkgdXNl
ZC4gSXQncyB0aGUgbWQgYXJndW1lbnQgb2YKLW1hdGNoKCksIHdoaWNoIG5ldmVyIGNoYW5nZXMu
ICovCi0KLSNkZWZpbmUgUkVHSVNURVIKLQogI2lmbmRlZiBfX0dOVUNfXwogCiAvKiBVc2UgbnVt
YmVyZWQgbGFiZWxzIGFuZCBzd2l0Y2ggc3RhdGVtZW50IGF0IHRoZSBib3R0b20gb2YgdGhlIG1h
dGNoIGZ1bmN0aW9uLiAqLwpAQCAtMjU1LDIxICsyMTYsMjAgQEAgYSBiaXQgbW9yZSBjb2RlIGFu
ZCBub3RpY2UgaWYgd2UgdXNlIGNvbgogI2VuZGlmCiAKIAotI2RlZmluZSBSTUFUQ0gobnVtLHJ4
LHJhLHJiLHJjLHJkLHJlLHJmLHJnKVwKKyNkZWZpbmUgUk1BVENIKG51bSxyeCxyYixyZixyZylc
CiAgIHtcCiAgIGhlYXBmcmFtZSAqbmV3ZnJhbWU7XAogICBpZiAoZnJhbWUgPj0gc3RhY2tmcmFt
ZXMgJiYgZnJhbWUgKyAxIDwgc3RhY2tmcmFtZXNlbmQpXAogICAgIG5ld2ZyYW1lID0gZnJhbWUg
KyAxO1wKICAgZWxzZVwKLSAgICBuZXdmcmFtZSA9IChwY3JlX3N0YWNrX21hbGxvYykoc2l6ZW9m
KGhlYXBmcmFtZSkpO1wKKyAgICBuZXdmcmFtZSA9IChwY3JlX21hbGxvYykoc2l6ZW9mKGhlYXBm
cmFtZSkpO1wKICAgZnJhbWUtPlh3aGVyZSA9IFJNQVRDSF9XSEVSRShudW0pO1wKLSAgbmV3ZnJh
bWUtPlhlcHRyID0gcmE7XAorICBuZXdmcmFtZS0+WGVwdHIgPSBmcmFtZS0+WGVwdHI7XAogICBu
ZXdmcmFtZS0+WGVjb2RlID0gcmI7XAotICBuZXdmcmFtZS0+WG9mZnNldF90b3AgPSByYztcCi0g
IG5ld2ZyYW1lLT5YaW1zID0gcmU7XAorICBuZXdmcmFtZS0+WG9mZnNldF90b3AgPSBmcmFtZS0+
WG9mZnNldF90b3A7XAogICBuZXdmcmFtZS0+WGVwdHJiID0gcmY7XAotICBuZXdmcmFtZS0+WGZs
YWdzID0gcmc7XAotICBuZXdmcmFtZS0+WHJkZXB0aCA9IGZyYW1lLT5YcmRlcHRoICsgMTtcCisg
IGlzX2dyb3VwX3N0YXJ0ID0gcmc7XAorICArK3JkZXB0aDtcCiAgIG5ld2ZyYW1lLT5YcHJldmZy
YW1lID0gZnJhbWU7XAogICBmcmFtZSA9IG5ld2ZyYW1lO1wKICAgRFBSSU5URigoInJlc3RhcnRp
bmcgZnJvbSBsaW5lICVkXG4iLCBfX0xJTkVfXykpO1wKQEAgLTI3OCw2ICsyMzgsNyBAQCBSUkVU
VVJOXyMjbnVtOlwKICAgRFBSSU5URigoImRpZCBhIGdvdG8gYmFjayB0byBsaW5lICVkXG4iLCBf
X0xJTkVfXykpO1wKICAgZnJhbWUgPSBtZC0+dGhpc2ZyYW1lO1wKICAgcnggPSBmcmFtZS0+WHJl
c3VsdDtcCisgIC0tcmRlcHRoO1wKICAgfQogCiAjZGVmaW5lIFJSRVRVUk4ocmEpXApAQCAtMjg1
LDcgKzI0Niw3IEBAIFJSRVRVUk5fIyNudW06XAogICBoZWFwZnJhbWUgKm5ld2ZyYW1lID0gZnJh
bWU7XAogICBmcmFtZSA9IG5ld2ZyYW1lLT5YcHJldmZyYW1lO1wKICAgaWYgKCEobmV3ZnJhbWUg
Pj0gc3RhY2tmcmFtZXMgJiYgbmV3ZnJhbWUgPCBzdGFja2ZyYW1lc2VuZCkpXAotICAgIChwY3Jl
X3N0YWNrX2ZyZWUpKG5ld2ZyYW1lKTtcCisgICAgKHBjcmVfZnJlZSkobmV3ZnJhbWUpO1wKICAg
aWYgKGZyYW1lICE9IE5VTEwpXAogICAgIHtcCiAgICAgZnJhbWUtPlhyZXN1bHQgPSByYTtcCkBA
IC0zMDYsNDIgKzI2NywxOSBAQCB0eXBlZGVmIHN0cnVjdCBoZWFwZnJhbWUgewogICBjb25zdCBw
Y3JlX3VjaGFyICpYZXB0cjsKICAgY29uc3QgdXNjaGFyICpYZWNvZGU7CiAgIGludCBYb2Zmc2V0
X3RvcDsKLSAgbG9uZyBpbnQgWGltczsKICAgZXB0cmJsb2NrICpYZXB0cmI7Ci0gIGludCBYZmxh
Z3M7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IFhyZGVwdGg7CiAKICAgLyogRnVuY3Rpb24gbG9jYWwg
dmFyaWFibGVzICovCiAKLSAgY29uc3QgdXNjaGFyICpYY2FsbHBhdDsKLSAgY29uc3QgdXNjaGFy
ICpYY2hhcnB0cjsKICAgY29uc3QgdXNjaGFyICpYZGF0YTsKICAgY29uc3QgdXNjaGFyICpYbmV4
dDsKICAgY29uc3QgcGNyZV91Y2hhciAqWHBwOwogICBjb25zdCB1c2NoYXIgKlhwcmV2OwogICBj
b25zdCBwY3JlX3VjaGFyICpYc2F2ZWRfZXB0cjsKIAotICByZWN1cnNpb25faW5mbyBYbmV3X3Jl
Y3Vyc2l2ZTsKLQotICBCT09MIFhjdXJfaXNfd29yZDsKLSAgQk9PTCBYY29uZGl0aW9uOwogICBC
T09MIFhtaW5pbWl6ZTsKLSAgQk9PTCBYcHJldl9pc193b3JkOwotCi0gIHVuc2lnbmVkIGxvbmcg
aW50IFhvcmlnaW5hbF9pbXM7CiAKLSNpZmRlZiBTVVBQT1JUX1VDUAotI2lmICFKQVZBU0NSSVBU
Ci0gIGludCBYcHJvcF90eXBlOwotICBpbnQgWHByb3BfdmFsdWU7Ci0gIGludCBYcHJvcF9mYWls
X3Jlc3VsdDsKLSAgaW50IFhwcm9wX2NhdGVnb3J5OwotICBpbnQgWHByb3BfY2hhcnR5cGU7Ci0g
IGludCBYcHJvcF9zY3JpcHQ7Ci0gIGludCAqWHByb3BfdGVzdF92YXJpYWJsZTsKLSNlbmRpZgog
ICBpbnQgWHJlcGVhdF9vdGhlcmNhc2U7Ci0jZW5kaWYKIAogICBpbnQgWGN0eXBlOwogICBpbnQg
WGZjOwpAQCAtMzUyLDE1ICsyOTAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgaGVhcGZyYW1lIHsKICAg
aW50IFhudW1iZXI7CiAgIGludCBYb2Zmc2V0OwogICBpbnQgWG9wOwotICBpbnQgWHNhdmVfY2Fw
dHVyZV9sYXN0OwogICBpbnQgWHNhdmVfb2Zmc2V0MSwgWHNhdmVfb2Zmc2V0MiwgWHNhdmVfb2Zm
c2V0MzsKLSAgaW50IFhzdGFja3NhdmVbUkVDX1NUQUNLX1NBVkVfTUFYXTsKIAogICBlcHRyYmxv
Y2sgWG5ld3B0cmI7CiAKICAgLyogUGxhY2UgdG8gcGFzcyBiYWNrIHJlc3VsdCwgYW5kIHdoZXJl
IHRvIGp1bXAgYmFjayB0byAqLwogCi0gIGludCAgWHJlc3VsdDsKKyAgaW50IFhyZXN1bHQ7CiAj
aWZuZGVmIF9fR05VQ19fCiAgIGludCBYd2hlcmU7CiAjZWxzZQpAQCAtMzY5LDggKzMwNSw2IEBA
IHR5cGVkZWYgc3RydWN0IGhlYXBmcmFtZSB7CiAKIH0gaGVhcGZyYW1lOwogCi0jZW5kaWYKLQog
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOTgsMTMgKzMz
Miw2IEBAIEFyZ3VtZW50czoKICAgIGVjb2RlICAgICAgIHBvc2l0aW9uIGluIGNvZGUKICAgIG9m
ZnNldF90b3AgIGN1cnJlbnQgdG9wIHBvaW50ZXIKICAgIG1kICAgICAgICAgIHBvaW50ZXIgdG8g
InN0YXRpYyIgaW5mbyBmb3IgdGhlIG1hdGNoCi0gICBpbXMgICAgICAgICBjdXJyZW50IC9pLCAv
bSwgYW5kIC9zIG9wdGlvbnMKLSAgIGVwdHJiICAgICAgIHBvaW50ZXIgdG8gY2hhaW4gb2YgYmxv
Y2tzIGNvbnRhaW5pbmcgZXB0ciBhdCBzdGFydCBvZgotICAgICAgICAgICAgICAgICBicmFja2V0
cyAtIGZvciB0ZXN0aW5nIGZvciBlbXB0eSBtYXRjaGVzCi0gICBmbGFncyAgICAgICBjYW4gY29u
dGFpbgotICAgICAgICAgICAgICAgICBtYXRjaF9jb25kYXNzZXJ0IC0gdGhpcyBpcyBhbiBhc3Nl
cnRpb24gY29uZGl0aW9uCi0gICAgICAgICAgICAgICAgIG1hdGNoX2lzZ3JvdXAgLSB0aGlzIGlz
IHRoZSBzdGFydCBvZiBhIGJyYWNrZXRlZCBncm91cAotICAgcmRlcHRoICAgICAgdGhlIHJlY3Vy
c2lvbiBkZXB0aAogCiBSZXR1cm5zOiAgICAgICBNQVRDSF9NQVRDSCBpZiBtYXRjaGVkICAgICAg
ICAgICAgKSAgdGhlc2UgdmFsdWVzIGFyZSA+PSAwCiAgICAgICAgICAgICAgICBNQVRDSF9OT01B
VENIIGlmIGZhaWxlZCB0byBtYXRjaCAgKQpAQCAtNDEzLDkgKzM0MCw3IEBAIFJldHVybnM6ICAg
ICAgIE1BVENIX01BVENIIGlmIG1hdGNoZWQgICAKICovCiAKIHN0YXRpYyBpbnQKLW1hdGNoKFJF
R0lTVEVSIFVTUFRSIGVwdHIsIFJFR0lTVEVSIGNvbnN0IHVzY2hhciAqZWNvZGUsCi0gIGludCBv
ZmZzZXRfdG9wLCBtYXRjaF9kYXRhICptZCwgdW5zaWduZWQgbG9uZyBpbnQgaW1zLCBlcHRyYmxv
Y2sgKmVwdHJiLAotICBpbnQgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgaW50IHJkZXB0aCkKK21hdGNo
KFVTUFRSIGVwdHIsIGNvbnN0IHVzY2hhciAqZWNvZGUsIGludCBvZmZzZXRfdG9wLCBtYXRjaF9k
YXRhICptZCkKIHsKIC8qIFRoZXNlIHZhcmlhYmxlcyBkbyBub3QgbmVlZCB0byBiZSBwcmVzZXJ2
ZWQgb3ZlciByZWN1cnNpb24gaW4gdGhpcyBmdW5jdGlvbiwKIHNvIHRoZXkgY2FuIGJlIG9yZGlu
YXJ5IHZhcmlhYmxlcyBpbiBhbGwgY2FzZXMuIE1hcmsgdGhlbSB3aXRoICJyZWdpc3RlciIKQEAg
LTQyNCwxOSArMzQ5LDE3IEBAIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhIGxvdCBpbiBsb29wcy4g
Ki8KIHJlZ2lzdGVyIGludCAgcnJjOyAgICAvKiBSZXR1cm5zIGZyb20gcmVjdXJzaXZlIGNhbGxz
ICovCiByZWdpc3RlciBpbnQgIGk7ICAgICAgLyogVXNlZCBmb3IgbG9vcHMgbm90IGludm9sdmlu
ZyBjYWxscyB0byBSTUFUQ0goKSAqLwogcmVnaXN0ZXIgaW50ICBjOyAgICAgIC8qIENoYXJhY3Rl
ciB2YWx1ZXMgbm90IGtlcHQgb3ZlciBSTUFUQ0goKSBjYWxscyAqLwotI2lmIFBDUkVfVVRGMTYK
LSNkZWZpbmUgdXRmOCAxCi0jZWxzZQotcmVnaXN0ZXIgQk9PTCB1dGY4OyAgIC8qIExvY2FsIGNv
cHkgb2YgVVRGLTggZmxhZyBmb3Igc3BlZWQgKi8KLSNlbmRpZgordW5zaWduZWQgcmRlcHRoID0g
MDsKKworQk9PTCBjdXJfaXNfd29yZDsKK0JPT0wgcHJldl9pc193b3JkOworQk9PTCBpc19ncm91
cF9zdGFydCA9IFRSVUU7CiAKIC8qIFdoZW4gcmVjdXJzaW9uIGlzIG5vdCBiZWluZyB1c2VkLCBh
bGwgImxvY2FsIiB2YXJpYWJsZXMgdGhhdCBoYXZlIHRvIGJlCiBwcmVzZXJ2ZWQgb3ZlciBjYWxs
cyB0byBSTUFUQ0goKSBhcmUgcGFydCBvZiBhICJmcmFtZSIgd2hpY2ggaXMgb2J0YWluZWQgZnJv
bQogaGVhcCBzdG9yYWdlLiBTZXQgdXAgdGhlIHRvcC1sZXZlbCBmcmFtZSBoZXJlOyBvdGhlcnMg
YXJlIG9idGFpbmVkIGZyb20gdGhlCiBoZWFwIHdoZW5ldmVyIFJNQVRDSCgpIGRvZXMgYSAicmVj
dXJzaW9uIi4gU2VlIHRoZSBtYWNybyBkZWZpbml0aW9ucyBhYm92ZS4gKi8KIAotI2lmZGVmIE5P
X1JFQ1VSU0UKLQogLyogVGhlIHZhbHVlIDE2IGhlcmUgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgbW9z
dCByZWd1bGFyIGV4cHJlc3Npb25zIGRvbid0IHJlcXVpcmUKIGFueSBjYWxscyB0byBwY3JlX3N0
YWNrX21hbGxvYywgeWV0IHRoZSBhbW91bnQgb2Ygc3RhY2sgdXNlZCBmb3IgdGhlIGFycmF5IGlz
CiBtb2Rlc3QgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgcnVuIG91dCBvZiBzdGFjay4gKi8KQEAgLTQ1
MSwxMCArMzc0LDcgQEAgZnJhbWUtPlhwcmV2ZnJhbWUgPSBOVUxMOyAgICAgICAgICAgIC8qIAog
ZnJhbWUtPlhlcHRyID0gZXB0cjsKIGZyYW1lLT5YZWNvZGUgPSBlY29kZTsKIGZyYW1lLT5Yb2Zm
c2V0X3RvcCA9IG9mZnNldF90b3A7Ci1mcmFtZS0+WGltcyA9IGltczsKLWZyYW1lLT5YZXB0cmIg
PSBlcHRyYjsKLWZyYW1lLT5YZmxhZ3MgPSBmbGFnczsKLWZyYW1lLT5YcmRlcHRoID0gcmRlcHRo
OworZnJhbWUtPlhlcHRyYiA9IE5VTEw7CiAKIC8qIFRoaXMgaXMgd2hlcmUgY29udHJvbCBqdW1w
cyBiYWNrIHRvIHRvIGVmZmVjdCAicmVjdXJzaW9uIiAqLwogCkBAIC00NjUsMTYgKzM4NSwxMSBA
QCBIRUFQX1JFQ1VSU0U6CiAjZGVmaW5lIGVwdHIgICAgICAgICAgICAgICBmcmFtZS0+WGVwdHIK
ICNkZWZpbmUgZWNvZGUgICAgICAgICAgICAgIGZyYW1lLT5YZWNvZGUKICNkZWZpbmUgb2Zmc2V0
X3RvcCAgICAgICAgIGZyYW1lLT5Yb2Zmc2V0X3RvcAotI2RlZmluZSBpbXMgICAgICAgICAgICAg
ICAgZnJhbWUtPlhpbXMKICNkZWZpbmUgZXB0cmIgICAgICAgICAgICAgIGZyYW1lLT5YZXB0cmIK
LSNkZWZpbmUgZmxhZ3MgICAgICAgICAgICAgIGZyYW1lLT5YZmxhZ3MKLSNkZWZpbmUgcmRlcHRo
ICAgICAgICAgICAgIGZyYW1lLT5YcmRlcHRoCiAKIC8qIERpdHRvIGZvciB0aGUgbG9jYWwgdmFy
aWFibGVzICovCiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKICNkZWZpbmUgY2hhcnB0ciAgICAgICAg
ICAgIGZyYW1lLT5YY2hhcnB0cgotI2VuZGlmCiAjZGVmaW5lIGNhbGxwYXQgICAgICAgICAgICBm
cmFtZS0+WGNhbGxwYXQKICNkZWZpbmUgZGF0YSAgICAgICAgICAgICAgIGZyYW1lLT5YZGF0YQog
I2RlZmluZSBuZXh0ICAgICAgICAgICAgICAgZnJhbWUtPlhuZXh0CkBAIC00ODIsMjcgKzM5Nyw5
IEBAIEhFQVBfUkVDVVJTRToKICNkZWZpbmUgcHJldiAgICAgICAgICAgICAgIGZyYW1lLT5YcHJl
dgogI2RlZmluZSBzYXZlZF9lcHRyICAgICAgICAgZnJhbWUtPlhzYXZlZF9lcHRyCiAKLSNkZWZp
bmUgbmV3X3JlY3Vyc2l2ZSAgICAgIGZyYW1lLT5YbmV3X3JlY3Vyc2l2ZQotCi0jZGVmaW5lIGN1
cl9pc193b3JkICAgICAgICBmcmFtZS0+WGN1cl9pc193b3JkCi0jZGVmaW5lIGNvbmRpdGlvbiAg
ICAgICAgICBmcmFtZS0+WGNvbmRpdGlvbgogI2RlZmluZSBtaW5pbWl6ZSAgICAgICAgICAgZnJh
bWUtPlhtaW5pbWl6ZQotI2RlZmluZSBwcmV2X2lzX3dvcmQgICAgICAgZnJhbWUtPlhwcmV2X2lz
X3dvcmQKLQotI2RlZmluZSBvcmlnaW5hbF9pbXMgICAgICAgZnJhbWUtPlhvcmlnaW5hbF9pbXMK
IAotI2lmZGVmIFNVUFBPUlRfVUNQCi0jaWYgIUpBVkFTQ1JJUFQKLSNkZWZpbmUgcHJvcF90eXBl
ICAgICAgICAgIGZyYW1lLT5YcHJvcF90eXBlCi0jZGVmaW5lIHByb3BfdmFsdWUgICAgICAgICBm
cmFtZS0+WHByb3BfdmFsdWUKLSNkZWZpbmUgcHJvcF9mYWlsX3Jlc3VsdCAgIGZyYW1lLT5YcHJv
cF9mYWlsX3Jlc3VsdAotI2RlZmluZSBwcm9wX2NhdGVnb3J5ICAgICAgZnJhbWUtPlhwcm9wX2Nh
dGVnb3J5Ci0jZGVmaW5lIHByb3BfY2hhcnR5cGUgICAgICBmcmFtZS0+WHByb3BfY2hhcnR5cGUK
LSNkZWZpbmUgcHJvcF9zY3JpcHQgICAgICAgIGZyYW1lLT5YcHJvcF9zY3JpcHQKLSNkZWZpbmUg
cHJvcF90ZXN0X3ZhcmlhYmxlIGZyYW1lLT5YcHJvcF90ZXN0X3ZhcmlhYmxlCi0jZW5kaWYKICNk
ZWZpbmUgcmVwZWF0X290aGVyY2FzZSAgIGZyYW1lLT5YcmVwZWF0X290aGVyY2FzZQotI2VuZGlm
CiAKICNkZWZpbmUgY3R5cGUgICAgICAgICAgICAgIGZyYW1lLT5YY3R5cGUKICNkZWZpbmUgZmMg
ICAgICAgICAgICAgICAgIGZyYW1lLT5YZmMKQEAgLTUxNyw3NyArNDE0LDkgQEAgSEVBUF9SRUNV
UlNFOgogI2RlZmluZSBzYXZlX29mZnNldDEgICAgICAgZnJhbWUtPlhzYXZlX29mZnNldDEKICNk
ZWZpbmUgc2F2ZV9vZmZzZXQyICAgICAgIGZyYW1lLT5Yc2F2ZV9vZmZzZXQyCiAjZGVmaW5lIHNh
dmVfb2Zmc2V0MyAgICAgICBmcmFtZS0+WHNhdmVfb2Zmc2V0MwotI2RlZmluZSBzdGFja3NhdmUg
ICAgICAgICAgZnJhbWUtPlhzdGFja3NhdmUKIAogI2RlZmluZSBuZXdwdHJiICAgICAgICAgICAg
ZnJhbWUtPlhuZXdwdHJiCiAKLS8qIFdoZW4gcmVjdXJzaW9uIGlzIGJlaW5nIHVzZWQsIGxvY2Fs
IHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQKLWdldCBwcmVzZXJ2ZWQg
ZHVyaW5nIHJlY3Vyc2lvbiBpbiB0aGUgbm9ybWFsIHdheS4gSW4gdGhpcyBlbnZpcm9ubWVudCwg
ZmkgYW5kCi1pLCBhbmQgZmMgYW5kIGMsIGNhbiBiZSB0aGUgc2FtZSB2YXJpYWJsZXMuICovCi0K
LSNlbHNlCi0jZGVmaW5lIGZpIGkKLSNkZWZpbmUgZmMgYwotCi0KLSNpZiAhUENSRV9VVEYxNgot
I2lmZGVmIFNVUFBPUlRfVVRGOCAgICAgICAgICAgICAgICAvKiBNYW55IG9mIHRoZXNlIHZhcmlh
YmxlcyBhcmUgdXNlZCBvbmx5ICAqLwotY29uc3QgdXNjaGFyICpjaGFycHRyOyAgICAgICAgICAg
ICAvKiBpbiBzbWFsbCBibG9ja3Mgb2YgdGhlIGNvZGUuIE15IG5vcm1hbCAqLwotI2VuZGlmICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHlsZSBvZiBjb2Rpbmcgd291bGQgaGF2ZSBk
ZWNsYXJlZCAgICAqLwotI2VuZGlmCi1jb25zdCB1c2NoYXIgKmNhbGxwYXQ7ICAgICAgICAgICAg
IC8qIHRoZW0gd2l0aGluIGVhY2ggb2YgdGhvc2UgYmxvY2tzLiAgICAgICovCi1jb25zdCB1c2No
YXIgKmRhdGE7ICAgICAgICAgICAgICAgIC8qIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFjY29tbW9k
YXRlIHRoZSAgICovCi1jb25zdCB1c2NoYXIgKm5leHQ7ICAgICAgICAgICAgICAgIC8qIHZlcnNp
b24gb2YgdGhpcyBjb2RlIHRoYXQgdXNlcyBhbiAgICAgICovCi1VU1BUUiAgICAgICAgIHBwOyAg
ICAgICAgICAgICAgICAgIC8qIGV4dGVybmFsICJzdGFjayIgaW1wbGVtZW50ZWQgb24gdGhlICAg
ICovCi1jb25zdCB1c2NoYXIgKnByZXY7ICAgICAgICAgICAgICAgIC8qIGhlYXAsIGl0IGlzIGVh
c2llciB0byBkZWNsYXJlIHRoZW0gYWxsICovCi1VU1BUUiAgICAgICAgIHNhdmVkX2VwdHI7ICAg
ICAgICAgIC8qIGhlcmUsIHNvIHRoZSBkZWNsYXJhdGlvbnMgY2FuIGJlIGN1dCAgICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dCBpbiBhIGJsb2NrLiBUaGUgb25s
eSBkZWNsYXJhdGlvbnMgICovCi1yZWN1cnNpb25faW5mbyBuZXdfcmVjdXJzaXZlOyAgICAgIC8q
IHdpdGhpbiBibG9ja3MgYmVsb3cgYXJlIGZvciB2YXJpYWJsZXMgICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoYXQgZG8gbm90IGhhdmUgdG8gYmUgcHJlc2VydmVk
IG92ZXIgICovCi1CT09MIGN1cl9pc193b3JkOyAgICAgICAgICAgICAgICAgIC8qIGEgcmVjdXJz
aXZlIGNhbGwgdG8gUk1BVENIKCkuICAgICAgICAgICovCi1CT09MIGNvbmRpdGlvbjsKLUJPT0wg
bWluaW1pemU7Ci1CT09MIHByZXZfaXNfd29yZDsKLQotdW5zaWduZWQgbG9uZyBpbnQgb3JpZ2lu
YWxfaW1zOwotCi0jaWYgIUpBVkFTQ1JJUFQKLSNpZmRlZiBTVVBQT1JUX1VDUAotaW50IHByb3Bf
dHlwZTsKLWludCBwcm9wX3ZhbHVlOwotaW50IHByb3BfZmFpbF9yZXN1bHQ7Ci1pbnQgcHJvcF9j
YXRlZ29yeTsKLWludCBwcm9wX2NoYXJ0eXBlOwotaW50IHByb3Bfc2NyaXB0OwotaW50ICpwcm9w
X3Rlc3RfdmFyaWFibGU7Ci0jZW5kaWYKLSNlbmRpZgotCi1pbnQgY3R5cGU7Ci1pbnQgbGVuZ3Ro
OwotaW50IG1heDsKLWludCBtaW47Ci1pbnQgbnVtYmVyOwotaW50IG9mZnNldDsKLWludCBvcDsK
LWludCBzYXZlX2NhcHR1cmVfbGFzdDsKLWludCBzYXZlX29mZnNldDEsIHNhdmVfb2Zmc2V0Miwg
c2F2ZV9vZmZzZXQzOwotaW50IHN0YWNrc2F2ZVtSRUNfU1RBQ0tfU0FWRV9NQVhdOwotCi1lcHRy
YmxvY2sgbmV3cHRyYjsKLSNlbmRpZgotCi0vKiBUaGVzZSBzdGF0ZW1lbnRzIGFyZSBoZXJlIHRv
IHN0b3AgdGhlIGNvbXBpbGVyIGNvbXBsYWluaW5nIGFib3V0IHVuaXRpYWxpemVkCi12YXJpYWJs
ZXMuICovCi0KLSNpZiAhSkFWQVNDUklQVAotI2lmZGVmIFNVUFBPUlRfVUNQCi1wcm9wX3ZhbHVl
ID0gMDsKLXByb3BfZmFpbF9yZXN1bHQgPSAwOwotcHJvcF90ZXN0X3ZhcmlhYmxlID0gTlVMTDsK
LSNlbmRpZgotI2VuZGlmCi0KIC8qIE9LLCBub3cgd2UgY2FuIGdldCBvbiB3aXRoIHRoZSByZWFs
IGNvZGUgb2YgdGhlIGZ1bmN0aW9uLiBSZWN1cnNpdmUgY2FsbHMKIGFyZSBzcGVjaWZpZWQgYnkg
dGhlIG1hY3JvIFJNQVRDSCBhbmQgUlJFVFVSTiBpcyB1c2VkIHRvIHJldHVybi4gV2hlbgogTk9f
UkVDVVJTRSBpcyAqbm90KiBkZWZpbmVkLCB0aGVzZSBqdXN0IHR1cm4gaW50byBhIHJlY3Vyc2l2
ZSBjYWxsIHRvIG1hdGNoKCkKQEAgLTU5OSwyMCArNDI4LDE1IEBAIGhvd2V2ZXIsIGltcGFjdCBw
ZXJmb3JtYW5jZSB3aGVuIHRydWUgcmUKIC8qIEZpcnN0IGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBj
YWxsZWQgbWF0Y2goKSB0b28gbWFueSB0aW1lcywgb3IgdGhhdCB3ZQogaGF2ZW4ndCBleGNlZWRl
ZCB0aGUgcmVjdXJzaXZlIGNhbGwgbGltaXQuICovCiAKLWlmIChtZC0+bWF0Y2hfY2FsbF9jb3Vu
dCsrID49IG1kLT5tYXRjaF9saW1pdCkgUlJFVFVSTihQQ1JFX0VSUk9SX01BVENITElNSVQpOwot
aWYgKHJkZXB0aCA+PSBtZC0+bWF0Y2hfbGltaXRfcmVjdXJzaW9uKSBSUkVUVVJOKFBDUkVfRVJS
T1JfUkVDVVJTSU9OTElNSVQpOwotCi1vcmlnaW5hbF9pbXMgPSBpbXM7ICAgIC8qIFNhdmUgZm9y
IHJlc2V0dGluZyBvbiAnKScgKi8KLSNpZiAhUENSRV9VVEYxNgotdXRmOCA9IG1kLT51dGY4OyAg
ICAgICAvKiBMb2NhbCBjb3B5IG9mIHRoZSBmbGFnICovCi0jZW5kaWYKK2lmIChtZC0+bWF0Y2hf
Y2FsbF9jb3VudCsrID49IE1BVENIX0xJTUlUKSBSUkVUVVJOKEpTX1JFR0VYUF9FUlJPUl9NQVRD
SExJTUlUKTsKK2lmIChyZGVwdGggPj0gTUFUQ0hfTElNSVRfUkVDVVJTSU9OKSBSUkVUVVJOKEpT
X1JFR0VYUF9FUlJPUl9SRUNVUlNJT05MSU1JVCk7CiAKIC8qIEF0IHRoZSBzdGFydCBvZiBhIGJy
YWNrZXRlZCBncm91cCwgYWRkIHRoZSBjdXJyZW50IHN1YmplY3QgcG9pbnRlciB0byB0aGUKIHN0
YWNrIG9mIHN1Y2ggcG9pbnRlcnMsIHRvIGJlIHJlLWluc3RhdGVkIGF0IHRoZSBlbmQgb2YgdGhl
IGdyb3VwIHdoZW4gd2UgaGl0CiB0aGUgY2xvc2luZyBrZXQuIFdoZW4gbWF0Y2goKSBpcyBjYWxs
ZWQgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcywgd2UgZG9uJ3QgYWRkIHRvCiB0aGlzIHN0YWNrLiAq
LwogCi1pZiAoKGZsYWdzICYgbWF0Y2hfaXNncm91cCkgIT0gMCkKK2lmIChpc19ncm91cF9zdGFy
dCkKICAgewogICBuZXdwdHJiLmVwYl9wcmV2ID0gZXB0cmI7CiAgIG5ld3B0cmIuZXBiX3NhdmVk
X2VwdHIgPSBlcHRyOwpAQCAtNjI2LDE0ICs0NTAsNiBAQCBmb3IgKDs7KQogICBvcCA9ICplY29k
ZTsKICAgbWluaW1pemUgPSBGQUxTRTsKIAotICAvKiBGb3IgcGFydGlhbCBtYXRjaGluZywgcmVt
ZW1iZXIgaWYgd2UgZXZlciBoaXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBhZnRlcgotICBtYXRj
aGluZyBhdCBsZWFzdCBvbmUgc3ViamVjdCBjaGFyYWN0ZXIuICovCi0KLSAgaWYgKG1kLT5wYXJ0
aWFsICYmCi0gICAgICBlcHRyID49IG1kLT5lbmRfc3ViamVjdCAmJgotICAgICAgZXB0ciA+IG1k
LT5zdGFydF9tYXRjaCkKLSAgICBtZC0+aGl0ZW5kID0gVFJVRTsKLQogICAvKiBPcGVuaW5nIGNh
cHR1cmluZyBicmFja2V0LiBJZiB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgb2Zmc2V0IHZlY3Rvciwg
c2F2ZQogICB0aGUgY3VycmVudCBzdWJqZWN0IHBvc2l0aW9uIGluIHRoZSB3b3JraW5nIHNsb3Qg
YXQgdGhlIHRvcCBvZiB0aGUgdmVjdG9yLiBXZQogICBtdXN0bid0IGNoYW5nZSB0aGUgY3VycmVu
dCB2YWx1ZXMgb2YgdGhlIGRhdGEgc2xvdCwgYmVjYXVzZSB0aGV5IG1heSBiZSBzZXQKQEAgLTY3
MCwxNyArNDg2LDE0IEBAIGZvciAoOzspCiAgICAgICBzYXZlX29mZnNldDEgPSBtZC0+b2Zmc2V0
X3ZlY3RvcltvZmZzZXRdOwogICAgICAgc2F2ZV9vZmZzZXQyID0gbWQtPm9mZnNldF92ZWN0b3Jb
b2Zmc2V0KzFdOwogICAgICAgc2F2ZV9vZmZzZXQzID0gbWQtPm9mZnNldF92ZWN0b3JbbWQtPm9m
ZnNldF9lbmQgLSBudW1iZXJdOwotICAgICAgc2F2ZV9jYXB0dXJlX2xhc3QgPSBtZC0+Y2FwdHVy
ZV9sYXN0OwogCiAgICAgICBEUFJJTlRGKCgic2F2aW5nICVkICVkICVkXG4iLCBzYXZlX29mZnNl
dDEsIHNhdmVfb2Zmc2V0Miwgc2F2ZV9vZmZzZXQzKSk7CiAgICAgICBtZC0+b2Zmc2V0X3ZlY3Rv
clttZC0+b2Zmc2V0X2VuZCAtIG51bWJlcl0gPSBlcHRyIC0gbWQtPnN0YXJ0X3N1YmplY3Q7CiAK
ICAgICAgIGRvCiAgICAgICAgIHsKLSAgICAgICAgUk1BVENIKDEsIHJyYywgZXB0ciwgZWNvZGUg
KyAxICsgTElOS19TSVpFLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwKLSAgICAgICAgICBt
YXRjaF9pc2dyb3VwKTsKKyAgICAgICAgUk1BVENIKDEsIHJyYywgZWNvZGUgKyAxICsgTElOS19T
SVpFLCBlcHRyYiwgbWF0Y2hfaXNncm91cCk7CiAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9N
QVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICBtZC0+Y2FwdHVyZV9sYXN0ID0gc2F2ZV9jYXB0
dXJlX2xhc3Q7CiAgICAgICAgIGVjb2RlICs9IEdFVChlY29kZSwgMSk7CiAgICAgICAgIH0KICAg
ICAgIHdoaWxlICgqZWNvZGUgPT0gT1BfQUxUKTsKQEAgLTcwNyw4ICs1MjAsNyBAQCBmb3IgKDs7
KQogICAgIERQUklOVEYoKCJzdGFydCBicmFja2V0IDBcbiIpKTsKICAgICBkbwogICAgICAgewot
ICAgICAgUk1BVENIKDIsIHJyYywgZXB0ciwgZWNvZGUgKyAxICsgTElOS19TSVpFLCBvZmZzZXRf
dG9wLCBtZCwgaW1zLCBlcHRyYiwKLSAgICAgICAgbWF0Y2hfaXNncm91cCk7CisgICAgICBSTUFU
Q0goMiwgcnJjLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsK
ICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgZWNv
ZGUgKz0gR0VUKGVjb2RlLCAxKTsKICAgICAgIH0KQEAgLTcxNiw4OCArNTI4LDEzIEBAIGZvciAo
OzspCiAgICAgRFBSSU5URigoImJyYWNrZXQgMCBmYWlsZWRcbiIpKTsKICAgICBSUkVUVVJOKE1B
VENIX05PTUFUQ0gpOwogCi0gICAgLyogQ29uZGl0aW9uYWwgZ3JvdXA6IGNvbXBpbGF0aW9uIGNo
ZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuCi0gICAgdHdvIGJyYW5jaGVzLiBJZiB0
aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBza2lwcGluZyB0aGUgZmlyc3QgYnJhbmNoIHRha2VzIHVz
Ci0gICAgcGFzdCB0aGUgZW5kIGlmIHRoZXJlIGlzIG9ubHkgb25lIGJyYW5jaCwgYnV0IHRoYXQn
cyBPSyBiZWNhdXNlIHRoYXQgaXMKLSAgICBleGFjdGx5IHdoYXQgZ29pbmcgdG8gdGhlIGtldCB3
b3VsZCBkby4gKi8KLQotICAgIGNhc2UgT1BfQ09ORDoKLSAgICBpZiAoZWNvZGVbTElOS19TSVpF
KzFdID09IE9QX0NSRUYpIC8qIENvbmRpdGlvbiBleHRyYWN0IG9yIHJlY3Vyc2UgdGVzdCAqLwot
ICAgICAgewotICAgICAgb2Zmc2V0ID0gR0VUMihlY29kZSwgTElOS19TSVpFKzIpIDw8IDE7ICAv
KiBEb3VibGVkIHJlZiBudW1iZXIgKi8KLSAgICAgIGNvbmRpdGlvbiA9IChvZmZzZXQgPT0gQ1JF
Rl9SRUNVUlNFICogMik/Ci0gICAgICAgIChtZC0+cmVjdXJzaXZlICE9IE5VTEwpIDoKLSAgICAg
ICAgKG9mZnNldCA8IG9mZnNldF90b3AgJiYgbWQtPm9mZnNldF92ZWN0b3Jbb2Zmc2V0XSA+PSAw
KTsKLSAgICAgIFJNQVRDSCgzLCBycmMsIGVwdHIsIGVjb2RlICsgKGNvbmRpdGlvbj8KLSAgICAg
ICAgKExJTktfU0laRSArIDQpIDogKExJTktfU0laRSArIDEgKyBHRVQoZWNvZGUsIDEpKSksCi0g
ICAgICAgIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsKLSAgICAg
IFJSRVRVUk4ocnJjKTsKLSAgICAgIH0KLQotICAgIC8qIFRoZSBjb25kaXRpb24gaXMgYW4gYXNz
ZXJ0aW9uLiBDYWxsIG1hdGNoKCkgdG8gZXZhbHVhdGUgaXQgLSBzZXR0aW5nCi0gICAgdGhlIGZp
bmFsIGFyZ3VtZW50IFRSVUUgY2F1c2VzIGl0IHRvIHN0b3AgYXQgdGhlIGVuZCBvZiBhbiBhc3Nl
cnRpb24uICovCi0KLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICBSTUFUQ0goNCwgcnJjLCBlcHRy
LCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1kLCBpbXMsIE5VTEwsCi0gICAg
ICAgICAgbWF0Y2hfY29uZGFzc2VydCB8IG1hdGNoX2lzZ3JvdXApOwotICAgICAgaWYgKHJyYyA9
PSBNQVRDSF9NQVRDSCkKLSAgICAgICAgewotICAgICAgICBlY29kZSArPSAxICsgTElOS19TSVpF
ICsgR0VUKGVjb2RlLCBMSU5LX1NJWkUrMik7Ci0gICAgICAgIHdoaWxlICgqZWNvZGUgPT0gT1Bf
QUxUKSBlY29kZSArPSBHRVQoZWNvZGUsIDEpOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmIChy
cmMgIT0gTUFUQ0hfTk9NQVRDSCkKLSAgICAgICAgewotICAgICAgICBSUkVUVVJOKHJyYyk7ICAg
ICAgICAgLyogTmVlZCBicmFjZXMgYmVjYXVzZSBvZiBmb2xsb3dpbmcgZWxzZSAqLwotICAgICAg
ICB9Ci0gICAgICBlbHNlIGVjb2RlICs9IEdFVChlY29kZSwgMSk7Ci0gICAgICBSTUFUQ0goNSwg
cnJjLCBlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVw
dHJiLAotICAgICAgICBtYXRjaF9pc2dyb3VwKTsKLSAgICAgIFJSRVRVUk4ocnJjKTsKLSAgICAg
IH0KLSAgICAvKiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLwotCi0gICAgLyogU2tpcCBv
dmVyIGNvbmRpdGlvbmFsIHJlZmVyZW5jZSBvciBsYXJnZSBleHRyYWN0aW9uIG51bWJlciBkYXRh
IGlmCi0gICAgZW5jb3VudGVyZWQuICovCi0KLSAgICBjYXNlIE9QX0NSRUY6Ci0gICAgY2FzZSBP
UF9CUkFOVU1CRVI6Ci0gICAgZWNvZGUgKz0gMzsKLSAgICBicmVhazsKLQotICAgIC8qIEVuZCBv
ZiB0aGUgcGF0dGVybi4gSWYgd2UgYXJlIGluIGEgcmVjdXJzaW9uLCB3ZSBzaG91bGQgcmVzdG9y
ZSB0aGUKLSAgICBvZmZzZXRzIGFwcHJvcHJpYXRlbHkgYW5kIGNvbnRpbnVlIGZyb20gYWZ0ZXIg
dGhlIGNhbGwuICovCisgICAgLyogRW5kIG9mIHRoZSBwYXR0ZXJuLiAqLwogCiAgICAgY2FzZSBP
UF9FTkQ6Ci0gICAgaWYgKG1kLT5yZWN1cnNpdmUgIT0gTlVMTCAmJiBtZC0+cmVjdXJzaXZlLT5n
cm91cF9udW0gPT0gMCkKLSAgICAgIHsKLSAgICAgIHJlY3Vyc2lvbl9pbmZvICpyZWMgPSBtZC0+
cmVjdXJzaXZlOwotICAgICAgRFBSSU5URigoIkVuZCBvZiBwYXR0ZXJuIGluIGEgKD8wKSByZWN1
cnNpb25cbiIpKTsKLSAgICAgIG1kLT5yZWN1cnNpdmUgPSByZWMtPnByZXZyZWM7Ci0gICAgICBt
ZW1tb3ZlKG1kLT5vZmZzZXRfdmVjdG9yLCByZWMtPm9mZnNldF9zYXZlLAotICAgICAgICByZWMt
PnNhdmVkX21heCAqIHNpemVvZihpbnQpKTsKLSAgICAgIG1kLT5zdGFydF9tYXRjaCA9IHJlYy0+
c2F2ZV9zdGFydDsKLSAgICAgIGltcyA9IG9yaWdpbmFsX2ltczsKLSAgICAgIGVjb2RlID0gcmVj
LT5hZnRlcl9jYWxsOwotICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAvKiBPdGhlcndpc2Us
IGlmIFBDUkVfTk9URU1QVFkgaXMgc2V0LCBmYWlsIGlmIHdlIGhhdmUgbWF0Y2hlZCBhbiBlbXB0
eQotICAgIHN0cmluZyAtIGJhY2t0cmFja2luZyB3aWxsIHRoZW4gdHJ5IG90aGVyIGFsdGVybmF0
aXZlcywgaWYgYW55LiAqLwotCi0gICAgaWYgKG1kLT5ub3RlbXB0eSAmJiBlcHRyID09IG1kLT5z
dGFydF9tYXRjaCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICBtZC0+ZW5kX21hdGNoX3B0
ciA9IGVwdHI7ICAgICAgICAgIC8qIFJlY29yZCB3aGVyZSB3ZSBlbmRlZCAqLwogICAgIG1kLT5l
bmRfb2Zmc2V0X3RvcCA9IG9mZnNldF90b3A7ICAgLyogYW5kIGhvdyBtYW55IGV4dHJhY3RzIHdl
cmUgdGFrZW4gKi8KICAgICBSUkVUVVJOKE1BVENIX01BVENIKTsKIAotICAgIC8qIENoYW5nZSBv
cHRpb24gc2V0dGluZ3MgKi8KLQotICAgIGNhc2UgT1BfT1BUOgotICAgIGltcyA9IGVjb2RlWzFd
OwotICAgIGVjb2RlICs9IDI7Ci0gICAgRFBSSU5URigoImltcyBzZXQgdG8gJTAybHhcbiIsIGlt
cykpOwotICAgIGJyZWFrOwotCiAgICAgLyogQXNzZXJ0aW9uIGJyYWNrZXRzLiBDaGVjayB0aGUg
YWx0ZXJuYXRpdmUgYnJhbmNoZXMgaW4gdHVybiAtIHRoZQogICAgIG1hdGNoaW5nIHdvbid0IHBh
c3MgdGhlIEtFVCBmb3IgYW4gYXNzZXJ0aW9uLiBJZiBhbnkgb25lIGJyYW5jaCBtYXRjaGVzLAog
ICAgIHRoZSBhc3NlcnRpb24gaXMgdHJ1ZS4gTG9va2JlaGluZCBhc3NlcnRpb25zIGhhdmUgYW4g
T1BfUkVWRVJTRSBpdGVtIGF0IHRoZQpAQCAtODA1LDExICs1NDIsOSBAQCBmb3IgKDs7KQogICAg
IHRoaXMgbGV2ZWwgaXMgaWRlbnRpY2FsIHRvIHRoZSBsb29rYWhlYWQgY2FzZS4gKi8KIAogICAg
IGNhc2UgT1BfQVNTRVJUOgotICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKICAgICBkbwogICAgICAg
ewotICAgICAgUk1BVENIKDYsIHJyYywgZXB0ciwgZWNvZGUgKyAxICsgTElOS19TSVpFLCBvZmZz
ZXRfdG9wLCBtZCwgaW1zLCBOVUxMLAotICAgICAgICBtYXRjaF9pc2dyb3VwKTsKKyAgICAgIFJN
QVRDSCg2LCBycmMsIGVjb2RlICsgMSArIExJTktfU0laRSwgTlVMTCwgbWF0Y2hfaXNncm91cCk7
CiAgICAgICBpZiAocnJjID09IE1BVENIX01BVENIKSBicmVhazsKICAgICAgIGlmIChycmMgIT0g
TUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLCAx
KTsKQEAgLTgxNywxMCArNTUyLDYgQEAgZm9yICg7OykKICAgICB3aGlsZSAoKmVjb2RlID09IE9Q
X0FMVCk7CiAgICAgaWYgKCplY29kZSA9PSBPUF9LRVQpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7
CiAKLSAgICAvKiBJZiBjaGVja2luZyBhbiBhc3NlcnRpb24gZm9yIGEgY29uZGl0aW9uLCByZXR1
cm4gTUFUQ0hfTUFUQ0guICovCi0KLSAgICBpZiAoKGZsYWdzICYgbWF0Y2hfY29uZGFzc2VydCkg
IT0gMCkgUlJFVFVSTihNQVRDSF9NQVRDSCk7Ci0KICAgICAvKiBDb250aW51ZSBmcm9tIGFmdGVy
IHRoZSBhc3NlcnRpb24sIHVwZGF0aW5nIHRoZSBvZmZzZXRzIGhpZ2ggd2F0ZXIKICAgICBtYXJr
LCBzaW5jZSBleHRyYWN0cyBtYXkgaGF2ZSBiZWVuIHRha2VuIGR1cmluZyB0aGUgYXNzZXJ0aW9u
LiAqLwogCkBAIC04MzIsMTc0ICs1NjMsMTggQEAgZm9yICg7OykKICAgICAvKiBOZWdhdGl2ZSBh
c3NlcnRpb246IGFsbCBicmFuY2hlcyBtdXN0IGZhaWwgdG8gbWF0Y2ggKi8KIAogICAgIGNhc2Ug
T1BfQVNTRVJUX05PVDoKLSAgICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgogICAgIGRvCiAgICAg
ICB7Ci0gICAgICBSTUFUQ0goNywgcnJjLCBlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9m
ZnNldF90b3AsIG1kLCBpbXMsIE5VTEwsCi0gICAgICAgIG1hdGNoX2lzZ3JvdXApOworICAgICAg
Uk1BVENIKDcsIHJyYywgZWNvZGUgKyAxICsgTElOS19TSVpFLCBOVUxMLCBtYXRjaF9pc2dyb3Vw
KTsKICAgICAgIGlmIChycmMgPT0gTUFUQ0hfTUFUQ0gpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7
CiAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKICAgICAgIGVj
b2RlICs9IEdFVChlY29kZSwxKTsKICAgICAgIH0KICAgICB3aGlsZSAoKmVjb2RlID09IE9QX0FM
VCk7CiAKLSAgICBpZiAoKGZsYWdzICYgbWF0Y2hfY29uZGFzc2VydCkgIT0gMCkgUlJFVFVSTihN
QVRDSF9NQVRDSCk7Ci0KICAgICBlY29kZSArPSAxICsgTElOS19TSVpFOwogICAgIGNvbnRpbnVl
OwogCi0gICAgLyogTW92ZSB0aGUgc3ViamVjdCBwb2ludGVyIGJhY2suIFRoaXMgb2NjdXJzIG9u
bHkgYXQgdGhlIHN0YXJ0IG9mCi0gICAgZWFjaCBicmFuY2ggb2YgYSBsb29rYmVoaW5kIGFzc2Vy
dGlvbi4gSWYgd2UgYXJlIHRvbyBjbG9zZSB0byB0aGUgc3RhcnQgdG8KLSAgICBtb3ZlIGJhY2ss
IHRoaXMgbWF0Y2ggZnVuY3Rpb24gZmFpbHMuIFdoZW4gd29ya2luZyB3aXRoIFVURi04IHdlIG1v
dmUKLSAgICBiYWNrIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIG5vdCBieXRlcy4gKi8KLQotICAg
IGNhc2UgT1BfUkVWRVJTRToKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICBpZiAodXRmOCkKLSAg
ICAgIHsKLSAgICAgIGMgPSBHRVQoZWNvZGUsMSk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgYzsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgIGVwdHItLTsKLSAgICAgICAgaWYgKGVwdHIgPCBtZC0+
c3RhcnRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgQkFDS0NIQVIo
ZXB0cikKLSAgICAgICAgfQotICAgICAgfQotICAgIGVsc2UKLSNlbmRpZgotCi0gICAgLyogTm8g
VVRGLTggc3VwcG9ydCwgb3Igbm90IGluIFVURi04IG1vZGU6IGNvdW50IGlzIGJ5dGUgY291bnQg
Ki8KLQotICAgICAgewotICAgICAgZXB0ciAtPSBHRVQoZWNvZGUsMSk7Ci0gICAgICBpZiAoZXB0
ciA8IG1kLT5zdGFydF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgfQot
Ci0gICAgLyogU2tpcCB0byBuZXh0IG9wIGNvZGUgKi8KLQotICAgIGVjb2RlICs9IDEgKyBMSU5L
X1NJWkU7Ci0gICAgYnJlYWs7Ci0KLSAgICAvKiBUaGUgY2FsbG91dCBpdGVtIGNhbGxzIGFuIGV4
dGVybmFsIGZ1bmN0aW9uLCBpZiBvbmUgaXMgcHJvdmlkZWQsIHBhc3NpbmcKLSAgICBkZXRhaWxz
IG9mIHRoZSBtYXRjaCBzbyBmYXIuIFRoaXMgaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcsIHRob3Vn
aCB0aGUKLSAgICBmdW5jdGlvbiBpcyBhYmxlIHRvIGZvcmNlIGEgZmFpbHVyZS4gKi8KLQotICAg
IGNhc2UgT1BfQ0FMTE9VVDoKLSAgICBpZiAocGNyZV9jYWxsb3V0ICE9IE5VTEwpCi0gICAgICB7
Ci0gICAgICBwY3JlX2NhbGxvdXRfYmxvY2sgY2I7Ci0gICAgICBjYi52ZXJzaW9uICAgICAgICAg
ID0gMTsgICAvKiBWZXJzaW9uIDEgb2YgdGhlIGNhbGxvdXQgYmxvY2sgKi8KLSAgICAgIGNiLmNh
bGxvdXRfbnVtYmVyICAgPSBlY29kZVsxXTsKLSAgICAgIGNiLm9mZnNldF92ZWN0b3IgICAgPSBt
ZC0+b2Zmc2V0X3ZlY3RvcjsKLSAgICAgIGNiLnN1YmplY3QgICAgICAgICAgPSAoUENSRV9TUFRS
KW1kLT5zdGFydF9zdWJqZWN0OwotICAgICAgY2Iuc3ViamVjdF9sZW5ndGggICA9IG1kLT5lbmRf
c3ViamVjdCAtIG1kLT5zdGFydF9zdWJqZWN0OwotICAgICAgY2Iuc3RhcnRfbWF0Y2ggICAgICA9
IG1kLT5zdGFydF9tYXRjaCAtIG1kLT5zdGFydF9zdWJqZWN0OwotICAgICAgY2IuY3VycmVudF9w
b3NpdGlvbiA9IGVwdHIgLSBtZC0+c3RhcnRfc3ViamVjdDsKLSAgICAgIGNiLnBhdHRlcm5fcG9z
aXRpb24gPSBHRVQoZWNvZGUsIDIpOwotICAgICAgY2IubmV4dF9pdGVtX2xlbmd0aCA9IEdFVChl
Y29kZSwgMiArIExJTktfU0laRSk7Ci0gICAgICBjYi5jYXB0dXJlX3RvcCAgICAgID0gb2Zmc2V0
X3RvcC8yOwotICAgICAgY2IuY2FwdHVyZV9sYXN0ICAgICA9IG1kLT5jYXB0dXJlX2xhc3Q7Ci0g
ICAgICBjYi5jYWxsb3V0X2RhdGEgICAgID0gbWQtPmNhbGxvdXRfZGF0YTsKLSAgICAgIGlmICgo
cnJjID0gKCpwY3JlX2NhbGxvdXQpKCZjYikpID4gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsK
LSAgICAgIGlmIChycmMgPCAwKSBSUkVUVVJOKHJyYyk7Ci0gICAgICB9Ci0gICAgZWNvZGUgKz0g
MiArIDIqTElOS19TSVpFOwotICAgIGJyZWFrOwotCi0gICAgLyogUmVjdXJzaW9uIGVpdGhlciBt
YXRjaGVzIHRoZSBjdXJyZW50IHJlZ2V4LCBvciBzb21lIHN1YmV4cHJlc3Npb24uIFRoZQotICAg
IG9mZnNldCBkYXRhIGlzIHRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0aW5nIGJyYWNrZXQgZnJvbSB0
aGUgc3RhcnQgb2YgdGhlCi0gICAgd2hvbGUgcGF0dGVybi4gKFRoaXMgaXMgc28gdGhhdCBpdCB3
b3JrcyBmcm9tIGR1cGxpY2F0ZWQgc3VicGF0dGVybnMuKQotCi0gICAgSWYgdGhlcmUgYXJlIGFu
eSBjYXB0dXJpbmcgYnJhY2tldHMgc3RhcnRlZCBidXQgbm90IGZpbmlzaGVkLCB3ZSBoYXZlIHRv
Ci0gICAgc2F2ZSB0aGVpciBzdGFydGluZyBwb2ludHMgYW5kIHJlaW5zdGF0ZSB0aGVtIGFmdGVy
IHRoZSByZWN1cnNpb24uIEhvd2V2ZXIsCi0gICAgd2UgZG9uJ3Qga25vdyBob3cgbWFueSBzdWNo
IHRoZXJlIGFyZSAob2Zmc2V0X3RvcCByZWNvcmRzIHRoZSBjb21wbGV0ZWQKLSAgICB0b3RhbCkg
c28gd2UganVzdCBoYXZlIHRvIHNhdmUgYWxsIHRoZSBwb3RlbnRpYWwgZGF0YS4gVGhlcmUgbWF5
IGJlIHVwIHRvCi0gICAgNjU1MzUgc3VjaCB2YWx1ZXMsIHdoaWNoIGlzIHRvbyBsYXJnZSB0byBw
dXQgb24gdGhlIHN0YWNrLCBidXQgdXNpbmcgbWFsbG9jCi0gICAgZm9yIHNtYWxsIG51bWJlcnMg
c2VlbXMgZXhwZW5zaXZlLiBBcyBhIGNvbXByb21pc2UsIHRoZSBzdGFjayBpcyB1c2VkIHdoZW4K
LSAgICB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIFJFQ19TVEFDS19TQVZFX01BWCB2YWx1ZXMgdG8g
c3RvcmU7IG90aGVyd2lzZSBtYWxsb2MKLSAgICBpcyB1c2VkLiBBIHByb2JsZW0gaXMgd2hhdCB0
byBkbyBpZiB0aGUgbWFsbG9jIGZhaWxzIC4uLiB0aGVyZSBpcyBubyB3YXkgb2YKLSAgICByZXR1
cm5pbmcgdG8gdGhlIHRvcCBsZXZlbCB3aXRoIGFuIGVycm9yLiBTYXZlIHRoZSB0b3AgUkVDX1NU
QUNLX1NBVkVfTUFYCi0gICAgdmFsdWVzIG9uIHRoZSBzdGFjaywgYW5kIGFjY2VwdCB0aGF0IHRo
ZSByZXN0IG1heSBiZSB3cm9uZy4KLQotICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIHZhbHVlcyB0
aGF0IGhhdmUgdG8gYmUgc2F2ZWQuIFdlIHVzZSBhIGNoYWluZWQKLSAgICBzZXF1ZW5jZSBvZiBi
bG9ja3MgdGhhdCBhY3R1YWxseSBsaXZlIG9uIHRoZSBzdGFjay4gVGhhbmtzIHRvIFJvYmluIEhv
dXN0b24KLSAgICBmb3IgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBsb2dpYy4gKi8KLQot
ICAgIGNhc2UgT1BfUkVDVVJTRToKLSAgICAgIHsKLSAgICAgIGNhbGxwYXQgPSBtZC0+c3RhcnRf
Y29kZSArIEdFVChlY29kZSwgMSk7Ci0gICAgICBuZXdfcmVjdXJzaXZlLmdyb3VwX251bSA9ICpj
YWxscGF0IC0gT1BfQlJBOwotCi0gICAgICAvKiBGb3IgZXh0ZW5kZWQgZXh0cmFjdGlvbiBicmFj
a2V0cyAobGFyZ2UgbnVtYmVyKSwgd2UgaGF2ZSB0byBmaXNoIG91dAotICAgICAgdGhlIG51bWJl
ciBmcm9tIGEgZHVtbXkgb3Bjb2RlIGF0IHRoZSBzdGFydC4gKi8KLQotICAgICAgaWYgKG5ld19y
ZWN1cnNpdmUuZ3JvdXBfbnVtID4gRVhUUkFDVF9CQVNJQ19NQVgpCi0gICAgICAgIG5ld19yZWN1
cnNpdmUuZ3JvdXBfbnVtID0gR0VUMihjYWxscGF0LCAyK0xJTktfU0laRSk7Ci0KLSAgICAgIC8q
IEFkZCB0byAicmVjdXJzaW5nIHN0YWNrIiAqLwotCi0gICAgICBuZXdfcmVjdXJzaXZlLnByZXZy
ZWMgPSBtZC0+cmVjdXJzaXZlOwotICAgICAgbWQtPnJlY3Vyc2l2ZSA9ICZuZXdfcmVjdXJzaXZl
OwotCi0gICAgICAvKiBGaW5kIHdoZXJlIHRvIGNvbnRpbnVlIGZyb20gYWZ0ZXJ3YXJkcyAqLwot
Ci0gICAgICBlY29kZSArPSAxICsgTElOS19TSVpFOwotICAgICAgbmV3X3JlY3Vyc2l2ZS5hZnRl
cl9jYWxsID0gZWNvZGU7Ci0KLSAgICAgIC8qIE5vdyBzYXZlIHRoZSBvZmZzZXQgZGF0YS4gKi8K
LQotICAgICAgbmV3X3JlY3Vyc2l2ZS5zYXZlZF9tYXggPSBtZC0+b2Zmc2V0X2VuZDsKLSAgICAg
IGlmIChuZXdfcmVjdXJzaXZlLnNhdmVkX21heCA8PSBSRUNfU1RBQ0tfU0FWRV9NQVgpCi0gICAg
ICAgIG5ld19yZWN1cnNpdmUub2Zmc2V0X3NhdmUgPSBzdGFja3NhdmU7Ci0gICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgbmV3X3JlY3Vyc2l2ZS5vZmZzZXRfc2F2ZSA9Ci0gICAgICAgICAg
KGludCAqKShwY3JlX21hbGxvYykobmV3X3JlY3Vyc2l2ZS5zYXZlZF9tYXggKiBzaXplb2YoaW50
KSk7Ci0gICAgICAgIGlmIChuZXdfcmVjdXJzaXZlLm9mZnNldF9zYXZlID09IE5VTEwpIFJSRVRV
Uk4oUENSRV9FUlJPUl9OT01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgbWVtY3B5KG5ld19y
ZWN1cnNpdmUub2Zmc2V0X3NhdmUsIG1kLT5vZmZzZXRfdmVjdG9yLAotICAgICAgICAgICAgbmV3
X3JlY3Vyc2l2ZS5zYXZlZF9tYXggKiBzaXplb2YoaW50KSk7Ci0gICAgICBuZXdfcmVjdXJzaXZl
LnNhdmVfc3RhcnQgPSBtZC0+c3RhcnRfbWF0Y2g7Ci0gICAgICBtZC0+c3RhcnRfbWF0Y2ggPSBl
cHRyOwotCi0gICAgICAvKiBPSywgbm93IHdlIGNhbiBkbyB0aGUgcmVjdXJzaW9uLiBGb3IgZWFj
aCB0b3AtbGV2ZWwgYWx0ZXJuYXRpdmUgd2UKLSAgICAgIHJlc3RvcmUgdGhlIG9mZnNldCBhbmQg
cmVjdXJzaW9uIGRhdGEuICovCi0KLSAgICAgIERQUklOVEYoKCJSZWN1cnNpbmcgaW50byBncm91
cCAlZFxuIiwgbmV3X3JlY3Vyc2l2ZS5ncm91cF9udW0pKTsKLSAgICAgIGRvCi0gICAgICAgIHsK
LSAgICAgICAgUk1BVENIKDgsIHJyYywgZXB0ciwgY2FsbHBhdCArIDEgKyBMSU5LX1NJWkUsIG9m
ZnNldF90b3AsIG1kLCBpbXMsCi0gICAgICAgICAgICBlcHRyYiwgbWF0Y2hfaXNncm91cCk7Ci0g
ICAgICAgIGlmIChycmMgPT0gTUFUQ0hfTUFUQ0gpCi0gICAgICAgICAgewotICAgICAgICAgIERQ
UklOVEYoKCJSZWN1cnNpb24gbWF0Y2hlZFxuIikpOwotICAgICAgICAgIG1kLT5yZWN1cnNpdmUg
PSBuZXdfcmVjdXJzaXZlLnByZXZyZWM7Ci0gICAgICAgICAgaWYgKG5ld19yZWN1cnNpdmUub2Zm
c2V0X3NhdmUgIT0gc3RhY2tzYXZlKQotICAgICAgICAgICAgKHBjcmVfZnJlZSkobmV3X3JlY3Vy
c2l2ZS5vZmZzZXRfc2F2ZSk7Ci0gICAgICAgICAgUlJFVFVSTihNQVRDSF9NQVRDSCk7Ci0gICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgRFBSSU5URigoIlJlY3Vyc2lvbiBnYXZlIGVycm9yICVkXG4iLCBycmMp
KTsKLSAgICAgICAgICBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgfQotCi0gICAgICAgIG1kLT5y
ZWN1cnNpdmUgPSAmbmV3X3JlY3Vyc2l2ZTsKLSAgICAgICAgbWVtY3B5KG1kLT5vZmZzZXRfdmVj
dG9yLCBuZXdfcmVjdXJzaXZlLm9mZnNldF9zYXZlLAotICAgICAgICAgICAgbmV3X3JlY3Vyc2l2
ZS5zYXZlZF9tYXggKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIGNhbGxwYXQgKz0gR0VUKGNhbGxw
YXQsIDEpOwotICAgICAgICB9Ci0gICAgICB3aGlsZSAoKmNhbGxwYXQgPT0gT1BfQUxUKTsKLQot
ICAgICAgRFBSSU5URigoIlJlY3Vyc2lvbiBkaWRuJ3QgbWF0Y2hcbiIpKTsKLSAgICAgIG1kLT5y
ZWN1cnNpdmUgPSBuZXdfcmVjdXJzaXZlLnByZXZyZWM7Ci0gICAgICBpZiAobmV3X3JlY3Vyc2l2
ZS5vZmZzZXRfc2F2ZSAhPSBzdGFja3NhdmUpCi0gICAgICAgIChwY3JlX2ZyZWUpKG5ld19yZWN1
cnNpdmUub2Zmc2V0X3NhdmUpOwotICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAg
IH0KLSAgICAvKiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLwotCiAgICAgLyogIk9uY2Ui
IGJyYWNrZXRzIGFyZSBsaWtlIGFzc2VydGlvbiBicmFja2V0cyBleGNlcHQgdGhhdCBhZnRlciBh
IG1hdGNoLAogICAgIHRoZSBwb2ludCBpbiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgbm90IG1vdmVk
IGJhY2suIFRodXMgdGhlcmUgY2FuIG5ldmVyIGJlCiAgICAgYSBtb3ZlIGJhY2sgaW50byB0aGUg
YnJhY2tldHMuIEZyaWVkbCBjYWxscyB0aGVzZSAiYXRvbWljIiBzdWJwYXR0ZXJucy4KQEAgLTEw
MTQsOCArNTg5LDcgQEAgZm9yICg7OykKIAogICAgICAgZG8KICAgICAgICAgewotICAgICAgICBS
TUFUQ0goOSwgcnJjLCBlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1k
LCBpbXMsCi0gICAgICAgICAgZXB0cmIsIG1hdGNoX2lzZ3JvdXApOworICAgICAgICBSTUFUQ0go
OSwgcnJjLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsKICAg
ICAgICAgaWYgKHJyYyA9PSBNQVRDSF9NQVRDSCkgYnJlYWs7CiAgICAgICAgIGlmIChycmMgIT0g
TUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgICBlY29kZSArPSBHRVQoZWNvZGUs
MSk7CkBAIC0xMDUxLDI0ICs2MjUsMTggQEAgZm9yICg7OykKICAgICAgIHRoYXQgY2hhbmdlZCB3
aXRoaW4gdGhlIGJyYWNrZXQgYmVmb3JlIHJlLXJ1bm5pbmcgaXQsIHNvIGNoZWNrIHRoZSBuZXh0
CiAgICAgICBvcGNvZGUuICovCiAKLSAgICAgIGlmIChlY29kZVsxK0xJTktfU0laRV0gPT0gT1Bf
T1BUKQotICAgICAgICB7Ci0gICAgICAgIGltcyA9IChpbXMgJiB+UENSRV9JTVMpIHwgZWNvZGVb
NF07Ci0gICAgICAgIERQUklOVEYoKCJpbXMgc2V0IHRvICUwMmx4IGF0IGdyb3VwIHJlcGVhdFxu
IiwgaW1zKSk7Ci0gICAgICAgIH0KLQogICAgICAgaWYgKCplY29kZSA9PSBPUF9LRVRSTUlOKQog
ICAgICAgICB7Ci0gICAgICAgIFJNQVRDSCgxMCwgcnJjLCBlcHRyLCBlY29kZSArIDEgKyBMSU5L
X1NJWkUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgUk1BVENIKDEw
LCBycmMsIGVjb2RlICsgMSArIExJTktfU0laRSwgZXB0cmIsIDApOwogICAgICAgICBpZiAocnJj
ICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAgICAgICAgUk1BVENIKDExLCBycmMs
IGVwdHIsIHByZXYsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsK
KyAgICAgICAgUk1BVENIKDExLCBycmMsIHByZXYsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsKICAg
ICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgIH0K
ICAgICAgIGVsc2UgIC8qIE9QX0tFVFJNQVggKi8KICAgICAgICAgewotICAgICAgICBSTUFUQ0go
MTIsIHJyYywgZXB0ciwgcHJldiwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIG1hdGNoX2lz
Z3JvdXApOworICAgICAgICBSTUFUQ0goMTIsIHJyYywgcHJldiwgZXB0cmIsIG1hdGNoX2lzZ3Jv
dXApOwogICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAg
ICAgICAgUk1BVENIKDEzLCBycmMsIGVwdHIsIGVjb2RlICsgMStMSU5LX1NJWkUsIG9mZnNldF90
b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgUk1BVENIKDEzLCBycmMsIGVjb2RlICsg
MStMSU5LX1NJWkUsIGVwdHJiLCAwKTsKICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENI
KSBSUkVUVVJOKHJyYyk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTEwOTAsNyArNjU4LDcgQEAg
Zm9yICg7OykKICAgICBjYXNlIE9QX0JSQVpFUk86CiAgICAgICB7CiAgICAgICBuZXh0ID0gZWNv
ZGUrMTsKLSAgICAgIFJNQVRDSCgxNCwgcnJjLCBlcHRyLCBuZXh0LCBvZmZzZXRfdG9wLCBtZCwg
aW1zLCBlcHRyYiwgbWF0Y2hfaXNncm91cCk7CisgICAgICBSTUFUQ0goMTQsIHJyYywgbmV4dCwg
ZXB0cmIsIG1hdGNoX2lzZ3JvdXApOwogICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBS
UkVUVVJOKHJyYyk7CiAgICAgICBkbyBuZXh0ICs9IEdFVChuZXh0LDEpOyB3aGlsZSAoKm5leHQg
PT0gT1BfQUxUKTsKICAgICAgIGVjb2RlID0gbmV4dCArIDErTElOS19TSVpFOwpAQCAtMTEwMSw4
ICs2NjksNyBAQCBmb3IgKDs7KQogICAgICAgewogICAgICAgbmV4dCA9IGVjb2RlKzE7CiAgICAg
ICBkbyBuZXh0ICs9IEdFVChuZXh0LDEpOyB3aGlsZSAoKm5leHQgPT0gT1BfQUxUKTsKLSAgICAg
IFJNQVRDSCgxNSwgcnJjLCBlcHRyLCBuZXh0ICsgMStMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1k
LCBpbXMsIGVwdHJiLAotICAgICAgICBtYXRjaF9pc2dyb3VwKTsKKyAgICAgIFJNQVRDSCgxNSwg
cnJjLCBuZXh0ICsgMStMSU5LX1NJWkUsIGVwdHJiLCBtYXRjaF9pc2dyb3VwKTsKICAgICAgIGlm
IChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgZWNvZGUrKzsKICAg
ICAgIH0KQEAgLTExMjQsOSArNjkxLDcgQEAgZm9yICg7OykKIAogICAgICAgZXB0cmIgPSBlcHRy
Yi0+ZXBiX3ByZXY7CiAKLSAgICAgIGlmICgqcHJldiA9PSBPUF9BU1NFUlQgfHwgKnByZXYgPT0g
T1BfQVNTRVJUX05PVCB8fAotICAgICAgICAgICpwcmV2ID09IE9QX0FTU0VSVEJBQ0sgfHwgKnBy
ZXYgPT0gT1BfQVNTRVJUQkFDS19OT1QgfHwKLSAgICAgICAgICAqcHJldiA9PSBPUF9PTkNFKQor
ICAgICAgaWYgKCpwcmV2ID09IE9QX0FTU0VSVCB8fCAqcHJldiA9PSBPUF9BU1NFUlRfTk9UIHx8
ICpwcmV2ID09IE9QX09OQ0UpCiAgICAgICAgIHsKICAgICAgICAgbWQtPmVuZF9tYXRjaF9wdHIg
PSBlcHRyOyAgICAgIC8qIEZvciBPTkNFICovCiAgICAgICAgIG1kLT5lbmRfb2Zmc2V0X3RvcCA9
IG9mZnNldF90b3A7CkBAIC0xMTM3LDcgKzcwMiw2IEBAIGZvciAoOzspCiAgICAgICBncm91cCBu
dW1iZXIgYmFjayBhdCB0aGUgc3RhcnQgYW5kIGlmIG5lY2Vzc2FyeSBjb21wbGV0ZSBoYW5kbGlu
ZyBhbgogICAgICAgZXh0cmFjdGlvbiBieSBzZXR0aW5nIHRoZSBvZmZzZXRzIGFuZCBidW1waW5n
IHRoZSBoaWdoIHdhdGVyIG1hcmsuICovCiAKLSAgICAgIGlmICgqcHJldiAhPSBPUF9DT05EKQog
ICAgICAgICB7CiAgICAgICAgIG51bWJlciA9ICpwcmV2IC0gT1BfQlJBOwogCkBAIC0xMTU5LDcg
KzcyMyw2IEBAIGZvciAoOzspCiAKICAgICAgICAgaWYgKG51bWJlciA+IDApCiAgICAgICAgICAg
ewotICAgICAgICAgIG1kLT5jYXB0dXJlX2xhc3QgPSBudW1iZXI7CiAgICAgICAgICAgaWYgKG9m
ZnNldCA+PSBtZC0+b2Zmc2V0X21heCkgbWQtPm9mZnNldF9vdmVyZmxvdyA9IFRSVUU7IGVsc2UK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIG1kLT5vZmZzZXRfdmVjdG9yW29mZnNldF0gPQpA
QCAtMTE2NywzMSArNzMwLDkgQEAgZm9yICg7OykKICAgICAgICAgICAgIG1kLT5vZmZzZXRfdmVj
dG9yW29mZnNldCsxXSA9IGVwdHIgLSBtZC0+c3RhcnRfc3ViamVjdDsKICAgICAgICAgICAgIGlm
IChvZmZzZXRfdG9wIDw9IG9mZnNldCkgb2Zmc2V0X3RvcCA9IG9mZnNldCArIDI7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAvKiBIYW5kbGUgYSByZWN1cnNpdmVseSBjYWxsZWQgZ3JvdXAu
IFJlc3RvcmUgdGhlIG9mZnNldHMKLSAgICAgICAgICBhcHByb3ByaWF0ZWx5IGFuZCBjb250aW51
ZSBmcm9tIGFmdGVyIHRoZSBjYWxsLiAqLwotCi0gICAgICAgICAgaWYgKG1kLT5yZWN1cnNpdmUg
IT0gTlVMTCAmJiBtZC0+cmVjdXJzaXZlLT5ncm91cF9udW0gPT0gbnVtYmVyKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgcmVjdXJzaW9uX2luZm8gKnJlYyA9IG1kLT5yZWN1cnNpdmU7Ci0g
ICAgICAgICAgICBEUFJJTlRGKCgiUmVjdXJzaW9uICglZCkgc3VjY2VlZGVkIC0gY29udGludWlu
Z1xuIiwgbnVtYmVyKSk7Ci0gICAgICAgICAgICBtZC0+cmVjdXJzaXZlID0gcmVjLT5wcmV2cmVj
OwotICAgICAgICAgICAgbWQtPnN0YXJ0X21hdGNoID0gcmVjLT5zYXZlX3N0YXJ0OwotICAgICAg
ICAgICAgbWVtY3B5KG1kLT5vZmZzZXRfdmVjdG9yLCByZWMtPm9mZnNldF9zYXZlLAotICAgICAg
ICAgICAgICByZWMtPnNhdmVkX21heCAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGVjb2Rl
ID0gcmVjLT5hZnRlcl9jYWxsOwotICAgICAgICAgICAgaW1zID0gb3JpZ2luYWxfaW1zOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgIC8qIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgaW1zIGZsYWdzLCBpbiBjYXNlIHRoZXkg
Z290IGNoYW5nZWQgZHVyaW5nCi0gICAgICB0aGUgZ3JvdXAuICovCi0KLSAgICAgIGltcyA9IG9y
aWdpbmFsX2ltczsKLSAgICAgIERQUklOVEYoKCJpbXMgcmVzZXQgdG8gJTAybHhcbiIsIGltcykp
OwotCiAgICAgICAvKiBGb3IgYSBub24tcmVwZWF0aW5nIGtldCwganVzdCBjb250aW51ZSBhdCB0
aGlzIGxldmVsLiBUaGlzIGFsc28KICAgICAgIGhhcHBlbnMgZm9yIGEgcmVwZWF0aW5nIGtldCBp
ZiBubyBjaGFyYWN0ZXJzIHdlcmUgbWF0Y2hlZCBpbiB0aGUgZ3JvdXAuCiAgICAgICBUaGlzIGlz
IHRoZSBmb3JjaWJsZSBicmVha2luZyBvZiBpbmZpbml0ZSBsb29wcyBhcyBpbXBsZW1lbnRlZCBp
biBQZXJsCkBAIC0xMjA5LDE2ICs3NTAsMTYgQEAgZm9yICg7OykKIAogICAgICAgaWYgKCplY29k
ZSA9PSBPUF9LRVRSTUlOKQogICAgICAgICB7Ci0gICAgICAgIFJNQVRDSCgxNiwgcnJjLCBlcHRy
LCBlY29kZSArIDErTElOS19TSVpFLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Cisg
ICAgICAgIFJNQVRDSCgxNiwgcnJjLCBlY29kZSArIDErTElOS19TSVpFLCBlcHRyYiwgMCk7CiAg
ICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICBS
TUFUQ0goMTcsIHJyYywgZXB0ciwgcHJldiwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIG1h
dGNoX2lzZ3JvdXApOworICAgICAgICBSTUFUQ0goMTcsIHJyYywgcHJldiwgZXB0cmIsIG1hdGNo
X2lzZ3JvdXApOwogICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJj
KTsKICAgICAgICAgfQogICAgICAgZWxzZSAgLyogT1BfS0VUUk1BWCAqLwogICAgICAgICB7Ci0g
ICAgICAgIFJNQVRDSCgxOCwgcnJjLCBlcHRyLCBwcmV2LCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBl
cHRyYiwgbWF0Y2hfaXNncm91cCk7CisgICAgICAgIFJNQVRDSCgxOCwgcnJjLCBwcmV2LCBlcHRy
YiwgbWF0Y2hfaXNncm91cCk7CiAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJF
VFVSTihycmMpOwotICAgICAgICBSTUFUQ0goMTksIHJyYywgZXB0ciwgZWNvZGUgKyAxK0xJTktf
U0laRSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOworICAgICAgICBSTUFUQ0goMTks
IHJyYywgZWNvZGUgKyAxK0xJTktfU0laRSwgZXB0cmIsIDApOwogICAgICAgICBpZiAocnJjICE9
IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTIy
OCw0NyArNzY5LDMwIEBAIGZvciAoOzspCiAgICAgLyogU3RhcnQgb2Ygc3ViamVjdCB1bmxlc3Mg
bm90Ym9sLCBvciBhZnRlciBpbnRlcm5hbCBuZXdsaW5lIGlmIG11bHRpbGluZSAqLwogCiAgICAg
Y2FzZSBPUF9DSVJDOgotICAgIGlmIChtZC0+bm90Ym9sICYmIGVwdHIgPT0gbWQtPnN0YXJ0X3N1
YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgaWYgKChpbXMgJiBQQ1JFX01VTFRJ
TElORSkgIT0gMCkKKyAgICBpZiAobWQtPm11bHRpbGluZSkKICAgICAgIHsKICAgICAgIGlmIChl
cHRyICE9IG1kLT5zdGFydF9zdWJqZWN0ICYmICFJU19ORVdMSU5FKGVwdHJbLTFdKSkKICAgICAg
ICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAgIGVjb2RlKys7CiAgICAgICBicmVhazsK
ICAgICAgIH0KLSAgICAvKiAuLi4gZWxzZSBmYWxsIHRocm91Z2ggKi8KLQotICAgIC8qIFN0YXJ0
IG9mIHN1YmplY3QgYXNzZXJ0aW9uICovCi0KLSAgICBjYXNlIE9QX1NPRDoKICAgICBpZiAoZXB0
ciAhPSBtZC0+c3RhcnRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICBlY29k
ZSsrOwogICAgIGJyZWFrOwogCi0gICAgLyogU3RhcnQgb2YgbWF0Y2ggYXNzZXJ0aW9uICovCi0K
LSAgICBjYXNlIE9QX1NPTToKLSAgICBpZiAoZXB0ciAhPSBtZC0+c3RhcnRfc3ViamVjdCArIG1k
LT5zdGFydF9vZmZzZXQpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgZWNvZGUrKzsKLSAg
ICBicmVhazsKLQogICAgIC8qIEFzc2VydCBiZWZvcmUgaW50ZXJuYWwgbmV3bGluZSBpZiBtdWx0
aWxpbmUsIG9yIGJlZm9yZSBhIHRlcm1pbmF0aW5nCiAgICAgbmV3bGluZSB1bmxlc3MgZW5kb25s
eSBpcyBzZXQsIGVsc2UgZW5kIG9mIHN1YmplY3QgdW5sZXNzIG5vdGVvbCBpcyBzZXQuICovCiAK
ICAgICBjYXNlIE9QX0RPTEw6Ci0gICAgaWYgKChpbXMgJiBQQ1JFX01VTFRJTElORSkgIT0gMCkK
KyAgICBpZiAobWQtPm11bHRpbGluZSkKICAgICAgIHsKICAgICAgIGlmIChlcHRyIDwgbWQtPmVu
ZF9zdWJqZWN0KQogICAgICAgICB7IGlmICghSVNfTkVXTElORSgqZXB0cikpIFJSRVRVUk4oTUFU
Q0hfTk9NQVRDSCk7IH0KLSAgICAgIGVsc2UKLSAgICAgICAgeyBpZiAobWQtPm5vdGVvbCkgUlJF
VFVSTihNQVRDSF9OT01BVENIKTsgfQogICAgICAgZWNvZGUrKzsKICAgICAgIGJyZWFrOwogICAg
ICAgfQogICAgIGVsc2UKICAgICAgIHsKLSAgICAgIGlmIChtZC0+bm90ZW9sKSBSUkVUVVJOKE1B
VENIX05PTUFUQ0gpOwotICAgICAgaWYgKCFtZC0+ZW5kb25seSkKICAgICAgICAgewogICAgICAg
ICBpZiAoZXB0ciA8IG1kLT5lbmRfc3ViamVjdCAtIDEgfHwKICAgICAgICAgICAgKGVwdHIgPT0g
bWQtPmVuZF9zdWJqZWN0IC0gMSAmJiAhSVNfTkVXTElORSgqZXB0cikpKQpAQCAtMTI3Nyw2MCAr
ODAxLDMzIEBAIGZvciAoOzspCiAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9Ci0g
ICAgLyogLi4uIGVsc2UgZmFsbCB0aHJvdWdoICovCi0KLSAgICAvKiBFbmQgb2Ygc3ViamVjdCBh
c3NlcnRpb24gKFx6KSAqLwotCi0gICAgY2FzZSBPUF9FT0Q6CiAgICAgaWYgKGVwdHIgPCBtZC0+
ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgZWNvZGUrKzsKICAgICBi
cmVhazsKIAotICAgIC8qIEVuZCBvZiBzdWJqZWN0IG9yIGVuZGluZyBcbiBhc3NlcnRpb24gKFxa
KSAqLwotCi0gICAgY2FzZSBPUF9FT0ROOgotICAgIGlmIChlcHRyIDwgbWQtPmVuZF9zdWJqZWN0
IC0gMSB8fAotICAgICAgIChlcHRyID09IG1kLT5lbmRfc3ViamVjdCAtIDEgJiYgIUlTX05FV0xJ
TkUoKmVwdHIpKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICBlY29kZSsrOwotICAgIGJy
ZWFrOwotCiAgICAgLyogV29yZCBib3VuZGFyeSBhc3NlcnRpb25zICovCiAKICAgICBjYXNlIE9Q
X05PVF9XT1JEX0JPVU5EQVJZOgogICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKICAgICAgIHsK
LQogICAgICAgLyogRmluZCBvdXQgaWYgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IGNoYXJhY3Rl
cnMgYXJlICJ3b3JkIiBjaGFyYWN0ZXJzLgotICAgICAgSXQgdGFrZXMgYSBiaXQgbW9yZSB3b3Jr
IGluIFVURi04IG1vZGUuIENoYXJhY3RlcnMgPiAyNTUgYXJlIGFzc3VtZWQgdG8KKyAgICAgIEl0
IHRha2VzIGEgYml0IG1vcmUgd29yayBpbiBVVEYtOCBtb2RlLiBDaGFyYWN0ZXJzID4gMTI4IGFy
ZSBhc3N1bWVkIHRvCiAgICAgICBiZSAibm9uLXdvcmQiIGNoYXJhY3RlcnMuICovCiAKLSNpZmRl
ZiBTVVBQT1JUX1VURjgKLSAgICAgIGlmICh1dGY4KQogICAgICAgICB7CiAgICAgICAgIGlmIChl
cHRyID09IG1kLT5zdGFydF9zdWJqZWN0KSBwcmV2X2lzX3dvcmQgPSBGQUxTRTsgZWxzZQogICAg
ICAgICAgIHsKICAgICAgICAgICBjb25zdCBwY3JlX3VjaGFyICpsYXN0cHRyID0gZXB0ciAtIDE7
CiAgICAgICAgICAgd2hpbGUoSVNNSURDSEFSKCpsYXN0cHRyKSkgbGFzdHB0ci0tOwogICAgICAg
ICAgIEdFVENIQVIoYywgbGFzdHB0cik7Ci0gICAgICAgICAgcHJldl9pc193b3JkID0gYyA8IDI1
NiAmJiAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CisgICAgICAgICAgcHJldl9p
c193b3JkID0gYyA8IDEyOCAmJiAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CiAg
ICAgICAgICAgfQogICAgICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIGN1cl9pc193
b3JkID0gRkFMU0U7IGVsc2UKICAgICAgICAgICB7CiAgICAgICAgICAgR0VUQ0hBUihjLCBlcHRy
KTsKLSAgICAgICAgICBjdXJfaXNfd29yZCA9IGMgPCAyNTYgJiYgKG1kLT5jdHlwZXNbY10gJiBj
dHlwZV93b3JkKSAhPSAwOworICAgICAgICAgIGN1cl9pc193b3JkID0gYyA8IDEyOCAmJiAobWQt
PmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICBlbHNlCi0jZW5kaWYKLQotICAgICAgLyogTW9yZSBzdHJlYW1saW5lZCB3aGVuIG5vdCBp
biBVVEYtOCBtb2RlICovCi0KLSAgICAgICAgewotICAgICAgICBwcmV2X2lzX3dvcmQgPSAoZXB0
ciAhPSBtZC0+c3RhcnRfc3ViamVjdCkgJiYKLSAgICAgICAgICAoKG1kLT5jdHlwZXNbZXB0clst
MV1dICYgY3R5cGVfd29yZCkgIT0gMCk7Ci0gICAgICAgIGN1cl9pc193b3JkID0gKGVwdHIgPCBt
ZC0+ZW5kX3N1YmplY3QpICYmCi0gICAgICAgICAgKChtZC0+Y3R5cGVzWyplcHRyXSAmIGN0eXBl
X3dvcmQpICE9IDApOwotICAgICAgICB9CiAKICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlIHNpdHVh
dGlvbiBpcyB3aGF0IHdlIHdhbnQgKi8KIApAQCAtMTM0MywyMSArODQwLDEwIEBAIGZvciAoOzsp
CiAgICAgLyogTWF0Y2ggYSBzaW5nbGUgY2hhcmFjdGVyIHR5cGU7IGlubGluZSBmb3Igc3BlZWQg
Ki8KIAogICAgIGNhc2UgT1BfQU5ZOgotICAgIGlmICgoaW1zICYgUENSRV9ET1RBTEwpID09IDAg
JiYgZXB0ciA8IG1kLT5lbmRfc3ViamVjdCAmJiBJU19ORVdMSU5FKCplcHRyKSkKKyAgICBpZiAo
ZXB0ciA8IG1kLT5lbmRfc3ViamVjdCAmJiBJU19ORVdMSU5FKCplcHRyKSkKICAgICAgIFJSRVRV
Uk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgaWYgKGVwdHIrKyA+PSBtZC0+ZW5kX3N1YmplY3QpIFJS
RVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgaWYgKHV0Zjgp
CiAgICAgICB3aGlsZSAoZXB0ciA8IG1kLT5lbmRfc3ViamVjdCAmJiBJU01JRENIQVIoKmVwdHIp
KSBlcHRyKys7Ci0jZW5kaWYKLSAgICBlY29kZSsrOwotICAgIGJyZWFrOwotCi0gICAgLyogTWF0
Y2ggYSBzaW5nbGUgYnl0ZSwgZXZlbiBpbiBVVEYtOCBtb2RlLiBUaGlzIG9wY29kZSByZWFsbHkg
ZG9lcyBtYXRjaAotICAgIGFueSBieXRlLCBldmVuIG5ld2xpbmUsIGluZGVwZW5kZW50IG9mIHRo
ZSBzZXR0aW5nIG9mIFBDUkVfRE9UQUxMLiAqLwotCi0gICAgY2FzZSBPUF9BTllCWVRFOgotICAg
IGlmIChlcHRyKysgPj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwog
ICAgIGVjb2RlKys7CiAgICAgYnJlYWs7CiAKQEAgLTEzNjUsOSArODUxLDcgQEAgZm9yICg7OykK
ICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7
CiAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CiAgICAgaWYgKAotI2lmZGVmIFNVUFBPUlRf
VVRGOAotICAgICAgIGMgPCAyNTYgJiYKLSNlbmRpZgorICAgICAgIGMgPCAxMjggJiYKICAgICAg
ICAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSAhPSAwCiAgICAgICAgKQogICAgICAgUlJF
VFVSTihNQVRDSF9OT01BVENIKTsKQEAgLTEzNzgsOSArODYyLDcgQEAgZm9yICg7OykKICAgICBp
ZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAg
R0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CiAgICAgaWYgKAotI2lmZGVmIFNVUFBPUlRfVVRGOAot
ICAgICAgIGMgPj0gMjU2IHx8Ci0jZW5kaWYKKyAgICAgICBjID49IDEyOCB8fAogICAgICAgICht
ZC0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpID09IDAKICAgICAgICApCiAgICAgICBSUkVUVVJO
KE1BVENIX05PTUFUQ0gpOwpAQCAtMTM5MSw5ICs4NzMsNyBAQCBmb3IgKDs7KQogICAgIGlmIChl
cHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICBHRVRD
SEFSSU5DVEVTVChjLCBlcHRyKTsKICAgICBpZiAoCi0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAg
ICAgYyA8IDI1NiAmJgotI2VuZGlmCisgICAgICAgYyA8IDEyOCAmJgogICAgICAgIChtZC0+Y3R5
cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDAKICAgICAgICApCiAgICAgICBSUkVUVVJOKE1BVENI
X05PTUFUQ0gpOwpAQCAtMTQwNCw5ICs4ODQsNyBAQCBmb3IgKDs7KQogICAgIGlmIChlcHRyID49
IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICBHRVRDSEFSSU5D
VEVTVChjLCBlcHRyKTsKICAgICBpZiAoCi0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgICAgYyA+
PSAyNTYgfHwKLSNlbmRpZgorICAgICAgIGMgPj0gMTI4IHx8CiAgICAgICAgKG1kLT5jdHlwZXNb
Y10gJiBjdHlwZV9zcGFjZSkgPT0gMAogICAgICAgICkKICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9N
QVRDSCk7CkBAIC0xNDE3LDkgKzg5NSw3IEBAIGZvciAoOzspCiAgICAgaWYgKGVwdHIgPj0gbWQt
PmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgIEdFVENIQVJJTkNURVNU
KGMsIGVwdHIpOwogICAgIGlmICgKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICBjIDwgMjU2
ICYmCi0jZW5kaWYKKyAgICAgICBjIDwgMTI4ICYmCiAgICAgICAgKG1kLT5jdHlwZXNbY10gJiBj
dHlwZV93b3JkKSAhPSAwCiAgICAgICAgKQogICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsK
QEAgLTE0MzAsOTMgKzkwNiwxMyBAQCBmb3IgKDs7KQogICAgIGlmIChlcHRyID49IG1kLT5lbmRf
c3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICBHRVRDSEFSSU5DVEVTVChjLCBl
cHRyKTsKICAgICBpZiAoCi0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgICAgYyA+PSAyNTYgfHwK
LSNlbmRpZgorICAgICAgIGMgPj0gMTI4IHx8CiAgICAgICAgKG1kLT5jdHlwZXNbY10gJiBjdHlw
ZV93b3JkKSA9PSAwCiAgICAgICAgKQogICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAg
ICBlY29kZSsrOwogICAgIGJyZWFrOwogCi0jaWYgIUpBVkFTQ1JJUFQKLSNpZmRlZiBTVVBQT1JU
X1VDUAotICAgIC8qIENoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciBieSBVbmljb2RlIHByb3BlcnR5
LiBXZSB3aWxsIGdldCBoZXJlIG9ubHkKLSAgICBpZiB0aGUgc3VwcG9ydCBpcyBpbiB0aGUgYmlu
YXJ5OyBvdGhlcndpc2UgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiAqLwotCi0gICAgY2Fz
ZSBPUF9QUk9QOgotICAgIGNhc2UgT1BfTk9UUFJPUDoKLSAgICBpZiAoZXB0ciA+PSBtZC0+ZW5k
X3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgR0VUQ0hBUklOQ1RFU1QoYywg
ZXB0cik7Ci0gICAgICB7Ci0gICAgICBpbnQgY2hhcnR5cGUsIHNjcmlwdDsKLSAgICAgIGludCBj
YXRlZ29yeSA9IF9wY3JlX3VjcF9maW5kcHJvcChjLCAmY2hhcnR5cGUsICZzY3JpcHQpOwotCi0g
ICAgICBzd2l0Y2goZWNvZGVbMV0pCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBQVF9BTlk6Ci0g
ICAgICAgIGlmIChvcCA9PSBPUF9OT1RQUk9QKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFBUX0xBTVA6Ci0gICAgICAgIGlmICgoY2hhcnR5
cGUgPT0gdWNwX0x1IHx8Ci0gICAgICAgICAgICAgY2hhcnR5cGUgPT0gdWNwX0xsIHx8Ci0gICAg
ICAgICAgICAgY2hhcnR5cGUgPT0gdWNwX0x0KSA9PSAob3AgPT0gT1BfTk9UUFJPUCkpCi0gICAg
ICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgUFRfR0M6Ci0gICAgICAgIGlmICgoZWNvZGVbMl0gIT0gY2F0ZWdvcnkpID09IChvcCA9
PSBPUF9QUk9QKSkKLSAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFBUX1BDOgotICAgICAgICBpZiAoKGVjb2RlWzJdICE9IGNo
YXJ0eXBlKSA9PSAob3AgPT0gT1BfUFJPUCkpCi0gICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01B
VENIKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBQVF9TQzoKLSAgICAgICAgaWYg
KChlY29kZVsyXSAhPSBzY3JpcHQpID09IChvcCA9PSBPUF9QUk9QKSkKLSAgICAgICAgICBSUkVU
VVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICBSUkVUVVJOKFBDUkVfRVJST1JfSU5URVJOQUwpOwotICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICBlY29kZSArPSAzOwotICAgICAgfQotICAgIGJyZWFrOwotCi0gICAg
LyogTWF0Y2ggYW4gZXh0ZW5kZWQgVW5pY29kZSBzZXF1ZW5jZS4gV2Ugd2lsbCBnZXQgaGVyZSBv
bmx5IGlmIHRoZSBzdXBwb3J0Ci0gICAgaXMgaW4gdGhlIGJpbmFyeTsgb3RoZXJ3aXNlIGEgY29t
cGlsZS10aW1lIGVycm9yIG9jY3Vycy4gKi8KLQotICAgIGNhc2UgT1BfRVhUVU5JOgotICAgIGlm
IChlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICBH
RVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKLSAgICAgIHsKLSAgICAgIGludCBjaGFydHlwZSwgc2Ny
aXB0OwotICAgICAgaW50IGNhdGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZjaGFydHlw
ZSwgJnNjcmlwdCk7Ci0gICAgICBpZiAoY2F0ZWdvcnkgPT0gdWNwX00pIFJSRVRVUk4oTUFUQ0hf
Tk9NQVRDSCk7Ci0gICAgICB3aGlsZSAoZXB0ciA8IG1kLT5lbmRfc3ViamVjdCkKLSAgICAgICAg
ewotICAgICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgaWYgKCF1dGY4KSBjID0gKmVwdHI7IGVs
c2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOwotICAg
ICAgICAgIH0KLSAgICAgICAgY2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJmNoYXJ0
eXBlLCAmc2NyaXB0KTsKLSAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHVjcF9NKSBicmVhazsKLSAg
ICAgICAgZXB0ciArPSBsZW47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICBlY29kZSsrOwotICAg
IGJyZWFrOwotI2VuZGlmCi0jZW5kaWYKLQotCiAgICAgLyogTWF0Y2ggYSBiYWNrIHJlZmVyZW5j
ZSwgcG9zc2libHkgcmVwZWF0ZWRseS4gTG9vayBwYXN0IHRoZSBlbmQgb2YgdGhlCiAgICAgaXRl
bSB0byBzZWUgaWYgdGhlcmUgaXMgcmVwZWF0IGluZm9ybWF0aW9uIGZvbGxvd2luZy4gVGhlIGNv
ZGUgaXMgc2ltaWxhcgogICAgIHRvIHRoYXQgZm9yIGNoYXJhY3RlciBjbGFzc2VzLCBidXQgcmVw
ZWF0ZWQgZm9yIGVmZmljaWVuY3kuIFRoZW4gb2JleQpAQCAtMTUzNiwxMSArOTMyLDcgQEAgZm9y
ICg7OykKICAgICAgIG1pbmltYS4gKi8KIAogICAgICAgbGVuZ3RoID0gKG9mZnNldCA+PSBvZmZz
ZXRfdG9wIHx8IG1kLT5vZmZzZXRfdmVjdG9yW29mZnNldF0gPCAwKT8KLSNpZiBKQVZBU0NSSVBU
Ci0gICAgICAgIDAgOiAvKiBpbiBKYXZhU2NyaXB0IHRoZXNlIG1hdGNoIHRoZSBlbXB0eSBzdHJp
bmcgKi8KLSNlbHNlCi0gICAgICAgIG1kLT5lbmRfc3ViamVjdCAtIGVwdHIgKyAxIDoKLSNlbmRp
ZgorICAgICAgICAwIDoKICAgICAgICAgbWQtPm9mZnNldF92ZWN0b3Jbb2Zmc2V0KzFdIC0gbWQt
Pm9mZnNldF92ZWN0b3Jbb2Zmc2V0XTsKIAogICAgICAgLyogU2V0IHVwIGZvciByZXBldGl0aW9u
LCBvciBoYW5kbGUgdGhlIG5vbi1yZXBlYXRlZCBjYXNlICovCkBAIC0xNTcwLDcgKzk2Miw3IEBA
IGZvciAoOzspCiAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgLyogTm8gcmVwZWF0IGZvbGxvd3MgKi8KLSAgICAgICAgaWYgKCFtYXRjaF9yZWYob2Zmc2V0
LCBlcHRyLCBsZW5ndGgsIG1kLCBpbXMpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAg
ICBpZiAoIW1hdGNoX3JlZihvZmZzZXQsIGVwdHIsIGxlbmd0aCwgbWQpKSBSUkVUVVJOKE1BVENI
X05PTUFUQ0gpOwogICAgICAgICBlcHRyICs9IGxlbmd0aDsKICAgICAgICAgY29udGludWU7ICAg
ICAgICAgICAgICAvKiBXaXRoIHRoZSBtYWluIGxvb3AgKi8KICAgICAgICAgfQpAQCAtMTU4Niw3
ICs5NzgsNyBAQCBmb3IgKDs7KQogCiAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQog
ICAgICAgICB7Ci0gICAgICAgIGlmICghbWF0Y2hfcmVmKG9mZnNldCwgZXB0ciwgbGVuZ3RoLCBt
ZCwgaW1zKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgaWYgKCFtYXRjaF9yZWYo
b2Zmc2V0LCBlcHRyLCBsZW5ndGgsIG1kKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAg
ICAgZXB0ciArPSBsZW5ndGg7CiAgICAgICAgIH0KIApAQCAtMTYwMSw5ICs5OTMsOSBAQCBmb3Ig
KDs7KQogICAgICAgICB7CiAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQogICAgICAgICAg
IHsKLSAgICAgICAgICBSTUFUQ0goMjAsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1k
LCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICBSTUFUQ0goMjAsIHJyYywgZWNvZGUsIGVwdHJi
LCAwKTsKICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsK
LSAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8ICFtYXRjaF9yZWYob2Zmc2V0LCBlcHRyLCBsZW5n
dGgsIG1kLCBpbXMpKQorICAgICAgICAgIGlmIChmaSA+PSBtYXggfHwgIW1hdGNoX3JlZihvZmZz
ZXQsIGVwdHIsIGxlbmd0aCwgbWQpKQogICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENI
KTsKICAgICAgICAgICBlcHRyICs9IGxlbmd0aDsKICAgICAgICAgICB9CkBAIC0xNjE3LDEyICsx
MDA5LDEyIEBAIGZvciAoOzspCiAgICAgICAgIHBwID0gZXB0cjsKICAgICAgICAgZm9yIChpID0g
bWluOyBpIDwgbWF4OyBpKyspCiAgICAgICAgICAgewotICAgICAgICAgIGlmICghbWF0Y2hfcmVm
KG9mZnNldCwgZXB0ciwgbGVuZ3RoLCBtZCwgaW1zKSkgYnJlYWs7CisgICAgICAgICAgaWYgKCFt
YXRjaF9yZWYob2Zmc2V0LCBlcHRyLCBsZW5ndGgsIG1kKSkgYnJlYWs7CiAgICAgICAgICAgZXB0
ciArPSBsZW5ndGg7CiAgICAgICAgICAgfQogICAgICAgICB3aGlsZSAoZXB0ciA+PSBwcCkKICAg
ICAgICAgICB7Ci0gICAgICAgICAgUk1BVENIKDIxLCBycmMsIGVwdHIsIGVjb2RlLCBvZmZzZXRf
dG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7CisgICAgICAgICAgUk1BVENIKDIxLCBycmMsIGVjb2Rl
LCBlcHRyYiwgMCk7CiAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJO
KHJyYyk7CiAgICAgICAgICAgZXB0ciAtPSBsZW5ndGg7CiAgICAgICAgICAgfQpAQCAtMTY4MSw5
ICsxMDczLDYgQEAgZm9yICg7OykKIAogICAgICAgLyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11
bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gKi8KIAotI2lmZGVmIFNVUFBPUlRfVVRG
OAotICAgICAgLyogVVRGLTggbW9kZSAqLwotICAgICAgaWYgKHV0ZjgpCiAgICAgICAgIHsKICAg
ICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKICAgICAgICAgICB7CkBAIC0xNjk5LDE3
ICsxMDg4LDYgQEAgZm9yICg7OykKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgLyogTm90IFVURi04IG1vZGUgKi8KLSAgICAg
ICAgewotICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQotICAgICAgICAgIHsKLSAg
ICAgICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRD
SCk7Ci0gICAgICAgICAgYyA9ICplcHRyKys7Ci0gICAgICAgICAgaWYgKChkYXRhW2MvOF0gJiAo
MSA8PCAoYyY3KSkpID09IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9CiAKICAgICAgIC8qIElmIG1heCA9PSBtaW4gd2UgY2FuIGNvbnRpbnVlIHdpdGgg
dGhlIG1haW4gbG9vcCB3aXRob3V0IHRoZQogICAgICAgbmVlZCB0byByZWN1cnNlLiAqLwpAQCAt
MTcyMSwxMyArMTA5OSwxMCBAQCBmb3IgKDs7KQogCiAgICAgICBpZiAobWluaW1pemUpCiAgICAg
ICAgIHsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICAgLyogVVRGLTggbW9kZSAqLwotICAg
ICAgICBpZiAodXRmOCkKICAgICAgICAgICB7CiAgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZp
KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goMjIsIHJyYywgZXB0ciwgZWNv
ZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICAgIFJNQVRDSCgy
MiwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9O
T01BVENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8IGVwdHIg
Pj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICAgICAg
R0VUQ0hBUklOQyhjLCBlcHRyKTsKQEAgLTE3NDEsMTkgKzExMTYsNiBAQCBmb3IgKDs7KQogICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICBlbHNlCi0j
ZW5kaWYKLSAgICAgICAgLyogTm90IFVURi04IG1vZGUgKi8KLSAgICAgICAgICB7Ci0gICAgICAg
ICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFU
Q0goMjMsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsK
LSAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAg
ICAgICAgICAgaWYgKGZpID49IG1heCB8fCBlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVS
TihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgICAgIGMgPSAqZXB0cisrOwotICAgICAgICAgICAg
aWYgKChkYXRhW2MvOF0gJiAoMSA8PCAoYyY3KSkpID09IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRD
SCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQogICAgICAgICAvKiBDb250cm9sIG5ldmVy
IGdldHMgaGVyZSAqLwogICAgICAgICB9CiAKQEAgLTE3NjMsOSArMTEyNSw2IEBAIGZvciAoOzsp
CiAgICAgICAgIHsKICAgICAgICAgcHAgPSBlcHRyOwogCi0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0g
ICAgICAgIC8qIFVURi04IG1vZGUgKi8KLSAgICAgICAgaWYgKHV0ZjgpCiAgICAgICAgICAgewog
ICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQogICAgICAgICAgICAgewpAQCAt
MTc4NCwzMSArMTE0MywxMiBAQCBmb3IgKDs7KQogICAgICAgICAgICAgfQogICAgICAgICAgIGZv
ciAoOzspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goMjQsIHJyYywgZXB0ciwg
ZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICAgIFJNQVRD
SCgyNCwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRD
SF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgICAgICBpZiAoZXB0ci0tID09IHBwKSBi
cmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCiAgICAgICAg
ICAgICBCQUNLQ0hBUihlcHRyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSNlbmRpZgotICAgICAgICAgIC8qIE5vdCBVVEYtOCBtb2RlICovCi0gICAgICAgICAg
ewotICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBicmVhazsKLSAgICAgICAg
ICAgIGMgPSAqZXB0cjsKLSAgICAgICAgICAgIGlmICgoZGF0YVtjLzhdICYgKDEgPDwgKGMmNykp
KSA9PSAwKSBicmVhazsKLSAgICAgICAgICAgIGVwdHIrKzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB3aGlsZSAoZXB0ciA+PSBwcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIFJNQVRD
SCgyNSwgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwot
ICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAg
ICAgICAgICBlcHRyLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCiAgICAgICAgIFJS
RVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE4MTgsNyArMTE1
OCw2IEBAIGZvciAoOzspCiAgICAgLyogTWF0Y2ggYW4gZXh0ZW5kZWQgY2hhcmFjdGVyIGNsYXNz
LiBUaGlzIG9wY29kZSBpcyBlbmNvdW50ZXJlZCBvbmx5CiAgICAgaW4gVVRGLTggbW9kZSwgYmVj
YXVzZSB0aGF0J3MgdGhlIG9ubHkgdGltZSBpdCBpcyBjb21waWxlZC4gKi8KIAotI2lmZGVmIFNV
UFBPUlRfVVRGOAogICAgIGNhc2UgT1BfWENMQVNTOgogICAgICAgewogICAgICAgZGF0YSA9IGVj
b2RlICsgMSArIExJTktfU0laRTsgICAgICAgICAgICAgICAgLyogU2F2ZSBmb3IgbWF0Y2hpbmcg
Ki8KQEAgLTE4NzQsNyArMTIxMyw3IEBAIGZvciAoOzspCiAgICAgICAgIHsKICAgICAgICAgZm9y
IChmaSA9IG1pbjs7IGZpKyspCiAgICAgICAgICAgewotICAgICAgICAgIFJNQVRDSCgyNiwgcnJj
LCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOworICAgICAgICAg
IFJNQVRDSCgyNiwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgIGlmIChycmMgIT0g
TUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgICAgIGlmIChmaSA+PSBtYXggfHwg
ZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAg
ICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKQEAgLTE4OTgsNyArMTIzNyw3IEBAIGZvciAoOzspCiAg
ICAgICAgICAgfQogICAgICAgICBmb3IoOzspCiAgICAgICAgICAgewotICAgICAgICAgIFJNQVRD
SCgyNywgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwor
ICAgICAgICAgIFJNQVRDSCgyNywgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgIGlm
IChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgICAgIGlmIChlcHRy
LS0gPT0gcHApIGJyZWFrOyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3Mg
Ki8KICAgICAgICAgICBCQUNLQ0hBUihlcHRyKQpAQCAtMTkwOCwxOCArMTI0NywxNCBAQCBmb3Ig
KDs7KQogCiAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLwogICAgICAgfQotI2Vu
ZGlmICAgIC8qIEVuZCBvZiBYQ0xBU1MgKi8KIAogICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJh
Y3RlciwgY2FzZWZ1bGx5ICovCiAKICAgICBjYXNlIE9QX0NIQVI6Ci0jaWZkZWYgU1VQUE9SVF9V
VEY4Ci0gICAgaWYgKHV0ZjgpCiAgICAgICB7CiAgICAgICBsZW5ndGggPSAxOwogICAgICAgZWNv
ZGUrKzsKICAgICAgIEdFVFVURjhDSEFSTEVOKGZjLCBlY29kZSwgbGVuZ3RoKTsKLSNpZiBQQ1JF
X1VURjE2CiAgICAgICB7CiAgICAgICAgIGludCBkYzsKICAgICAgICAgZWNvZGUgKz0gbGVuZ3Ro
OwpAQCAtMTkzNyw1MSArMTI3MiwyOCBAQCBmb3IgKDs7KQogICAgICAgICB9CiAgICAgICAgIGlm
IChmYyAhPSBkYykgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAgfSAgCi0jZWxzZQotICAg
ICAgaWYgKGxlbmd0aCA+IG1kLT5lbmRfc3ViamVjdCAtIGVwdHIpIFJSRVRVUk4oTUFUQ0hfTk9N
QVRDSCk7Ci0gICAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKSBpZiAoKmVjb2RlKysgIT0gKmVwdHIr
KykgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSNlbmRpZgotICAgICAgfQotICAgIGVsc2UKLSNl
bmRpZgotCi0gICAgLyogTm9uLVVURi04IG1vZGUgKi8KLSAgICAgIHsKLSAgICAgIGlmIChtZC0+
ZW5kX3N1YmplY3QgLSBlcHRyIDwgMSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgIGlm
IChlY29kZVsxXSAhPSAqZXB0cisrKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgZWNv
ZGUgKz0gMjsKICAgICAgIH0KICAgICBicmVhazsKIAogICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNo
YXJhY3RlciwgY2FzZWxlc3NseSAqLwogCiAgICAgY2FzZSBPUF9DSEFSTkM6Ci0jaWZkZWYgU1VQ
UE9SVF9VVEY4Ci0gICAgaWYgKHV0ZjgpCiAgICAgICB7CiAgICAgICBsZW5ndGggPSAxOwogICAg
ICAgZWNvZGUrKzsKICAgICAgIEdFVFVURjhDSEFSTEVOKGZjLCBlY29kZSwgbGVuZ3RoKTsKIAot
I2lmIFBDUkVfVVRGMTYKICAgICAgIGlmIChtZC0+ZW5kX3N1YmplY3QgLSBlcHRyID09IDApIFJS
RVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0jZWxzZQotICAgICAgaWYgKGxlbmd0aCA+IG1kLT5lbmRf
c3ViamVjdCAtIGVwdHIpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0jZW5kaWYKIAogICAgICAg
LyogSWYgdGhlIHBhdHRlcm4gY2hhcmFjdGVyJ3MgdmFsdWUgaXMgPCAxMjgsIHdlIGhhdmUgb25s
eSBvbmUgYnl0ZSwgYW5kCiAgICAgICBjYW4gdXNlIHRoZSBmYXN0IGxvb2t1cCB0YWJsZS4gKi8K
IAogICAgICAgaWYgKGZjIDwgMTI4KQogICAgICAgICB7Ci0jaWYgUENSRV9VVEYxNgogICAgICAg
ICBpbnQgZGM7CiAgICAgICAgIGVjb2RlKys7CiAgICAgICAgIGRjID0gKmVwdHIrKzsKICAgICAg
ICAgaWYgKGRjID49IDEyOCB8fCBtZC0+bGNjW2ZjXSAhPSBtZC0+bGNjW2RjXSkgUlJFVFVSTihN
QVRDSF9OT01BVENIKTsKLSNlbHNlCi0gICAgICAgIGlmIChtZC0+bGNjWyplY29kZSsrXSAhPSBt
ZC0+bGNjWyplcHRyKytdKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotI2VuZGlmCiAgICAgICAg
IH0KIAogICAgICAgLyogT3RoZXJ3aXNlIHdlIG11c3QgcGljayB1cCB0aGUgc3ViamVjdCBjaGFy
YWN0ZXIgKi8KQEAgLTE5ODksMTMgKzEzMDEsMTEgQEAgZm9yICg7OykKICAgICAgIGVsc2UKICAg
ICAgICAgewogICAgICAgICBpbnQgZGM7Ci0jaWYgUENSRV9VVEYxNgogICAgICAgICBpZiAobWQt
PmVuZF9zdWJqZWN0IC0gZXB0ciA9PSAxKSB7CiAgICAgICAgICAgZGMgPSAqZXB0cisrOwogICAg
ICAgICAgIGlmIChJU19MRUFESU5HX1NVUlJPR0FURShkYykpCiAgICAgICAgICAgICBSUkVUVVJO
KE1BVENIX05PTUFUQ0gpOwogICAgICAgICB9IGVsc2UKLSNlbmRpZgogICAgICAgICBHRVRDSEFS
SU5DKGRjLCBlcHRyKTsKICAgICAgICAgZWNvZGUgKz0gbGVuZ3RoOwogCkBAIC0yMDA0LDIyICsx
MzE0LDExIEBAIGZvciAoOzspCiAKICAgICAgICAgaWYgKGZjICE9IGRjKQogICAgICAgICAgIHsK
LSNpZmRlZiBTVVBQT1JUX1VDUAogICAgICAgICAgIGlmIChkYyAhPSBfcGNyZV91Y3Bfb3RoZXJj
YXNlKGZjKSkKLSNlbmRpZgogICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLSAgICBlbHNlCi0jZW5kaWYgICAvKiBTVVBQ
T1JUX1VURjggKi8KLQotICAgIC8qIE5vbi1VVEYtOCBtb2RlICovCi0gICAgICB7Ci0gICAgICBp
ZiAobWQtPmVuZF9zdWJqZWN0IC0gZXB0ciA8IDEpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0g
ICAgICBpZiAobWQtPmxjY1tlY29kZVsxXV0gIT0gbWQtPmxjY1sqZXB0cisrXSkgUlJFVFVSTihN
QVRDSF9OT01BVENIKTsKLSAgICAgIGVjb2RlICs9IDI7Ci0gICAgICB9CiAgICAgYnJlYWs7CiAK
ICAgICAvKiBNYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIgcmVwZWF0ZWRseTsgZGlmZmVyZW50IG9w
Y29kZXMgc2hhcmUgY29kZS4gKi8KQEAgLTIwNTQsOCArMTM1Myw2IEBAIGZvciAoOzspCiAgICAg
dGhlIHN1YmplY3QuICovCiAKICAgICBSRVBFQVRDSEFSOgotI2lmZGVmIFNVUFBPUlRfVVRGOAot
I2lmIFBDUkVfVVRGMTYKIAogICAgICAgbGVuZ3RoID0gMTsKICAgICAgIEdFVFVURjhDSEFSTEVO
KGZjLCBlY29kZSwgbGVuZ3RoKTsKQEAgLTIwNjUsNyArMTM2Miw3IEBAIGZvciAoOzspCiAKICAg
ICAgIGlmIChmYyA8PSAweEZGRkYpCiAgICAgICAgIHsKLSAgICAgICAgaW50IG90aGVyY2FzZSA9
IChpbXMgJiBQQ1JFX0NBU0VMRVNTKSA9PSAwID8gLTEgOiBfcGNyZV91Y3Bfb3RoZXJjYXNlKGZj
KTsKKyAgICAgICAgaW50IG90aGVyY2FzZSA9IG1kLT5jYXNlbGVzcyA/IF9wY3JlX3VjcF9vdGhl
cmNhc2UoZmMpIDogLTE7CiAKICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKICAg
ICAgICAgICB7CkBAIC0yMDgwLDcgKzEzNzcsNyBAQCBmb3IgKDs7KQogICAgICAgICAgIHJlcGVh
dF9vdGhlcmNhc2UgPSBvdGhlcmNhc2U7CiAgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goMjgsIHJyYywgZXB0ciwgZWNvZGUs
IG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICAgIFJNQVRDSCgyOCwg
cnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01B
VENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8IGVwdHIgPj0g
bWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICAgICAgaWYg
KCplcHRyICE9IGZjICYmICplcHRyICE9IHJlcGVhdF9vdGhlcmNhc2UpIFJSRVRVUk4oTUFUQ0hf
Tk9NQVRDSCk7CkBAIC0yMDk5LDcgKzEzOTYsNyBAQCBmb3IgKDs7KQogICAgICAgICAgICAgfQog
ICAgICAgICAgIHdoaWxlIChlcHRyID49IHBwKQogICAgICAgICAgICB7Ci0gICAgICAgICAgIFJN
QVRDSCgyOSwgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDAp
OworICAgICAgICAgICBSTUFUQ0goMjksIHJyYywgZWNvZGUsIGVwdHJiLCAwKTsKICAgICAgICAg
ICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgICAgIC0t
ZXB0cjsKICAgICAgICAgICAgfQpAQCAtMjEyNiw3ICsxNDIzLDcgQEAgZm9yICg7OykKICAgICAg
ICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGlu
dCBuYzsKLSAgICAgICAgICAgIFJNQVRDSCgzMCwgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3Rv
cCwgbWQsIGltcywgZXB0cmIsIDApOworICAgICAgICAgICAgUk1BVENIKDMwLCBycmMsIGVjb2Rl
LCBlcHRyYiwgMCk7CiAgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRV
Uk4ocnJjKTsKICAgICAgICAgICAgIGlmIChmaSA+PSBtYXggfHwgZXB0ciA+PSBtZC0+ZW5kX3N1
YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAgICAgICBHRVRDSEFSKG5jLCBl
cHRyKTsKQEAgLTIxNDgsNyArMTQ0NSw3IEBAIGZvciAoOzspCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgd2hpbGUgKGVwdHIgPj0gcHApCiAgICAgICAgICAgIHsKLSAgICAgICAgICAgUk1BVENI
KDMxLCBycmMsIGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Cisg
ICAgICAgICAgIFJNQVRDSCgzMSwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICBp
ZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKICAgICAgICAgICAgZXB0ciAt
PSAyOwogICAgICAgICAgICB9CkBAIC0yMTU4LDE4OSArMTQ1NSw2IEBAIGZvciAoOzspCiAgICAg
ICAgIH0KICAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KICAgICAgICAgfQot
I2Vsc2UKLSAgICBpZiAodXRmOCkKLSAgICAgIHsKLSAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICBj
aGFycHRyID0gZWNvZGU7Ci0gICAgICBHRVRDSEFSTEVOKGZjLCBlY29kZSwgbGVuZ3RoKTsKLSAg
ICAgIGlmIChtaW4gKiBsZW5ndGggPiBtZC0+ZW5kX3N1YmplY3QgLSBlcHRyKSBSUkVUVVJOKE1B
VENIX05PTUFUQ0gpOwotICAgICAgZWNvZGUgKz0gbGVuZ3RoOwotCi0gICAgICAvKiBIYW5kbGUg
bXVsdGlieXRlIGNoYXJhY3RlciBtYXRjaGluZyBzcGVjaWFsbHkgaGVyZS4gVGhlcmUgaXMKLSAg
ICAgIHN1cHBvcnQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nIGlmIFVDUCBzdXBwb3J0IGlzIHByZXNl
bnQuICovCi0KLSAgICAgIGlmIChsZW5ndGggPiAxKQotICAgICAgICB7Ci0gICAgICAgIGludCBv
Y2xlbmd0aCA9IDA7Ci0gICAgICAgIHVzY2hhciBvY2NoYXJzWzhdOwotCi0jaWZkZWYgU1VQUE9S
VF9VQ1AKLSAgICAgICAgaW50IG90aGVyY2FzZTsKLSAgICAgICAgaWYgKChpbXMgJiBQQ1JFX0NB
U0VMRVNTKSAhPSAwICYmCi0gICAgICAgICAgICAob3RoZXJjYXNlID0gX3BjcmVfdWNwX290aGVy
Y2FzZShmYykpID49IDAgJiYKLSAgICAgICAgICAgICBvdGhlcmNhc2UgPj0gMCkKLSAgICAgICAg
ICBvY2xlbmd0aCA9IF9wY3JlX29yZDJ1dGY4KG90aGVyY2FzZSwgb2NjaGFycyk7Ci0jZW5kaWYg
IC8qIFNVUFBPUlRfVUNQICovCi0KLSAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykK
LSAgICAgICAgICB7Ci0gICAgICAgICAgaWYgKG1lbWNtcChlcHRyLCBjaGFycHRyLCBsZW5ndGgp
ID09IDApIGVwdHIgKz0gbGVuZ3RoOwotICAgICAgICAgIC8qIE5lZWQgYnJhY2VzIGJlY2F1c2Ug
b2YgZm9sbG93aW5nIGVsc2UgKi8KLSAgICAgICAgICBlbHNlIGlmIChvY2xlbmd0aCA9PSAwKSB7
IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7IH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobWVtY21wKGVwdHIsIG9jY2hhcnMsIG9jbGVuZ3RoKSAhPSAwKSBS
UkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgZXB0ciArPSBvY2xlbmd0aDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmIChtaW5pbWl6ZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZm9y
IChmaSA9IG1pbjs7IGZpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCBibG93IGF3YXkgb2NjaGFycyBhbmQgb2NjbGVuZ3RoIGluIHRoZSBOT19SRUNV
UlNFIGNhc2UuCi0gICAgICAgICAgICBSTUFUQ0goMzIsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNl
dF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKLSAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hf
Tk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICAgICAgaWYgKGZpID49IG1heCB8fCBlcHRy
ID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgICAg
IGlmIChtZW1jbXAoZXB0ciwgY2hhcnB0ciwgbGVuZ3RoKSA9PSAwKSBlcHRyICs9IGxlbmd0aDsK
LSAgICAgICAgICAgIC8qIE5lZWQgYnJhY2VzIGJlY2F1c2Ugb2YgZm9sbG93aW5nIGVsc2UgKi8K
LSAgICAgICAgICAgIGVsc2UgaWYgKG9jbGVuZ3RoID09IDApIHsgUlJFVFVSTihNQVRDSF9OT01B
VENIKTsgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGlmIChtZW1jbXAoZXB0ciwgb2NjaGFycywgb2NsZW5ndGgpICE9IDApIFJSRVRVUk4oTUFUQ0hf
Tk9NQVRDSCk7Ci0gICAgICAgICAgICAgIGVwdHIgKz0gb2NsZW5ndGg7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAq
LwotICAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICBwcCA9
IGVwdHI7Ci0gICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoZXB0ciA+IG1kLT5lbmRfc3ViamVjdCAtIGxlbmd0aCkgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAobWVtY21wKGVwdHIsIGNoYXJwdHIsIGxlbmd0aCkgPT0gMCkg
ZXB0ciArPSBsZW5ndGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChvY2xlbmd0aCA9PSAwKSBicmVh
azsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAo
bWVtY21wKGVwdHIsIG9jY2hhcnMsIG9jbGVuZ3RoKSAhPSAwKSBicmVhazsKLSAgICAgICAgICAg
ICAgZXB0ciArPSBvY2xlbmd0aDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgIHdoaWxlIChlcHRyID49IHBwKQotICAgICAgICAgICB7Ci0gICAgICAgICAgIFJNQVRD
SCgzMywgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwot
ICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAgICAg
ICAgICAgZXB0ciAtPSBsZW5ndGg7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICBSUkVUVVJOKE1B
VENIX05PTUFUQ0gpOwotICAgICAgICAgIH0KLSAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRz
IGhlcmUgKi8KLSAgICAgICAgfQotCi0gICAgICAvKiBJZiB0aGUgbGVuZ3RoIG9mIGEgVVRGLTgg
Y2hhcmFjdGVyIGlzIDEsIHdlIGZhbGwgdGhyb3VnaCBoZXJlLCBhbmQKLSAgICAgIG9iZXkgdGhl
IGNvZGUgYXMgZm9yIG5vbi1VVEYtOCBjaGFyYWN0ZXJzIGJlbG93LCB0aG91Z2ggaW4gdGhpcyBj
YXNlIHRoZQotICAgICAgdmFsdWUgb2YgZmMgd2lsbCBhbHdheXMgYmUgPCAxMjguICovCi0gICAg
ICB9Ci0gICAgZWxzZQotI2VuZGlmCi0jZW5kaWYgIC8qIFNVUFBPUlRfVVRGOCAqLwotCi0jaWYg
IVBDUkVfVVRGMTYKLSAgICAvKiBXaGVuIG5vdCBpbiBVVEYtOCBtb2RlLCBsb2FkIGEgc2luZ2xl
LWJ5dGUgY2hhcmFjdGVyLiAqLwotICAgICAgewotICAgICAgaWYgKG1pbiA+IG1kLT5lbmRfc3Vi
amVjdCAtIGVwdHIpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICBmYyA9ICplY29kZSsr
OwotICAgICAgfQotCi0gICAgLyogVGhlIHZhbHVlIG9mIGZjIGF0IHRoaXMgcG9pbnQgaXMgYWx3
YXlzIGxlc3MgdGhhbiAyNTYsIHRob3VnaCB3ZSBtYXkgb3IKLSAgICBtYXkgbm90IGJlIGluIFVU
Ri04IG1vZGUuIFRoZSBjb2RlIGlzIGR1cGxpY2F0ZWQgZm9yIHRoZSBjYXNlbGVzcyBhbmQKLSAg
ICBjYXNlZnVsIGNhc2VzLCBmb3Igc3BlZWQsIHNpbmNlIG1hdGNoaW5nIGNoYXJhY3RlcnMgaXMg
bGlrZWx5IHRvIGJlIHF1aXRlCi0gICAgY29tbW9uLiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5pbXVt
IG51bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiBJZiBtaW4gPQotICAgIG1heCwgY29udGlu
dWUgYXQgdGhlIHNhbWUgbGV2ZWwgd2l0aG91dCByZWN1cnNpbmcuIE90aGVyd2lzZSwgaWYKLSAg
ICBtaW5pbWl6aW5nLCBrZWVwIHRyeWluZyB0aGUgcmVzdCBvZiB0aGUgZXhwcmVzc2lvbiBhbmQg
YWR2YW5jaW5nIG9uZQotICAgIG1hdGNoaW5nIGNoYXJhY3RlciBpZiBmYWlsaW5nLCB1cCB0byB0
aGUgbWF4aW11bS4gQWx0ZXJuYXRpdmVseSwgaWYKLSAgICBtYXhpbWl6aW5nLCBmaW5kIHRoZSBt
YXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFuZCB3b3JrIGJhY2t3YXJkcy4gKi8KLQotICAg
IERQUklOVEYoKCJtYXRjaGluZyAlY3slZCwlZH0gYWdhaW5zdCBzdWJqZWN0ICUuKnNcbiIsIGZj
LCBtaW4sIG1heCwKLSAgICAgIG1heCwgZXB0cikpOwotCi0gICAgaWYgKChpbXMgJiBQQ1JFX0NB
U0VMRVNTKSAhPSAwKQotICAgICAgewotICAgICAgZmMgPSBtZC0+bGNjW2ZjXTsKLSAgICAgIGZv
ciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgIGlmIChmYyAhPSBtZC0+bGNjWyplcHRy
KytdKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRp
bnVlOwotICAgICAgaWYgKG1pbmltaXplKQotICAgICAgICB7Ci0gICAgICAgIGZvciAoZmkgPSBt
aW47OyBmaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICBSTUFUQ0goMzQsIHJyYywgZXB0ciwg
ZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKLSAgICAgICAgICBpZiAocnJj
ICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAgICAgICAgICBpZiAoZmkgPj0gbWF4
IHx8IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0IHx8Ci0gICAgICAgICAgICAgIGZjICE9IG1kLT5s
Y2NbKmVwdHIrK10pCi0gICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAg
ICAgIH0KLSAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KLSAgICAgICAgfQot
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIHBwID0gZXB0cjsKLSAgICAgICAgZm9yIChp
ID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgIGlmIChlcHRyID49
IG1kLT5lbmRfc3ViamVjdCB8fCBmYyAhPSBtZC0+bGNjWyplcHRyXSkgYnJlYWs7Ci0gICAgICAg
ICAgZXB0cisrOwotICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGVwdHIgPj0gcHApCi0gICAg
ICAgICAgewotICAgICAgICAgIFJNQVRDSCgzNSwgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3Rv
cCwgbWQsIGltcywgZXB0cmIsIDApOwotICAgICAgICAgIGVwdHItLTsKLSAgICAgICAgICBpZiAo
cnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgIH0KLSAgICAgIC8qIENvbnRyb2wgbmV2
ZXIgZ2V0cyBoZXJlICovCi0gICAgICB9Ci0KLSAgICAvKiBDYXNlZnVsIGNvbXBhcmlzb25zIChp
bmNsdWRlcyBhbGwgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzKSAqLwotCi0gICAgZWxzZQotICAgICAg
ewotICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykgaWYgKGZjICE9ICplcHRyKyspIFJS
RVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICBpZiAobWluID09IG1heCkgY29udGludWU7Ci0g
ICAgICBpZiAobWluaW1pemUpCi0gICAgICAgIHsKLSAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZp
KyspCi0gICAgICAgICAgewotICAgICAgICAgIFJNQVRDSCgzNiwgcnJjLCBlcHRyLCBlY29kZSwg
b2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwotICAgICAgICAgIGlmIChycmMgIT0gTUFU
Q0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICAgIGlmIChmaSA+PSBtYXggfHwgZXB0
ciA+PSBtZC0+ZW5kX3N1YmplY3QgfHwgZmMgIT0gKmVwdHIrKykKLSAgICAgICAgICAgIFJSRVRV
Uk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgfQotICAgICAgICAvKiBDb250cm9sIG5ldmVy
IGdldHMgaGVyZSAqLwotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
cHAgPSBlcHRyOwotICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0IHx8IGZjICE9ICplcHRy
KSBicmVhazsKLSAgICAgICAgICBlcHRyKys7Ci0gICAgICAgICAgfQotICAgICAgICB3aGlsZSAo
ZXB0ciA+PSBwcCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgUk1BVENIKDM3LCBycmMsIGVwdHIs
IGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Ci0gICAgICAgICAgZXB0ci0t
OwotICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAg
ICAgICAgIH0KLSAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCi0jZW5kaWYKIAogICAgIC8q
IE1hdGNoIGEgbmVnYXRlZCBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVyLiBUaGUgY2hhcmFjdGVy
IHdlIGFyZQogICAgIGNoZWNraW5nIGNhbiBiZSBtdWx0aWJ5dGUuICovCkBAIC0yMzQ5LDEyICsx
NDYzLDEwIEBAIGZvciAoOzspCiAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVU
VVJOKE1BVENIX05PTUFUQ0gpOwogICAgIGVjb2RlKys7CiAgICAgR0VUQ0hBUklOQ1RFU1QoYywg
ZXB0cik7Ci0gICAgaWYgKChpbXMgJiBQQ1JFX0NBU0VMRVNTKSAhPSAwKQorICAgIGlmIChtZC0+
Y2FzZWxlc3MpCiAgICAgICB7Ci0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgICBpZiAoYyA8IDI1
NikKLSNlbmRpZgotICAgICAgYyA9IG1kLT5sY2NbY107CisgICAgICBpZiAoYyA8IDEyOCkKKyAg
ICAgICAgYyA9IG1kLT5sY2NbY107CiAgICAgICBpZiAobWQtPmxjY1sqZWNvZGUrK10gPT0gYykg
UlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAgIH0KICAgICBlbHNlCkBAIC0yNDExLDY5ICsx
NTIzLDM4IEBAIGZvciAoOzspCiAgICAgbWF4aW11bS4gQWx0ZXJuYXRpdmVseSwgaWYgbWF4aW1p
emluZywgZmluZCB0aGUgbWF4aW11bSBudW1iZXIgb2YKICAgICBjaGFyYWN0ZXJzIGFuZCB3b3Jr
IGJhY2t3YXJkcy4gKi8KIAotI2lmIFBDUkVfVVRGMTYKICAgICBEUFJJTlRGKCgibmVnYXRpdmUg
bWF0Y2hpbmcgJWN7JWQsJWR9XG4iLCBmYywgbWluLCBtYXgpKTsKLSNlbHNlCi0gICAgRFBSSU5U
RigoIm5lZ2F0aXZlIG1hdGNoaW5nICVjeyVkLCVkfSBhZ2FpbnN0IHN1YmplY3QgJS4qc1xuIiwg
ZmMsIG1pbiwgbWF4LAotICAgICAgbWF4LCBlcHRyKSk7Ci0jZW5kaWYKIAotICAgIGlmICgoaW1z
ICYgUENSRV9DQVNFTEVTUykgIT0gMCkKKyAgICBpZiAobWQtPmNhc2VsZXNzKQogICAgICAgewog
ICAgICAgZmMgPSBtZC0+bGNjW2ZjXTsKIAotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgLyog
VVRGLTggbW9kZSAqLwotICAgICAgaWYgKHV0ZjgpCiAgICAgICAgIHsKICAgICAgICAgcmVnaXN0
ZXIgaW50IGQ7CiAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCiAgICAgICAgICAg
ewogICAgICAgICAgIEdFVENIQVJJTkMoZCwgZXB0cik7Ci0gICAgICAgICAgaWYgKGQgPCAyNTYp
IGQgPSBtZC0+bGNjW2RdOworICAgICAgICAgIGlmIChkIDwgMTI4KSBkID0gbWQtPmxjY1tkXTsK
ICAgICAgICAgICBpZiAoZmMgPT0gZCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgIGVsc2UKLSNlbmRpZgotCi0gICAgICAvKiBOb3QgVVRGLTgg
bW9kZSAqLwotICAgICAgICB7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCi0g
ICAgICAgICAgaWYgKGZjID09IG1kLT5sY2NbKmVwdHIrK10pIFJSRVRVUk4oTUFUQ0hfTk9NQVRD
SCk7Ci0gICAgICAgIH0KIAogICAgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRpbnVlOwogCiAgICAg
ICBpZiAobWluaW1pemUpCiAgICAgICAgIHsKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICAg
LyogVVRGLTggbW9kZSAqLwotICAgICAgICBpZiAodXRmOCkKICAgICAgICAgICB7CiAgICAgICAg
ICAgcmVnaXN0ZXIgaW50IGQ7CiAgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goMzgsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNl
dF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICAgIFJNQVRDSCgzOCwgcnJjLCBl
Y29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBS
UkVUVVJOKHJyYyk7CiAgICAgICAgICAgICBHRVRDSEFSSU5DKGQsIGVwdHIpOwotICAgICAgICAg
ICAgaWYgKGQgPCAyNTYpIGQgPSBtZC0+bGNjW2RdOworICAgICAgICAgICAgaWYgKGQgPCAxMjgp
IGQgPSBtZC0+bGNjW2RdOwogICAgICAgICAgICAgaWYgKGZpID49IG1heCB8fCBlcHRyID49IG1k
LT5lbmRfc3ViamVjdCB8fCBmYyA9PSBkKQogICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05P
TUFUQ0gpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgZWxzZQotI2VuZGlm
Ci0gICAgICAgIC8qIE5vdCBVVEYtOCBtb2RlICovCi0gICAgICAgICAgewotICAgICAgICAgIGZv
ciAoZmkgPSBtaW47OyBmaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgUk1BVENIKDM5
LCBycmMsIGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Ci0gICAg
ICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKLSAgICAgICAg
ICAgIGlmIChmaSA+PSBtYXggfHwgZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QgfHwgZmMgPT0gbWQt
PmxjY1sqZXB0cisrXSkKLSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9CiAgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBo
ZXJlICovCiAgICAgICAgIH0KIApAQCAtMjQ4Myw5ICsxNTY0LDYgQEAgZm9yICg7OykKICAgICAg
ICAgewogICAgICAgICBwcCA9IGVwdHI7CiAKLSNpZmRlZiBTVVBQT1JUX1VURjgKLSAgICAgICAg
LyogVVRGLTggbW9kZSAqLwotICAgICAgICBpZiAodXRmOCkKICAgICAgICAgICB7CiAgICAgICAg
ICAgcmVnaXN0ZXIgaW50IGQ7CiAgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKysp
CkBAIC0yNDkzLDM0ICsxNTcxLDE4IEBAIGZvciAoOzspCiAgICAgICAgICAgICBpbnQgbGVuID0g
MTsKICAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgYnJlYWs7CiAgICAg
ICAgICAgICBHRVRDSEFSTEVOKGQsIGVwdHIsIGxlbik7Ci0gICAgICAgICAgICBpZiAoZCA8IDI1
NikgZCA9IG1kLT5sY2NbZF07CisgICAgICAgICAgICBpZiAoZCA8IDEyOCkgZCA9IG1kLT5sY2Nb
ZF07CiAgICAgICAgICAgICBpZiAoZmMgPT0gZCkgYnJlYWs7CiAgICAgICAgICAgICBlcHRyICs9
IGxlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICBmb3IoOzspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICBSTUFUQ0goNDAsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBp
bXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICAgIFJNQVRDSCg0MCwgcnJjLCBlY29kZSwgZXB0cmIs
IDApOwogICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7
CiAgICAgICAgICAgICBpZiAoZXB0ci0tID09IHBwKSBicmVhazsgICAgICAgIC8qIFN0b3AgaWYg
dHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCiAgICAgICAgICAgICBCQUNLQ0hBUihlcHRyKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAv
KiBOb3QgVVRGLTggbW9kZSAqLwotICAgICAgICAgIHsKLSAgICAgICAgICBmb3IgKGkgPSBtaW47
IGkgPCBtYXg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcHRyID49IG1k
LT5lbmRfc3ViamVjdCB8fCBmYyA9PSBtZC0+bGNjWyplcHRyXSkgYnJlYWs7Ci0gICAgICAgICAg
ICBlcHRyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgd2hpbGUgKGVwdHIgPj0gcHApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goNDEsIHJyYywgZXB0ciwgZWNvZGUsIG9m
ZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKLSAgICAgICAgICAgIGlmIChycmMgIT0gTUFU
Q0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICAgICAgZXB0ci0tOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0KIAogICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAg
ICAgICB9CkBAIC0yNTMxLDkgKzE1OTMsNiBAQCBmb3IgKDs7KQogCiAgICAgZWxzZQogICAgICAg
ewotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgLyogVVRGLTggbW9kZSAqLwotICAgICAgaWYg
KHV0ZjgpCiAgICAgICAgIHsKICAgICAgICAgcmVnaXN0ZXIgaW50IGQ7CiAgICAgICAgIGZvciAo
aSA9IDE7IGkgPD0gbWluOyBpKyspCkBAIC0yNTQyLDQ0ICsxNjAxLDIyIEBAIGZvciAoOzspCiAg
ICAgICAgICAgaWYgKGZjID09IGQpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICBlbHNlCi0jZW5kaWYKLSAgICAgIC8qIE5vdCBVVEYtOCBtb2Rl
ICovCi0gICAgICAgIHsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKLSAgICAg
ICAgICBpZiAoZmMgPT0gKmVwdHIrKykgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAg
fQogCiAgICAgICBpZiAobWluID09IG1heCkgY29udGludWU7CiAKICAgICAgIGlmIChtaW5pbWl6
ZSkKICAgICAgICAgewotI2lmZGVmIFNVUFBPUlRfVVRGOAotICAgICAgICAvKiBVVEYtOCBtb2Rl
ICovCi0gICAgICAgIGlmICh1dGY4KQogICAgICAgICAgIHsKICAgICAgICAgICByZWdpc3RlciBp
bnQgZDsKICAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIFJNQVRDSCg0MiwgcnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGlt
cywgZXB0cmIsIDApOworICAgICAgICAgICAgUk1BVENIKDQyLCBycmMsIGVjb2RlLCBlcHRyYiwg
MCk7CiAgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsK
ICAgICAgICAgICAgIEdFVENIQVJJTkMoZCwgZXB0cik7CiAgICAgICAgICAgICBpZiAoZmkgPj0g
bWF4IHx8IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0IHx8IGZjID09IGQpCiAgICAgICAgICAgICAg
IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAg
ICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgLyogTm90IFVURi04IG1vZGUgKi8KLSAgICAgICAg
ICB7Ci0gICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBSTUFUQ0goNDMsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMs
IGVwdHJiLCAwKTsKLSAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVS
TihycmMpOwotICAgICAgICAgICAgaWYgKGZpID49IG1heCB8fCBlcHRyID49IG1kLT5lbmRfc3Vi
amVjdCB8fCBmYyA9PSAqZXB0cisrKQotICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFU
Q0gpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KICAgICAgICAgLyogQ29udHJvbCBuZXZl
ciBnZXRzIGhlcmUgKi8KICAgICAgICAgfQogCkBAIC0yNTg5LDkgKzE2MjYsNiBAQCBmb3IgKDs7
KQogICAgICAgICB7CiAgICAgICAgIHBwID0gZXB0cjsKIAotI2lmZGVmIFNVUFBPUlRfVVRGOAot
ICAgICAgICAvKiBVVEYtOCBtb2RlICovCi0gICAgICAgIGlmICh1dGY4KQogICAgICAgICAgIHsK
ICAgICAgICAgICByZWdpc3RlciBpbnQgZDsKICAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBt
YXg7IGkrKykKQEAgLTI2MDQsMjggKzE2MzgsMTIgQEAgZm9yICg7OykKICAgICAgICAgICAgIH0K
ICAgICAgICAgICBmb3IoOzspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0goNDQs
IHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAg
ICAgICAgIFJNQVRDSCg0NCwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgICAgaWYg
KHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CiAgICAgICAgICAgICBpZiAoZXB0
ci0tID09IHBwKSBicmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9z
ICovCiAgICAgICAgICAgICBCQUNLQ0hBUihlcHRyKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAvKiBOb3QgVVRGLTggbW9kZSAqLwot
ICAgICAgICAgIHsKLSAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3ViamVjdCB8fCBmYyA9
PSAqZXB0cikgYnJlYWs7Ci0gICAgICAgICAgICBlcHRyKys7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgd2hpbGUgKGVwdHIgPj0gcHApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFU
Q0goNDUsIHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsK
LSAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAg
ICAgICAgICAgZXB0ci0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KIAogICAgICAgICBS
UkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICB9CkBAIC0yNjY5LDE4ICsxNjg3LDYgQEAg
Zm9yICg7OykKICAgICBSRVBFQVRUWVBFOgogICAgIGN0eXBlID0gKmVjb2RlKys7ICAgICAgLyog
Q29kZSBmb3IgdGhlIGNoYXJhY3RlciB0eXBlICovCiAKLSNpZiAhSkFWQVNDUklQVAotI2lmZGVm
IFNVUFBPUlRfVUNQCi0gICAgaWYgKGN0eXBlID09IE9QX1BST1AgfHwgY3R5cGUgPT0gT1BfTk9U
UFJPUCkKLSAgICAgIHsKLSAgICAgIHByb3BfZmFpbF9yZXN1bHQgPSBjdHlwZSA9PSBPUF9OT1RQ
Uk9QOwotICAgICAgcHJvcF90eXBlID0gKmVjb2RlKys7Ci0gICAgICBwcm9wX3ZhbHVlID0gKmVj
b2RlKys7Ci0gICAgICB9Ci0gICAgZWxzZSBwcm9wX3R5cGUgPSAtMTsKLSNlbmRpZgotI2VuZGlm
Ci0KICAgICAvKiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGVzIGFy
ZSBwcmVzZW50LiBVc2UgaW5saW5lCiAgICAgY29kZSBmb3IgbWF4aW1pemluZyB0aGUgc3BlZWQs
IGFuZCBkbyB0aGUgdHlwZSB0ZXN0IG9uY2UgYXQgdGhlIHN0YXJ0CiAgICAgKGkuZS4ga2VlcCBp
dCBvdXQgb2YgdGhlIGxvb3ApLiBBbHNvIHdlIGNhbiB0ZXN0IHRoYXQgdGhlcmUgYXJlIGF0IGxl
YXN0CkBAIC0yNjkyLDEyMSArMTY5OCwxOCBAQCBmb3IgKDs7KQogICAgIGlmIChtaW4gPiBtZC0+
ZW5kX3N1YmplY3QgLSBlcHRyKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgIGlmIChtaW4g
PiAwKQogICAgICAgewotI2lmICFKQVZBU0NSSVBUCi0jaWZkZWYgU1VQUE9SVF9VQ1AKLSAgICAg
IGlmIChwcm9wX3R5cGUgPj0gMCkKLSAgICAgICAgewotICAgICAgICBzd2l0Y2gocHJvcF90eXBl
KQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIFBUX0FOWToKLSAgICAgICAgICBpZiAocHJv
cF9mYWlsX3Jlc3VsdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgICBmb3IgKGkg
PSAxOyBpIDw9IG1pbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVwdHIg
Pj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAg
R0VUQ0hBUklOQyhjLCBlcHRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGNhc2UgUFRfTEFNUDoKLSAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJq
ZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgR0VUQ0hBUklOQyhjLCBl
cHRyKTsKLSAgICAgICAgICAgIHByb3BfY2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywg
JnByb3BfY2hhcnR5cGUsICZwcm9wX3NjcmlwdCk7Ci0gICAgICAgICAgICBpZiAoKHByb3BfY2hh
cnR5cGUgPT0gdWNwX0x1IHx8Ci0gICAgICAgICAgICAgICAgIHByb3BfY2hhcnR5cGUgPT0gdWNw
X0xsIHx8Ci0gICAgICAgICAgICAgICAgIHByb3BfY2hhcnR5cGUgPT0gdWNwX0x0KSA9PSBwcm9w
X2ZhaWxfcmVzdWx0KQotICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBQVF9HQzoKLSAg
ICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gp
OwotICAgICAgICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKLSAgICAgICAgICAgIHByb3BfY2F0
ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJnByb3BfY2hhcnR5cGUsICZwcm9wX3Njcmlw
dCk7Ci0gICAgICAgICAgICBpZiAoKHByb3BfY2F0ZWdvcnkgPT0gcHJvcF92YWx1ZSkgPT0gcHJv
cF9mYWlsX3Jlc3VsdCkKLSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFRfUEM6Ci0g
ICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENI
KTsKLSAgICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7Ci0gICAgICAgICAgICBwcm9wX2Nh
dGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJvcF9zY3Jp
cHQpOwotICAgICAgICAgICAgaWYgKChwcm9wX2NoYXJ0eXBlID09IHByb3BfdmFsdWUpID09IHBy
b3BfZmFpbF9yZXN1bHQpCi0gICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFBUX1NDOgot
ICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRD
SCk7Ci0gICAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOwotICAgICAgICAgICAgcHJvcF9j
YXRlZ29yeSA9IF9wY3JlX3VjcF9maW5kcHJvcChjLCAmcHJvcF9jaGFydHlwZSwgJnByb3Bfc2Ny
aXB0KTsKLSAgICAgICAgICAgIGlmICgocHJvcF9zY3JpcHQgPT0gcHJvcF92YWx1ZSkgPT0gcHJv
cF9mYWlsX3Jlc3VsdCkKLSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgUlJFVFVSTihQQ1JFX0VSUk9SX0lOVEVSTkFMKTsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgLyogTWF0Y2ggZXh0ZW5kZWQgVW5pY29kZSBz
ZXF1ZW5jZXMuIFdlIHdpbGwgZ2V0IGhlcmUgb25seSBpZiB0aGUKLSAgICAgIHN1cHBvcnQgaXMg
aW4gdGhlIGJpbmFyeTsgb3RoZXJ3aXNlIGEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gKi8K
LQotICAgICAgZWxzZSBpZiAoY3R5cGUgPT0gT1BfRVhUVU5JKQotICAgICAgICB7Ci0gICAgICAg
IGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgIEdFVENI
QVJJTkNURVNUKGMsIGVwdHIpOwotICAgICAgICAgIHByb3BfY2F0ZWdvcnkgPSBfcGNyZV91Y3Bf
ZmluZHByb3AoYywgJnByb3BfY2hhcnR5cGUsICZwcm9wX3NjcmlwdCk7Ci0gICAgICAgICAgaWYg
KHByb3BfY2F0ZWdvcnkgPT0gdWNwX00pIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAg
ICAgd2hpbGUgKGVwdHIgPCBtZC0+ZW5kX3N1YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgICAgIGlmICghdXRmOCkgYyA9ICplcHRyOyBlbHNl
Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4p
OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcm9wX2NhdGVnb3J5ID0gX3BjcmVfdWNw
X2ZpbmRwcm9wKGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQpOwotICAgICAgICAgICAg
aWYgKHByb3BfY2F0ZWdvcnkgIT0gdWNwX00pIGJyZWFrOwotICAgICAgICAgICAgZXB0ciArPSBs
ZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIGVsc2UK
LSNlbmRpZiAgICAgLyogU1VQUE9SVF9VQ1AgKi8KLSNlbmRpZgotCi0vKiBIYW5kbGUgYWxsIG90
aGVyIGNhc2VzIHdoZW4gdGhlIGNvZGluZyBpcyBVVEYtOCAqLwotCi0jaWZkZWYgU1VQUE9SVF9V
VEY4Ci0gICAgICBpZiAodXRmOCkgc3dpdGNoKGN0eXBlKQorICAgICAgc3dpdGNoKGN0eXBlKQog
ICAgICAgICB7CiAgICAgICAgIGNhc2UgT1BfQU5ZOgogICAgICAgICBmb3IgKGkgPSAxOyBpIDw9
IG1pbjsgaSsrKQogICAgICAgICAgIHsKLSAgICAgICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1
YmplY3QgfHwKLSAgICAgICAgICAgICAoSVNfTkVXTElORSgqZXB0cikgJiYgKGltcyAmIFBDUkVf
RE9UQUxMKSA9PSAwKSkKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QgfHwg
SVNfTkVXTElORSgqZXB0cikpCiAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwog
ICAgICAgICAgICsrZXB0cjsKICAgICAgICAgICB3aGlsZSAoZXB0ciA8IG1kLT5lbmRfc3ViamVj
dCAmJiBJU01JRENIQVIoKmVwdHIpKSBlcHRyKys7CiAgICAgICAgICAgfQogICAgICAgICBicmVh
azsKIAotICAgICAgICBjYXNlIE9QX0FOWUJZVEU6Ci0gICAgICAgIGVwdHIgKz0gbWluOwotICAg
ICAgICBicmVhazsKLQogICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKICAgICAgICAgZm9yIChp
ID0gMTsgaSA8PSBtaW47IGkrKykKICAgICAgICAgICB7CkBAIC0yODY4LDI4OCArMTc3MSw2NiBA
QCBmb3IgKDs7KQogICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICBS
UkVUVVJOKFBDUkVfRVJST1JfSU5URVJOQUwpOworICAgICAgICBSUkVUVVJOKEpTX1JFR0VYUF9F
UlJPUl9JTlRFUk5BTCk7CiAgICAgICAgIH0gIC8qIEVuZCBzd2l0Y2goY3R5cGUpICovCi0KLSAg
ICAgIGVsc2UKLSNlbmRpZiAgICAgLyogU1VQUE9SVF9VVEY4ICovCi0KLSAgICAgIC8qIENvZGUg
Zm9yIHRoZSBub24tVVRGLTggY2FzZSBmb3IgbWluaW11bSBtYXRjaGluZyBvZiBvcGVyYXRvcnMg
b3RoZXIKLSAgICAgIHRoYW4gT1BfUFJPUCBhbmQgT1BfTk9UUFJPUC4gKi8KLQotICAgICAgc3dp
dGNoKGN0eXBlKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgT1BfQU5ZOgotICAgICAgICBpZiAo
KGltcyAmIFBDUkVfRE9UQUxMKSA9PSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICBmb3IgKGkg
PSAxOyBpIDw9IG1pbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKElTX05F
V0xJTkUoKmVwdHIpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgKytlcHRy
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBlcHRyICs9IG1pbjsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBPUF9BTllCWVRFOgotICAgICAgICBlcHRy
ICs9IG1pbjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6Ci0g
ICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgICAgaWYgKChtZC0+Y3R5
cGVzWyplcHRyKytdICYgY3R5cGVfZGlnaXQpICE9IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgT1BfRElHSVQ6Ci0gICAgICAgIGZvciAo
aSA9IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgICAgaWYgKChtZC0+Y3R5cGVzWyplcHRyKytd
ICYgY3R5cGVfZGlnaXQpID09IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6Ci0gICAgICAgIGZvciAoaSA9
IDE7IGkgPD0gbWluOyBpKyspCi0gICAgICAgICAgaWYgKChtZC0+Y3R5cGVzWyplcHRyKytdICYg
Y3R5cGVfc3BhY2UpICE9IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKLSAgICAgICAgZm9yIChpID0gMTsgaSA8
PSBtaW47IGkrKykKLSAgICAgICAgICBpZiAoKG1kLT5jdHlwZXNbKmVwdHIrK10gJiBjdHlwZV9z
cGFjZSkgPT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWlu
OyBpKyspCi0gICAgICAgICAgaWYgKChtZC0+Y3R5cGVzWyplcHRyKytdICYgY3R5cGVfd29yZCkg
IT0gMCkKLSAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgT1BfV09SRENIQVI6Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPD0g
bWluOyBpKyspCi0gICAgICAgICAgaWYgKChtZC0+Y3R5cGVzWyplcHRyKytdICYgY3R5cGVfd29y
ZCkgPT0gMCkKLSAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJSRVRVUk4oUENSRV9FUlJPUl9JTlRF
Uk5BTCk7Ci0gICAgICAgIH0KICAgICAgIH0KIAogICAgIC8qIElmIG1pbiA9IG1heCwgY29udGlu
dWUgYXQgdGhlIHNhbWUgbGV2ZWwgd2l0aG91dCByZWN1cnNpbmcgKi8KIAogICAgIGlmIChtaW4g
PT0gbWF4KSBjb250aW51ZTsKIAotICAgIC8qIElmIG1pbmltaXppbmcsIHdlIGhhdmUgdG8gdGVz
dCB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBiZWZvcmUgZWFjaAotICAgIHN1YnNlcXVlbnQgbWF0
Y2guIEFnYWluLCBzZXBhcmF0ZSB0aGUgVVRGLTggY2FzZSBmb3Igc3BlZWQsIGFuZCBhbHNvCi0g
ICAgc2VwYXJhdGUgdGhlIFVDUCBjYXNlcy4gKi8KLQotICAgIGlmIChtaW5pbWl6ZSkKLSAgICAg
IHsKLSNpZiAhSkFWQVNDUklQVAotI2lmZGVmIFNVUFBPUlRfVUNQCi0gICAgICBpZiAocHJvcF90
eXBlID49IDApCi0gICAgICAgIHsKLSAgICAgICAgc3dpdGNoKHByb3BfdHlwZSkKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBQVF9BTlk6Ci0gICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0gocnJjLCBlcHRyLCBlY29kZSwg
b2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwotICAgICAgICAgICAgaWYgKHJyYyAhPSBN
QVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8
IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAg
ICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKLSAgICAgICAgICAgIGlmIChwcm9wX2ZhaWxfcmVz
dWx0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgfQotICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgY2FzZSBQVF9MQU1QOgotICAgICAgICAgIGZvciAoZmkgPSBtaW47
OyBmaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgUk1BVENIKHJyYywgZXB0ciwgZWNv
ZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKLSAgICAgICAgICAgIGlmIChycmMg
IT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOwotICAgICAgICAgICAgaWYgKGZpID49IG1h
eCB8fCBlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAg
ICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7Ci0gICAgICAgICAgICBwcm9wX2NhdGVnb3J5
ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQpOwot
ICAgICAgICAgICAgaWYgKChwcm9wX2NoYXJ0eXBlID09IHVjcF9MdSB8fAotICAgICAgICAgICAg
ICAgICBwcm9wX2NoYXJ0eXBlID09IHVjcF9MbCB8fAotICAgICAgICAgICAgICAgICBwcm9wX2No
YXJ0eXBlID09IHVjcF9MdCkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKLSAgICAgICAgICAgICAgUlJF
VFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGNhc2UgUFRfR0M6Ci0gICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0gocnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0
X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwotICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9O
T01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8IGVwdHIg
Pj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAg
R0VUQ0hBUklOQyhjLCBlcHRyKTsKLSAgICAgICAgICAgIHByb3BfY2F0ZWdvcnkgPSBfcGNyZV91
Y3BfZmluZHByb3AoYywgJnByb3BfY2hhcnR5cGUsICZwcm9wX3NjcmlwdCk7Ci0gICAgICAgICAg
ICBpZiAoKHByb3BfY2F0ZWdvcnkgPT0gcHJvcF92YWx1ZSkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkK
LSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFRfUEM6Ci0gICAgICAgICAgZm9yIChm
aSA9IG1pbjs7IGZpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBSTUFUQ0gocnJjLCBl
cHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOwotICAgICAgICAgICAg
aWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgICBpZiAo
ZmkgPj0gbWF4IHx8IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFU
Q0gpOwotICAgICAgICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKLSAgICAgICAgICAgIHByb3Bf
Y2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJnByb3BfY2hhcnR5cGUsICZwcm9wX3Nj
cmlwdCk7Ci0gICAgICAgICAgICBpZiAoKHByb3BfY2hhcnR5cGUgPT0gcHJvcF92YWx1ZSkgPT0g
cHJvcF9mYWlsX3Jlc3VsdCkKLSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFRfU0M6
Ci0gICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICBSTUFUQ0gocnJjLCBlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIs
IDApOwotICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7
Ci0gICAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBS
UkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsK
LSAgICAgICAgICAgIHByb3BfY2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJnByb3Bf
Y2hhcnR5cGUsICZwcm9wX3NjcmlwdCk7Ci0gICAgICAgICAgICBpZiAoKHByb3Bfc2NyaXB0ID09
IHByb3BfdmFsdWUpID09IHByb3BfZmFpbF9yZXN1bHQpCi0gICAgICAgICAgICAgIFJSRVRVUk4o
TUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgIFJSRVRVUk4oUENSRV9FUlJPUl9JTlRFUk5BTCk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIC8qIE1hdGNo
IGV4dGVuZGVkIFVuaWNvZGUgc2VxdWVuY2VzLiBXZSB3aWxsIGdldCBoZXJlIG9ubHkgaWYgdGhl
Ci0gICAgICBzdXBwb3J0IGlzIGluIHRoZSBiaW5hcnk7IG90aGVyd2lzZSBhIGNvbXBpbGUtdGlt
ZSBlcnJvciBvY2N1cnMuICovCi0KLSAgICAgIGVsc2UgaWYgKGN0eXBlID09IE9QX0VYVFVOSSkK
LSAgICAgICAgewotICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKLSAgICAgICAgICB7Ci0g
ICAgICAgICAgUk1BVENIKHJyYywgZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVw
dHJiLCAwKTsKLSAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJj
KTsKLSAgICAgICAgICBpZiAoZmkgPj0gbWF4IHx8IGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0KSBS
UkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIp
OwotICAgICAgICAgIHByb3BfY2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJnByb3Bf
Y2hhcnR5cGUsICZwcm9wX3NjcmlwdCk7Ci0gICAgICAgICAgaWYgKHByb3BfY2F0ZWdvcnkgPT0g
dWNwX00pIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgd2hpbGUgKGVwdHIgPCBt
ZC0+ZW5kX3N1YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gMTsK
LSAgICAgICAgICAgIGlmICghdXRmOCkgYyA9ICplcHRyOyBlbHNlCi0gICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwcm9wX2NhdGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9w
X2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQpOwotICAgICAgICAgICAgaWYgKHByb3BfY2F0ZWdvcnkg
IT0gdWNwX00pIGJyZWFrOwotICAgICAgICAgICAgZXB0ciArPSBsZW47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIGVsc2UKLSNlbmRpZiAgICAgLyogU1VQ
UE9SVF9VQ1AgKi8KLSNlbmRpZgotCi0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAgICAvKiBVVEYt
OCBtb2RlICovCi0gICAgICBpZiAodXRmOCkKLSAgICAgICAgewotICAgICAgICBmb3IgKGZpID0g
bWluOzsgZmkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgUk1BVENIKDQ4LCBycmMsIGVwdHIs
IGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Ci0gICAgICAgICAgaWYgKHJy
YyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgaWYgKGZpID49IG1h
eCB8fCBlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLQot
ICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7Ci0gICAgICAgICAgc3dpdGNoKGN0eXBlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBPUF9BTlk6Ci0gICAgICAgICAgICBpZiAo
KGltcyAmIFBDUkVfRE9UQUxMKSA9PSAwICYmIElTX05FV0xJTkUoYykpIFJSRVRVUk4oTUFUQ0hf
Tk9NQVRDSCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPUF9BTllC
WVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lU
OgotICAgICAgICAgICAgaWYgKGMgPCAyNTYgJiYgKG1kLT5jdHlwZXNbY10gJiBjdHlwZV9kaWdp
dCkgIT0gMCkKLSAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9QX0RJR0lUOgotICAgICAgICAgICAgaWYg
KGMgPj0gMjU2IHx8IChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpID09IDApCi0gICAgICAg
ICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKLSAgICAgICAgICAgIGlmIChjIDwgMjU2
ICYmIChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDApCi0gICAgICAgICAgICAgIFJS
RVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
Y2FzZSBPUF9XSElURVNQQUNFOgotICAgICAgICAgICAgaWYgIChjID49IDI1NiB8fCAobWQtPmN0
eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9PSAwKQotICAgICAgICAgICAgICBSUkVUVVJOKE1BVENI
X05PTUFUQ0gpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT1BfTk9U
X1dPUkRDSEFSOgotICAgICAgICAgICAgaWYgKGMgPCAyNTYgJiYgKG1kLT5jdHlwZXNbY10gJiBj
dHlwZV93b3JkKSAhPSAwKQotICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT1BfV09SRENIQVI6Ci0gICAg
ICAgICAgICBpZiAoYyA+PSAyNTYgfHwgKG1kLT5jdHlwZXNbY10gJiBjdHlwZV93b3JkKSA9PSAw
KQotICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgLyogSWYgbWluaW1pemluZywgd2UgaGF2ZSB0byB0ZXN0IHRoZSByZXN0IG9mIHRo
ZSBwYXR0ZXJuIGJlZm9yZSBlYWNoCisgICAgc3Vic2VxdWVudCBtYXRjaC4gQWdhaW4sIHNlcGFy
YXRlIHRoZSBVVEYtOCBjYXNlIGZvciBzcGVlZCwgYW5kIGFsc28KKyAgICBzZXBhcmF0ZSB0aGUg
VUNQIGNhc2VzLiAqLwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUlJFVFVS
TihQQ1JFX0VSUk9SX0lOVEVSTkFMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgLyogTm90IFVURi04IG1vZGUgKi8KKyAg
ICBpZiAobWluaW1pemUpCisgICAgICB7CiAgICAgICAgIHsKICAgICAgICAgZm9yIChmaSA9IG1p
bjs7IGZpKyspCiAgICAgICAgICAgewotICAgICAgICAgIFJNQVRDSCg0OSwgcnJjLCBlcHRyLCBl
Y29kZSwgb2Zmc2V0X3RvcCwgbWQsIGltcywgZXB0cmIsIDApOworICAgICAgICAgIFJNQVRDSCg0
OCwgcnJjLCBlY29kZSwgZXB0cmIsIDApOwogICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9N
QVRDSCkgUlJFVFVSTihycmMpOwogICAgICAgICAgIGlmIChmaSA+PSBtYXggfHwgZXB0ciA+PSBt
ZC0+ZW5kX3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7Ci0gICAgICAgICAgYyA9ICpl
cHRyKys7CisKKyAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOwogICAgICAgICAgIHN3aXRj
aChjdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgT1BfQU5ZOgotICAgICAg
ICAgICAgaWYgKChpbXMgJiBQQ1JFX0RPVEFMTCkgPT0gMCAmJiBJU19ORVdMSU5FKGMpKSBSUkVU
VVJOKE1BVENIX05PTUFUQ0gpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh
c2UgT1BfQU5ZQllURToKKyAgICAgICAgICAgIGlmIChJU19ORVdMSU5FKGMpKSBSUkVUVVJOKE1B
VENIX05PTUFUQ0gpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgT1Bf
Tk9UX0RJR0lUOgotICAgICAgICAgICAgaWYgKChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQp
ICE9IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoYyA8IDEyOCAm
JiAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSAhPSAwKQorICAgICAgICAgICAgICBSUkVU
VVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgT1BfRElHSVQ6Ci0gICAgICAgICAgICBpZiAoKG1kLT5jdHlwZXNbY10gJiBjdHlwZV9kaWdp
dCkgPT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChjID49IDEy
OCB8fCAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKQorICAgICAgICAgICAgICBS
UkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6Ci0gICAgICAgICAgICBpZiAoKG1kLT5jdHlwZXNbY10g
JiBjdHlwZV9zcGFjZSkgIT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAg
IGlmIChjIDwgMTI4ICYmIChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDApCisgICAg
ICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgotICAgICAgICAgICAgaWYgICgobWQtPmN0
eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAg
ICAgICAgICAgaWYgIChjID49IDEyOCB8fCAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9
PSAwKQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgotICAgICAgICAgICAg
aWYgKChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfd29yZCkgIT0gMCkgUlJFVFVSTihNQVRDSF9OT01B
VENIKTsKKyAgICAgICAgICAgIGlmIChjIDwgMTI4ICYmIChtZC0+Y3R5cGVzW2NdICYgY3R5cGVf
d29yZCkgIT0gMCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgotICAgICAgICAg
ICAgaWYgKChtZC0+Y3R5cGVzW2NdICYgY3R5cGVfd29yZCkgPT0gMCkgUlJFVFVSTihNQVRDSF9O
T01BVENIKTsKKyAgICAgICAgICAgIGlmIChjID49IDEyOCB8fCAobWQtPmN0eXBlc1tjXSAmIGN0
eXBlX3dvcmQpID09IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJS
RVRVUk4oUENSRV9FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgICAgICBSUkVUVVJOKEpTX1JFR0VY
UF9FUlJPUl9JTlRFUk5BTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0zMTY0LDE0MyArMTg0NSw2IEBAIGZvciAoOzspCiAgICAgICB7CiAgICAgICBwcCA9IGVw
dHI7ICAvKiBSZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkICovCiAKLSNpZiAhSkFWQVNDUklQVAot
I2lmZGVmIFNVUFBPUlRfVUNQCi0gICAgICBpZiAocHJvcF90eXBlID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgc3dpdGNoKHByb3BfdHlwZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBQ
VF9BTlk6Ci0gICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgICAgIGlmIChlcHRyID49IG1k
LT5lbmRfc3ViamVjdCkgYnJlYWs7Ci0gICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxl
bik7Ci0gICAgICAgICAgICBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgYnJlYWs7Ci0gICAgICAgICAg
ICBlcHRyKz0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgY2FzZSBQVF9MQU1QOgotICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgaW50IGxlbiA9IDE7Ci0gICAgICAgICAgICBpZiAo
ZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QpIGJyZWFrOwotICAgICAgICAgICAgR0VUQ0hBUkxFTihj
LCBlcHRyLCBsZW4pOwotICAgICAgICAgICAgcHJvcF9jYXRlZ29yeSA9IF9wY3JlX3VjcF9maW5k
cHJvcChjLCAmcHJvcF9jaGFydHlwZSwgJnByb3Bfc2NyaXB0KTsKLSAgICAgICAgICAgIGlmICgo
cHJvcF9jaGFydHlwZSA9PSB1Y3BfTHUgfHwKLSAgICAgICAgICAgICAgICAgcHJvcF9jaGFydHlw
ZSA9PSB1Y3BfTGwgfHwKLSAgICAgICAgICAgICAgICAgcHJvcF9jaGFydHlwZSA9PSB1Y3BfTHQp
ID09IHByb3BfZmFpbF9yZXN1bHQpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZXB0cis9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
IGNhc2UgUFRfR0M6Ci0gICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgICAgIGlmIChlcHRy
ID49IG1kLT5lbmRfc3ViamVjdCkgYnJlYWs7Ci0gICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVw
dHIsIGxlbik7Ci0gICAgICAgICAgICBwcm9wX2NhdGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9w
KGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQpOwotICAgICAgICAgICAgaWYgKChwcm9w
X2NhdGVnb3J5ID09IHByb3BfdmFsdWUpID09IHByb3BfZmFpbF9yZXN1bHQpCi0gICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZXB0cis9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFRfUEM6Ci0gICAgICAgICAgZm9yIChpID0g
bWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuID0g
MTsKLSAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3ViamVjdCkgYnJlYWs7Ci0gICAg
ICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7Ci0gICAgICAgICAgICBwcm9wX2NhdGVn
b3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQp
OwotICAgICAgICAgICAgaWYgKChwcm9wX2NoYXJ0eXBlID09IHByb3BfdmFsdWUpID09IHByb3Bf
ZmFpbF9yZXN1bHQpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZXB0cis9IGxl
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFRf
U0M6Ci0gICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5l
bmRfc3ViamVjdCkgYnJlYWs7Ci0gICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7
Ci0gICAgICAgICAgICBwcm9wX2NhdGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9w
X2NoYXJ0eXBlLCAmcHJvcF9zY3JpcHQpOwotICAgICAgICAgICAgaWYgKChwcm9wX3NjcmlwdCA9
PSBwcm9wX3ZhbHVlKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQotICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGVwdHIrPSBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotCi0gICAgICAgIC8qIGVwdHIgaXMgbm93IHBhc3QgdGhlIGVuZCBvZiB0
aGUgbWF4aW11bSBydW4gKi8KLQotICAgICAgICBmb3IoOzspCi0gICAgICAgICAgewotICAgICAg
ICAgIFJNQVRDSChycmMsIGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwg
MCk7Ci0gICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0g
ICAgICAgICAgaWYgKGVwdHItLSA9PSBwcCkgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVk
IGF0IG9yaWdpbmFsIHBvcyAqLwotICAgICAgICAgIEJBQ0tDSEFSKGVwdHIpOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAvKiBNYXRjaCBleHRlbmRlZCBVbmljb2RlIHNlcXVlbmNl
cy4gV2Ugd2lsbCBnZXQgaGVyZSBvbmx5IGlmIHRoZQotICAgICAgc3VwcG9ydCBpcyBpbiB0aGUg
YmluYXJ5OyBvdGhlcndpc2UgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiAqLwotCi0gICAg
ICBlbHNlIGlmIChjdHlwZSA9PSBPUF9FWFRVTkkpCi0gICAgICAgIHsKLSAgICAgICAgZm9yIChp
ID0gbWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgIGlmIChlcHRyID49
IG1kLT5lbmRfc3ViamVjdCkgYnJlYWs7Ci0gICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0
cik7Ci0gICAgICAgICAgcHJvcF9jYXRlZ29yeSA9IF9wY3JlX3VjcF9maW5kcHJvcChjLCAmcHJv
cF9jaGFydHlwZSwgJnByb3Bfc2NyaXB0KTsKLSAgICAgICAgICBpZiAocHJvcF9jYXRlZ29yeSA9
PSB1Y3BfTSkgYnJlYWs7Ci0gICAgICAgICAgd2hpbGUgKGVwdHIgPCBtZC0+ZW5kX3N1YmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gMTsKLSAgICAgICAgICAgIGlm
ICghdXRmOCkgYyA9ICplcHRyOyBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
R0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBw
cm9wX2NhdGVnb3J5ID0gX3BjcmVfdWNwX2ZpbmRwcm9wKGMsICZwcm9wX2NoYXJ0eXBlLCAmcHJv
cF9zY3JpcHQpOwotICAgICAgICAgICAgaWYgKHByb3BfY2F0ZWdvcnkgIT0gdWNwX00pIGJyZWFr
OwotICAgICAgICAgICAgZXB0ciArPSBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
Ci0gICAgICAgIC8qIGVwdHIgaXMgbm93IHBhc3QgdGhlIGVuZCBvZiB0aGUgbWF4aW11bSBydW4g
Ki8KLQotICAgICAgICBmb3IoOzspCi0gICAgICAgICAgewotICAgICAgICAgIFJNQVRDSChycmMs
IGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtZCwgaW1zLCBlcHRyYiwgMCk7Ci0gICAgICAgICAg
aWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7Ci0gICAgICAgICAgaWYgKGVw
dHItLSA9PSBwcCkgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBv
cyAqLwotICAgICAgICAgIGZvciAoOzspICAgICAgICAgICAgICAgICAgICAgICAgLyogTW92ZSBi
YWNrIG92ZXIgb25lIGV4dGVuZGVkICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
bGVuID0gMTsKLSAgICAgICAgICAgIEJBQ0tDSEFSKGVwdHIpOwotICAgICAgICAgICAgaWYgKCF1
dGY4KSBjID0gKmVwdHI7IGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICBHRVRD
SEFSTEVOKGMsIGVwdHIsIGxlbik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb3Bf
Y2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3AoYywgJnByb3BfY2hhcnR5cGUsICZwcm9wX3Nj
cmlwdCk7Ci0gICAgICAgICAgICBpZiAocHJvcF9jYXRlZ29yeSAhPSB1Y3BfTSkgYnJlYWs7Ci0g
ICAgICAgICAgICBlcHRyLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgIGVsc2UKLSNlbmRpZiAgIC8qIFNVUFBPUlRfVUNQICovCi0jZW5kaWYKLQotI2lm
ZGVmIFNVUFBPUlRfVVRGOAotICAgICAgLyogVVRGLTggbW9kZSAqLwotCi0gICAgICBpZiAodXRm
OCkKICAgICAgICAgewogICAgICAgICBzd2l0Y2goY3R5cGUpCiAgICAgICAgICAgewpAQCAtMzMx
Miw3ICsxODU2LDYgQEAgZm9yICg7OykKIAogICAgICAgICAgIGlmIChtYXggPCBJTlRfTUFYKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKChpbXMgJiBQQ1JFX0RPVEFMTCkgPT0gMCkK
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkr
KykKICAgICAgICAgICAgICAgICB7CkBAIC0zMzIxLDIxICsxODY0LDEyIEBAIGZvciAoOzspCiAg
ICAgICAgICAgICAgICAgd2hpbGUgKGVwdHIgPCBtZC0+ZW5kX3N1YmplY3QgJiYgKCplcHRyICYg
MHhjMCkgPT0gMHg4MCkgZXB0cisrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZvciAo
aSA9IG1pbjsgaSA8IG1heDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBlcHRyKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGVwdHIgPCBtZC0+ZW5kX3N1YmplY3Qg
JiYgKCplcHRyICYgMHhjMCkgPT0gMHg4MCkgZXB0cisrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgLyogSGFuZGxlIHVubGlt
aXRlZCBVVEYtOCByZXBlYXQgKi8KIAogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICgoaW1zICYgUENSRV9ET1RBTEwpID09IDApCiAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCiAgICAgICAgICAgICAg
ICAgewpAQCAtMzM0NCwzMCArMTg3OCwxNiBAQCBmb3IgKDs7KQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICBjID0gbWF4IC0gbWluOwotICAgICAgICAg
ICAgICBpZiAoYyA+IG1kLT5lbmRfc3ViamVjdCAtIGVwdHIpIGMgPSBtZC0+ZW5kX3N1YmplY3Qg
LSBlcHRyOwotICAgICAgICAgICAgICBlcHRyICs9IGM7Ci0gICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIC8qIFRoZSBieXRlIGNhc2Ug
aXMgdGhlIHNhbWUgYXMgbm9uLVVURjggKi8KLQotICAgICAgICAgIGNhc2UgT1BfQU5ZQllURToK
LSAgICAgICAgICBjID0gbWF4IC0gbWluOwotICAgICAgICAgIGlmIChjID4gbWQtPmVuZF9zdWJq
ZWN0IC0gZXB0cikgYyA9IG1kLT5lbmRfc3ViamVjdCAtIGVwdHI7Ci0gICAgICAgICAgZXB0ciAr
PSBjOwotICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CiAg
ICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICBpbnQgbGVuID0gMTsKICAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3Vi
amVjdCkgYnJlYWs7CiAgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7Ci0gICAg
ICAgICAgICBpZiAoYyA8IDI1NiAmJiAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSAhPSAw
KSBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMTI4ICYmIChtZC0+Y3R5cGVzW2NdICYgY3R5
cGVfZGlnaXQpICE9IDApIGJyZWFrOwogICAgICAgICAgICAgZXB0cis9IGxlbjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTMzNzgsNyArMTg5OCw3IEBAIGZvciAoOzspCiAg
ICAgICAgICAgICBpbnQgbGVuID0gMTsKICAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRf
c3ViamVjdCkgYnJlYWs7CiAgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7Ci0g
ICAgICAgICAgICBpZiAoYyA+PSAyNTYgfHwobWQtPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSA9
PSAwKSBicmVhazsKKyAgICAgICAgICAgIGlmIChjID49IDEyOCB8fChtZC0+Y3R5cGVzW2NdICYg
Y3R5cGVfZGlnaXQpID09IDApIGJyZWFrOwogICAgICAgICAgICAgZXB0cis9IGxlbjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTMzODksNyArMTkwOSw3IEBAIGZvciAoOzsp
CiAgICAgICAgICAgICBpbnQgbGVuID0gMTsKICAgICAgICAgICAgIGlmIChlcHRyID49IG1kLT5l
bmRfc3ViamVjdCkgYnJlYWs7CiAgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7
Ci0gICAgICAgICAgICBpZiAoYyA8IDI1NiAmJiAobWQtPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNl
KSAhPSAwKSBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMTI4ICYmIChtZC0+Y3R5cGVzW2Nd
ICYgY3R5cGVfc3BhY2UpICE9IDApIGJyZWFrOwogICAgICAgICAgICAgZXB0cis9IGxlbjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTM0MDAsNyArMTkyMCw3IEBAIGZvciAo
OzspCiAgICAgICAgICAgICBpbnQgbGVuID0gMTsKICAgICAgICAgICAgIGlmIChlcHRyID49IG1k
LT5lbmRfc3ViamVjdCkgYnJlYWs7CiAgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxl
bik7Ci0gICAgICAgICAgICBpZiAoYyA+PSAyNTYgfHwobWQtPmN0eXBlc1tjXSAmIGN0eXBlX3Nw
YWNlKSA9PSAwKSBicmVhazsKKyAgICAgICAgICAgIGlmIChjID49IDEyOCB8fChtZC0+Y3R5cGVz
W2NdICYgY3R5cGVfc3BhY2UpID09IDApIGJyZWFrOwogICAgICAgICAgICAgZXB0cis9IGxlbjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTM0MTEsNyArMTkzMSw3IEBAIGZv
ciAoOzspCiAgICAgICAgICAgICBpbnQgbGVuID0gMTsKICAgICAgICAgICAgIGlmIChlcHRyID49
IG1kLT5lbmRfc3ViamVjdCkgYnJlYWs7CiAgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIs
IGxlbik7Ci0gICAgICAgICAgICBpZiAoYyA8IDI1NiAmJiAobWQtPmN0eXBlc1tjXSAmIGN0eXBl
X3dvcmQpICE9IDApIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAxMjggJiYgKG1kLT5jdHlw
ZXNbY10gJiBjdHlwZV93b3JkKSAhPSAwKSBicmVhazsKICAgICAgICAgICAgIGVwdHIrPSBsZW47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CkBAIC0zNDIyLDExNyArMTk0MiwyNSBA
QCBmb3IgKDs7KQogICAgICAgICAgICAgaW50IGxlbiA9IDE7CiAgICAgICAgICAgICBpZiAoZXB0
ciA+PSBtZC0+ZW5kX3N1YmplY3QpIGJyZWFrOwogICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBl
cHRyLCBsZW4pOwotICAgICAgICAgICAgaWYgKGMgPj0gMjU2IHx8IChtZC0+Y3R5cGVzW2NdICYg
Y3R5cGVfd29yZCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA+PSAxMjggfHwgKG1k
LT5jdHlwZXNbY10gJiBjdHlwZV93b3JkKSA9PSAwKSBicmVhazsKICAgICAgICAgICAgIGVwdHIr
PSBsZW47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgIFJSRVRVUk4oUENSRV9FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgICAg
UlJFVFVSTihKU19SRUdFWFBfRVJST1JfSU5URVJOQUwpOwogICAgICAgICAgIH0KIAogICAgICAg
ICAvKiBlcHRyIGlzIG5vdyBwYXN0IHRoZSBlbmQgb2YgdGhlIG1heGltdW0gcnVuICovCiAKICAg
ICAgICAgZm9yKDs7KQogICAgICAgICAgIHsKLSAgICAgICAgICBSTUFUQ0goNTIsIHJyYywgZXB0
ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKKyAgICAgICAgICBSTUFU
Q0goNTIsIHJyYywgZWNvZGUsIGVwdHJiLCAwKTsKICAgICAgICAgICBpZiAocnJjICE9IE1BVENI
X05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKICAgICAgICAgICBpZiAoZXB0ci0tID09IHBwKSBicmVh
azsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCiAgICAgICAgICAg
QkFDS0NIQVIoZXB0cik7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICBlbHNlCi0jZW5k
aWYKLQotICAgICAgLyogTm90IFVURi04IG1vZGUgKi8KLSAgICAgICAgewotICAgICAgICBzd2l0
Y2goY3R5cGUpCi0gICAgICAgICAgewotICAgICAgICAgIGNhc2UgT1BfQU5ZOgotICAgICAgICAg
IGlmICgoaW1zICYgUENSRV9ET1RBTEwpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKLSAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBpZiAoZXB0ciA+PSBtZC0+ZW5kX3N1YmplY3QgfHwgSVNfTkVXTElORSgqZXB0cikpIGJy
ZWFrOwotICAgICAgICAgICAgICBlcHRyKys7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIC8qIEZvciBET1RBTEwgY2FzZSwgZmFs
bCB0aHJvdWdoIGFuZCB0cmVhdCBhcyBcQyAqLwotCi0gICAgICAgICAgY2FzZSBPUF9BTllCWVRF
OgotICAgICAgICAgIGMgPSBtYXggLSBtaW47Ci0gICAgICAgICAgaWYgKGMgPiBtZC0+ZW5kX3N1
YmplY3QgLSBlcHRyKSBjID0gbWQtPmVuZF9zdWJqZWN0IC0gZXB0cjsKLSAgICAgICAgICBlcHRy
ICs9IGM7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoK
LSAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChlcHRyID49IG1kLT5lbmRfc3ViamVjdCB8fCAobWQtPmN0eXBlc1sqZXB0
cl0gJiBjdHlwZV9kaWdpdCkgIT0gMCkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBlcHRyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj
YXNlIE9QX0RJR0lUOgotICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0IHx8ICht
ZC0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKQotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGVwdHIrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6Ci0gICAgICAgICAgZm9yIChpID0g
bWluOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXB0ciA+
PSBtZC0+ZW5kX3N1YmplY3QgfHwgKG1kLT5jdHlwZXNbKmVwdHJdICYgY3R5cGVfc3BhY2UpICE9
IDApCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZXB0cisrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgot
ICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0IHx8IChtZC0+Y3R5cGVzWyplcHRy
XSAmIGN0eXBlX3NwYWNlKSA9PSAwKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGVwdHIrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNh
c2UgT1BfTk9UX1dPUkRDSEFSOgotICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWQtPmVuZF9zdWJqZWN0
IHx8IChtZC0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX3dvcmQpICE9IDApCi0gICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZXB0cisrOwotICAgICAgICAgICAgfQotICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgY2FzZSBPUF9XT1JEQ0hBUjoKLSAgICAgICAgICBmb3IgKGkgPSBt
aW47IGkgPCBtYXg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcHRyID49
IG1kLT5lbmRfc3ViamVjdCB8fCAobWQtPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV93b3JkKSA9PSAw
KQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVwdHIrKzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgUlJF
VFVSTihQQ1JFX0VSUk9SX0lOVEVSTkFMKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgLyogZXB0
ciBpcyBub3cgcGFzdCB0aGUgZW5kIG9mIHRoZSBtYXhpbXVtIHJ1biAqLwotCi0gICAgICAgIHdo
aWxlIChlcHRyID49IHBwKQotICAgICAgICAgIHsKLSAgICAgICAgICBSTUFUQ0goNTMsIHJyYywg
ZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1kLCBpbXMsIGVwdHJiLCAwKTsKLSAgICAgICAgICBl
cHRyLS07Ci0gICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7
Ci0gICAgICAgICAgfQotICAgICAgICB9CiAKICAgICAgIC8qIEdldCBoZXJlIGlmIHdlIGNhbid0
IG1ha2UgaXQgbWF0Y2ggd2l0aCBhbnkgcGVybWl0dGVkIHJlcGV0aXRpb25zICovCiAKQEAgLTM1
NDcsNyArMTk3NSw3IEBAIGZvciAoOzspCiAKICAgICBkZWZhdWx0OgogICAgIERQUklOVEYoKCJV
bmtub3duIG9wY29kZSAlZFxuIiwgKmVjb2RlKSk7Ci0gICAgUlJFVFVSTihQQ1JFX0VSUk9SX1VO
S05PV05fTk9ERSk7CisgICAgUlJFVFVSTihKU19SRUdFWFBfRVJST1JfSU5URVJOQUwpOwogICAg
IH0KIAogICAvKiBEbyBub3Qgc3RpY2sgYW55IGNvZGUgaW4gaGVyZSB3aXRob3V0IG11Y2ggdGhv
dWdodDsgaXQgaXMgYXNzdW1lZApAQCAtMzU1Nyw3ICsxOTg1LDYgQEAgZm9yICg7OykKICAgfSAg
ICAgICAgICAgICAvKiBFbmQgb2YgbWFpbiBsb29wICovCiAvKiBDb250cm9sIG5ldmVyIHJlYWNo
ZXMgaGVyZSAqLwogCi0jaWZkZWYgTk9fUkVDVVJTRQogI2lmbmRlZiBfX0dOVUNfXwogCiBSUkVU
VVJOX1NXSVRDSDoKQEAgLTM2MDgsMjEgKzIwMzUsMTIgQEAgc3dpdGNoIChmcmFtZS0+WHdoZXJl
KQogICBjYXNlIDQzOiBnb3RvIFJSRVRVUk5fNDM7CiAgIGNhc2UgNDQ6IGdvdG8gUlJFVFVSTl80
NDsKICAgY2FzZSA0NTogZ290byBSUkVUVVJOXzQ1OwotI2lmICFKQVZBU0NSSVBUCi0gIGNhc2Ug
NDY6IGdvdG8gUlJFVFVSTl80NjsKLSAgY2FzZSA0NzogZ290byBSUkVUVVJOXzQ3OwotI2VuZGlm
CiAgIGNhc2UgNDg6IGdvdG8gUlJFVFVSTl80ODsKICAgY2FzZSA0OTogZ290byBSUkVUVVJOXzQ5
OwotI2lmICFKQVZBU0NSSVBUCi0gIGNhc2UgNTA6IGdvdG8gUlJFVFVSTl81MDsKLSAgY2FzZSA1
MTogZ290byBSUkVUVVJOXzUxOwotI2VuZGlmCiAgIGNhc2UgNTI6IGdvdG8gUlJFVFVSTl81MjsK
ICAgY2FzZSA1MzogZ290byBSUkVUVVJOXzUzOwogICB9CiAKLSNpZiBQQ1JFX1VURjE2CiAvKiBJ
dCdzIHNhZmVyIHRvIGhhdmUgdGhlIGV4dHJhIHN5bWJvbHMgaGVyZSB0aGFuIHRvIHRyeSB0byBp
ZmRlZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBhYm92ZSwKIGJlY2F1c2Ugd2UnbGwgZ2V0IHdhcm5p
bmdzIG9yIGVycm9ycyBpZiB3ZSBoYXZlIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scyBidXQgYSBy
dW50aW1lIGZhaWx1cmUKIGlmIHdlIGxlYXZlIHNvbWV0aGluZyBvdXQgb2YgdGhlIHN3aXRjaCBz
dGF0ZW1lbnQuICovCkBAIC0zNjMyLDE1ICsyMDUwLDExIEBAIFJSRVRVUk5fMzQ6CiBSUkVUVVJO
XzM1OgogUlJFVFVSTl8zNjoKIFJSRVRVUk5fMzc6Ci0jZW5kaWYKIAogYWJvcnQoKTsKIHJldHVy
biAwOwogCiAjZW5kaWYKLSNlbmRpZgotCi0jdW5kZWYgdXRmOAogCiB9CiAKQEAgLTM2NTEsMTMg
KzIwNjUsMTEgQEAgcmV0dXJuIDA7CiAKIFVuZGVmaW5lIGFsbCB0aGUgbWFjcm9zIHRoYXQgd2Vy
ZSBkZWZpbmVkIGFib3ZlIHRvIGhhbmRsZSB0aGlzLiAqLwogCi0jaWZkZWYgTk9fUkVDVVJTRQog
I3VuZGVmIGVwdHIKICN1bmRlZiBlY29kZQogI3VuZGVmIG9mZnNldF90b3AKICN1bmRlZiBpbXMK
ICN1bmRlZiBlcHRyYgotI3VuZGVmIGZsYWdzCiAKICN1bmRlZiBjYWxscGF0CiAjdW5kZWYgY2hh
cnB0cgpAQCAtMzY2NywxNiArMjA3OSwxMiBAQCBVbmRlZmluZSBhbGwgdGhlIG1hY3JvcyB0aGF0
IHdlcmUgZGVmaW5lCiAjdW5kZWYgcHJldgogI3VuZGVmIHNhdmVkX2VwdHIKIAotI3VuZGVmIG5l
d19yZWN1cnNpdmUKLQotI3VuZGVmIGN1cl9pc193b3JkCiAjdW5kZWYgY29uZGl0aW9uCiAjdW5k
ZWYgbWluaW1pemUKLSN1bmRlZiBwcmV2X2lzX3dvcmQKLQotI3VuZGVmIG9yaWdpbmFsX2ltcwog
CiAjdW5kZWYgY3R5cGUKKyN1bmRlZiBmYworI3VuZGVmIGZpCiAjdW5kZWYgbGVuZ3RoCiAjdW5k
ZWYgbWF4CiAjdW5kZWYgbWluCkBAIC0zNjg3LDE3ICsyMDk1LDkgQEAgVW5kZWZpbmUgYWxsIHRo
ZSBtYWNyb3MgdGhhdCB3ZXJlIGRlZmluZQogI3VuZGVmIHNhdmVfb2Zmc2V0MQogI3VuZGVmIHNh
dmVfb2Zmc2V0MgogI3VuZGVmIHNhdmVfb2Zmc2V0MwotI3VuZGVmIHN0YWNrc2F2ZQogCiAjdW5k
ZWYgbmV3cHRyYgogCi0jZW5kaWYKLQotLyogVGhlc2UgdHdvIGFyZSBkZWZpbmVkIGFzIG1hY3Jv
cyBpbiBib3RoIGNhc2VzICovCi0KLSN1bmRlZiBmYwotI3VuZGVmIGZpCi0KIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMzcyNywxNTYgKzIxMjcsNjQgQEAg
UmV0dXJuczogICAgICAgICAgPiAwID0+IHN1Y2Nlc3M7IHZhbHVlIAogICAgICAgICAgICAgICAg
ICA8IC0xID0+IHNvbWUga2luZCBvZiB1bmV4cGVjdGVkIHByb2JsZW0KICovCiAKLVBDUkVfREFU
QV9TQ09QRSBpbnQKLXBjcmVfZXhlYyhjb25zdCBwY3JlICphcmd1bWVudF9yZSwgY29uc3QgcGNy
ZV9leHRyYSAqZXh0cmFfZGF0YSwKLSAgUENSRV9TUFRSIHN1YmplY3QsIGludCBsZW5ndGgsIGlu
dCBzdGFydF9vZmZzZXQsIGludCBvcHRpb25zLCBpbnQgKm9mZnNldHMsCitpbnQKK2pzUmVnRXhw
RXhlY3V0ZShjb25zdCBwY3JlICphcmd1bWVudF9yZSwKKyAgY29uc3QgSlNSZWdFeHBDaGFyKiBz
dWJqZWN0LCBpbnQgbGVuZ3RoLCBpbnQgc3RhcnRfb2Zmc2V0LCBpbnQgKm9mZnNldHMsCiAgIGlu
dCBvZmZzZXRjb3VudCkKIHsKIGludCByYywgcmVzZXRjb3VudCwgb2NvdW50OwogaW50IGZpcnN0
X2J5dGUgPSAtMTsKIGludCByZXFfYnl0ZSA9IC0xOwogaW50IHJlcV9ieXRlMiA9IC0xOwotdW5z
aWduZWQgbG9uZyBpbnQgaW1zID0gMDsKIEJPT0wgdXNpbmdfdGVtcG9yYXJ5X29mZnNldHMgPSBG
QUxTRTsKLUJPT0wgYW5jaG9yZWQ7Ci1CT09MIHN0YXJ0bGluZTsKLUJPT0wgZmlyc3RsaW5lOwog
Qk9PTCBmaXJzdF9ieXRlX2Nhc2VsZXNzID0gRkFMU0U7CitCT09MIHN0YXJ0bGluZTsKIEJPT0wg
cmVxX2J5dGVfY2FzZWxlc3MgPSBGQUxTRTsKIG1hdGNoX2RhdGEgbWF0Y2hfYmxvY2s7CiBjb25z
dCB1c2NoYXIgKnRhYmxlczsKLWNvbnN0IHVzY2hhciAqc3RhcnRfYml0cyA9IE5VTEw7CiBVU1BU
UiBzdGFydF9tYXRjaCA9IChVU1BUUilzdWJqZWN0ICsgc3RhcnRfb2Zmc2V0OwogVVNQVFIgZW5k
X3N1YmplY3Q7CiBVU1BUUiByZXFfYnl0ZV9wdHIgPSBzdGFydF9tYXRjaCAtIDE7Citjb25zdCB1
c2NoYXIgKnN0YXJ0X2NvZGU7CiAKLSNpZiAhSkFWQVNDUklQVAotcGNyZV9zdHVkeV9kYXRhIGlu
dGVybmFsX3N0dWR5OwotI2VuZGlmCi1jb25zdCBwY3JlX3N0dWR5X2RhdGEgKnN0dWR5OwotCi0j
aWYgIUpBVkFTQ1JJUFQKLXJlYWxfcGNyZSBpbnRlcm5hbF9yZTsKLSNlbmRpZgogY29uc3QgcmVh
bF9wY3JlICpleHRlcm5hbF9yZSA9IChjb25zdCByZWFsX3BjcmUgKilhcmd1bWVudF9yZTsKIGNv
bnN0IHJlYWxfcGNyZSAqcmUgPSBleHRlcm5hbF9yZTsKIAogLyogUGxhdXNpYmlsaXR5IGNoZWNr
cyAqLwogCi1pZiAoKG9wdGlvbnMgJiB+UFVCTElDX0VYRUNfT1BUSU9OUykgIT0gMCkgcmV0dXJu
IFBDUkVfRVJST1JfQkFET1BUSU9OOwotaWYgKHJlID09IE5VTEwgfHwgc3ViamVjdCA9PSBOVUxM
IHx8Ci0gICAob2Zmc2V0cyA9PSBOVUxMICYmIG9mZnNldGNvdW50ID4gMCkpIHJldHVybiBQQ1JF
X0VSUk9SX05VTEw7Ci1pZiAob2Zmc2V0Y291bnQgPCAwKSByZXR1cm4gUENSRV9FUlJPUl9CQURD
T1VOVDsKLQotLyogRmlzaCBvdXQgdGhlIG9wdGlvbmFsIGRhdGEgZnJvbSB0aGUgZXh0cmFfZGF0
YSBzdHJ1Y3R1cmUsIGZpcnN0IHNldHRpbmcKLXRoZSBkZWZhdWx0IHZhbHVlcy4gKi8KLQotc3R1
ZHkgPSBOVUxMOwotbWF0Y2hfYmxvY2subWF0Y2hfbGltaXQgPSBNQVRDSF9MSU1JVDsKLW1hdGNo
X2Jsb2NrLm1hdGNoX2xpbWl0X3JlY3Vyc2lvbiA9IE1BVENIX0xJTUlUX1JFQ1VSU0lPTjsKLW1h
dGNoX2Jsb2NrLmNhbGxvdXRfZGF0YSA9IE5VTEw7CitBU1NFUlQocmUpOworQVNTRVJUKHN1Ympl
Y3QpOworQVNTRVJUKG9mZnNldGNvdW50ID49IDApOworQVNTRVJUKG9mZnNldHMgfHwgb2Zmc2V0
Y291bnQgPT0gMCk7CiAKIC8qIFRoZSB0YWJsZSBwb2ludGVyIGlzIGFsd2F5cyBpbiBuYXRpdmUg
Ynl0ZSBvcmRlci4gKi8KIAogdGFibGVzID0gZXh0ZXJuYWxfcmUtPnRhYmxlczsKIAotaWYgKGV4
dHJhX2RhdGEgIT0gTlVMTCkKLSAgewotICByZWdpc3RlciB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBl
eHRyYV9kYXRhLT5mbGFnczsKLSAgaWYgKChmbGFncyAmIFBDUkVfRVhUUkFfU1RVRFlfREFUQSkg
IT0gMCkKLSAgICBzdHVkeSA9IChjb25zdCBwY3JlX3N0dWR5X2RhdGEgKilleHRyYV9kYXRhLT5z
dHVkeV9kYXRhOwotICBpZiAoKGZsYWdzICYgUENSRV9FWFRSQV9NQVRDSF9MSU1JVCkgIT0gMCkK
LSAgICBtYXRjaF9ibG9jay5tYXRjaF9saW1pdCA9IGV4dHJhX2RhdGEtPm1hdGNoX2xpbWl0Owot
ICBpZiAoKGZsYWdzICYgUENSRV9FWFRSQV9NQVRDSF9MSU1JVF9SRUNVUlNJT04pICE9IDApCi0g
ICAgbWF0Y2hfYmxvY2subWF0Y2hfbGltaXRfcmVjdXJzaW9uID0gZXh0cmFfZGF0YS0+bWF0Y2hf
bGltaXRfcmVjdXJzaW9uOwotICBpZiAoKGZsYWdzICYgUENSRV9FWFRSQV9DQUxMT1VUX0RBVEEp
ICE9IDApCi0gICAgbWF0Y2hfYmxvY2suY2FsbG91dF9kYXRhID0gZXh0cmFfZGF0YS0+Y2FsbG91
dF9kYXRhOwotICBpZiAoKGZsYWdzICYgUENSRV9FWFRSQV9UQUJMRVMpICE9IDApIHRhYmxlcyA9
IGV4dHJhX2RhdGEtPnRhYmxlczsKLSAgfQotCiAvKiBJZiB0aGUgZXhlYyBjYWxsIHN1cHBsaWVk
IE5VTEwgZm9yIHRhYmxlcywgdXNlIHRoZSBpbmJ1aWx0IG9uZXMuIFRoaXMKIGlzIGEgZmVhdHVy
ZSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNhdmUgY29tcGlsZWQgcmVnZXggYW5kIHJlLXVz
ZSB0aGVtCiBpbiBvdGhlciBwcm9ncmFtcyBsYXRlci4gKi8KIAogaWYgKHRhYmxlcyA9PSBOVUxM
KSB0YWJsZXMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlczsKIAotLyogQ2hlY2sgdGhhdCB0aGUgZmly
c3QgZmllbGQgaW4gdGhlIGJsb2NrIGlzIHRoZSBtYWdpYyBudW1iZXIuIElmIGl0IGlzIG5vdCwK
LXRlc3QgZm9yIGEgcmVnZXggdGhhdCB3YXMgY29tcGlsZWQgb24gYSBob3N0IG9mIG9wcG9zaXRl
IGVuZGlhbm5lc3MuIElmIHRoaXMgaXMKLXRoZSBjYXNlLCBmbGlwcGVkIHZhbHVlcyBhcmUgcHV0
IGluIGludGVybmFsX3JlIGFuZCBpbnRlcm5hbF9zdHVkeSBpZiB0aGVyZSB3YXMKLXN0dWR5IGRh
dGEgdG9vLiAqLwotCi0jaWYgIUpBVkFTQ1JJUFQKLWlmIChyZS0+bWFnaWNfbnVtYmVyICE9IE1B
R0lDX05VTUJFUikKLSAgewotICByZSA9IF9wY3JlX3RyeV9mbGlwcGVkKHJlLCAmaW50ZXJuYWxf
cmUsIHN0dWR5LCAmaW50ZXJuYWxfc3R1ZHkpOwotICBpZiAocmUgPT0gTlVMTCkgcmV0dXJuIFBD
UkVfRVJST1JfQkFETUFHSUM7Ci0gIGlmIChzdHVkeSAhPSBOVUxMKSBzdHVkeSA9ICZpbnRlcm5h
bF9zdHVkeTsKLSAgfQotI2VuZGlmCi0KIC8qIFNldCB1cCBvdGhlciBkYXRhICovCiAKLWFuY2hv
cmVkID0gKChyZS0+b3B0aW9ucyB8IG9wdGlvbnMpICYgUENSRV9BTkNIT1JFRCkgIT0gMDsKIHN0
YXJ0bGluZSA9IChyZS0+b3B0aW9ucyAmIFBDUkVfU1RBUlRMSU5FKSAhPSAwOwotZmlyc3RsaW5l
ID0gKHJlLT5vcHRpb25zICYgUENSRV9GSVJTVExJTkUpICE9IDA7CiAKIC8qIFRoZSBjb2RlIHN0
YXJ0cyBhZnRlciB0aGUgcmVhbF9wY3JlIGJsb2NrIGFuZCB0aGUgY2FwdHVyZSBuYW1lIHRhYmxl
LiAqLwogCi1tYXRjaF9ibG9jay5zdGFydF9jb2RlID0gKGNvbnN0IHVzY2hhciAqKWV4dGVybmFs
X3JlICsgcmUtPm5hbWVfdGFibGVfb2Zmc2V0ICsKK3N0YXJ0X2NvZGUgPSAoY29uc3QgdXNjaGFy
ICopZXh0ZXJuYWxfcmUgKyByZS0+bmFtZV90YWJsZV9vZmZzZXQgKwogICByZS0+bmFtZV9jb3Vu
dCAqIHJlLT5uYW1lX2VudHJ5X3NpemU7CiAKIG1hdGNoX2Jsb2NrLnN0YXJ0X3N1YmplY3QgPSAo
VVNQVFIpc3ViamVjdDsKLW1hdGNoX2Jsb2NrLnN0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDsK
IG1hdGNoX2Jsb2NrLmVuZF9zdWJqZWN0ID0gbWF0Y2hfYmxvY2suc3RhcnRfc3ViamVjdCArIGxl
bmd0aDsKIGVuZF9zdWJqZWN0ID0gbWF0Y2hfYmxvY2suZW5kX3N1YmplY3Q7CiAKLW1hdGNoX2Js
b2NrLmVuZG9ubHkgPSAocmUtPm9wdGlvbnMgJiBQQ1JFX0RPTExBUl9FTkRPTkxZKSAhPSAwOwot
bWF0Y2hfYmxvY2sudXRmOCA9IChyZS0+b3B0aW9ucyAmIFBDUkVfVVRGOCkgIT0gMDsKLQotbWF0
Y2hfYmxvY2subm90Ym9sID0gKG9wdGlvbnMgJiBQQ1JFX05PVEJPTCkgIT0gMDsKLW1hdGNoX2Js
b2NrLm5vdGVvbCA9IChvcHRpb25zICYgUENSRV9OT1RFT0wpICE9IDA7Ci1tYXRjaF9ibG9jay5u
b3RlbXB0eSA9IChvcHRpb25zICYgUENSRV9OT1RFTVBUWSkgIT0gMDsKLW1hdGNoX2Jsb2NrLnBh
cnRpYWwgPSAob3B0aW9ucyAmIFBDUkVfUEFSVElBTCkgIT0gMDsKLW1hdGNoX2Jsb2NrLmhpdGVu
ZCA9IEZBTFNFOwotCi1tYXRjaF9ibG9jay5yZWN1cnNpdmUgPSBOVUxMOyAgICAgICAgICAgICAg
ICAgICAvKiBObyByZWN1cnNpb24gYXQgdG9wIGxldmVsICovCi0KIG1hdGNoX2Jsb2NrLmxjYyA9
IHRhYmxlcyArIGxjY19vZmZzZXQ7CiBtYXRjaF9ibG9jay5jdHlwZXMgPSB0YWJsZXMgKyBjdHlw
ZXNfb2Zmc2V0OwogCi0vKiBQYXJ0aWFsIG1hdGNoaW5nIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBh
IHJlc3RyaWN0ZWQgc2V0IG9mIHJlZ2V4ZXMgYXQgdGhlCi1tb21lbnQuICovCi0KLWlmIChtYXRj
aF9ibG9jay5wYXJ0aWFsICYmIChyZS0+b3B0aW9ucyAmIFBDUkVfTk9QQVJUSUFMKSAhPSAwKQot
ICByZXR1cm4gUENSRV9FUlJPUl9CQURQQVJUSUFMOwotCi0vKiBDaGVjayBhIFVURi04IHN0cmlu
ZyBpZiByZXF1aXJlZC4gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSBvZiBwYXNzaW5nCi1i
YWNrIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LiAqLwotCi0jaWYgIVBDUkVfVVRGMTYKLSNpZmRlZiBT
VVBQT1JUX1VURjgKLWlmIChtYXRjaF9ibG9jay51dGY4ICYmIChvcHRpb25zICYgUENSRV9OT19V
VEY4X0NIRUNLKSA9PSAwKQotICB7Ci0gIGlmIChfcGNyZV92YWxpZF91dGY4KChwY3JlX3VjaGFy
ICopc3ViamVjdCwgbGVuZ3RoKSA+PSAwKQotICAgIHJldHVybiBQQ1JFX0VSUk9SX0JBRFVURjg7
Ci0gIGlmIChzdGFydF9vZmZzZXQgPiAwICYmIHN0YXJ0X29mZnNldCA8IGxlbmd0aCkKLSAgICB7
Ci0gICAgaW50IHRiID0gKChwY3JlX3VjaGFyICopc3ViamVjdClbc3RhcnRfb2Zmc2V0XTsKLSAg
ICBpZiAodGIgPiAxMjcpCi0gICAgICB7Ci0gICAgICB0YiAmPSAweGMwOwotICAgICAgaWYgKHRi
ICE9IDAgJiYgdGIgIT0gMHhjMCkgcmV0dXJuIFBDUkVfRVJST1JfQkFEVVRGOF9PRkZTRVQ7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgaW1zIG9wdGlvbnMg
Y2FuIHZhcnkgZHVyaW5nIHRoZSBtYXRjaGluZyBhcyBhIHJlc3VsdCBvZiB0aGUgcHJlc2VuY2UK
LW9mICg/aW1zKSBpdGVtcyBpbiB0aGUgcGF0dGVybi4gVGhleSBhcmUga2VwdCBpbiBhIGxvY2Fs
IHZhcmlhYmxlIHNvIHRoYXQKLXJlc3RvcmluZyBhdCB0aGUgZXhpdCBvZiBhIGdyb3VwIGlzIGVh
c3kuICovCi0KLWltcyA9IHJlLT5vcHRpb25zICYgKFBDUkVfQ0FTRUxFU1N8UENSRV9NVUxUSUxJ
TkV8UENSRV9ET1RBTEwpOworbWF0Y2hfYmxvY2subXVsdGlsaW5lID0gKHJlLT5vcHRpb25zICYg
UENSRV9NVUxUSUxJTkUpICE9IDA7CittYXRjaF9ibG9jay5jYXNlbGVzcyA9IChyZS0+b3B0aW9u
cyAmIFBDUkVfQ0FTRUxFU1MpICE9IDA7CiAKIC8qIElmIHRoZSBleHByZXNzaW9uIGhhcyBnb3Qg
bW9yZSBiYWNrIHJlZmVyZW5jZXMgdGhhbiB0aGUgb2Zmc2V0cyBzdXBwbGllZCBjYW4KIGhvbGQs
IHdlIGdldCBhIHRlbXBvcmFyeSBjaHVuayBvZiB3b3JraW5nIHN0b3JlIHRvIHVzZSBkdXJpbmcg
dGhlIG1hdGNoaW5nLgpAQCAtMzg4OSw3ICsyMTk3LDcgQEAgaWYgKHJlLT50b3BfYmFja3JlZiA+
IDAgJiYgcmUtPnRvcF9iYWNrcgogICB7CiAgIG9jb3VudCA9IHJlLT50b3BfYmFja3JlZiAqIDMg
KyAzOwogICBtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yID0gKGludCAqKShwY3JlX21hbGxvYyko
b2NvdW50ICogc2l6ZW9mKGludCkpOwotICBpZiAobWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciA9
PSBOVUxMKSByZXR1cm4gUENSRV9FUlJPUl9OT01FTU9SWTsKKyAgaWYgKG1hdGNoX2Jsb2NrLm9m
ZnNldF92ZWN0b3IgPT0gTlVMTCkgcmV0dXJuIEpTX1JFR0VYUF9FUlJPUl9OT01FTU9SWTsKICAg
dXNpbmdfdGVtcG9yYXJ5X29mZnNldHMgPSBUUlVFOwogICBEUFJJTlRGKCgiR290IG1lbW9yeSB0
byBob2xkIGJhY2sgcmVmZXJlbmNlc1xuIikpOwogICB9CkBAIC0zODk4LDcgKzIyMDYsNiBAQCBl
bHNlIG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3IgPSBvZmZzZXRzCiBtYXRjaF9ibG9jay5vZmZz
ZXRfZW5kID0gb2NvdW50OwogbWF0Y2hfYmxvY2sub2Zmc2V0X21heCA9ICgyKm9jb3VudCkvMzsK
IG1hdGNoX2Jsb2NrLm9mZnNldF9vdmVyZmxvdyA9IEZBTFNFOwotbWF0Y2hfYmxvY2suY2FwdHVy
ZV9sYXN0ID0gLTE7CiAKIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9mZnNldHMg
dGhhdCB3ZSBuZWVkIHRvIHJlc2V0IGVhY2ggdGltZS4gRG9pbmcKIHRoaXMgbWFrZXMgYSBodWdl
IGRpZmZlcmVuY2UgdG8gZXhlY3V0aW9uIHRpbWUgd2hlbiB0aGVyZSBhcmVuJ3QgbWFueSBicmFj
a2V0cwpAQCAtMzkyNCw3ICsyMjMxLDYgQEAgYXQgcnVuIHRpbWUsIHNvIHdlIGhhdmUgdG8gdGVz
dCBmb3IgYW5jaAogYW4gdW5hbmNob3JlZCBwYXR0ZXJuLCBvZiBjb3Vyc2UuIElmIHRoZXJlJ3Mg
bm8gZmlyc3QgY2hhciBhbmQgdGhlIHBhdHRlcm4gd2FzCiBzdHVkaWVkLCB0aGVyZSBtYXkgYmUg
YSBiaXRtYXAgb2YgcG9zc2libGUgZmlyc3QgY2hhcmFjdGVycy4gKi8KIAotaWYgKCFhbmNob3Jl
ZCkKICAgewogICBpZiAoKHJlLT5vcHRpb25zICYgUENSRV9GSVJTVFNFVCkgIT0gMCkKICAgICB7
CkBAIC0zOTMyLDEwICsyMjM4LDYgQEAgaWYgKCFhbmNob3JlZCkKICAgICBpZiAoKGZpcnN0X2J5
dGVfY2FzZWxlc3MgPSAoKHJlLT5maXJzdF9ieXRlICYgUkVRX0NBU0VMRVNTKSAhPSAwKSkgPT0g
VFJVRSkKICAgICAgIGZpcnN0X2J5dGUgPSBtYXRjaF9ibG9jay5sY2NbZmlyc3RfYnl0ZV07CiAg
ICAgfQotICBlbHNlCi0gICAgaWYgKCFzdGFydGxpbmUgJiYgc3R1ZHkgIT0gTlVMTCAmJgotICAg
ICAgKHN0dWR5LT5vcHRpb25zICYgUENSRV9TVFVEWV9NQVBQRUQpICE9IDApCi0gICAgICAgIHN0
YXJ0X2JpdHMgPSBzdHVkeS0+c3RhcnRfYml0czsKICAgfQogCiAvKiBGb3IgYW5jaG9yZWQgb3Ig
dW5hbmNob3JlZCBtYXRjaGVzLCB0aGVyZSBtYXkgYmUgYSAibGFzdCBrbm93biByZXF1aXJlZApA
QCAtMzk3MCwxMyArMjI3Miw2IEBAIGRvCiAgIGF0IGEgbmV3bGluZS4gSWYgdGhlIG1hdGNoIGZh
aWxzIGF0IHRoZSBuZXdsaW5lLCBsYXRlciBjb2RlIGJyZWFrcyB0aGlzIGxvb3AuCiAgICovCiAK
LSAgaWYgKGZpcnN0bGluZSkKLSAgICB7Ci0gICAgVVNQVFIgdCA9IHN0YXJ0X21hdGNoOwotICAg
IHdoaWxlICh0IDwgc2F2ZV9lbmRfc3ViamVjdCAmJiAqdCAhPSAnXG4nKSB0Kys7Ci0gICAgZW5k
X3N1YmplY3QgPSB0OwotICAgIH0KLQogICAvKiBOb3cgdGVzdCBmb3IgYSB1bmlxdWUgZmlyc3Qg
Ynl0ZSAqLwogCiAgIGlmIChmaXJzdF9ieXRlID49IDApCkBAIC0zOTg2LDEwICsyMjgxLDggQEAg
ZG8KICAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0KQogICAgICAgICB7CiAg
ICAgICAgIGludCBzbSA9ICpzdGFydF9tYXRjaDsKLSNpZiBQQ1JFX1VURjE2CiAgICAgICAgIGlm
IChzbSA+IDEyNykKICAgICAgICAgICBicmVhazsKLSNlbmRpZgogICAgICAgICBpZiAobWF0Y2hf
YmxvY2subGNjW3NtXSA9PSBmaXJzdF9jaGFyKQogICAgICAgICAgIGJyZWFrOwogICAgICAgICBz
dGFydF9tYXRjaCsrOwpAQCAtNDAxMCwxNyArMjMwMyw2IEBAIGRvCiAgICAgICB9CiAgICAgfQog
Ci0gIC8qIE9yIHRvIGEgbm9uLXVuaXF1ZSBmaXJzdCBjaGFyIGFmdGVyIHN0dWR5ICovCi0KLSAg
ZWxzZSBpZiAoc3RhcnRfYml0cyAhPSBOVUxMKQotICAgIHsKLSAgICB3aGlsZSAoc3RhcnRfbWF0
Y2ggPCBlbmRfc3ViamVjdCkKLSAgICAgIHsKLSAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBj
ID0gKnN0YXJ0X21hdGNoOwotICAgICAgaWYgKChzdGFydF9iaXRzW2MvOF0gJiAoMSA8PCAoYyY3
KSkpID09IDApIHN0YXJ0X21hdGNoKys7IGVsc2UgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCiAg
IC8qIFJlc3RvcmUgZnVkZ2VkIGVuZF9zdWJqZWN0ICovCiAKICAgZW5kX3N1YmplY3QgPSBzYXZl
X2VuZF9zdWJqZWN0OwpAQCAtNDA0OCw4ICsyMzMwLDcgQEAgZG8KICAgKi8KIAogICBpZiAocmVx
X2J5dGUgPj0gMCAmJgotICAgICAgZW5kX3N1YmplY3QgLSBzdGFydF9tYXRjaCA8IFJFUV9CWVRF
X01BWCAmJgotICAgICAgIW1hdGNoX2Jsb2NrLnBhcnRpYWwpCisgICAgICBlbmRfc3ViamVjdCAt
IHN0YXJ0X21hdGNoIDwgUkVRX0JZVEVfTUFYKQogICAgIHsKICAgICByZWdpc3RlciBVU1BUUiBw
ID0gc3RhcnRfbWF0Y2ggKyAoKGZpcnN0X2J5dGUgPj0gMCk/IDEgOiAwKTsKIApAQCAtNDA5Niw4
ICsyMzc3LDcgQEAgZG8KICAgbWF0Y2hfYmxvY2suc3RhcnRfbWF0Y2ggPSBzdGFydF9tYXRjaDsK
ICAgbWF0Y2hfYmxvY2subWF0Y2hfY2FsbF9jb3VudCA9IDA7CiAKLSAgcmMgPSBtYXRjaChzdGFy
dF9tYXRjaCwgbWF0Y2hfYmxvY2suc3RhcnRfY29kZSwgMiwgJm1hdGNoX2Jsb2NrLCBpbXMsIE5V
TEwsCi0gICAgbWF0Y2hfaXNncm91cCwgMCk7CisgIHJjID0gbWF0Y2goc3RhcnRfbWF0Y2gsIHN0
YXJ0X2NvZGUsIDIsICZtYXRjaF9ibG9jayk7CiAKICAgLyogV2hlbiB0aGUgcmVzdWx0IGlzIG5v
IG1hdGNoLCBpZiB0aGUgc3ViamVjdCdzIGZpcnN0IGNoYXJhY3RlciB3YXMgYQogICBuZXdsaW5l
IGFuZCB0aGUgUENSRV9GSVJTVExJTkUgb3B0aW9uIGlzIHNldCwgYnJlYWsgKHdoaWNoIHdpbGwg
cmV0dXJuCkBAIC00MTA4LDEzICsyMzg4LDkgQEAgZG8KIAogICBpZiAocmMgPT0gTUFUQ0hfTk9N
QVRDSCkKICAgICB7Ci0gICAgaWYgKGZpcnN0bGluZSAmJiBJU19ORVdMSU5FKCpzdGFydF9tYXRj
aCkpIGJyZWFrOwogICAgIHN0YXJ0X21hdGNoKys7Ci0jaWZkZWYgU1VQUE9SVF9VVEY4Ci0gICAg
aWYgKG1hdGNoX2Jsb2NrLnV0ZjgpCiAgICAgICB3aGlsZShzdGFydF9tYXRjaCA8IGVuZF9zdWJq
ZWN0ICYmIElTTUlEQ0hBUigqc3RhcnRfbWF0Y2gpKQogICAgICAgICBzdGFydF9tYXRjaCsrOwot
I2VuZGlmCiAgICAgY29udGludWU7CiAgICAgfQogCkBAIC00MTU2LDcgKzI0MzIsNyBAQCBkbwog
CiAvKiBUaGlzICJ3aGlsZSIgaXMgdGhlIGVuZCBvZiB0aGUgImRvIiBhYm92ZSAqLwogCi13aGls
ZSAoIWFuY2hvcmVkICYmIHN0YXJ0X21hdGNoIDw9IGVuZF9zdWJqZWN0KTsKK3doaWxlIChzdGFy
dF9tYXRjaCA8PSBlbmRfc3ViamVjdCk7CiAKIGlmICh1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cykK
ICAgewpAQCAtNDE2NCwxNiArMjQ0MCw4IEBAIGlmICh1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cykK
ICAgKHBjcmVfZnJlZSkobWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3Rvcik7CiAgIH0KIAotaWYgKG1h
dGNoX2Jsb2NrLnBhcnRpYWwgJiYgbWF0Y2hfYmxvY2suaGl0ZW5kKQotICB7Ci0gIERQUklOVEYo
KCI+Pj4+IHJldHVybmluZyBQQ1JFX0VSUk9SX1BBUlRJQUxcbiIpKTsKLSAgcmV0dXJuIFBDUkVf
RVJST1JfUEFSVElBTDsKLSAgfQotZWxzZQotICB7CiAgIERQUklOVEYoKCI+Pj4+IHJldHVybmlu
ZyBQQ1JFX0VSUk9SX05PTUFUQ0hcbiIpKTsKLSAgcmV0dXJuIFBDUkVfRVJST1JfTk9NQVRDSDsK
LSAgfQorICByZXR1cm4gSlNfUkVHRVhQX0VSUk9SX05PTUFUQ0g7CiB9CiAKIC8qIEVuZCBvZiBw
Y3JlX2V4ZWMuYyAqLwpJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2Z1bGxpbmZvLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2Z1bGxpbmZvLmMJKHJldmlz
aW9uIDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2Z1bGxpbmZvLmMJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTUzICsxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJl
c3Npb25zICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLS8qUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQg
cmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKLWFuZCBzZW1hbnRpY3MgYXJlIGFzIGNs
b3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKLSAgICAgICAgICAgQ29w
eXJpZ2h0IChjKSAxOTk3LTIwMDYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKLQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKLSAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9m
IENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAgICAg
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQot
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQot
Ci0vKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZXh0ZXJuYWwgZnVuY3Rpb24gcGNyZV9mdWxs
aW5mbygpLCB3aGljaCByZXR1cm5zCi1pbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBpbGVkIHBhdHRl
cm4uICovCi0KLQotI2luY2x1ZGUgInBjcmVfaW50ZXJuYWwuaCIKLQotCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgUmV0dXJuIGlu
Zm8gYWJvdXQgY29tcGlsZWQgcGF0dGVybiAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgaXMgYSBuZXdlciAiaW5mbyIg
ZnVuY3Rpb24gd2hpY2ggaGFzIGFuIGV4dGVuc2libGUgaW50ZXJmYWNlIHNvCi10aGF0IGFkZGl0
aW9uYWwgaXRlbXMgY2FuIGJlIGFkZGVkIGNvbXBhdGlibHkuCi0KLUFyZ3VtZW50czoKLSAgYXJn
dW1lbnRfcmUgICAgICBwb2ludHMgdG8gY29tcGlsZWQgY29kZQotICBleHRyYV9kYXRhICAgICAg
IHBvaW50cyBleHRyYSBkYXRhLCBvciBOVUxMCi0gIHdoYXQgICAgICAgICAgICAgd2hhdCBpbmZv
cm1hdGlvbiBpcyByZXF1aXJlZAotICB3aGVyZSAgICAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUg
aW5mb3JtYXRpb24KLQotUmV0dXJuczogICAgICAgICAgIDAgaWYgZGF0YSByZXR1cm5lZCwgbmVn
YXRpdmUgb24gZXJyb3IKLSovCi0KLVBDUkVfREFUQV9TQ09QRSBpbnQKLXBjcmVfZnVsbGluZm8o
Y29uc3QgcGNyZSAqYXJndW1lbnRfcmUsIGNvbnN0IHBjcmVfZXh0cmEgKmV4dHJhX2RhdGEsIGlu
dCB3aGF0LAotICB2b2lkICp3aGVyZSkKLXsKLSNpZiAhSkFWQVNDUklQVAotcmVhbF9wY3JlIGlu
dGVybmFsX3JlOwotcGNyZV9zdHVkeV9kYXRhIGludGVybmFsX3N0dWR5OwotI2VuZGlmCi1jb25z
dCByZWFsX3BjcmUgKnJlID0gKGNvbnN0IHJlYWxfcGNyZSAqKWFyZ3VtZW50X3JlOwotY29uc3Qg
cGNyZV9zdHVkeV9kYXRhICpzdHVkeSA9IE5VTEw7Ci0KLWlmIChyZSA9PSBOVUxMIHx8IHdoZXJl
ID09IE5VTEwpIHJldHVybiBQQ1JFX0VSUk9SX05VTEw7Ci0KLWlmIChleHRyYV9kYXRhICE9IE5V
TEwgJiYgKGV4dHJhX2RhdGEtPmZsYWdzICYgUENSRV9FWFRSQV9TVFVEWV9EQVRBKSAhPSAwKQot
ICBzdHVkeSA9IChjb25zdCBwY3JlX3N0dWR5X2RhdGEgKilleHRyYV9kYXRhLT5zdHVkeV9kYXRh
OwotCi0jaWYgIUpBVkFTQ1JJUFQKLWlmIChyZS0+bWFnaWNfbnVtYmVyICE9IE1BR0lDX05VTUJF
UikKLSAgewotICByZSA9IF9wY3JlX3RyeV9mbGlwcGVkKHJlLCAmaW50ZXJuYWxfcmUsIHN0dWR5
LCAmaW50ZXJuYWxfc3R1ZHkpOwotICBpZiAocmUgPT0gTlVMTCkgcmV0dXJuIFBDUkVfRVJST1Jf
QkFETUFHSUM7Ci0gIGlmIChzdHVkeSAhPSBOVUxMKSBzdHVkeSA9ICZpbnRlcm5hbF9zdHVkeTsK
LSAgfQotI2VuZGlmCi0KLXN3aXRjaCAod2hhdCkKLSAgewotICBjYXNlIFBDUkVfSU5GT19PUFRJ
T05TOgotICAqKCh1bnNpZ25lZCBsb25nIGludCAqKXdoZXJlKSA9IHJlLT5vcHRpb25zICYgUFVC
TElDX09QVElPTlM7Ci0gIGJyZWFrOwotCi0gIGNhc2UgUENSRV9JTkZPX1NJWkU6Ci0gICooKHNp
emVfdCAqKXdoZXJlKSA9IHJlLT5zaXplOwotICBicmVhazsKLQotICBjYXNlIFBDUkVfSU5GT19T
VFVEWVNJWkU6Ci0gICooKHNpemVfdCAqKXdoZXJlKSA9IChzdHVkeSA9PSBOVUxMKT8gMCA6IHN0
dWR5LT5zaXplOwotICBicmVhazsKLQotICBjYXNlIFBDUkVfSU5GT19DQVBUVVJFQ09VTlQ6Ci0g
ICooKGludCAqKXdoZXJlKSA9IHJlLT50b3BfYnJhY2tldDsKLSAgYnJlYWs7Ci0KLSAgY2FzZSBQ
Q1JFX0lORk9fQkFDS1JFRk1BWDoKLSAgKigoaW50ICopd2hlcmUpID0gcmUtPnRvcF9iYWNrcmVm
OwotICBicmVhazsKLQotICBjYXNlIFBDUkVfSU5GT19GSVJTVEJZVEU6Ci0gICooKGludCAqKXdo
ZXJlKSA9Ci0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfRklSU1RTRVQpICE9IDApPyByZS0+Zmly
c3RfYnl0ZSA6Ci0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfU1RBUlRMSU5FKSAhPSAwKT8gLTEg
OiAtMjsKLSAgYnJlYWs7Ci0KLSAgLyogTWFrZSBzdXJlIHdlIHBhc3MgYmFjayB0aGUgcG9pbnRl
ciB0byB0aGUgYml0IHZlY3RvciBpbiB0aGUgZXh0ZXJuYWwKLSAgYmxvY2ssIG5vdCB0aGUgaW50
ZXJuYWwgY29weSAod2l0aCBmbGlwcGVkIGludGVnZXIgZmllbGRzKS4gKi8KLQotICBjYXNlIFBD
UkVfSU5GT19GSVJTVFRBQkxFOgotICAqKChjb25zdCB1c2NoYXIgKiopd2hlcmUpID0KLSAgICAo
c3R1ZHkgIT0gTlVMTCAmJiAoc3R1ZHktPm9wdGlvbnMgJiBQQ1JFX1NUVURZX01BUFBFRCkgIT0g
MCk/Ci0gICAgICAoKGNvbnN0IHBjcmVfc3R1ZHlfZGF0YSAqKWV4dHJhX2RhdGEtPnN0dWR5X2Rh
dGEpLT5zdGFydF9iaXRzIDogTlVMTDsKLSAgYnJlYWs7Ci0KLSAgY2FzZSBQQ1JFX0lORk9fTEFT
VExJVEVSQUw6Ci0gICooKGludCAqKXdoZXJlKSA9Ci0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVf
UkVRQ0hTRVQpICE9IDApPyByZS0+cmVxX2J5dGUgOiAtMTsKLSAgYnJlYWs7Ci0KLSAgY2FzZSBQ
Q1JFX0lORk9fTkFNRUVOVFJZU0laRToKLSAgKigoaW50ICopd2hlcmUpID0gcmUtPm5hbWVfZW50
cnlfc2l6ZTsKLSAgYnJlYWs7Ci0KLSAgY2FzZSBQQ1JFX0lORk9fTkFNRUNPVU5UOgotICAqKChp
bnQgKil3aGVyZSkgPSByZS0+bmFtZV9jb3VudDsKLSAgYnJlYWs7Ci0KLSAgY2FzZSBQQ1JFX0lO
Rk9fTkFNRVRBQkxFOgotICAqKChjb25zdCB1c2NoYXIgKiopd2hlcmUpID0gKGNvbnN0IHVzY2hh
ciAqKXJlICsgcmUtPm5hbWVfdGFibGVfb2Zmc2V0OwotICBicmVhazsKLQotICBjYXNlIFBDUkVf
SU5GT19ERUZBVUxUX1RBQkxFUzoKLSAgKigoY29uc3QgdXNjaGFyICoqKXdoZXJlKSA9IChjb25z
dCB1c2NoYXIgKikoX3BjcmVfZGVmYXVsdF90YWJsZXMpOwotICBicmVhazsKLQotICBkZWZhdWx0
OiByZXR1cm4gUENSRV9FUlJPUl9CQURPUFRJT047Ci0gIH0KLQotcmV0dXJuIDA7Ci19Ci0KLS8q
IEVuZCBvZiBwY3JlX2Z1bGxpbmZvLmMgKi8KKy8qIGRlbGV0ZSBtZSAqLwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcGNyZS9wY3JlX2dldC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV9nZXQuYwkocmV2aXNpb24gMjc0MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3Bj
cmVfZ2V0LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYwICsxIEBACi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgIFBlcmwtQ29tcGF0aWJs
ZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0
aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4Ci1hbmQgc2Vt
YW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxh
bmd1YWdlLgotCi0gICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVs
Ci0gICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDA2IFVuaXZlcnNpdHkgb2YgQ2FtYnJp
ZGdlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLUFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLUxJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSovCi0KLQotLyogVGhpcyBtb2R1bGUgY29udGFpbnMgc29tZSBjb252ZW5pZW5j
ZSBmdW5jdGlvbnMgZm9yIGV4dHJhY3Rpbmcgc3Vic3RyaW5ncwotZnJvbSB0aGUgc3ViamVjdCBz
dHJpbmcgYWZ0ZXIgYSByZWdleCBtYXRjaCBoYXMgc3VjY2VlZGVkLiBUaGUgb3JpZ2luYWwgaWRl
YQotZm9yIHRoZXNlIGZ1bmN0aW9ucyBjYW1lIGZyb20gU2NvdHQgV2ltZXIuICovCi0KLQotI2lu
Y2x1ZGUgInBjcmVfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAg
ICAgICAgICAgRmluZCBudW1iZXIgZm9yIG5hbWVkIHN0cmluZyAgICAgICAgICoKLSoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgZnVu
Y3Rpb24gaXMgdXNlZCBieSB0aGUgdHdvIGV4dHJhY3Rpb24gZnVuY3Rpb25zIGJlbG93LCBhcyB3
ZWxsCi1hcyBiZWluZyBnZW5lcmFsbHkgYXZhaWxhYmxlLgotCi1Bcmd1bWVudHM6Ci0gIGNvZGUg
ICAgICAgIHRoZSBjb21waWxlZCByZWdleAotICBzdHJpbmduYW1lICB0aGUgbmFtZSB3aG9zZSBu
dW1iZXIgaXMgcmVxdWlyZWQKLQotUmV0dXJuczogICAgICB0aGUgbnVtYmVyIG9mIHRoZSBuYW1l
ZCBwYXJlbnRoZXNlcywgb3IgYSBuZWdhdGl2ZSBudW1iZXIKLSAgICAgICAgICAgICAgICAoUENS
RV9FUlJPUl9OT1NVQlNUUklORykgaWYgbm90IGZvdW5kCi0qLwotCi0vKiBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgZm9yIFVURi0xNiBiZWNhdXNlIHRoZSBuYW1lIHRhYmxlIGhhcyA4LWJpdCBj
aGFyYWN0ZXJzIGluIGl0ISAqLwotI2lmICFQQ1JFX1VURjE2Ci1pbnQKLXBjcmVfZ2V0X3N0cmlu
Z251bWJlcihjb25zdCBwY3JlICpjb2RlLCBjb25zdCBwY3JlX2NoYXIgKnN0cmluZ25hbWUpCi17
Ci1pbnQgcmM7Ci1pbnQgZW50cnlzaXplOwotaW50IHRvcCwgYm90OwotdXNjaGFyICpuYW1ldGFi
bGU7Ci0KLWlmICgocmMgPSBwY3JlX2Z1bGxpbmZvKGNvZGUsIE5VTEwsIFBDUkVfSU5GT19OQU1F
Q09VTlQsICZ0b3ApKSAhPSAwKQotICByZXR1cm4gcmM7Ci1pZiAodG9wIDw9IDApIHJldHVybiBQ
Q1JFX0VSUk9SX05PU1VCU1RSSU5HOwotCi1pZiAoKHJjID0gcGNyZV9mdWxsaW5mbyhjb2RlLCBO
VUxMLCBQQ1JFX0lORk9fTkFNRUVOVFJZU0laRSwgJmVudHJ5c2l6ZSkpICE9IDApCi0gIHJldHVy
biByYzsKLWlmICgocmMgPSBwY3JlX2Z1bGxpbmZvKGNvZGUsIE5VTEwsIFBDUkVfSU5GT19OQU1F
VEFCTEUsICZuYW1ldGFibGUpKSAhPSAwKQotICByZXR1cm4gcmM7Ci0KLWJvdCA9IDA7Ci13aGls
ZSAodG9wID4gYm90KQotICB7Ci0gIGludCBtaWQgPSAodG9wICsgYm90KSAvIDI7Ci0gIHVzY2hh
ciAqZW50cnkgPSBuYW1ldGFibGUgKyBlbnRyeXNpemUqbWlkOwotICBpbnQgYyA9IHN0cmNtcChz
dHJpbmduYW1lLCAoY2hhciAqKShlbnRyeSArIDIpKTsKLSAgaWYgKGMgPT0gMCkgcmV0dXJuIChl
bnRyeVswXSA8PCA4KSArIGVudHJ5WzFdOwotICBpZiAoYyA+IDApIGJvdCA9IG1pZCArIDE7IGVs
c2UgdG9wID0gbWlkOwotICB9Ci0KLXJldHVybiBQQ1JFX0VSUk9SX05PU1VCU1RSSU5HOwotfQot
I2VuZGlmCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotKiAgICAgIENvcHkgY2FwdHVyZWQgc3RyaW5nIHRvIGdpdmVuIGJ1ZmZlciAgICAg
ICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LS8qIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgc2luZ2xlIGNhcHR1cmVkIHN1YnN0cmluZyBpbnRv
IGEgZ2l2ZW4gYnVmZmVyLgotTm90ZSB0aGF0IHdlIHVzZSBtZW1jcHkoKSByYXRoZXIgdGhhbiBz
dHJuY3B5KCkgaW4gY2FzZSB0aGVyZSBhcmUgYmluYXJ5IHplcm9zCi1pbiB0aGUgc3RyaW5nLgot
Ci1Bcmd1bWVudHM6Ci0gIHN1YmplY3QgICAgICAgIHRoZSBzdWJqZWN0IHN0cmluZyB0aGF0IHdh
cyBtYXRjaGVkCi0gIG92ZWN0b3IgICAgICAgIHBvaW50ZXIgdG8gdGhlIG9mZnNldHMgdGFibGUK
LSAgc3RyaW5nY291bnQgICAgdGhlIG51bWJlciBvZiBzdWJzdHJpbmdzIHRoYXQgd2VyZSBjYXB0
dXJlZAotICAgICAgICAgICAgICAgICAgIChpLmUuIHRoZSB5aWVsZCBvZiB0aGUgcGNyZV9leGVj
IGNhbGwsIHVubGVzcwotICAgICAgICAgICAgICAgICAgIHRoYXQgd2FzIHplcm8sIGluIHdoaWNo
IGNhc2UgaXQgc2hvdWxkIGJlIDEvMwotICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvZmZzZXQg
dGFibGUgc2l6ZSkKLSAgc3RyaW5nbnVtYmVyICAgdGhlIG51bWJlciBvZiB0aGUgcmVxdWlyZWQg
c3Vic3RyaW5nCi0gIGJ1ZmZlciAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgc3Vic3RyaW5nCi0g
IHNpemUgICAgICAgICAgIHRoZSBzaXplIG9mIHRoZSBidWZmZXIKLQotUmV0dXJuczogICAgICAg
ICBpZiBzdWNjZXNzZnVsOgotICAgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGNv
cGllZCBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgdGhlIHplcm8KLSAgICAgICAgICAgICAgICAgICB0
aGF0IGlzIHB1dCBvbiB0aGUgZW5kOyBjYW4gYmUgemVybwotICAgICAgICAgICAgICAgICBpZiBu
b3Qgc3VjY2Vzc2Z1bDoKLSAgICAgICAgICAgICAgICAgICBQQ1JFX0VSUk9SX05PTUVNT1JZICgt
NikgYnVmZmVyIHRvbyBzbWFsbAotICAgICAgICAgICAgICAgICAgIFBDUkVfRVJST1JfTk9TVUJT
VFJJTkcgKC03KSBubyBzdWNoIGNhcHR1cmVkIHN1YnN0cmluZwotKi8KLQotaW50Ci1wY3JlX2Nv
cHlfc3Vic3RyaW5nKGNvbnN0IHBjcmVfY2hhciAqc3ViamVjdCwgaW50ICpvdmVjdG9yLCBpbnQg
c3RyaW5nY291bnQsCi0gIGludCBzdHJpbmdudW1iZXIsIHBjcmVfY2hhciAqYnVmZmVyLCBpbnQg
c2l6ZSkKLXsKLWludCB5aWVsZDsKLWlmIChzdHJpbmdudW1iZXIgPCAwIHx8IHN0cmluZ251bWJl
ciA+PSBzdHJpbmdjb3VudCkKLSAgcmV0dXJuIFBDUkVfRVJST1JfTk9TVUJTVFJJTkc7Ci1zdHJp
bmdudW1iZXIgKj0gMjsKLXlpZWxkID0gb3ZlY3RvcltzdHJpbmdudW1iZXIrMV0gLSBvdmVjdG9y
W3N0cmluZ251bWJlcl07Ci1pZiAoc2l6ZSA8IHlpZWxkICsgMSkgcmV0dXJuIFBDUkVfRVJST1Jf
Tk9NRU1PUlk7Ci1tZW1jcHkoYnVmZmVyLCBzdWJqZWN0ICsgb3ZlY3RvcltzdHJpbmdudW1iZXJd
LCB5aWVsZCk7Ci1idWZmZXJbeWllbGRdID0gMDsKLXJldHVybiB5aWVsZDsKLX0KLQotCi0KLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgQ29w
eSBuYW1lZCBjYXB0dXJlZCBzdHJpbmcgdG8gZ2l2ZW4gYnVmZmVyICAgKgotKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBmdW5jdGlv
biBjb3BpZXMgYSBzaW5nbGUgY2FwdHVyZWQgc3Vic3RyaW5nIGludG8gYSBnaXZlbiBidWZmZXIs
Ci1pZGVudGlmeWluZyBpdCBieSBuYW1lLgotCi1Bcmd1bWVudHM6Ci0gIGNvZGUgICAgICAgICAg
IHRoZSBjb21waWxlZCByZWdleAotICBzdWJqZWN0ICAgICAgICB0aGUgc3ViamVjdCBzdHJpbmcg
dGhhdCB3YXMgbWF0Y2hlZAotICBvdmVjdG9yICAgICAgICBwb2ludGVyIHRvIHRoZSBvZmZzZXRz
IHRhYmxlCi0gIHN0cmluZ2NvdW50ICAgIHRoZSBudW1iZXIgb2Ygc3Vic3RyaW5ncyB0aGF0IHdl
cmUgY2FwdHVyZWQKLSAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgeWllbGQgb2YgdGhlIHBj
cmVfZXhlYyBjYWxsLCB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICB0aGF0IHdhcyB6ZXJvLCBp
biB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSAxLzMKLSAgICAgICAgICAgICAgICAgICBvZiB0aGUg
b2Zmc2V0IHRhYmxlIHNpemUpCi0gIHN0cmluZ25hbWUgICAgIHRoZSBuYW1lIG9mIHRoZSByZXF1
aXJlZCBzdWJzdHJpbmcKLSAgYnVmZmVyICAgICAgICAgd2hlcmUgdG8gcHV0IHRoZSBzdWJzdHJp
bmcKLSAgc2l6ZSAgICAgICAgICAgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgotCi1SZXR1cm5zOiAg
ICAgICAgIGlmIHN1Y2Nlc3NmdWw6Ci0gICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0
aGUgY29waWVkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgemVybwotICAgICAgICAgICAgICAg
ICAgIHRoYXQgaXMgcHV0IG9uIHRoZSBlbmQ7IGNhbiBiZSB6ZXJvCi0gICAgICAgICAgICAgICAg
IGlmIG5vdCBzdWNjZXNzZnVsOgotICAgICAgICAgICAgICAgICAgIFBDUkVfRVJST1JfTk9NRU1P
UlkgKC02KSBidWZmZXIgdG9vIHNtYWxsCi0gICAgICAgICAgICAgICAgICAgUENSRV9FUlJPUl9O
T1NVQlNUUklORyAoLTcpIG5vIHN1Y2ggY2FwdHVyZWQgc3Vic3RyaW5nCi0qLwotCi0vKiBGSVhN
RTogVGhpcyBpcyBub3QgYXZhaWxhYmxlIHVudGlsIHBjcmVfZ2V0X3N0cmluZ251bWJlciBpcyBh
dmFpbGFibGUgZm9yIFVURi0xNi4gKi8KLSNpZiAhUENSRV9VVEYxNgotaW50Ci1wY3JlX2NvcHlf
bmFtZWRfc3Vic3RyaW5nKGNvbnN0IHBjcmUgKmNvZGUsIGNvbnN0IHBjcmVfY2hhciAqc3ViamVj
dCwgaW50ICpvdmVjdG9yLAotICBpbnQgc3RyaW5nY291bnQsIGNvbnN0IHBjcmVfY2hhciAqc3Ry
aW5nbmFtZSwgcGNyZV9jaGFyICpidWZmZXIsIGludCBzaXplKQotewotCi1pZiAobiA8PSAwKSBy
ZXR1cm4gbjsKLXJldHVybiBwY3JlX2NvcHlfc3Vic3RyaW5nKHN1YmplY3QsIG92ZWN0b3IsIHN0
cmluZ2NvdW50LCBuLCBidWZmZXIsIHNpemUpOwotfQotI2VuZGlmCi0KLQotLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICBDb3B5IGFsbCBj
YXB0dXJlZCBzdHJpbmdzIHRvIG5ldyBzdG9yZSAgICAqCi0qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGZ1bmN0aW9uIGdldHMgb25l
IGNodW5rIG9mIHN0b3JlIGFuZCBidWlsZHMgYSBsaXN0IG9mIHBvaW50ZXJzIGFuZCBhbGwKLW9m
IHRoZSBjYXB0dXJlZCBzdWJzdHJpbmdzIGluIGl0LiBBIE5VTEwgcG9pbnRlciBpcyBwdXQgb24g
dGhlIGVuZCBvZiB0aGUgbGlzdC4KLQotQXJndW1lbnRzOgotICBzdWJqZWN0ICAgICAgICB0aGUg
c3ViamVjdCBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZAotICBvdmVjdG9yICAgICAgICBwb2ludGVy
IHRvIHRoZSBvZmZzZXRzIHRhYmxlCi0gIHN0cmluZ2NvdW50ICAgIHRoZSBudW1iZXIgb2Ygc3Vi
c3RyaW5ncyB0aGF0IHdlcmUgY2FwdHVyZWQKLSAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUg
eWllbGQgb2YgdGhlIHBjcmVfZXhlYyBjYWxsLCB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICB0
aGF0IHdhcyB6ZXJvLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSAxLzMKLSAgICAgICAgICAg
ICAgICAgICBvZiB0aGUgb2Zmc2V0IHRhYmxlIHNpemUpCi0gIGxpc3RwdHIgICAgICAgIHNldCB0
byBwb2ludCB0byB0aGUgbGlzdCBvZiBwb2ludGVycwotCi1SZXR1cm5zOiAgICAgICAgIGlmIHN1
Y2Nlc3NmdWw6IDAKLSAgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NmdWw6Ci0gICAgICAg
ICAgICAgICAgICAgUENSRV9FUlJPUl9OT01FTU9SWSAoLTYpIGZhaWxlZCB0byBnZXQgc3RvcmUK
LSovCi0KLWludAotcGNyZV9nZXRfc3Vic3RyaW5nX2xpc3QoY29uc3QgcGNyZV9jaGFyICpzdWJq
ZWN0LCBpbnQgKm92ZWN0b3IsIGludCBzdHJpbmdjb3VudCwKLSAgY29uc3QgcGNyZV9jaGFyICoq
Kmxpc3RwdHIpCi17Ci1pbnQgaTsKLWludCBzaXplID0gKGludClzaXplb2YoY2hhciAqKTsKLWlu
dCBkb3VibGVfY291bnQgPSBzdHJpbmdjb3VudCAqIDI7Ci1wY3JlX2NoYXIgKipzdHJpbmdsaXN0
OwotcGNyZV9jaGFyICpwOwotCi1mb3IgKGkgPSAwOyBpIDwgZG91YmxlX2NvdW50OyBpICs9IDIp
Ci0gIHNpemUgKz0gc2l6ZW9mKHBjcmVfY2hhciAqKSArIChvdmVjdG9yW2krMV0gLSBvdmVjdG9y
W2ldICsgMSkgKiBzaXplb2YocGNyZV9jaGFyKTsKLQotc3RyaW5nbGlzdCA9IChwY3JlX2NoYXIg
KiopKHBjcmVfbWFsbG9jKShzaXplKTsKLWlmIChzdHJpbmdsaXN0ID09IE5VTEwpIHJldHVybiBQ
Q1JFX0VSUk9SX05PTUVNT1JZOwotCi0qbGlzdHB0ciA9IChjb25zdCBwY3JlX2NoYXIgKiopc3Ry
aW5nbGlzdDsKLXAgPSAocGNyZV9jaGFyICopKHN0cmluZ2xpc3QgKyBzdHJpbmdjb3VudCArIDEp
OwotCi1mb3IgKGkgPSAwOyBpIDwgZG91YmxlX2NvdW50OyBpICs9IDIpCi0gIHsKLSAgaW50IGxl
biA9IG92ZWN0b3JbaSsxXSAtIG92ZWN0b3JbaV07Ci0gIG1lbWNweShwLCBzdWJqZWN0ICsgb3Zl
Y3RvcltpXSwgbGVuICogc2l6ZW9mKHBjcmVfY2hhcikpOwotICAqc3RyaW5nbGlzdCsrID0gcDsK
LSAgcCArPSBsZW47Ci0gICpwKysgPSAwOwotICB9Ci0KLSpzdHJpbmdsaXN0ID0gTlVMTDsKLXJl
dHVybiAwOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSogICBGcmVlIHN0b3JlIG9idGFpbmVkIGJ5IGdldF9zdWJzdHJpbmdfbGlz
dCAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwotCi0vKiBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBmb3IgdGhlIGJlbmVmaXQgb2YgcGVvcGxlIGNh
bGxpbmcgUENSRSBmcm9tIG5vbi1DCi1wcm9ncmFtcyB0aGF0IGNhbiBjYWxsIGl0cyBmdW5jdGlv
bnMsIGJ1dCBub3QgZnJlZSgpIG9yIChwY3JlX2ZyZWUpKCkgZGlyZWN0bHkuCi0KLUFyZ3VtZW50
OiAgIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyBwY3JlX2dldF9zdWJzdHJpbmdfbGlzdCgpCi1S
ZXR1cm5zOiAgICBub3RoaW5nCi0qLwotCi12b2lkCi1wY3JlX2ZyZWVfc3Vic3RyaW5nX2xpc3Qo
Y29uc3QgcGNyZV9jaGFyICoqcG9pbnRlcikKLXsKLShwY3JlX2ZyZWUpKCh2b2lkICopcG9pbnRl
cik7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotKiAgICAgIENvcHkgY2FwdHVyZWQgc3RyaW5nIHRvIG5ldyBzdG9yZSAgICAgICAg
ICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LS8qIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgc2luZ2xlIGNhcHR1cmVkIHN1YnN0cmluZyBpbnRv
IGEgcGllY2Ugb2YgbmV3Ci1zdG9yZQotCi1Bcmd1bWVudHM6Ci0gIHN1YmplY3QgICAgICAgIHRo
ZSBzdWJqZWN0IHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkCi0gIG92ZWN0b3IgICAgICAgIHBvaW50
ZXIgdG8gdGhlIG9mZnNldHMgdGFibGUKLSAgc3RyaW5nY291bnQgICAgdGhlIG51bWJlciBvZiBz
dWJzdHJpbmdzIHRoYXQgd2VyZSBjYXB0dXJlZAotICAgICAgICAgICAgICAgICAgIChpLmUuIHRo
ZSB5aWVsZCBvZiB0aGUgcGNyZV9leGVjIGNhbGwsIHVubGVzcwotICAgICAgICAgICAgICAgICAg
IHRoYXQgd2FzIHplcm8sIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlIDEvMwotICAgICAgICAg
ICAgICAgICAgIG9mIHRoZSBvZmZzZXQgdGFibGUgc2l6ZSkKLSAgc3RyaW5nbnVtYmVyICAgdGhl
IG51bWJlciBvZiB0aGUgcmVxdWlyZWQgc3Vic3RyaW5nCi0gIHN0cmluZ3B0ciAgICAgIHdoZXJl
IHRvIHB1dCBhIHBvaW50ZXIgdG8gdGhlIHN1YnN0cmluZwotCi1SZXR1cm5zOiAgICAgICAgIGlm
IHN1Y2Nlc3NmdWw6Ci0gICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n
LCBub3QgaW5jbHVkaW5nIHRoZSB6ZXJvIHRoYXQKLSAgICAgICAgICAgICAgICAgICBpcyBwdXQg
b24gdGhlIGVuZDsgY2FuIGJlIHplcm8KLSAgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3Nm
dWw6Ci0gICAgICAgICAgICAgICAgICAgUENSRV9FUlJPUl9OT01FTU9SWSAoLTYpIGZhaWxlZCB0
byBnZXQgc3RvcmUKLSAgICAgICAgICAgICAgICAgICBQQ1JFX0VSUk9SX05PU1VCU1RSSU5HICgt
Nykgc3Vic3RyaW5nIG5vdCBwcmVzZW50Ci0qLwotCi1pbnQKLXBjcmVfZ2V0X3N1YnN0cmluZyhj
b25zdCBwY3JlX2NoYXIgKnN1YmplY3QsIGludCAqb3ZlY3RvciwgaW50IHN0cmluZ2NvdW50LAot
ICBpbnQgc3RyaW5nbnVtYmVyLCBjb25zdCBwY3JlX2NoYXIgKipzdHJpbmdwdHIpCi17Ci1pbnQg
eWllbGQ7Ci1wY3JlX2NoYXIgKnN1YnN0cmluZzsKLWlmIChzdHJpbmdudW1iZXIgPCAwIHx8IHN0
cmluZ251bWJlciA+PSBzdHJpbmdjb3VudCkKLSAgcmV0dXJuIFBDUkVfRVJST1JfTk9TVUJTVFJJ
Tkc7Ci1zdHJpbmdudW1iZXIgKj0gMjsKLXlpZWxkID0gb3ZlY3RvcltzdHJpbmdudW1iZXIrMV0g
LSBvdmVjdG9yW3N0cmluZ251bWJlcl07Ci1zdWJzdHJpbmcgPSAocGNyZV9jaGFyICopKHBjcmVf
bWFsbG9jKSgoeWllbGQgKyAxKSAqIHNpemVvZihwY3JlX2NoYXIpKTsKLWlmIChzdWJzdHJpbmcg
PT0gTlVMTCkgcmV0dXJuIFBDUkVfRVJST1JfTk9NRU1PUlk7Ci1tZW1jcHkoc3Vic3RyaW5nLCBz
dWJqZWN0ICsgb3ZlY3RvcltzdHJpbmdudW1iZXJdLCB5aWVsZCAqIHNpemVvZihwY3JlX2NoYXIp
KTsKLXN1YnN0cmluZ1t5aWVsZF0gPSAwOwotKnN0cmluZ3B0ciA9IHN1YnN0cmluZzsKLXJldHVy
biB5aWVsZDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0qICAgQ29weSBuYW1lZCBjYXB0dXJlZCBzdHJpbmcgdG8gbmV3IHN0b3Jl
ICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotLyogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBzaW5nbGUgY2FwdHVyZWQgc3Vic3RyaW5n
LCBpZGVudGlmaWVkIGJ5IG5hbWUsIGludG8KLW5ldyBzdG9yZS4KLQotQXJndW1lbnRzOgotICBj
b2RlICAgICAgICAgICB0aGUgY29tcGlsZWQgcmVnZXgKLSAgc3ViamVjdCAgICAgICAgdGhlIHN1
YmplY3Qgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQKLSAgb3ZlY3RvciAgICAgICAgcG9pbnRlciB0
byB0aGUgb2Zmc2V0cyB0YWJsZQotICBzdHJpbmdjb3VudCAgICB0aGUgbnVtYmVyIG9mIHN1YnN0
cmluZ3MgdGhhdCB3ZXJlIGNhcHR1cmVkCi0gICAgICAgICAgICAgICAgICAgKGkuZS4gdGhlIHlp
ZWxkIG9mIHRoZSBwY3JlX2V4ZWMgY2FsbCwgdW5sZXNzCi0gICAgICAgICAgICAgICAgICAgdGhh
dCB3YXMgemVybywgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUgMS8zCi0gICAgICAgICAgICAg
ICAgICAgb2YgdGhlIG9mZnNldCB0YWJsZSBzaXplKQotICBzdHJpbmduYW1lICAgICB0aGUgbmFt
ZSBvZiB0aGUgcmVxdWlyZWQgc3Vic3RyaW5nCi0gIHN0cmluZ3B0ciAgICAgIHdoZXJlIHRvIHB1
dCB0aGUgcG9pbnRlcgotCi1SZXR1cm5zOiAgICAgICAgIGlmIHN1Y2Nlc3NmdWw6Ci0gICAgICAg
ICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgY29waWVkIHN0cmluZywgbm90IGluY2x1ZGlu
ZyB0aGUgemVybwotICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgcHV0IG9uIHRoZSBlbmQ7IGNh
biBiZSB6ZXJvCi0gICAgICAgICAgICAgICAgIGlmIG5vdCBzdWNjZXNzZnVsOgotICAgICAgICAg
ICAgICAgICAgIFBDUkVfRVJST1JfTk9NRU1PUlkgKC02KSBjb3VsZG4ndCBnZXQgbWVtb3J5Ci0g
ICAgICAgICAgICAgICAgICAgUENSRV9FUlJPUl9OT1NVQlNUUklORyAoLTcpIG5vIHN1Y2ggY2Fw
dHVyZWQgc3Vic3RyaW5nCi0qLwotCi0vKiBGSVhNRTogVGhpcyBpcyBub3QgYXZhaWxhYmxlIHVu
dGlsIHBjcmVfZ2V0X3N0cmluZ251bWJlciBpcyBhdmFpbGFibGUgZm9yIFVURi0xNi4gKi8KLSNp
ZiAhUENSRV9VVEYxNgotaW50Ci1wY3JlX2dldF9uYW1lZF9zdWJzdHJpbmcoY29uc3QgcGNyZSAq
Y29kZSwgY29uc3QgcGNyZV9jaGFyICpzdWJqZWN0LCBpbnQgKm92ZWN0b3IsCi0gIGludCBzdHJp
bmdjb3VudCwgY29uc3QgcGNyZV9jaGFyICpzdHJpbmduYW1lLCBjb25zdCBwY3JlX2NoYXIgKipz
dHJpbmdwdHIpCi17Ci1pbnQgbiA9IHBjcmVfZ2V0X3N0cmluZ251bWJlcihjb2RlLCBzdHJpbmdu
YW1lKTsKLWlmIChuIDw9IDApIHJldHVybiBuOwotcmV0dXJuIHBjcmVfZ2V0X3N1YnN0cmluZyhz
dWJqZWN0LCBvdmVjdG9yLCBzdHJpbmdjb3VudCwgbiwgc3RyaW5ncHRyKTsKLX0KLSNlbmRpZgot
Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSogICAgICAgRnJlZSBzdG9yZSBvYnRhaW5lZCBieSBnZXRfc3Vic3RyaW5nICAgICAqCi0qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlz
IGZ1bmN0aW9uIGV4aXN0cyBmb3IgdGhlIGJlbmVmaXQgb2YgcGVvcGxlIGNhbGxpbmcgUENSRSBm
cm9tIG5vbi1DCi1wcm9ncmFtcyB0aGF0IGNhbiBjYWxsIGl0cyBmdW5jdGlvbnMsIGJ1dCBub3Qg
ZnJlZSgpIG9yIChwY3JlX2ZyZWUpKCkgZGlyZWN0bHkuCi0KLUFyZ3VtZW50OiAgIHRoZSByZXN1
bHQgb2YgYSBwcmV2aW91cyBwY3JlX2dldF9zdWJzdHJpbmcoKQotUmV0dXJuczogICAgbm90aGlu
ZwotKi8KLQotdm9pZAotcGNyZV9mcmVlX3N1YnN0cmluZyhjb25zdCBwY3JlX2NoYXIgKnBvaW50
ZXIpCi17Ci0ocGNyZV9mcmVlKSgodm9pZCAqKXBvaW50ZXIpOwotfQotCi0vKiBFbmQgb2YgcGNy
ZV9nZXQuYyAqLworLyogZGVsZXRlIG1lICovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3Bj
cmVfaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfaW50
ZXJuYWwuaAkocmV2aXNpb24gMjc0MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfaW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwNyArMTAzLDMwIEBAIHNldGptcCBhbmQg
c3RkYXJnIGFyZSB1c2VkIGlzIHdoZW4gTk9fUkUKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAotI2lmbmRlZiBQQ1JFX1NQWQotI2RlZmluZSBQQ1JFX0RFRklOSVRJ
T04gICAgICAgLyogV2luMzIgX19kZWNsc3BlYyhleHBvcnQpIHRyaWdnZXIgZm9yIC5kbGwgKi8K
LSNlbmRpZgotCi0vKiBXZSBuZWVkIHRvIGhhdmUgdHlwZXMgdGhhdCBzcGVjaWZ5IHVuc2lnbmVk
IDE2LWJpdCBhbmQgMzItYml0IGludGVnZXJzLiBXZQotY2Fubm90IGRldGVybWluZSB0aGVzZSBv
dXRzaWRlIHRoZSBjb21waWxhdGlvbiAoZS5nLiBieSBydW5uaW5nIGEgcHJvZ3JhbSBhcwotcGFy
dCBvZiAiY29uZmlndXJlIikgYmVjYXVzZSBQQ1JFIGlzIG9mdGVuIGNyb3NzLWNvbXBpbGVkIGZv
ciB1c2Ugb24gb3RoZXIKLXN5c3RlbXMuIEluc3RlYWQgd2UgbWFrZSB1c2Ugb2YgdGhlIG1heGlt
dW0gc2l6ZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGF0Ci1wcmVwcm9jZXNzb3IgdGltZSBpbiBzdGFu
ZGFyZCBDIGVudmlyb25tZW50cy4gKi8KLQotI2lmIFVTSFJUX01BWCA9PSA2NTUzNQotICB0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IHBjcmVfdWludDE2OwotI2VsaWYgVUlOVF9NQVggPT0gNjU1MzUK
LSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgcGNyZV91aW50MTY7Ci0jZWxzZQotICAjZXJyb3IgQ2Fu
bm90IGRldGVybWluZSBhIHR5cGUgZm9yIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VycwotI2VuZGlm
Ci0KLSNpZiBVSU5UX01BWCA9PSA0Mjk0OTY3Mjk1Ci0gIHR5cGVkZWYgdW5zaWduZWQgaW50IHBj
cmVfdWludDMyOwotI2VsaWYgVUxPTkdfTUFYID09IDQyOTQ5NjcyOTUKLSAgdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBwY3JlX3VpbnQzMjsKLSNlbHNlCi0gICNlcnJvciBDYW5ub3QgZGV0ZXJt
aW5lIGEgdHlwZSBmb3IgMzItYml0IHVuc2lnbmVkIGludGVnZXJzCi0jZW5kaWYKLQotLyogQWxs
IGNoYXJhY3RlciBoYW5kbGluZyBtdXN0IGJlIGRvbmUgYXMgdW5zaWduZWQgY2hhcmFjdGVycy4g
T3RoZXJ3aXNlIHRoZXJlCi1hcmUgcHJvYmxlbXMgd2l0aCB0b3AtYml0LXNldCBjaGFyYWN0ZXJz
IGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBpc3NwYWNlKCkuCi1Ib3dldmVyLCB3ZSBsZWF2ZSB0aGUg
aW50ZXJmYWNlIHRvIHRoZSBvdXRzaWRlIHdvcmxkIGFzIGNoYXIgKiwgYmVjYXVzZSB0aGF0Ci1z
aG91bGQgbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBjYWxsZXJzLiBXZSBkZWZpbmUgYSBzaG9ydCB0
eXBlIGZvciB1bnNpZ25lZCBjaGFyCi10byBzYXZlIGxvdHMgb2YgdHlwaW5nLiBJIHRyaWVkICJ1
Y2hhciIsIGJ1dCBpdCBjYXVzZXMgcHJvYmxlbXMgb24gRGlnaXRhbAotVW5peCwgd2hlcmUgaXQg
aXMgZGVmaW5lZCBpbiBzeXMvdHlwZXMsIHNvIHVzZSAidXNjaGFyIiBpbnN0ZWFkLiAqLwotCi10
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdXNjaGFyOwotCi0vKiBXaGVuIFBDUkUgaXMgY29tcGlsZWQg
YXMgYSBDKysgbGlicmFyeSwgdGhlIHN1YmplY3QgcG9pbnRlciBjYW4gYmUgcmVwbGFjZWQKLXdp
dGggYSBjdXN0b20gdHlwZS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSwgZm9yIGV4YW1wbGUsIHRv
IGFsbG93IHBjcmVfZXhlYygpCi10byBwcm9jZXNzIHN1YmplY3Qgc3RyaW5ncyB0aGF0IGFyZSBk
aXNjb250aW51b3VzIGJ5IHVzaW5nIGEgc21hcnQgcG9pbnRlcgotY2xhc3MuIEl0IG11c3QgYWx3
YXlzIGJlIHBvc3NpYmxlIHRvIGluc3BlY3QgYWxsIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBpbgot
cGNyZV9leGVjKCkgYmVjYXVzZSBvZiB0aGUgd2F5IGl0IGJhY2t0cmFja3MuIFR3byBtYWNyb3Mg
YXJlIHJlcXVpcmVkIGluIHRoZQotbm9ybWFsIGNhc2UsIGZvciBzaWduLXVuc3BlY2lmaWVkIGFu
ZCB1bnNpZ25lZCBjaGFyIHBvaW50ZXJzLiBUaGUgZm9ybWVyIGlzCi11c2VkIGZvciB0aGUgZXh0
ZXJuYWwgaW50ZXJmYWNlIGFuZCBhcHBlYXJzIGluIHBjcmUuaCwgd2hpY2ggaXMgd2h5IGl0cyBu
YW1lCi1tdXN0IGJlZ2luIHdpdGggUENSRV8uICovCi0KLSNpZmRlZiBDVVNUT01fU1VCSkVDVF9Q
VFIKLSNkZWZpbmUgUENSRV9TUFRSIENVU1RPTV9TVUJKRUNUX1BUUgotI2RlZmluZSBVU1BUUiBD
VVNUT01fU1VCSkVDVF9QVFIKLSNlbHNlCi0jZGVmaW5lIFVTUFRSIGNvbnN0IHBjcmVfdWNoYXIg
KgotI2VuZGlmCi0KIC8qIEluY2x1ZGUgdGhlIHB1YmxpYyBQQ1JFIGhlYWRlciBhbmQgdGhlIGRl
ZmluaXRpb25zIG9mIFVDUCBjaGFyYWN0ZXIgcHJvcGVydHkKIHZhbHVlcy4gKi8KIAogI2luY2x1
ZGUgInBjcmUuaCIKLSNpbmNsdWRlICJ1Y3AuaCIKIAotLyogVW5zaWduZWQgdmVyc2lvbiBvZiBw
Y3JlX2NoYXIuICovCi0jaWYgUENSRV9VVEYxNgotdHlwZWRlZiBwY3JlX2NoYXIgcGNyZV91Y2hh
cjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgcGNyZV91Y2hhcjsKLSNlbmRpZgordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBwY3JlX3VpbnQxNjsKK3R5cGVkZWYgdW5zaWduZWQgcGNyZV91
aW50MzI7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdXNjaGFyOwogCi0vKiBXaGVuIGNvbXBpbGlu
ZyBmb3IgdXNlIHdpdGggdGhlIFZpcnR1YWwgUGFzY2FsIGNvbXBpbGVyLCB0aGVzZSBmdW5jdGlv
bnMKLW5lZWQgdG8gaGF2ZSB0aGVpciBuYW1lcyBjaGFuZ2VkLiBQQ1JFIG11c3QgYmUgY29tcGls
ZWQgd2l0aCB0aGUgLURWUENPTVBBVAotb3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUuICovCi0K
LSNpZmRlZiBWUENPTVBBVAotI2RlZmluZSBzdHJuY21wKHMxLHMyLG0pIF9zdHJuY21wKHMxLHMy
LG0pCi0jZGVmaW5lIG1lbWNweShkLHMsbikgICAgX21lbWNweShkLHMsbikKLSNkZWZpbmUgbWVt
bW92ZShkLHMsbikgICBfbWVtbW92ZShkLHMsbikKLSNkZWZpbmUgbWVtc2V0KHMsYyxuKSAgICBf
bWVtc2V0KHMsYyxuKQotI2Vsc2UgIC8qIFZQQ09NUEFUICovCi0KLS8qIFRvIGNvcGUgd2l0aCBT
dW5PUzQgYW5kIG90aGVyIHN5c3RlbXMgdGhhdCBsYWNrIG1lbW1vdmUoKSBidXQgaGF2ZSBiY29w
eSgpLAotZGVmaW5lIGEgbWFjcm8gZm9yIG1lbW1vdmUoKSBpZiBIQVZFX01FTU1PVkUgaXMgZmFs
c2UsIHByb3ZpZGVkIHRoYXQgSEFWRV9CQ09QWQotaXMgc2V0LiBPdGhlcndpc2UsIGluY2x1ZGUg
YW4gZW11bGF0aW5nIGZ1bmN0aW9uIGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgaGF2ZQotbmVpdGhl
ciAodGhlcmUgc29tZSBub24tVW5peCBlbnZpcm9ubWVudHMgd2hlcmUgdGhpcyBpcyB0aGUgY2Fz
ZSkuIFRoaXMgYXNzdW1lcwotdGhhdCBhbGwgY2FsbHMgdG8gbWVtbW92ZSBhcmUgbW92aW5nIHN0
cmluZ3MgdXB3YXJkcyBpbiBzdG9yZSwgd2hpY2ggaXMgdGhlCi1jYXNlIGluIFBDUkUuICovCi0K
LSNpZiAhIEhBVkVfTUVNTU9WRQotI3VuZGVmICBtZW1tb3ZlICAgICAgICAvKiBzb21lIHN5c3Rl
bXMgbWF5IGhhdmUgYSBtYWNybyAqLwotI2lmIEhBVkVfQkNPUFkKLSNkZWZpbmUgbWVtbW92ZShh
LCBiLCBjKSBiY29weShiLCBhLCBjKQotI2Vsc2UgIC8qIEhBVkVfQkNPUFkgKi8KLXZvaWQgKgot
cGNyZV9tZW1tb3ZlKHVuc2lnbmVkIGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNy
Yywgc2l6ZV90IG4pCi17Ci1zaXplX3QgaTsKLWRlc3QgKz0gbjsKLXNyYyArPSBuOwotZm9yIChp
ID0gMDsgaSA8IG47ICsraSkgKigtLWRlc3QpID0gICooLS1zcmMpOwotcmV0dXJuIGRlc3Q7Ci19
Ci0jZGVmaW5lIG1lbW1vdmUoYSwgYiwgYykgcGNyZV9tZW1tb3ZlKGEsIGIsIGMpCi0jZW5kaWYg
ICAvKiBub3QgSEFWRV9CQ09QWSAqLwotI2VuZGlmICAgLyogbm90IEhBVkVfTUVNTU9WRSAqLwot
I2VuZGlmICAgLyogbm90IFZQQ09NUEFUICovCit0eXBlZGVmIEpTUmVnRXhwIHBjcmU7CiAKK3R5
cGVkZWYgSlNSZWdFeHBDaGFyIHBjcmVfY2hhcjsKK3R5cGVkZWYgSlNSZWdFeHBDaGFyIHBjcmVf
dWNoYXI7Cit0eXBlZGVmIGNvbnN0IEpTUmVnRXhwQ2hhciogVVNQVFI7CisKKy8qIFRlbXBvcmFy
eSBmYXN0TWFsbG9jL2Zhc3RGcmVlIHVudGlsIHdlIHBvcnQgdG8gQysrLiAqLworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorZXh0ZXJuIHZvaWQqICgqcGNyZV9tYWxs
b2MpKHNpemVfdCk7CitleHRlcm4gdm9pZCAoKnBjcmVfZnJlZSkodm9pZCopOworI2lmZGVmIF9f
Y3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgogCiAvKiBQQ1JFIGtlZXBzIG9m
ZnNldHMgaW4gaXRzIGNvbXBpbGVkIGNvZGUgYXMgMi1ieXRlIHF1YW50aXRpZXMgKGFsd2F5cyBz
dG9yZWQKIGluIGJpZy1lbmRpYW4gb3JkZXIpIGJ5IGRlZmF1bHQuIFRoZXNlIGFyZSB1c2VkLCBm
b3IgZXhhbXBsZSwgdG8gbGluayBmcm9tIHRoZQpAQCAtMjg1LDE2ICsyMDgsNiBAQCBjYXB0dXJp
bmcgcGFyZW50aGVzaXMgbnVtYmVycyBpbiBiYWNrIHJlCiBieXRlLiBUaGUgbWFjcm9zIGZvciBj
aGFyYWN0ZXIgaGFuZGxpbmcgZ2VuZXJhdGUgc2ltcGxlIHNlcXVlbmNlcyB3aGVuIHVzZWQgaW4K
IGJ5dGUtbW9kZSwgYW5kIG1vcmUgY29tcGxpY2F0ZWQgb25lcyBmb3IgVVRGLTggY2hhcmFjdGVy
cy4gKi8KIAotI2lmbmRlZiBTVVBQT1JUX1VURjgKLSNkZWZpbmUgR0VUQ0hBUihjLCBlcHRyKSBj
ID0gKmVwdHI7Ci0jZGVmaW5lIEdFVENIQVJURVNUKGMsIGVwdHIpIGMgPSAqZXB0cjsKLSNkZWZp
bmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBjID0gKmVwdHIrKzsKLSNkZWZpbmUgR0VUQ0hBUklOQ1RF
U1QoYywgZXB0cikgYyA9ICplcHRyKys7Ci0jZGVmaW5lIEdFVENIQVJMRU4oYywgZXB0ciwgbGVu
KSBjID0gKmVwdHI7Ci0jZGVmaW5lIEJBQ0tDSEFSKGVwdHIpCi0KLSNlbHNlICAgLyogU1VQUE9S
VF9VVEY4ICovCi0KIC8qIEdldCB0aGUgbmV4dCBVVEYtOCBjaGFyYWN0ZXIsIG5vdCBhZHZhbmNp
bmcgdGhlIHBvaW50ZXIsIGluY3JlbWVudGluZyBsZW5ndGgKIGlmIHRoZXJlIGFyZSBleHRyYSBi
eXRlcy4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAq
LwogCkBAIC0zMzEsOCArMjQ0LDYgQEAgaWYgKChjICYgMHhjMCkgPT0gMHhjMCkgXAogICAgICAg
ICB9IFwKIH0KIAotI2lmIFBDUkVfVVRGMTYKLQogI2RlZmluZSBMRUFEX09GRlNFVCAoMHhkODAw
IC0gKDB4MTAwMDAgPj4gMTApKQogI2RlZmluZSBTVVJST0dBVEVfT0ZGU0VUICgweDEwMDAwIC0g
KDB4ZDgwMCA8PCAxMCkgLSAweGRjMDApCiAKQEAgLTM3NSw4MCArMjg2LDExIEBAIGlmICgoYyAm
IDB4YzApID09IDB4YzApIFwKIAogI2RlZmluZSBJU01JRENIQVIoYykgSVNfVFJBSUxJTkdfU1VS
Uk9HQVRFKGMpCiAKLSNlbHNlCi0KLS8qIEdldCB0aGUgbmV4dCBVVEYtOCBjaGFyYWN0ZXIsIG5v
dCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuIFRoaXMgaXMgY2FsbGVkIHdoZW4KLXdlIGtub3cgd2Ug
YXJlIGluIFVURi04IG1vZGUuICovCi0KLSNkZWZpbmUgR0VUQ0hBUihjLCBlcHRyKSBcCi0gIGMg
PSAqZXB0cjsgXAotICBpZiAoKGMgJiAweGMwKSA9PSAweGMwKSBcCi0gICAgeyBcCi0gICAgaW50
IGdjaWk7IFwKLSAgICBpbnQgZ2NhYSA9IF9wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8q
IE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovIFwKLSAgICBpbnQgZ2NzcyA9IDYqZ2NhYTsg
XAotICAgIGMgPSAoYyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8PCBnY3NzOyBcCi0gICAg
Zm9yIChnY2lpID0gMTsgZ2NpaSA8PSBnY2FhOyBnY2lpKyspIFwKLSAgICAgIHsgXAotICAgICAg
Z2NzcyAtPSA2OyBcCi0gICAgICBjIHw9IChlcHRyW2djaWldICYgMHgzZikgPDwgZ2NzczsgXAot
ICAgICAgfSBcCi0gICAgfQotCi0vKiBHZXQgdGhlIG5leHQgVVRGLTggY2hhcmFjdGVyLCB0ZXN0
aW5nIGZvciBVVEYtOCBtb2RlLCBhbmQgbm90IGFkdmFuY2luZyB0aGUKLXBvaW50ZXIuICovCi0K
LSNkZWZpbmUgR0VUQ0hBUlRFU1QoYywgZXB0cikgXAotICBjID0gKmVwdHI7IFwKLSAgaWYgKHV0
ZjggJiYgKGMgJiAweGMwKSA9PSAweGMwKSBcCi0gICAgeyBcCi0gICAgaW50IGdjaWk7IFwKLSAg
ICBpbnQgZ2NhYSA9IF9wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBh
ZGRpdGlvbmFsIGJ5dGVzICovIFwKLSAgICBpbnQgZ2NzcyA9IDYqZ2NhYTsgXAotICAgIGMgPSAo
YyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8PCBnY3NzOyBcCi0gICAgZm9yIChnY2lpID0g
MTsgZ2NpaSA8PSBnY2FhOyBnY2lpKyspIFwKLSAgICAgIHsgXAotICAgICAgZ2NzcyAtPSA2OyBc
Ci0gICAgICBjIHw9IChlcHRyW2djaWldICYgMHgzZikgPDwgZ2NzczsgXAotICAgICAgfSBcCi0g
ICAgfQotCi0vKiBHZXQgdGhlIG5leHQgVVRGLTggY2hhcmFjdGVyLCBhZHZhbmNpbmcgdGhlIHBv
aW50ZXIuIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UKLWtub3cgd2UgYXJlIGluIFVURi04IG1vZGUu
ICovCi0KLSNkZWZpbmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBHRVRVVEY4Q0hBUklOQyhjLCBlcHRy
KQotCi0vKiBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLCB0ZXN0aW5nIGZvciBVVEYtOCBtb2RlLCBh
bmQgYWR2YW5jaW5nIHRoZSBwb2ludGVyICovCi0KLSNkZWZpbmUgR0VUQ0hBUklOQ1RFU1QoYywg
ZXB0cikgXAotICBjID0gKmVwdHIrKzsgXAotICBpZiAodXRmOCAmJiAoYyAmIDB4YzApID09IDB4
YzApIFwKLSAgICB7IFwKLSAgICBpbnQgZ2NhYSA9IF9wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNm
XTsgIC8qIE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovIFwKLSAgICBpbnQgZ2NzcyA9IDYq
Z2NhYTsgXAotICAgIGMgPSAoYyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8PCBnY3NzOyBc
Ci0gICAgd2hpbGUgKGdjYWEtLSA+IDApIFwKLSAgICAgIHsgXAotICAgICAgZ2NzcyAtPSA2OyBc
Ci0gICAgICBjIHw9ICgqZXB0cisrICYgMHgzZikgPDwgZ2NzczsgXAotICAgICAgfSBcCi0gICAg
fQotCi0jZGVmaW5lIEdFVENIQVJMRU4oYywgZXB0cikgR0VUVVRGOENIQVJMRU4oYywgZXB0cikK
LQotLyogUmV0dXJuIDEgaWYgbm90IHRoZSBzdGFydCBvZiBhIGNoYXJhY3Rlci4gKi8KLQotI2Rl
ZmluZSBJU01JRENIQVIoYykgKCgoYykgJiAweGMwKSA9PSAweDgwKQotCi0jZW5kaWYKLQogLyog
SWYgdGhlIHBvaW50ZXIgaXMgbm90IGF0IHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciwgbW92ZSBp
dCBiYWNrIHVudGlsCiBpdCBpcy4gQ2FsbGVkIG9ubHkgaW4gVVRGLTggbW9kZS4gKi8KIAogI2Rl
ZmluZSBCQUNLQ0hBUihlcHRyKSB3aGlsZShJU01JRENIQVIoKmVwdHIpKSBlcHRyLS07CiAKLSNl
bmRpZgotCiAKIC8qIEluIGNhc2UgdGhlcmUgaXMgbm8gZGVmaW5pdGlvbiBvZiBvZmZzZXRvZigp
IHByb3ZpZGVkIC0gdGhvdWdoIGFueSBwcm9wZXIKIFN0YW5kYXJkIEMgc3lzdGVtIHNob3VsZCBo
YXZlIG9uZS4gKi8KQEAgLTQ1OCwxMCArMzAwLDYgQEAgU3RhbmRhcmQgQyBzeXN0ZW0gc2hvdWxk
IGhhdmUgb25lLiAqLwogI2VuZGlmCiAKIAotLyogVGhlc2UgYXJlIHRoZSBwdWJsaWMgb3B0aW9u
cyB0aGF0IGNhbiBjaGFuZ2UgZHVyaW5nIG1hdGNoaW5nLiAqLwotCi0jZGVmaW5lIFBDUkVfSU1T
IChQQ1JFX0NBU0VMRVNTfFBDUkVfTVVMVElMSU5FfFBDUkVfRE9UQUxMKQotCiAvKiBQcml2YXRl
IG9wdGlvbnMgZmxhZ3Mgc3RhcnQgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIHRoZSBm
b3VyIGJ5dGVzLAogYnV0IHNraXAgdGhlIHRvcCBiaXQgc28gd2UgY2FuIHVzZSBpbnRzIGZvciBj
b252ZW5pZW5jZSB3aXRob3V0IGdldHRpbmcgdGFuZ2xlZAogd2l0aCBuZWdhdGl2ZSB2YWx1ZXMu
IFRoZSBwdWJsaWMgb3B0aW9ucyBkZWZpbmVkIGluIHBjcmUuaCBzdGFydCBhdCB0aGUgbGVhc3QK
QEAgLTQ3MCwzNSArMzA4LDkgQEAgc2lnbmlmaWNhbnQgZW5kLiBNYWtlIHN1cmUgdGhleSBkb24n
dCBvdgogI2RlZmluZSBQQ1JFX0ZJUlNUU0VUICAgICAgMHg0MDAwMDAwMCAgLyogZmlyc3RfYnl0
ZSBpcyBzZXQgKi8KICNkZWZpbmUgUENSRV9SRVFDSFNFVCAgICAgIDB4MjAwMDAwMDAgIC8qIHJl
cV9ieXRlIGlzIHNldCAqLwogI2RlZmluZSBQQ1JFX1NUQVJUTElORSAgICAgMHgxMDAwMDAwMCAg
Lyogc3RhcnQgYWZ0ZXIgXG4gZm9yIG11bHRpbGluZSAqLwotI2RlZmluZSBQQ1JFX0lDSEFOR0VE
ICAgICAgMHgwODAwMDAwMCAgLyogaSBvcHRpb24gY2hhbmdlcyB3aXRoaW4gcmVnZXggKi8KLSNk
ZWZpbmUgUENSRV9OT1BBUlRJQUwgICAgIDB4MDQwMDAwMDAgIC8qIGNhbid0IHVzZSBwYXJ0aWFs
IHdpdGggdGhpcyByZWdleCAqLwotCi0vKiBPcHRpb25zIGZvciB0aGUgImV4dHJhIiBibG9jayBw
cm9kdWNlZCBieSBwY3JlX3N0dWR5KCkuICovCi0KLSNkZWZpbmUgUENSRV9TVFVEWV9NQVBQRUQg
ICAweDAxICAgICAvKiBhIG1hcCBvZiBzdGFydGluZyBjaGFycyBleGlzdHMgKi8KLQotLyogTWFz
a3MgZm9yIGlkZW50aWZ5aW5nIHRoZSBwdWJsaWMgb3B0aW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQg
YXQgY29tcGlsZQotdGltZSwgcnVuIHRpbWUsIG9yIHN0dWR5IHRpbWUsIHJlc3BlY3RpdmVseS4g
Ki8KLQotI2RlZmluZSBQVUJMSUNfT1BUSU9OUyBcCi0gIChQQ1JFX0NBU0VMRVNTfFBDUkVfRVhU
RU5ERUR8UENSRV9BTkNIT1JFRHxQQ1JFX01VTFRJTElORXwgXAotICAgUENSRV9ET1RBTEx8UENS
RV9ET0xMQVJfRU5ET05MWXxQQ1JFX0VYVFJBfFBDUkVfVU5HUkVFRFl8UENSRV9VVEY4fCBcCi0g
ICBQQ1JFX05PX0FVVE9fQ0FQVFVSRXxQQ1JFX05PX1VURjhfQ0hFQ0t8UENSRV9BVVRPX0NBTExP
VVR8UENSRV9GSVJTVExJTkUpCi0KLSNkZWZpbmUgUFVCTElDX0VYRUNfT1BUSU9OUyBcCi0gIChQ
Q1JFX0FOQ0hPUkVEfFBDUkVfTk9UQk9MfFBDUkVfTk9URU9MfFBDUkVfTk9URU1QVFl8UENSRV9O
T19VVEY4X0NIRUNLfCBcCi0gICBQQ1JFX1BBUlRJQUwpCi0KLSNkZWZpbmUgUFVCTElDX0RGQV9F
WEVDX09QVElPTlMgXAotICAoUENSRV9BTkNIT1JFRHxQQ1JFX05PVEJPTHxQQ1JFX05PVEVPTHxQ
Q1JFX05PVEVNUFRZfFBDUkVfTk9fVVRGOF9DSEVDS3wgXAotICAgUENSRV9QQVJUSUFMfFBDUkVf
REZBX1NIT1JURVNUfFBDUkVfREZBX1JFU1RBUlQpCi0KLSNkZWZpbmUgUFVCTElDX1NUVURZX09Q
VElPTlMgMCAgIC8qIE5vbmUgZGVmaW5lZCAqLwotCi0vKiBNYWdpYyBudW1iZXIgdG8gcHJvdmlk
ZSBhIHNtYWxsIGNoZWNrIGFnYWluc3QgYmVpbmcgaGFuZGVkIGp1bmsuIEFsc28gdXNlZAotdG8g
ZGV0ZWN0IHdoZXRoZXIgYSBwYXR0ZXJuIHdhcyBjb21waWxlZCBvbiBhIGhvc3Qgb2YgZGlmZmVy
ZW50IGVuZGlhbm5lc3MuICovCi0KLSNkZWZpbmUgTUFHSUNfTlVNQkVSICAweDUwNDM1MjQ1VUwg
ICAvKiAnUENSRScgKi8KKyNkZWZpbmUgUENSRV9BTkNIT1JFRCAgICAgIDB4MDIwMDAwMDAgIC8q
IGNhbid0IHVzZSBwYXJ0aWFsIHdpdGggdGhpcyByZWdleCAqLworI2RlZmluZSBQQ1JFX0NBU0VM
RVNTICAgICAgSlNfUkVHRVhQX0NBU0VMRVNTCisjZGVmaW5lIFBDUkVfTVVMVElMSU5FICAgICBK
U19SRUdFWFBfTVVMVElMSU5FCiAKIC8qIE5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIGZpcnN0Y2hh
ciBhbmQgcmVxY2hhciB2YXJpYWJsZXMgKi8KIApAQCAtNTM2LDcgKzM0OCw3IEBAIEVTQ19uIGlz
IGRlZmluZWQgYXMgeWV0IGFub3RoZXIgbWFjcm8sIHcKICNlbmRpZgogCiAjaWZuZGVmIEVTQ19u
Ci0jZGVmaW5lIEVTQ19uIE5FV0xJTkUKKyNkZWZpbmUgRVNDX24gJ1xuJwogI2VuZGlmCiAKICNp
Zm5kZWYgRVNDX3IKQEAgLTYwMCw4ICs0MTIsOCBAQCBlbnVtIHsKIAogICAvKiBWYWx1ZXMgY29y
cmVzcG9uZGluZyB0byBiYWNrc2xhc2hlZCBtZXRhY2hhcmFjdGVycyAqLwogCi0gIE9QX1NPRCwg
ICAgICAgICAgICAvKiAxIFN0YXJ0IG9mIGRhdGE6IFxBICovCi0gIE9QX1NPTSwgICAgICAgICAg
ICAvKiAyIFN0YXJ0IG9mIG1hdGNoIChzdWJqZWN0ICsgb2Zmc2V0KTogXEcgKi8KKyAgeE9QX1NP
RCwgICAgICAgICAgICAvKiAxIFN0YXJ0IG9mIGRhdGE6IFxBICovCisgIHhPUF9TT00sICAgICAg
ICAgICAgLyogMiBTdGFydCBvZiBtYXRjaCAoc3ViamVjdCArIG9mZnNldCk6IFxHICovCiAgIE9Q
X05PVF9XT1JEX0JPVU5EQVJZLCAgLyogIDMgXEIgKi8KICAgT1BfV09SRF9CT1VOREFSWSwgICAg
ICAvKiAgNCBcYiAqLwogICBPUF9OT1RfRElHSVQsICAgICAgICAgIC8qICA1IFxEICovCkBAIC02
MTEsMTQgKzQyMywxNCBAQCBlbnVtIHsKICAgT1BfTk9UX1dPUkRDSEFSLCAgICAgICAvKiAgOSBc
VyAqLwogICBPUF9XT1JEQ0hBUiwgICAgICAgICAgIC8qIDEwIFx3ICovCiAgIE9QX0FOWSwgICAg
ICAgICAgICAvKiAxMSBNYXRjaCBhbnkgY2hhcmFjdGVyICovCi0gIE9QX0FOWUJZVEUsICAgICAg
ICAvKiAxMiBNYXRjaCBhbnkgYnl0ZSAoXEMpOyBkaWZmZXJlbnQgdG8gT1BfQU5ZIGZvciBVVEYt
OCAqLwotICBPUF9OT1RQUk9QLCAgICAgICAgLyogMTMgXFAgKG5vdCBVbmljb2RlIHByb3BlcnR5
KSAqLwotICBPUF9QUk9QLCAgICAgICAgICAgLyogMTQgXHAgKFVuaWNvZGUgcHJvcGVydHkpICov
Ci0gIE9QX0VYVFVOSSwgICAgICAgICAvKiAxNSBcWCAoZXh0ZW5kZWQgVW5pY29kZSBzZXF1ZW5j
ZSAqLwotICBPUF9FT0ROLCAgICAgICAgICAgLyogMTYgRW5kIG9mIGRhdGEgb3IgXG4gYXQgZW5k
IG9mIGRhdGE6IFxaLiAqLwotICBPUF9FT0QsICAgICAgICAgICAgLyogMTcgRW5kIG9mIGRhdGE6
IFx6ICovCisgIHhPUF9BTllCWVRFLCAgICAgICAgLyogMTIgTWF0Y2ggYW55IGJ5dGUgKFxDKTsg
ZGlmZmVyZW50IHRvIE9QX0FOWSBmb3IgVVRGLTggKi8KKyAgeE9QX05PVFBST1AsICAgICAgICAv
KiAxMyBcUCAobm90IFVuaWNvZGUgcHJvcGVydHkpICovCisgIHhPUF9QUk9QLCAgICAgICAgICAg
LyogMTQgXHAgKFVuaWNvZGUgcHJvcGVydHkpICovCisgIHhPUF9FWFRVTkksICAgICAgICAgLyog
MTUgXFggKGV4dGVuZGVkIFVuaWNvZGUgc2VxdWVuY2UgKi8KKyAgeE9QX0VPRE4sICAgICAgICAg
ICAvKiAxNiBFbmQgb2YgZGF0YSBvciBcbiBhdCBlbmQgb2YgZGF0YTogXFouICovCisgIHhPUF9F
T0QsICAgICAgICAgICAgLyogMTcgRW5kIG9mIGRhdGE6IFx6ICovCiAKLSAgT1BfT1BULCAgICAg
ICAgICAgIC8qIDE4IFNldCBydW50aW1lIG9wdGlvbnMgKi8KKyAgeE9QX09QVCwgICAgICAgICAg
ICAvKiAxOCBTZXQgcnVudGltZSBvcHRpb25zICovCiAgIE9QX0NJUkMsICAgICAgICAgICAvKiAx
OSBTdGFydCBvZiBsaW5lIC0gdmFyaWVzIHdpdGggbXVsdGlsaW5lIHN3aXRjaCAqLwogICBPUF9E
T0xMLCAgICAgICAgICAgLyogMjAgRW5kIG9mIGxpbmUgLSB2YXJpZXMgd2l0aCBtdWx0aWxpbmUg
c3dpdGNoICovCiAgIE9QX0NIQVIsICAgICAgICAgICAvKiAyMSBNYXRjaCBvbmUgY2hhcmFjdGVy
LCBjYXNlZnVsbHkgKi8KQEAgLTY3Myw4ICs0ODUsOCBAQCBlbnVtIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzLiBUaGlzIGRvZXMgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUu
ICovCiAKICAgT1BfUkVGLCAgICAgICAgICAgIC8qIDYyIE1hdGNoIGEgYmFjayByZWZlcmVuY2Ug
Ki8KLSAgT1BfUkVDVVJTRSwgICAgICAgIC8qIDYzIE1hdGNoIGEgbnVtYmVyZWQgc3VicGF0dGVy
biAocG9zc2libHkgcmVjdXJzaXZlKSAqLwotICBPUF9DQUxMT1VULCAgICAgICAgLyogNjQgQ2Fs
bCBvdXQgdG8gZXh0ZXJuYWwgZnVuY3Rpb24gaWYgcHJvdmlkZWQgKi8KKyAgeE9QX1JFQ1VSU0Us
ICAgICAgICAvKiA2MyBNYXRjaCBhIG51bWJlcmVkIHN1YnBhdHRlcm4gKHBvc3NpYmx5IHJlY3Vy
c2l2ZSkgKi8KKyAgeE9QX0NBTExPVVQsICAgICAgICAvKiA2NCBDYWxsIG91dCB0byBleHRlcm5h
bCBmdW5jdGlvbiBpZiBwcm92aWRlZCAqLwogCiAgIE9QX0FMVCwgICAgICAgICAgICAvKiA2NSBT
dGFydCBvZiBhbHRlcm5hdGlvbiAqLwogICBPUF9LRVQsICAgICAgICAgICAgLyogNjYgRW5kIG9m
IGdyb3VwIHRoYXQgZG9lc24ndCBoYXZlIGFuIHVuYm91bmRlZCByZXBlYXQgKi8KQEAgLTY4NSwx
NiArNDk3LDE2IEBAIGVudW0gewogCiAgIE9QX0FTU0VSVCwgICAgICAgICAvKiA2OSBQb3NpdGl2
ZSBsb29rYWhlYWQgKi8KICAgT1BfQVNTRVJUX05PVCwgICAgIC8qIDcwIE5lZ2F0aXZlIGxvb2th
aGVhZCAqLwotICBPUF9BU1NFUlRCQUNLLCAgICAgLyogNzEgUG9zaXRpdmUgbG9va2JlaGluZCAq
LwotICBPUF9BU1NFUlRCQUNLX05PVCwgLyogNzIgTmVnYXRpdmUgbG9va2JlaGluZCAqLwotICBP
UF9SRVZFUlNFLCAgICAgICAgLyogNzMgTW92ZSBwb2ludGVyIGJhY2sgLSB1c2VkIGluIGxvb2ti
ZWhpbmQgYXNzZXJ0aW9ucyAqLworICB4T1BfQVNTRVJUQkFDSywgICAgIC8qIDcxIFBvc2l0aXZl
IGxvb2tiZWhpbmQgKi8KKyAgeE9QX0FTU0VSVEJBQ0tfTk9ULCAvKiA3MiBOZWdhdGl2ZSBsb29r
YmVoaW5kICovCisgIHhPUF9SRVZFUlNFLCAgICAgICAgLyogNzMgTW92ZSBwb2ludGVyIGJhY2sg
LSB1c2VkIGluIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyAqLwogCiAgIC8qIE9OQ0UgYW5kIENPTkQg
bXVzdCBjb21lIGFmdGVyIHRoZSBhc3NlcnRpb25zLCB3aXRoIE9OQ0UgZmlyc3QsIGFzIHRoZXJl
J3MKICAgYSB0ZXN0IGZvciA+PSBPTkNFIGZvciBhIHN1YnBhdHRlcm4gdGhhdCBpc24ndCBhbiBh
c3NlcnRpb24uICovCiAKICAgT1BfT05DRSwgICAgICAgICAgIC8qIDc0IE9uY2UgbWF0Y2hlZCwg
ZG9uJ3QgYmFjayB1cCBpbnRvIHRoZSBzdWJwYXR0ZXJuICovCi0gIE9QX0NPTkQsICAgICAgICAg
ICAvKiA3NSBDb25kaXRpb25hbCBncm91cCAqLwotICBPUF9DUkVGLCAgICAgICAgICAgLyogNzYg
VXNlZCB0byBob2xkIGFuIGV4dHJhY3Rpb24gc3RyaW5nIG51bWJlciAoY29uZCByZWYpICovCisg
IHhPUF9DT05ELCAgICAgICAgICAgLyogNzUgQ29uZGl0aW9uYWwgZ3JvdXAgKi8KKyAgeE9QX0NS
RUYsICAgICAgICAgICAvKiA3NiBVc2VkIHRvIGhvbGQgYW4gZXh0cmFjdGlvbiBzdHJpbmcgbnVt
YmVyIChjb25kIHJlZikgKi8KIAogICBPUF9CUkFaRVJPLCAgICAgICAgLyogNzcgVGhlc2UgdHdv
IG11c3QgcmVtYWluIHRvZ2V0aGVyIGFuZCBpbiB0aGlzICovCiAgIE9QX0JSQU1JTlpFUk8sICAg
ICAvKiA3OCBvcmRlci4gKi8KQEAgLTgyMywxMCArNjM1LDggQEAgTk9URSBOT1RFIE5PVEU6CiAq
LwogCiB0eXBlZGVmIHN0cnVjdCByZWFsX3BjcmUgewotICBwY3JlX3VpbnQzMiBtYWdpY19udW1i
ZXI7CiAgIHBjcmVfdWludDMyIHNpemU7ICAgICAgICAgICAgICAgLyogVG90YWwgdGhhdCB3YXMg
bWFsbG9jZWQgKi8KICAgcGNyZV91aW50MzIgb3B0aW9uczsKLSAgcGNyZV91aW50MzIgZHVtbXkx
OyAgICAgICAgICAgICAvKiBGb3IgZnV0dXJlIHVzZSwgbWF5YmUgKi8KIAogICBwY3JlX3VpbnQx
NiB0b3BfYnJhY2tldDsKICAgcGNyZV91aW50MTYgdG9wX2JhY2tyZWY7CkBAIC04NjYsNyArNjc2
LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgY29tcGlsZV9kYXRhIHsKICAgaW50ICB0b3BfYmFja3JlZjsg
ICAgICAgICAgICAgLyogTWF4aW11bSBiYWNrIHJlZmVyZW5jZSAqLwogICB1bnNpZ25lZCBpbnQg
YmFja3JlZl9tYXA7ICAgICAvKiBCaXRtYXAgb2YgbG93IGJhY2sgcmVmcyAqLwogICBpbnQgIHJl
cV92YXJ5b3B0OyAgICAgICAgICAgICAvKiAiQWZ0ZXIgdmFyaWFibGUgaXRlbSIgZmxhZyBmb3Ig
cmVxYnl0ZSAqLwotICBCT09MIG5vcGFydGlhbDsgICAgICAgICAgICAgICAvKiBTZXQgVFJVRSBp
ZiBwYXJ0aWFsIHdvbid0IHdvcmsgKi8KIH0gY29tcGlsZV9kYXRhOwogCiAvKiBTdHJ1Y3R1cmUg
Zm9yIG1haW50YWluaW5nIGEgY2hhaW4gb2YgcG9pbnRlcnMgdG8gdGhlIGN1cnJlbnRseSBpbmNv
bXBsZXRlCkBAIC04NzcsMTggKzY4Niw2IEBAIHR5cGVkZWYgc3RydWN0IGJyYW5jaF9jaGFpbiB7
CiAgIHVzY2hhciAqY3VycmVudDsKIH0gYnJhbmNoX2NoYWluOwogCi0vKiBTdHJ1Y3R1cmUgZm9y
IGl0ZW1zIGluIGEgbGlua2VkIGxpc3QgdGhhdCByZXByZXNlbnRzIGFuIGV4cGxpY2l0IHJlY3Vy
c2l2ZQotY2FsbCB3aXRoaW4gdGhlIHBhdHRlcm4uICovCi0KLXR5cGVkZWYgc3RydWN0IHJlY3Vy
c2lvbl9pbmZvIHsKLSAgc3RydWN0IHJlY3Vyc2lvbl9pbmZvICpwcmV2cmVjOyAvKiBQcmV2aW91
cyByZWN1cnNpb24gcmVjb3JkIChvciBOVUxMKSAqLwotICBpbnQgZ3JvdXBfbnVtOyAgICAgICAg
ICAgICAgICAvKiBOdW1iZXIgb2YgZ3JvdXAgdGhhdCB3YXMgY2FsbGVkICovCi0gIGNvbnN0IHVz
Y2hhciAqYWZ0ZXJfY2FsbDsgICAgIC8qICJSZXR1cm4gdmFsdWUiOiBwb2ludHMgYWZ0ZXIgdGhl
IGNhbGwgaW4gdGhlIGV4cHIgKi8KLSAgVVNQVFIgc2F2ZV9zdGFydDsgICAgICAgICAgICAgLyog
T2xkIHZhbHVlIG9mIG1kLT5zdGFydF9tYXRjaCAqLwotICBpbnQgKm9mZnNldF9zYXZlOyAgICAg
ICAgICAgICAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIHNhdmVkIG9mZnNldHMgKi8KLSAgaW50IHNh
dmVkX21heDsgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhdmVkIG9mZnNldHMgKi8KLX0g
cmVjdXJzaW9uX2luZm87Ci0KIC8qIFdoZW4gY29tcGlsaW5nIGluIGEgbW9kZSB0aGF0IGRvZXNu
J3QgdXNlIHJlY3Vyc2l2ZSBjYWxscyB0byBtYXRjaCgpLAogYSBzdHJ1Y3R1cmUgaXMgdXNlZCB0
byByZW1lbWJlciBsb2NhbCB2YXJpYWJsZXMgb24gdGhlIGhlYXAuIEl0IGlzIGRlZmluZWQgaW4K
IHBjcmUuYywgY2xvc2UgdG8gdGhlIG1hdGNoKCkgZnVuY3Rpb24sIHNvIHRoYXQgaXQgaXMgZWFz
eSB0byBrZWVwIGl0IGluIHN0ZXAKQEAgLTkwNCw3MCArNzAxLDM2IEBAIGRvaW5nIHRyYWRpdGlv
bmFsIE5GQSBtYXRjaGluZywgc28gdGhhdCAKIAogdHlwZWRlZiBzdHJ1Y3QgbWF0Y2hfZGF0YSB7
CiAgIHVuc2lnbmVkIGxvbmcgaW50IG1hdGNoX2NhbGxfY291bnQ7ICAgICAgLyogQXMgaXQgc2F5
cyAqLwotICB1bnNpZ25lZCBsb25nIGludCBtYXRjaF9saW1pdDsgICAgICAgICAgIC8qIEFzIGl0
IHNheXMgKi8KLSAgdW5zaWduZWQgbG9uZyBpbnQgbWF0Y2hfbGltaXRfcmVjdXJzaW9uOyAvKiBB
cyBpdCBzYXlzICovCiAgIGludCAgICpvZmZzZXRfdmVjdG9yOyAgICAgICAgIC8qIE9mZnNldCB2
ZWN0b3IgKi8KICAgaW50ICAgIG9mZnNldF9lbmQ7ICAgICAgICAgICAgLyogT25lIHBhc3QgdGhl
IGVuZCAqLwogICBpbnQgICAgb2Zmc2V0X21heDsgICAgICAgICAgICAvKiBUaGUgbWF4aW11bSB1
c2FibGUgZm9yIHJldHVybiBkYXRhICovCiAgIGNvbnN0IHVzY2hhciAqbGNjOyAgICAgICAgICAg
IC8qIFBvaW50cyB0byBsb3dlciBjYXNpbmcgdGFibGUgKi8KICAgY29uc3QgdXNjaGFyICpjdHlw
ZXM7ICAgICAgICAgLyogUG9pbnRzIHRvIHRhYmxlIG9mIHR5cGUgbWFwcyAqLwogICBCT09MICAg
b2Zmc2V0X292ZXJmbG93OyAgICAgICAvKiBTZXQgaWYgdG9vIG1hbnkgZXh0cmFjdGlvbnMgKi8K
LSAgQk9PTCAgIG5vdGJvbDsgICAgICAgICAgICAgICAgLyogTk9UQk9MIGZsYWcgKi8KLSAgQk9P
TCAgIG5vdGVvbDsgICAgICAgICAgICAgICAgLyogTk9URU9MIGZsYWcgKi8KLSAgQk9PTCAgIHV0
Zjg7ICAgICAgICAgICAgICAgICAgLyogVVRGOCBmbGFnICovCi0gIEJPT0wgICBlbmRvbmx5OyAg
ICAgICAgICAgICAgIC8qIERvbGxhciBub3QgYmVmb3JlIGZpbmFsIFxuICovCi0gIEJPT0wgICBu
b3RlbXB0eTsgICAgICAgICAgICAgIC8qIEVtcHR5IHN0cmluZyBtYXRjaCBub3Qgd2FudGVkICov
Ci0gIEJPT0wgICBwYXJ0aWFsOyAgICAgICAgICAgICAgIC8qIFBBUlRJQUwgZmxhZyAqLwotICBC
T09MICAgaGl0ZW5kOyAgICAgICAgICAgICAgICAvKiBIaXQgdGhlIGVuZCBvZiB0aGUgc3ViamVj
dCBhdCBzb21lIHBvaW50ICovCi0gIGNvbnN0IHVzY2hhciAqc3RhcnRfY29kZTsgICAgIC8qIEZv
ciB1c2Ugd2hlbiByZWN1cnNpbmcgKi8KICAgVVNQVFIgIHN0YXJ0X3N1YmplY3Q7ICAgICAgICAg
LyogU3RhcnQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nICovCiAgIFVTUFRSICBlbmRfc3ViamVjdDsg
ICAgICAgICAgIC8qIEVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KICAgVVNQVFIgIHN0YXJ0
X21hdGNoOyAgICAgICAgICAgLyogU3RhcnQgb2YgdGhpcyBtYXRjaCBhdHRlbXB0ICovCiAgIFVT
UFRSICBlbmRfbWF0Y2hfcHRyOyAgICAgICAgIC8qIFN1YmplY3QgcG9zaXRpb24gYXQgZW5kIG1h
dGNoICovCiAgIGludCAgICBlbmRfb2Zmc2V0X3RvcDsgICAgICAgIC8qIEhpZ2h3YXRlciBtYXJr
IGF0IGVuZCBvZiBtYXRjaCAqLwotICBpbnQgICAgY2FwdHVyZV9sYXN0OyAgICAgICAgICAvKiBN
b3N0IHJlY2VudCBjYXB0dXJlIG51bWJlciAqLwotICBpbnQgICAgc3RhcnRfb2Zmc2V0OyAgICAg
ICAgICAvKiBUaGUgc3RhcnQgb2Zmc2V0IHZhbHVlICovCi0gIHJlY3Vyc2lvbl9pbmZvICpyZWN1
cnNpdmU7ICAgIC8qIExpbmtlZCBsaXN0IG9mIHJlY3Vyc2lvbiBkYXRhICovCi0gIHZvaWQgICpj
YWxsb3V0X2RhdGE7ICAgICAgICAgIC8qIFRvIHBhc3MgYmFjayB0byBjYWxsb3V0cyAqLwogICBz
dHJ1Y3QgaGVhcGZyYW1lICp0aGlzZnJhbWU7ICAvKiBVc2VkIG9ubHkgd2hlbiBjb21waWxpbmcg
Zm9yIG5vIHJlY3Vyc2lvbiAqLworICBCT09MICAgbXVsdGlsaW5lOworICBCT09MICAgY2FzZWxl
c3M7CiB9IG1hdGNoX2RhdGE7CiAKLS8qIEEgc2ltaWxhciBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Ig
dGhlIHNhbWUgcHVycG9zZSBieSB0aGUgREZBIG1hdGNoaW5nCi1mdW5jdGlvbnMuICovCi0KLXR5
cGVkZWYgc3RydWN0IGRmYV9tYXRjaF9kYXRhIHsKLSAgY29uc3QgdXNjaGFyICpzdGFydF9jb2Rl
OyAgICAgLyogU3RhcnQgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KLSAgY29uc3QgcGNyZV91
Y2hhciAqc3RhcnRfc3ViamVjdDsgICAvKiBTdGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8K
LSAgY29uc3QgcGNyZV91Y2hhciAqZW5kX3N1YmplY3Q7ICAgICAvKiBFbmQgb2Ygc3ViamVjdCBz
dHJpbmcgKi8KLSAgY29uc3QgdXNjaGFyICp0YWJsZXM7ICAgICAgICAgLyogQ2hhcmFjdGVyIHRh
YmxlcyAqLwotICBpbnQgICBtb3B0aW9uczsgICAgICAgICAgICAgICAvKiBNYXRjaCBvcHRpb25z
ICovCi0gIGludCAgIHBvcHRpb25zOyAgICAgICAgICAgICAgIC8qIFBhdHRlcm4gb3B0aW9ucyAq
LwotICB2b2lkICAqY2FsbG91dF9kYXRhOyAgICAgICAgICAvKiBUbyBwYXNzIGJhY2sgdG8gY2Fs
bG91dHMgKi8KLX0gZGZhX21hdGNoX2RhdGE7Ci0KIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgZW50
cmllcyBpbiB0aGUgcGNyZV9jdHlwZXMgdGFibGUuICovCiAKICNkZWZpbmUgY3R5cGVfc3BhY2Ug
ICAweDAxCi0jZGVmaW5lIGN0eXBlX2xldHRlciAgMHgwMgogI2RlZmluZSBjdHlwZV9kaWdpdCAg
IDB4MDQKICNkZWZpbmUgY3R5cGVfeGRpZ2l0ICAweDA4CiAjZGVmaW5lIGN0eXBlX3dvcmQgICAg
MHgxMCAgIC8qIGFscGhhbWVyaWMgb3IgJ18nICovCi0jZGVmaW5lIGN0eXBlX21ldGEgICAgMHg4
MCAgIC8qIHJlZ2V4cCBtZXRhIGNoYXIgb3IgemVybyAoZW5kIHBhdHRlcm4pICovCiAKIC8qIE9m
ZnNldHMgZm9yIHRoZSBiaXRtYXAgdGFibGVzIGluIHBjcmVfY2JpdHMuIEVhY2ggdGFibGUgY29u
dGFpbnMgYSBzZXQKIG9mIGJpdHMgZm9yIGEgY2xhc3MgbWFwLiBTb21lIGNsYXNzZXMgYXJlIGJ1
aWx0IGJ5IGNvbWJpbmluZyB0aGVzZSB0YWJsZXMuICovCiAKLSNkZWZpbmUgY2JpdF9zcGFjZSAg
ICAgMCAgICAgIC8qIFs6c3BhY2U6XSBvciBccyAqLwotI2RlZmluZSBjYml0X3hkaWdpdCAgIDMy
ICAgICAgLyogWzp4ZGlnaXQ6XSAqLwotI2RlZmluZSBjYml0X2RpZ2l0ICAgIDY0ICAgICAgLyog
WzpkaWdpdDpdIG9yIFxkICovCi0jZGVmaW5lIGNiaXRfdXBwZXIgICAgOTYgICAgICAvKiBbOnVw
cGVyOl0gKi8KLSNkZWZpbmUgY2JpdF9sb3dlciAgIDEyOCAgICAgIC8qIFs6bG93ZXI6XSAqLwot
I2RlZmluZSBjYml0X3dvcmQgICAgMTYwICAgICAgLyogWzp3b3JkOl0gb3IgXHcgKi8KLSNkZWZp
bmUgY2JpdF9ncmFwaCAgIDE5MiAgICAgIC8qIFs6Z3JhcGg6XSAqLwotI2RlZmluZSBjYml0X3By
aW50ICAgMjI0ICAgICAgLyogWzpwcmludDpdICovCi0jZGVmaW5lIGNiaXRfcHVuY3QgICAyNTYg
ICAgICAvKiBbOnB1bmN0Ol0gKi8KLSNkZWZpbmUgY2JpdF9jbnRybCAgIDI4OCAgICAgIC8qIFs6
Y250cmw6XSAqLwotI2RlZmluZSBjYml0X2xlbmd0aCAgMzIwICAgICAgLyogTGVuZ3RoIG9mIHRo
ZSBjYml0cyB0YWJsZSAqLworI2RlZmluZSBjYml0X3NwYWNlICAgICAwICAgICAgLyogXHMgKi8K
KyNkZWZpbmUgY2JpdF9kaWdpdCAgICAzMiAgICAgIC8qIFxkICovCisjZGVmaW5lIGNiaXRfd29y
ZCAgICAgNjQgICAgICAvKiBcdyAqLworI2RlZmluZSBjYml0X2xlbmd0aCAgIDk2ICAgICAgLyog
TGVuZ3RoIG9mIHRoZSBjYml0cyB0YWJsZSAqLwogCiAvKiBPZmZzZXRzIG9mIHRoZSB2YXJpb3Vz
IHRhYmxlcyBmcm9tIHRoZSBiYXNlIHRhYmxlcyBwb2ludGVyLCBhbmQKIHRvdGFsIGxlbmd0aC4g
Ki8KQEAgLTk3Niw3ICs3MzksNyBAQCB0b3RhbCBsZW5ndGguICovCiAjZGVmaW5lIGZjY19vZmZz
ZXQgICAgMjU2CiAjZGVmaW5lIGNiaXRzX29mZnNldCAgNTEyCiAjZGVmaW5lIGN0eXBlc19vZmZz
ZXQgKGNiaXRzX29mZnNldCArIGNiaXRfbGVuZ3RoKQotI2RlZmluZSB0YWJsZXNfbGVuZ3RoIChj
dHlwZXNfb2Zmc2V0ICsgMjU2KQorI2RlZmluZSB0YWJsZXNfbGVuZ3RoIChjdHlwZXNfb2Zmc2V0
ICsgMTI4KQogCiAvKiBMYXlvdXQgb2YgdGhlIFVDUCB0eXBlIHRhYmxlIHRoYXQgdHJhbnNsYXRl
cyBwcm9wZXJ0eSBuYW1lcyBpbnRvIHR5cGVzIGFuZAogY29kZXMuICovCkBAIC0xMDAwLDkgKzc2
Myw2IEBAIGV4dGVybiBjb25zdCB1c2NoYXIgX3BjcmVfdXRmOF90YWJsZTRbXTsKIAogZXh0ZXJu
IGNvbnN0IGludCAgICBfcGNyZV91dGY4X3RhYmxlMV9zaXplOwogCi1leHRlcm4gY29uc3QgdWNw
X3R5cGVfdGFibGUgX3BjcmVfdXR0W107Ci1leHRlcm4gY29uc3QgaW50IF9wY3JlX3V0dF9zaXpl
OwotCiBleHRlcm4gY29uc3QgdXNjaGFyIF9wY3JlX2RlZmF1bHRfdGFibGVzW107CiAKIGV4dGVy
biBjb25zdCB1c2NoYXIgX3BjcmVfT1BfbGVuZ3Roc1tdOwpAQCAtMTAxMywxOCArNzczLDEwIEBA
IG9uZSBvZiB0aGUgZXhwb3J0ZWQgcHVibGljIGZ1bmN0aW9ucy4gVGgKIHNlbnNlLCBidXQgYXJl
IG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuICovCiAKIGV4dGVybiBpbnQgICAgICAg
ICBfcGNyZV9vcmQydXRmOChpbnQsIHVzY2hhciAqKTsKLWV4dGVybiByZWFsX3BjcmUgKiBfcGNy
ZV90cnlfZmxpcHBlZChjb25zdCByZWFsX3BjcmUgKiwgcmVhbF9wY3JlICosCi0gICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwY3JlX3N0dWR5X2RhdGEgKiwgcGNyZV9zdHVkeV9kYXRhICopOwot
ZXh0ZXJuIGludCAgICAgICAgIF9wY3JlX3VjcF9maW5kcHJvcChjb25zdCBpbnQsIGludCAqLCBp
bnQgKik7CiBleHRlcm4gaW50ICAgICAgICAgX3BjcmVfdWNwX290aGVyY2FzZShjb25zdCBpbnQp
OwotZXh0ZXJuIGludCAgICAgICAgIF9wY3JlX3ZhbGlkX3V0ZjgoY29uc3QgdXNjaGFyICosIGlu
dCk7CiBleHRlcm4gQk9PTCAgICAgICAgX3BjcmVfeGNsYXNzKGludCwgY29uc3QgdXNjaGFyICop
OwogCi0jaWYgSkFWQVNDUklQVAogI2RlZmluZSBJU19ORVdMSU5FKG5sKSAoKG5sKSA9PSAweEEg
fHwgKG5sKSA9PSAweEQgfHwgKG5sKSA9PSAweDIwMjggfHwgKG5sKSA9PSAweDIwMjkpCi0jZWxz
ZQotI2RlZmluZSBJU19ORVdMSU5FKG5sKSAoKG5sKSA9PSBORVdMSU5FKQotI2VuZGlmCiAKICNl
bmRpZgogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfbWFrZXRhYmxlcy5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9tYWtldGFibGVzLmMJKHJldmlzaW9u
IDI3NDExKQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX21ha2V0YWJsZXMuYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMTcgKzM4LDYgQEAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAq
LwogCiAKLS8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBleHRlcm5hbCBmdW5jdGlvbiBwY3Jl
X21ha2V0YWJsZXMoKSwgd2hpY2ggYnVpbGRzCi1jaGFyYWN0ZXIgdGFibGVzIGZvciBQQ1JFIGlu
IHRoZSBjdXJyZW50IGxvY2FsZS4gVGhlIGZpbGUgaXMgY29tcGlsZWQgb24gaXRzCi1vd24gYXMg
cGFydCBvZiB0aGUgUENSRSBsaWJyYXJ5LiBIb3dldmVyLCBpdCBpcyBhbHNvIGluY2x1ZGVkIGlu
IHRoZQotY29tcGlsYXRpb24gb2YgZGZ0YWJsZXMuYywgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8g
REZUQUJMRVMgaXMgZGVmaW5lZC4gKi8KLQotCi0jaWZuZGVmIERGVEFCTEVTCi0jaW5jbHVkZSAi
cGNyZV9pbnRlcm5hbC5oIgotI2VuZGlmCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIENyZWF0ZSBQQ1JFIGNoYXJhY3Rl
ciB0YWJsZXMgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwpAQCAtNjMsNyArNTIsNyBAQCBBcmd1bWVudHM6ICAgbm9uZQogUmV0dXJu
czogICAgIHBvaW50ZXIgdG8gdGhlIGNvbnRpZ3VvdXMgYmxvY2sgb2YgZGF0YQogKi8KIAotY29u
c3QgdW5zaWduZWQgY2hhciAqCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqCiBwY3JlX21h
a2V0YWJsZXModm9pZCkKIHsKIHVuc2lnbmVkIGNoYXIgKnlpZWxkLCAqcDsKQEAgLTk2LDE5ICs4
NSwxMiBAQCBsZWFzdCB1bmRlciBEZWJpYW4gTGludXgncyBsb2NhbGVzIGFzIG9mCiBzcGVjaWFs
bHkuICovCiAKIG1lbXNldChwLCAwLCBjYml0X2xlbmd0aCk7Ci1mb3IgKGkgPSAwOyBpIDwgMjU2
OyBpKyspCitmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCiAgIHsKICAgaWYgKGlzZGlnaXQoaSkp
IHBbY2JpdF9kaWdpdCAgKyBpLzhdIHw9IDEgPDwgKGkmNyk7Ci0gIGlmIChpc3VwcGVyKGkpKSBw
W2NiaXRfdXBwZXIgICsgaS84XSB8PSAxIDw8IChpJjcpOwotICBpZiAoaXNsb3dlcihpKSkgcFtj
Yml0X2xvd2VyICArIGkvOF0gfD0gMSA8PCAoaSY3KTsKICAgaWYgKGlzYWxudW0oaSkpIHBbY2Jp
dF93b3JkICAgKyBpLzhdIHw9IDEgPDwgKGkmNyk7CiAgIGlmIChpID09ICdfJykgICBwW2NiaXRf
d29yZCAgICsgaS84XSB8PSAxIDw8IChpJjcpOwogICBpZiAoaXNzcGFjZShpKSkgcFtjYml0X3Nw
YWNlICArIGkvOF0gfD0gMSA8PCAoaSY3KTsKLSAgaWYgKGlzeGRpZ2l0KGkpKXBbY2JpdF94ZGln
aXQgKyBpLzhdIHw9IDEgPDwgKGkmNyk7Ci0gIGlmIChpc2dyYXBoKGkpKSBwW2NiaXRfZ3JhcGgg
ICsgaS84XSB8PSAxIDw8IChpJjcpOwotICBpZiAoaXNwcmludChpKSkgcFtjYml0X3ByaW50ICAr
IGkvOF0gfD0gMSA8PCAoaSY3KTsKLSAgaWYgKGlzcHVuY3QoaSkpIHBbY2JpdF9wdW5jdCAgKyBp
LzhdIHw9IDEgPDwgKGkmNyk7Ci0gIGlmIChpc2NudHJsKGkpKSBwW2NiaXRfY250cmwgICsgaS84
XSB8PSAxIDw8IChpJjcpOwogICB9CiBwICs9IGNiaXRfbGVuZ3RoOwogCkBAIC0xMTYsMjUgKzk4
LDE1IEBAIHAgKz0gY2JpdF9sZW5ndGg7CiBzcGFjZSBjaGFycywgYmVjYXVzZSBQZXJsIGRvZXNu
J3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggZm9yIFxzIGFuZCBmb3IgY29tbWVudHMKIHdpdGhpbiBy
ZWdleGVzLiAqLwogCi1mb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCitmb3IgKGkgPSAwOyBpIDwg
MTI4OyBpKyspCiAgIHsKICAgaW50IHggPSAwOwotICBpZiAoCi0jaWYgIUpBVkFTQ1JJUFQKLSAg
ICAgICppICE9IDB4MGIgJiYKLSNlbmRpZgotICAgICAgICBpc3NwYWNlKGkpKSB4ICs9IGN0eXBl
X3NwYWNlOwotICBpZiAoaXNhbHBoYShpKSkgeCArPSBjdHlwZV9sZXR0ZXI7CisgIGlmIChpc3Nw
YWNlKGkpKSB4ICs9IGN0eXBlX3NwYWNlOwogICBpZiAoaXNkaWdpdChpKSkgeCArPSBjdHlwZV9k
aWdpdDsKICAgaWYgKGlzeGRpZ2l0KGkpKSB4ICs9IGN0eXBlX3hkaWdpdDsKICAgaWYgKGlzYWxu
dW0oaSkgfHwgaSA9PSAnXycpIHggKz0gY3R5cGVfd29yZDsKLQotICAvKiBOb3RlOiBzdHJjaHIg
aW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIHplcm8gaW4gdGhlIGNoYXJhY3RlcnMgaXQgY29uc2lk
ZXJzLgotICBJbiB0aGlzIGluc3RhbmNlLCB0aGF0IGlzIG9rIGJlY2F1c2Ugd2Ugd2FudCBiaW5h
cnkgemVybyB0byBiZSBmbGFnZ2VkIGFzIGEKLSAgbWV0YS1jaGFyYWN0ZXIsIHdoaWNoIGluIHRo
aXMgc2Vuc2UgaXMgYW55IGNoYXJhY3RlciB0aGF0IHRlcm1pbmF0ZXMgYSBydW4KLSAgb2YgZGF0
YSBjaGFyYWN0ZXJzLiAqLwotCi0gIGlmIChzdHJjaHIoIiorP3teLiR8KClbIiwgaSkgIT0gMCkg
eCArPSBjdHlwZV9tZXRhOyAqcCsrID0geDsgfQorICAqcCsrID0geDsKKyAgfQogCiByZXR1cm4g
eWllbGQ7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdGFibGVzLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jCShyZXZpc2lvbiAyNzQx
MSkKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV90YWJsZXMuYwkod29ya2luZyBjb3B5KQpA
QCAtODIsMTE0ICs4Miw2IEBAIGNvbnN0IHVzY2hhciBfcGNyZV91dGY4X3RhYmxlNFtdID0gewog
ICAyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLAogICAzLDMsMywzLDMsMywzLDMsNCw0
LDQsNCw1LDUsNSw1IH07CiAKLS8qIFRoaXMgdGFibGUgdHJhbnNsYXRlcyBVbmljb2RlIHByb3Bl
cnR5IG5hbWVzIGludG8gdHlwZSBhbmQgY29kZSB2YWx1ZXMuIEl0Ci1pcyBzZWFyY2hlZCBieSBi
aW5hcnkgY2hvcCwgc28gbXVzdCBiZSBpbiBjb2xsYXRpbmcgc2VxdWVuY2Ugb2YgbmFtZS4gKi8K
LQotY29uc3QgdWNwX3R5cGVfdGFibGUgX3BjcmVfdXR0W10gPSB7Ci0gIHsgIkFueSIsICAgICAg
ICAgICAgICAgICBQVF9BTlksICAwIH0sCi0gIHsgIkFyYWJpYyIsICAgICAgICAgICAgICBQVF9T
QywgICB1Y3BfQXJhYmljIH0sCi0gIHsgIkFybWVuaWFuIiwgICAgICAgICAgICBQVF9TQywgICB1
Y3BfQXJtZW5pYW4gfSwKLSAgeyAiQmVuZ2FsaSIsICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9C
ZW5nYWxpIH0sCi0gIHsgIkJvcG9tb2ZvIiwgICAgICAgICAgICBQVF9TQywgICB1Y3BfQm9wb21v
Zm8gfSwKLSAgeyAiQnJhaWxsZSIsICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9CcmFpbGxlIH0s
Ci0gIHsgIkJ1Z2luZXNlIiwgICAgICAgICAgICBQVF9TQywgICB1Y3BfQnVnaW5lc2UgfSwKLSAg
eyAiQnVoaWQiLCAgICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9CdWhpZCB9LAotICB7ICJDIiwg
ICAgICAgICAgICAgICAgICAgUFRfR0MsICAgdWNwX0MgfSwKLSAgeyAiQ2FuYWRpYW5fQWJvcmln
aW5hbCIsIFBUX1NDLCAgIHVjcF9DYW5hZGlhbl9BYm9yaWdpbmFsIH0sCi0gIHsgIkNjIiwgICAg
ICAgICAgICAgICAgICBQVF9QQywgICB1Y3BfQ2MgfSwKLSAgeyAiQ2YiLCAgICAgICAgICAgICAg
ICAgIFBUX1BDLCAgIHVjcF9DZiB9LAotICB7ICJDaGVyb2tlZSIsICAgICAgICAgICAgUFRfU0Ms
ICAgdWNwX0NoZXJva2VlIH0sCi0gIHsgIkNuIiwgICAgICAgICAgICAgICAgICBQVF9QQywgICB1
Y3BfQ24gfSwKLSAgeyAiQ28iLCAgICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVjcF9DbyB9LAot
ICB7ICJDb21tb24iLCAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0NvbW1vbiB9LAotICB7ICJD
b3B0aWMiLCAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0NvcHRpYyB9LAotICB7ICJDcyIsICAg
ICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX0NzIH0sCi0gIHsgIkN5cHJpb3QiLCAgICAgICAg
ICAgICBQVF9TQywgICB1Y3BfQ3lwcmlvdCB9LAotICB7ICJDeXJpbGxpYyIsICAgICAgICAgICAg
UFRfU0MsICAgdWNwX0N5cmlsbGljIH0sCi0gIHsgIkRlc2VyZXQiLCAgICAgICAgICAgICBQVF9T
QywgICB1Y3BfRGVzZXJldCB9LAotICB7ICJEZXZhbmFnYXJpIiwgICAgICAgICAgUFRfU0MsICAg
dWNwX0RldmFuYWdhcmkgfSwKLSAgeyAiRXRoaW9waWMiLCAgICAgICAgICAgIFBUX1NDLCAgIHVj
cF9FdGhpb3BpYyB9LAotICB7ICJHZW9yZ2lhbiIsICAgICAgICAgICAgUFRfU0MsICAgdWNwX0dl
b3JnaWFuIH0sCi0gIHsgIkdsYWdvbGl0aWMiLCAgICAgICAgICBQVF9TQywgICB1Y3BfR2xhZ29s
aXRpYyB9LAotICB7ICJHb3RoaWMiLCAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0dvdGhpYyB9
LAotICB7ICJHcmVlayIsICAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0dyZWVrIH0sCi0gIHsg
Ikd1amFyYXRpIiwgICAgICAgICAgICBQVF9TQywgICB1Y3BfR3VqYXJhdGkgfSwKLSAgeyAiR3Vy
bXVraGkiLCAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9HdXJtdWtoaSB9LAotICB7ICJIYW4iLCAg
ICAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0hhbiB9LAotICB7ICJIYW5ndWwiLCAgICAgICAg
ICAgICAgUFRfU0MsICAgdWNwX0hhbmd1bCB9LAotICB7ICJIYW51bm9vIiwgICAgICAgICAgICAg
UFRfU0MsICAgdWNwX0hhbnVub28gfSwKLSAgeyAiSGVicmV3IiwgICAgICAgICAgICAgIFBUX1ND
LCAgIHVjcF9IZWJyZXcgfSwKLSAgeyAiSGlyYWdhbmEiLCAgICAgICAgICAgIFBUX1NDLCAgIHVj
cF9IaXJhZ2FuYSB9LAotICB7ICJJbmhlcml0ZWQiLCAgICAgICAgICAgUFRfU0MsICAgdWNwX0lu
aGVyaXRlZCB9LAotICB7ICJLYW5uYWRhIiwgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0thbm5h
ZGEgfSwKLSAgeyAiS2F0YWthbmEiLCAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9LYXRha2FuYSB9
LAotICB7ICJLaGFyb3NodGhpIiwgICAgICAgICAgUFRfU0MsICAgdWNwX0toYXJvc2h0aGkgfSwK
LSAgeyAiS2htZXIiLCAgICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9LaG1lciB9LAotICB7ICJM
IiwgICAgICAgICAgICAgICAgICAgUFRfR0MsICAgdWNwX0wgfSwKLSAgeyAiTCYiLCAgICAgICAg
ICAgICAgICAgIFBUX0xBTVAsIDAgfSwKLSAgeyAiTGFvIiwgICAgICAgICAgICAgICAgIFBUX1ND
LCAgIHVjcF9MYW8gfSwKLSAgeyAiTGF0aW4iLCAgICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9M
YXRpbiB9LAotICB7ICJMaW1idSIsICAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX0xpbWJ1IH0s
Ci0gIHsgIkxpbmVhcl9CIiwgICAgICAgICAgICBQVF9TQywgICB1Y3BfTGluZWFyX0IgfSwKLSAg
eyAiTGwiLCAgICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVjcF9MbCB9LAotICB7ICJMbSIsICAg
ICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX0xtIH0sCi0gIHsgIkxvIiwgICAgICAgICAgICAg
ICAgICBQVF9QQywgICB1Y3BfTG8gfSwKLSAgeyAiTHQiLCAgICAgICAgICAgICAgICAgIFBUX1BD
LCAgIHVjcF9MdCB9LAotICB7ICJMdSIsICAgICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX0x1
IH0sCi0gIHsgIk0iLCAgICAgICAgICAgICAgICAgICBQVF9HQywgICB1Y3BfTSB9LAotICB7ICJN
YWxheWFsYW0iLCAgICAgICAgICAgUFRfU0MsICAgdWNwX01hbGF5YWxhbSB9LAotICB7ICJNYyIs
ICAgICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX01jIH0sCi0gIHsgIk1lIiwgICAgICAgICAg
ICAgICAgICBQVF9QQywgICB1Y3BfTWUgfSwKLSAgeyAiTW4iLCAgICAgICAgICAgICAgICAgIFBU
X1BDLCAgIHVjcF9NbiB9LAotICB7ICJNb25nb2xpYW4iLCAgICAgICAgICAgUFRfU0MsICAgdWNw
X01vbmdvbGlhbiB9LAotICB7ICJNeWFubWFyIiwgICAgICAgICAgICAgUFRfU0MsICAgdWNwX015
YW5tYXIgfSwKLSAgeyAiTiIsICAgICAgICAgICAgICAgICAgIFBUX0dDLCAgIHVjcF9OIH0sCi0g
IHsgIk5kIiwgICAgICAgICAgICAgICAgICBQVF9QQywgICB1Y3BfTmQgfSwKLSAgeyAiTmV3X1Rh
aV9MdWUiLCAgICAgICAgIFBUX1NDLCAgIHVjcF9OZXdfVGFpX0x1ZSB9LAotICB7ICJObCIsICAg
ICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX05sIH0sCi0gIHsgIk5vIiwgICAgICAgICAgICAg
ICAgICBQVF9QQywgICB1Y3BfTm8gfSwKLSAgeyAiT2doYW0iLCAgICAgICAgICAgICAgIFBUX1ND
LCAgIHVjcF9PZ2hhbSB9LAotICB7ICJPbGRfSXRhbGljIiwgICAgICAgICAgUFRfU0MsICAgdWNw
X09sZF9JdGFsaWMgfSwKLSAgeyAiT2xkX1BlcnNpYW4iLCAgICAgICAgIFBUX1NDLCAgIHVjcF9P
bGRfUGVyc2lhbiB9LAotICB7ICJPcml5YSIsICAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX09y
aXlhIH0sCi0gIHsgIk9zbWFueWEiLCAgICAgICAgICAgICBQVF9TQywgICB1Y3BfT3NtYW55YSB9
LAotICB7ICJQIiwgICAgICAgICAgICAgICAgICAgUFRfR0MsICAgdWNwX1AgfSwKLSAgeyAiUGMi
LCAgICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVjcF9QYyB9LAotICB7ICJQZCIsICAgICAgICAg
ICAgICAgICAgUFRfUEMsICAgdWNwX1BkIH0sCi0gIHsgIlBlIiwgICAgICAgICAgICAgICAgICBQ
VF9QQywgICB1Y3BfUGUgfSwKLSAgeyAiUGYiLCAgICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVj
cF9QZiB9LAotICB7ICJQaSIsICAgICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX1BpIH0sCi0g
IHsgIlBvIiwgICAgICAgICAgICAgICAgICBQVF9QQywgICB1Y3BfUG8gfSwKLSAgeyAiUHMiLCAg
ICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVjcF9QcyB9LAotICB7ICJSdW5pYyIsICAgICAgICAg
ICAgICAgUFRfU0MsICAgdWNwX1J1bmljIH0sCi0gIHsgIlMiLCAgICAgICAgICAgICAgICAgICBQ
VF9HQywgICB1Y3BfUyB9LAotICB7ICJTYyIsICAgICAgICAgICAgICAgICAgUFRfUEMsICAgdWNw
X1NjIH0sCi0gIHsgIlNoYXZpYW4iLCAgICAgICAgICAgICBQVF9TQywgICB1Y3BfU2hhdmlhbiB9
LAotICB7ICJTaW5oYWxhIiwgICAgICAgICAgICAgUFRfU0MsICAgdWNwX1NpbmhhbGEgfSwKLSAg
eyAiU2siLCAgICAgICAgICAgICAgICAgIFBUX1BDLCAgIHVjcF9TayB9LAotICB7ICJTbSIsICAg
ICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX1NtIH0sCi0gIHsgIlNvIiwgICAgICAgICAgICAg
ICAgICBQVF9QQywgICB1Y3BfU28gfSwKLSAgeyAiU3lsb3RpX05hZ3JpIiwgICAgICAgIFBUX1ND
LCAgIHVjcF9TeWxvdGlfTmFncmkgfSwKLSAgeyAiU3lyaWFjIiwgICAgICAgICAgICAgIFBUX1ND
LCAgIHVjcF9TeXJpYWMgfSwKLSAgeyAiVGFnYWxvZyIsICAgICAgICAgICAgIFBUX1NDLCAgIHVj
cF9UYWdhbG9nIH0sCi0gIHsgIlRhZ2JhbndhIiwgICAgICAgICAgICBQVF9TQywgICB1Y3BfVGFn
YmFud2EgfSwKLSAgeyAiVGFpX0xlIiwgICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9UYWlfTGUg
fSwKLSAgeyAiVGFtaWwiLCAgICAgICAgICAgICAgIFBUX1NDLCAgIHVjcF9UYW1pbCB9LAotICB7
ICJUZWx1Z3UiLCAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX1RlbHVndSB9LAotICB7ICJUaGFh
bmEiLCAgICAgICAgICAgICAgUFRfU0MsICAgdWNwX1RoYWFuYSB9LAotICB7ICJUaGFpIiwgICAg
ICAgICAgICAgICAgUFRfU0MsICAgdWNwX1RoYWkgfSwKLSAgeyAiVGliZXRhbiIsICAgICAgICAg
ICAgIFBUX1NDLCAgIHVjcF9UaWJldGFuIH0sCi0gIHsgIlRpZmluYWdoIiwgICAgICAgICAgICBQ
VF9TQywgICB1Y3BfVGlmaW5hZ2ggfSwKLSAgeyAiVWdhcml0aWMiLCAgICAgICAgICAgIFBUX1ND
LCAgIHVjcF9VZ2FyaXRpYyB9LAotICB7ICJZaSIsICAgICAgICAgICAgICAgICAgUFRfU0MsICAg
dWNwX1lpIH0sCi0gIHsgIloiLCAgICAgICAgICAgICAgICAgICBQVF9HQywgICB1Y3BfWiB9LAot
ICB7ICJabCIsICAgICAgICAgICAgICAgICAgUFRfUEMsICAgdWNwX1psIH0sCi0gIHsgIlpwIiwg
ICAgICAgICAgICAgICAgICBQVF9QQywgICB1Y3BfWnAgfSwKLSAgeyAiWnMiLCAgICAgICAgICAg
ICAgICAgIFBUX1BDLCAgIHVjcF9acyB9Ci19OwotCi1jb25zdCBpbnQgX3BjcmVfdXR0X3NpemUg
PSBzaXplb2YoX3BjcmVfdXR0KS9zaXplb2YodWNwX3R5cGVfdGFibGUpOwotCiAjaW5jbHVkZSAi
Y2hhcnRhYmxlcy5jIgogCiAvKiBFbmQgb2YgcGNyZV90YWJsZXMuYyAqLwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcGNyZS9wY3JlX3VjcF9zZWFyY2hmdW5jcy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuYwkocmV2aXNpb24gMjc0MTEpCisr
KyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdWNwX3NlYXJjaGZ1bmNzLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDg4ICs0MywxMCBAQCBwcm9wZXJ0aWVzLiAqLwogCiAjaW5jbHVkZSAicGNyZV9p
bnRlcm5hbC5oIgogCi0jaW5jbHVkZSAidWNwLmgiICAgICAgICAgICAgICAgLyogQ2F0ZWdvcnkg
ZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlICJ1Y3BpbnRlcm5hbC5oIiAgICAgICAvKiBJbnRlcm5h
bCB0YWJsZSBkZXRhaWxzICovCiAjaW5jbHVkZSAidWNwdGFibGUuYyIgICAgICAgICAgLyogVGhl
IHRhYmxlIGl0c2VsZiAqLwogCiAKLSNpZiAhSkFWQVNDUklQVAotCi0vKiBUYWJsZSB0byB0cmFu
c2xhdGUgZnJvbSBwYXJ0aWN1bGFyIHR5cGUgdmFsdWUgdG8gdGhlIGdlbmVyYWwgdmFsdWUuICov
Ci0KLXN0YXRpYyBpbnQgdWNwX2dlbnR5cGVbXSA9IHsKLSAgdWNwX0MsIHVjcF9DLCB1Y3BfQywg
dWNwX0MsIHVjcF9DLCAgLyogQ2MsIENmLCBDbiwgQ28sIENzICovCi0gIHVjcF9MLCB1Y3BfTCwg
dWNwX0wsIHVjcF9MLCB1Y3BfTCwgIC8qIExsLCBMdSwgTG0sIExvLCBMdCAqLwotICB1Y3BfTSwg
dWNwX00sIHVjcF9NLCAgICAgICAgICAgICAgICAvKiBNYywgTWUsIE1uICovCi0gIHVjcF9OLCB1
Y3BfTiwgdWNwX04sICAgICAgICAgICAgICAgIC8qIE5kLCBObCwgTm8gKi8KLSAgdWNwX1AsIHVj
cF9QLCB1Y3BfUCwgdWNwX1AsIHVjcF9QLCAgLyogUGMsIFBkLCBQZSwgUGYsIFBpICovCi0gIHVj
cF9QLCB1Y3BfUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIFBzLCBQbyAqLwotICB1Y3BfUywg
dWNwX1MsIHVjcF9TLCB1Y3BfUywgICAgICAgICAvKiBTYywgU2ssIFNtLCBTbyAqLwotICB1Y3Bf
WiwgdWNwX1osIHVjcF9aICAgICAgICAgICAgICAgICAvKiBabCwgWnAsIFpzICovCi19OwotCi0K
LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSog
ICAgICAgICBTZWFyY2ggdGFibGUgYW5kIHJldHVybiB0eXBlICAgICAgICAgICAqCi0qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaHJlZSB2
YWx1ZXMgYXJlIHJldHVybmVkOiB0aGUgY2F0ZWdvcnkgaXMgdWNwX0MsIHVjcF9MLCBldGMuIFRo
ZSBkZXRhaWxlZAotY2hhcmFjdGVyIHR5cGUgaXMgdWNwX0x1LCB1Y3BfTmQsIGV0Yy4gVGhlIHNj
cmlwdCBpcyB1Y3BfTGF0aW4sIGV0Yy4KLQotQXJndW1lbnRzOgotICBjICAgICAgICAgICB0aGUg
Y2hhcmFjdGVyIHZhbHVlCi0gIHR5cGVfcHRyICAgIHRoZSBkZXRhaWxlZCBjaGFyYWN0ZXIgdHlw
ZSBpcyByZXR1cm5lZCBoZXJlCi0gIHNjcmlwdF9wdHIgIHRoZSBzY3JpcHQgaXMgcmV0dXJuZWQg
aGVyZQotCi1SZXR1cm5zOiAgICAgIHRoZSBjaGFyYWN0ZXIgdHlwZSBjYXRlZ29yeQotKi8KLQot
aW50Ci1fcGNyZV91Y3BfZmluZHByb3AoY29uc3QgaW50IGMsIGludCAqdHlwZV9wdHIsIGludCAq
c2NyaXB0X3B0cikKLXsKLWludCBib3QgPSAwOwotaW50IHRvcCA9IHNpemVvZih1Y3BfdGFibGUp
L3NpemVvZihjbm9kZSk7Ci1pbnQgbWlkOwotCi0vKiBUaGUgdGFibGUgaXMgc2VhcmNoZWQgdXNp
bmcgYSBiaW5hcnkgY2hvcC4gWW91IG1pZ2h0IHRoaW5rIHRoYXQgdXNpbmcKLWludGVybWVkaWF0
ZSB2YXJpYWJsZXMgdG8gaG9sZCBzb21lIG9mIHRoZSBjb21tb24gZXhwcmVzc2lvbnMgd291bGQg
c3BlZWQKLXRoaW5ncyB1cCwgYnV0IHRlc3RzIHdpdGggZ2NjIDMuNC40IG9uIExpbnV4IHNob3dl
ZCB0aGF0LCBvbiB0aGUgY29udHJhcnksIGl0Ci1tYWtlcyB0aGluZ3MgYSBsb3Qgc2xvd2VyLiAq
LwotCi1mb3IgKDs7KQotICB7Ci0gIGlmICh0b3AgPD0gYm90KQotICAgIHsKLSAgICAqdHlwZV9w
dHIgPSB1Y3BfQ247Ci0gICAgKnNjcmlwdF9wdHIgPSB1Y3BfQ29tbW9uOwotICAgIHJldHVybiB1
Y3BfQzsKLSAgICB9Ci0gIG1pZCA9IChib3QgKyB0b3ApID4+IDE7Ci0gIGlmIChjID09ICh1Y3Bf
dGFibGVbbWlkXS5mMCAmIGYwX2NoYXJtYXNrKSkgYnJlYWs7Ci0gIGlmIChjIDwgKHVjcF90YWJs
ZVttaWRdLmYwICYgZjBfY2hhcm1hc2spKSB0b3AgPSBtaWQ7Ci0gIGVsc2UKLSAgICB7Ci0gICAg
aWYgKCh1Y3BfdGFibGVbbWlkXS5mMCAmIGYwX3JhbmdlZmxhZykgIT0gMCAmJgotICAgICAgICBj
IDw9ICh1Y3BfdGFibGVbbWlkXS5mMCAmIGYwX2NoYXJtYXNrKSArCi0gICAgICAgICAgICAgKHVj
cF90YWJsZVttaWRdLmYxICYgZjFfcmFuZ2VtYXNrKSkgYnJlYWs7Ci0gICAgYm90ID0gbWlkICsg
MTsKLSAgICB9Ci0gIH0KLQotLyogRm91bmQgYW4gZW50cnkgaW4gdGhlIHRhYmxlLiBTZXQgdGhl
IHNjcmlwdCBhbmQgZGV0YWlsZWQgdHlwZSB2YWx1ZXMsIGFuZAotcmV0dXJuIHRoZSBnZW5lcmFs
IHR5cGUuICovCi0KLSpzY3JpcHRfcHRyID0gKHVjcF90YWJsZVttaWRdLmYwICYgZjBfc2NyaXB0
bWFzaykgPj4gZjBfc2NyaXB0c2hpZnQ7Ci0qdHlwZV9wdHIgPSAodWNwX3RhYmxlW21pZF0uZjEg
JiBmMV90eXBlbWFzaykgPj4gZjFfdHlwZXNoaWZ0OwotCi1yZXR1cm4gdWNwX2dlbnR5cGVbKnR5
cGVfcHRyXTsKLX0KLQotI2VuZGlmCi0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICBTZWFyY2ggdGFibGUgYW5kIHJldHVybiBv
dGhlciBjYXNlICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfeGNsYXNzLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3hjbGFzcy5jCShyZXZpc2lvbiAy
NzQxMSkKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xhc3MuYwkod29ya2luZyBjb3B5
KQpAQCAtOTYsNDggKzk2LDYgQEAgd2hpbGUgKCh0ID0gKmRhdGErKykgIT0gWENMX0VORCkKICAg
ICBHRVRVVEY4Q0hBUklOQyh5LCBkYXRhKTsKICAgICBpZiAoYyA+PSB4ICYmIGMgPD0geSkgcmV0
dXJuICFuZWdhdGVkOwogICAgIH0KLQotI2lmICFKQVZBU0NSSVBUCi0jaWZkZWYgU1VQUE9SVF9V
Q1AKLSAgZWxzZSAgLyogWENMX1BST1AgJiBYQ0xfTk9UUFJPUCAqLwotICAgIHsKLSAgICBpbnQg
Y2hhcnR5cGUsIHNjcmlwdDsKLSAgICBpbnQgY2F0ZWdvcnkgPSBfcGNyZV91Y3BfZmluZHByb3Ao
YywgJmNoYXJ0eXBlLCAmc2NyaXB0KTsKLQotICAgIHN3aXRjaCgqZGF0YSkKLSAgICAgIHsKLSAg
ICAgIGNhc2UgUFRfQU5ZOgotICAgICAgaWYgKHQgPT0gWENMX1BST1ApIHJldHVybiAhbmVnYXRl
ZDsKLSAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBUX0xBTVA6Ci0gICAgICBpZiAoKGNoYXJ0
eXBlID09IHVjcF9MdSB8fCBjaGFydHlwZSA9PSB1Y3BfTGwgfHwgY2hhcnR5cGUgPT0gdWNwX0x0
KSA9PQotICAgICAgICAgICh0ID09IFhDTF9QUk9QKSkgcmV0dXJuICFuZWdhdGVkOwotICAgICAg
YnJlYWs7Ci0KLSAgICAgIGNhc2UgUFRfR0M6Ci0gICAgICBpZiAoKGRhdGFbMV0gPT0gY2F0ZWdv
cnkpID09ICh0ID09IFhDTF9QUk9QKSkgcmV0dXJuICFuZWdhdGVkOwotICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgUFRfUEM6Ci0gICAgICBpZiAoKGRhdGFbMV0gPT0gY2hhcnR5cGUpID09ICh0
ID09IFhDTF9QUk9QKSkgcmV0dXJuICFuZWdhdGVkOwotICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgUFRfU0M6Ci0gICAgICBpZiAoKGRhdGFbMV0gPT0gc2NyaXB0KSA9PSAodCA9PSBYQ0xfUFJP
UCkpIHJldHVybiAhbmVnYXRlZDsKLSAgICAgIGJyZWFrOwotCi0gICAgICAvKiBUaGlzIHNob3Vs
ZCBuZXZlciBvY2N1ciwgYnV0IGNvbXBpbGVycyBtYXkgbXV0dGVyIGlmIHRoZXJlIGlzIG5vCi0g
ICAgICBkZWZhdWx0LiAqLwotCi0gICAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgICAgfQotCi0gICAgZGF0YSArPSAyOwotICAgIH0KLSNlbmRpZiAgLyogU1VQUE9SVF9VQ1Ag
Ki8KLSNlbmRpZgogICB9CiAKIHJldHVybiBuZWdhdGVkOyAgIC8qIGNoYXIgZGlkIG5vdCBtYXRj
aCAqLwpJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS91Y3AuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9wY3JlL3VjcC5oCShyZXZpc2lvbiAyNzQxMSkKKysrIEphdmFTY3JpcHRDb3Jl
L3BjcmUvdWNwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI2ICsxLDIgQEAKLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgIFVuaWNv
ZGUgUHJvcGVydHkgVGFibGUgaGFuZGxlciAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfVUNQX0gKLSNkZWZpbmUg
X1VDUF9ICi0KLS8qIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBvZiB0aGUgcHJvcGVy
dHkgdmFsdWVzIHRoYXQgYXJlIHJldHVybmVkIGJ5Ci10aGUgZnVuY3Rpb24gX3BjcmVfdWNwX2Zp
bmRwcm9wKCkuICovCi0KLS8qIFRoZXNlIGFyZSB0aGUgZ2VuZXJhbCBjaGFyYWN0ZXIgY2F0ZWdv
cmllcy4gKi8KLQotZW51bSB7Ci0gIHVjcF9DLCAgICAgLyogT3RoZXIgKi8KLSAgdWNwX0wsICAg
ICAvKiBMZXR0ZXIgKi8KLSAgdWNwX00sICAgICAvKiBNYXJrICovCi0gIHVjcF9OLCAgICAgLyog
TnVtYmVyICovCi0gIHVjcF9QLCAgICAgLyogUHVuY3R1YXRpb24gKi8KLSAgdWNwX1MsICAgICAv
KiBTeW1ib2wgKi8KLSAgdWNwX1ogICAgICAvKiBTZXBhcmF0b3IgKi8KLX07Ci0KLS8qIFRoZXNl
IGFyZSB0aGUgcGFydGljdWxhciBjaGFyYWN0ZXIgdHlwZXMuICovCi0KLWVudW0gewotICB1Y3Bf
Q2MsICAgIC8qIENvbnRyb2wgKi8KLSAgdWNwX0NmLCAgICAvKiBGb3JtYXQgKi8KLSAgdWNwX0Nu
LCAgICAvKiBVbmFzc2lnbmVkICovCi0gIHVjcF9DbywgICAgLyogUHJpdmF0ZSB1c2UgKi8KLSAg
dWNwX0NzLCAgICAvKiBTdXJyb2dhdGUgKi8KLSAgdWNwX0xsLCAgICAvKiBMb3dlciBjYXNlIGxl
dHRlciAqLwotICB1Y3BfTG0sICAgIC8qIE1vZGlmaWVyIGxldHRlciAqLwotICB1Y3BfTG8sICAg
IC8qIE90aGVyIGxldHRlciAqLwotICB1Y3BfTHQsICAgIC8qIFRpdGxlIGNhc2UgbGV0dGVyICov
Ci0gIHVjcF9MdSwgICAgLyogVXBwZXIgY2FzZSBsZXR0ZXIgKi8KLSAgdWNwX01jLCAgICAvKiBT
cGFjaW5nIG1hcmsgKi8KLSAgdWNwX01lLCAgICAvKiBFbmNsb3NpbmcgbWFyayAqLwotICB1Y3Bf
TW4sICAgIC8qIE5vbi1zcGFjaW5nIG1hcmsgKi8KLSAgdWNwX05kLCAgICAvKiBEZWNpbWFsIG51
bWJlciAqLwotICB1Y3BfTmwsICAgIC8qIExldHRlciBudW1iZXIgKi8KLSAgdWNwX05vLCAgICAv
KiBPdGhlciBudW1iZXIgKi8KLSAgdWNwX1BjLCAgICAvKiBDb25uZWN0b3IgcHVuY3R1YXRpb24g
Ki8KLSAgdWNwX1BkLCAgICAvKiBEYXNoIHB1bmN0dWF0aW9uICovCi0gIHVjcF9QZSwgICAgLyog
Q2xvc2UgcHVuY3R1YXRpb24gKi8KLSAgdWNwX1BmLCAgICAvKiBGaW5hbCBwdW5jdHVhdGlvbiAq
LwotICB1Y3BfUGksICAgIC8qIEluaXRpYWwgcHVuY3R1YXRpb24gKi8KLSAgdWNwX1BvLCAgICAv
KiBPdGhlciBwdW5jdHVhdGlvbiAqLwotICB1Y3BfUHMsICAgIC8qIE9wZW4gcHVuY3R1YXRpb24g
Ki8KLSAgdWNwX1NjLCAgICAvKiBDdXJyZW5jeSBzeW1ib2wgKi8KLSAgdWNwX1NrLCAgICAvKiBN
b2RpZmllciBzeW1ib2wgKi8KLSAgdWNwX1NtLCAgICAvKiBNYXRoZW1hdGljYWwgc3ltYm9sICov
Ci0gIHVjcF9TbywgICAgLyogT3RoZXIgc3ltYm9sICovCi0gIHVjcF9abCwgICAgLyogTGluZSBz
ZXBhcmF0b3IgKi8KLSAgdWNwX1pwLCAgICAvKiBQYXJhZ3JhcGggc2VwYXJhdG9yICovCi0gIHVj
cF9acyAgICAgLyogU3BhY2Ugc2VwYXJhdG9yICovCi19OwotCi0vKiBUaGVzZSBhcmUgdGhlIHNj
cmlwdCBpZGVudGlmaWNhdGlvbnMuICovCi0KLWVudW0gewotICB1Y3BfQXJhYmljLAotICB1Y3Bf
QXJtZW5pYW4sCi0gIHVjcF9CZW5nYWxpLAotICB1Y3BfQm9wb21vZm8sCi0gIHVjcF9CcmFpbGxl
LAotICB1Y3BfQnVnaW5lc2UsCi0gIHVjcF9CdWhpZCwKLSAgdWNwX0NhbmFkaWFuX0Fib3JpZ2lu
YWwsCi0gIHVjcF9DaGVyb2tlZSwKLSAgdWNwX0NvbW1vbiwKLSAgdWNwX0NvcHRpYywKLSAgdWNw
X0N5cHJpb3QsCi0gIHVjcF9DeXJpbGxpYywKLSAgdWNwX0Rlc2VyZXQsCi0gIHVjcF9EZXZhbmFn
YXJpLAotICB1Y3BfRXRoaW9waWMsCi0gIHVjcF9HZW9yZ2lhbiwKLSAgdWNwX0dsYWdvbGl0aWMs
Ci0gIHVjcF9Hb3RoaWMsCi0gIHVjcF9HcmVlaywKLSAgdWNwX0d1amFyYXRpLAotICB1Y3BfR3Vy
bXVraGksCi0gIHVjcF9IYW4sCi0gIHVjcF9IYW5ndWwsCi0gIHVjcF9IYW51bm9vLAotICB1Y3Bf
SGVicmV3LAotICB1Y3BfSGlyYWdhbmEsCi0gIHVjcF9Jbmhlcml0ZWQsCi0gIHVjcF9LYW5uYWRh
LAotICB1Y3BfS2F0YWthbmEsCi0gIHVjcF9LaGFyb3NodGhpLAotICB1Y3BfS2htZXIsCi0gIHVj
cF9MYW8sCi0gIHVjcF9MYXRpbiwKLSAgdWNwX0xpbWJ1LAotICB1Y3BfTGluZWFyX0IsCi0gIHVj
cF9NYWxheWFsYW0sCi0gIHVjcF9Nb25nb2xpYW4sCi0gIHVjcF9NeWFubWFyLAotICB1Y3BfTmV3
X1RhaV9MdWUsCi0gIHVjcF9PZ2hhbSwKLSAgdWNwX09sZF9JdGFsaWMsCi0gIHVjcF9PbGRfUGVy
c2lhbiwKLSAgdWNwX09yaXlhLAotICB1Y3BfT3NtYW55YSwKLSAgdWNwX1J1bmljLAotICB1Y3Bf
U2hhdmlhbiwKLSAgdWNwX1NpbmhhbGEsCi0gIHVjcF9TeWxvdGlfTmFncmksCi0gIHVjcF9TeXJp
YWMsCi0gIHVjcF9UYWdhbG9nLAotICB1Y3BfVGFnYmFud2EsCi0gIHVjcF9UYWlfTGUsCi0gIHVj
cF9UYW1pbCwKLSAgdWNwX1RlbHVndSwKLSAgdWNwX1RoYWFuYSwKLSAgdWNwX1RoYWksCi0gIHVj
cF9UaWJldGFuLAotICB1Y3BfVGlmaW5hZ2gsCi0gIHVjcF9VZ2FyaXRpYywKLSAgdWNwX1lpCi19
OwotCi0jZW5kaWYKLQotLyogRW5kIG9mIHVjcC5oICovCisvKiBkZWxldGUgbWUgKi8KKyNlcnJv
cgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2NQQ1JFLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvY1BDUkUuY3BwCShyZXZpc2lvbiAyNzQx
MSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jUENSRS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDYgKzI0LDMgQEAKIAogdm9pZCogKCpwY3JlX21hbGxvYykoc2l6ZV90KSA9IGZh
c3RNYWxsb2M7CiB2b2lkICgqcGNyZV9mcmVlKSh2b2lkKikgPSBmYXN0RnJlZTsKLXZvaWQqICgq
cGNyZV9zdGFja19tYWxsb2MpKHNpemVfdCkgPSBmYXN0TWFsbG9jOwotdm9pZCAoKnBjcmVfc3Rh
Y2tfZnJlZSkodm9pZCopID0gZmFzdEZyZWU7Ci1pbnQgKCpwY3JlX2NhbGxvdXQpKHBjcmVfY2Fs
bG91dF9ibG9jayopID0gMDsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzQxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDctMTEtMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIC0gV2ViQ29yZSBwYXJ0IG9mIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODIxCisgICAgICAgICAgcmVtb3ZlIHVudXNlZCBQQ1JFIGZlYXR1cmVz
IGZvciBzcGVlZAorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6IChXZWJDb3JlOjpGcmFtZTo6
bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMu
bW06IChXZWJDb3JlOjpGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudCk6CisgICAgICAg
IFJlbW92ZSB1c2Ugb2YgIltbOmRpZ2l0Ol1dIiBzeW50YXguIFRoaXMgaGFzbid0IHdvcmtlZCBm
b3Igc29tZSB0aW1lLgorICAgICAgICBVc2UgIlxkIiBpbnN0ZWFkLgorCisgICAgICAgICogcGxh
dGZvcm0vUmVndWxhckV4cHJlc3Npb24uaDogUmVtb3ZlIHRoZSB1bnVzZWQgY2FwIGZ1bmN0aW9u
LiBXZSBjYW4KKyAgICAgICAgYWRkIGl0IGJhY2sgbGF0ZXIgaWYgd2UgZmluZCB3ZSBuZWVkIGl0
LgorICAgICAgICAqIHBsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ3VsYXJFeHByZXNzaW9uOjpQcml2YXRlOjpjb21waWxlKTogVXBkYXRlIGZvciBK
YXZhU2NyaXB0Q29yZQorICAgICAgICByZWd1bGFyIGV4cHJlc3Npb24gZW50cnkgcG9pbnQgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ3VsYXJFeHByZXNzaW9uOjpQcml2YXRlOjp+UHJp
dmF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVndWxhckV4cHJlc3Npb246Om1hdGNo
KTogUmVtb3ZlIHRoZSBjb2RlIHRvIHNldCBQQ1JFX05PVEJPTC4KKyAgICAgICAgVGhpcyBtZWFu
cyB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCBtZXRhY2hhcmFjdGVzciBsaWtlIF4gaW4g
dGhlbQorICAgICAgICB3b24ndCB3b3JrIGFueSBtb3JlIHdpdGggbm9uLXdob2xlLXN0cmluZyBz
ZWFyY2hlcywgYnV0IHdlIGRvbid0IHVzZQorICAgICAgICBhbnkgcmVndWxhciBleHByZXNzaW9u
cyBsaWtlIHRoYXQuCisKIDIwMDctMTEtMDMgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+CiAKICAgICAgICAgQnVpbGQgZml4ZXMgdG8gZ2V0IHd4IGltcGxzLiBidWls
ZGluZyBvbiB0cnVuay4KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMjc0MTEpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNyArNDkyLDcgQEAgU3RyaW5nIEZy
YW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KAogewogICAgIERlcHJlY2F0ZWRTdHJpbmcg
bmFtZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikuZGVwcmVjYXRlZFN0cmluZygp
OwogICAgIC8vIE1ha2UgbnVtYmVycyBhbmQgXydzIGluIGZpZWxkIG5hbWVzIGJlaGF2ZSBsaWtl
IHdvcmQgYm91bmRhcmllcywgZS5nLiwgImFkZHJlc3MyIgotICAgIG5hbWUucmVwbGFjZShSZWd1
bGFyRXhwcmVzc2lvbigiW1s6ZGlnaXQ6XV0iKSwgIiAiKTsKKyAgICBuYW1lLnJlcGxhY2UoUmVn
dWxhckV4cHJlc3Npb24oIlxcZCIpLCAiICIpOwogICAgIG5hbWUucmVwbGFjZSgnXycsICcgJyk7
CiAgICAgCiAgICAgUmVndWxhckV4cHJlc3Npb24qIHJlZ0V4cCA9IHJlZ0V4cEZvckxhYmVscyhs
YWJlbHMpOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAyNzQxMSkKKysrIFdlYkNv
cmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBA
QCBOU1N0cmluZyogRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lCiB7CiAgICAgRGVwcmVj
YXRlZFN0cmluZyBuYW1lID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKS5kZXByZWNh
dGVkU3RyaW5nKCk7CiAgICAgLy8gTWFrZSBudW1iZXJzIGFuZCBfJ3MgaW4gZmllbGQgbmFtZXMg
YmVoYXZlIGxpa2Ugd29yZCBib3VuZGFyaWVzLCBlLmcuLCAiYWRkcmVzczIiCi0gICAgbmFtZS5y
ZXBsYWNlKFJlZ3VsYXJFeHByZXNzaW9uKCJbWzpkaWdpdDpdXSIpLCAiICIpOworICAgIG5hbWUu
cmVwbGFjZShSZWd1bGFyRXhwcmVzc2lvbigiXFxkIiksICIgIik7CiAgICAgbmFtZS5yZXBsYWNl
KCdfJywgJyAnKTsKICAgICAKICAgICBSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwID0gcmVnRXhw
Rm9yTGFiZWxzKGxhYmVscyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1JlZ3VsYXJFeHByZXNz
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9u
LmNwcAkocmV2aXNpb24gMjc0MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1JlZ3VsYXJFeHByZXNz
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlKGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBnbG9iKTsKIAogICAgIERlcHJlY2F0
ZWRTdHJpbmcgcGF0dGVybjsKLSAgICBwY3JlICpyZWdleDsKKyAgICBKU1JlZ0V4cCogcmVnZXg7
CiAKICAgICBEZXByZWNhdGVkU3RyaW5nIGxhc3RNYXRjaFN0cmluZzsKICAgICBpbnQgbGFzdE1h
dGNoT2Zmc2V0c1ttYXhPZmZzZXRzXTsKQEAgLTEwMSwxNyArMTAxLDE1IEBAIHZvaWQgUmVndWxh
ckV4cHJlc3Npb246OlByaXZhdGU6OmNvbXBpbGUKICAgICAvLyB0byBhIGRpZmZlcmVudCB1bmRl
cmx5aW5nIGVuZ2luZSwgd2UgbWF5IG5lZWQgdG8gY2hhbmdlIGNsaWVudCBjb2RlIHRoYXQgcmVs
aWVzCiAgICAgLy8gb24gdGhlIHJlZ2V4IHN5bnRheCAoc2VlIEZyYW1lTWFjLm1tIGZvciBhIGNv
dXBsZSBleGFtcGxlcykuCiAgICAgCi0gICAgY29uc3QgY2hhciAqZXJyb3JNZXNzYWdlOwotICAg
IGludCBlcnJvck9mZnNldDsKLSAgICByZWdleCA9IHBjcmVfY29tcGlsZShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90ICo+KHAudW5pY29kZSgpKSwgcC5sZW5ndGgoKSwgY2FzZVNlbnNp
dGl2ZSA/IDAgOiBQQ1JFX0NBU0VMRVNTLCAmZXJyb3JNZXNzYWdlLCAmZXJyb3JPZmZzZXQsIE5V
TEwpOwotICAgIGlmIChyZWdleCA9PSBOVUxMKSB7CisgICAgY29uc3QgY2hhciogZXJyb3JNZXNz
YWdlOworICAgIHJlZ2V4ID0ganNSZWdFeHBDb21waWxlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDE2X3QgKj4ocC51bmljb2RlKCkpLCBwLmxlbmd0aCgpLCBjYXNlU2Vuc2l0aXZlID8gMCA6
IEpTX1JFR0VYUF9DQVNFTEVTUywgMCwgJmVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFyZWdleCkK
ICAgICAgICAgTE9HX0VSUk9SKCJSZWd1bGFyRXhwcmVzc2lvbjogcGNyZV9jb21waWxlIGZhaWxl
ZCB3aXRoICclcyciLCBlcnJvck1lc3NhZ2UpOwotICAgIH0KIH0KIAogUmVndWxhckV4cHJlc3Np
b246OlByaXZhdGU6On5Qcml2YXRlKCkKIHsKLSAgICBwY3JlX2ZyZWUocmVnZXgpOworICAgIGpz
UmVnRXhwRnJlZShyZWdleCk7CiB9CiAKIApAQCAtMTU2LDkgKzE1NCw5IEBAIGludCBSZWd1bGFy
RXhwcmVzc2lvbjo6bWF0Y2goY29uc3QgRGVwcmUKIHsKICAgICBkLT5sYXN0TWF0Y2hTdHJpbmcg
PSBzdHI7CiAgICAgLy8gRmlyc3QgMiBvZmZzZXRzIGFyZSBzdGFydCBhbmQgZW5kIG9mZnNldHM7
IDNyZCBlbnRyeSBpcyB1c2VkIGludGVybmFsbHkgYnkgcGNyZQotICAgIGQtPmxhc3RNYXRjaENv
dW50ID0gcGNyZV9leGVjKGQtPnJlZ2V4LCBOVUxMLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90ICo+KGQtPmxhc3RNYXRjaFN0cmluZy51bmljb2RlKCkpLCBkLT5sYXN0TWF0Y2hTdHJp
bmcubGVuZ3RoKCksIHN0YXJ0RnJvbSwgc3RhcnRGcm9tID09IDAgPyAwIDogUENSRV9OT1RCT0ws
IGQtPmxhc3RNYXRjaE9mZnNldHMsIG1heE9mZnNldHMpOworICAgIGQtPmxhc3RNYXRjaENvdW50
ID0ganNSZWdFeHBFeGVjdXRlKGQtPnJlZ2V4LCByZWludGVycHJldF9jYXN0PGNvbnN0IEpTUmVn
RXhwQ2hhcio+KGQtPmxhc3RNYXRjaFN0cmluZy51bmljb2RlKCkpLCBkLT5sYXN0TWF0Y2hTdHJp
bmcubGVuZ3RoKCksIHN0YXJ0RnJvbSwgZC0+bGFzdE1hdGNoT2Zmc2V0cywgbWF4T2Zmc2V0cyk7
CiAgICAgaWYgKGQtPmxhc3RNYXRjaENvdW50IDwgMCkgewotICAgICAgICBpZiAoZC0+bGFzdE1h
dGNoQ291bnQgIT0gUENSRV9FUlJPUl9OT01BVENIKQorICAgICAgICBpZiAoZC0+bGFzdE1hdGNo
Q291bnQgIT0gSlNfUkVHRVhQX0VSUk9SX05PTUFUQ0gpCiAgICAgICAgICAgICBMT0dfRVJST1Io
IlJlZ3VsYXJFeHByZXNzaW9uOiBwY3JlX2V4ZWMoKSBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLCBk
LT5sYXN0TWF0Y2hDb3VudCk7CiAgICAgICAgIGQtPmxhc3RNYXRjaFBvcyA9IC0xOwogICAgICAg
ICBkLT5sYXN0TWF0Y2hMZW5ndGggPSAtMTsKQEAgLTIxOSwxNiArMjE3LDQgQEAgaW50IFJlZ3Vs
YXJFeHByZXNzaW9uOjptYXRjaGVkTGVuZ3RoKCkgYwogICAgIHJldHVybiBkLT5sYXN0TWF0Y2hM
ZW5ndGg7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgUmVndWxhckV4cHJlc3Npb246OmNhcChpbnQg
bikgY29uc3QKLXsKLSAgICBjb25zdCBwY3JlX2NoYXIgKnN1YnN0cmluZyA9IE5VTEw7Ci0gICAg
aW50IHN1YnN0cmluZ0xlbmd0aCA9IHBjcmVfZ2V0X3N1YnN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQxNl90ICo+KGQtPmxhc3RNYXRjaFN0cmluZy51bmljb2RlKCkpLCBkLT5sYXN0
TWF0Y2hPZmZzZXRzLCBkLT5sYXN0TWF0Y2hDb3VudCwgbiwgJnN1YnN0cmluZyk7Ci0gICAgaWYg
KHN1YnN0cmluZ0xlbmd0aCA+IDApIHsKLSAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNhcHR1cmUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhciAqPihzdWJzdHJpbmcpLCBzdWJz
dHJpbmdMZW5ndGgpOwotICAgICAgIHBjcmVfZnJlZV9zdWJzdHJpbmcoc3Vic3RyaW5nKTsKLSAg
ICAgICByZXR1cm4gY2FwdHVyZTsKLSAgICB9Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmco
KTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9SZWd1bGFyRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUmVndWxhckV4cHJlc3Npb24uaAkocmV2aXNp
b24gMjc0MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDggKzQ5LDYgQEAgcHVibGljOgogICAgIGludCBwb3MoaW50IG4gPSAw
KTsKICAgICBpbnQgbWF0Y2hlZExlbmd0aCgpIGNvbnN0OwogICAgIAotICAgIERlcHJlY2F0ZWRT
dHJpbmcgY2FwKGludCBuID0gMCkgY29uc3Q7Ci0gICAgCiBwcml2YXRlOgogICAgIGNsYXNzIFBy
aXZhdGU7ICAgIAogICAgIFJlZlB0cjxQcml2YXRlPiBkOwo=
</data>
<flag name="review"
          id="7237"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>