<?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>16438</bug_id>
          
          <creation_ts>2007-12-14 10:45:59 -0800</creation_ts>
          <short_desc>another round of PCRE clean-up</short_desc>
          <delta_ts>2007-12-16 20:20:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</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>P3</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>64176</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-14 10:45:59 -0800</bug_when>
    <thetext>While looking into a regression, which I&apos;ll fix soon, I did another round of PCRE code tweaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64190</commentid>
    <comment_count>1</comment_count>
      <attachid>17896</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-14 11:08:11 -0800</bug_when>
    <thetext>Created attachment 17896
patch (all regression tests pass)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64344</commentid>
    <comment_count>2</comment_count>
      <attachid>17921</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-15 20:01:45 -0800</bug_when>
    <thetext>Created attachment 17921
patch (all regression tests pass)

Earlier patch had an extra ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64345</commentid>
    <comment_count>3</comment_count>
      <attachid>17922</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-15 20:02:11 -0800</bug_when>
    <thetext>Created attachment 17922
patch with &quot;ignore whitespace differences&quot; on -- may be easier to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64450</commentid>
    <comment_count>4</comment_count>
      <attachid>17947</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-16 17:36:06 -0800</bug_when>
    <thetext>Created attachment 17947
patch rebased to r28788</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64455</commentid>
    <comment_count>5</comment_count>
      <attachid>17947</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-16 18:04:38 -0800</bug_when>
    <thetext>Comment on attachment 17947
patch rebased to r28788

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64470</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-16 20:20:38 -0800</bug_when>
    <thetext>Committed revision 28793.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17896</attachid>
            <date>2007-12-14 11:08:11 -0800</date>
            <delta_ts>2007-12-15 20:01:45 -0800</delta_ts>
            <desc>patch (all regression tests pass)</desc>
            <filename>PCREPatch.txt</filename>
            <type>text/plain</type>
            <size>172501</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA2IEBACisyMDA3LTEyLTE0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDM4CisgICAgICAgIC0gcmVtb3ZlZCBzb21lIG1vcmUgdW51c2VkIGNvZGUKKyAgICAgICAg
LSBjaGFuZ2VkIHF1aXRlIGEgZmV3IG1vcmUgbmFtZXMgdG8gV2ViS2l0LXN0eWxlCisgICAgICAg
IC0gbW92ZWQgbW9yZSB0aGluZ3Mgb3V0IG9mIHBjcmVfaW50ZXJuYWwuaAorICAgICAgICAtIGNo
YW5nZWQgc29tZSBpbmRlbnRhdGlvbiB0byBXZWJLaXQtc3R5bGUKKyAgICAgICAgLSBpbXByb3Zl
ZCBkZXNpZ24gb2YgdGhlIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworICAgICAg
ICAgIDItYnl0ZSB2YWx1ZXMgZnJvbSB0aGUgb3Bjb2RlIHN0cmVhbSAoaW4gcGNyZV9pbnRlcm5h
bC5oKQorCisgICAgICAgICogcGNyZS9kZnRhYmxlcy5jcHA6CisgICAgICAgIChtYWluKTogQWRk
ZWQgdGhlIGtqcyBwcmVmaXggYSBub3JtYWwgd2F5IGluIGxpZXUgb2YgdXNpbmcgbWFjcm9zLgor
CisgICAgICAgICogcGNyZS9wY3JlX2NvbXBpbGUuY3BwOiBNb3ZlZCBzb21lIGRlZmluaXRpb25z
IGhlcmUgZnJvbSBwY3JlX2ludGVybmFsLmguCisgICAgICAgIChlcnJvclRleHQpOiBOYW1lIGNo
YW5nZXMsIGZld2VyIHR5cGVkZWZzLgorICAgICAgICAoY2hlY2tFc2NhcGUpOiBEaXR0by4gQ2hh
bmdlZCB1cHBlcmNhc2UgY29udmVyc2lvbiB0byB1c2UgdG9BU0NJSVVwcGVyLgorICAgICAgICAo
aXNDb3VudGVkUmVwZWF0KTogTmFtZSBjaGFuZ2UuCisgICAgICAgIChyZWFkUmVwZWF0Q291bnRz
KTogTmFtZSBjaGFuZ2UuCisgICAgICAgIChmaXJzdFNpZ25pZmljYW50T3Bjb2RlKTogR290IHJp
ZCBvZiB0aGUgdXNlIG9mIE9QX2xlbmd0aHMsIHdoaWNoIGlzCisgICAgICAgIHZlcnkgbGlnaHRs
eSB1c2VkIGhlcmUuIEhhcmQtY29kZWQgdGhlIGxlbmd0aCBvZiBPUF9CUkFOVU1CRVIuCisgICAg
ICAgIChmaXJzdFNpZ25pZmljYW50T3Bjb2RlU2tpcHBpbmdBc3NlcnRpb25zKTogRGl0dG8uIEFs
c28gY2hhbmdlZCB0bworICAgICAgICB1c2UgdGhlIGFkdmFuY2VUb0VuZE9mQnJhY2tldCBmdW5j
dGlvbi4KKyAgICAgICAgKGdldE90aGVyY2FzZVJhbmdlKTogTmFtZSBjaGFuZ2VzLgorICAgICAg
ICAoZW5jb2RlVVRGOCk6IERpdHRvLgorICAgICAgICAoY29tcGlsZUJyYW5jaCk6IE5hbWUgY2hh
bmdlcy4gUmVtb3ZlZCB1bnVzZWQgYWZ0ZXJfbWFudWFsX2NhbGxvdXQgYW5kCisgICAgICAgIHRo
ZSBjb2RlIHRvIGhhbmRsZSBpdC4gUmVtb3ZlZCBjb2RlIHRvIGhhbmRsZSBPUF9PTkNFIHNpbmNl
IHdlIG5ldmVyCisgICAgICAgIGVtaXQgdGhpcyBvcGNvZGUuIENoYW5nZWQgdG8gdXNlIGFkdmFu
Y2VUb0VuZE9mQnJhY2tldCBpbiBtb3JlIHBsYWNlcy4KKyAgICAgICAgKGNvbXBpbGVCcmFja2V0
KTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAoYnJhbmNoSXNBbmNob3JlZCk6IFJlbW92ZWQgY29k
ZSB0byBoYW5kbGUgT1BfT05DRSBzaW5jZSB3ZSBuZXZlciBlbWl0CisgICAgICAgIHRoaXMgb3Bj
b2RlLgorICAgICAgICAoYnJhY2tldElzQW5jaG9yZWQpOiBOYW1lIGNoYW5nZXMuCisgICAgICAg
IChicmFuY2hOZWVkc0xpbmVTdGFydCk6IE1vcmUgZm8gdGhlIHNhbWUuCisgICAgICAgIChicmFj
a2V0TmVlZHNMaW5lU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKGJyYW5jaEZpbmRGaXJzdEFzc2Vy
dGVkQ2hhcmFjdGVyKTogUmVtb3ZlZCBPUF9PTkNFIGNvZGUuCisgICAgICAgIChicmFja2V0Rmlu
ZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIpOiBNb3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAoY2Fs
Y3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3RoQW5kRmxhZ3MpOiBEaXR0by4KKyAgICAgICAgKHJl
dHVybkVycm9yKTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAoanNSZWdFeHBDb21waWxlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6IE1vdmVkIHNvbWUgZGVmaW5pdGlv
bnMgaGVyZSBmcm9tIHBjcmVfaW50ZXJuYWwuaC4KKyAgICAgICAgKG1hdGNoUmVmKTogVXBkYXRl
ZCBuYW1lcy4KKyAgICAgICAgSW1wcm92ZWQgbWFjcm9zIHRvIHVzZSB0aGUgZG8geyB9IHdoaWxl
KDApIGlkaW9tIHNvIHRoZXkgZXhwYW5kIHRvIHNpbmdsZQorICAgICAgICBzdGF0ZW1lbnRzIHJh
dGhlciB0aGFuIHRvIGJsb2NrcyBvciBtdWx0aXBsZSBzdGF0ZW1lbnRzLiBBbmQgcmVmZWFjdG9y
ZWQKKyAgICAgICAgdGhlIHJlY3Vyc2l2ZSBtYXRjaCBtYWNyb3MuCisgICAgICAgIChNYXRjaFN0
YWNrOjpwdXNoTmV3RnJhbWUpOiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChnZXRVVEY4Q2hhckFu
ZEluY3JlbWVudExlbmd0aCk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAgKG1hdGNoKTogTmFtZSBj
aGFuZ2VzLiBSZW1vdmVkIHRoZSBPTkNFIG9wY29kZS4KKyAgICAgICAgKGpzUmVnRXhwRXhlY3V0
ZSk6IE5hbWUgY2hhbmdlcy4KKworICAgICAgICAqIHBjcmUvcGNyZV9pbnRlcm5hbC5oOiBSZW1v
dmVkIHF1aXRlIGEgZmV3IHVubmVlZGVkIGluY2x1ZGVzLiBSZXdyb3RlCisgICAgICAgIHF1aXRl
IGEgZmV3IGNvbW1lbnRzLiBSZW1vdmVkIHRoZSBtYWNyb3MgdGhhdCBhZGQga2pzIHByZWZpeGVz
IHRvIHRoZQorICAgICAgICBmdW5jdGlvbnMgd2l0aCBleHRlcm5hbCBsaW5rYWdlOyBpbnN0ZWFk
IHJlbmFtZWQgdGhlIGZ1bmN0aW9ucy4gUmVtb3ZlZAorICAgICAgICB0aGUgdW5uZWVkZWQgdHlw
ZWRlZnMgcGNyZV91aW50MTYsIHBjcmVfdWludDMyLCBhbmQgdXNjaGFyLiBSZW1vdmVkIHRoZQor
ICAgICAgICBkZWFkIGFuZCBub3QtYWxsLXdvcmtpbmcgY29kZSBmb3IgTElOS19TSVpFIHZhbHVl
cyBvdGhlciB0aGFuIDIsIGFsdGhvdWdoCisgICAgICAgIHdlIGFpbSB0byBrZWVwIHRoZSBhYnN0
cmFjdGlvbiB3b3JraW5nLiBSZW1vdmVkIHRoZSBPUF9MRU5HVEhTIG1hY3JvLgorICAgICAgICAo
cHV0MkJ5dGVWYWx1ZSk6IFJlcGxhY2VzIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldC4KKyAg
ICAgICAgKGdldDJCeXRlVmFsdWUpOiBSZXBsYWNlcyBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXQuCisgICAgICAgIChwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZSk6IFJlcGxhY2VzIHB1dDJCeXRl
T3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UuCisgICAgICAgIChwdXRMaW5rVmFsdWVBbGxv
d1plcm8pOiBSZXBsYWNlcyBwdXRPcGNvZGVWYWx1ZUF0T2Zmc2V0OyBkb2Vzbid0IGRvIHRoZQor
ICAgICAgICBhZGRpdGlvbiwgc2luY2UgYSBjb21tYSBpcyByZWFsbHkgbm8gYmV0dGVyIHRoYW4g
YSBwbHVzIHNpZ24uIEFkZGVkIGFuCisgICAgICAgIGFzc2VydGlvbiB0byBjYXRjaCBvdXQgb2Yg
cmFuZ2UgdmFsdWVzIGFuZCBjaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSB0bworICAgICAgICBp
bnQgcmF0aGVyIHRoYW4gdW5zaWduZWQuCisgICAgICAgIChnZXRMaW5rVmFsdWVBbGxvd1plcm8p
OiBSZXBsYWNlcyBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0LgorICAgICAgICAocHV0TGlua1ZhbHVl
KTogTmV3IGZ1bmN0aW9uIHRoYXQgbW9zdCBmb3JtZXIgY2FsbGVycyBvZiB0aGUKKyAgICAgICAg
cHV0T3Bjb2RlVmFsdWVBdE9mZnNldCBmdW5jdGlvbiBjYW4gdXNlOyBhc3NlcnRzIHRoZSB2YWx1
ZSB0aGF0IGlzCisgICAgICAgIGJlaW5nIHN0b3JlZCBpcyBub24temVybyBhbmQgdGhlbiBjYWxs
cyBwdXRMaW5rVmFsdWVBbGxvd1plcm8uCisgICAgICAgIChnZXRMaW5rVmFsdWUpOiBEaXR0by4K
KyAgICAgICAgKHB1dExpbmtWYWx1ZUFuZEFkdmFuY2UpOiBSZXBsYWNlcyBwdXRPcGNvZGVWYWx1
ZUF0T2Zmc2V0QW5kQWR2YW5jZS4gTm8KKyAgICAgICAgY2FsbGVyIHdhcyB1c2luZyBhbiBvZmZz
ZXQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBhZHZhbmNpbmcgYmVoYXZpb3IuCisgICAg
ICAgIChwdXRMaW5rVmFsdWVBbGxvd1plcm9BbmRBZHZhbmNlKTogRGl0dG8uCisgICAgICAgIChp
c0JyYWNrZXRPcGNvZGUpOiBBZGRlZC4gRm9yIHVzZSBpbiBhbiBhc3NlcnRpb24uCisgICAgICAg
IChhZHZhbmNlVG9FbmRPZkJyYWNrZXQpOiBSZW5hbWVkIGZyb20gbW92ZU9wY29kZVB0clBhc3RB
bnlBbHRlcm5hdGVCcmFuY2hlcywKKyAgICAgICAgYW5kIHJlbW92ZWQgY29tbWVudHMgYWJvdXQg
aG93IGl0J3Mgbm90IHdlbGwgZGVzaWduZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMKKyAgICAgICAg
YSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBicmFja2V0IGFuZCBhZHZhbmNlcyB0byB0
aGUgZW5kIG9mIHRoZQorICAgICAgICBicmFja2V0LgorCisgICAgICAgICogcGNyZS9wY3JlX3Rh
Ymxlcy5jcHA6IFVwZGF0ZWQgbmFtZXMuCisgICAgICAgICogcGNyZS9wY3JlX3VjcF9zZWFyY2hm
dW5jcy5jcHA6CisgICAgICAgIChranNfcGNyZV91Y3Bfb3RoZXJjYXNlKTogRGl0dG8uCisgICAg
ICAgICogcGNyZS9wY3JlX3hjbGFzcy5jcHA6CisgICAgICAgIChnZXRVVEY4Q2hhckFuZEFkdmFu
Y2VQb2ludGVyKTogRGl0dG8uCisgICAgICAgIChranNfcGNyZV94Y2xhc3MpOiBEaXR0by4KKyAg
ICAgICAgKiBwY3JlL3VjcGludGVybmFsLmg6IERpdHRvLgorCisgICAgICAgICogd3RmL0FTQ0lJ
Q1R5cGUuaDoKKyAgICAgICAgKFdURjo6aXNBU0NJSUFscGhhKTogQWRkZWQgYW4gaW50IG92ZXJs
b2FkLCBsaWtlIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZlIGZvcgorICAgICAgICBpc0FTQ0lJRGln
aXQuCisgICAgICAgIChXVEY6OmlzQVNDSUlBbHBoYW51bWVyaWMpOiBEaXR0by4KKyAgICAgICAg
KFdURjo6aXNBU0NJSUhleERpZ2l0KTogRGl0dG8uCisgICAgICAgIChXVEY6OmlzQVNDSUlMb3dl
cik6IERpdHRvLgorICAgICAgICAoV1RGOjppc0FTQ0lJU3BhY2UpOiBEaXR0by4KKyAgICAgICAg
KFdURjo6dG9BU0NJSUxvd2VyKTogRGl0dG8uCisgICAgICAgIChXVEY6OnRvQVNDSUlVcHBlcik6
IERpdHRvLgorCisyMDA3LTEyLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlbmFtZSBt
YW55IGZ1bmN0aW9ucyB0byBtYXRjaCB1c3VhbCBXZWJLaXQgbmFtaW5nIHN0eWxlIGFuZCBmb3Ig
Y2xhcml0eQorICAgICAgICAtIGFkZCBzb21lIGFzc2VydGlvbnMKKwogMjAwNy0xMi0xMyAgU3Rl
dmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgc291cmNl
IGZpbGUgZ2VuZXJhdGlvbiBpbnRvIGl0cyBvd24gdmNwcm9qIHRvIGZpeCBidWlsZCBkZXBlbmRl
bmNpZXMuCkBAIC05NjQsNyArMTA2Nyw5IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
LgogCi0gICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3ViamVjdFB0ciBhZGp1c3RtZW50cyB1
c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEgc2luZ2xlIHRyYWlsaW5nIHN1cnJv
Z2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9zc2libHkgZml4IFBDUkUgYnVncyBp
bnZvbHZpbmcgY2hhciBjbGFzc2VzIGFuZCBnYXJibGVkIFVURjE2IHN0cmluZ3MuCisgICAgICAg
IENlbnRyYWxpemUgY29kZSBmb3Igc3ViamVjdFB0ciBhZGp1c3RtZW50cyB1c2luZyBpbmxpbmVz
LCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEgc2luZ2xlCisgICAgICAgIHRyYWlsaW5nIHN1cnJvZ2F0
ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9zc2libHkgZml4IFBDUkUgYnVncyBpbnZv
bHZpbmcgY2hhcgorICAgICAgICBjbGFzc2VzIGFuZCBnYXJibGVkIFVURjE2IHN0cmluZ3MuCiAK
ICAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6CiAgICAgICAgIChtYXRjaCk6CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkocmV2aXNpb24gMjg3MTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9wY3JlL2RmdGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBmcHJp
bnRmKGYsCiAgICJUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmF1bHQgdGFibGVzIGZvciBjaGFy
YWN0ZXJzIHdpdGggY29kZXMgbGVzcyB0aGFuXG4iCiAgICIxMjggKEFTQ0lJIGNoYXJhY3RlcnMp
LiBUaGVzZSB0YWJsZXMgYXJlIHVzZWQgd2hlbiBubyBleHRlcm5hbCB0YWJsZXMgYXJlXG4iCiAg
ICJwYXNzZWQgdG8gUENSRS4gKi9cblxuIgotICAiY29uc3QgdW5zaWduZWQgY2hhciBfcGNyZV9k
ZWZhdWx0X3RhYmxlc1slZF0gPSB7XG5cbiIKKyAgImNvbnN0IHVuc2lnbmVkIGNoYXIga2pzX3Bj
cmVfZGVmYXVsdF90YWJsZXNbJWRdID0ge1xuXG4iCiAgICIvKiBUaGlzIHRhYmxlIGlzIGEgbG93
ZXIgY2FzaW5nIHRhYmxlLiAqL1xuXG4iLCB0YWJsZXNfbGVuZ3RoKTsKIAogaWYgKGxjY19vZmZz
ZXQgIT0gMCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jcHAJKHJldmlzaW9u
IDI4NzExKQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCwxMSBAQCBzdXBwb3J0aW5nIGludGVybmFsIGZ1bmN0aW9ucyB0
aGF0IGFyZSBuCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKKy8qIE5lZ2F0aXZlIHZhbHVlcyBm
b3IgdGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2YXJpYWJsZXMgKi8KKworI2RlZmluZSBSRVFf
VU5TRVQgKC0yKQorI2RlZmluZSBSRVFfTk9ORSAgKC0xKQorCiAvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgIENvZGUgcGFyYW1ldGVycyBh
bmQgc3RhdGljIHRhYmxlcyAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCkBAIC04OCwxNyArOTMsMTIgQEAgZW51bSBFcnJvckNvZGUg
ewogICAgIEVSUjEwLCBFUlIxMSwgRVJSMTIsIEVSUjEzLCBFUlIxNCwgRVJSMTUsIEVSUjE2LCBF
UlIxNwogfTsKIAotLyogVGFibGUgb2Ygc2l6ZXMgZm9yIHRoZSBmaXhlZC1sZW5ndGggb3Bjb2Rl
cy4gSXQncyBkZWZpbmVkIGluIGEgbWFjcm8gc28gdGhhdAotdGhlIGRlZmluaXRpb24gaXMgbmV4
dCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3Bjb2RlcyBpbiBwY3JlX2ludGVybmFsLmguICov
Ci0KLXN0YXRpYyBjb25zdCB1c2NoYXIgT1BfbGVuZ3Roc1tdID0geyBPUF9MRU5HVEhTIH07Ci0K
IC8qIFRoZSB0ZXh0cyBvZiBjb21waWxlLXRpbWUgZXJyb3IgbWVzc2FnZXMuIFRoZXNlIGFyZSAi
Y2hhciAqIiBiZWNhdXNlIHRoZXkKIGFyZSBwYXNzZWQgdG8gdGhlIG91dHNpZGUgd29ybGQuICov
CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvcl90ZXh0KEVycm9yQ29kZSBjb2RlKQorc3RhdGlj
IGNvbnN0IGNoYXIqIGVycm9yVGV4dChFcnJvckNvZGUgY29kZSkKIHsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciBlcnJvcl90ZXh0c1tdID0KKyAgICBzdGF0aWMgY29uc3QgY2hhciBlcnJvclRleHRz
W10gPQogICAgICAgLyogMSAqLwogICAgICAgIlxcIGF0IGVuZCBvZiBwYXR0ZXJuXDAiCiAgICAg
ICAiXFxjIGF0IGVuZCBvZiBwYXR0ZXJuXDAiCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGNv
bnN0IGNoYXIqIGVycm9yX3RleHQoRXJyb3JDb2RlIAogICAgIDsKIAogICAgIGludCBpID0gY29k
ZTsKLSAgICBjb25zdCBjaGFyKiB0ZXh0ID0gZXJyb3JfdGV4dHM7CisgICAgY29uc3QgY2hhciog
dGV4dCA9IGVycm9yVGV4dHM7CiAgICAgd2hpbGUgKGkgPiAxKQogICAgICAgICBpIC09ICEqdGV4
dCsrOwogICAgIHJldHVybiB0ZXh0OwpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0cnVjdCBDb21waWxl
RGF0YSB7CiAgICAgICAgIHJlcV92YXJ5b3B0ID0gMDsKICAgICAgICAgbmVlZE91dGVyQnJhY2tl
dCA9IGZhbHNlOwogICAgIH0KLSAgICBjb25zdCB1c2NoYXIqIHN0YXJ0X2NvZGU7ICAgLyogVGhl
IHN0YXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlICovCisgICAgY29uc3QgdW5zaWduZWQgY2hhciog
c3RhcnRfY29kZTsgICAvKiBUaGUgc3RhcnQgb2YgdGhlIGNvbXBpbGVkIGNvZGUgKi8KICAgICBj
b25zdCBVQ2hhciogc3RhcnRfcGF0dGVybjsgLyogVGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuICov
CiAgICAgaW50IHRvcF9iYWNrcmVmOyAgICAgICAgICAgIC8qIE1heGltdW0gYmFjayByZWZlcmVu
Y2UgKi8KICAgICB1bnNpZ25lZCBiYWNrcmVmTWFwOyAgICAgICAvKiBCaXRtYXAgb2YgbG93IGJh
Y2sgcmVmcyAqLwpAQCAtMTUxLDEwICsxNTEsMTAgQEAgc3RydWN0IENvbXBpbGVEYXRhIHsKIAog
LyogRGVmaW5pdGlvbnMgdG8gYWxsb3cgbXV0dWFsIHJlY3Vyc2lvbiAqLwogCi1zdGF0aWMgYm9v
bCBjb21waWxlQnJhY2tldChpbnQsIGludCosIHVzY2hhcioqLCBjb25zdCBVQ2hhcioqLCBjb25z
dCBVQ2hhciosIEVycm9yQ29kZSosIGludCwgaW50KiwgaW50KiwgQ29tcGlsZURhdGEmKTsKLXN0
YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVzY2hhciogY29kZSk7Ci1zdGF0aWMg
Ym9vbCBicmFja2V0TmVlZHNMaW5lU3RhcnQoY29uc3QgdXNjaGFyKiBjb2RlLCB1bnNpZ25lZCBj
YXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKLXN0YXRpYyBpbnQgYnJhY2tldEZpbmRG
aXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVzY2hhciogY29kZSwgYm9vbCBpbmFzc2VydCk7
CitzdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGludCosIHVuc2lnbmVkIGNoYXIqKiwg
Y29uc3QgVUNoYXIqKiwgY29uc3QgVUNoYXIqLCBFcnJvckNvZGUqLCBpbnQsIGludCosIGludCos
IENvbXBpbGVEYXRhJik7CitzdGF0aWMgYm9vbCBicmFja2V0SXNBbmNob3JlZChjb25zdCB1bnNp
Z25lZCBjaGFyKiBjb2RlKTsKK3N0YXRpYyBib29sIGJyYWNrZXROZWVkc0xpbmVTdGFydChjb25z
dCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNr
cmVmTWFwKTsKK3N0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5hc3NlcnQpOwogCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgIEhhbmRs
ZSBlc2NhcGVzICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTE3OCw3ICsxNzgsNyBAQCBSZXR1
cm5zOiAgICAgICAgIHplcm8gb3IgcG9zaXRpdmUgPT4gYSBkCiAgICAgICAgICAgICAgICAgIG9u
IGVycm9yLCBlcnJvcnB0ciBpcyBzZXQKICovCiAKLXN0YXRpYyBpbnQgY2hlY2tfZXNjYXBlKGNv
bnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hhciogcGF0dGVybkVuZCwgRXJyb3JDb2RlKiBl
cnJvcmNvZGVwdHIsIGludCBicmFjb3VudCwgYm9vbCBpc2NsYXNzKQorc3RhdGljIGludCBjaGVj
a0VzY2FwZShjb25zdCBVQ2hhcioqIHB0cnB0ciwgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQsIEVy
cm9yQ29kZSogZXJyb3Jjb2RlcHRyLCBpbnQgYnJhY291bnQsIGJvb2wgaXNjbGFzcykKIHsKICAg
ICBjb25zdCBVQ2hhciogcHRyID0gKnB0cnB0ciArIDE7CiAKQEAgLTIwMywxMTQgKzIwMywxMTAg
QEAgc3RhdGljIGludCBjaGVja19lc2NhcGUoY29uc3QgVUNoYXIqKiBwdAogICAgIAogICAgIGVs
c2UgewogICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAnMSc6Ci0gICAgICAgIGNh
c2UgJzInOgotICAgICAgICBjYXNlICczJzoKLSAgICAgICAgY2FzZSAnNCc6Ci0gICAgICAgIGNh
c2UgJzUnOgotICAgICAgICBjYXNlICc2JzoKLSAgICAgICAgY2FzZSAnNyc6Ci0gICAgICAgIGNh
c2UgJzgnOgotICAgICAgICBjYXNlICc5JzoKLSAgICAgICAgICAgIC8qIEVzY2FwZSBzZXF1ZW5j
ZXMgc3RhcnRpbmcgd2l0aCBhIG5vbi16ZXJvIGRpZ2l0IGFyZSBiYWNrcmVmZXJlbmNlcywKLSAg
ICAgICAgICAgICB1bmxlc3MgdGhlcmUgYXJlIGluc3VmZmljaWVudCBicmFja2V0cywgaW4gd2hp
Y2ggY2FzZSB0aGV5IGFyZSBvY3RhbAotICAgICAgICAgICAgIGVzY2FwZSBzZXF1ZW5jZXMuIFRo
b3NlIHNlcXVlbmNlcyBlbmQgb24gdGhlIGZpcnN0IG5vbi1vY3RhbCBjaGFyYWN0ZXIKLSAgICAg
ICAgICAgICBvciB3aGVuIHdlIG92ZXJmbG93IDAtMjU1LCB3aGljaGV2ZXIgY29tZXMgZmlyc3Qu
ICovCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNjbGFzcykgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBvbGRwdHIgPSBwdHI7Ci0gICAgICAgICAgICAgICAgYyAtPSAn
MCc7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChwdHIgKyAxIDwgcGF0dGVybkVuZCkgJiYgaXNB
U0NJSURpZ2l0KHB0clsxXSkgJiYgYyA8PSBicmFjb3VudCkKLSAgICAgICAgICAgICAgICAgICAg
YyA9IGMgKiAxMCArICooKytwdHIpIC0gJzAnOwotICAgICAgICAgICAgICAgIGlmIChjIDw9IGJy
YWNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSAtKEVTQ19SRUYgKyBjKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgICAg
IGNhc2UgJzInOgorICAgICAgICAgICAgY2FzZSAnMyc6CisgICAgICAgICAgICBjYXNlICc0JzoK
KyAgICAgICAgICAgIGNhc2UgJzUnOgorICAgICAgICAgICAgY2FzZSAnNic6CisgICAgICAgICAg
ICBjYXNlICc3JzoKKyAgICAgICAgICAgIGNhc2UgJzgnOgorICAgICAgICAgICAgY2FzZSAnOSc6
CisgICAgICAgICAgICAgICAgLyogRXNjYXBlIHNlcXVlbmNlcyBzdGFydGluZyB3aXRoIGEgbm9u
LXplcm8gZGlnaXQgYXJlIGJhY2tyZWZlcmVuY2VzLAorICAgICAgICAgICAgICAgICB1bmxlc3Mg
dGhlcmUgYXJlIGluc3VmZmljaWVudCBicmFja2V0cywgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBv
Y3RhbAorICAgICAgICAgICAgICAgICBlc2NhcGUgc2VxdWVuY2VzLiBUaG9zZSBzZXF1ZW5jZXMg
ZW5kIG9uIHRoZSBmaXJzdCBub24tb2N0YWwgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgIG9y
IHdoZW4gd2Ugb3ZlcmZsb3cgMC0yNTUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gKi8KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWlzY2xhc3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIG9sZHB0ciA9IHB0cjsKKyAgICAgICAgICAgICAgICAgICAg
YyAtPSAnMCc7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocHRyICsgMSA8IHBhdHRlcm5F
bmQpICYmIGlzQVNDSUlEaWdpdChwdHJbMV0pICYmIGMgPD0gYnJhY291bnQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjID0gYyAqIDEwICsgKigrK3B0cikgLSAnMCc7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjIDw9IGJyYWNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjID0g
LShFU0NfUkVGICsgYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwdHIgPSBvbGRwdHI7ICAgICAgLyog
UHV0IHRoZSBwb2ludGVyIGJhY2sgYW5kIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwdHIgPSBvbGRwdHI7ICAgICAgLyogUHV0IHRoZSBwb2ludGVy
IGJhY2sgYW5kIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvKiBIYW5kbGUgYW4gb2N0YWwgbnVtYmVyIGZvbGxvd2luZyBcLiBJZiB0aGUg
Zmlyc3QgZGlnaXQgaXMgOCBvciA5LAotICAgICAgICAgICAgIHRoaXMgaXMgbm90IG9jdGFsLiAq
LwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoKGMgPSAqcHRyKSA+PSAnOCcpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvKiBIYW5kbGUgYW4gb2N0YWwgbnVtYmVyIGZvbGxvd2luZyBcLiBJZiB0aGUg
Zmlyc3QgZGlnaXQgaXMgOCBvciA5LAorICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCBvY3Rh
bC4gKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKGMgPSAqcHRyKSA+
PSAnOCcpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAvKiBcMCBh
bHdheXMgc3RhcnRzIGFuIG9jdGFsIG51bWJlciwgYnV0IHdlIG1heSBkcm9wIHRocm91Z2ggdG8g
aGVyZSB3aXRoIGEKICAgICAgICAgICAgICBsYXJnZXIgZmlyc3Qgb2N0YWwgZGlnaXQuICovCi0g
ICAgICAgIAotICAgICAgICBjYXNlICcwJzogewotICAgICAgICAgICAgYyAtPSAnMCc7Ci0gICAg
ICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMjsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHB0ciArIGkgPj0gcGF0dGVybkVuZCB8fCBwdHJbaV0gPCAnMCcg
fHwgcHRyW2ldID4gJzcnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBpbnQgY2MgPSBjICogOCArIHB0cltpXSAtICcwJzsKLSAgICAgICAgICAgICAgICBpZiAo
Y2MgPiAyNTUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGMg
PSBjYzsKKworICAgICAgICAgICAgY2FzZSAnMCc6IHsKKyAgICAgICAgICAgICAgICBjIC09ICcw
JzsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBp
IDw9IDI7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHRyICsgaSA+PSBwYXR0ZXJu
RW5kIHx8IHB0cltpXSA8ICcwJyB8fCBwdHJbaV0gPiAnNycpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNjID0gYyAqIDggKyBwdHJbaV0g
LSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYyA+IDI1NSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjID0gY2M7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3gnOiB7Ci0gICAgICAgICAgICBj
ID0gMDsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAy
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocHRyICsgaSA+PSBwYXR0ZXJuRW5kIHx8ICFp
c0FTQ0lJSGV4RGlnaXQocHRyW2ldKSkgewotICAgICAgICAgICAgICAgICAgICBjID0gJ3gnOwot
ICAgICAgICAgICAgICAgICAgICBpID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgJ3gnOiB7CisgICAgICAgICAgICAgICAgYyA9IDA7CisgICAgICAg
ICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAyOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciArIGkgPj0gcGF0dGVybkVuZCB8fCAhaXNB
U0NJSUhleERpZ2l0KHB0cltpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAneCc7
CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBj
YyA9IHB0cltpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNjID49ICdhJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHVwcGVy
IGNhc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYyA9IGMgKiAxNiArIGNjIC0gKChjYyA8ICdB
JykgPyAnMCcgOiAoJ0EnIC0gMTApKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaW50IGNjID0gcHRyW2ldOwotICAgICAgICAgICAgICAgIGlmIChjYyA+PSAnYScpCi0gICAg
ICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHVwcGVy
IGNhc2UgKi8KLSAgICAgICAgICAgICAgICBjID0gYyAqIDE2ICsgY2MgLSAoKGNjIDwgJ0EnKSA/
ICcwJyA6ICgnQScgLSAxMCkpOworICAgICAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBpIC0g
MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3UnOiB7Ci0g
ICAgICAgICAgICBjID0gMDsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChp
ID0gMTsgaSA8PSA0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocHRyICsgaSA+PSBwYXR0
ZXJuRW5kIHx8ICFpc0FTQ0lJSGV4RGlnaXQocHRyW2ldKSkgewotICAgICAgICAgICAgICAgICAg
ICBjID0gJ3UnOwotICAgICAgICAgICAgICAgICAgICBpID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3UnOiB7CisgICAgICAgICAgICAgICAgYyA9
IDA7CisgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMTsg
aSA8PSA0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciArIGkgPj0gcGF0dGVy
bkVuZCB8fCAhaXNBU0NJSUhleERpZ2l0KHB0cltpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGMgPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGludCBjYyA9IHB0cltpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNjID49ICdh
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAgICAvKiBDb252
ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYyA9IGMgKiAxNiArIGNj
IC0gKChjYyA8ICdBJykgPyAnMCcgOiAoJ0EnIC0gMTApKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaW50IGNjID0gcHRyW2ldOwotICAgICAgICAgICAgICAgIGlmIChjYyA+
PSAnYScpCi0gICAgICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAgICAvKiBDb252
ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBjID0gYyAqIDE2ICsgY2MgLSAo
KGNjIDwgJ0EnKSA/ICcwJyA6ICgnQScgLSAxMCkpOworICAgICAgICAgICAgICAgIHB0ciArPSBp
IC0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHB0ciArPSBpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvKiBPdGhlciBzcGVjaWFsIGVzY2FwZXMgbm90IHN0YXJ0aW5nIHdpdGggYSBkaWdpdCBh
cmUgc3RyYWlnaHRmb3J3YXJkICovCi0gICAgICAgIH0KLSAgICAgICAgY2FzZSAnYyc6Ci0gICAg
ICAgICAgICBpZiAoKytwdHIgPT0gcGF0dGVybkVuZCkgewotICAgICAgICAgICAgICAgICplcnJv
cmNvZGVwdHIgPSBFUlIyOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAg
ICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBpZiAoKytwdHIgPT0gcGF0dGVybkVuZCkgewor
ICAgICAgICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMjsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGMgPSAq
cHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIEEgbGV0dGVyIGlzIHVw
cGVyLWNhc2VkOyB0aGVuIHRoZSAweDQwIGJpdCBpcyBmbGlwcGVkLiBUaGlzIGNvZGluZworICAg
ICAgICAgICAgICAgICBpcyBBU0NJSS1zcGVjaWZpYywgYnV0IHRoZW4gdGhlIHdob2xlIGNvbmNl
cHQgb2YgXGN4IGlzIEFTQ0lJLXNwZWNpZmljLiAqLworICAgICAgICAgICAgICAgIGMgPSB0b0FT
Q0lJVXBwZXIoYykgXiAweDQwOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYyA9ICpwdHI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIEEg
bGV0dGVyIGlzIHVwcGVyLWNhc2VkOyB0aGVuIHRoZSAweDQwIGJpdCBpcyBmbGlwcGVkLiBUaGlz
IGNvZGluZwotICAgICAgICAgICAgIGlzIEFTQ0lJLXNwZWNpZmljLCBidXQgdGhlbiB0aGUgd2hv
bGUgY29uY2VwdCBvZiBcY3ggaXMgQVNDSUktc3BlY2lmaWMuICovCi0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKLSAgICAgICAgICAgICAgICBjIC09
IDMyOwotICAgICAgICAgICAgYyBePSAweDQwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgKnB0cnB0ciA9IHB0cjsKICAgICByZXR1cm4gYzsKIH0KIAot
Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAq
ICAgICAgICAgICAgQ2hlY2sgZm9yIGNvdW50ZWQgcmVwZWF0ICAgICAgICAgICAgKgogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMyNiw3ICsz
MjIsNyBAQCBBcmd1bWVudHM6CiBSZXR1cm5zOiAgICB0cnVlIG9yIGZhbHNlCiAqLwogCi1zdGF0
aWMgYm9vbCBpc19jb3VudGVkX3JlcGVhdChjb25zdCBVQ2hhciogcCwgY29uc3QgVUNoYXIqIHBh
dHRlcm5FbmQpCitzdGF0aWMgYm9vbCBpc0NvdW50ZWRSZXBlYXQoY29uc3QgVUNoYXIqIHAsIGNv
bnN0IFVDaGFyKiBwYXR0ZXJuRW5kKQogewogICAgIGlmIChwID49IHBhdHRlcm5FbmQgfHwgIWlz
QVNDSUlEaWdpdCgqcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1MCwxMyArMzQ2LDEy
IEBAIHN0YXRpYyBib29sIGlzX2NvdW50ZWRfcmVwZWF0KGNvbnN0IFVDaGEKICAgICByZXR1cm4g
KHAgPCBwYXR0ZXJuRW5kICYmICpwID09ICd9Jyk7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBSZWFkIHJlcGVhdCBj
b3VudHMgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBSZWFkIGFuIGl0ZW0gb2YgdGhlIGZvcm0ge24s
bX0gYW5kIHJldHVybiB0aGUgdmFsdWVzLiBUaGlzIGlzIGNhbGxlZCBvbmx5Ci1hZnRlciBpc19j
b3VudGVkX3JlcGVhdCgpIGhhcyBjb25maXJtZWQgdGhhdCBhIHJlcGVhdC1jb3VudCBxdWFudGlm
aWVyIGV4aXN0cywKK2FmdGVyIGlzQ291bnRlZFJlcGVhdCgpIGhhcyBjb25maXJtZWQgdGhhdCBh
IHJlcGVhdC1jb3VudCBxdWFudGlmaWVyIGV4aXN0cywKIHNvIHRoZSBzeW50YXggaXMgZ3VhcmFu
dGVlZCB0byBiZSBjb3JyZWN0LCBidXQgd2UgbmVlZCB0byBjaGVjayB0aGUgdmFsdWVzLgogCiBB
cmd1bWVudHM6CkBAIC0zNzAsNyArMzY1LDcgQEAgUmV0dXJuczogICAgICAgICBwb2ludGVyIHRv
ICd9JyBvbiBzdWNjZQogICAgICAgICAgICAgICAgICBjdXJyZW50IHB0ciBvbiBlcnJvciwgd2l0
aCBlcnJvcmNvZGVwdHIgc2V0IG5vbi16ZXJvCiAqLwogCi1zdGF0aWMgY29uc3QgVUNoYXIqIHJl
YWRfcmVwZWF0X2NvdW50cyhjb25zdCBVQ2hhciogcCwgaW50KiBtaW5wLCBpbnQqIG1heHAsIEVy
cm9yQ29kZSogZXJyb3Jjb2RlcHRyKQorc3RhdGljIGNvbnN0IFVDaGFyKiByZWFkUmVwZWF0Q291
bnRzKGNvbnN0IFVDaGFyKiBwLCBpbnQqIG1pbnAsIGludCogbWF4cCwgRXJyb3JDb2RlKiBlcnJv
cmNvZGVwdHIpCiB7CiAgICAgaW50IG1pbiA9IDA7CiAgICAgaW50IG1heCA9IC0xOwpAQCAtNDE0
LDI0NCArNDA5LDQ3IEBAIHN0YXRpYyBjb25zdCBVQ2hhciogcmVhZF9yZXBlYXRfY291bnRzKGMK
ICAgICByZXR1cm4gcDsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKiAgICAgIEZpbmQgZmlyc3Qgc2lnbmlmaWNhbnQgb3AgY29kZSAg
ICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCiAKIC8qIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2Nh
biBhIGNvbXBpbGVkIGV4cHJlc3Npb24gbG9va2luZwogZm9yIGEgZml4ZWQgZmlyc3QgY2hhcmFj
dGVyLCBvciBhbiBhbmNob3Jpbmcgb3AgY29kZSBldGMuIEl0IHNraXBzIG92ZXIgdGhpbmdzCi10
aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4gRm9yIHNvbWUgY2FsbHMsIGEgY2hhbmdlIG9mIG9w
dGlvbiBpcyBpbXBvcnRhbnQuCi1Gb3Igc29tZSBjYWxscywgaXQgbWFrZXMgc2Vuc2UgdG8gc2tp
cCBuZWdhdGl2ZSBmb3J3YXJkIGFuZCBhbGwgYmFja3dhcmQKLWFzc2VydGlvbnMsIGFuZCBhbHNv
IHRoZSBcYiBhc3NlcnRpb247IGZvciBvdGhlcnMgaXQgZG9lcyBub3QuCit0aGF0IGRvIG5vdCBp
bmZsdWVuY2UgdGhpcy4KIAogQXJndW1lbnRzOgogICBjb2RlICAgICAgICAgcG9pbnRlciB0byB0
aGUgc3RhcnQgb2YgdGhlIGdyb3VwCi0gIHNraXBhc3NlcnQgICB0cnVlIGlmIGNlcnRhaW4gYXNz
ZXJ0aW9ucyBhcmUgdG8gYmUgc2tpcHBlZAotCiBSZXR1cm5zOiAgICAgICBwb2ludGVyIHRvIHRo
ZSBmaXJzdCBzaWduaWZpY2FudCBvcGNvZGUKICovCiAKLXN0YXRpYyBjb25zdCB1c2NoYXIqIGZp
cnN0U2lnbmlmaWNhbnRPcENvZGUoY29uc3QgdXNjaGFyKiBjb2RlKQorc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUoY29uc3QgdW5zaWduZWQgY2hhciog
Y29kZSkKIHsKICAgICB3aGlsZSAoKmNvZGUgPT0gT1BfQlJBTlVNQkVSKQotICAgICAgICBjb2Rl
ICs9IE9QX2xlbmd0aHNbKmNvZGVdOworICAgICAgICBjb2RlICs9IDM7CiAgICAgcmV0dXJuIGNv
ZGU7CiB9CiAKLXN0YXRpYyBjb25zdCB1c2NoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcENvZGVTa2lw
cGluZ0Fzc2VydGlvbnMoY29uc3QgdXNjaGFyKiBjb2RlKQorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGVTa2lwcGluZ0Fzc2VydGlvbnMoY29uc3QgdW5z
aWduZWQgY2hhciogY29kZSkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBzd2l0Y2gg
KCpjb2RlKSB7Ci0gICAgICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSk7
Ci0gICAgICAgICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOwotICAgICAgICAgICAgY29k
ZSArPSBPUF9sZW5ndGhzWypjb2RlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE9QX1dPUkRfQk9VTkRBUlk6Ci0gICAgICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6Ci0g
ICAgICAgIGNhc2UgT1BfQlJBTlVNQkVSOgotICAgICAgICAgICAgY29kZSArPSBPUF9sZW5ndGhz
Wypjb2RlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGNvZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKLSogICAgICAgIEZpbmQgdGhlIGZpeGVkIGxlbmd0aCBvZiBhIHBhdHRlcm4gICAgICAq
Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0v
KiBTY2FuIGEgcGF0dGVybiBhbmQgY29tcHV0ZSB0aGUgZml4ZWQgbGVuZ3RoIG9mIHN1YmplY3Qg
dGhhdCB3aWxsIG1hdGNoIGl0LAotaWYgdGhlIGxlbmd0aCBpcyBmaXhlZC4gVGhpcyBpcyBuZWVk
ZWQgZm9yIGRlYWxpbmcgd2l0aCBiYWNrd2FyZCBhc3NlcnRpb25zLgotSW4gVVRGOCBtb2RlLCB0
aGUgcmVzdWx0IGlzIGluIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnl0ZXMuCi0KLUFyZ3VtZW50
czoKLSAgY29kZSAgICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiAodGhlIGJy
YWNrZXQpCi0gIG9wdGlvbnMgIHRoZSBjb21waWxpbmcgb3B0aW9ucwotCi1SZXR1cm5zOiAgIHRo
ZSBmaXhlZCBsZW5ndGgsIG9yIC0xIGlmIHRoZXJlIGlzIG5vIGZpeGVkIGxlbmd0aCwKLSAgICAg
ICAgICAgICBvciAtMiBpZiBcQyB3YXMgZW5jb3VudGVyZWQKLSovCi0KLXN0YXRpYyBpbnQgZmlu
ZF9maXhlZGxlbmd0aCh1c2NoYXIqIGNvZGUsIGludCBvcHRpb25zKQotewotICAgIGludCBsZW5n
dGggPSAtMTsKLSAgICAKLSAgICBpbnQgYnJhbmNobGVuZ3RoID0gMDsKLSAgICB1c2NoYXIqIGNj
ID0gY29kZSArIDEgKyBMSU5LX1NJWkU7Ci0gICAgCi0gICAgLyogU2NhbiBhbG9uZyB0aGUgb3Bj
b2RlcyBmb3IgdGhpcyBicmFuY2guIElmIHdlIGdldCB0byB0aGUgZW5kIG9mIHRoZQotICAgICBi
cmFuY2gsIGNoZWNrIHRoZSBsZW5ndGggYWdhaW5zdCB0aGF0IG9mIHRoZSBvdGhlciBicmFuY2hl
cy4gKi8KLSAgICAKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgZDsKLSAgICAgICAg
aW50IG9wID0gKmNjOwotICAgICAgICBpZiAob3AgPj0gT1BfQlJBKQotICAgICAgICAgICAgb3Ag
PSBPUF9CUkE7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICBj
YXNlIE9QX0JSQToKLSAgICAgICAgICAgIGNhc2UgT1BfT05DRToKLSAgICAgICAgICAgICAgICBk
ID0gZmluZF9maXhlZGxlbmd0aChjYywgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgaWYgKGQg
PCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDsKLSAgICAgICAgICAgICAgICBicmFu
Y2hsZW5ndGggKz0gZDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
IGNjICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpOwotICAgICAgICAgICAgICAgIH0g
d2hpbGUgKCpjYyA9PSBPUF9BTFQpOwotICAgICAgICAgICAgICAgIGNjICs9IDEgKyBMSU5LX1NJ
WkU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLyogUmVhY2hlZCBlbmQgb2YgYSBicmFuY2g7IGlmIGl0J3MgYSBrZXQgaXQgaXMgdGhl
IGVuZCBvZiBhIG5lc3RlZAotICAgICAgICAgICAgICAgICBjYWxsLiBJZiBpdCdzIEFMVCBpdCBp
cyBhbiBhbHRlcm5hdGlvbiBpbiBhIG5lc3RlZCBjYWxsLiBJZiBpdCBpcwotICAgICAgICAgICAg
ICAgICBFTkQgaXQncyB0aGUgZW5kIG9mIHRoZSBvdXRlciBjYWxsLiBBbGwgY2FuIGJlIGhhbmRs
ZWQgYnkgdGhlIHNhbWUgY29kZS4gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgT1BfQUxUOgotICAgICAgICAgICAgY2FzZSBPUF9LRVQ6Ci0gICAgICAgICAgICBjYXNlIE9Q
X0tFVFJNQVg6Ci0gICAgICAgICAgICBjYXNlIE9QX0tFVFJNSU46Ci0gICAgICAgICAgICBjYXNl
IE9QX0VORDoKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkKLSAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gYnJhbmNobGVuZ3RoOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxl
bmd0aCAhPSBicmFuY2hsZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAg
ICAgICAgICAgICAgICBpZiAoKmNjICE9IE9QX0FMVCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGxlbmd0aDsKLSAgICAgICAgICAgICAgICBjYyArPSAxICsgTElOS19TSVpFOwotICAgICAg
ICAgICAgICAgIGJyYW5jaGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGFzc2VydGl2ZSBzdWJw
YXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9BU1NFUlQ6
CiAgICAgICAgICAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgICAgICBjYyArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNjLCAxKTsK
LSAgICAgICAgICAgICAgICB9IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKLSAgICAgICAgICAgICAg
ICAvKiBGYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
KiBTa2lwIG92ZXIgdGhpbmdzIHRoYXQgZG9uJ3QgbWF0Y2ggY2hhcnMgKi8KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfQlJBTlVNQkVSOgotICAgICAgICAgICAgY2FzZSBP
UF9DSVJDOgotICAgICAgICAgICAgY2FzZSBPUF9ET0xMOgotICAgICAgICAgICAgY2FzZSBPUF9O
T1RfV09SRF9CT1VOREFSWToKLSAgICAgICAgICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKLSAg
ICAgICAgICAgICAgICBjYyArPSBPUF9sZW5ndGhzWypjY107Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogSGFuZGxlIGxpdGVyYWwg
Y2hhcmFjdGVycyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9DSEFS
OgotICAgICAgICAgICAgY2FzZSBPUF9DSEFSX0lHTk9SSU5HX0NBU0U6Ci0gICAgICAgICAgICBj
YXNlIE9QX05PVDoKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGgrKzsKLSAgICAgICAgICAg
ICAgICBjYyArPSAyOwotICAgICAgICAgICAgICAgIHdoaWxlICgoKmNjICYgMHhjMCkgPT0gMHg4
MCkKLSAgICAgICAgICAgICAgICAgICAgY2MrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfQVNDSUlfQ0hBUjoKLSAgICAgICAg
ICAgIGNhc2UgT1BfQVNDSUlfTEVUVEVSX0lHTk9SSU5HX0NBU0U6Ci0gICAgICAgICAgICAgICAg
YnJhbmNobGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgY2MgKz0gMjsKKyAgICAgICAgICAgICAg
ICBhZHZhbmNlVG9FbmRPZkJyYWNrZXQoY29kZSk7CisgICAgICAgICAgICAgICAgY29kZSArPSAx
ICsgTElOS19TSVpFOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBleGFjdCByZXBldGl0aW9ucy4gVGhlIGNvdW50IGlz
IGFscmVhZHkgaW4gY2hhcmFjdGVycywgYnV0IHdlCi0gICAgICAgICAgICAgICAgIG5lZWQgdG8g
c2tpcCBvdmVyIGEgbXVsdGlieXRlIGNoYXJhY3RlciBpbiBVVEY4IG1vZGUuICAqLwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9FWEFDVDoKLSAgICAgICAgICAgICAgICBi
cmFuY2hsZW5ndGggKz0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNjLDEpOwotICAgICAg
ICAgICAgICAgIGNjICs9IDQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUoKCpjYyAmIDB4ODApID09
IDB4ODApCi0gICAgICAgICAgICAgICAgICAgIGNjKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE9QX1RZUEVFWEFDVDoKLSAgICAg
ICAgICAgICAgICBicmFuY2hsZW5ndGggKz0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNj
LDEpOwotICAgICAgICAgICAgICAgIGNjICs9IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogSGFuZGxlIHNpbmdsZS1jaGFyIG1h
dGNoZXJzICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE9QX05PVF9ESUdJ
VDoKLSAgICAgICAgICAgIGNhc2UgT1BfRElHSVQ6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9X
SElURVNQQUNFOgotICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgotICAgICAgICAgICAg
Y2FzZSBPUF9OT1RfV09SRENIQVI6Ci0gICAgICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgotICAg
ICAgICAgICAgY2FzZSBPUF9OT1RfTkVXTElORToKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5n
dGgrKzsKLSAgICAgICAgICAgICAgICBjYysrOworICAgICAgICAgICAgY2FzZSBPUF9XT1JEX0JP
VU5EQVJZOgorICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKKyAgICAgICAg
ICAgICAgICArK2NvZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLyogQ2hlY2sgYSBjbGFzcyBmb3IgdmFyaWFibGUgcXVhbnRpZmlj
YXRpb24gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfWENMQVNTOgot
ICAgICAgICAgICAgICAgIGNjICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpIC0gMzM7
Ci0gICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIE9QX0NMQVNTOgotICAgICAgICAgICAgY2FzZSBPUF9OQ0xBU1M6Ci0g
ICAgICAgICAgICAgICAgY2MgKz0gMzM7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgc3dpdGNoICgqY2MpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE9QX0NSU1RBUjoKLSAgICAg
ICAgICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKLSAgICAgICAgICAgICAgICBjYXNlIE9QX0NS
UVVFUlk6Ci0gICAgICAgICAgICAgICAgY2FzZSBPUF9DUk1JTlFVRVJZOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGNhc2UgT1BfQ1JSQU5HRToKLSAgICAgICAgICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEp
ICE9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChjYywgMykpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBn
ZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpOwotICAgICAgICAgICAgICAgICAgICBj
YyArPSA1OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJhbmNobGVu
Z3RoKys7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPUF9CUkFOVU1CRVI6
CisgICAgICAgICAgICAgICAgY29kZSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UgaXMgdmFyaWFi
bGUgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29kZTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotCi0vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgIENv
bXBsZXRlIGEgY2FsbG91dCBpdGVtICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEEgY2FsbG91dCBpdGVtIGNv
bnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiwgd2hpY2gK
LXdlIGNhbid0IGZpbGwgaW4gdGlsbCBhZnRlciB3ZSBoYXZlIHJlYWNoZWQgdGhlIHJlbGV2YW50
IHBvaW50LiBUaGlzIGlzIHVzZWQKLWZvciBib3RoIGF1dG9tYXRpYyBhbmQgbWFudWFsIGNhbGxv
dXRzLgotCi1Bcmd1bWVudHM6Ci0gIHByZXZpb3VzX2NhbGxvdXQgICBwb2ludHMgdG8gcHJldmlv
dXMgY2FsbG91dCBpdGVtCi0gIHB0ciAgICAgICAgICAgICAgICBjdXJyZW50IHBhdHRlcm4gcG9p
bnRlcgotICBjZCAgICAgICAgICAgICAgICAgcG9pbnRlcnMgdG8gdGFibGVzIGV0YwotKi8KLQot
c3RhdGljIHZvaWQgY29tcGxldGVfY2FsbG91dCh1c2NoYXIqIHByZXZpb3VzX2NhbGxvdXQsIGNv
bnN0IFVDaGFyKiBwdHIsIGNvbnN0IENvbXBpbGVEYXRhJiBjZCkKLXsKLSAgICBpbnQgbGVuZ3Ro
ID0gcHRyIC0gY2Quc3RhcnRfcGF0dGVybiAtIGdldE9wY29kZVZhbHVlQXRPZmZzZXQocHJldmlv
dXNfY2FsbG91dCwgMik7Ci0gICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChwcmV2aW91c19jYWxs
b3V0LCAyICsgTElOS19TSVpFLCBsZW5ndGgpOwotfQotCi0KLQogLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIEdldCBvdGhlcmNh
c2UgcmFuZ2UgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjcwLDEyICs0NjgsMTIgQEAgQXJndW1lbnRzOgog
WWllbGQ6ICAgICAgICB0cnVlIHdoZW4gcmFuZ2UgcmV0dXJuZWQ7IGZhbHNlIHdoZW4gbm8gbW9y
ZQogKi8KIAotc3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQqIGNwdHIsIGludCBk
LCBpbnQqIG9jcHRyLCBpbnQqIG9kcHRyKQorc3RhdGljIGJvb2wgZ2V0T3RoZXJjYXNlUmFuZ2Uo
aW50KiBjcHRyLCBpbnQgZCwgaW50KiBvY3B0ciwgaW50KiBvZHB0cikKIHsKICAgICBpbnQgYywg
b3RoZXJjYXNlID0gMDsKICAgICAKICAgICBmb3IgKGMgPSAqY3B0cjsgYyA8PSBkOyBjKyspIHsK
LSAgICAgICAgaWYgKChvdGhlcmNhc2UgPSBfcGNyZV91Y3Bfb3RoZXJjYXNlKGMpKSA+PSAwKQor
ICAgICAgICBpZiAoKG90aGVyY2FzZSA9IGtqc19wY3JlX3VjcF9vdGhlcmNhc2UoYykpID49IDAp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC02ODYsNyArNDg0LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQqIGNwdAogICAgIGludCBuZXh0ID0gb3Ro
ZXJjYXNlICsgMTsKICAgICAKICAgICBmb3IgKCsrYzsgYyA8PSBkOyBjKyspIHsKLSAgICAgICAg
aWYgKF9wY3JlX3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4dCkKKyAgICAgICAgaWYgKGtqc19wY3Jl
X3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4dCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBu
ZXh0Kys7CiAgICAgfQpAQCAtNzExLDE5ICs1MDksMTggQEAgc3RhdGljIGJvb2wgZ2V0X290aGVy
Y2FzZV9yYW5nZShpbnQqIGNwdAogIFJldHVybnM6ICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBw
bGFjZWQgaW4gdGhlIGJ1ZmZlcgogICovCiAKLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYWxsIFVURjggdXNlcyBhcmUgcmVtb3ZlZCBmcm9tIFBDUkUKLWludCBf
cGNyZV9vcmQydXRmOChpbnQgY3ZhbHVlLCB1c2NoYXIgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgZW5j
b2RlVVRGOChpbnQgY3ZhbHVlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCiB7CiAgICAgaW50IGk7
Ci0gICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkrKykKLSAgICAg
ICAgaWYgKGN2YWx1ZSA8PSBfcGNyZV91dGY4X3RhYmxlMVtpXSkKKyAgICBmb3IgKGkgPSAwOyBp
IDwga2pzX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQorICAgICAgICBpZiAoY3ZhbHVlIDw9
IGtqc19wY3JlX3V0ZjhfdGFibGUxW2ldKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgYnVmZmVy
ICs9IGk7CiAgICAgZm9yIChpbnQgaiA9IGk7IGogPiAwOyBqLS0pIHsKICAgICAgICAgKmJ1ZmZl
ci0tID0gMHg4MCB8IChjdmFsdWUgJiAweDNmKTsKICAgICAgICAgY3ZhbHVlID4+PSA2OwogICAg
IH0KLSAgICAqYnVmZmVyID0gX3BjcmVfdXRmOF90YWJsZTJbaV0gfCBjdmFsdWU7CisgICAgKmJ1
ZmZlciA9IGtqc19wY3JlX3V0ZjhfdGFibGUyW2ldIHwgY3ZhbHVlOwogICAgIHJldHVybiBpICsg
MTsKIH0KIApAQCAtNzUzLDcgKzU1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlbHlDaGVj
a05leHRDaGFyKGMKIH0KIAogc3RhdGljIGJvb2wKLWNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMs
IGludCogYnJhY2tldHMsIHVzY2hhcioqIGNvZGVwdHIsCitjb21waWxlQnJhbmNoKGludCBvcHRp
b25zLCBpbnQqIGJyYWNrZXRzLCB1bnNpZ25lZCBjaGFyKiogY29kZXB0ciwKICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hhciogcGF0dGVybkVuZCwgRXJyb3JD
b2RlKiBlcnJvcmNvZGVwdHIsIGludCAqZmlyc3RieXRlcHRyLAogICAgICAgICAgICAgICAgaW50
KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2QpCiB7CkBAIC03NjEsMjAgKzU1OCwxOCBAQCBj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgaW50IHJlcGVhdF9t
aW4gPSAwLCByZXBlYXRfbWF4ID0gMDsgICAgICAvKiBUbyBwbGVhc2UgcGlja3kgY29tcGlsZXJz
ICovCiAgICAgaW50IGJyYXZhbHVlID0gMDsKICAgICBpbnQgcmVxdmFyeSwgdGVtcHJlcXZhcnk7
Ci0gICAgaW50IGFmdGVyX21hbnVhbF9jYWxsb3V0ID0gMDsKICAgICBpbnQgYzsKLSAgICB1c2No
YXIqIGNvZGUgPSAqY29kZXB0cjsKLSAgICB1c2NoYXIqIHRlbXBjb2RlOworICAgIHVuc2lnbmVk
IGNoYXIqIGNvZGUgPSAqY29kZXB0cjsKKyAgICB1bnNpZ25lZCBjaGFyKiB0ZW1wY29kZTsKICAg
ICBib29sIGdyb3Vwc2V0Zmlyc3RieXRlID0gZmFsc2U7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9
ICpwdHJwdHI7CiAgICAgY29uc3QgVUNoYXIqIHRlbXBwdHI7Ci0gICAgdXNjaGFyKiBwcmV2aW91
cyA9IE5VTEw7Ci0gICAgdXNjaGFyKiBwcmV2aW91c19jYWxsb3V0ID0gTlVMTDsKLSAgICB1c2No
YXIgY2xhc3NiaXRzWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwcmV2aW91cyA9IE5VTEw7Cisg
ICAgdW5zaWduZWQgY2hhciBjbGFzc2JpdHNbMzJdOwogICAgIAogICAgIGJvb2wgY2xhc3NfdXRm
ODsKLSAgICB1c2NoYXIqIGNsYXNzX3V0ZjhkYXRhOwotICAgIHVzY2hhciB1dGY4X2NoYXJbNl07
CisgICAgdW5zaWduZWQgY2hhciogY2xhc3NfdXRmOGRhdGE7CisgICAgdW5zaWduZWQgY2hhciB1
dGY4X2NoYXJbNl07CiAgICAgCiAgICAgLyogSW5pdGlhbGl6ZSBubyBmaXJzdCBieXRlLCBubyBy
ZXF1aXJlZCBieXRlLiBSRVFfVU5TRVQgbWVhbnMgIm5vIGNoYXIKICAgICAgbWF0Y2hpbmcgZW5j
b3VudGVyZWQgeWV0Ii4gSXQgZ2V0cyBjaGFuZ2VkIHRvIFJFUV9OT05FIGlmIHdlIGhpdCBzb21l
dGhpbmcgdGhhdApAQCAtODA5LDcgKzYwNCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMs
IGludCogYnJhY2tldHMKICAgICAgICAgaW50IHN1YnJlcWJ5dGU7CiAgICAgICAgIGludCBzdWJm
aXJzdGJ5dGU7CiAgICAgICAgIGludCBtY2xlbmd0aDsKLSAgICAgICAgdXNjaGFyIG1jYnVmZmVy
WzhdOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1jYnVmZmVyWzhdOwogICAgICAgICAKICAgICAg
ICAgLyogTmV4dCBieXRlIGluIHRoZSBwYXR0ZXJuICovCiAgICAgICAgIApAQCAtODE4LDEyICs2
MTMsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAg
IC8qIEZpbGwgaW4gbGVuZ3RoIG9mIGEgcHJldmlvdXMgY2FsbG91dCwgZXhjZXB0IHdoZW4gdGhl
IG5leHQgdGhpbmcgaXMKICAgICAgICAgIGEgcXVhbnRpZmllci4gKi8KICAgICAgICAgCi0gICAg
ICAgIGJvb2wgaXNfcXVhbnRpZmllciA9IGMgPT0gJyonIHx8IGMgPT0gJysnIHx8IGMgPT0gJz8n
IHx8IChjID09ICd7JyAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIgKyAxLCBwYXR0ZXJuRW5kKSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzX3F1YW50aWZpZXIgJiYgcHJldmlvdXNfY2FsbG91
dCAmJiBhZnRlcl9tYW51YWxfY2FsbG91dC0tIDw9IDApIHsKLSAgICAgICAgICAgIGNvbXBsZXRl
X2NhbGxvdXQocHJldmlvdXNfY2FsbG91dCwgcHRyLCBjZCk7Ci0gICAgICAgICAgICBwcmV2aW91
c19jYWxsb3V0ID0gTlVMTDsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzX3F1YW50aWZpZXIg
PSBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICc/JyB8fCAoYyA9PSAneycgJiYgaXNDb3Vu
dGVkUmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKTsKICAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAoYykgewogICAgICAgICAgICAgLyogVGhlIGJyYW5jaCB0ZXJtaW5hdGVzIGF0IGVuZCBvZiBz
dHJpbmcsIHwsIG9yICkuICovCkBAIC05MTYsNyArNzA2LDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKDwgMjU2
KSwgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIGNvbXBpbGVkIGNvZGUgZG9lc24ndCB1c2UgdGhl
CiAgICAgICAgICAgICAgICAgIGJpdCBtYXAuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwgMzIgKiBzaXplb2YodXNjaGFyKSk7CisgICAg
ICAgICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwgMzIgKiBzaXplb2YodW5zaWduZWQgY2hh
cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgY2hhcmFj
dGVycyB1bnRpbCBdIGlzIHJlYWNoZWQuIFRoZSBmaXJzdCBwYXNzCiAgICAgICAgICAgICAgICAg
IHRocm91Z2ggdGhlIHJlZ2V4IGNoZWNrZWQgdGhlIG92ZXJhbGwgc3ludGF4LCBzbyB3ZSBkb24n
dCBuZWVkIHRvIGJlIHZlcnkKQEAgLTkzMyw3ICs3MjMsNyBAQCBjb21waWxlQnJhbmNoKGludCBv
cHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4g
dGhlbSwgc28gc2V0IGNsYXNzX2NoYXJjb3VudCBiaWdnZXIgdGhhbiBvbmUuICovCiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVy
cm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMg
PSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJvcmNvZGVwdHIsICpicmFja2V0cywg
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgtYyA9PSBFU0NfYikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJ1xiJzsg
ICAgICAgLyogXGIgaXMgYmFja3NsYXNoIGluIGEgY2xhc3MgKi8KQEAgLTEwMDQsNyArNzk0LDcg
QEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA9PSAnXFwnKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIG9sZHB0ciA9IHB0cjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5F
bmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkID0gY2hlY2tFc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAq
YnJhY2tldHMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIFxiIGlzIGJhY2tzbGFzaDsgXFggaXMgbGl0ZXJhbCBYOyBh
bnkgb3RoZXIgc3BlY2lhbCBtZWFucyB0aGUgJy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdhcyBsaXRlcmFsICovCkBAIC0xMDQxLDcgKzgzMSw3IEBAIGNvbXBpbGVCcmFuY2goaW50
IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG9jYywgb2NkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2MgPSBj
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3JpZ2QgPSBkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0X290aGVyY2FzZV9yYW5nZSgmY2Ms
IG9yaWdkLCAmb2NjLCAmb2NkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoZ2V0T3RoZXJjYXNlUmFuZ2UoJmNjLCBvcmlnZCwgJm9jYywgJm9jZCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvY2MgPj0gYyAmJiBvY2QgPD0gZCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIFNr
aXAgZW1iZWRkZWQgcmFuZ2VzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKQEAgLTEwNjAsOSArODUwLDkgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBi
cmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191
dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFz
c191dGY4ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KG9jYywgY2xhc3NfdXRm
OGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0
ZjhkYXRhICs9IGVuY29kZVVURjgob2NjLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRmOChvY2QsIGNsYXNzX3V0ZjhkYXRh
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9
IGVuY29kZVVURjgob2NkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xMDcwLDggKzg2MCw4IEBAIGNvbXBpbGVCcmFuY2goaW50IG9w
dGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Zlcmxh
cHBpbmcgcmFuZ2VzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KGMs
IGNsYXNzX3V0ZjhkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4
ZGF0YSArPSBfcGNyZV9vcmQydXRmOChkLCBjbGFzc191dGY4ZGF0YSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5jb2RlVVRGOChjLCBjbGFzc191dGY4
ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5j
b2RlVVRGOChkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2l0aCBVQ1Agc3VwcG9ydCwgd2UgYXJl
IGRvbmUuIFdpdGhvdXQgVUNQIHN1cHBvcnQsIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2VsZXNzIG1hdGNoaW5nIGZvciBVVEYtOCBjaGFyYWN0ZXJzID4gMTI3
OyB3ZSBjYW4gdXNlIHRoZSBiaXQgbWFwCkBAIC0xMTA4LDEzICs4OTgsMTMgQEAgY29tcGlsZUJy
YW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICBpZiAo
KGMgPiAyNTUgfHwgKChvcHRpb25zICYgSWdub3JlQ2FzZU9wdGlvbikgJiYgYyA+IDEyNykpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KGMsIGNsYXNzX3V0
ZjhkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29k
ZVVURjgoYywgY2xhc3NfdXRmOGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmIElnbm9yZUNhc2VPcHRpb24pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3RoZXJjYXNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgob3RoZXJjYXNlID0gX3BjcmVfdWNwX290aGVyY2FzZShjKSkgPj0g
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob3RoZXJjYXNlID0ga2pzX3Bj
cmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqY2xhc3NfdXRmOGRhdGErKyA9IFhDTF9TSU5HTEU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KG90aGVyY2FzZSwg
Y2xhc3NfdXRmOGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191
dGY4ZGF0YSArPSBlbmNvZGVVVEY4KG90aGVyY2FzZSwgY2xhc3NfdXRmOGRhdGEpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEyMDIsNyArOTkyLDcgQEAgY29tcGlsZUJyYW5j
aChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgLyogTm93IGZpbGwgaW4gdGhlIGNvbXBsZXRlIGxlbmd0aCBvZiB0aGUg
aXRlbSAqLwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHV0T3Bj
b2RlVmFsdWVBdE9mZnNldChwcmV2aW91cywgMSwgY29kZSAtIHByZXZpb3VzKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHV0TGlua1ZhbHVlKHByZXZpb3VzICsgMSwgY29kZSAtIHByZXZpb3VzKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogRW5kIG9mIGNsYXNzIGhhbmRsaW5nICov
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTIyNyw3ICsxMDE3LDcg
QEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAg
Y2FzZSAneyc6CiAgICAgICAgICAgICAgICAgaWYgKCFpc19xdWFudGlmaWVyKQogICAgICAgICAg
ICAgICAgICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRf
cmVwZWF0X2NvdW50cyhwdHIrMSwgJnJlcGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVw
dHIpOworICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsgMSwgJnJl
cGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOwogICAgICAgICAgICAgICAgIGlm
ICgqZXJyb3Jjb2RlcHRyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKICAgICAg
ICAgICAgICAgICBnb3RvIFJFUEVBVDsKQEAgLTEyNjUsNiArMTA1NSw3IEBAIGNvbXBpbGVCcmFu
Y2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvKiBTYXZlIHN0YXJ0IG9mIHByZXZpb3VzIGl0ZW0sIGluIGNhc2Ugd2UgaGF2ZSB0
byBtb3ZlIGl0IHVwIHRvIG1ha2Ugc3BhY2UKICAgICAgICAgICAgICAgICAgZm9yIGFuIGluc2Vy
dGVkIE9QX09OQ0UgZm9yIHRoZSBhZGRpdGlvbmFsICcrJyBleHRlbnNpb24uICovCisgICAgICAg
ICAgICAgICAgLyogRklYTUU6IFByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBiZWNhdXNlIHdlIGRv
bid0IHVzZSBPUF9PTkNFLiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHRl
bXBjb2RlID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAgCkBAIC0xMjkzLDcgKzEwODQsNyBA
QCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggcmF0aGVyIHRoYW4gYSBzbWFsbCBjaGFyYWN0ZXIuICovCiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVstMV0gJiAweDgwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIgKmxhc3RjaGFyID0gY29kZSAtIDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpsYXN0Y2hhciA9IGNvZGUgLSAx
OwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoKCpsYXN0Y2hhciAmIDB4YzApID09IDB4
ODApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGNoYXItLTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGMgPSBjb2RlIC0gbGFzdGNoYXI7ICAgICAgICAgICAgLyogTGVuZ3RoIG9m
IFVURi04IGNoYXJhY3RlciAqLwpAQCAtMTMzOSw3ICsxMTMwLDcgQEAgY29tcGlsZUJyYW5jaChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcF90
eXBlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIGludCBwcm9wX3ZhbHVlID0gLTE7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB1c2NoYXIqIG9sZGNvZGUgPSBj
b2RlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvbGRjb2RlID0gY29kZTsK
ICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHByZXZpb3VzOyAgICAgICAgICAgICAgICAgIC8q
IFVzdWFsbHkgb3ZlcndyaXRlIHByZXZpb3VzIGl0ZW0gKi8KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBtYXhpbXVtIGlzIHplcm8gdGhlbiB0aGUg
bWluaW11bSBtdXN0IGFsc28gYmUgemVybzsgUGVybCBhbGxvd3MKQEAgLTEzNjIsNyArMTE1Myw3
IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfUVVFUlkgKyByZXBlYXRfdHlwZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpj
b2RlKysgPSBPUF9VUFRPICsgcmVwZWF0X3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2YW5jZShjb2RlLCAwLCByZXBlYXRf
bWF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5j
ZShjb2RlLCByZXBlYXRfbWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEzNzksNyArMTE3MCw3IEBA
IGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmVwZWF0X21heCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIEVORF9SRVBFQVQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVh
dF9tYXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5k
QWR2YW5jZShjb2RlLCByZXBlYXRfbWF4IC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMzg4LDcg
KzExNzksNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICpjb2RlKysgPSBPUF9FWEFDVCArIG9wX3R5cGU7ICAvKiBOQiBFWEFDVCBk
b2Vzbid0IGhhdmUgcmVwZWF0X3R5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJC
eXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UoY29kZSwgMCwgcmVwZWF0X21pbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBl
YXRfbWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgLyogSWYgdGhlIG1heGltdW0gaXMgdW5saW1pdGVkLCBpbnNlcnQgYW4gT1BfU1RBUi4gQmVm
b3JlIGRvaW5nIHNvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGhhdmUgdG8gaW5zZXJ0
IHRoZSBjaGFyYWN0ZXIgZm9yIHRoZSBwcmV2aW91cyBjb2RlLiBGb3IgYSByZXBlYXRlZApAQCAt
MTQyNSw3ICsxMjE2LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBlYXRfbWF4IC09IHJlcGVhdF9taW47CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJl
cGVhdF9tYXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlVmFsdWVBbmRB
ZHZhbmNlKGNvZGUsIHJlcGVhdF9tYXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTQ2NywyMCArMTI1
OCwyMCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfQ1JRVUVSWSArIHJlcGVhdF90eXBlOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysg
PSBPUF9DUlJBTkdFICsgcmVwZWF0X3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXQy
Qnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9taW4pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UoY29kZSwgcmVw
ZWF0X21pbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0X21heCA9PSAtMSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRfbWF4ID0gMDsgIC8qIDItYnl0ZSBl
bmNvZGluZyBmb3IgbWF4ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29k
ZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UoY29kZSwgcmVwZWF0X21heCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgLyogSWYgcHJldmlvdXMgd2FzIGEgYnJhY2tldCBncm91cCwg
d2UgbWF5IGhhdmUgdG8gcmVwbGljYXRlIGl0IGluIGNlcnRhaW4KICAgICAgICAgICAgICAgICAg
Y2FzZXMuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKnBy
ZXZpb3VzID49IE9QX0JSQSB8fCAqcHJldmlvdXMgPT0gT1BfT05DRSkgeworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCpwcmV2aW91cyA+PSBPUF9CUkEpIHsKICAgICAgICAgICAgICAgICAgICAg
aW50IGtldG9mZnNldCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBjb2RlIC0g
cHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgIHVzY2hhciogYnJhbGluayA9IE5VTEw7Cisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJyYWxpbmsgPSBOVUxMOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIG1heGltdW0gcmVw
ZWF0IGNvdW50IGlzIHVubGltaXRlZCwgZmluZCB0aGUgZW5kIG9mIHRoZSBicmFja2V0CiAgICAg
ICAgICAgICAgICAgICAgICBieSBzY2FubmluZyB0aHJvdWdoIGZyb20gdGhlIHN0YXJ0LCBhbmQg
Y29tcHV0ZSB0aGUgb2Zmc2V0IGJhY2sgdG8gaXQKQEAgLTE0ODksMTAgKzEyODAsOCBAQCBjb21w
aWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAg
ICBwb2ludGVyLiAqLwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlcGVhdF9tYXggPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzY2hhciog
a2V0ID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V0ICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoa2V0LCAxKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCprZXQgIT0gT1BfS0VUKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtldCA9IHByZXZpb3VzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KGtldCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBrZXRvZmZzZXQgPSBjb2RlIC0ga2V0OwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTU0NCw3ICsxMzMzLDcgQEAgY29t
cGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoIWJy
YWxpbmspID8gMCA6IHByZXZpb3VzIC0gYnJhbGluazsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmFsaW5rID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0
T3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UocHJldmlvdXMsIDAsIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlQWxsb3daZXJvQW5kQWR2YW5jZShw
cmV2aW91cywgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0X21heC0tOwpAQCAt
MTU4NSw3ICsxMzc0LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfQlJBOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCFicmFsaW5rKSA/IDAg
OiBjb2RlIC0gYnJhbGluazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbGlu
ayA9IGNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVl
QXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1dExpbmtWYWx1ZUFsbG93WmVyb0FuZEFkdmFuY2UoY29kZSwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGNvZGUsIHByZXZpb3Vz
LCBsZW4pOwpAQCAtMTU5NywxMiArMTM4NiwxMiBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25z
LCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChicmFsaW5rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IGNvZGUgLSBicmFsaW5rICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2NoYXIqIGJyYSA9IGNvZGUgLSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG9sZGxpbmtvZmZzZXQgPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KGJyYSwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbGluayA9IG9sZGxpbmtvZmZzZXQgPyBi
cmFsaW5rIC0gb2xkbGlua29mZnNldCA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciogYnJhID0gY29kZSAtIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgb2xkbGlua29mZnNldCA9IGdldExpbmtWYWx1ZUFsbG93WmVybyhicmEgKyAx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFsaW5rID0gKCFvbGRsaW5rb2Zmc2V0
KSA/IDAgOiBicmFsaW5rIC0gb2xkbGlua29mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqY29kZSsrID0gT1BfS0VUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE9w
Y29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChicmEsIDEsIG9mZnNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlQW5kQWR2YW5jZShjb2Rl
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dExpbmtWYWx1ZShicmEg
KyAxLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTY0MywyNyArMTQzMiwyNyBAQCBjb21w
aWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCooKytwdHIpID09ICc/JykgewogICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKCooKytwdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJzonOiAgICAg
ICAgICAgICAgICAgLyogTm9uLWV4dHJhY3RpbmcgYnJhY2tldCAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJhdmFsdWUgPSBPUF9CUkE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIr
KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOiAgICAgICAgICAgICAgICAgLyogUG9z
aXRpdmUgbG9va2FoZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9Q
X0FTU0VSVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnISc6ICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBsb29rYWhlYWQgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1BfQVNTRVJUX05PVDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
JzonOiAgICAgICAgICAgICAgICAgLyogTm9uLWV4dHJhY3RpbmcgYnJhY2tldCAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnPSc6ICAgICAgICAgICAgICAgICAvKiBQb3NpdGl2ZSBsb29rYWhlYWQgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJyEnOiAgICAgICAgICAgICAgICAgLyogTmVnYXRpdmUgbG9va2FoZWFkICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJhdmFsdWUgPSBPUF9BU1NFUlRfTk9UOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgLyogQ2hhcmFjdGVyIGFmdGVyICg/IG5vdCBzcGVjaWFsbHkgcmVjb2duaXplZCAqLwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgLyogT3B0aW9uIHNldHRpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRkFJ
TEVEOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogRWxzZSB3ZSBoYXZlIGEg
cmVmZXJlbmNpbmcgZ3JvdXA7IGFkanVzdCB0aGUgb3Bjb2RlLiBJZiB0aGUgYnJhY2tldApAQCAt
MTY3NCw3ICsxNDYzLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICBpZiAoKysoKmJyYWNrZXRzKSA+IEVYVFJBQ1RfQkFTSUNf
TUFYKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0JSQSArIEVYVFJB
Q1RfQkFTSUNfTUFYICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVbMSArIExJTktf
U0laRV0gPSBPUF9CUkFOVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9w
Y29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMitMSU5LX1NJWkUsICpicmFja2V0cyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlKGNvZGUgKyAyICsgTElOS19TSVpFLCAqYnJh
Y2tldHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2tpcGJ5dGVzID0gMzsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xNjg2LDcgKzE0NzUs
NyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAg
ICAgICAgIHRvIHBhc3MgaXRzIGFkZHJlc3MgYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFp
biBvdGhlcndpc2UuIFBhc3MgaW4gYQogICAgICAgICAgICAgICAgICBuZXcgc2V0dGluZyBmb3Ig
dGhlIGltcyBvcHRpb25zIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLiAqLwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHByZXZpb3VzID0gKGJyYXZhbHVlID49IE9QX09OQ0UpID8gY29k
ZSA6IDA7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSAoYnJhdmFsdWUgPj0gT1BfQlJBWkVS
TykgPyBjb2RlIDogMDsKICAgICAgICAgICAgICAgICAqY29kZSA9IGJyYXZhbHVlOwogICAgICAg
ICAgICAgICAgIHRlbXBjb2RlID0gY29kZTsKICAgICAgICAgICAgICAgICB0ZW1wcmVxdmFyeSA9
IGNkLnJlcV92YXJ5b3B0OyAgICAgLyogU2F2ZSB2YWx1ZSBiZWZvcmUgYnJhY2tldCAqLwpAQCAt
MTcxOSw3ICsxNTA4LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgIHplcm9maXJzdGJ5dGUgPSBmaXJzdGJ5dGU7CiAgICAgICAgICAg
ICAgICAgZ3JvdXBzZXRmaXJzdGJ5dGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQlJBIHx8IGJyYXZhbHVlID09IE9QX09OQ0Up
IHsKKyAgICAgICAgICAgICAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQlJBKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8qIElmIHdlIGhhdmUgbm90IHlldCBzZXQgYSBmaXJzdGJ5dGUgaW4gdGhpcyBi
cmFuY2gsIHRha2UgaXQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm4s
IHJlbWVtYmVyaW5nIHRoYXQgaXQgd2FzIHNldCBoZXJlIHNvIHRoYXQgYSByZXBlYXQgb2YgbW9y
ZQogICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmUgY2FuIHJlcGxpY2F0ZSBpdCBhcyByZXFi
eXRlIGlmIG5lY2Vzc2FyeS4gSWYgdGhlIHN1YnBhdHRlcm4gaGFzCkBAIC0xNzc5LDcgKzE1Njgs
NyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlICdcXCc6CiAgICAgICAgICAgICAgICAgdGVtcHB0ciA9
IHB0cjsKLSAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQs
IGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYyA9IGNo
ZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG1ldGFjaGFy
YWN0ZXJzIGludHJvZHVjZWQgYnkgXC4gRm9yIG9uZXMgbGlrZSBcZCwgdGhlIEVTQ18gdmFsdWVz
CiAgICAgICAgICAgICAgICAgIGFyZSBhcnJhbmdlZCB0byBiZSB0aGUgbmVnYXRpb24gb2YgdGhl
IGNvcnJlc3BvbmRpbmcgT1BfdmFsdWVzLiBGb3IgdGhlCkBAIC0xODA2LDcgKzE1OTUsNyBAQCBj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbnVtYmVyID0gLWMgLSBFU0NfUkVGOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldmlvdXMgPSBjb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9Q
X1JFRjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dEFuZEFkdmFuY2UoY29kZSwgMCwgbnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
dDJCeXRlVmFsdWVBbmRBZHZhbmNlKGNvZGUsIG51bWJlcik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0aGUg
cmVzdCwgd2UgY2FuIG9idGFpbiB0aGUgT1AgdmFsdWUgYnkgbmVnYXRpbmcgdGhlIGVzY2FwZQpA
QCAtMTg0Miw3ICsxNjMxLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFj
a2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IGM7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBt
Y2xlbmd0aCA9IF9wY3JlX29yZDJ1dGY4KGMsIG1jYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWNsZW5ndGggPSBlbmNvZGVVVEY4KGMsIG1jYnVmZmVyKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSAob3B0aW9ucyAmIElnbm9yZUNhc2VP
cHRpb24pID8gT1BfQ0hBUl9JR05PUklOR19DQVNFIDogT1BfQ0hBUjsKICAgICAgICAgICAgICAg
ICAgICAgZm9yIChjID0gMDsgYyA8IG1jbGVuZ3RoOyBjKyspCkBAIC0xODkzLDkgKzE2ODIsNiBA
QCBGQUlMRUQ6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KLQotCiAvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgQ29tcGlsZSBzZXF1ZW5j
ZSBvZiBhbHRlcm5hdGl2ZXMgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTIzLDIwICsxNzA5LDIwIEBAIFJldHVybnM6
ICAgICAgdHJ1ZSBvbiBzdWNjZXNzCiAqLwogCiBzdGF0aWMgYm9vbAotY29tcGlsZUJyYWNrZXQo
aW50IG9wdGlvbnMsIGludCogYnJhY2tldHMsIHVzY2hhcioqIGNvZGVwdHIsCitjb21waWxlQnJh
Y2tldChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cywgdW5zaWduZWQgY2hhcioqIGNvZGVwdHIs
CiAgICAgY29uc3QgVUNoYXIqKiBwdHJwdHIsIGNvbnN0IFVDaGFyKiBwYXR0ZXJuRW5kLCBFcnJv
ckNvZGUqIGVycm9yY29kZXB0ciwgaW50IHNraXBieXRlcywKICAgICBpbnQqIGZpcnN0Ynl0ZXB0
ciwgaW50KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2QpCiB7CiAgICAgY29uc3QgVUNoYXIq
IHB0ciA9ICpwdHJwdHI7Ci0gICAgdXNjaGFyKiBjb2RlID0gKmNvZGVwdHI7Ci0gICAgdXNjaGFy
KiBsYXN0X2JyYW5jaCA9IGNvZGU7Ci0gICAgdXNjaGFyKiBzdGFydF9icmFja2V0ID0gY29kZTsK
KyAgICB1bnNpZ25lZCBjaGFyKiBjb2RlID0gKmNvZGVwdHI7CisgICAgdW5zaWduZWQgY2hhciog
bGFzdF9icmFuY2ggPSBjb2RlOworICAgIHVuc2lnbmVkIGNoYXIqIHN0YXJ0X2JyYWNrZXQgPSBj
b2RlOwogICAgIGludCBmaXJzdGJ5dGUgPSBSRVFfVU5TRVQ7CiAgICAgaW50IHJlcWJ5dGUgPSBS
RVFfVU5TRVQ7CiAgICAgCiAgICAgLyogT2Zmc2V0IGlzIHNldCB6ZXJvIHRvIG1hcmsgdGhhdCB0
aGlzIGJyYWNrZXQgaXMgc3RpbGwgb3BlbiAqLwogICAgIAotICAgIHB1dE9wY29kZVZhbHVlQXRP
ZmZzZXQoY29kZSwgMSwgMCk7CisgICAgcHV0TGlua1ZhbHVlQWxsb3daZXJvKGNvZGUgKyAxLCAw
KTsKICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkUgKyBza2lwYnl0ZXM7CiAgICAgCiAgICAgLyog
TG9vcCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSBicmFuY2ggKi8KQEAgLTIwMDIsOCArMTc4OCw4IEBA
IGNvbXBpbGVCcmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAgICAgICAgaWYgKHB0
ciA+PSBwYXR0ZXJuRW5kIHx8ICpwdHIgIT0gJ3wnKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3Ro
ID0gY29kZSAtIGxhc3RfYnJhbmNoOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IGludCBwcmV2X2xlbmd0aCA9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQobGFzdF9icmFuY2gsIDEp
OwotICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQobGFzdF9icmFuY2gsIDEs
IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50IHByZXZfbGVuZ3RoID0gZ2V0TGlua1ZhbHVl
QWxsb3daZXJvKGxhc3RfYnJhbmNoICsgMSk7CisgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVl
KGxhc3RfYnJhbmNoICsgMSwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBsZW5ndGggPSBwcmV2
X2xlbmd0aDsKICAgICAgICAgICAgICAgICBsYXN0X2JyYW5jaCAtPSBsZW5ndGg7CiAgICAgICAg
ICAgICB9IHdoaWxlIChsZW5ndGggPiAwKTsKQEAgLTIwMTEsNyArMTc5Nyw3IEBAIGNvbXBpbGVC
cmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAgICAgICAgICAgIC8qIEZpbGwgaW4g
dGhlIGtldCAqLwogICAgICAgICAgICAgCiAgICAgICAgICAgICAqY29kZSA9IE9QX0tFVDsKLSAg
ICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSwgY29kZSAtIHN0YXJ0X2Jy
YWNrZXQpOworICAgICAgICAgICAgcHV0TGlua1ZhbHVlKGNvZGUgKyAxLCBjb2RlIC0gc3RhcnRf
YnJhY2tldCk7CiAgICAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8qIFNldCB2YWx1ZXMgdG8gcGFzcyBiYWNrICovCkBAIC0yMDI5LDcg
KzE4MTUsNyBAQCBjb21waWxlQnJhY2tldChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0CiAgICAg
ICAgICB6ZXJvIG9mZnNldCB1bnRpbCBpdCBpcyBjbG9zZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0
byBkZXRlY3QgcmVjdXJzaW9uLiAqLwogICAgICAgICAKICAgICAgICAgKmNvZGUgPSBPUF9BTFQ7
Ci0gICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSwgY29kZSAtIGxhc3RfYnJh
bmNoKTsKKyAgICAgICAgcHV0TGlua1ZhbHVlKGNvZGUgKyAxLCBjb2RlIC0gbGFzdF9icmFuY2gp
OwogICAgICAgICBsYXN0X2JyYW5jaCA9IGNvZGU7CiAgICAgICAgIGNvZGUgKz0gMSArIExJTktf
U0laRTsKICAgICAgICAgcHRyKys7CkBAIC0yMDM3LDcgKzE4MjMsNiBAQCBjb21waWxlQnJhY2tl
dChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICogICAgICAgICAgQ2hlY2sgZm9yIGFuY2hvcmVkIGV4cHJlc3Npb24gICAgICAgICAqCiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjA1NSwy
NSArMTg0MCwyNSBAQCBBcmd1bWVudHM6CiAgIGJhY2tyZWZNYXAgICAgdGhlIGJhY2sgcmVmZXJl
bmNlIGJpdG1hcAogKi8KIAotc3RhdGljIGJvb2wgYnJhbmNoSXNBbmNob3JlZChjb25zdCB1c2No
YXIqIGNvZGUpCitzdGF0aWMgYm9vbCBicmFuY2hJc0FuY2hvcmVkKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGNvZGUpCiB7Ci0gICAgY29uc3QgdXNjaGFyKiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRP
cENvZGUoY29kZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc2NvZGUgPSBmaXJzdFNpZ25p
ZmljYW50T3Bjb2RlKGNvZGUpOwogICAgIGludCBvcCA9ICpzY29kZTsKIAogICAgIC8qIEJyYWNr
ZXRzICovCi0gICAgaWYgKG9wID49IE9QX0JSQSB8fCBvcCA9PSBPUF9BU1NFUlQgfHwgb3AgPT0g
T1BfT05DRSkKKyAgICBpZiAob3AgPj0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCkKICAgICAg
ICAgcmV0dXJuIGJyYWNrZXRJc0FuY2hvcmVkKHNjb2RlKTsKIAogICAgIC8qIENoZWNrIGZvciBl
eHBsaWNpdCBhbmNob3JpbmcgKi8gICAgCiAgICAgcmV0dXJuIG9wID09IE9QX0NJUkM7CiB9CiAK
LXN0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVzY2hhciogY29kZSkKK3N0YXRp
YyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUpCiB7CiAg
ICAgZG8gewogICAgICAgICBpZiAoIWJyYW5jaElzQW5jaG9yZWQoY29kZSArIDEgKyBMSU5LX1NJ
WkUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2RlICs9IGdldE9wY29k
ZVZhbHVlQXRPZmZzZXQoY29kZSwgMSk7CisgICAgICAgIGNvZGUgKz0gZ2V0TGlua1ZhbHVlKGNv
ZGUgKyAxKTsKICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOyAgIC8qIExvb3AgZm9yIGVh
Y2ggYWx0ZXJuYXRpdmUgKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIxMDAsMjIgKzE4ODUs
MjIgQEAgQXJndW1lbnRzOgogICBiYWNrcmVmTWFwICAgIHRoZSBiYWNrIHJlZmVyZW5jZSBiaXRt
YXAKICovCiAKLXN0YXRpYyBib29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVzY2hhciog
Y29kZSwgdW5zaWduZWQgY2FwdHVyZU1hcCwgdW5zaWduZWQgYmFja3JlZk1hcCkKK3N0YXRpYyBi
b29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIHVuc2ln
bmVkIGNhcHR1cmVNYXAsIHVuc2lnbmVkIGJhY2tyZWZNYXApCiB7Ci0gICAgY29uc3QgdXNjaGFy
KiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29kZSk7CisgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3Bjb2RlKGNvZGUpOwogICAgIGludCBv
cCA9ICpzY29kZTsKICAgICAKICAgICAvKiBDYXB0dXJpbmcgYnJhY2tldHMgKi8KICAgICBpZiAo
b3AgPiBPUF9CUkEpIHsKICAgICAgICAgaW50IGNhcHR1cmVOdW0gPSBvcCAtIE9QX0JSQTsKICAg
ICAgICAgaWYgKGNhcHR1cmVOdW0gPiBFWFRSQUNUX0JBU0lDX01BWCkKLSAgICAgICAgICAgIGNh
cHR1cmVOdW0gPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc2NvZGUsIDIgKyBMSU5LX1NJ
WkUpOworICAgICAgICAgICAgY2FwdHVyZU51bSA9IGdldDJCeXRlVmFsdWUoc2NvZGUgKyAyICsg
TElOS19TSVpFKTsKICAgICAgICAgaW50IGJyYWNrZXRNYXNrID0gKGNhcHR1cmVOdW0gPCAzMikg
PyAoMSA8PCBjYXB0dXJlTnVtKSA6IDE7CiAgICAgICAgIHJldHVybiBicmFja2V0TmVlZHNMaW5l
U3RhcnQoc2NvZGUsIGNhcHR1cmVNYXAgfCBicmFja2V0TWFzaywgYmFja3JlZk1hcCk7CiAgICAg
fQogICAgIAogICAgIC8qIE90aGVyIGJyYWNrZXRzICovCi0gICAgaWYgKG9wID09IE9QX0JSQSB8
fCBvcCA9PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05DRSkKKyAgICBpZiAob3AgPT0gT1BfQlJB
IHx8IG9wID09IE9QX0FTU0VSVCkKICAgICAgICAgcmV0dXJuIGJyYWNrZXROZWVkc0xpbmVTdGFy
dChzY29kZSwgY2FwdHVyZU1hcCwgYmFja3JlZk1hcCk7CiAgICAgCiAgICAgLyogLiogbWVhbnMg
InN0YXJ0IGF0IHN0YXJ0IG9yIGFmdGVyIFxuIiBpZiBpdCBpc24ndCBpbiBicmFja2V0cyB0aGF0
CkBAIC0yMTI4LDEyICsxOTEzLDEyIEBAIHN0YXRpYyBib29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0
KGNvbnN0IHUKICAgICByZXR1cm4gb3AgPT0gT1BfQ0lSQzsKIH0KIAotc3RhdGljIGJvb2wgYnJh
Y2tldE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVzY2hhciogY29kZSwgdW5zaWduZWQgY2FwdHVyZU1h
cCwgdW5zaWduZWQgYmFja3JlZk1hcCkKK3N0YXRpYyBib29sIGJyYWNrZXROZWVkc0xpbmVTdGFy
dChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25l
ZCBiYWNrcmVmTWFwKQogewogICAgIGRvIHsKICAgICAgICAgaWYgKCFicmFuY2hOZWVkc0xpbmVT
dGFydChjb2RlICsgMSArIExJTktfU0laRSwgY2FwdHVyZU1hcCwgYmFja3JlZk1hcCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvZGUgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9m
ZnNldChjb2RlLCAxKTsKKyAgICAgICAgY29kZSArPSBnZXRMaW5rVmFsdWUoY29kZSArIDEpOwog
ICAgIH0gd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7ICAvKiBMb29wIGZvciBlYWNoIGFsdGVybmF0
aXZlICovCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMTU4LDkgKzE5NDMsOSBAQCBBcmd1bWVu
dHM6CiBSZXR1cm5zOiAgICAgLTEgb3IgdGhlIGZpeGVkIGZpcnN0IGNoYXIKICovCiAKLXN0YXRp
YyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIoY29uc3QgdXNjaGFyKiBjb2Rl
LCBib29sIGluYXNzZXJ0KQorc3RhdGljIGludCBicmFuY2hGaW5kRmlyc3RBc3NlcnRlZENoYXJh
Y3Rlcihjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCBib29sIGluYXNzZXJ0KQogewotICAgIGNv
bnN0IHVzY2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3BDb2RlU2tpcHBpbmdBc3NlcnRp
b25zKGNvZGUpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNjb2RlID0gZmlyc3RTaWduaWZp
Y2FudE9wY29kZVNraXBwaW5nQXNzZXJ0aW9ucyhjb2RlKTsKICAgICBpbnQgb3AgPSAqc2NvZGU7
CiAgICAgCiAgICAgaWYgKG9wID49IE9QX0JSQSkKQEAgLTIxNzIsNyArMTk1Nyw2IEBAIHN0YXRp
YyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWMKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIE9QX0JSQToKICAgICAgICAgY2FzZSBPUF9BU1NFUlQ6Ci0gICAgICAgIGNhc2UgT1Bf
T05DRToKICAgICAgICAgICAgIHJldHVybiBicmFja2V0RmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0
ZXIoc2NvZGUsIG9wID09IE9QX0FTU0VSVCk7CiAKICAgICAgICAgY2FzZSBPUF9FWEFDVDoKQEAg
LTIxOTEsNyArMTk3NSw3IEBAIHN0YXRpYyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFy
YWMKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFj
dGVyKGNvbnN0IHVzY2hhciogY29kZSwgYm9vbCBpbmFzc2VydCkKK3N0YXRpYyBpbnQgYnJhY2tl
dEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJv
b2wgaW5hc3NlcnQpCiB7CiAgICAgaW50IGMgPSAtMTsKICAgICBkbyB7CkBAIC0yMjAyLDcgKzE5
ODYsNyBAQCBzdGF0aWMgaW50IGJyYWNrZXRGaW5kRmlyc3RBc3NlcnRlZENoYXJhCiAgICAgICAg
ICAgICBjID0gZDsKICAgICAgICAgZWxzZSBpZiAoYyAhPSBkKQogICAgICAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSk7Cisg
ICAgICAgIGNvZGUgKz0gZ2V0TGlua1ZhbHVlKGNvZGUgKyAxKTsKICAgICB9IHdoaWxlICgqY29k
ZSA9PSBPUF9BTFQpOwogICAgIHJldHVybiBjOwogfQpAQCAtMjIyMiw3ICsyMDA2LDcgQEAgc3Rh
dGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgIGludCBsYXN0aXRlbWxl
bmd0aCA9IDA7CiAgICAgdW5zaWduZWQgYnJhc3RhY2twdHIgPSAwOwogICAgIGludCBicmFzdGFj
a1tCUkFTVEFDS19TSVpFXTsKLSAgICB1c2NoYXIgYnJhbGVuc3RhY2tbQlJBU1RBQ0tfU0laRV07
CisgICAgdW5zaWduZWQgY2hhciBicmFsZW5zdGFja1tCUkFTVEFDS19TSVpFXTsKICAgICBpbnQg
YnJhY291bnQgPSAwOwogICAgIAogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSAoY29uc3QgVUNoYXIq
KShwYXR0ZXJuIC0gMSk7CkBAIC0yMjM3LDcgKzIwMjEsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0
ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgY2hhcmFjdGVyIHR5cGUuICovCiAK
ICAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBl
KCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJy
YWNvdW50LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgCkBAIC0yMjQ4LDgg
KzIwMzIsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoYyA+IDEyNykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKSBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBranNfcGNyZV91dGY4X3RhYmxlMV9z
aXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0ga2pzX3BjcmVf
dXRmOF90YWJsZTFbaV0pIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9
IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aXRlbWxlbmd0aCArPSBpOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0yMjcxLDggKzIwNTUsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0
ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZudW0gPiBj
ZC50b3BfYmFja3JlZikKICAgICAgICAgICAgICAgICAgICAgICAgIGNkLnRvcF9iYWNrcmVmID0g
cmVmbnVtOwogICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMjsgICAvKiBGb3Igc2luZ2xl
IGJhY2sgcmVmZXJlbmNlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVja05l
eHRDaGFyKHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIgKyAy
LCBwYXR0ZXJuRW5kKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZF9yZXBl
YXRfY291bnRzKHB0ciArIDIsICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29kZSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVja05leHRDaGFyKHB0ciwgcGF0dGVy
bkVuZCwgJ3snKSAmJiBpc0NvdW50ZWRSZXBlYXQocHRyICsgMiwgcGF0dGVybkVuZCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsgMiwgJm1p
blJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChlcnJvcmNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5SZXBlYXRzID09IDAgJiYgKG1heFJl
cGVhdHMgPT0gMSB8fCBtYXhSZXBlYXRzID09IC0xKSkgfHwKQEAgLTIzMDMsOSArMjA4Nyw5IEBA
IHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICBj
bGFzcywgb3IgYmFjayByZWZlcmVuY2UuICovCiAKICAgICAgICAgICAgIGNhc2UgJ3snOgotICAg
ICAgICAgICAgICAgIGlmICghaXNfY291bnRlZF9yZXBlYXQocHRyKzEsIHBhdHRlcm5FbmQpKQor
ICAgICAgICAgICAgICAgIGlmICghaXNDb3VudGVkUmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQp
KQogICAgICAgICAgICAgICAgICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAgICAgICAgICAgICAg
IHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRz
LCAmZXJyb3Jjb2RlKTsKKyAgICAgICAgICAgICAgICBwdHIgPSByZWFkUmVwZWF0Q291bnRzKHB0
ciArIDEsICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29kZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CiAgICAgICAgICAgICAgICAgCkBAIC0yMzcwLDcgKzIxNTQsNyBAQCBzdGF0aWMgaW50IGNhbGN1
bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZv
ciBlc2NhcGVzICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNj
YXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJy
b3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJy
b3Jjb2RlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAg
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNDEwLDcgKzIxOTQsNyBAQCBzdGF0aWMgaW50IGNh
bGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUNoYXIgY29uc3QgKmh5cHRyID0gcHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAnXFwnKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBi
cmFjb3VudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjaGVj
a0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKC1kID09IEVTQ19iKQpAQCAtMjQzMyw3ICsyMjE3LDcgQEAg
c3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGQgPiAyNTUgfHwgKGlnbm9yZUNhc2UgJiYgZCA+IDEyNykp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzY2hhciBidWZmZXJbNl07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzZdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYXNzX3V0ZjgpICAgICAgICAg
LyogQWxsb3cgZm9yIFhDTEFTUyBvdmVyaGVhZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4
ID0gdHJ1ZTsKQEAgLTI0NTAsNyArMjIzNCw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGls
ZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBv
Y2MsIG9jZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYyA9IGM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3JpZ2QgPSBkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGdldF9vdGhlcmNhc2VfcmFu
Z2UoJmNjLCBvcmlnZCwgJm9jYywgJm9jZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChnZXRPdGhlcmNhc2VSYW5nZSgmY2MsIG9yaWdkLCAmb2NjLCAmb2Nk
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvY2MgPj0g
YyAmJiBvY2QgPD0gZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7ICAgLyogU2tpcCBlbWJlZGRlZCAqLwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMjQ2NywxNCArMjI1MSwxNCBAQCBzdGF0aWMgaW50IGNh
bGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
QW4gZXh0cmEgaXRlbSBpcyBuZWVkZWQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5n
dGggKz0gMSArIF9wY3JlX29yZDJ1dGY4KG9jYywgYnVmZmVyKSArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChvY2MgPT0gb2NkKSA/IDAgOiBfcGNyZV9vcmQydXRm
OChvY2QsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCArPSAxICsgZW5jb2RlVVRGOChvY2MsIGJ1ZmZlcikgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgob2NjID09IG9jZCkgPyAwIDogZW5jb2RlVVRGOChv
Y2QsIGJ1ZmZlcikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbGVuZ3RoIG9m
IHRoZSAocG9zc2libHkgZXh0ZW5kZWQpIHJhbmdlICovCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMSAr
IF9wY3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikgKyBfcGNyZV9vcmQydXRmOChkLCBidWZmZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMSArIGVuY29kZVVURjgo
YywgYnVmZmVyKSArIGVuY29kZVVURjgoZCwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yNDg2LDE0ICsyMjcwLDE0IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29t
cGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID4g
MjU1IHx8IChpZ25vcmVDYXNlICYmIGMgPiAxMjcpKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2NoYXIgYnVmZmVyWzZdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3Nfb3B0Y291bnQgPSAxMDsgICAgIC8qIEVuc3VyZSA+IDEgKi8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGFzc191dGY4KSAgICAgICAgIC8qIEFsbG93
IGZvciBYQ0xBU1Mgb3ZlcmhlYWQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gTElOS19TSVpF
ICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZW5ndGggKz0gKGlnbm9yZUNhc2UgPyAyIDogMSkgKiAoMSArIF9w
Y3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggKz0gKGlnbm9yZUNhc2UgPyAyIDogMSkgKiAoMSArIGVuY29kZVVURjgoYywgYnVm
ZmVyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNTE5LDggKzIzMDMsOCBAQCBzdGF0
aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAg
IC8qIEEgcmVwZWF0IG5lZWRzIGVpdGhlciAxIG9yIDUgYnl0ZXMuIElmIGl0IGlzIGEgcG9zc2Vz
c2l2ZSBxdWFudGlmaWVyLAogICAgICAgICAgICAgICAgICAgICAgd2UgYWxzbyBuZWVkIGV4dHJh
IGZvciB3cmFwcGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gYSBzdWItcGF0dGVybi4gKi8KICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVja05leHRD
aGFyKHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIrMiwgcGF0
dGVybkVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0X2Nv
dW50cyhwdHIrMiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAn
eycpICYmIGlzQ291bnRlZFJlcGVhdChwdHIgKyAyLCBwYXR0ZXJuRW5kKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcHRyID0gcmVhZFJlcGVhdENvdW50cyhwdHIgKyAyLCAmbWluUmVwZWF0
cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGVycm9yY29kZSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWluUmVwZWF0cyA9PSAwICYmIChtYXhSZXBl
YXRzID09IDEgfHwgbWF4UmVwZWF0cyA9PSAtMSkpIHx8CkBAIC0yNTQ5LDEwICsyMzMzLDEwIEBA
IHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoc2FmZWx5Q2hlY2tOZXh0Q2hhcihwdHIsIHBhdHRlcm5F
bmQsICc/JykpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjID0gKHB0ciArIDIgPCBw
YXR0ZXJuRW5kID8gcHRyWzJdIDogMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBOb24tcmVmZXJlbmNpbmcgZ3JvdXBzIGFuZCBsb29rYWhlYWRzIGp1c3QgbW92ZSB0aGUgcG9p
bnRlciBvbiwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gYmVoYXZlIGxp
a2UgYSBub24tc3BlY2lhbCBicmFja2V0LCBleGNlcHQgdGhhdCB0aGV5IGRvbid0IGluY3JlbWVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY291bnQgb2YgZXh0cmFjdGluZyBi
cmFja2V0cy4gRGl0dG8gZm9yIHRoZSAib25jZSBvbmx5IiBicmFja2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGljaCBpcyBpbiBQZXJsIGZyb20gdmVyc2lvbiA1LjAwNS4gKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbi1yZWZlcmVuY2luZyBncm91cHMgYW5kIGxv
b2thaGVhZHMganVzdCBtb3ZlIHRoZSBwb2ludGVyIG9uLCBhbmQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGVuIGJlaGF2ZSBsaWtlIGEgbm9uLXNwZWNpYWwgYnJhY2tldCwgZXhjZXB0IHRo
YXQgdGhleSBkb24ndCBpbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY291
bnQgb2YgZXh0cmFjdGluZyBicmFja2V0cy4gRGl0dG8gZm9yIHRoZSAib25jZSBvbmx5IiBicmFj
a2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGluIFBlcmwgZnJvbSB2ZXJz
aW9uIDUuMDA1LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnOic6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc9JzoK
QEAgLTI1NjAsMTAgKzIzNDQsMTAgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRl
cm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArPSAyOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgbG9vcCBjaGVja2luZyB2YWxpZCBv
cHRpb25zIHVudGlsICkgaXMgbWV0LiBBbnl0aGluZyBlbHNlIGlzIGFuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yLiBJZiB3ZSBhcmUgd2l0aG91dCBhbnkgYnJhY2tldHMsIGku
ZS4gYXQgdG9wIGxldmVsLCB0aGUgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0IGFzIGlmIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucywgc28gbWFzc2FnZSB0aGUgb3B0
aW9ucyBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBm
b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwgNS4wMDQuICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBFbHNlIGxvb3AgY2hlY2tpbmcgdmFsaWQgb3B0aW9ucyB1bnRpbCAp
IGlzIG1ldC4gQW55dGhpbmcgZWxzZSBpcyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yLiBJZiB3ZSBhcmUgd2l0aG91dCBhbnkgYnJhY2tldHMsIGkuZS4gYXQgdG9wIGxldmVsLCB0
aGUgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY3QgYXMgaWYgc3BlY2lmaWVk
IGluIHRoZSBvcHRpb25zLCBzbyBtYXNzYWdlIHRoZSBvcHRpb25zIGltbWVkaWF0ZWx5LgorICAg
ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkg
d2l0aCBQZXJsIDUuMDA0LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcmNvZGUgPSBFUlIxMjsKQEAgLTI2MTYsMTEgKzI0MDAsMTEgQEAgc3RhdGljIGludCBjYWxj
dWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgZHVwbGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvKiBMZWF2ZSBwdHIgYXQgdGhlIGZpbmFsIGNoYXI7IGZvciByZWFkX3JlcGVhdF9jb3Vu
dHMgdGhpcyBoYXBwZW5zCisgICAgICAgICAgICAgICAgLyogTGVhdmUgcHRyIGF0IHRoZSBmaW5h
bCBjaGFyOyBmb3IgcmVhZFJlcGVhdENvdW50cyB0aGlzIGhhcHBlbnMKICAgICAgICAgICAgICAg
ICAgYXV0b21hdGljYWxseTsgZm9yIHRoZSBvdGhlcnMgd2UgbmVlZCBhbiBpbmNyZW1lbnQuICov
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKChwdHIgKyAxIDwgcGF0dGVy
bkVuZCkgJiYgKGMgPSBwdHJbMV0pID09ICd7JyAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIrMiwg
cGF0dGVybkVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291
bnRzKHB0cisyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOworICAgICAg
ICAgICAgICAgIGlmICgocHRyICsgMSA8IHBhdHRlcm5FbmQpICYmIChjID0gcHRyWzFdKSA9PSAn
eycgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDIsIHBhdHRlcm5FbmQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsgMiwgJm1pblJlcGVhdHMsICZt
YXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gJyonKSB7CkBAIC0yNjgzLDggKzI0NjcsOCBAQCBzdGF0aWMgaW50IGNh
bGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAKICAgICAgICAgICAgICAgICBpZiAoYyA+IDEy
NykgewogICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKQorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwga2pzX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0ga2pzX3BjcmVfdXRmOF90YWJsZTFbaV0pCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCArPSBpOwogICAgICAgICAgICAgICAgICAgICBsYXN0aXRlbWxlbmd0aCArPSBpOwpAQCAt
MjcyMCw5ICsyNTA0LDkgQEAgUmV0dXJuczogICAgICAgIHBvaW50ZXIgdG8gY29tcGlsZWQgZGF0
YQogICAgICAgICAgICAgICAgIHdpdGggZXJyb3JwdHIgYW5kIGVycm9yb2Zmc2V0IHNldAogKi8K
IAotc3RhdGljIEpTUmVnRXhwKiByZXR1cm5FcnJvcihFcnJvckNvZGUgZXJyb3Jjb2RlLCBjb25z
dCBjaGFyKiogZXJyb3JwdHIpCitzdGF0aWMgaW5saW5lIEpTUmVnRXhwKiByZXR1cm5FcnJvcihF
cnJvckNvZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCiB7Ci0gICAgKmVycm9y
cHRyID0gZXJyb3JfdGV4dChlcnJvcmNvZGUpOworICAgICplcnJvcnB0ciA9IGVycm9yVGV4dChl
cnJvcmNvZGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNzU3LDcgKzI1NDEsNyBAQCBKU1Jl
Z0V4cCoganNSZWdFeHBDb21waWxlKGNvbnN0IFVDaGFyKiBwCiAgICAgLyogVGhlIHN0YXJ0aW5n
IHBvaW50cyBvZiB0aGUgbmFtZS9udW1iZXIgdHJhbnNsYXRpb24gdGFibGUgYW5kIG9mIHRoZSBj
b2RlIGFyZQogICAgICBwYXNzZWQgYXJvdW5kIGluIHRoZSBjb21waWxlIGRhdGEgYmxvY2suICov
CiAgICAgCi0gICAgY29uc3QgdXNjaGFyKiBjb2RlU3RhcnQgPSAoY29uc3QgdXNjaGFyKikocmUg
KyAxKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlU3RhcnQgPSAoY29uc3QgdW5zaWdu
ZWQgY2hhciopKHJlICsgMSk7CiAgICAgY2Quc3RhcnRfY29kZSA9IGNvZGVTdGFydDsKICAgICBj
ZC5zdGFydF9wYXR0ZXJuID0gKGNvbnN0IFVDaGFyKilwYXR0ZXJuOwogICAgIApAQCAtMjc2Nyw3
ICsyNTUxLDcgQEAgSlNSZWdFeHAqIGpzUmVnRXhwQ29tcGlsZShjb25zdCBVQ2hhciogcAogICAg
IAogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSAoY29uc3QgVUNoYXIqKXBhdHRlcm47CiAgICAgY29u
c3QgVUNoYXIqIHBhdHRlcm5FbmQgPSBwYXR0ZXJuICsgcGF0dGVybkxlbmd0aDsKLSAgICB1c2No
YXIqIGNvZGUgPSAodXNjaGFyKiljb2RlU3RhcnQ7CisgICAgdW5zaWduZWQgY2hhciogY29kZSA9
ICh1bnNpZ25lZCBjaGFyKiljb2RlU3RhcnQ7CiAgICAgaW50IGZpcnN0Ynl0ZSwgcmVxYnl0ZTsK
ICAgICBpbnQgYnJhY2tldENvdW50ID0gMDsKICAgICBpZiAoIWNkLm5lZWRPdXRlckJyYWNrZXQp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMuY3BwCShyZXZpc2lvbiAyODcxMSkKKysrIEph
dmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCAr
NzMsOCBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAgICAgLyogRnVuY3Rpb24gYXJndW1lbnRzIHRo
YXQgbWF5IGNoYW5nZSAqLwogICAgIHN0cnVjdCB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzdWJq
ZWN0UHRyOwotICAgICAgICBjb25zdCB1c2NoYXIqIGluc3RydWN0aW9uUHRyOwotICAgICAgICBp
bnQgb2Zmc2V0X3RvcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaW5zdHJ1Y3Rpb25Q
dHI7CisgICAgICAgIGludCBvZmZzZXRUb3A7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzdWJwYXR0
ZXJuU3RhcnQ7CiAgICAgfSBhcmdzOwogICAgIApAQCAtODMsMTIgKzgzLDEyIEBAIHN0cnVjdCBN
YXRjaEZyYW1lIHsKICAgICAgc3RhY2stYmFzZWQgbG9jYWwgdmFyaWFibGVzIGFyZSBub3Qgc2Fm
ZSB0byB1c2UuICBJbnN0ZWFkIHdlIGhhdmUgdG8KICAgICAgc3RvcmUgbG9jYWwgdmFyaWFibGVz
IG9uIHRoZSBjdXJyZW50IE1hdGNoRnJhbWUuICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgY29u
c3QgdXNjaGFyKiBkYXRhOwotICAgICAgICBjb25zdCB1c2NoYXIqIHN0YXJ0T2ZSZXBlYXRpbmdC
cmFja2V0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBzdGFydE9mUmVwZWF0aW5nQnJhY2tldDsKICAgICAgICAgY29uc3Qg
VUNoYXIqIHN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbjsgLy8gU2V2ZXJhbCBpbnN0cnV0
aW9ucyBzdGFzaCBhd2F5IGEgc3ViamVjdFB0ciBoZXJlIGZvciBsYXRlciBjb21wYXJlCi0gICAg
ICAgIGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2U7CiAgICAgICAg
IAotICAgICAgICBpbnQgcmVwZWF0X290aGVyY2FzZTsKKyAgICAgICAgaW50IHJlcGVhdE90aGVy
Y2FzZTsKICAgICAgICAgCiAgICAgICAgIGludCBjdHlwZTsKICAgICAgICAgaW50IGZjOwpAQCAt
OTcsOSArOTcsOSBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAgICAgICAgIGludCBtYXg7CiAgICAg
ICAgIGludCBudW1iZXI7CiAgICAgICAgIGludCBvZmZzZXQ7Ci0gICAgICAgIGludCBzYXZlX29m
ZnNldDE7Ci0gICAgICAgIGludCBzYXZlX29mZnNldDI7Ci0gICAgICAgIGludCBzYXZlX29mZnNl
dDM7CisgICAgICAgIGludCBzYXZlT2Zmc2V0MTsKKyAgICAgICAgaW50IHNhdmVPZmZzZXQyOwor
ICAgICAgICBpbnQgc2F2ZU9mZnNldDM7CiAgICAgICAgIAogICAgICAgICBjb25zdCBVQ2hhciog
c3VicGF0dGVyblN0YXJ0OwogICAgIH0gbG9jYWxzOwpAQCAtMTA5LDI0ICsxMDksMzggQEAgc3Ry
dWN0IE1hdGNoRnJhbWUgewogZG9pbmcgdHJhZGl0aW9uYWwgTkZBIG1hdGNoaW5nLCBzbyB0aGF0
IHRoZXkgYXJlIHRocmVhZC1zYWZlLiAqLwogCiBzdHJ1Y3QgTWF0Y2hEYXRhIHsKLSAgaW50KiAg
IG9mZnNldF92ZWN0b3I7ICAgICAgICAgLyogT2Zmc2V0IHZlY3RvciAqLwotICBpbnQgICAgb2Zm
c2V0X2VuZDsgICAgICAgICAgICAvKiBPbmUgcGFzdCB0aGUgZW5kICovCi0gIGludCAgICBvZmZz
ZXRfbWF4OyAgICAgICAgICAgIC8qIFRoZSBtYXhpbXVtIHVzYWJsZSBmb3IgcmV0dXJuIGRhdGEg
Ki8KLSAgYm9vbCAgIG9mZnNldF9vdmVyZmxvdzsgICAgICAgLyogU2V0IGlmIHRvbyBtYW55IGV4
dHJhY3Rpb25zICovCi0gIGNvbnN0IFVDaGFyKiAgc3RhcnRfc3ViamVjdDsgICAgICAgICAvKiBT
dGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KLSAgY29uc3QgVUNoYXIqICBlbmRfc3ViamVj
dDsgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KLSAgY29uc3QgVUNo
YXIqICBlbmRfbWF0Y2hfcHRyOyAgICAgICAgIC8qIFN1YmplY3QgcG9zaXRpb24gYXQgZW5kIG1h
dGNoICovCi0gIGludCAgICBlbmRfb2Zmc2V0X3RvcDsgICAgICAgIC8qIEhpZ2h3YXRlciBtYXJr
IGF0IGVuZCBvZiBtYXRjaCAqLworICBpbnQqICAgb2Zmc2V0VmVjdG9yOyAgICAgICAgIC8qIE9m
ZnNldCB2ZWN0b3IgKi8KKyAgaW50ICAgIG9mZnNldEVuZDsgICAgICAgICAgICAvKiBPbmUgcGFz
dCB0aGUgZW5kICovCisgIGludCAgICBvZmZzZXRNYXg7ICAgICAgICAgICAgLyogVGhlIG1heGlt
dW0gdXNhYmxlIGZvciByZXR1cm4gZGF0YSAqLworICBib29sICAgb2Zmc2V0T3ZlcmZsb3c7ICAg
ICAgIC8qIFNldCBpZiB0b28gbWFueSBleHRyYWN0aW9ucyAqLworICBjb25zdCBVQ2hhciogIHN0
YXJ0U3ViamVjdDsgICAgICAgICAvKiBTdGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAg
Y29uc3QgVUNoYXIqICBlbmRTdWJqZWN0OyAgICAgICAgICAgLyogRW5kIG9mIHRoZSBzdWJqZWN0
IHN0cmluZyAqLworICBjb25zdCBVQ2hhciogIGVuZE1hdGNoUHRyOyAgICAgICAgIC8qIFN1Ympl
Y3QgcG9zaXRpb24gYXQgZW5kIG1hdGNoICovCisgIGludCAgICBlbmRPZmZzZXRUb3A7ICAgICAg
ICAvKiBIaWdod2F0ZXIgbWFyayBhdCBlbmQgb2YgbWF0Y2ggKi8KICAgYm9vbCAgIG11bHRpbGlu
ZTsKICAgYm9vbCAgIGlnbm9yZUNhc2U7CiB9OwogCiAvKiBOb24tZXJyb3IgcmV0dXJucyBmcm9t
IHRoZSBtYXRjaCgpIGZ1bmN0aW9uLiBFcnJvciByZXR1cm5zIGFyZSBleHRlcm5hbGx5Ci1kZWZp
bmVkIFBDUkVfRVJST1JfeHh4IGNvZGVzLCB3aGljaCBhcmUgYWxsIG5lZ2F0aXZlLiAqLworZGVm
aW5lZCBlcnJvciBjb2Rlcywgd2hpY2ggYXJlIGFsbCBuZWdhdGl2ZS4gKi8KIAogI2RlZmluZSBN
QVRDSF9NQVRDSCAgICAgICAgMQogI2RlZmluZSBNQVRDSF9OT01BVENIICAgICAgMAogCisvKiBU
aGUgbWF4aW11bSByZW1haW5pbmcgbGVuZ3RoIG9mIHN1YmplY3Qgd2UgYXJlIHByZXBhcmVkIHRv
IHNlYXJjaCBmb3IgYQorcmVxX2J5dGUgbWF0Y2guICovCisKKyNkZWZpbmUgUkVRX0JZVEVfTUFY
IDEwMDAKKworLyogVGhlIGJlbG93IGxpbWl0IHJlc3RyaWN0cyB0aGUgbnVtYmVyIG9mIHJlY3Vy
c2l2ZSBtYXRjaCBjYWxscyBpbiBvcmRlciB0bworbGltaXQgdGhlIG1heGltdW0gYW1vdW50IG9m
IHN0b3JhZ2UuCisgCitUaGlzIGxpbWl0IGlzIHRpZWQgdG8gdGhlIHNpemUgb2YgTWF0Y2hGcmFt
ZS4gIFJpZ2h0IG5vdyB3ZSBhbGxvdyBQQ1JFIHRvIGFsbG9jYXRlIHVwCit0byBNQVRDSF9SRUNV
UlNJT05fTElNSVQgLSAxNiAqIHNpemVvZihNYXRjaEZyYW1lKSBieXRlcyBvZiAic3RhY2siIHNw
YWNlIGJlZm9yZSB3ZSBnaXZlIHVwLgorQ3VycmVudGx5IHRoYXQncyAxMDAwMDAgLSAxNiAqICgy
MyAqIDQpICB+IDkwTUIuICovCisKKyNkZWZpbmUgTUFUQ0hfUkVDVVJTSU9OX0xJTUlUIDEwMDAw
MAorCiAjaWZkZWYgREVCVUcKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqICAgICAgICBEZWJ1Z2dpbmcgZnVuY3Rpb24gdG8gcHJpbnQgY2hhcnMg
ICAgICAgKgpAQCAtMTM4LDE0ICsxNTIsMTQgQEAgc3ViamVjdCBpZiB0aGUgcmVxdWVzdGVkLgog
QXJndW1lbnRzOgogICBwICAgICAgICAgICBwb2ludHMgdG8gY2hhcmFjdGVycwogICBsZW5ndGgg
ICAgICBudW1iZXIgdG8gcHJpbnQKLSAgaXNfc3ViamVjdCAgdHJ1ZSBpZiBwcmludGluZyBmcm9t
IHdpdGhpbiBtZC5zdGFydF9zdWJqZWN0Ci0gIG1kICAgICAgICAgIHBvaW50ZXIgdG8gbWF0Y2hp
bmcgZGF0YSBibG9jaywgaWYgaXNfc3ViamVjdCBpcyB0cnVlCisgIGlzU3ViamVjdCAgdHJ1ZSBp
ZiBwcmludGluZyBmcm9tIHdpdGhpbiBtZC5zdGFydFN1YmplY3QKKyAgbWQgICAgICAgICAgcG9p
bnRlciB0byBtYXRjaGluZyBkYXRhIGJsb2NrLCBpZiBpc1N1YmplY3QgaXMgdHJ1ZQogKi8KIAot
c3RhdGljIHZvaWQgcGNoYXJzKGNvbnN0IFVDaGFyKiBwLCBpbnQgbGVuZ3RoLCBib29sIGlzX3N1
YmplY3QsIGNvbnN0IE1hdGNoRGF0YSYgbWQpCitzdGF0aWMgdm9pZCBwY2hhcnMoY29uc3QgVUNo
YXIqIHAsIGludCBsZW5ndGgsIGJvb2wgaXNTdWJqZWN0LCBjb25zdCBNYXRjaERhdGEmIG1kKQog
ewotICAgIGlmIChpc19zdWJqZWN0ICYmIGxlbmd0aCA+IG1kLmVuZF9zdWJqZWN0IC0gcCkKLSAg
ICAgICAgbGVuZ3RoID0gbWQuZW5kX3N1YmplY3QgLSBwOworICAgIGlmIChpc1N1YmplY3QgJiYg
bGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHApCisgICAgICAgIGxlbmd0aCA9IG1kLmVuZFN1Ympl
Y3QgLSBwOwogICAgIHdoaWxlIChsZW5ndGgtLSA+IDApIHsKICAgICAgICAgaW50IGM7CiAgICAg
ICAgIGlmIChpc3ByaW50KGMgPSAqKHArKykpKQpAQCAtMTU4LDggKzE3Miw2IEBAIHN0YXRpYyB2
b2lkIHBjaGFycyhjb25zdCBVQ2hhciogcCwgaW50IGwKIH0KICNlbmRpZgogCi0KLQogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAg
TWF0Y2ggYSBiYWNrLXJlZmVyZW5jZSAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTc2LDEyICsxODgsMTIgQEAg
QXJndW1lbnRzOgogUmV0dXJuczogICAgICB0cnVlIGlmIG1hdGNoZWQKICovCiAKLXN0YXRpYyBi
b29sIG1hdGNoX3JlZihpbnQgb2Zmc2V0LCBjb25zdCBVQ2hhciogc3ViamVjdFB0ciwgaW50IGxl
bmd0aCwgY29uc3QgTWF0Y2hEYXRhJiBtZCkKK3N0YXRpYyBib29sIG1hdGNoUmVmKGludCBvZmZz
ZXQsIGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBpbnQgbGVuZ3RoLCBjb25zdCBNYXRjaERhdGEm
IG1kKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gbWQuc3RhcnRfc3ViamVjdCArIG1kLm9mZnNl
dF92ZWN0b3Jbb2Zmc2V0XTsKKyAgICBjb25zdCBVQ2hhciogcCA9IG1kLnN0YXJ0U3ViamVjdCAr
IG1kLm9mZnNldFZlY3RvcltvZmZzZXRdOwogICAgIAogI2lmZGVmIERFQlVHCi0gICAgaWYgKHN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgaWYgKHN1YmplY3RQdHIgPj0gbWQuZW5k
U3ViamVjdCkKICAgICAgICAgcHJpbnRmKCJtYXRjaGluZyBzdWJqZWN0IDxudWxsPiIpOwogICAg
IGVsc2UgewogICAgICAgICBwcmludGYoIm1hdGNoaW5nIHN1YmplY3QgIik7CkBAIC0xOTQsNyAr
MjA2LDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hfcmVmKGludCBvZmZzZXQsIGNvbnN0IAogICAgIAog
ICAgIC8qIEFsd2F5cyBmYWlsIGlmIG5vdCBlbm91Z2ggY2hhcmFjdGVycyBsZWZ0ICovCiAgICAg
Ci0gICAgaWYgKGxlbmd0aCA+IG1kLmVuZF9zdWJqZWN0IC0gc3ViamVjdFB0cikKKyAgICBpZiAo
bGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHN1YmplY3RQdHIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICAvKiBTZXBhcmF0ZSB0aGUgY2FzZWxlc3NzIGNhc2UgZm9yIHNwZWVkICov
CkBAIC0yMDIsNyArMjE0LDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hfcmVmKGludCBvZmZzZXQsIGNv
bnN0IAogICAgIGlmIChtZC5pZ25vcmVDYXNlKSB7CiAgICAgICAgIHdoaWxlIChsZW5ndGgtLSA+
IDApIHsKICAgICAgICAgICAgIFVDaGFyIGMgPSAqcCsrOwotICAgICAgICAgICAgaW50IG90aGVy
Y2FzZSA9IF9wY3JlX3VjcF9vdGhlcmNhc2UoYyk7CisgICAgICAgICAgICBpbnQgb3RoZXJjYXNl
ID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZShjKTsKICAgICAgICAgICAgIFVDaGFyIGQgPSAqc3Vi
amVjdFB0cisrOwogICAgICAgICAgICAgaWYgKGMgIT0gZCAmJiBvdGhlcmNhc2UgIT0gZCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzgsMzcgKzI1MCwyOSBAQCBhIGJpdCBt
b3JlIGNvZGUgYW5kIG5vdGljZSBpZiB3ZSB1c2UgY29uCiAKICNlbmRpZgogCi0jZGVmaW5lIENI
RUNLX1JFQ1VSU0lPTl9MSU1JVCBcCi0gICAgaWYgKHN0YWNrLnNpemUgPj0gTUFUQ0hfTElNSVRf
UkVDVVJTSU9OKSBcCi0gICAgICAgIHJldHVybiBtYXRjaEVycm9yKEpTUmVnRXhwRXJyb3JSZWN1
cnNpb25MaW1pdCwgc3RhY2spOwotCi0jZGVmaW5lIFJFQ1VSU0VfV0lUSF9SRVRVUk5fTlVNQkVS
KG51bSkgXAotICAgIENIRUNLX1JFQ1VSU0lPTl9MSU1JVCBcCisjZGVmaW5lIFJFQ1VSU0lWRV9N
QVRDSF9DT01NT04obnVtKSBcCisgICAgaWYgKHN0YWNrLnNpemUgPj0gTUFUQ0hfUkVDVVJTSU9O
X0xJTUlUKSBcCisgICAgICAgIHJldHVybiBtYXRjaEVycm9yKEpTUmVnRXhwRXJyb3JSZWN1cnNp
b25MaW1pdCwgc3RhY2spOyBcCiAgICAgZ290byBSRUNVUlNFO1wKLSAgICBSUkVUVVJOXyMjbnVt
OgorICAgIFJSRVRVUk5fIyNudW06IFwKKyAgICBzdGFjay5wb3BDdXJyZW50RnJhbWUoKTsKIAog
I2RlZmluZSBSRUNVUlNJVkVfTUFUQ0gobnVtLCByYSwgcmIpIFwKLXtcCi0gICAgc3RhY2sucHVz
aE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVSRShudW0pKTsgXAotICAgIFJFQ1VSU0Vf
V0lUSF9SRVRVUk5fTlVNQkVSKG51bSkgXAotICAgIHN0YWNrLnBvcEN1cnJlbnRGcmFtZSgpOyBc
Ci19CisgICAgZG8geyBcCisgICAgICAgIHN0YWNrLnB1c2hOZXdGcmFtZSgocmEpLCAocmIpLCBS
TUFUQ0hfV0hFUkUobnVtKSk7IFwKKyAgICAgICAgUkVDVVJTSVZFX01BVENIX0NPTU1PTihudW0p
IFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05F
V19HUk9VUChudW0sIHJhLCByYikgXAote1wKLSAgICBzdGFjay5wdXNoTmV3RnJhbWUoKHJhKSwg
KHJiKSwgUk1BVENIX1dIRVJFKG51bSkpOyBcCi0gICAgc3RhcnROZXdHcm91cChzdGFjay5jdXJy
ZW50RnJhbWUpOyBcCi0gICAgUkVDVVJTRV9XSVRIX1JFVFVSTl9OVU1CRVIobnVtKSBcCi0gICAg
c3RhY2sucG9wQ3VycmVudEZyYW1lKCk7IFwKLX0KKyAgICBkbyB7IFwKKyAgICAgICAgc3RhY2su
cHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVSRShudW0pKTsgXAorICAgICAgICBz
dGFydE5ld0dyb3VwKHN0YWNrLmN1cnJlbnRGcmFtZSk7IFwKKyAgICAgICAgUkVDVVJTSVZFX01B
VENIX0NPTU1PTihudW0pIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJSRVRVUk4gZ290
byBSUkVUVVJOX0xBQkVMCiAKLSNkZWZpbmUgUlJFVFVSTl9OT19NQVRDSCBcCi0gIHtcCi0gICAg
aXNfbWF0Y2ggPSBmYWxzZTtcCi0gICAgUlJFVFVSTjtcCi0gIH0KKyNkZWZpbmUgUlJFVFVSTl9O
T19NQVRDSCBkbyB7IGlzTWF0Y2ggPSBmYWxzZTsgUlJFVFVSTjsgfSB3aGlsZSAoMCkKIAogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAg
ICBNYXRjaCBmcm9tIGN1cnJlbnQgcG9zaXRpb24gICAgICAgICAgICAqCkBAIC0yODQsMTIgKzI4
OCwxMiBAQCBzYW1lIHJlc3BvbnNlLgogQXJndW1lbnRzOgogICAgc3ViamVjdFB0ciAgICAgICAg
cG9pbnRlciBpbiBzdWJqZWN0CiAgICBpbnN0cnVjdGlvblB0ciAgICAgICBwb3NpdGlvbiBpbiBj
b2RlCi0gICBvZmZzZXRfdG9wICBjdXJyZW50IHRvcCBwb2ludGVyCisgICBvZmZzZXRUb3AgIGN1
cnJlbnQgdG9wIHBvaW50ZXIKICAgIG1kICAgICAgICAgIHBvaW50ZXIgdG8gInN0YXRpYyIgaW5m
byBmb3IgdGhlIG1hdGNoCiAKIFJldHVybnM6ICAgICAgIE1BVENIX01BVENIIGlmIG1hdGNoZWQg
ICAgICAgICAgICApICB0aGVzZSB2YWx1ZXMgYXJlID49IDAKICAgICAgICAgICAgICAgIE1BVENI
X05PTUFUQ0ggaWYgZmFpbGVkIHRvIG1hdGNoICApCi0gICAgICAgICAgICAgICBhIG5lZ2F0aXZl
IFBDUkVfRVJST1JfeHh4IHZhbHVlIGlmIGFib3J0ZWQgYnkgYW4gZXJyb3IgY29uZGl0aW9uCisg
ICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIGlmIGFib3J0ZWQgYnkgYW4gZXJy
b3IgY29uZGl0aW9uCiAgICAgICAgICAgICAgICAgIChlLmcuIHN0b3BwZWQgYnkgcmVwZWF0ZWQg
Y2FsbCBvciByZWN1cnNpb24gbGltaXQpCiAqLwogCkBAIC0zMjEsMTMgKzMyNSwxMyBAQCBzdHJ1
Y3QgTWF0Y2hTdGFjayB7CiAgICAgICAgIHJldHVybiBuZXcgTWF0Y2hGcmFtZTsKICAgICB9CiAg
ICAgCi0gICAgaW5saW5lIHZvaWQgcHVzaE5ld0ZyYW1lKGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rp
b25QdHIsIGNvbnN0IFVDaGFyKiBzdWJwYXR0ZXJuU3RhcnQsIFJldHVybkxvY2F0aW9uIHJldHVy
bkxvY2F0aW9uKQorICAgIGlubGluZSB2b2lkIHB1c2hOZXdGcmFtZShjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbnN0cnVjdGlvblB0ciwgY29uc3QgVUNoYXIqIHN1YnBhdHRlcm5TdGFydCwgUmV0dXJu
TG9jYXRpb24gcmV0dXJuTG9jYXRpb24pCiAgICAgewogICAgICAgICBNYXRjaEZyYW1lKiBuZXdm
cmFtZSA9IGFsbG9jYXRlTmV4dEZyYW1lKCk7CiAgICAgICAgIG5ld2ZyYW1lLT5wcmV2aW91c0Zy
YW1lID0gY3VycmVudEZyYW1lOwogCiAgICAgICAgIG5ld2ZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
PSBjdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKLSAgICAgICAgbmV3ZnJhbWUtPmFyZ3Mu
b2Zmc2V0X3RvcCA9IGN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wOworICAgICAgICBuZXdm
cmFtZS0+YXJncy5vZmZzZXRUb3AgPSBjdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wOwogICAg
ICAgICBuZXdmcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uUHRyOwogICAg
ICAgICBuZXdmcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQgPSBzdWJwYXR0ZXJuU3RhcnQ7CiAg
ICAgICAgIG5ld2ZyYW1lLT5yZXR1cm5Mb2NhdGlvbiA9IHJldHVybkxvY2F0aW9uOwpAQCAtMzYx
LDEzICszNjUsMTMgQEAgc3RhdGljIGludCBtYXRjaEVycm9yKGludCBlcnJvckNvZGUsIE1hdAog
LyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3Rlciwgbm90IGFkdmFuY2luZyB0aGUgcG9pbnRl
ciwgaW5jcmVtZW50aW5nIGxlbmd0aAogIGlmIHRoZXJlIGFyZSBleHRyYSBieXRlcy4gVGhpcyBp
cyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAqLwogCi1zdGF0aWMg
aW5saW5lIHZvaWQgZ2V0VVRGOENoYXJBbmRJbmNyZW1lbnRMZW5ndGgoaW50JiBjLCBjb25zdCB1
c2NoYXIqIHN1YmplY3RQdHIsIGludCYgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIGdldFVURjhD
aGFyQW5kSW5jcmVtZW50TGVuZ3RoKGludCYgYywgY29uc3QgdW5zaWduZWQgY2hhciogc3ViamVj
dFB0ciwgaW50JiBsZW4pCiB7CiAgICAgYyA9ICpzdWJqZWN0UHRyOwogICAgIGlmICgoYyAmIDB4
YzApID09IDB4YzApIHsKLSAgICAgICAgaW50IGdjYWEgPSBfcGNyZV91dGY4X3RhYmxlNFtjICYg
MHgzZl07ICAvKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICBpbnQgZ2Nh
YSA9IGtqc19wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBhZGRpdGlv
bmFsIGJ5dGVzICovCiAgICAgICAgIGludCBnY3NzID0gNiAqIGdjYWE7Ci0gICAgICAgIGMgPSAo
YyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8PCBnY3NzOworICAgICAgICBjID0gKGMgJiBr
anNfcGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwgZ2NzczsKICAgICAgICAgZm9yIChpbnQgZ2Np
aSA9IDE7IGdjaWkgPD0gZ2NhYTsgZ2NpaSsrKSB7CiAgICAgICAgICAgICBnY3NzIC09IDY7CiAg
ICAgICAgICAgICBjIHw9IChzdWJqZWN0UHRyW2djaWldICYgMHgzZikgPDwgZ2NzczsKQEAgLTQw
MSw5ICs0MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVwZWF0SW5mb3JtYXRpb25Gcm9tCiAg
ICAgbWF4aW11bVJlcGVhdHMgPSBtYXhpbXVtUmVwZWF0c0Zyb21JbnN0cnVjdGlvbk9mZnNldFtp
bnN0cnVjdGlvbk9mZnNldF07CiB9CiAKLXN0YXRpYyBpbnQgbWF0Y2goY29uc3QgVUNoYXIqIHN1
YmplY3RQdHIsIGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25QdHIsIGludCBvZmZzZXRfdG9wLCBN
YXRjaERhdGEmIG1kKQorc3RhdGljIGludCBtYXRjaChjb25zdCBVQ2hhciogc3ViamVjdFB0ciwg
Y29uc3QgdW5zaWduZWQgY2hhciogaW5zdHJ1Y3Rpb25QdHIsIGludCBvZmZzZXRUb3AsIE1hdGNo
RGF0YSYgbWQpCiB7Ci0gICAgaW50IGlzX21hdGNoID0gZmFsc2U7CisgICAgaW50IGlzTWF0Y2gg
PSBmYWxzZTsKICAgICBpbnQgbWluOwogICAgIGJvb2wgbWluaW1pemUgPSBmYWxzZTsgLyogSW5p
dGlhbGl6YXRpb24gbm90IHJlYWxseSBuZWVkZWQsIGJ1dCBzb21lIGNvbXBpbGVycyB0aGluayBz
by4gKi8KICAgICAKQEAgLTQxMiwxNCArNDE2LDE0IEBAIHN0YXRpYyBpbnQgbWF0Y2goY29uc3Qg
VUNoYXIqIHN1YmplY3RQdHIKICAgICAvKiBUaGUgb3Bjb2RlIGp1bXAgdGFibGUuICovCiAjaWZk
ZWYgVVNFX0NPTVBVVEVEX0dPVE9fRk9SX01BVENIX09QQ09ERV9MT09QCiAjZGVmaW5lIEVNSVRf
SlVNUF9UQUJMRV9FTlRSWShvcGNvZGUpICYmTEFCRUxfT1BfIyNvcGNvZGUsCi0gICAgc3RhdGlj
IHZvaWQqIG9wY29kZV9qdW1wX3RhYmxlWzI1Nl0gPSB7IEZPUl9FQUNIX09QQ09ERShFTUlUX0pV
TVBfVEFCTEVfRU5UUlkpIH07CisgICAgc3RhdGljIHZvaWQqIG9wY29kZUp1bXBUYWJsZVsyNTZd
ID0geyBGT1JfRUFDSF9PUENPREUoRU1JVF9KVU1QX1RBQkxFX0VOVFJZKSB9OwogI3VuZGVmIEVN
SVRfSlVNUF9UQUJMRV9FTlRSWQogI2VuZGlmCiAgICAgCiAgICAgLyogT25lLXRpbWUgc2V0dXAg
b2YgdGhlIG9wY29kZSBqdW1wIHRhYmxlLiAqLwogI2lmZGVmIFVTRV9DT01QVVRFRF9HT1RPX0ZP
Ul9NQVRDSF9PUENPREVfTE9PUAotICAgIGZvciAoaW50IGkgPSAyNTU7ICFvcGNvZGVfanVtcF90
YWJsZVtpXTsgaS0tKQotICAgICAgICBvcGNvZGVfanVtcF90YWJsZVtpXSA9ICYmQ0FQVFVSSU5H
X0JSQUNLRVQ7CisgICAgZm9yIChpbnQgaSA9IDI1NTsgIW9wY29kZUp1bXBUYWJsZVtpXTsgaS0t
KQorICAgICAgICBvcGNvZGVKdW1wVGFibGVbaV0gPSAmJkNBUFRVUklOR19CUkFDS0VUOwogI2Vu
ZGlmCiAgICAgCiAjaWZkZWYgVVNFX0NPTVBVVEVEX0dPVE9fRk9SX01BVENIX1JFQ1VSU0lPTgpA
QCAtNDMxLDcgKzQzNSw3IEBAIHN0YXRpYyBpbnQgbWF0Y2goY29uc3QgVUNoYXIqIHN1YmplY3RQ
dHIKICNlbmRpZgogICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID0gc3Vi
amVjdFB0cjsKICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPSBp
bnN0cnVjdGlvblB0cjsKLSAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA9
IG9mZnNldF90b3A7CisgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcCA9IG9m
ZnNldFRvcDsKICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0ID0g
MDsKICAgICBzdGFydE5ld0dyb3VwKHN0YWNrLmN1cnJlbnRGcmFtZSk7CiAgICAgCkBAIC00NDgs
NyArNDUyLDcgQEAgUkVDVVJTRToKICAgICAgICAgCiAjaWZkZWYgVVNFX0NPTVBVVEVEX0dPVE9f
Rk9SX01BVENIX09QQ09ERV9MT09QCiAjZGVmaW5lIEJFR0lOX09QQ09ERShvcGNvZGUpIExBQkVM
X09QXyMjb3Bjb2RlCi0jZGVmaW5lIE5FWFRfT1BDT0RFIGdvdG8gKm9wY29kZV9qdW1wX3RhYmxl
WypzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHJdCisjZGVmaW5lIE5FWFRf
T1BDT0RFIGdvdG8gKm9wY29kZUp1bXBUYWJsZVsqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyXQogI2Vsc2UKICNkZWZpbmUgQkVHSU5fT1BDT0RFKG9wY29kZSkgY2FzZSBP
UF8jI29wY29kZQogI2RlZmluZSBORVhUX09QQ09ERSBjb250aW51ZQpAQCAtNDY3LDkgKzQ3MSw5
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgRFBSSU5URigoInN0YXJ0IGJyYWNrZXQgMFxu
IikpOwogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZF
X01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJw
YXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVS
TjsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldExpbmtWYWx1ZShzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICB9IHdoaWxlICgq
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0FMVCk7CiAgICAg
ICAgICAgICAgICAgRFBSSU5URigoImJyYWNrZXQgMCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAg
ICAgICBSUkVUVVJOOwpAQCAtNDgzLDkgKzQ4Nyw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAv
KiBFbmQgb2YgdGhlIHBhdHRlcm4uICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBC
RUdJTl9PUENPREUoRU5EKToKLSAgICAgICAgICAgICAgICBtZC5lbmRfbWF0Y2hfcHRyID0gc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7ICAgICAgICAgIC8qIFJlY29yZCB3aGVy
ZSB3ZSBlbmRlZCAqLwotICAgICAgICAgICAgICAgIG1kLmVuZF9vZmZzZXRfdG9wID0gc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3A7ICAgLyogYW5kIGhvdyBtYW55IGV4dHJhY3Rz
IHdlcmUgdGFrZW4gKi8KLSAgICAgICAgICAgICAgICBpc19tYXRjaCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgbWQuZW5kTWF0Y2hQdHIgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cjsgICAgICAgICAgLyogUmVjb3JkIHdoZXJlIHdlIGVuZGVkICovCisgICAgICAgICAgICAg
ICAgbWQuZW5kT2Zmc2V0VG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcDsg
ICAvKiBhbmQgaG93IG1hbnkgZXh0cmFjdHMgd2VyZSB0YWtlbiAqLworICAgICAgICAgICAgICAg
IGlzTWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvKiBBc3NlcnRpb24gYnJhY2tldHMuIENoZWNrIHRoZSBhbHRlcm5h
dGl2ZSBicmFuY2hlcyBpbiB0dXJuIC0gdGhlCkBAIC00OTcsOSArNTAxLDkgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShBU1NFUlQpOgogICAgICAgICAgICAgICAgIGRvIHsK
ICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDYs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUs
IE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
PSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9BTFQpOwogICAgICAgICAgICAg
ICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0tF
VCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTUwNyw5ICs1MTEs
OSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIC8qIENvbnRpbnVlIGZyb20gYWZ0ZXIgdGhl
IGFzc2VydGlvbiwgdXBkYXRpbmcgdGhlIG9mZnNldHMgaGlnaCB3YXRlcgogICAgICAgICAgICAg
ICAgICBtYXJrLCBzaW5jZSBleHRyYWN0cyBtYXkgaGF2ZSBiZWVuIHRha2VuIGR1cmluZyB0aGUg
YXNzZXJ0aW9uLiAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1vdmVPcGNv
ZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyKTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlVG9FbmRPZkJyYWNrZXQoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKTsKICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMSArIExJTktfU0laRTsK
LSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA9IG1k
LmVuZF9vZmZzZXRfdG9wOworICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5vZmZzZXRUb3AgPSBtZC5lbmRPZmZzZXRUb3A7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENP
REU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBhc3NlcnRpb246
IGFsbCBicmFuY2hlcyBtdXN0IGZhaWwgdG8gbWF0Y2ggKi8KQEAgLTUxNyw4MyArNTIxLDE5IEBA
IFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQVNTRVJUX05PVCk6CiAgICAgICAg
ICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlRO
R19ORVdfR1JPVVAoNywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsg
MSArIExJTktfU0laRSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOX05PX01BVENIOwotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0TGlua1ZhbHVl
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
PT0gT1BfQUxUKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMSArIExJTktfU0laRTsKICAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8qICJP
bmNlIiBicmFja2V0cyBhcmUgbGlrZSBhc3NlcnRpb24gYnJhY2tldHMgZXhjZXB0IHRoYXQgYWZ0
ZXIgYSBtYXRjaCwKLSAgICAgICAgICAgICB0aGUgcG9pbnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5n
IGlzIG5vdCBtb3ZlZCBiYWNrLiBUaHVzIHRoZXJlIGNhbiBuZXZlciBiZQotICAgICAgICAgICAg
IGEgbW92ZSBiYWNrIGludG8gdGhlIGJyYWNrZXRzLiBGcmllZGwgY2FsbHMgdGhlc2UgImF0b21p
YyIgc3VicGF0dGVybnMuCi0gICAgICAgICAgICAgQ2hlY2sgdGhlIGFsdGVybmF0aXZlIGJyYW5j
aGVzIGluIHR1cm4gLSB0aGUgbWF0Y2hpbmcgd29uJ3QgcGFzcyB0aGUgS0VUCi0gICAgICAgICAg
ICAgZm9yIHRoaXMga2luZCBvZiBzdWJwYXR0ZXJuLiBJZiBhbnkgb25lIGJyYW5jaCBtYXRjaGVz
LCB3ZSBjYXJyeSBvbiBhcyBhdAotICAgICAgICAgICAgIHRoZSBlbmQgb2YgYSBub3JtYWwgYnJh
Y2tldCwgbGVhdmluZyB0aGUgc3ViamVjdCBwb2ludGVyLiAqLwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE9OQ0UpOgotICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cjsKLSAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFS
VE5HX05FV19HUk9VUCg5LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
KyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAo
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9BTFQpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIElmIGhpdCB0aGUgZW5kIG9mIHRoZSBn
cm91cCAod2hpY2ggY291bGQgYmUgcmVwZWF0ZWQpLCBmYWlsICovCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgIT0gT1BfT05DRSAmJiAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyICE9IE9QX0FMVCkKLSAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvKiBDb250aW51ZSBhcyBmcm9tIGFmdGVyIHRoZSBhc3Nl
cnRpb24sIHVwZGF0aW5nIHRoZSBvZmZzZXRzIGhpZ2ggd2F0ZXIKLSAgICAgICAgICAgICAgICAg
bWFyaywgc2luY2UgZXh0cmFjdHMgbWF5IGhhdmUgYmVlbiB0YWtlbi4gKi8KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5j
aGVzKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cik7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90
b3AgPSBtZC5lbmRfb2Zmc2V0X3RvcDsKLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA9IG1kLmVuZF9tYXRjaF9wdHI7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLyogRm9yIGEgbm9uLXJlcGVhdGluZyBrZXQsIGp1c3QgY29udGlu
dWUgYXQgdGhpcyBsZXZlbC4gVGhpcyBhbHNvCi0gICAgICAgICAgICAgICAgIGhhcHBlbnMgZm9y
IGEgcmVwZWF0aW5nIGtldCBpZiBubyBjaGFyYWN0ZXJzIHdlcmUgbWF0Y2hlZCBpbiB0aGUgZ3Jv
dXAuCi0gICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZvcmNpYmxlIGJyZWFraW5nIG9mIGlu
ZmluaXRlIGxvb3BzIGFzIGltcGxlbWVudGVkIGluIFBlcmwKLSAgICAgICAgICAgICAgICAgNS4w
MDUuIElmIHRoZXJlIGlzIGFuIG9wdGlvbnMgcmVzZXQsIGl0IHdpbGwgZ2V0IG9iZXllZCBpbiB0
aGUgbm9ybWFsCi0gICAgICAgICAgICAgICAgIGNvdXJzZSBvZiBldmVudHMuICovCi0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIgPT0gT1BfS0VUIHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJ
bnN0cnVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMSArIExJTktfU0laRTsKLSAgICAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIC8qIFRoZSByZXBlYXRpbmcga2V0cyB0cnkgdGhlIHJlc3Qgb2YgdGhlIHBhdHRl
cm4gb3IgcmVzdGFydCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICBwcmVjZWRpbmcgYnJhY2tl
dCwgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXZSBuZWVkIHRvIHJlc2V0IGFueSBvcHRpb25z
Ci0gICAgICAgICAgICAgICAgIHRoYXQgY2hhbmdlZCB3aXRoaW4gdGhlIGJyYWNrZXQgYmVmb3Jl
IHJlLXJ1bm5pbmcgaXQsIHNvIGNoZWNrIHRoZSBuZXh0Ci0gICAgICAgICAgICAgICAgIG9wY29k
ZS4gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9LRVRSTUlOKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgxMCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lW
RV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxMSwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
aW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
cGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBP
UF9LRVRSTUFYICovCi0gICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5H
X05FV19HUk9VUCgxMiwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJB
dFN0YXJ0T2ZPbmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDEzLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8qIEFuIGFsdGVybmF0aW9uIGlzIHRoZSBlbmQgb2YgYSBicmFuY2g7IHNj
YW4gYWxvbmcgdG8gZmluZCB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgIGJyYWNrZXRlZCBn
cm91cCBhbmQgZ28gdG8gdGhlcmUuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBC
RUdJTl9PUENPREUoQUxUKToKLSAgICAgICAgICAgICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFueUFs
dGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cik7
CisgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5pbnN0cnVjdGlvblB0cik7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBCUkFaRVJPIGFuZCBCUkFNSU5aRVJPIG9j
Y3VyIGp1c3QgYmVmb3JlIGEgYnJhY2tldCBncm91cCwgaW5kaWNhdGluZwpAQCAtNjA1LDE4ICs1
NDUsMTggQEAgUkVDVVJTRToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShCUkFaRVJPKTogewog
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRp
bmdCcmFja2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMTsK
ICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTQsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0LCBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgbW92ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5h
dGVCcmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJh
Y2tldCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0KTsKICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCArIDEgKyBMSU5LX1NJWkU7CiAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQlJBTUlOWkVSTyk6IHsKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDE7Ci0gICAgICAgICAg
ICAgICAgbW92ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5hdGVCcmFuY2hlcyhzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCk7CisgICAgICAgICAgICAgICAg
YWR2YW5jZVRvRW5kT2ZCcmFja2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZS
ZXBlYXRpbmdCcmFja2V0KTsKICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlRO
R19ORVdfR1JPVVAoMTUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRp
bmdCcmFja2V0ICsgMSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAg
ICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtNjMwLDE0ICs1NzAsMTMgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgIEJFR0lOX09QQ09ERShLRVQpOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEtF
VFJNSU4pOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEtFVFJNQVgpOgotICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25j
ZSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAtIGdldE9wY29kZVZh
bHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsK
KyAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0
ckF0U3RhcnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
LSBnZXRMaW5rVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsg
MSk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YnBhdHRlcm5TdGFydDsKICAgICAg
ICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJwYXR0ZXJuU3RhcnQgPSBz
dGFjay5jdXJyZW50RnJhbWUtPnByZXZpb3VzRnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0Owog
Ci0gICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVj
dGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1BfQVNTRVJUIHx8ICpzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1BfQVNTRVJUX05PVCB8fCAq
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID09
IE9QX09OQ0UpIHsKLSAgICAgICAgICAgICAgICAgICAgbWQuZW5kX21hdGNoX3B0ciA9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOyAgICAgIC8qIEZvciBPTkNFICovCi0gICAg
ICAgICAgICAgICAgICAgIG1kLmVuZF9vZmZzZXRfdG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLm9mZnNldF90b3A7Ci0gICAgICAgICAgICAgICAgICAgIGlzX21hdGNoID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9u
UHRyQXRTdGFydE9mT25jZSA9PSBPUF9BU1NFUlQgfHwgKnN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9PSBPUF9BU1NFUlRfTk9UKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1kLmVuZE9mZnNldFRvcCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5vZmZzZXRUb3A7CisgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKQEAgLTY1MSw3ICs1OTAsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICB0aGUgbnVt
YmVyIGZyb20gYSBkdW1teSBvcGNvZGUgYXQgdGhlIHN0YXJ0LiAqLwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIg
PiBFWFRSQUNUX0JBU0lDX01BWCkKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubnVtYmVyID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgMitMSU5LX1NJ
WkUpOworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1i
ZXIgPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9u
UHRyQXRTdGFydE9mT25jZSArIDIgKyBMSU5LX1NJWkUpOwogICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm51bWJlciA8PCAxOwogICAgICAgICAgICAgICAgIAogI2lmZGVmIERFQlVHCkBAIC02NjUsMTQg
KzYwNCwxNCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICB0aGUgT1BfRU5EIGlzIHJlYWNo
ZWQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm51bWJlciA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA+PSBtZC5vZmZzZXRfbWF4KQotICAgICAg
ICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X292ZXJmbG93ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA+PSBtZC5vZmZz
ZXRNYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRPdmVyZmxvdyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWQu
b2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldF92ZWN0b3JbbWQub2Zmc2V0X2VuZCAtIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
ZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCsxXSA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC0gbWQuc3RhcnRfc3ViamVjdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0
X3RvcCA8PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3AgPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAyOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPQor
ICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW21kLm9mZnNldEVuZCAtIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07CisgICAgICAgICAgICAgICAgICAgICAg
ICBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0KzFdID0g
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgLSBtZC5zdGFydFN1YmplY3Q7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNl
dFRvcCA8PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcCA9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDI7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC02OTIsMTcgKzYzMSwxNyBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0tFVFJNSU4pIHsKICAgICAg
ICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDE2LCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05F
V19HUk9VUCgxNywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0
YXJ0T2ZPbmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAo
aXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsgLyogT1BfS0VUUk1BWCAqLwogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJ
VkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTgsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOOwogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMTksIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKQEAgLTcxMCw3ICs2NDksNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgLyogU3Rh
cnQgb2Ygc3ViamVjdCwgb3IgYWZ0ZXIgaW50ZXJuYWwgbmV3bGluZSBpZiBtdWx0aWxpbmUuICov
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQ0lSQyk6Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IG1k
LnN0YXJ0X3N1YmplY3QgJiYgKCFtZC5tdWx0aWxpbmUgfHwgIWlzTmV3bGluZShzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0clstMV0pKSkKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gbWQuc3RhcnRTdWJqZWN0ICYmICgh
bWQubXVsdGlsaW5lIHx8ICFpc05ld2xpbmUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHJbLTFdKSkpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKys7CiAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC03MTgsNyArNjU3LDcgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgIC8qIEVuZCBvZiBzdWJqZWN0LCBvciBiZWZvcmUgaW50ZXJuYWwgbmV3bGlu
ZSBpZiBtdWx0aWxpbmUuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9P
UENPREUoRE9MTCk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyIDwgbWQuZW5kX3N1YmplY3QgJiYgKCFtZC5tdWx0aWxpbmUgfHwgIWlzTmV3
bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpKSkKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPCBtZC5lbmRTdWJq
ZWN0ICYmICghbWQubXVsdGlsaW5lIHx8ICFpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyKSkpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7
CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
Kys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC03MzAsOSArNjY5LDkgQEAgUkVD
VVJTRToKICAgICAgICAgICAgICAgICBib29sIGN1cnJlbnRDaGFySXNXb3JkQ2hhciA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGJvb2wgcHJldmlvdXNDaGFySXNXb3JkQ2hhciA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+IG1kLnN0YXJ0X3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID4gbWQuc3RhcnRTdWJqZWN0KQog
ICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NoYXJJc1dvcmRDaGFyID0gaXNXb3JkQ2hhcihz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0clstMV0pOwotICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA8IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciA8IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFySXNXb3Jk
Q2hhciA9IGlzV29yZENoYXIoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBOb3cgc2VlIGlmIHRoZSBzaXR1
YXRpb24gaXMgd2hhdCB3ZSB3YW50ICovCkBAIC03NDUsNyArNjg0LDcgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJhY3RlciB0eXBlOyBpbmxpbmUgZm9yIHNw
ZWVkICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UX05F
V0xJTkUpOgotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBpZiAoaXNOZXdsaW5l
KCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTc1Myw3ICs2OTIsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9U
X0RJR0lUKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlE
aWdpdCgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKykpCiAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC03NjEsNyArNzAwLDcgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RF
KERJR0lUKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKyspKQogICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtNzY5LDcgKzcwOCw3IEBAIFJFQ1VSU0U6
CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAKICAgICAgICAgICAgIEJFR0lOX09QQ09E
RShOT1RfV0hJVEVTUEFDRSk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQog
ICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIGlm
IChpc1NwYWNlQ2hhcigqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKykpCiAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC03NzcsNyArNzE2LDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKIAogICAgICAgICAgICAgQkVH
SU5fT1BDT0RFKFdISVRFU1BBQ0UpOgotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVj
dCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAg
ICBpZiAoIWlzU3BhY2VDaGFyKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisr
KSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTc4NSw3ICs3MjQs
NyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVF9XT1JEQ0hBUik6Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9z
dWJqZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05P
X01BVENIOwogICAgICAgICAgICAgICAgIGlmIChpc1dvcmRDaGFyKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKQEAgLTc5Myw3ICs3MzIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFdPUkRD
SEFSKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1dvcmRDaGFy
KCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTgwOSw3ICs3NDgsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgIGxvb3BzKS4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lO
X09QQ09ERShSRUYpOgotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm9mZnNldCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpIDw8IDE7ICAgICAgICAgICAgICAgLyogRG91YmxlZCBy
ZWYgbnVtYmVyICovCisgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKyAxKSA8PCAxOyAgICAgICAgICAgICAgIC8qIERvdWJsZWQgcmVmIG51bWJlciAqLwog
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
PSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgcGFzdCBpdGVt
ICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogSWYgdGhlIHJlZmVyZW5j
ZSBpcyB1bnNldCwgc2V0IHRoZSBsZW5ndGggdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIGFtb3VudApA
QCAtODE3LDEwICs3NTYsMTAgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgY2FuJ3QganVz
dCBmYWlsIGhlcmUsIGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHF1YW50aWZpZXJzIHdp
dGggemVybwogICAgICAgICAgICAgICAgICBtaW5pbWEuICovCiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA+PSBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCB8fCBtZC5vZmZzZXRfdmVjdG9yW3N0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPCAwKQorICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPj0gc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLm9mZnNldFRvcCB8fCBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMub2Zmc2V0XSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGggPSBtZC5vZmZzZXRfdmVj
dG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCsxXSAtIG1kLm9mZnNldF92ZWN0
b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoID0gbWQub2Zmc2V0VmVjdG9yW3N0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCsxXSAtIG1kLm9mZnNldFZlY3RvcltzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8qIFNldCB1cCBmb3IgcmVwZXRpdGlvbiwgb3IgaGFuZGxlIHRoZSBub24tcmVw
ZWF0ZWQgY2FzZSAqLwogICAgICAgICAgICAgICAgIApAQCAtODM3LDE1ICs3NzYsMTUgQEAgUkVD
VVJTRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5p
bWl6ZSA9ICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0NS
TUlOUkFOR0UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVPcGNvZGVW
YWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXgg
PSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdldDJCeXRl
VmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQy
Qnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDMpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1h
eCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heCA9IElOVF9NQVg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAvKiBObyByZXBlYXQgZm9sbG93cyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtYXRjaF9yZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1h
dGNoUmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwg
bWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAr
PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERTsKQEAgLTg2MCw3ICs3OTksNyBAQCBSRUNVUlNFOgogICAgICAgICAg
ICAgICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYXJl
IHByZXNlbnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPD0gbWluOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaF9y
ZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkp
CisgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hSZWYoc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciArPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7
CiAgICAgICAgICAgICAgICAgfQpAQCAtODc2LDkgKzgxNSw5IEBAIFJFQ1VSU0U6CiAgICAgICAg
ICAgICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5maSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjAsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNf
bWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm1heCB8fCAhbWF0Y2hfcmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmxlbmd0aCwgbWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCAh
bWF0Y2hSZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3Ro
LCBtZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
ODkwLDEzICs4MjksMTMgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3Rh
cnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRj
aF9yZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBt
ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoUmVmKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgKz0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyMSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciAtPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTkzMyw4ICs4NzIsOCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIE9QX0NSUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JNSU5SQU5H
RToKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltaXplID0gKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfQ1JNSU5SQU5HRSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtaW4gPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9m
ZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID09IDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gSU5UX01BWDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArPSA1OwpAQCAtOTQ4LDcgKzg4Nyw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAg
LyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2Vu
dC4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8PSBtaW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJq
ZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAg
ICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIr
KzsKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUpIHsKQEAgLTk3MSw5ICs5MTAsOSBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVD
VVJTSVZFX01BVENIKDIyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
TWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1Ympl
Y3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+IDI1NSkgewpAQCAtOTkxLDcgKzkzMCw3
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVj
dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUpIHsKQEAgLTEwMDUsNyArOTQ0LDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3Ig
KDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjQsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3Mg
Ki8KQEAgLTEwMTksNyArOTU4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEJFR0lOX09QQ09ERShYQ0xBU1MpOgogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmRhdGEgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKyAxICsgTElOS19TSVpFOyAgICAgICAgICAgICAgICAvKiBTYXZlIGZvciBtYXRjaGlu
ZyAqLwotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciwgMSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgcGFzdCB0
aGUgaXRlbSAqLworICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArPSBnZXRMaW5rVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyICsgMSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgcGFzdCB0aGUg
aXRlbSAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAoKnN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cikgewogICAgICAgICAgICAgICAgICAg
ICBjYXNlIE9QX0NSU1RBUjoKQEAgLTEwMzQsOCArOTczLDggQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE9Q
X0NSTUlOUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9ICgqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0NSTUlOUkFOR0UpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29k
ZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9PSAwKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IElO
VF9NQVg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIgKz0gNTsKQEAgLTEwNDMsMTUgKzk4MiwxNSBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgLyogTm8gcmVwZWF0IGZvbGxvd3MgKi8KICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IDE7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8q
IEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYXJlIHByZXNlbnQu
ICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkg
PD0gbWluOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVj
dCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAg
ICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghX3BjcmVfeGNsYXNzKGMsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmRhdGEpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWtqc19wY3JlX3hj
bGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApAQCAtMTA2NywxMiArMTAwNiwxMiBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
IGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDI2LCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwg
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkg
Pj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIV9wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgha2pzX3BjcmVfeGNsYXNzKGMsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmRhdGEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJv
bCBuZXZlciByZWFjaGVzIGhlcmUgKi8KQEAgLTEwODMsMTYgKzEwMjIsMTYgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
YyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghX3BjcmVfeGNsYXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmRhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFranNfcGNyZV94Y2xhc3MoYywg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3N0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIGZvcig7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
KDI3LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3Jp
Z2luYWwgcG9zICovCkBAIC0xMTA5LDcgKzEwNDgsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAgICAg
ICAgICAgIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLmZjLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICE9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cisrKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtMTEy
MiwxMCArMTA2MSwxMCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIGdldFVURjhDaGFy
QW5kSW5jcmVtZW50TGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjLCBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQu
ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaW50IGRjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmZjICE9IGRjICYmIF9wY3JlX3VjcF9vdGhlcmNhc2Uoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmMpICE9IGRjKQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5mYyAhPSBkYyAmJiBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKSAhPSBkYykKICAgICAgICAgICAgICAgICAgICAgUlJF
VFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAg
IH0KQEAgLTExMzMsNyArMTA3Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBNYXRjaCBh
IHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBCRUdJTl9PUENPREUoQVNDSUlfQ0hBUik6Ci0gICAgICAgICAgICAgICAgaWYgKG1kLmVuZF9z
dWJqZWN0ID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQorICAgICAgICAg
ICAgICAgIGlmIChtZC5lbmRTdWJqZWN0ID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyWzFdKQogICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOX05PX01BVENIOwpAQCAtMTE0NCw3ICsxMDgzLDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgIC8qIE1hdGNoIG9uZSBvZiB0d28gY2FzZXMgb2YgYW4gQVNDSUkgbGV0dGVyLiAqLwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEFTQ0lJX0xFVFRFUl9J
R05PUklOR19DQVNFKToKLSAgICAgICAgICAgICAgICBpZiAobWQuZW5kX3N1YmplY3QgPT0gc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCisgICAgICAgICAgICAgICAgaWYgKG1k
LmVuZFN1YmplY3QgPT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCiAgICAg
ICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKCgq
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgfCAweDIwKSAhPSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHJbMV0pCiAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk5fTk9fTUFUQ0g7CkBAIC0xMTU1LDcgKzEwOTQsNyBAQCBSRUNVUlNFOgogICAgICAgICAg
ICAgLyogTWF0Y2ggYSBzaW5nbGUgY2hhcmFjdGVyIHJlcGVhdGVkbHk7IGRpZmZlcmVudCBvcGNv
ZGVzIHNoYXJlIGNvZGUuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9P
UENPREUoRVhBQ1QpOgotICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgbWluaW1pemUg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVENIQVI7CkBAIC0xMTYz
LDcgKzExMDIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFVQVE8pOgog
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE1JTlVQVE8pOgogICAgICAgICAgICAgICAgIG1pbiA9
IDA7Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0
MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9ICpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfTUlOVVBUTzsKICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAg
ICBnb3RvIFJFUEVBVENIQVI7CkBAIC0xMTg0LDEyICsxMTIzLDEyIEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICBnZXRVVEY4Q2hhckFuZEluY3JlbWVudExlbmd0
aChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgpOwotICAg
ICAgICAgICAgICAgIGlmIChtaW4gKiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPiAw
eEZGRkYgPyAyIDogMSkgPiBtZC5lbmRfc3ViamVjdCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKQorICAgICAgICAgICAgICAgIGlmIChtaW4gKiAoc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuZmMgPiAweEZGRkYgPyAyIDogMSkgPiBtZC5lbmRTdWJqZWN0IC0gc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuZmMgPD0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvdGhlcmNhc2UgPSBt
ZC5pZ25vcmVDYXNlID8gX3BjcmVfdWNwX290aGVyY2FzZShzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5mYykgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG90aGVyY2FzZSA9IG1kLmln
bm9yZUNhc2UgPyBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmZjKSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ICE9IG90aGVyY2FzZSkKQEAgLTEyMDEsMTQgKzExNDAsMTQgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5yZXBlYXRfb3RoZXJjYXNlID0gb3RoZXJjYXNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMucmVwZWF0
T3RoZXJjYXNlID0gb3RoZXJjYXNlOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmZpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0go
MjgsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5l
bmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnJl
cGVhdF9vdGhlcmNhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5mYyAmJiAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMucmVwZWF0T3RoZXJjYXNlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xMjE2LDcgKzExNTUsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBp
IDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ICE9IG90aGVyY2FzZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xMjI0LDcgKzExNjMsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0
T2ZJbnN0cnVjdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9N
QVRDSCgyOSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
TWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS1zdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEyNDYsOSArMTE4NSw5IEBAIFJFQ1VS
U0U6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9IG1pbjs7IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUNVUlNJVkVfTUFUQ0goMzAsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CkBAIC0xMjU4LDcg
KzExOTcsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0
U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPiBtZC5lbmRfc3ViamVj
dCAtIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID4gbWQuZW5kU3ViamVjdCAtIDIpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgq
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuZmMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTI2Niw3ICsxMjA1LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9m
SW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFU
Q0goMzEsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01h
dGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC09
IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjc5LDcgKzEyMTgsNyBAQCBSRUNV
UlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggYSBuZWdhdGVkIHNpbmdsZSBvbmUtYnl0ZSBjaGFy
YWN0ZXIuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9U
KTogewotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwpAQCAtMTMwMyw3ICsxMjQyLDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICBhYm91dC4uLiAqLwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVEVYQUNUKToKLSAgICAgICAgICAgICAgICBtaW4gPSBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAg
ICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZh
bHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAg
ICAgICAgICAgIG1pbmltaXplID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBS
RVBFQVROT1RDSEFSOwpAQCAtMTMxMSw3ICsxMjUwLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShOT1RVUFRPKToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RNSU5V
UFRPKToKICAgICAgICAgICAgICAgICBtaW4gPSAwOwotICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgbWlu
aW1pemUgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX05P
VE1JTlVQVE87CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVROT1RDSEFSOwpAQCAt
MTMyOSw3ICsxMjY4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICBzdWJqZWN0LiAqLwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVQRUFUTk9UQ0hBUjoKLSAgICAgICAgICAgICAg
ICBpZiAobWluID4gbWQuZW5kX3N1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWluID4gbWQuZW5kU3ViamVjdCAtIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmZjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAg
ICAgICAgICAgIApAQCAtMTM2MSwxMiArMTMwMCwxMiBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgICAgICBpZiAobWluaW1pemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5maSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
KDM4LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRj
aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZCA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMTI4KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gdG9Mb3dlckNhc2UoZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5mYyA9PSBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KQEAgLTEzNzgsNyAr
MTMxNyw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZCA9ICpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZCA8IDEyOCkKQEAgLTEzODksNyArMTMyOCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDQwLCBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJw
YXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHItLSA9PSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBv
cmlnaW5hbCBwb3MgKi8KQEAgLTE0MTUsMTAgKzEzNTQsMTAgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9N
QVRDSCg0Miwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
TWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGQgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0IHx8IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+
PSBtZC5lbmRTdWJqZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIHJlYWNo
ZXMgaGVyZSAqLwpAQCAtMTQzMCw3ICsxMzY5LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJ
bnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
bWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
YyA9PSBkKQpAQCAtMTQzOSw3ICsxMzc4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNDQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFs
IHBvcyAqLwpAQCAtMTQ1NSw3ICsxMzk0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICByZXBl
YXQgaXQgaW4gdGhlIGludGVyZXN0cyBvZiBlZmZpY2llbmN5LiAqLwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVFWEFDVCk6Ci0gICAgICAgICAgICAgICAg
bWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1
ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7Cisg
ICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0
MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsK
ICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAg
Z290byBSRVBFQVRUWVBFOwpAQCAtMTQ2Myw3ICsxNDAyLDcgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgIEJFR0lOX09QQ09ERShUWVBFVVBUTyk6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoVFlQ
RU1JTlVQVE8pOgogICAgICAgICAgICAgICAgIG1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAg
ICBtaW5pbWl6ZSA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0g
T1BfVFlQRU1JTlVQVE87CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVRUWVBFOwpA
QCAtMTQ4OCw3ICsxNDI3LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgKGkuZS4ga2Vl
cCBpdCBvdXQgb2YgdGhlIGxvb3ApLiBBbHNvIHdlIGNhbiB0ZXN0IHRoYXQgdGhlcmUgYXJlIGF0
IGxlYXN0CiAgICAgICAgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJz
IGJlZm9yZSB3ZSBzdGFydC4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAobWluID4gbWQuZW5kX3N1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWluID4gbWQuZW5kU3ViamVjdCAtIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
X05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuY3R5cGUpIHsKQEAgLTE1
NjUsOSArMTUwNCw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7
CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkg
PSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNDgsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
Pj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9
ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwpAQCAtMTYyNCw3ICsxNTYz
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5jdHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9O
T1RfTkVXTElORToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWlu
OyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZF9zdWJqZWN0IHx8IGlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCB8fCBpc05l
d2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTE2MzIsNyArMTU3MSw3IEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9Q
X05PVF9ESUdJVDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWlu
OyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlEaWdp
dChjKSkKQEAgLTE2NDMsNyArMTU4Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0RJR0lUOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1Ympl
Y3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChjKSkKQEAgLTE2NTQsNyAr
MTU5Myw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0g
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNTcGFjZUNoYXIoYykpCkBAIC0xNjY1LDcgKzE2MDQsNyBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBt
ZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzU3BhY2VDaGFyKGMpKQpAQCAtMTY3Niw3ICsxNjE1LDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1Bf
Tk9UX1dPUkRDSEFSOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBt
aW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNXb3JkQ2hh
cihjKSkKQEAgLTE2ODcsNyArMTYyNiw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1
YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV29yZENoYXIoYykpCkBAIC0xNzA1LDcg
KzE2NDQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
KDUyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3Jp
Z2luYWwgcG9zICovCkBAIC0xNzU1LDcgKzE2OTQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgICBudW1iZXIgZnJvbSBhIGR1bW15IG9wY29kZSBhdCB0aGUgc3RhcnQuICovCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm51bWJlciA+IEVYVFJBQ1RfQkFTSUNfTUFYKQotICAgICAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAyK0xJTktfU0laRSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA9IGdl
dDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMiAr
IExJTktfU0laRSk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyIDw8IDE7CiAgICAgICAg
ICAgICAgICAgCiAjaWZkZWYgREVCVUcKQEAgLTE3NjQsMjYgKzE3MDMsMjYgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0IDwg
bWQub2Zmc2V0X21heCkgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5zYXZlX29mZnNldDEgPSBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldF07Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MiA9IG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMub2Zmc2V0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MyA9IG1kLm9mZnNldF92ZWN0b3JbbWQub2Zmc2V0
X2VuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07CisgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA8IG1kLm9mZnNldE1heCkg
eworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zm
c2V0MSA9IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRd
OworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zm
c2V0MiA9IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQg
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2
ZU9mZnNldDMgPSBtZC5vZmZzZXRWZWN0b3JbbWQub2Zmc2V0RW5kIC0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubnVtYmVyXTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIERQUklOVEYoKCJzYXZpbmcgJWQgJWQgJWRcbiIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnNhdmVfb2Zmc2V0MSwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZz
ZXQyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDMpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvclttZC5vZmZzZXRfZW5kIC0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubnVtYmVyXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyIC0gbWQuc3RhcnRfc3ViamVjdDsKKyAgICAgICAgICAgICAgICAgICAgRFBSSU5URigoInNh
dmluZyAlZCAlZCAlZFxuIiwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDEs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQyLCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5zYXZlT2Zmc2V0MykpOworICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRW
ZWN0b3JbbWQub2Zmc2V0RW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyXSA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC0gbWQuc3RhcnRTdWJqZWN0Owog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAg
ICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDEsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNv
ZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwg
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIgKz0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0FMVCk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBEUFJJTlRGKCgiYnJhY2tldCAlZCBmYWlsZWRc
biIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcikpOwogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5vZmZzZXRdID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9v
ZmZzZXQxOwotICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDFdID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c2F2ZV9vZmZzZXQyOwotICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVjdG9yW21kLm9m
ZnNldF9lbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdID0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQzOworICAgICAgICAgICAgICAgICAgICBtZC5v
ZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XSA9IHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQxOworICAgICAgICAgICAgICAgICAgICBtZC5v
ZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ICsgMV0gPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MjsKKyAgICAgICAgICAgICAgICAgICAg
bWQub2Zmc2V0VmVjdG9yW21kLm9mZnNldEVuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm51bWJlcl0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MzsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg0NSw4ICsxNzg0LDggQEAgUlJFVFVSTl9TV0lUQ0g6CiAjZW5kaWYKICAg
ICAKIFJFVFVSTjoKLSAgICBBU1NFUlQoaXNfbWF0Y2ggPT0gTUFUQ0hfTUFUQ0ggfHwgaXNfbWF0
Y2ggPT0gTUFUQ0hfTk9NQVRDSCk7Ci0gICAgcmV0dXJuIGlzX21hdGNoOworICAgIEFTU0VSVChp
c01hdGNoID09IE1BVENIX01BVENIIHx8IGlzTWF0Y2ggPT0gTUFUQ0hfTk9NQVRDSCk7CisgICAg
cmV0dXJuIGlzTWF0Y2g7CiB9CiAKIApAQCAtMTkwMyw3ICsxODQyLDcgQEAgc3RhdGljIHZvaWQg
dHJ5Rmlyc3RCeXRlT3B0aW1pemF0aW9uKGNvbgogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgdHJ5
UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9uKGNvbnN0IFVDaGFyKiYgc3ViamVjdFB0ciwgY29uc3Qg
VUNoYXIqIGVuZFN1YmplY3QsIGludCByZXFfYnl0ZSwgaW50IHJlcV9ieXRlMiwgYm9vbCByZXFf
Ynl0ZV9jYXNlbGVzcywgYm9vbCBoYXNGaXJzdEJ5dGUsIGNvbnN0IFVDaGFyKiYgcmVxX2J5dGVf
cHRyKQorc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9uKGNvbnN0IFVDaGFy
KiYgc3ViamVjdFB0ciwgY29uc3QgVUNoYXIqIGVuZFN1YmplY3QsIGludCByZXFfYnl0ZSwgaW50
IHJlcV9ieXRlMiwgYm9vbCByZXFfYnl0ZV9jYXNlbGVzcywgYm9vbCBoYXNGaXJzdEJ5dGUsIGNv
bnN0IFVDaGFyKiYgcmVxQnl0ZVB0cikKIHsKICAgICAvKiBJZiByZXFfYnl0ZSBpcyBzZXQsIHdl
IGtub3cgdGhhdCB0aGF0IGNoYXJhY3RlciBtdXN0IGFwcGVhciBpbiB0aGUgc3ViamVjdAogICAg
ICBmb3IgdGhlIG1hdGNoIHRvIHN1Y2NlZWQuIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgc2V0
LCByZXFfYnl0ZSBtdXN0IGJlCkBAIC0xOTI1LDcgKzE4NjQsNyBAQCBzdGF0aWMgYm9vbCB0cnlS
ZXF1aXJlZEJ5dGVPcHRpbWl6YXRpb24oCiAgICAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8gcmVw
ZWF0IHRoZSBzZWFyY2ggaWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUKICAgICAgICAgIHBs
YWNlIHdlIGZvdW5kIGl0IGF0IGxhc3QgdGltZS4gKi8KIAotICAgICAgICBpZiAocCA+IHJlcV9i
eXRlX3B0cikgeworICAgICAgICBpZiAocCA+IHJlcUJ5dGVQdHIpIHsKICAgICAgICAgICAgIGlm
IChyZXFfYnl0ZV9jYXNlbGVzcykgewogICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kU3Vi
amVjdCkgewogICAgICAgICAgICAgICAgICAgICBpbnQgcHAgPSAqcCsrOwpAQCAtMTk1Miw3ICsx
ODkxLDcgQEAgc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9uKAogICAgICAg
ICAgICAgIGZvdW5kIGl0LCBzbyB0aGF0IHdlIGRvbid0IHNlYXJjaCBhZ2FpbiBuZXh0IHRpbWUg
cm91bmQgdGhlIGxvb3AgaWYKICAgICAgICAgICAgICB0aGUgc3RhcnQgaGFzbid0IHBhc3NlZCB0
aGlzIGNoYXJhY3RlciB5ZXQuICovCiAKLSAgICAgICAgICAgIHJlcV9ieXRlX3B0ciA9IHA7Cisg
ICAgICAgICAgICByZXFCeXRlUHRyID0gcDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xOTY3LDEzICsxOTA2LDEzIEBAIGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3Qg
SlNSZWdFeHAqIHJlLAogICAgIEFTU0VSVChvZmZzZXRjb3VudCA+PSAwKTsKICAgICBBU1NFUlQo
b2Zmc2V0cyB8fCBvZmZzZXRjb3VudCA9PSAwKTsKICAgICAKLSAgICBNYXRjaERhdGEgbWF0Y2hf
YmxvY2s7Ci0gICAgbWF0Y2hfYmxvY2suc3RhcnRfc3ViamVjdCA9IHN1YmplY3Q7Ci0gICAgbWF0
Y2hfYmxvY2suZW5kX3N1YmplY3QgPSBtYXRjaF9ibG9jay5zdGFydF9zdWJqZWN0ICsgbGVuZ3Ro
OwotICAgIGNvbnN0IFVDaGFyKiBlbmRfc3ViamVjdCA9IG1hdGNoX2Jsb2NrLmVuZF9zdWJqZWN0
OworICAgIE1hdGNoRGF0YSBtYXRjaEJsb2NrOworICAgIG1hdGNoQmxvY2suc3RhcnRTdWJqZWN0
ID0gc3ViamVjdDsKKyAgICBtYXRjaEJsb2NrLmVuZFN1YmplY3QgPSBtYXRjaEJsb2NrLnN0YXJ0
U3ViamVjdCArIGxlbmd0aDsKKyAgICBjb25zdCBVQ2hhciogZW5kU3ViamVjdCA9IG1hdGNoQmxv
Y2suZW5kU3ViamVjdDsKICAgICAKLSAgICBtYXRjaF9ibG9jay5tdWx0aWxpbmUgPSAocmUtPm9w
dGlvbnMgJiBNYXRjaEFjcm9zc011bHRpcGxlTGluZXNPcHRpb24pOwotICAgIG1hdGNoX2Jsb2Nr
Lmlnbm9yZUNhc2UgPSAocmUtPm9wdGlvbnMgJiBJZ25vcmVDYXNlT3B0aW9uKTsKKyAgICBtYXRj
aEJsb2NrLm11bHRpbGluZSA9IChyZS0+b3B0aW9ucyAmIE1hdGNoQWNyb3NzTXVsdGlwbGVMaW5l
c09wdGlvbik7CisgICAgbWF0Y2hCbG9jay5pZ25vcmVDYXNlID0gKHJlLT5vcHRpb25zICYgSWdu
b3JlQ2FzZU9wdGlvbik7CiAgICAgCiAgICAgLyogSWYgdGhlIGV4cHJlc3Npb24gaGFzIGdvdCBt
b3JlIGJhY2sgcmVmZXJlbmNlcyB0aGFuIHRoZSBvZmZzZXRzIHN1cHBsaWVkIGNhbgogICAgICBo
b2xkLCB3ZSBnZXQgYSB0ZW1wb3JhcnkgY2h1bmsgb2Ygd29ya2luZyBzdG9yZSB0byB1c2UgZHVy
aW5nIHRoZSBtYXRjaGluZy4KQEAgLTE5ODgsMTYgKzE5MjcsMTYgQEAgaW50IGpzUmVnRXhwRXhl
Y3V0ZShjb25zdCBKU1JlZ0V4cCogcmUsCiAgICAgYm9vbCB1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0
cyA9IGZhbHNlOwogICAgIGlmIChyZS0+dG9wX2JhY2tyZWYgPiAwICYmIHJlLT50b3BfYmFja3Jl
ZiA+PSBvY291bnQvMykgewogICAgICAgICBvY291bnQgPSByZS0+dG9wX2JhY2tyZWYgKiAzICsg
MzsKLSAgICAgICAgbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciA9IG5ldyBpbnRbb2NvdW50XTsK
LSAgICAgICAgaWYgKCFtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yKQorICAgICAgICBtYXRjaEJs
b2NrLm9mZnNldFZlY3RvciA9IG5ldyBpbnRbb2NvdW50XTsKKyAgICAgICAgaWYgKCFtYXRjaEJs
b2NrLm9mZnNldFZlY3RvcikKICAgICAgICAgICAgIHJldHVybiBKU1JlZ0V4cEVycm9yTm9NZW1v
cnk7CiAgICAgICAgIHVzaW5nX3RlbXBvcmFyeV9vZmZzZXRzID0gdHJ1ZTsKICAgICB9IGVsc2UK
LSAgICAgICAgbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciA9IG9mZnNldHM7CisgICAgICAgIG1h
dGNoQmxvY2sub2Zmc2V0VmVjdG9yID0gb2Zmc2V0czsKICAgICAKLSAgICBtYXRjaF9ibG9jay5v
ZmZzZXRfZW5kID0gb2NvdW50OwotICAgIG1hdGNoX2Jsb2NrLm9mZnNldF9tYXggPSAoMipvY291
bnQpLzM7Ci0gICAgbWF0Y2hfYmxvY2sub2Zmc2V0X292ZXJmbG93ID0gZmFsc2U7CisgICAgbWF0
Y2hCbG9jay5vZmZzZXRFbmQgPSBvY291bnQ7CisgICAgbWF0Y2hCbG9jay5vZmZzZXRNYXggPSAo
MipvY291bnQpLzM7CisgICAgbWF0Y2hCbG9jay5vZmZzZXRPdmVyZmxvdyA9IGZhbHNlOwogICAg
IAogICAgIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9mZnNldHMgdGhhdCB3ZSBu
ZWVkIHRvIHJlc2V0IGVhY2ggdGltZS4gRG9pbmcKICAgICAgdGhpcyBtYWtlcyBhIGh1Z2UgZGlm
ZmVyZW5jZSB0byBleGVjdXRpb24gdGltZSB3aGVuIHRoZXJlIGFyZW4ndCBtYW55IGJyYWNrZXRz
CkBAIC0yMDExLDggKzE5NTAsOCBAQCBpbnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhw
KiByZSwKICAgICAgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgcHJldmlvdXNseSBzZXQsIGJ1dCB0aGV5
IGdldCBzYXZlZCBhbmQgcmVzdG9yZWQsIGFuZCBzbyB3ZQogICAgICBpbml0aWFsaXplIHRoZW0g
dG8gYXZvaWQgcmVhZGluZyB1bmluaXRpYWxpemVkIGxvY2F0aW9ucy4gKi8KICAgICAKLSAgICBp
ZiAobWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcikgewotICAgICAgICBpbnQqIGlwdHIgPSBtYXRj
aF9ibG9jay5vZmZzZXRfdmVjdG9yICsgb2NvdW50OworICAgIGlmIChtYXRjaEJsb2NrLm9mZnNl
dFZlY3RvcikgeworICAgICAgICBpbnQqIGlwdHIgPSBtYXRjaEJsb2NrLm9mZnNldFZlY3RvciAr
IG9jb3VudDsKICAgICAgICAgaW50KiBpZW5kID0gaXB0ciAtIHJlc2V0Y291bnQvMiArIDE7CiAg
ICAgICAgIHdoaWxlICgtLWlwdHIgPj0gaWVuZCkKICAgICAgICAgICAgICppcHRyID0gLTE7CkBA
IC0yMDQ3LDIxICsxOTg2LDIxIEBAIGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAq
IHJlLAogICAgIC8qIExvb3AgZm9yIGhhbmRsaW5nIHVuYW5jaG9yZWQgcmVwZWF0ZWQgbWF0Y2hp
bmcgYXR0ZW1wdHM7IGZvciBhbmNob3JlZCByZWdleHMKICAgICAgdGhlIGxvb3AgcnVucyBqdXN0
IG9uY2UuICovCiAgICAgCi0gICAgY29uc3QgVUNoYXIqIHN0YXJ0X21hdGNoID0gc3ViamVjdCAr
IHN0YXJ0X29mZnNldDsKLSAgICBjb25zdCBVQ2hhciogcmVxX2J5dGVfcHRyID0gc3RhcnRfbWF0
Y2ggLSAxOworICAgIGNvbnN0IFVDaGFyKiBzdGFydE1hdGNoID0gc3ViamVjdCArIHN0YXJ0X29m
ZnNldDsKKyAgICBjb25zdCBVQ2hhciogcmVxQnl0ZVB0ciA9IHN0YXJ0TWF0Y2ggLSAxOwogICAg
IGJvb2wgdXNlTXVsdGlMaW5lRmlyc3RDaGFyT3B0aW1pemF0aW9uID0gcmUtPm9wdGlvbnMgJiBV
c2VNdWx0aUxpbmVGaXJzdEJ5dGVPcHRpbWl6YXRpb25PcHRpb247CiAgICAgCiAgICAgZG8gewog
ICAgICAgICAvKiBSZXNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXh0cmFjdGlvbnMgd2UgbWln
aHQgc2VlLiAqLwotICAgICAgICBpZiAobWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcikgewotICAg
ICAgICAgICAgaW50KiBpcHRyID0gbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcjsKKyAgICAgICAg
aWYgKG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yKSB7CisgICAgICAgICAgICBpbnQqIGlwdHIgPSBt
YXRjaEJsb2NrLm9mZnNldFZlY3RvcjsKICAgICAgICAgICAgIGludCogaWVuZCA9IGlwdHIgKyBy
ZXNldGNvdW50OwogICAgICAgICAgICAgd2hpbGUgKGlwdHIgPCBpZW5kKQogICAgICAgICAgICAg
ICAgICppcHRyKysgPSAtMTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdHJ5Rmlyc3RC
eXRlT3B0aW1pemF0aW9uKHN0YXJ0X21hdGNoLCBlbmRfc3ViamVjdCwgZmlyc3RfYnl0ZSwgZmly
c3RfYnl0ZV9jYXNlbGVzcywgdXNlTXVsdGlMaW5lRmlyc3RDaGFyT3B0aW1pemF0aW9uLCBtYXRj
aF9ibG9jay5zdGFydF9zdWJqZWN0ICsgc3RhcnRfb2Zmc2V0KTsKLSAgICAgICAgaWYgKHRyeVJl
cXVpcmVkQnl0ZU9wdGltaXphdGlvbihzdGFydF9tYXRjaCwgZW5kX3N1YmplY3QsIHJlcV9ieXRl
LCByZXFfYnl0ZTIsIHJlcV9ieXRlX2Nhc2VsZXNzLCBmaXJzdF9ieXRlID49IDAsIHJlcV9ieXRl
X3B0cikpCisgICAgICAgIHRyeUZpcnN0Qnl0ZU9wdGltaXphdGlvbihzdGFydE1hdGNoLCBlbmRT
dWJqZWN0LCBmaXJzdF9ieXRlLCBmaXJzdF9ieXRlX2Nhc2VsZXNzLCB1c2VNdWx0aUxpbmVGaXJz
dENoYXJPcHRpbWl6YXRpb24sIG1hdGNoQmxvY2suc3RhcnRTdWJqZWN0ICsgc3RhcnRfb2Zmc2V0
KTsKKyAgICAgICAgaWYgKHRyeVJlcXVpcmVkQnl0ZU9wdGltaXphdGlvbihzdGFydE1hdGNoLCBl
bmRTdWJqZWN0LCByZXFfYnl0ZSwgcmVxX2J5dGUyLCByZXFfYnl0ZV9jYXNlbGVzcywgZmlyc3Rf
Ynl0ZSA+PSAwLCByZXFCeXRlUHRyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAvKiBXaGVuIGEgbWF0Y2ggb2NjdXJzLCBzdWJzdHJpbmdzIHdpbGwgYmUg
c2V0IGZvciBhbGwgaW50ZXJuYWwgZXh0cmFjdGlvbnM7CkBAIC0yMDcyLDE1ICsyMDExLDE1IEBA
IGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgICAgICAgaWYgY2Vy
dGFpbiBwYXJ0cyBvZiB0aGUgcGF0dGVybiB3ZXJlIG5vdCB1c2VkLiAqLwogICAgICAgICAKICAg
ICAgICAgLyogVGhlIGNvZGUgc3RhcnRzIGFmdGVyIHRoZSBKU1JlZ0V4cCBibG9jayBhbmQgdGhl
IGNhcHR1cmUgbmFtZSB0YWJsZS4gKi8KLSAgICAgICAgY29uc3QgdXNjaGFyKiBzdGFydF9jb2Rl
ID0gKGNvbnN0IHVzY2hhciopKHJlICsgMSk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHN0YXJ0X2NvZGUgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKHJlICsgMSk7CiAgICAgICAgIAot
ICAgICAgICBpbnQgcmV0dXJuQ29kZSA9IG1hdGNoKHN0YXJ0X21hdGNoLCBzdGFydF9jb2RlLCAy
LCBtYXRjaF9ibG9jayk7CisgICAgICAgIGludCByZXR1cm5Db2RlID0gbWF0Y2goc3RhcnRNYXRj
aCwgc3RhcnRfY29kZSwgMiwgbWF0Y2hCbG9jayk7CiAgICAgICAgIAogICAgICAgICAvKiBXaGVu
IHRoZSByZXN1bHQgaXMgbm8gbWF0Y2gsIGFkdmFuY2UgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQg
Y2hhcmFjdGVyCiAgICAgICAgICBhbmQgY29udGludWUuICovCiAgICAgICAgIAogICAgICAgICBp
ZiAocmV0dXJuQ29kZSA9PSBNQVRDSF9OT01BVENIKSB7Ci0gICAgICAgICAgICBzdGFydF9tYXRj
aCsrOworICAgICAgICAgICAgc3RhcnRNYXRjaCsrOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0yMDk0LDMyICsyMDMzLDMyIEBAIGludCBqc1JlZ0V4cEV4
ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgICAgICAKICAgICAgICAgaWYgKHVzaW5nX3Rl
bXBvcmFyeV9vZmZzZXRzKSB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0Y291bnQgPj0gNCkgewot
ICAgICAgICAgICAgICAgIG1lbWNweShvZmZzZXRzICsgMiwgbWF0Y2hfYmxvY2sub2Zmc2V0X3Zl
Y3RvciArIDIsIChvZmZzZXRjb3VudCAtIDIpICogc2l6ZW9mKGludCkpOworICAgICAgICAgICAg
ICAgIG1lbWNweShvZmZzZXRzICsgMiwgbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IgKyAyLCAob2Zm
c2V0Y291bnQgLSAyKSAqIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgICAgICBEUFJJTlRGKCgi
Q29waWVkIG9mZnNldHMgZnJvbSB0ZW1wb3JhcnkgbWVtb3J5XG4iKSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobWF0Y2hfYmxvY2suZW5kX29mZnNldF90b3AgPiBvZmZzZXRjb3Vu
dCkKLSAgICAgICAgICAgICAgICBtYXRjaF9ibG9jay5vZmZzZXRfb3ZlcmZsb3cgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKG1hdGNoQmxvY2suZW5kT2Zmc2V0VG9wID4gb2Zmc2V0Y291bnQpCisg
ICAgICAgICAgICAgICAgbWF0Y2hCbG9jay5vZmZzZXRPdmVyZmxvdyA9IHRydWU7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIERQUklOVEYoKCJGcmVlaW5nIHRlbXBvcmFyeSBtZW1vcnlcbiIp
KTsKLSAgICAgICAgICAgIGRlbGV0ZSBbXSBtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yOworICAg
ICAgICAgICAgZGVsZXRlIFtdIG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICByZXR1cm5Db2RlID0gbWF0Y2hfYmxvY2sub2Zmc2V0X292ZXJmbG93
ID8gMCA6IG1hdGNoX2Jsb2NrLmVuZF9vZmZzZXRfdG9wIC8gMjsKKyAgICAgICAgcmV0dXJuQ29k
ZSA9IG1hdGNoQmxvY2sub2Zmc2V0T3ZlcmZsb3cgPyAwIDogbWF0Y2hCbG9jay5lbmRPZmZzZXRU
b3AgLyAyOwogICAgICAgICAKICAgICAgICAgaWYgKG9mZnNldGNvdW50IDwgMikKICAgICAgICAg
ICAgIHJldHVybkNvZGUgPSAwOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG9mZnNldHNb
MF0gPSBzdGFydF9tYXRjaCAtIG1hdGNoX2Jsb2NrLnN0YXJ0X3N1YmplY3Q7Ci0gICAgICAgICAg
ICBvZmZzZXRzWzFdID0gbWF0Y2hfYmxvY2suZW5kX21hdGNoX3B0ciAtIG1hdGNoX2Jsb2NrLnN0
YXJ0X3N1YmplY3Q7CisgICAgICAgICAgICBvZmZzZXRzWzBdID0gc3RhcnRNYXRjaCAtIG1hdGNo
QmxvY2suc3RhcnRTdWJqZWN0OworICAgICAgICAgICAgb2Zmc2V0c1sxXSA9IG1hdGNoQmxvY2su
ZW5kTWF0Y2hQdHIgLSBtYXRjaEJsb2NrLnN0YXJ0U3ViamVjdDsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgRFBSSU5URigoIj4+Pj4gcmV0dXJuaW5nICVkXG4iLCByYykpOwogICAgICAg
ICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgICB9IHdoaWxlIChzdGFydF9tYXRjaCA8PSBlbmRfc3Vi
amVjdCk7CisgICAgfSB3aGlsZSAoc3RhcnRNYXRjaCA8PSBlbmRTdWJqZWN0KTsKICAgICAKICAg
ICBpZiAodXNpbmdfdGVtcG9yYXJ5X29mZnNldHMpIHsKICAgICAgICAgRFBSSU5URigoIkZyZWVp
bmcgdGVtcG9yYXJ5IG1lbW9yeVxuIikpOwotICAgICAgICBkZWxldGUgW10gbWF0Y2hfYmxvY2su
b2Zmc2V0X3ZlY3RvcjsKKyAgICAgICAgZGVsZXRlIFtdIG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9y
OwogICAgIH0KICAgICAKICAgICBEUFJJTlRGKCgiPj4+PiByZXR1cm5pbmcgUENSRV9FUlJPUl9O
T01BVENIXG4iKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfaW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfaW50ZXJuYWwuaAkocmV2aXNp
b24gMjg3MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfaW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsMzQgKzc2LDE0IEBAIHRvdGFsIGxlbmd0aC4gKi8KICNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0MjQ0KQogI2VuZGlmCiAKKyNpbmNsdWRlICJwY3JlLmgiCisKIC8qIFRo
ZSB2YWx1ZSBvZiBMSU5LX1NJWkUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQg
dG8gc3RvcmUgbGlua3MgYXMKIG9mZnNldHMgd2l0aGluIHRoZSBjb21waWxlZCByZWdleC4gVGhl
IGRlZmF1bHQgaXMgMiwgd2hpY2ggYWxsb3dzIGZvciBjb21waWxlZAotcGF0dGVybnMgdXAgdG8g
NjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLiBIb3dldmVy
LCBQQ1JFCi1jYW4gYWxzbyBiZSBjb21waWxlZCB0byB1c2UgMyBvciA0IGJ5dGVzIGluc3RlYWQu
IFRoaXMgYWxsb3dzIGZvciBsb25nZXIKLXBhdHRlcm5zIGluIGV4dHJlbWUgY2FzZXMuIE9uIHN5
c3RlbXMgdGhhdCBzdXBwb3J0IGl0LCAiY29uZmlndXJlIiBjYW4gYmUgdXNlZAotdG8gb3ZlcnJp
ZGUgdGhpcyBkZWZhdWx0LiAqLworcGF0dGVybnMgdXAgdG8gNjRLIGxvbmcuICovCiAKICNkZWZp
bmUgTElOS19TSVpFICAgMgogCi0vKiBUaGUgYmVsb3cgbGltaXQgcmVzdHJpY3RzIHRoZSBudW1i
ZXIgb2YgcmVjdXJzaXZlIG1hdGNoIGNhbGxzIGluIG9yZGVyIHRvCi1saW1pdCB0aGUgbWF4aW11
bSBhbW91bnQgb2Ygc3RhY2sgKG9yIGhlYXAsIGlmIE5PX1JFQ1VSU0UgaXMgZGVmaW5lZCkgdGhh
dCBpcyB1c2VkLiBUaGUKLXZhbHVlIG9mIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiBhcHBsaWVzIG9u
bHkgdG8gcmVjdXJzaXZlIGNhbGxzIG9mIG1hdGNoKCkuCi0gCi0gVGhpcyBsaW1pdCBpcyB0aWVk
IHRvIHRoZSBzaXplIG9mIE1hdGNoRnJhbWUuICBSaWdodCBub3cgd2UgYWxsb3cgUENSRSB0byBh
bGxvY2F0ZSB1cAotIHRvIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiAtIDE2ICogc2l6ZW9mKE1hdGNo
RnJhbWUpIGJ5dGVzIG9mICJzdGFjayIgc3BhY2UgYmVmb3JlIHdlIGdpdmUgdXAuCi0gQ3VycmVu
dGx5IHRoYXQncyAxMDAwMDAgLSAxNiAqICgyMyAqIDQpICB+IDkwTUIKLSAqLwotCi0jZGVmaW5l
IE1BVENIX0xJTUlUX1JFQ1VSU0lPTiAxMDAwMDAKLQotI2RlZmluZSBfcGNyZV9kZWZhdWx0X3Rh
YmxlcyBranNfcGNyZV9kZWZhdWx0X3RhYmxlcwotI2RlZmluZSBfcGNyZV9vcmQydXRmOCBranNf
cGNyZV9vcmQydXRmOAotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMSBranNfcGNyZV91dGY4X3Rh
YmxlMQotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMiBranNfcGNyZV91dGY4X3RhYmxlMgotI2Rl
ZmluZSBfcGNyZV91dGY4X3RhYmxlMyBranNfcGNyZV91dGY4X3RhYmxlMwotI2RlZmluZSBfcGNy
ZV91dGY4X3RhYmxlNCBranNfcGNyZV91dGY4X3RhYmxlNAotI2RlZmluZSBfcGNyZV94Y2xhc3Mg
a2pzX3BjcmVfeGNsYXNzCi0KIC8qIERlZmluZSBERUJVRyB0byBnZXQgZGVidWdnaW5nIG91dHB1
dCBvbiBzdGRvdXQuICovCiAKICNpZiAwCkBAIC0xMjEsMTE4ICsxMDEsNzIgQEAgYWxsLCBpdCBo
YWQgb25seSBiZWVuIGFib3V0IDEwIHllYXJzIHRoZQogI2RlZmluZSBEUFJJTlRGKHApIC8qbm90
aGluZyovCiAjZW5kaWYKIAotLyogU3RhbmRhcmQgQyBoZWFkZXJzIHBsdXMgdGhlIGV4dGVybmFs
IGludGVyZmFjZSBkZWZpbml0aW9uLiBUaGUgb25seSB0aW1lCi1zZXRqbXAgYW5kIHN0ZGFyZyBh
cmUgdXNlZCBpcyB3aGVuIE5PX1JFQ1VSU0UgaXMgc2V0LiAqLwotCi0jaW5jbHVkZSA8Y3R5cGUu
aD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDxz
dGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBJbmNsdWRlIHRoZSBwdWJs
aWMgUENSRSBoZWFkZXIgYW5kIHRoZSBkZWZpbml0aW9ucyBvZiBVQ1AgY2hhcmFjdGVyIHByb3Bl
cnR5Ci12YWx1ZXMuICovCi0KLSNpbmNsdWRlICJwY3JlLmgiCi0KLXR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgcGNyZV91aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVkIHBjcmVfdWludDMyOwotdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIHVzY2hhcjsKLQogLyogUENSRSBrZWVwcyBvZmZzZXRzIGluIGl0cyBj
b21waWxlZCBjb2RlIGFzIDItYnl0ZSBxdWFudGl0aWVzIChhbHdheXMgc3RvcmVkCiBpbiBiaWct
ZW5kaWFuIG9yZGVyKSBieSBkZWZhdWx0LiBUaGVzZSBhcmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRv
IGxpbmsgZnJvbSB0aGUKIHN0YXJ0IG9mIGEgc3VicGF0dGVybiB0byBpdHMgYWx0ZXJuYXRpdmVz
IGFuZCBpdHMgZW5kLiBUaGUgdXNlIG9mIDIgYnl0ZXMgcGVyCiBvZmZzZXQgbGltaXRzIHRoZSBz
aXplIG9mIHRoZSBjb21waWxlZCByZWdleCB0byBhcm91bmQgNjRLLCB3aGljaCBpcyBiaWcgZW5v
dWdoCiBmb3IgYWxtb3N0IGV2ZXJ5Ym9keS4gSG93ZXZlciwgSSByZWNlaXZlZCBhIHJlcXVlc3Qg
Zm9yIGFuIGV2ZW4gYmlnZ2VyIGxpbWl0LgogRm9yIHRoaXMgcmVhc29uLCBhbmQgYWxzbyB0byBt
YWtlIHRoZSBjb2RlIGVhc2llciB0byBtYWludGFpbiwgdGhlIHN0b3JpbmcgYW5kCi1sb2FkaW5n
IG9mIG9mZnNldHMgZnJvbSB0aGUgYnl0ZSBzdHJpbmcgaXMgbm93IGhhbmRsZWQgYnkgdGhlIG1h
Y3JvcyB0aGF0IGFyZQotZGVmaW5lZCBoZXJlLgotCi1UaGUgbWFjcm9zIGFyZSBjb250cm9sbGVk
IGJ5IHRoZSB2YWx1ZSBvZiBMSU5LX1NJWkUuIFRoaXMgZGVmYXVsdHMgdG8gMiBpbgotdGhlIGNv
bmZpZy5oIGZpbGUsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyAtRCBvbiB0aGUgY29t
bWFuZCBsaW5lLiBUaGlzCi1pcyBhdXRvbWF0ZWQgb24gVW5peCBzeXN0ZW1zIHZpYSB0aGUgImNv
bmZpZ3VyZSIgY29tbWFuZC4gKi8KK2xvYWRpbmcgb2Ygb2Zmc2V0cyBmcm9tIHRoZSBieXRlIHN0
cmluZyBpcyBub3cgaGFuZGxlZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlCitkZWZpbmVkIGhl
cmUuICovCiAKLSNpZiBMSU5LX1NJWkUgPT0gMgotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0T3Bj
b2RlVmFsdWVBdE9mZnNldCh1c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCwgdW5zaWdu
ZWQgc2hvcnQgdmFsdWUpCi17Ci0gICAgb3Bjb2RlUHRyW29mZnNldF0gPSB2YWx1ZSA+PiA4Owot
ICAgIG9wY29kZVB0cltvZmZzZXQgKyAxXSA9IHZhbHVlICYgMjU1OwotfQorLyogUENSRSB1c2Vz
IHNvbWUgb3RoZXIgMi1ieXRlIHF1YW50aXRpZXMgdGhhdCBkbyBub3QgY2hhbmdlIHdoZW4gdGhl
IHNpemUgb2YKK29mZnNldHMgY2hhbmdlcy4gVGhlcmUgYXJlIHVzZWQgZm9yIHJlcGVhdCBjb3Vu
dHMgYW5kIGZvciBvdGhlciB0aGluZ3Mgc3VjaCBhcworY2FwdHVyaW5nIHBhcmVudGhlc2lzIG51
bWJlcnMgaW4gYmFjayByZWZlcmVuY2VzLiAqLwogCi1zdGF0aWMgaW5saW5lIHNob3J0IGdldE9w
Y29kZVZhbHVlQXRPZmZzZXQoY29uc3QgdXNjaGFyKiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQp
CitzdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVWYWx1ZSh1bnNpZ25lZCBjaGFyKiBvcGNvZGVQ
dHIsIGludCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKChvcGNvZGVQdHJbb2Zmc2V0XSA8PCA4KSB8
IG9wY29kZVB0cltvZmZzZXQgKyAxXSk7CisgICAgQVNTRVJUKHZhbHVlID49IDAgJiYgdmFsdWUg
PD0gMHhGRkZGKTsKKyAgICBvcGNvZGVQdHJbMF0gPSB2YWx1ZSA+PiA4OworICAgIG9wY29kZVB0
clsxXSA9IHZhbHVlOwogfQogCi0jZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMTYpCi0K
LSNlbGlmIExJTktfU0laRSA9PSAzCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRPcGNvZGVWYWx1
ZUF0T2Zmc2V0KHVzY2hhciogb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCB2YWx1
ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGdldDJCeXRlVmFsdWUoY29uc3QgdW5zaWduZWQgY2hhciog
b3Bjb2RlUHRyKQogewotICAgIEFTU0VSVCghKHZhbHVlICYgMHhGRjAwMDAwMCkpOyAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgYWxsb3dzIHZhbHVlcyA8IDJeMjQKLSAgICBvcGNvZGVQdHJbb2Zmc2V0
XSA9IHZhbHVlID4+IDE2OwotICAgIG9wY29kZVB0cltvZmZzZXQgKyAxXSA9IHZhbHVlID4+IDg7
Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDJdID0gdmFsdWUgJiAyNTU7CisgICAgcmV0dXJuIChv
cGNvZGVQdHJbMF0gPDwgOCkgfCBvcGNvZGVQdHJbMV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50
IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29uc3QgdXNjaGFyKiBvcGNvZGVQdHIsIHNpemVfdCBv
ZmZzZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UodW5zaWdu
ZWQgY2hhciomIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewotICAgIHJldHVybiAoKG9wY29kZVB0
cltvZmZzZXRdIDw8IDE2KSB8IChvcGNvZGVQdHJbb2Zmc2V0ICsgMV0gPDwgOCkgfCBvcGNvZGVQ
dHJbb2Zmc2V0ICsgMl0pOworICAgIHB1dDJCeXRlVmFsdWUob3Bjb2RlUHRyLCB2YWx1ZSk7Cisg
ICAgb3Bjb2RlUHRyICs9IDI7CiB9CiAKLSNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8PCAy
NCkKLQotI2VsaWYgTElOS19TSVpFID09IDQKLQotc3RhdGljIGlubGluZSB2b2lkIHB1dE9wY29k
ZVZhbHVlQXRPZmZzZXQodXNjaGFyKiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQsIHVuc2lnbmVk
IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtWYWx1ZUFsbG93WmVybyh1bnNpZ25l
ZCBjaGFyKiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0XSA9
IHZhbHVlID4+IDI0OwotICAgIG9wY29kZVB0cltvZmZzZXQgKyAxXSA9IHZhbHVlID4+IDE2Owot
ICAgIG9wY29kZVB0cltvZmZzZXQgKyAyXSA9IHZhbHVlID4+IDg7Ci0gICAgb3Bjb2RlUHRyW29m
ZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CisgICAgcHV0MkJ5dGVWYWx1ZShvcGNvZGVQdHIsIHZh
bHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChjb25z
dCB1c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgaW50IGdl
dExpbmtWYWx1ZUFsbG93WmVybyhjb25zdCB1bnNpZ25lZCBjaGFyKiBvcGNvZGVQdHIpCiB7Ci0g
ICAgcmV0dXJuICgob3Bjb2RlUHRyW29mZnNldF0gPDwgMjQpIHwgKG9wY29kZVB0cltvZmZzZXQg
KyAxXSA8PCAxNikgfCAob3Bjb2RlUHRyW29mZnNldCArIDJdIDw8IDgpIHwgb3Bjb2RlUHRyW29m
ZnNldCArIDNdKTsKKyAgICByZXR1cm4gZ2V0MkJ5dGVWYWx1ZShvcGNvZGVQdHIpOwogfQogCi0j
ZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMzApICAgLyogS2VlcCBpdCBwb3NpdGl2ZSAq
LwotCi0jZWxzZQotI2Vycm9yIExJTktfU0laRSBtdXN0IGJlIGVpdGhlciAyLCAzLCBvciA0Ci0j
ZW5kaWYKKyNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8PCAxNikKIAotc3RhdGljIGlubGlu
ZSB2b2lkIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKHVzY2hhciomIG9wY29kZVB0
ciwgc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZv
aWQgcHV0TGlua1ZhbHVlKHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewot
ICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQob3Bjb2RlUHRyLCBvZmZzZXQsIHZhbHVlKTsKLSAg
ICBvcGNvZGVQdHIgKz0gTElOS19TSVpFOworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgcHV0TGlu
a1ZhbHVlQWxsb3daZXJvKG9wY29kZVB0ciwgdmFsdWUpOwogfQogCi0vKiBQQ1JFIHVzZXMgc29t
ZSBvdGhlciAyLWJ5dGUgcXVhbnRpdGllcyB0aGF0IGRvIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgc2l6
ZSBvZgotb2Zmc2V0cyBjaGFuZ2VzLiBUaGVyZSBhcmUgdXNlZCBmb3IgcmVwZWF0IGNvdW50cyBh
bmQgZm9yIG90aGVyIHRoaW5ncyBzdWNoIGFzCi1jYXB0dXJpbmcgcGFyZW50aGVzaXMgbnVtYmVy
cyBpbiBiYWNrIHJlZmVyZW5jZXMuICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXQyQnl0ZU9w
Y29kZVZhbHVlQXRPZmZzZXQodXNjaGFyKiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQsIHVuc2ln
bmVkIHNob3J0IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ2V0TGlua1ZhbHVlKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIG9wY29kZVB0cikKIHsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0XSA9IHZhbHVl
ID4+IDg7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDFdID0gdmFsdWUgJiAyNTU7CisgICAgaW50
IHZhbHVlID0gZ2V0TGlua1ZhbHVlQWxsb3daZXJvKG9wY29kZVB0cik7CisgICAgQVNTRVJUKHZh
bHVlKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2hvcnQgZ2V0MkJ5
dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNvbnN0IHVzY2hhciogb3Bjb2RlUHRyLCBzaXplX3Qgb2Zm
c2V0KQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtWYWx1ZUFuZEFkdmFuY2UodW5zaWduZWQg
Y2hhciomIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewotICAgIHJldHVybiAoKG9wY29kZVB0cltv
ZmZzZXRdIDw8IDgpIHwgb3Bjb2RlUHRyW29mZnNldCArIDFdKTsKKyAgICBwdXRMaW5rVmFsdWUo
b3Bjb2RlUHRyLCB2YWx1ZSk7CisgICAgb3Bjb2RlUHRyICs9IExJTktfU0laRTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UodXNj
aGFyKiYgb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBwdXRMaW5rVmFsdWVBbGxvd1plcm9BbmRBZHZhbmNlKHVuc2lnbmVk
IGNoYXIqJiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAgICBwdXQyQnl0ZU9wY29kZVZhbHVl
QXRPZmZzZXQob3Bjb2RlUHRyLCBvZmZzZXQsIHZhbHVlKTsKLSAgICBvcGNvZGVQdHIgKz0gMjsK
KyAgICBwdXRMaW5rVmFsdWVBbGxvd1plcm8ob3Bjb2RlUHRyLCB2YWx1ZSk7CisgICAgb3Bjb2Rl
UHRyICs9IExJTktfU0laRTsKIH0KIAogLy8gRklYTUU6IFRoZXNlIGFyZSByZWFsbHkgbW9yZSBv
ZiBhICJjb21waWxlZCByZWdleHAgc3RhdGUiIHRoYW4gInJlZ2V4cCBvcHRpb25zIgpAQCAtMjQ1
LDE2ICsxNzksNiBAQCBlbnVtIFJlZ0V4cE9wdGlvbnMgewogICAgIE1hdGNoQWNyb3NzTXVsdGlw
bGVMaW5lc09wdGlvbiA9IDB4MDAwMDAwMDIKIH07CiAKLS8qIE5lZ2F0aXZlIHZhbHVlcyBmb3Ig
dGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2YXJpYWJsZXMgKi8KLQotI2RlZmluZSBSRVFfVU5T
RVQgKC0yKQotI2RlZmluZSBSRVFfTk9ORSAgKC0xKQotCi0vKiBUaGUgbWF4aW11bSByZW1haW5p
bmcgbGVuZ3RoIG9mIHN1YmplY3Qgd2UgYXJlIHByZXBhcmVkIHRvIHNlYXJjaCBmb3IgYQotcmVx
X2J5dGUgbWF0Y2guICovCi0KLSNkZWZpbmUgUkVRX0JZVEVfTUFYIDEwMDAKLQogLyogRmxhZ3Mg
YWRkZWQgdG8gZmlyc3RieXRlIG9yIHJlcWJ5dGU7IGEgIm5vbi1saXRlcmFsIiBpdGVtIGlzIGVp
dGhlciBhCiB2YXJpYWJsZS1sZW5ndGggcmVwZWF0LCBvciBhIGFueXRoaW5nIG90aGVyIHRoYW4g
bGl0ZXJhbCBjaGFyYWN0ZXJzLiAqLwogCkBAIC0zNjYsOCArMjkwLDYgQEAgbXVzdCBhbHNvIGJl
IHVwZGF0ZWQgdG8gbWF0Y2guICovCiAgICAgbWFjcm8oQVNTRVJUKSBcCiAgICAgbWFjcm8oQVNT
RVJUX05PVCkgXAogICAgIFwKLSAgICBtYWNybyhPTkNFKSBcCi0gICAgXAogICAgIG1hY3JvKEJS
QVpFUk8pIFwKICAgICBtYWNybyhCUkFNSU5aRVJPKSBcCiAgICAgbWFjcm8oQlJBTlVNQkVSKSBc
CkBAIC0zODEsNTcgKzMwMywxNSBAQCBzdHVkeS5jIHRoYXQgYWxsIG9wY29kZXMgYXJlIGxlc3Mg
dGhhbiAxCiBjaGFyYWN0ZXIgc2VxdWVuY2VzIGVhc2llci4gKi8KIAogLyogVGhlIGhpZ2hlc3Qg
ZXh0cmFjdGlvbiBudW1iZXIgYmVmb3JlIHdlIGhhdmUgdG8gc3RhcnQgdXNpbmcgYWRkaXRpb25h
bAotYnl0ZXMuIChPcmlnaW5hbGx5IFBDUkUgZGlkbid0IGhhdmUgc3VwcG9ydCBmb3IgZXh0cmFj
dGlvbiBjb3VudHMgaGlnaHRlciB0aGFuCitieXRlcy4gKE9yaWdpbmFsbHkgUENSRSBkaWRuJ3Qg
aGF2ZSBzdXBwb3J0IGZvciBleHRyYWN0aW9uIGNvdW50cyBoaWdoZXIgdGhhbgogdGhpcyBudW1i
ZXIuKSBUaGUgdmFsdWUgaXMgbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mIG9wY29kZXMgbGVmdCBh
ZnRlciBPUF9CUkEsCiBpLmUuIDI1NSAtIE9QX0JSQS4gV2UgYWN0dWFsbHkgc2V0IGl0IGEgYml0
IGxvd2VyIHRvIGxlYXZlIHJvb20gZm9yIGFkZGl0aW9uYWwKIG9wY29kZXMuICovCiAKLSNkZWZp
bmUgRVhUUkFDVF9CQVNJQ19NQVggIDEwMAotCi0vKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIGxl
bmd0aCBvZiBmaXhlZCBsZW5ndGggb3BlcmF0aW9ucyBpbiB0aGUgY29tcGlsZWQKLXJlZ2V4LiBU
aGUgbGVuZ3RocyBhcmUgdXNlZCB3aGVuIHNlYXJjaGluZyBmb3Igc3BlY2lmaWMgdGhpbmdzLCBh
bmQgYWxzbyBpbiB0aGUKLWRlYnVnZ2luZyBwcmludGluZyBvZiBhIGNvbXBpbGVkIHJlZ2V4LiBX
ZSB1c2UgYSBtYWNybyBzbyB0aGF0IGl0IGNhbiBiZQotZGVmaW5lZCBjbG9zZSB0byB0aGUgZGVm
aW5pdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhlbXNlbHZlcy4KLQotQXMgdGhpbmdzIGhhdmUgYmVl
biBleHRlbmRlZCwgc29tZSBvZiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGZpeGVkIGxlbnRocywgYnV0
IGFyZQotbWluaW1hIGluc3RlYWQuIEZvciBleGFtcGxlLCB0aGUgbGVuZ3RoIG9mIGEgc2luZ2xl
LWNoYXJhY3RlciByZXBlYXQgbWF5IHZhcnkKLWluIFVURi04IG1vZGUuIFRoZSBjb2RlIHRoYXQg
dXNlcyB0aGlzIHRhYmxlIG11c3Qga25vdyBhYm91dCBzdWNoIHRoaW5ncy4gKi8KLQotI2RlZmlu
ZSBPUF9MRU5HVEhTIFwKLSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgICAgICAgIC8qIFxCLCBcYiwgXEQsIFxkLCBcUywgXHMsIFxXLCBcdyAgICAgICAg
ICovIFwKLSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwgMSwgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIF4sICQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAg
MiwgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXIsIENoYXJuYyAtIG1pbmltdW0g
bGVuZ3RocyAgICAgICAgICovIFwKLSAgMiwgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IEFTQ0lJIGNoYXIgb3Igbm9uLWNhc2VkICAgICAgICAgICAgICAgICovIFwKLSAgMiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovIFwKLSAgLyogUG9zaXRpdmUgc2luZ2xlLWNoYXIgcmVwZWF0cyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqKiBUaGVzZSBhcmUgICovIFwKLSAgMiwgMiwgMiwgMiwgMiwgMiwg
ICAgICAgICAgICAgIC8qICosICo/LCArLCArPywgPywgPz8gICAgICAqKiBtaW5pbWEgaW4gICov
IFwKLSAgNCwgNCwgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHVwdG8sIG1pbnVwdG8sIGV4
YWN0ICAgICAqKiBVVEYtOCBtb2RlICovIFwKLSAgLyogTmVnYXRpdmUgc2luZ2xlLWNoYXIgcmVw
ZWF0cyAtIG9ubHkgZm9yIGNoYXJzIDwgMjU2ICAgICAgICAgICAgICAgICAgICovIFwKLSAgMiwg
MiwgMiwgMiwgMiwgMiwgICAgICAgICAgICAgIC8qIE5PVCAqLCAqPywgKywgKz8sID8sID8/ICAg
ICAgICAgICAgICAgICovIFwKLSAgNCwgNCwgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE5P
VCB1cHRvLCBtaW51cHRvLCBleGFjdCAgICAgICAgICAgICAgICovIFwKLSAgLyogUG9zaXRpdmUg
dHlwZSByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovIFwKLSAgMiwgMiwgMiwgMiwgMiwgMiwgICAgICAgICAgICAgIC8qIFR5cGUgKiwgKj8s
ICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICovIFwKLSAgNCwgNCwgNCwgICAgICAgICAgICAg
ICAgICAgICAgIC8qIFR5cGUgdXB0bywgbWludXB0bywgZXhhY3QgICAgICAgICAgICAgICovIFwK
LSAgLyogQ2hhcmFjdGVyIGNsYXNzICYgcmVmIHJlcGVhdHMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAg
IC8qICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAgICAgICovIFwKLSAgNSwgNSwg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENSUkFOR0UsIENSTUlOUkFOR0UgICAgICAgICAg
ICAgICAgICAgICovIFwKLSAzMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENMQVNT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAzMywgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIE5DTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICovIFwKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhDTEFTUyAtIHZhcmlh
YmxlIGxlbmd0aCAgICAgICAgICAgICAgICovIFwKLSAgMywgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIFJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAg
MSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAgLyogQWx0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19TSVpFLCAgICAgICAgICAgICAgICAg
ICAvKiBLZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEgKyBM
SU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIEtldFJtYXggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAgLyog
S2V0Um1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19T
SVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIEFzc2Vy
dCBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwg
ICAgICAgICAgICAgICAgICAgLyogT25jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8gXAotICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlJBWkVSTywgQlJB
TUlOWkVSTyAgICAgICAgICAgICAgICAgICAgKi8gXAotICAzLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogQlJBTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAot
ICAxICsgTElOS19TSVpFICAgICAgICAgICAgICAgICAgICAvKiBCUkEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLyBcCisvKiBGSVhNRTogTm90ZSB0aGF0IE9QX0JSQSArIDEw
MCBpcyA+IDEyOCwgc28gdGhlIHR3byBjb21tZW50cyBhYm92ZQorYXJlIGluIGNvbmZsaWN0ISAq
LwogCisjZGVmaW5lIEVYVFJBQ1RfQkFTSUNfTUFYICAxMDAKIAogLyogVGhlIGluZGV4IG9mIG5h
bWVzIGFuZCB0aGUKIGNvZGUgdmVjdG9yIHJ1biBvbiBhcyBsb25nIGFzIG5lY2Vzc2FyeSBhZnRl
ciB0aGUgZW5kLiBXZSBzdG9yZSBhbiBleHBsaWNpdApAQCAtNDQyLDE2ICszMjIsMTMgQEAgcG9p
bnRlciB0aGF0IGlzIGFsd2F5cyBOVUxMLgogKi8KIAogc3RydWN0IEpTUmVnRXhwIHsKLSAgICBw
Y3JlX3VpbnQzMiBvcHRpb25zOworICAgIHVuc2lnbmVkIG9wdGlvbnM7CiAKLSAgICBwY3JlX3Vp
bnQxNiB0b3BfYnJhY2tldDsKLSAgICBwY3JlX3VpbnQxNiB0b3BfYmFja3JlZjsKKyAgICB1bnNp
Z25lZCBzaG9ydCB0b3BfYnJhY2tldDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0b3BfYmFja3JlZjsK
ICAgICAKLSAgICAvLyBqc1JlZ0V4cEV4ZWN1dGUgJiYganNSZWdFeHBDb21waWxlIGN1cnJlbnRs
eSBvbmx5IGhvdyB0byBoYW5kbGUgQVNDSUkKLSAgICAvLyBjaGFycyBmb3IgdGhzZSBvcHRpbWl6
YXRpb25zLCBob3dldmVyIGl0IHdvdWxkIGJlIHRyaXZpYWwgdG8gYWRkIHN1cHBvcnQKLSAgICAv
LyBmb3Igb3B0aW1pemVkIFVDaGFyIGZpcnN0X2J5dGUvcmVxX2J5dGUgc2NhbnMKLSAgICBwY3Jl
X3VpbnQxNiBmaXJzdF9ieXRlOwotICAgIHBjcmVfdWludDE2IHJlcV9ieXRlOworICAgIHVuc2ln
bmVkIHNob3J0IGZpcnN0X2J5dGU7CisgICAgdW5zaWduZWQgc2hvcnQgcmVxX2J5dGU7CiB9Owog
CiAvKiBJbnRlcm5hbCBzaGFyZWQgZGF0YSB0YWJsZXMuIFRoZXNlIGFyZSB0YWJsZXMgdGhhdCBh
cmUgdXNlZCBieSBtb3JlIHRoYW4gb25lCkBAIC00NTksNzMgKzMzNiw4MiBAQCBzdHJ1Y3QgSlNS
ZWdFeHAgewogIGJ1dCBhcmUgbm90IHBhcnQgb2YgdGhlIFBDUkUgcHVibGljIEFQSS4gVGhlIGRh
dGEgZm9yIHRoZXNlIHRhYmxlcyBpcyBpbiB0aGUKICBwY3JlX3RhYmxlcy5jIG1vZHVsZS4gKi8K
IAotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMV9zaXplIDYKKyNkZWZpbmUga2pzX3BjcmVfdXRm
OF90YWJsZTFfc2l6ZSA2CiAKLWV4dGVybiBjb25zdCBpbnQgICAgX3BjcmVfdXRmOF90YWJsZTFb
Nl07Ci1leHRlcm4gY29uc3QgaW50ICAgIF9wY3JlX3V0ZjhfdGFibGUyWzZdOwotZXh0ZXJuIGNv
bnN0IGludCAgICBfcGNyZV91dGY4X3RhYmxlM1s2XTsKLWV4dGVybiBjb25zdCB1c2NoYXIgX3Bj
cmVfdXRmOF90YWJsZTRbMHg0MF07CitleHRlcm4gY29uc3QgaW50ICAgIGtqc19wY3JlX3V0Zjhf
dGFibGUxWzZdOworZXh0ZXJuIGNvbnN0IGludCAgICBranNfcGNyZV91dGY4X3RhYmxlMls2XTsK
K2V4dGVybiBjb25zdCBpbnQgICAga2pzX3BjcmVfdXRmOF90YWJsZTNbNl07CitleHRlcm4gY29u
c3QgdW5zaWduZWQgY2hhciBranNfcGNyZV91dGY4X3RhYmxlNFsweDQwXTsKIAotZXh0ZXJuIGNv
bnN0IHVzY2hhciBfcGNyZV9kZWZhdWx0X3RhYmxlc1t0YWJsZXNfbGVuZ3RoXTsKK2V4dGVybiBj
b25zdCB1bnNpZ25lZCBjaGFyIGtqc19wY3JlX2RlZmF1bHRfdGFibGVzW3RhYmxlc19sZW5ndGhd
OwogCi1zdGF0aWMgaW5saW5lIHVzY2hhciB0b0xvd2VyQ2FzZSh1c2NoYXIgYykKK3N0YXRpYyBp
bmxpbmUgdW5zaWduZWQgY2hhciB0b0xvd2VyQ2FzZSh1bnNpZ25lZCBjaGFyIGMpCiB7Ci0gICAg
c3RhdGljIGNvbnN0IHVzY2hhciogbG93ZXJDYXNlQ2hhcnMgPSBfcGNyZV9kZWZhdWx0X3RhYmxl
cyArIGxjY19vZmZzZXQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGxvd2VyQ2Fz
ZUNoYXJzID0ga2pzX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBsY2Nfb2Zmc2V0OwogICAgIHJldHVy
biBsb3dlckNhc2VDaGFyc1tjXTsKIH0KIAotc3RhdGljIGlubGluZSB1c2NoYXIgZmxpcENhc2Uo
dXNjaGFyIGMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZmxpcENhc2UodW5zaWduZWQg
Y2hhciBjKQogewotICAgIHN0YXRpYyBjb25zdCB1c2NoYXIqIGZsaXBwZWRDYXNlQ2hhcnMgPSBf
cGNyZV9kZWZhdWx0X3RhYmxlcyArIGZjY19vZmZzZXQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGZsaXBwZWRDYXNlQ2hhcnMgPSBranNfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGZj
Y19vZmZzZXQ7CiAgICAgcmV0dXJuIGZsaXBwZWRDYXNlQ2hhcnNbY107CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdXNjaGFyIGNsYXNzQml0bWFwRm9yQ2hhcih1c2NoYXIgYykKK3N0YXRpYyBpbmxpbmUg
dW5zaWduZWQgY2hhciBjbGFzc0JpdG1hcEZvckNoYXIodW5zaWduZWQgY2hhciBjKQogewotICAg
IHN0YXRpYyBjb25zdCB1c2NoYXIqIGNoYXJDbGFzc0JpdG1hcHMgPSBfcGNyZV9kZWZhdWx0X3Rh
YmxlcyArIGNiaXRzX29mZnNldDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciogY2hh
ckNsYXNzQml0bWFwcyA9IGtqc19wY3JlX2RlZmF1bHRfdGFibGVzICsgY2JpdHNfb2Zmc2V0Owog
ICAgIHJldHVybiBjaGFyQ2xhc3NCaXRtYXBzW2NdOwogfQogCi1zdGF0aWMgaW5saW5lIHVzY2hh
ciBjaGFyVHlwZUZvckNoYXIodXNjaGFyIGMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIg
Y2hhclR5cGVGb3JDaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBjb25zdCB1c2NoYXIqIGNo
YXJUeXBlTWFwID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBjdHlwZXNfb2Zmc2V0OworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGNoYXJUeXBlTWFwID0ga2pzX3BjcmVfZGVmYXVsdF90YWJsZXMg
KyBjdHlwZXNfb2Zmc2V0OwogICAgIHJldHVybiBjaGFyVHlwZU1hcFtjXTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIGlzV29yZENoYXIoVUNoYXIgYykKIHsKLSAgICAvKiBVVEY4IENoYXJhY3Rl
cnMgPiAxMjggYXJlIGFzc3VtZWQgdG8gYmUgIm5vbi13b3JkIiBjaGFyYWN0ZXJzLiAqLwotICAg
IHJldHVybiAoYyA8IDEyOCAmJiAoY2hhclR5cGVGb3JDaGFyKGMpICYgY3R5cGVfd29yZCkpOwor
ICAgIHJldHVybiBjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNoYXIoYykgJiBjdHlwZV93b3JkKTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VDaGFyKFVDaGFyIGMpCiB7Ci0gICAgcmV0
dXJuIChjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNoYXIoYykgJiBjdHlwZV9zcGFjZSkpOworICAg
IHJldHVybiBjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNoYXIoYykgJiBjdHlwZV9zcGFjZSk7CiB9
CiAKLS8qIEludGVybmFsIHNoYXJlZCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhh
dCBhcmUgdXNlZCBieSBtb3JlIHRoYW4KLW9uZSBvZiB0aGUgZXhwb3J0ZWQgcHVibGljIGZ1bmN0
aW9ucy4gVGhleSBoYXZlIHRvIGJlICJleHRlcm5hbCIgaW4gdGhlIEMKLXNlbnNlLCBidXQgYXJl
IG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuICovCi0KLWV4dGVybiBpbnQgICAgICAg
ICBfcGNyZV91Y3Bfb3RoZXJjYXNlKGNvbnN0IHVuc2lnbmVkIGludCk7Ci1leHRlcm4gYm9vbCAg
ICAgICAgX3BjcmVfeGNsYXNzKGludCwgY29uc3QgdXNjaGFyKik7Ci0KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc05ld2xpbmUoVUNoYXIgbmwpCiB7CiAgICAgcmV0dXJuIChubCA9PSAweEEgfHwgbmwg
PT0gMHhEIHx8IG5sID09IDB4MjAyOCB8fCBubCA9PSAweDIwMjkpOwogfQogCi0vLyBGSVhNRTog
SXQncyB1bmNsZWFyIHRvIG1lIGlmIHRoaXMgbW92ZXMgdGhlIG9wY29kZSBwdHIgdG8gdGhlIHN0
YXJ0IG9mIGFsbCBicmFuY2hlcwotLy8gb3IgdG8gdGhlIGVuZCBvZiBhbGwgYnJhbmNoZXMgLS0g
ZWNzCi0vLyBGSVhNRTogVGhpcyBhYnN0cmFjdGlvbiBpcyBwb29yIHNpbmNlIGl0IGFzc3VtZXMg
dGhhdCB5b3Ugd2FudCB0byBqdW1wIGJhc2VkIG9uIHdoYXRldmVyCi0vLyB0aGUgbmV4dCB2YWx1
ZSBpbiB0aGUgc3RyZWFtIGlzLCBhbmQgKnRoZW4qIGZvbGxvdyBhbnkgT1BfQUxUIGJyYW5jaGVz
Lgotc3RhdGljIGlubGluZSB2b2lkIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNo
ZXMoY29uc3QgdXNjaGFyKiYgb3Bjb2RlUHRyKQotewotICAgIGRvIHsKLSAgICAgICAgb3Bjb2Rl
UHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQob3Bjb2RlUHRyLCAxKTsKLSAgICB9IHdoaWxl
ICgqb3Bjb2RlUHRyID09IE9QX0FMVCk7CitzdGF0aWMgaW5saW5lIGJvb2wgaXNCcmFja2V0U3Rh
cnRPcGNvZGUodW5zaWduZWQgY2hhciBvcGNvZGUpCit7CisgICAgaWYgKG9wY29kZSA+PSBPUF9C
UkEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgT1BfQVNTRVJUOgorICAgICAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZHZhbmNlVG9FbmRPZkJyYWNrZXQo
Y29uc3QgdW5zaWduZWQgY2hhciomIG9wY29kZVB0cikKK3sKKyAgICBBU1NFUlQoaXNCcmFja2V0
U3RhcnRPcGNvZGUoKm9wY29kZVB0cikgfHwgKm9wY29kZVB0ciA9PSBPUF9BTFQpOworICAgIGRv
CisgICAgICAgIG9wY29kZVB0ciArPSBnZXRMaW5rVmFsdWUob3Bjb2RlUHRyICsgMSk7CisgICAg
d2hpbGUgKCpvcGNvZGVQdHIgPT0gT1BfQUxUKTsKIH0KIAorLyogSW50ZXJuYWwgc2hhcmVkIGZ1
bmN0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1vcmUKK3RoYXQg
b25lIG9mIHRoZSBzb3VyY2UgZmlsZXMuIFRoZXkgaGF2ZSB0byBoYXZlIGV4dGVybmFsIGxpbmth
Z2UsIGJ1dAorYnV0IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSSBhbmQgc28gbm90IGV4
cG9ydGVkIGZyb20gdGhlIGxpYnJhcnkuICovCisKK2V4dGVybiBpbnQga2pzX3BjcmVfdWNwX290
aGVyY2FzZSh1bnNpZ25lZCk7CitleHRlcm4gYm9vbCBranNfcGNyZV94Y2xhc3MoaW50LCBjb25z
dCB1bnNpZ25lZCBjaGFyKik7CisKICNlbmRpZgogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3BjcmUvcGNyZV90YWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV90YWJsZXMuY3BwCShyZXZpc2lvbiAyODcxMSkKKysrIEphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV90YWJsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyMCArNDksMjAgQEAgUENS
RSBjb2RlIG1vZHVsZXMuICovCiAvKiBUaGVzZSBhcmUgdGhlIGJyZWFrcG9pbnRzIGZvciBkaWZm
ZXJlbnQgbnVtYmVycyBvZiBieXRlcyBpbiBhIFVURi04CiBjaGFyYWN0ZXIuICovCiAKLWNvbnN0
IGludCBfcGNyZV91dGY4X3RhYmxlMVs2XSA9Citjb25zdCBpbnQga2pzX3BjcmVfdXRmOF90YWJs
ZTFbNl0gPQogICB7IDB4N2YsIDB4N2ZmLCAweGZmZmYsIDB4MWZmZmZmLCAweDNmZmZmZmYsIDB4
N2ZmZmZmZmZ9OwogCiAvKiBUaGVzZSBhcmUgdGhlIGluZGljYXRvciBiaXRzIGFuZCB0aGUgbWFz
ayBmb3IgdGhlIGRhdGEgYml0cyB0byBzZXQgaW4gdGhlCiBmaXJzdCBieXRlIG9mIGEgY2hhcmFj
dGVyLCBpbmRleGVkIGJ5IHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcy4gKi8KIAotY29u
c3QgaW50IF9wY3JlX3V0ZjhfdGFibGUyWzZdID0geyAwLCAgICAweGMwLCAweGUwLCAweGYwLCAw
eGY4LCAweGZjfTsKLWNvbnN0IGludCBfcGNyZV91dGY4X3RhYmxlM1s2XSA9IHsgMHhmZiwgMHgx
ZiwgMHgwZiwgMHgwNywgMHgwMywgMHgwMX07Citjb25zdCBpbnQga2pzX3BjcmVfdXRmOF90YWJs
ZTJbNl0gPSB7IDAsICAgIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmN9OworY29uc3QgaW50
IGtqc19wY3JlX3V0ZjhfdGFibGUzWzZdID0geyAweGZmLCAweDFmLCAweDBmLCAweDA3LCAweDAz
LCAweDAxfTsKIAogLyogVGFibGUgb2YgdGhlIG51bWJlciBvZiBleHRyYSBjaGFyYWN0ZXJzLCBp
bmRleGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIKIG1hc2tlZCB3aXRoIDB4M2YuIFRoZSBoaWdo
ZXN0IG51bWJlciBmb3IgYSB2YWxpZCBVVEYtOCBjaGFyYWN0ZXIgaXMgaW4gZmFjdAogMHgzZC4g
Ki8KIAotY29uc3QgdXNjaGFyIF9wY3JlX3V0ZjhfdGFibGU0WzB4NDBdID0geworY29uc3QgdW5z
aWduZWQgY2hhciBranNfcGNyZV91dGY4X3RhYmxlNFsweDQwXSA9IHsKICAgMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwKICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwK
ICAgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwCShyZXZpc2lvbiAyODcxMSkKKysrIEph
dmFTY3JpcHRDb3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIEFyZ3VtZW50czoKIFJldHVybnM6ICAgICAgdGhlIG90aGVyIGNh
c2Ugb3IgLTEgaWYgbm9uZQogKi8KIAotaW50IF9wY3JlX3VjcF9vdGhlcmNhc2UoY29uc3QgdW5z
aWduZWQgYykKK2ludCBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHVuc2lnbmVkIGMpCiB7CiAgICAg
aW50IGJvdCA9IDA7CiAgICAgaW50IHRvcCA9IHNpemVvZih1Y3BfdGFibGUpIC8gc2l6ZW9mKGNu
b2RlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xhc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xhc3MuY3BwCShyZXZpc2lvbiAyODcx
MSkKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xhc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMyArNTksMTMgQEAgUmV0dXJuczogICAgICB0cnVlIGlmIGNoYXJhY3RlciBtYXRj
aGVzLAogLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3RlciwgYWR2YW5jaW5nIHRoZSBwb2lu
dGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlCiAga25vdyB3ZSBhcmUgaW4gVVRGLTggbW9kZS4g
Ki8KIAotc3RhdGljIGlubGluZSB2b2lkIGdldFVURjhDaGFyQW5kQWR2YW5jZVBvaW50ZXIoaW50
JiBjLCBjb25zdCB1c2NoYXIqJiBzdWJqZWN0UHRyKQorc3RhdGljIGlubGluZSB2b2lkIGdldFVU
RjhDaGFyQW5kQWR2YW5jZVBvaW50ZXIoaW50JiBjLCBjb25zdCB1bnNpZ25lZCBjaGFyKiYgc3Vi
amVjdFB0cikKIHsKICAgICBjID0gKnN1YmplY3RQdHIrKzsKICAgICBpZiAoKGMgJiAweGMwKSA9
PSAweGMwKSB7Ci0gICAgICAgIGludCBnY2FhID0gX3BjcmVfdXRmOF90YWJsZTRbYyAmIDB4M2Zd
OyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMgKi8KKyAgICAgICAgaW50IGdjYWEgPSBr
anNfcGNyZV91dGY4X3RhYmxlNFtjICYgMHgzZl07ICAvKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBi
eXRlcyAqLwogICAgICAgICBpbnQgZ2NzcyA9IDYgKiBnY2FhOwotICAgICAgICBjID0gKGMgJiBf
cGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwgZ2NzczsKKyAgICAgICAgYyA9IChjICYga2pzX3Bj
cmVfdXRmOF90YWJsZTNbZ2NhYV0pIDw8IGdjc3M7CiAgICAgICAgIHdoaWxlIChnY2FhLS0gPiAw
KSB7CiAgICAgICAgICAgICBnY3NzIC09IDY7CiAgICAgICAgICAgICBjIHw9ICgqc3ViamVjdFB0
cisrICYgMHgzZikgPDwgZ2NzczsKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGdldFVURjhDaGFyQW5kQWR2YW5jZQogICAgIH0KIH0KIAotYm9vbCBfcGNyZV94Y2xhc3MoaW50
IGMsIGNvbnN0IHVzY2hhciogZGF0YSkKK2Jvb2wga2pzX3BjcmVfeGNsYXNzKGludCBjLCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBkYXRhKQogewogICAgIGJvb2wgbmVnYXRlZCA9ICgqZGF0YSAmIFhD
TF9OT1QpOwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS91Y3BpbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvdWNwaW50ZXJuYWwuaAkocmV2aXNpb24g
Mjg3MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3VjcGludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDggKzQ1LDggQEAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiB3b3JkcyB0
aGF0IGZvcm0gYSBkYXRhIGl0ZW0gaW4gdGhlIHRhYmxlLiAqLwogCiB0eXBlZGVmIHN0cnVjdCBj
bm9kZSB7Ci0gIHBjcmVfdWludDMyIGYwOwotICBwY3JlX3VpbnQzMiBmMTsKKyAgdW5zaWduZWQg
ZjA7CisgIHVuc2lnbmVkIGYxOwogfSBjbm9kZTsKIAogLyogVGhpbmdzIGZvciB0aGUgZjAgZmll
bGQgKi8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAkocmV2aXNpb24gMjg3MTEpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiAr
NDgsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRlZmluZWQo
X05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhKHdj
aGFyX3QgYykgeyByZXR1cm4gKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7
IH0KICNlbmRpZgorICAgIGlubGluZSBib29sIGlzQVNDSUlBbHBoYShpbnQgYykgeyByZXR1cm4g
KGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7IH0KIAogICAgIGlubGluZSBi
b29sIGlzQVNDSUlBbHBoYW51bWVyaWMoY2hhciBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9
ICc5JyB8fCAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQogICAgIGlu
bGluZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWModW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4g
YyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8
PSAneic7IH0KICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1Rf
REVGSU5FRCkKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmljKHdjaGFyX3QgYykg
eyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAweDIwKSA+PSAnYScgJiYgKGMg
fCAweDIwKSA8PSAneic7IH0KICNlbmRpZgorICAgIGlubGluZSBib29sIGlzQVNDSUlBbHBoYW51
bWVyaWMoaW50IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkg
Pj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJ
RGlnaXQoY2hhciBjKSB7IHJldHVybiAoYyA+PSAnMCcpICYgKGMgPD0gJzknKTsgfQogICAgIGlu
bGluZSBib29sIGlzQVNDSUlEaWdpdCh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiAoYyA+PSAn
MCcpICYgKGMgPD0gJzknKTsgfQpAQCAtNjcsMzAgKzY5LDM1IEBAIG5hbWVzcGFjZSBXVEYgewog
I2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQog
ICAgIGlubGluZSBib29sIGlzQVNDSUlIZXhEaWdpdCh3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPj0g
JzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ2Yn
OyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJSGV4RGlnaXQoaW50IGMpIHsgcmV0
dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgy
MCkgPD0gJ2YnOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJTG93ZXIoY2hhciBjKSB7IHJl
dHVybiBjID49ICdhJyAmJiBjIDw9ICd6JzsgfQogICAgIGlubGluZSBib29sIGlzQVNDSUlMb3dl
cih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjID49ICdhJyAmJiBjIDw9ICd6JzsgfQogI2lm
ICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQogICAg
IGlubGluZSBib29sIGlzQVNDSUlMb3dlcih3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPj0gJ2EnICYm
IGMgPD0gJ3onOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJTG93ZXIoaW50IGMp
IHsgcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0FT
Q0lJU3BhY2UoY2hhciBjKSB7IHJldHVybiBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1x2JyB8fCBjID09J1xmJyB8fCBjID09ICdccicgfHwgYyA9PSAnICc7IH0KICAgICBpbmxpbmUg
Ym9vbCBpc0FTQ0lJU3BhY2UodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gYyA9PSAnXHQnIHx8
IGMgPT0gJ1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicgfHwgYyA9PSAnXHInIHx8IGMgPT0g
JyAnOyB9CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRlZmluZWQoX05BVElWRV9XQ0hBUl9UX0RF
RklORUQpCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSVNwYWNlKHdjaGFyX3QgYykgeyByZXR1cm4g
YyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicgfHwgYyA9PSAn
XHInIHx8IGMgPT0gJyAnOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJU3BhY2Uo
aW50IGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHYnIHx8IGMg
PT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQogCiAgICAgaW5saW5lIGNoYXIgdG9B
U0NJSUxvd2VyKGNoYXIgYykgeyByZXR1cm4gYyB8ICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIDw8
IDUpOyB9CiAgICAgaW5saW5lIHVuc2lnbmVkIHNob3J0IHRvQVNDSUlMb3dlcih1bnNpZ25lZCBz
aG9ydCBjKSB7IHJldHVybiBjIHwgKChjID49ICdBJyAmJiBjIDw9ICdaJykgPDwgNSk7IH0KICNp
ZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAg
ICBpbmxpbmUgd2NoYXJfdCB0b0FTQ0lJTG93ZXIod2NoYXJfdCBjKSB7IHJldHVybiBjIHwgKChj
ID49ICdBJyAmJiBjIDw9ICdaJykgPDwgNSk7IH0KICNlbmRpZgorICAgIGlubGluZSBpbnQgdG9B
U0NJSUxvd2VyKGludCBjKSB7IHJldHVybiBjIHwgKChjID49ICdBJyAmJiBjIDw9ICdaJykgPDwg
NSk7IH0KIAogICAgIGlubGluZSBjaGFyIHRvQVNDSUlVcHBlcihjaGFyIGMpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNoYXI+KGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSkpOyB9CiAg
ICAgaW5saW5lIHVuc2lnbmVkIHNob3J0IHRvQVNDSUlVcHBlcih1bnNpZ25lZCBzaG9ydCBjKSB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYyAmIH4oKGMgPj0gJ2EnICYmIGMg
PD0gJ3onKSA8PCA1KSk7IH0KICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5lZChfTkFUSVZF
X1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgd2NoYXJfdCB0b0FTQ0lJVXBwZXIod2NoYXJf
dCBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDx3Y2hhcl90PihjICYgfigoYyA+PSAnYScgJiYgYyA8
PSAneicpIDw8IDUpKTsgfQogI2VuZGlmCisgICAgaW5saW5lIGludCB0b0FTQ0lJVXBwZXIoaW50
IGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAmIH4oKGMgPj0gJ2EnICYmIGMgPD0gJ3on
KSA8PCA1KSk7IH0KIAogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17921</attachid>
            <date>2007-12-15 20:01:45 -0800</date>
            <delta_ts>2007-12-16 17:36:06 -0800</delta_ts>
            <desc>patch (all regression tests pass)</desc>
            <filename>PCREPatch.txt</filename>
            <type>text/plain</type>
            <size>172237</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTkgQEAKKzIwMDctMTItMTUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0MzgKKyAgICAgICAgLSByZW1vdmVkIHNvbWUgbW9yZSB1bnVzZWQgY29kZQorICAgICAgICAt
IGNoYW5nZWQgcXVpdGUgYSBmZXcgbW9yZSBuYW1lcyB0byBXZWJLaXQtc3R5bGUKKyAgICAgICAg
LSBtb3ZlZCBtb3JlIHRoaW5ncyBvdXQgb2YgcGNyZV9pbnRlcm5hbC5oCisgICAgICAgIC0gY2hh
bmdlZCBzb21lIGluZGVudGF0aW9uIHRvIFdlYktpdC1zdHlsZQorICAgICAgICAtIGltcHJvdmVk
IGRlc2lnbiBvZiB0aGUgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisgICAgICAg
ICAgMi1ieXRlIHZhbHVlcyBmcm9tIHRoZSBvcGNvZGUgc3RyZWFtIChpbiBwY3JlX2ludGVybmFs
LmgpCisKKyAgICAgICAgKiBwY3JlL2RmdGFibGVzLmNwcDoKKyAgICAgICAgKG1haW4pOiBBZGRl
ZCB0aGUga2pzIHByZWZpeCBhIG5vcm1hbCB3YXkgaW4gbGlldSBvZiB1c2luZyBtYWNyb3MuCisK
KyAgICAgICAgKiBwY3JlL3BjcmVfY29tcGlsZS5jcHA6IE1vdmVkIHNvbWUgZGVmaW5pdGlvbnMg
aGVyZSBmcm9tIHBjcmVfaW50ZXJuYWwuaC4KKyAgICAgICAgKGVycm9yVGV4dCk6IE5hbWUgY2hh
bmdlcywgZmV3ZXIgdHlwZWRlZnMuCisgICAgICAgIChjaGVja0VzY2FwZSk6IERpdHRvLiBDaGFu
Z2VkIHVwcGVyY2FzZSBjb252ZXJzaW9uIHRvIHVzZSB0b0FTQ0lJVXBwZXIuCisgICAgICAgIChp
c0NvdW50ZWRSZXBlYXQpOiBOYW1lIGNoYW5nZS4KKyAgICAgICAgKHJlYWRSZXBlYXRDb3VudHMp
OiBOYW1lIGNoYW5nZS4KKyAgICAgICAgKGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUpOiBHb3Qgcmlk
IG9mIHRoZSB1c2Ugb2YgT1BfbGVuZ3Rocywgd2hpY2ggaXMKKyAgICAgICAgdmVyeSBsaWdodGx5
IHVzZWQgaGVyZS4gSGFyZC1jb2RlZCB0aGUgbGVuZ3RoIG9mIE9QX0JSQU5VTUJFUi4KKyAgICAg
ICAgKGZpcnN0U2lnbmlmaWNhbnRPcGNvZGVTa2lwcGluZ0Fzc2VydGlvbnMpOiBEaXR0by4gQWxz
byBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSB0aGUgYWR2YW5jZVRvRW5kT2ZCcmFja2V0IGZ1bmN0
aW9uLgorICAgICAgICAoZ2V0T3RoZXJjYXNlUmFuZ2UpOiBOYW1lIGNoYW5nZXMuCisgICAgICAg
IChlbmNvZGVVVEY4KTogRGl0dG8uCisgICAgICAgIChjb21waWxlQnJhbmNoKTogTmFtZSBjaGFu
Z2VzLiBSZW1vdmVkIHVudXNlZCBhZnRlcl9tYW51YWxfY2FsbG91dCBhbmQKKyAgICAgICAgdGhl
IGNvZGUgdG8gaGFuZGxlIGl0LiBSZW1vdmVkIGNvZGUgdG8gaGFuZGxlIE9QX09OQ0Ugc2luY2Ug
d2UgbmV2ZXIKKyAgICAgICAgZW1pdCB0aGlzIG9wY29kZS4gQ2hhbmdlZCB0byB1c2UgYWR2YW5j
ZVRvRW5kT2ZCcmFja2V0IGluIG1vcmUgcGxhY2VzLgorICAgICAgICAoY29tcGlsZUJyYWNrZXQp
OiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChicmFuY2hJc0FuY2hvcmVkKTogUmVtb3ZlZCBjb2Rl
IHRvIGhhbmRsZSBPUF9PTkNFIHNpbmNlIHdlIG5ldmVyIGVtaXQKKyAgICAgICAgdGhpcyBvcGNv
ZGUuCisgICAgICAgIChicmFja2V0SXNBbmNob3JlZCk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAg
KGJyYW5jaE5lZWRzTGluZVN0YXJ0KTogTW9yZSBmbyB0aGUgc2FtZS4KKyAgICAgICAgKGJyYWNr
ZXROZWVkc0xpbmVTdGFydCk6IERpdHRvLgorICAgICAgICAoYnJhbmNoRmluZEZpcnN0QXNzZXJ0
ZWRDaGFyYWN0ZXIpOiBSZW1vdmVkIE9QX09OQ0UgY29kZS4KKyAgICAgICAgKGJyYWNrZXRGaW5k
Rmlyc3RBc3NlcnRlZENoYXJhY3Rlcik6IE1vcmUgb2YgdGhlIHNhbWUuCisgICAgICAgIChjYWxj
dWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndGhBbmRGbGFncyk6IERpdHRvLgorICAgICAgICAocmV0
dXJuRXJyb3IpOiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChqc1JlZ0V4cENvbXBpbGUpOiBEaXR0
by4KKworICAgICAgICAqIHBjcmUvcGNyZV9leGVjLmNwcDogTW92ZWQgc29tZSBkZWZpbml0aW9u
cyBoZXJlIGZyb20gcGNyZV9pbnRlcm5hbC5oLgorICAgICAgICAobWF0Y2hSZWYpOiBVcGRhdGVk
IG5hbWVzLgorICAgICAgICBJbXByb3ZlZCBtYWNyb3MgdG8gdXNlIHRoZSBkbyB7IH0gd2hpbGUo
MCkgaWRpb20gc28gdGhleSBleHBhbmQgdG8gc2luZ2xlCisgICAgICAgIHN0YXRlbWVudHMgcmF0
aGVyIHRoYW4gdG8gYmxvY2tzIG9yIG11bHRpcGxlIHN0YXRlbWVudHMuIEFuZCByZWZlYWN0b3Jl
ZAorICAgICAgICB0aGUgcmVjdXJzaXZlIG1hdGNoIG1hY3Jvcy4KKyAgICAgICAgKE1hdGNoU3Rh
Y2s6OnB1c2hOZXdGcmFtZSk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAgKGdldFVURjhDaGFyQW5k
SW5jcmVtZW50TGVuZ3RoKTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAobWF0Y2gpOiBOYW1lIGNo
YW5nZXMuIFJlbW92ZWQgdGhlIE9OQ0Ugb3Bjb2RlLgorICAgICAgICAoanNSZWdFeHBFeGVjdXRl
KTogTmFtZSBjaGFuZ2VzLgorCisgICAgICAgICogcGNyZS9wY3JlX2ludGVybmFsLmg6IFJlbW92
ZWQgcXVpdGUgYSBmZXcgdW5uZWVkZWQgaW5jbHVkZXMuIFJld3JvdGUKKyAgICAgICAgcXVpdGUg
YSBmZXcgY29tbWVudHMuIFJlbW92ZWQgdGhlIG1hY3JvcyB0aGF0IGFkZCBranMgcHJlZml4ZXMg
dG8gdGhlCisgICAgICAgIGZ1bmN0aW9ucyB3aXRoIGV4dGVybmFsIGxpbmthZ2U7IGluc3RlYWQg
cmVuYW1lZCB0aGUgZnVuY3Rpb25zLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCB0eXBl
ZGVmcyBwY3JlX3VpbnQxNiwgcGNyZV91aW50MzIsIGFuZCB1c2NoYXIuIFJlbW92ZWQgdGhlCisg
ICAgICAgIGRlYWQgYW5kIG5vdC1hbGwtd29ya2luZyBjb2RlIGZvciBMSU5LX1NJWkUgdmFsdWVz
IG90aGVyIHRoYW4gMiwgYWx0aG91Z2gKKyAgICAgICAgd2UgYWltIHRvIGtlZXAgdGhlIGFic3Ry
YWN0aW9uIHdvcmtpbmcuIFJlbW92ZWQgdGhlIE9QX0xFTkdUSFMgbWFjcm8uCisgICAgICAgIChw
dXQyQnl0ZVZhbHVlKTogUmVwbGFjZXMgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0LgorICAg
ICAgICAoZ2V0MkJ5dGVWYWx1ZSk6IFJlcGxhY2VzIGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dC4KKyAgICAgICAgKHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKTogUmVwbGFjZXMgcHV0MkJ5dGVP
cGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2YW5jZS4KKyAgICAgICAgKHB1dExpbmtWYWx1ZUFsbG93
WmVybyk6IFJlcGxhY2VzIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQ7IGRvZXNuJ3QgZG8gdGhlCisg
ICAgICAgIGFkZGl0aW9uLCBzaW5jZSBhIGNvbW1hIGlzIHJlYWxseSBubyBiZXR0ZXIgdGhhbiBh
IHBsdXMgc2lnbi4gQWRkZWQgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHRvIGNhdGNoIG91dCBvZiBy
YW5nZSB2YWx1ZXMgYW5kIGNoYW5nZWQgdGhlIHBhcmFtZXRlciB0eXBlIHRvCisgICAgICAgIGlu
dCByYXRoZXIgdGhhbiB1bnNpZ25lZC4KKyAgICAgICAgKGdldExpbmtWYWx1ZUFsbG93WmVybyk6
IFJlcGxhY2VzIGdldE9wY29kZVZhbHVlQXRPZmZzZXQuCisgICAgICAgIChwdXRMaW5rVmFsdWUp
OiBOZXcgZnVuY3Rpb24gdGhhdCBtb3N0IGZvcm1lciBjYWxsZXJzIG9mIHRoZQorICAgICAgICBw
dXRPcGNvZGVWYWx1ZUF0T2Zmc2V0IGZ1bmN0aW9uIGNhbiB1c2U7IGFzc2VydHMgdGhlIHZhbHVl
IHRoYXQgaXMKKyAgICAgICAgYmVpbmcgc3RvcmVkIGlzIG5vbi16ZXJvIGFuZCB0aGVuIGNhbGxz
IHB1dExpbmtWYWx1ZUFsbG93WmVyby4KKyAgICAgICAgKGdldExpbmtWYWx1ZSk6IERpdHRvLgor
ICAgICAgICAocHV0TGlua1ZhbHVlQW5kQWR2YW5jZSk6IFJlcGxhY2VzIHB1dE9wY29kZVZhbHVl
QXRPZmZzZXRBbmRBZHZhbmNlLiBObworICAgICAgICBjYWxsZXIgd2FzIHVzaW5nIGFuIG9mZnNl
dCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGFkdmFuY2luZyBiZWhhdmlvci4KKyAgICAg
ICAgKHB1dExpbmtWYWx1ZUFsbG93WmVyb0FuZEFkdmFuY2UpOiBEaXR0by4KKyAgICAgICAgKGlz
QnJhY2tldE9wY29kZSk6IEFkZGVkLiBGb3IgdXNlIGluIGFuIGFzc2VydGlvbi4KKyAgICAgICAg
KGFkdmFuY2VUb0VuZE9mQnJhY2tldCk6IFJlbmFtZWQgZnJvbSBtb3ZlT3Bjb2RlUHRyUGFzdEFu
eUFsdGVybmF0ZUJyYW5jaGVzLAorICAgICAgICBhbmQgcmVtb3ZlZCBjb21tZW50cyBhYm91dCBo
b3cgaXQncyBub3Qgd2VsbCBkZXNpZ25lZC4gVGhpcyBmdW5jdGlvbiB0YWtlcworICAgICAgICBh
IHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBhIGJyYWNrZXQgYW5kIGFkdmFuY2VzIHRvIHRo
ZSBlbmQgb2YgdGhlCisgICAgICAgIGJyYWNrZXQuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfdGFi
bGVzLmNwcDogVXBkYXRlZCBuYW1lcy4KKyAgICAgICAgKiBwY3JlL3BjcmVfdWNwX3NlYXJjaGZ1
bmNzLmNwcDoKKyAgICAgICAgKGtqc19wY3JlX3VjcF9vdGhlcmNhc2UpOiBEaXR0by4KKyAgICAg
ICAgKiBwY3JlL3BjcmVfeGNsYXNzLmNwcDoKKyAgICAgICAgKGdldFVURjhDaGFyQW5kQWR2YW5j
ZVBvaW50ZXIpOiBEaXR0by4KKyAgICAgICAgKGtqc19wY3JlX3hjbGFzcyk6IERpdHRvLgorICAg
ICAgICAqIHBjcmUvdWNwaW50ZXJuYWwuaDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvQVNDSUlD
VHlwZS5oOgorICAgICAgICAoV1RGOjppc0FTQ0lJQWxwaGEpOiBBZGRlZCBhbiBpbnQgb3Zlcmxv
YWQsIGxpa2UgdGhlIG9uZSB3ZSBhbHJlYWR5IGhhdmUgZm9yCisgICAgICAgIGlzQVNDSUlEaWdp
dC4KKyAgICAgICAgKFdURjo6aXNBU0NJSUFscGhhbnVtZXJpYyk6IERpdHRvLgorICAgICAgICAo
V1RGOjppc0FTQ0lJSGV4RGlnaXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6aXNBU0NJSUxvd2Vy
KTogRGl0dG8uCisgICAgICAgIChXVEY6OmlzQVNDSUlTcGFjZSk6IERpdHRvLgorICAgICAgICAo
V1RGOjp0b0FTQ0lJTG93ZXIpOiBEaXR0by4KKyAgICAgICAgKFdURjo6dG9BU0NJSVVwcGVyKTog
RGl0dG8uCisKIDIwMDctMTItMTQgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KQEAgLTEwOTcsNyArMTE5Myw5IEBACiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgogCi0gICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3Vi
amVjdFB0ciBhZGp1c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEg
c2luZ2xlIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9z
c2libHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhciBjbGFzc2VzIGFuZCBnYXJibGVkIFVU
RjE2IHN0cmluZ3MuCisgICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3ViamVjdFB0ciBhZGp1
c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEgc2luZ2xlCisgICAg
ICAgIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9zc2li
bHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhcgorICAgICAgICBjbGFzc2VzIGFuZCBnYXJi
bGVkIFVURjE2IHN0cmluZ3MuCiAKICAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6CiAgICAg
ICAgIChtYXRjaCk6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkocmV2aXNpb24gMjg3
NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCBmcHJpbnRmKGYsCiAgICJUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRl
ZmF1bHQgdGFibGVzIGZvciBjaGFyYWN0ZXJzIHdpdGggY29kZXMgbGVzcyB0aGFuXG4iCiAgICIx
MjggKEFTQ0lJIGNoYXJhY3RlcnMpLiBUaGVzZSB0YWJsZXMgYXJlIHVzZWQgd2hlbiBubyBleHRl
cm5hbCB0YWJsZXMgYXJlXG4iCiAgICJwYXNzZWQgdG8gUENSRS4gKi9cblxuIgotICAiY29uc3Qg
dW5zaWduZWQgY2hhciBfcGNyZV9kZWZhdWx0X3RhYmxlc1slZF0gPSB7XG5cbiIKKyAgImNvbnN0
IHVuc2lnbmVkIGNoYXIga2pzX3BjcmVfZGVmYXVsdF90YWJsZXNbJWRdID0ge1xuXG4iCiAgICIv
KiBUaGlzIHRhYmxlIGlzIGEgbG93ZXIgY2FzaW5nIHRhYmxlLiAqL1xuXG4iLCB0YWJsZXNfbGVu
Z3RoKTsKIAogaWYgKGxjY19vZmZzZXQgIT0gMCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUv
cGNyZV9jb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVf
Y29tcGlsZS5jcHAJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3Jl
X2NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxMSBAQCBzdXBwb3J0aW5n
IGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBuCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
Ky8qIE5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2YXJpYWJs
ZXMgKi8KKworI2RlZmluZSBSRVFfVU5TRVQgKC0yKQorI2RlZmluZSBSRVFfTk9ORSAgKC0xKQor
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAg
ICAgIENvZGUgcGFyYW1ldGVycyBhbmQgc3RhdGljIHRhYmxlcyAgICAgICAgICoKICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04OCwxNyArOTMs
MTIgQEAgZW51bSBFcnJvckNvZGUgewogICAgIEVSUjEwLCBFUlIxMSwgRVJSMTIsIEVSUjEzLCBF
UlIxNCwgRVJSMTUsIEVSUjE2LCBFUlIxNwogfTsKIAotLyogVGFibGUgb2Ygc2l6ZXMgZm9yIHRo
ZSBmaXhlZC1sZW5ndGggb3Bjb2Rlcy4gSXQncyBkZWZpbmVkIGluIGEgbWFjcm8gc28gdGhhdAot
dGhlIGRlZmluaXRpb24gaXMgbmV4dCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3Bjb2RlcyBp
biBwY3JlX2ludGVybmFsLmguICovCi0KLXN0YXRpYyBjb25zdCB1c2NoYXIgT1BfbGVuZ3Roc1td
ID0geyBPUF9MRU5HVEhTIH07Ci0KIC8qIFRoZSB0ZXh0cyBvZiBjb21waWxlLXRpbWUgZXJyb3Ig
bWVzc2FnZXMuIFRoZXNlIGFyZSAiY2hhciAqIiBiZWNhdXNlIHRoZXkKIGFyZSBwYXNzZWQgdG8g
dGhlIG91dHNpZGUgd29ybGQuICovCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvcl90ZXh0KEVy
cm9yQ29kZSBjb2RlKQorc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yVGV4dChFcnJvckNvZGUgY29k
ZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBlcnJvcl90ZXh0c1tdID0KKyAgICBzdGF0aWMg
Y29uc3QgY2hhciBlcnJvclRleHRzW10gPQogICAgICAgLyogMSAqLwogICAgICAgIlxcIGF0IGVu
ZCBvZiBwYXR0ZXJuXDAiCiAgICAgICAiXFxjIGF0IGVuZCBvZiBwYXR0ZXJuXDAiCkBAIC0xMjMs
NyArMTIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yX3RleHQoRXJyb3JDb2RlIAogICAg
IDsKIAogICAgIGludCBpID0gY29kZTsKLSAgICBjb25zdCBjaGFyKiB0ZXh0ID0gZXJyb3JfdGV4
dHM7CisgICAgY29uc3QgY2hhciogdGV4dCA9IGVycm9yVGV4dHM7CiAgICAgd2hpbGUgKGkgPiAx
KQogICAgICAgICBpIC09ICEqdGV4dCsrOwogICAgIHJldHVybiB0ZXh0OwpAQCAtMTQxLDcgKzE0
MSw3IEBAIHN0cnVjdCBDb21waWxlRGF0YSB7CiAgICAgICAgIHJlcV92YXJ5b3B0ID0gMDsKICAg
ICAgICAgbmVlZE91dGVyQnJhY2tldCA9IGZhbHNlOwogICAgIH0KLSAgICBjb25zdCB1c2NoYXIq
IHN0YXJ0X2NvZGU7ICAgLyogVGhlIHN0YXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlICovCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogc3RhcnRfY29kZTsgICAvKiBUaGUgc3RhcnQgb2YgdGhlIGNv
bXBpbGVkIGNvZGUgKi8KICAgICBjb25zdCBVQ2hhciogc3RhcnRfcGF0dGVybjsgLyogVGhlIHN0
YXJ0IG9mIHRoZSBwYXR0ZXJuICovCiAgICAgaW50IHRvcF9iYWNrcmVmOyAgICAgICAgICAgIC8q
IE1heGltdW0gYmFjayByZWZlcmVuY2UgKi8KICAgICB1bnNpZ25lZCBiYWNrcmVmTWFwOyAgICAg
ICAvKiBCaXRtYXAgb2YgbG93IGJhY2sgcmVmcyAqLwpAQCAtMTUxLDEwICsxNTEsMTAgQEAgc3Ry
dWN0IENvbXBpbGVEYXRhIHsKIAogLyogRGVmaW5pdGlvbnMgdG8gYWxsb3cgbXV0dWFsIHJlY3Vy
c2lvbiAqLwogCi1zdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGludCosIHVzY2hhcioq
LCBjb25zdCBVQ2hhcioqLCBjb25zdCBVQ2hhciosIEVycm9yQ29kZSosIGludCwgaW50KiwgaW50
KiwgQ29tcGlsZURhdGEmKTsKLXN0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVz
Y2hhciogY29kZSk7Ci1zdGF0aWMgYm9vbCBicmFja2V0TmVlZHNMaW5lU3RhcnQoY29uc3QgdXNj
aGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKLXN0
YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVzY2hhciog
Y29kZSwgYm9vbCBpbmFzc2VydCk7CitzdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGlu
dCosIHVuc2lnbmVkIGNoYXIqKiwgY29uc3QgVUNoYXIqKiwgY29uc3QgVUNoYXIqLCBFcnJvckNv
ZGUqLCBpbnQsIGludCosIGludCosIENvbXBpbGVEYXRhJik7CitzdGF0aWMgYm9vbCBicmFja2V0
SXNBbmNob3JlZChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlKTsKK3N0YXRpYyBib29sIGJyYWNr
ZXROZWVkc0xpbmVTdGFydChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0
dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKK3N0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJz
dEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5hc3Nl
cnQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgogKiAgICAgICAgICAgIEhhbmRsZSBlc2NhcGVzICAgICAgICAgICAgICAgICAgICAgICoKQEAg
LTE3OCw3ICsxNzgsNyBAQCBSZXR1cm5zOiAgICAgICAgIHplcm8gb3IgcG9zaXRpdmUgPT4gYSBk
CiAgICAgICAgICAgICAgICAgIG9uIGVycm9yLCBlcnJvcnB0ciBpcyBzZXQKICovCiAKLXN0YXRp
YyBpbnQgY2hlY2tfZXNjYXBlKGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hhciogcGF0
dGVybkVuZCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIsIGludCBicmFjb3VudCwgYm9vbCBpc2Ns
YXNzKQorc3RhdGljIGludCBjaGVja0VzY2FwZShjb25zdCBVQ2hhcioqIHB0cnB0ciwgY29uc3Qg
VUNoYXIqIHBhdHRlcm5FbmQsIEVycm9yQ29kZSogZXJyb3Jjb2RlcHRyLCBpbnQgYnJhY291bnQs
IGJvb2wgaXNjbGFzcykKIHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gKnB0cnB0ciArIDE7CiAK
QEAgLTIwMywxMTQgKzIwMywxMTAgQEAgc3RhdGljIGludCBjaGVja19lc2NhcGUoY29uc3QgVUNo
YXIqKiBwdAogICAgIAogICAgIGVsc2UgewogICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAg
Y2FzZSAnMSc6Ci0gICAgICAgIGNhc2UgJzInOgotICAgICAgICBjYXNlICczJzoKLSAgICAgICAg
Y2FzZSAnNCc6Ci0gICAgICAgIGNhc2UgJzUnOgotICAgICAgICBjYXNlICc2JzoKLSAgICAgICAg
Y2FzZSAnNyc6Ci0gICAgICAgIGNhc2UgJzgnOgotICAgICAgICBjYXNlICc5JzoKLSAgICAgICAg
ICAgIC8qIEVzY2FwZSBzZXF1ZW5jZXMgc3RhcnRpbmcgd2l0aCBhIG5vbi16ZXJvIGRpZ2l0IGFy
ZSBiYWNrcmVmZXJlbmNlcywKLSAgICAgICAgICAgICB1bmxlc3MgdGhlcmUgYXJlIGluc3VmZmlj
aWVudCBicmFja2V0cywgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBvY3RhbAotICAgICAgICAgICAg
IGVzY2FwZSBzZXF1ZW5jZXMuIFRob3NlIHNlcXVlbmNlcyBlbmQgb24gdGhlIGZpcnN0IG5vbi1v
Y3RhbCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICBvciB3aGVuIHdlIG92ZXJmbG93IDAtMjU1LCB3
aGljaGV2ZXIgY29tZXMgZmlyc3QuICovCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNjbGFzcykgewotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBvbGRwdHIgPSBwdHI7Ci0g
ICAgICAgICAgICAgICAgYyAtPSAnMCc7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChwdHIgKyAx
IDwgcGF0dGVybkVuZCkgJiYgaXNBU0NJSURpZ2l0KHB0clsxXSkgJiYgYyA8PSBicmFjb3VudCkK
LSAgICAgICAgICAgICAgICAgICAgYyA9IGMgKiAxMCArICooKytwdHIpIC0gJzAnOwotICAgICAg
ICAgICAgICAgIGlmIChjIDw9IGJyYWNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSAt
KEVTQ19SRUYgKyBjKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlICcxJzoKKyAgICAgICAgICAgIGNhc2UgJzInOgorICAgICAgICAgICAgY2FzZSAnMyc6Cisg
ICAgICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgICAgIGNhc2UgJzUnOgorICAgICAgICAgICAg
Y2FzZSAnNic6CisgICAgICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgICAgIGNhc2UgJzgnOgor
ICAgICAgICAgICAgY2FzZSAnOSc6CisgICAgICAgICAgICAgICAgLyogRXNjYXBlIHNlcXVlbmNl
cyBzdGFydGluZyB3aXRoIGEgbm9uLXplcm8gZGlnaXQgYXJlIGJhY2tyZWZlcmVuY2VzLAorICAg
ICAgICAgICAgICAgICB1bmxlc3MgdGhlcmUgYXJlIGluc3VmZmljaWVudCBicmFja2V0cywgaW4g
d2hpY2ggY2FzZSB0aGV5IGFyZSBvY3RhbAorICAgICAgICAgICAgICAgICBlc2NhcGUgc2VxdWVu
Y2VzLiBUaG9zZSBzZXF1ZW5jZXMgZW5kIG9uIHRoZSBmaXJzdCBub24tb2N0YWwgY2hhcmFjdGVy
CisgICAgICAgICAgICAgICAgIG9yIHdoZW4gd2Ugb3ZlcmZsb3cgMC0yNTUsIHdoaWNoZXZlciBj
b21lcyBmaXJzdC4gKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWlz
Y2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIG9sZHB0ciA9IHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgYyAtPSAnMCc7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgocHRyICsgMSA8IHBhdHRlcm5FbmQpICYmIGlzQVNDSUlEaWdpdChwdHJbMV0pICYmIGMgPD0g
YnJhY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjID0gYyAqIDEwICsgKigrK3B0cikg
LSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IGJyYWNvdW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjID0gLShFU0NfUkVGICsgYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBw
dHIgPSBvbGRwdHI7ICAgICAgLyogUHV0IHRoZSBwb2ludGVyIGJhY2sgYW5kIGZhbGwgdGhyb3Vn
aCAqLwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdHIgPSBvbGRwdHI7ICAg
ICAgLyogUHV0IHRoZSBwb2ludGVyIGJhY2sgYW5kIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKiBIYW5kbGUgYW4gb2N0YWwgbnVtYmVy
IGZvbGxvd2luZyBcLiBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgOCBvciA5LAotICAgICAgICAgICAg
IHRoaXMgaXMgbm90IG9jdGFsLiAqLwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoKGMg
PSAqcHRyKSA+PSAnOCcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBIYW5kbGUgYW4gb2N0YWwgbnVtYmVy
IGZvbGxvd2luZyBcLiBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgOCBvciA5LAorICAgICAgICAgICAg
ICAgICB0aGlzIGlzIG5vdCBvY3RhbC4gKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoKGMgPSAqcHRyKSA+PSAnOCcpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgICAgICAvKiBcMCBhbHdheXMgc3RhcnRzIGFuIG9jdGFsIG51bWJlciwgYnV0IHdl
IG1heSBkcm9wIHRocm91Z2ggdG8gaGVyZSB3aXRoIGEKICAgICAgICAgICAgICBsYXJnZXIgZmly
c3Qgb2N0YWwgZGlnaXQuICovCi0gICAgICAgIAotICAgICAgICBjYXNlICcwJzogewotICAgICAg
ICAgICAgYyAtPSAnMCc7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9
IDE7IGkgPD0gMjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0ciArIGkgPj0gcGF0dGVy
bkVuZCB8fCBwdHJbaV0gPCAnMCcgfHwgcHRyW2ldID4gJzcnKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBpbnQgY2MgPSBjICogOCArIHB0cltpXSAtICcwJzsK
LSAgICAgICAgICAgICAgICBpZiAoY2MgPiAyNTUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGMgPSBjYzsKKworICAgICAgICAgICAgY2FzZSAnMCc6IHsKKyAg
ICAgICAgICAgICAgICBjIC09ICcwJzsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDI7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAocHRyICsgaSA+PSBwYXR0ZXJuRW5kIHx8IHB0cltpXSA8ICcwJyB8fCBwdHJbaV0gPiAnNycp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaW50
IGNjID0gYyAqIDggKyBwdHJbaV0gLSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYyA+
IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjID0gY2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB0ciArPSBpIC0g
MTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0
ciArPSBpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
J3gnOiB7Ci0gICAgICAgICAgICBjID0gMDsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAg
ICAgZm9yIChpID0gMTsgaSA8PSAyOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocHRyICsg
aSA+PSBwYXR0ZXJuRW5kIHx8ICFpc0FTQ0lJSGV4RGlnaXQocHRyW2ldKSkgewotICAgICAgICAg
ICAgICAgICAgICBjID0gJ3gnOwotICAgICAgICAgICAgICAgICAgICBpID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3gnOiB7CisgICAgICAgICAg
ICAgICAgYyA9IDA7CisgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgZm9y
IChpID0gMTsgaSA8PSAyOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0ciArIGkg
Pj0gcGF0dGVybkVuZCB8fCAhaXNBU0NJSUhleERpZ2l0KHB0cltpXSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGMgPSAneCc7CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGludCBjYyA9IHB0cltpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNjID49ICdhJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAg
ICAvKiBDb252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYyA9IGMg
KiAxNiArIGNjIC0gKChjYyA8ICdBJykgPyAnMCcgOiAoJ0EnIC0gMTApKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IGNjID0gcHRyW2ldOwotICAgICAgICAgICAgICAg
IGlmIChjYyA+PSAnYScpCi0gICAgICAgICAgICAgICAgICAgIGNjIC09IDMyOyAgICAgICAgICAg
ICAvKiBDb252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBjID0gYyAqIDE2
ICsgY2MgLSAoKGNjIDwgJ0EnKSA/ICcwJyA6ICgnQScgLSAxMCkpOworICAgICAgICAgICAgICAg
IHB0ciArPSBpIC0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHB0ciArPSBpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgJ3UnOiB7Ci0gICAgICAgICAgICBjID0gMDsKLSAgICAgICAgICAgIGludCBp
OwotICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSA0OyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocHRyICsgaSA+PSBwYXR0ZXJuRW5kIHx8ICFpc0FTQ0lJSGV4RGlnaXQocHRyW2ldKSkg
ewotICAgICAgICAgICAgICAgICAgICBjID0gJ3UnOwotICAgICAgICAgICAgICAgICAgICBpID0g
MTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3UnOiB7
CisgICAgICAgICAgICAgICAgYyA9IDA7CisgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAg
ICAgICAgICAgZm9yIChpID0gMTsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHB0ciArIGkgPj0gcGF0dGVybkVuZCB8fCAhaXNBU0NJSUhleERpZ2l0KHB0cltpXSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBjYyA9IHB0cltpXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNjID49ICdhJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNjIC09IDMy
OyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KKyAgICAgICAgICAgICAg
ICAgICAgYyA9IGMgKiAxNiArIGNjIC0gKChjYyA8ICdBJykgPyAnMCcgOiAoJ0EnIC0gMTApKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IGNjID0gcHRyW2ldOwotICAg
ICAgICAgICAgICAgIGlmIChjYyA+PSAnYScpCi0gICAgICAgICAgICAgICAgICAgIGNjIC09IDMy
OyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHVwcGVyIGNhc2UgKi8KLSAgICAgICAgICAgICAg
ICBjID0gYyAqIDE2ICsgY2MgLSAoKGNjIDwgJ0EnKSA/ICcwJyA6ICgnQScgLSAxMCkpOworICAg
ICAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvKiBPdGhlciBzcGVjaWFsIGVzY2FwZXMgbm90IHN0
YXJ0aW5nIHdpdGggYSBkaWdpdCBhcmUgc3RyYWlnaHRmb3J3YXJkICovCi0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICBpZiAoKytwdHIgPT0gcGF0dGVybkVuZCkgewot
ICAgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyOwotICAgICAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBpZiAoKytw
dHIgPT0gcGF0dGVybkVuZCkgeworICAgICAgICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0g
RVJSMjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGMgPSAqcHRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8qIEEgbGV0dGVyIGlzIHVwcGVyLWNhc2VkOyB0aGVuIHRoZSAweDQwIGJpdCBpcyBmbGlw
cGVkLiBUaGlzIGNvZGluZworICAgICAgICAgICAgICAgICBpcyBBU0NJSS1zcGVjaWZpYywgYnV0
IHRoZW4gdGhlIHdob2xlIGNvbmNlcHQgb2YgXGN4IGlzIEFTQ0lJLXNwZWNpZmljLiAqLworICAg
ICAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIoYykgXiAweDQwOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYyA9ICpwdHI7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8qIEEgbGV0dGVyIGlzIHVwcGVyLWNhc2VkOyB0aGVuIHRoZSAweDQw
IGJpdCBpcyBmbGlwcGVkLiBUaGlzIGNvZGluZwotICAgICAgICAgICAgIGlzIEFTQ0lJLXNwZWNp
ZmljLCBidXQgdGhlbiB0aGUgd2hvbGUgY29uY2VwdCBvZiBcY3ggaXMgQVNDSUktc3BlY2lmaWMu
ICovCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykK
LSAgICAgICAgICAgICAgICBjIC09IDMyOwotICAgICAgICAgICAgYyBePSAweDQwOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgKnB0cnB0ciA9IHB0cjsK
ICAgICByZXR1cm4gYzsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgQ2hlY2sgZm9yIGNvdW50ZWQgcmVwZWF0
ICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KQEAgLTMyNiw3ICszMjIsNyBAQCBBcmd1bWVudHM6CiBSZXR1cm5zOiAgICB0cnVl
IG9yIGZhbHNlCiAqLwogCi1zdGF0aWMgYm9vbCBpc19jb3VudGVkX3JlcGVhdChjb25zdCBVQ2hh
ciogcCwgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQpCitzdGF0aWMgYm9vbCBpc0NvdW50ZWRSZXBl
YXQoY29uc3QgVUNoYXIqIHAsIGNvbnN0IFVDaGFyKiBwYXR0ZXJuRW5kKQogewogICAgIGlmIChw
ID49IHBhdHRlcm5FbmQgfHwgIWlzQVNDSUlEaWdpdCgqcCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM1MCwxMyArMzQ2LDEyIEBAIHN0YXRpYyBib29sIGlzX2NvdW50ZWRfcmVwZWF0KGNv
bnN0IFVDaGEKICAgICByZXR1cm4gKHAgPCBwYXR0ZXJuRW5kICYmICpwID09ICd9Jyk7CiB9CiAK
LQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICog
ICAgICAgICBSZWFkIHJlcGVhdCBjb3VudHMgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBSZWFkIGFu
IGl0ZW0gb2YgdGhlIGZvcm0ge24sbX0gYW5kIHJldHVybiB0aGUgdmFsdWVzLiBUaGlzIGlzIGNh
bGxlZCBvbmx5Ci1hZnRlciBpc19jb3VudGVkX3JlcGVhdCgpIGhhcyBjb25maXJtZWQgdGhhdCBh
IHJlcGVhdC1jb3VudCBxdWFudGlmaWVyIGV4aXN0cywKK2FmdGVyIGlzQ291bnRlZFJlcGVhdCgp
IGhhcyBjb25maXJtZWQgdGhhdCBhIHJlcGVhdC1jb3VudCBxdWFudGlmaWVyIGV4aXN0cywKIHNv
IHRoZSBzeW50YXggaXMgZ3VhcmFudGVlZCB0byBiZSBjb3JyZWN0LCBidXQgd2UgbmVlZCB0byBj
aGVjayB0aGUgdmFsdWVzLgogCiBBcmd1bWVudHM6CkBAIC0zNzAsNyArMzY1LDcgQEAgUmV0dXJu
czogICAgICAgICBwb2ludGVyIHRvICd9JyBvbiBzdWNjZQogICAgICAgICAgICAgICAgICBjdXJy
ZW50IHB0ciBvbiBlcnJvciwgd2l0aCBlcnJvcmNvZGVwdHIgc2V0IG5vbi16ZXJvCiAqLwogCi1z
dGF0aWMgY29uc3QgVUNoYXIqIHJlYWRfcmVwZWF0X2NvdW50cyhjb25zdCBVQ2hhciogcCwgaW50
KiBtaW5wLCBpbnQqIG1heHAsIEVycm9yQ29kZSogZXJyb3Jjb2RlcHRyKQorc3RhdGljIGNvbnN0
IFVDaGFyKiByZWFkUmVwZWF0Q291bnRzKGNvbnN0IFVDaGFyKiBwLCBpbnQqIG1pbnAsIGludCog
bWF4cCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIpCiB7CiAgICAgaW50IG1pbiA9IDA7CiAgICAg
aW50IG1heCA9IC0xOwpAQCAtNDE0LDI0NCArNDA5LDQ3IEBAIHN0YXRpYyBjb25zdCBVQ2hhciog
cmVhZF9yZXBlYXRfY291bnRzKGMKICAgICByZXR1cm4gcDsKIH0KIAotCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgIEZpbmQgZmlyc3Qg
c2lnbmlmaWNhbnQgb3AgY29kZSAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVy
YWwgZnVuY3Rpb25zIHRoYXQgc2NhbiBhIGNvbXBpbGVkIGV4cHJlc3Npb24gbG9va2luZwogZm9y
IGEgZml4ZWQgZmlyc3QgY2hhcmFjdGVyLCBvciBhbiBhbmNob3Jpbmcgb3AgY29kZSBldGMuIEl0
IHNraXBzIG92ZXIgdGhpbmdzCi10aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4gRm9yIHNvbWUg
Y2FsbHMsIGEgY2hhbmdlIG9mIG9wdGlvbiBpcyBpbXBvcnRhbnQuCi1Gb3Igc29tZSBjYWxscywg
aXQgbWFrZXMgc2Vuc2UgdG8gc2tpcCBuZWdhdGl2ZSBmb3J3YXJkIGFuZCBhbGwgYmFja3dhcmQK
LWFzc2VydGlvbnMsIGFuZCBhbHNvIHRoZSBcYiBhc3NlcnRpb247IGZvciBvdGhlcnMgaXQgZG9l
cyBub3QuCit0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4KIAogQXJndW1lbnRzOgogICBjb2Rl
ICAgICAgICAgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwCi0gIHNraXBhc3NlcnQg
ICB0cnVlIGlmIGNlcnRhaW4gYXNzZXJ0aW9ucyBhcmUgdG8gYmUgc2tpcHBlZAotCiBSZXR1cm5z
OiAgICAgICBwb2ludGVyIHRvIHRoZSBmaXJzdCBzaWduaWZpY2FudCBvcGNvZGUKICovCiAKLXN0
YXRpYyBjb25zdCB1c2NoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29uc3QgdXNjaGFyKiBj
b2RlKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUo
Y29uc3QgdW5zaWduZWQgY2hhciogY29kZSkKIHsKICAgICB3aGlsZSAoKmNvZGUgPT0gT1BfQlJB
TlVNQkVSKQotICAgICAgICBjb2RlICs9IE9QX2xlbmd0aHNbKmNvZGVdOworICAgICAgICBjb2Rl
ICs9IDM7CiAgICAgcmV0dXJuIGNvZGU7CiB9CiAKLXN0YXRpYyBjb25zdCB1c2NoYXIqIGZpcnN0
U2lnbmlmaWNhbnRPcENvZGVTa2lwcGluZ0Fzc2VydGlvbnMoY29uc3QgdXNjaGFyKiBjb2RlKQor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGVTa2lwcGlu
Z0Fzc2VydGlvbnMoY29uc3QgdW5zaWduZWQgY2hhciogY29kZSkKIHsKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBzd2l0Y2ggKCpjb2RlKSB7Ci0gICAgICAgIGNhc2UgT1BfQVNTRVJUX05P
VDoKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBjb2RlICs9IGdldE9wY29kZVZh
bHVlQXRPZmZzZXQoY29kZSwgMSk7Ci0gICAgICAgICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9B
TFQpOwotICAgICAgICAgICAgY29kZSArPSBPUF9sZW5ndGhzWypjb2RlXTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE9QX1dPUkRfQk9VTkRBUlk6Ci0gICAgICAgIGNhc2UgT1Bf
Tk9UX1dPUkRfQk9VTkRBUlk6Ci0gICAgICAgIGNhc2UgT1BfQlJBTlVNQkVSOgotICAgICAgICAg
ICAgY29kZSArPSBPUF9sZW5ndGhzWypjb2RlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgIEZpbmQgdGhlIGZpeGVkIGxlbmd0
aCBvZiBhIHBhdHRlcm4gICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vKiBTY2FuIGEgcGF0dGVybiBhbmQgY29tcHV0ZSB0aGUgZml4
ZWQgbGVuZ3RoIG9mIHN1YmplY3QgdGhhdCB3aWxsIG1hdGNoIGl0LAotaWYgdGhlIGxlbmd0aCBp
cyBmaXhlZC4gVGhpcyBpcyBuZWVkZWQgZm9yIGRlYWxpbmcgd2l0aCBiYWNrd2FyZCBhc3NlcnRp
b25zLgotSW4gVVRGOCBtb2RlLCB0aGUgcmVzdWx0IGlzIGluIGNoYXJhY3RlcnMgcmF0aGVyIHRo
YW4gYnl0ZXMuCi0KLUFyZ3VtZW50czoKLSAgY29kZSAgICAgcG9pbnRzIHRvIHRoZSBzdGFydCBv
ZiB0aGUgcGF0dGVybiAodGhlIGJyYWNrZXQpCi0gIG9wdGlvbnMgIHRoZSBjb21waWxpbmcgb3B0
aW9ucwotCi1SZXR1cm5zOiAgIHRoZSBmaXhlZCBsZW5ndGgsIG9yIC0xIGlmIHRoZXJlIGlzIG5v
IGZpeGVkIGxlbmd0aCwKLSAgICAgICAgICAgICBvciAtMiBpZiBcQyB3YXMgZW5jb3VudGVyZWQK
LSovCi0KLXN0YXRpYyBpbnQgZmluZF9maXhlZGxlbmd0aCh1c2NoYXIqIGNvZGUsIGludCBvcHRp
b25zKQotewotICAgIGludCBsZW5ndGggPSAtMTsKLSAgICAKLSAgICBpbnQgYnJhbmNobGVuZ3Ro
ID0gMDsKLSAgICB1c2NoYXIqIGNjID0gY29kZSArIDEgKyBMSU5LX1NJWkU7Ci0gICAgCi0gICAg
LyogU2NhbiBhbG9uZyB0aGUgb3Bjb2RlcyBmb3IgdGhpcyBicmFuY2guIElmIHdlIGdldCB0byB0
aGUgZW5kIG9mIHRoZQotICAgICBicmFuY2gsIGNoZWNrIHRoZSBsZW5ndGggYWdhaW5zdCB0aGF0
IG9mIHRoZSBvdGhlciBicmFuY2hlcy4gKi8KLSAgICAKLSAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBpbnQgZDsKLSAgICAgICAgaW50IG9wID0gKmNjOwotICAgICAgICBpZiAob3AgPj0gT1Bf
QlJBKQotICAgICAgICAgICAgb3AgPSBPUF9CUkE7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgICAgICAgICBjYXNlIE9QX0JSQToKLSAgICAgICAgICAgIGNhc2UgT1BfT05D
RToKLSAgICAgICAgICAgICAgICBkID0gZmluZF9maXhlZGxlbmd0aChjYywgb3B0aW9ucyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGQgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDsK
LSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGggKz0gZDsKLSAgICAgICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgICAgIGNjICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEp
OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpjYyA9PSBPUF9BTFQpOwotICAgICAgICAgICAg
ICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogUmVhY2hlZCBlbmQgb2YgYSBicmFuY2g7IGlm
IGl0J3MgYSBrZXQgaXQgaXMgdGhlIGVuZCBvZiBhIG5lc3RlZAotICAgICAgICAgICAgICAgICBj
YWxsLiBJZiBpdCdzIEFMVCBpdCBpcyBhbiBhbHRlcm5hdGlvbiBpbiBhIG5lc3RlZCBjYWxsLiBJ
ZiBpdCBpcwotICAgICAgICAgICAgICAgICBFTkQgaXQncyB0aGUgZW5kIG9mIHRoZSBvdXRlciBj
YWxsLiBBbGwgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIHNhbWUgY29kZS4gKi8KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfQUxUOgotICAgICAgICAgICAgY2FzZSBPUF9LRVQ6
Ci0gICAgICAgICAgICBjYXNlIE9QX0tFVFJNQVg6Ci0gICAgICAgICAgICBjYXNlIE9QX0tFVFJN
SU46Ci0gICAgICAgICAgICBjYXNlIE9QX0VORDoKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3Ro
IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYnJhbmNobGVuZ3RoOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGxlbmd0aCAhPSBicmFuY2hsZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICBpZiAoKmNjICE9IE9QX0FMVCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICAgICAgICAgICAgICBjYyArPSAx
ICsgTElOS19TSVpFOwotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogU2tp
cCBvdmVyIGFzc2VydGl2ZSBzdWJwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBPUF9BU1NFUlQ6CiAgICAgICAgICAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6Ci0g
ICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBjYyArPSBnZXRPcGNvZGVW
YWx1ZUF0T2Zmc2V0KGNjLCAxKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlICgqY2MgPT0gT1Bf
QUxUKTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgdGhpbmdzIHRoYXQgZG9uJ3QgbWF0Y2gg
Y2hhcnMgKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfQlJBTlVNQkVS
OgotICAgICAgICAgICAgY2FzZSBPUF9DSVJDOgotICAgICAgICAgICAgY2FzZSBPUF9ET0xMOgot
ICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKLSAgICAgICAgICAgIGNhc2Ug
T1BfV09SRF9CT1VOREFSWToKLSAgICAgICAgICAgICAgICBjYyArPSBPUF9sZW5ndGhzWypjY107
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLyogSGFuZGxlIGxpdGVyYWwgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBPUF9DSEFSOgotICAgICAgICAgICAgY2FzZSBPUF9DSEFSX0lHTk9SSU5H
X0NBU0U6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVDoKLSAgICAgICAgICAgICAgICBicmFuY2hs
ZW5ndGgrKzsKLSAgICAgICAgICAgICAgICBjYyArPSAyOwotICAgICAgICAgICAgICAgIHdoaWxl
ICgoKmNjICYgMHhjMCkgPT0gMHg4MCkKLSAgICAgICAgICAgICAgICAgICAgY2MrKzsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1Bf
QVNDSUlfQ0hBUjoKLSAgICAgICAgICAgIGNhc2UgT1BfQVNDSUlfTEVUVEVSX0lHTk9SSU5HX0NB
U0U6Ci0gICAgICAgICAgICAgICAgYnJhbmNobGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgY2Mg
Kz0gMjsKKyAgICAgICAgICAgICAgICBhZHZhbmNlVG9FbmRPZkJyYWNrZXQoY29kZSk7CisgICAg
ICAgICAgICAgICAgY29kZSArPSAxICsgTElOS19TSVpFOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBleGFjdCByZXBl
dGl0aW9ucy4gVGhlIGNvdW50IGlzIGFscmVhZHkgaW4gY2hhcmFjdGVycywgYnV0IHdlCi0gICAg
ICAgICAgICAgICAgIG5lZWQgdG8gc2tpcCBvdmVyIGEgbXVsdGlieXRlIGNoYXJhY3RlciBpbiBV
VEY4IG1vZGUuICAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9FWEFD
VDoKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGggKz0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0
T2Zmc2V0KGNjLDEpOwotICAgICAgICAgICAgICAgIGNjICs9IDQ7Ci0gICAgICAgICAgICAgICAg
d2hpbGUoKCpjYyAmIDB4ODApID09IDB4ODApCi0gICAgICAgICAgICAgICAgICAgIGNjKys7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IE9QX1RZUEVFWEFDVDoKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGggKz0gZ2V0MkJ5dGVP
cGNvZGVWYWx1ZUF0T2Zmc2V0KGNjLDEpOwotICAgICAgICAgICAgICAgIGNjICs9IDQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyog
SGFuZGxlIHNpbmdsZS1jaGFyIG1hdGNoZXJzICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIE9QX05PVF9ESUdJVDoKLSAgICAgICAgICAgIGNhc2UgT1BfRElHSVQ6Ci0gICAg
ICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgotICAgICAgICAgICAgY2FzZSBPUF9XSElU
RVNQQUNFOgotICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6Ci0gICAgICAgICAgICBj
YXNlIE9QX1dPUkRDSEFSOgotICAgICAgICAgICAgY2FzZSBPUF9OT1RfTkVXTElORToKLSAgICAg
ICAgICAgICAgICBicmFuY2hsZW5ndGgrKzsKLSAgICAgICAgICAgICAgICBjYysrOworICAgICAg
ICAgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09S
RF9CT1VOREFSWToKKyAgICAgICAgICAgICAgICArK2NvZGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogQ2hlY2sgYSBjbGFzcyBm
b3IgdmFyaWFibGUgcXVhbnRpZmljYXRpb24gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgT1BfWENMQVNTOgotICAgICAgICAgICAgICAgIGNjICs9IGdldE9wY29kZVZhbHVl
QXRPZmZzZXQoY2MsIDEpIC0gMzM7Ci0gICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICov
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE9QX0NMQVNTOgotICAgICAgICAg
ICAgY2FzZSBPUF9OQ0xBU1M6Ci0gICAgICAgICAgICAgICAgY2MgKz0gMzM7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoICgqY2MpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIE9QX0NSU1RBUjoKLSAgICAgICAgICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKLSAgICAg
ICAgICAgICAgICBjYXNlIE9QX0NSUVVFUlk6Ci0gICAgICAgICAgICAgICAgY2FzZSBPUF9DUk1J
TlFVRVJZOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKLSAgICAgICAgICAgICAgICBj
YXNlIE9QX0NSTUlOUkFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXQyQnl0ZU9wY29k
ZVZhbHVlQXRPZmZzZXQoY2MsIDEpICE9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChjYywg
MykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyYW5jaGxlbmd0aCArPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpOwot
ICAgICAgICAgICAgICAgICAgICBjYyArPSA1OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgYnJhbmNobGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBPUF9CUkFOVU1CRVI6CisgICAgICAgICAgICAgICAgY29kZSArPSAzOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIEFu
eXRoaW5nIGVsc2UgaXMgdmFyaWFibGUgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29kZTsKICAgICAgICAgfQogICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotKiAgICAgICAgIENvbXBsZXRlIGEgY2FsbG91dCBpdGVtICAgICAgICAgICAgICAg
ICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LS8qIEEgY2FsbG91dCBpdGVtIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgaXRlbSBp
biB0aGUgcGF0dGVybiwgd2hpY2gKLXdlIGNhbid0IGZpbGwgaW4gdGlsbCBhZnRlciB3ZSBoYXZl
IHJlYWNoZWQgdGhlIHJlbGV2YW50IHBvaW50LiBUaGlzIGlzIHVzZWQKLWZvciBib3RoIGF1dG9t
YXRpYyBhbmQgbWFudWFsIGNhbGxvdXRzLgotCi1Bcmd1bWVudHM6Ci0gIHByZXZpb3VzX2NhbGxv
dXQgICBwb2ludHMgdG8gcHJldmlvdXMgY2FsbG91dCBpdGVtCi0gIHB0ciAgICAgICAgICAgICAg
ICBjdXJyZW50IHBhdHRlcm4gcG9pbnRlcgotICBjZCAgICAgICAgICAgICAgICAgcG9pbnRlcnMg
dG8gdGFibGVzIGV0YwotKi8KLQotc3RhdGljIHZvaWQgY29tcGxldGVfY2FsbG91dCh1c2NoYXIq
IHByZXZpb3VzX2NhbGxvdXQsIGNvbnN0IFVDaGFyKiBwdHIsIGNvbnN0IENvbXBpbGVEYXRhJiBj
ZCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gcHRyIC0gY2Quc3RhcnRfcGF0dGVybiAtIGdldE9wY29k
ZVZhbHVlQXRPZmZzZXQocHJldmlvdXNfY2FsbG91dCwgMik7Ci0gICAgcHV0T3Bjb2RlVmFsdWVB
dE9mZnNldChwcmV2aW91c19jYWxsb3V0LCAyICsgTElOS19TSVpFLCBsZW5ndGgpOwotfQotCi0K
LQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICog
ICAgICAgICAgIEdldCBvdGhlcmNhc2UgcmFuZ2UgICAgICAgICAgICAgICAgICAqCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjcwLDEyICs0
NjgsMTIgQEAgQXJndW1lbnRzOgogWWllbGQ6ICAgICAgICB0cnVlIHdoZW4gcmFuZ2UgcmV0dXJu
ZWQ7IGZhbHNlIHdoZW4gbm8gbW9yZQogKi8KIAotc3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9y
YW5nZShpbnQqIGNwdHIsIGludCBkLCBpbnQqIG9jcHRyLCBpbnQqIG9kcHRyKQorc3RhdGljIGJv
b2wgZ2V0T3RoZXJjYXNlUmFuZ2UoaW50KiBjcHRyLCBpbnQgZCwgaW50KiBvY3B0ciwgaW50KiBv
ZHB0cikKIHsKICAgICBpbnQgYywgb3RoZXJjYXNlID0gMDsKICAgICAKICAgICBmb3IgKGMgPSAq
Y3B0cjsgYyA8PSBkOyBjKyspIHsKLSAgICAgICAgaWYgKChvdGhlcmNhc2UgPSBfcGNyZV91Y3Bf
b3RoZXJjYXNlKGMpKSA+PSAwKQorICAgICAgICBpZiAoKG90aGVyY2FzZSA9IGtqc19wY3JlX3Vj
cF9vdGhlcmNhc2UoYykpID49IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBA
IC02ODYsNyArNDg0LDcgQEAgc3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQqIGNw
dAogICAgIGludCBuZXh0ID0gb3RoZXJjYXNlICsgMTsKICAgICAKICAgICBmb3IgKCsrYzsgYyA8
PSBkOyBjKyspIHsKLSAgICAgICAgaWYgKF9wY3JlX3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4dCkK
KyAgICAgICAgaWYgKGtqc19wY3JlX3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4dCkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBuZXh0Kys7CiAgICAgfQpAQCAtNzExLDE5ICs1MDksMTggQEAg
c3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQqIGNwdAogIFJldHVybnM6ICAgICBu
dW1iZXIgb2YgY2hhcmFjdGVycyBwbGFjZWQgaW4gdGhlIGJ1ZmZlcgogICovCiAKLS8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gYXMgYWxsIFVURjggdXNlcyBhcmUgcmVt
b3ZlZCBmcm9tIFBDUkUKLWludCBfcGNyZV9vcmQydXRmOChpbnQgY3ZhbHVlLCB1c2NoYXIgKmJ1
ZmZlcikKK3N0YXRpYyBpbnQgZW5jb2RlVVRGOChpbnQgY3ZhbHVlLCB1bnNpZ25lZCBjaGFyICpi
dWZmZXIpCiB7CiAgICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFi
bGUxX3NpemU7IGkrKykKLSAgICAgICAgaWYgKGN2YWx1ZSA8PSBfcGNyZV91dGY4X3RhYmxlMVtp
XSkKKyAgICBmb3IgKGkgPSAwOyBpIDwga2pzX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQor
ICAgICAgICBpZiAoY3ZhbHVlIDw9IGtqc19wY3JlX3V0ZjhfdGFibGUxW2ldKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgYnVmZmVyICs9IGk7CiAgICAgZm9yIChpbnQgaiA9IGk7IGogPiAwOyBq
LS0pIHsKICAgICAgICAgKmJ1ZmZlci0tID0gMHg4MCB8IChjdmFsdWUgJiAweDNmKTsKICAgICAg
ICAgY3ZhbHVlID4+PSA2OwogICAgIH0KLSAgICAqYnVmZmVyID0gX3BjcmVfdXRmOF90YWJsZTJb
aV0gfCBjdmFsdWU7CisgICAgKmJ1ZmZlciA9IGtqc19wY3JlX3V0ZjhfdGFibGUyW2ldIHwgY3Zh
bHVlOwogICAgIHJldHVybiBpICsgMTsKIH0KIApAQCAtNzUzLDcgKzU1MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzYWZlbHlDaGVja05leHRDaGFyKGMKIH0KIAogc3RhdGljIGJvb2wKLWNvbXBp
bGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMsIHVzY2hhcioqIGNvZGVwdHIsCitj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzLCB1bnNpZ25lZCBjaGFyKiog
Y29kZXB0ciwKICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hh
ciogcGF0dGVybkVuZCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIsIGludCAqZmlyc3RieXRlcHRy
LAogICAgICAgICAgICAgICAgaW50KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2QpCiB7CkBA
IC03NjEsMjAgKzU1OCwxOCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNr
ZXRzCiAgICAgaW50IHJlcGVhdF9taW4gPSAwLCByZXBlYXRfbWF4ID0gMDsgICAgICAvKiBUbyBw
bGVhc2UgcGlja3kgY29tcGlsZXJzICovCiAgICAgaW50IGJyYXZhbHVlID0gMDsKICAgICBpbnQg
cmVxdmFyeSwgdGVtcHJlcXZhcnk7Ci0gICAgaW50IGFmdGVyX21hbnVhbF9jYWxsb3V0ID0gMDsK
ICAgICBpbnQgYzsKLSAgICB1c2NoYXIqIGNvZGUgPSAqY29kZXB0cjsKLSAgICB1c2NoYXIqIHRl
bXBjb2RlOworICAgIHVuc2lnbmVkIGNoYXIqIGNvZGUgPSAqY29kZXB0cjsKKyAgICB1bnNpZ25l
ZCBjaGFyKiB0ZW1wY29kZTsKICAgICBib29sIGdyb3Vwc2V0Zmlyc3RieXRlID0gZmFsc2U7CiAg
ICAgY29uc3QgVUNoYXIqIHB0ciA9ICpwdHJwdHI7CiAgICAgY29uc3QgVUNoYXIqIHRlbXBwdHI7
Ci0gICAgdXNjaGFyKiBwcmV2aW91cyA9IE5VTEw7Ci0gICAgdXNjaGFyKiBwcmV2aW91c19jYWxs
b3V0ID0gTlVMTDsKLSAgICB1c2NoYXIgY2xhc3NiaXRzWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFy
KiBwcmV2aW91cyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjbGFzc2JpdHNbMzJdOwogICAg
IAogICAgIGJvb2wgY2xhc3NfdXRmODsKLSAgICB1c2NoYXIqIGNsYXNzX3V0ZjhkYXRhOwotICAg
IHVzY2hhciB1dGY4X2NoYXJbNl07CisgICAgdW5zaWduZWQgY2hhciogY2xhc3NfdXRmOGRhdGE7
CisgICAgdW5zaWduZWQgY2hhciB1dGY4X2NoYXJbNl07CiAgICAgCiAgICAgLyogSW5pdGlhbGl6
ZSBubyBmaXJzdCBieXRlLCBubyByZXF1aXJlZCBieXRlLiBSRVFfVU5TRVQgbWVhbnMgIm5vIGNo
YXIKICAgICAgbWF0Y2hpbmcgZW5jb3VudGVyZWQgeWV0Ii4gSXQgZ2V0cyBjaGFuZ2VkIHRvIFJF
UV9OT05FIGlmIHdlIGhpdCBzb21ldGhpbmcgdGhhdApAQCAtODA5LDcgKzYwNCw3IEBAIGNvbXBp
bGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgaW50IHN1YnJlcWJ5
dGU7CiAgICAgICAgIGludCBzdWJmaXJzdGJ5dGU7CiAgICAgICAgIGludCBtY2xlbmd0aDsKLSAg
ICAgICAgdXNjaGFyIG1jYnVmZmVyWzhdOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1jYnVmZmVy
WzhdOwogICAgICAgICAKICAgICAgICAgLyogTmV4dCBieXRlIGluIHRoZSBwYXR0ZXJuICovCiAg
ICAgICAgIApAQCAtODE4LDEyICs2MTMsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBp
bnQqIGJyYWNrZXRzCiAgICAgICAgIC8qIEZpbGwgaW4gbGVuZ3RoIG9mIGEgcHJldmlvdXMgY2Fs
bG91dCwgZXhjZXB0IHdoZW4gdGhlIG5leHQgdGhpbmcgaXMKICAgICAgICAgIGEgcXVhbnRpZmll
ci4gKi8KICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNfcXVhbnRpZmllciA9IGMgPT0gJyonIHx8
IGMgPT0gJysnIHx8IGMgPT0gJz8nIHx8IChjID09ICd7JyAmJiBpc19jb3VudGVkX3JlcGVhdChw
dHIgKyAxLCBwYXR0ZXJuRW5kKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzX3F1YW50aWZp
ZXIgJiYgcHJldmlvdXNfY2FsbG91dCAmJiBhZnRlcl9tYW51YWxfY2FsbG91dC0tIDw9IDApIHsK
LSAgICAgICAgICAgIGNvbXBsZXRlX2NhbGxvdXQocHJldmlvdXNfY2FsbG91dCwgcHRyLCBjZCk7
Ci0gICAgICAgICAgICBwcmV2aW91c19jYWxsb3V0ID0gTlVMTDsKLSAgICAgICAgfQorICAgICAg
ICBib29sIGlzX3F1YW50aWZpZXIgPSBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICc/JyB8
fCAoYyA9PSAneycgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKTsKICAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgLyogVGhlIGJyYW5jaCB0
ZXJtaW5hdGVzIGF0IGVuZCBvZiBzdHJpbmcsIHwsIG9yICkuICovCkBAIC05MTYsNyArNzA2LDcg
QEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXIgKDwgMjU2KSwgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIGNvbXBpbGVk
IGNvZGUgZG9lc24ndCB1c2UgdGhlCiAgICAgICAgICAgICAgICAgIGJpdCBtYXAuICovCiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwgMzIgKiBz
aXplb2YodXNjaGFyKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwgMzIg
KiBzaXplb2YodW5zaWduZWQgY2hhcikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8qIFByb2Nlc3MgY2hhcmFjdGVycyB1bnRpbCBdIGlzIHJlYWNoZWQuIFRoZSBmaXJzdCBw
YXNzCiAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIHJlZ2V4IGNoZWNrZWQgdGhlIG92ZXJh
bGwgc3ludGF4LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGJlIHZlcnkKQEAgLTkzMyw3ICs3MjMsNyBA
QCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAg
ICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlbSwgc28gc2V0IGNsYXNzX2NoYXJjb3VudCBiaWdnZXIg
dGhhbiBvbmUuICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
ZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBl
KCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJv
cmNvZGVwdHIsICpicmFja2V0cywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgtYyA9PSBFU0NfYikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjID0gJ1xiJzsgICAgICAgLyogXGIgaXMgYmFja3NsYXNoIGluIGEgY2xhc3Mg
Ki8KQEAgLTEwMDQsNyArNzk0LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBi
cmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZCA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNo
YXIqIG9sZHB0ciA9IHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY2hlY2tf
ZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY2hlY2tFc2NhcGUoJnB0ciwgcGF0dGVy
bkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIHRydWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxiIGlzIGJhY2tzbGFz
aDsgXFggaXMgbGl0ZXJhbCBYOyBhbnkgb3RoZXIgc3BlY2lhbCBtZWFucyB0aGUgJy0nCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBsaXRlcmFsICovCkBAIC0xMDQxLDcgKzgzMSw3
IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG9jYywgb2NkOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY2MgPSBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgb3JpZ2QgPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0
X290aGVyY2FzZV9yYW5nZSgmY2MsIG9yaWdkLCAmb2NjLCAmb2NkKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0T3RoZXJjYXNlUmFuZ2UoJmNjLCBvcmlnZCwg
Jm9jYywgJm9jZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
Y2MgPj0gYyAmJiBvY2QgPD0gZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsgIC8qIFNraXAgZW1iZWRkZWQgcmFuZ2VzICovCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNjAsOSArODUwLDkgQEAgY29tcGlsZUJyYW5j
aChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29y
ZDJ1dGY4KG9jYywgY2xhc3NfdXRmOGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgob2NjLCBjbGFzc191dGY4
ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRm
OChvY2QsIGNsYXNzX3V0ZjhkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgob2NkLCBjbGFzc191dGY4ZGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDcwLDggKzg2MCw4IEBA
IGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmcgcmFuZ2VzLiAqLwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsr
ID0gWENMX1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRh
ICs9IF9wY3JlX29yZDJ1dGY4KGMsIGNsYXNzX3V0ZjhkYXRhKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRmOChkLCBjbGFzc191dGY4
ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5j
b2RlVVRGOChjLCBjbGFzc191dGY4ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NfdXRmOGRhdGEgKz0gZW5jb2RlVVRGOChkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2l0
aCBVQ1Agc3VwcG9ydCwgd2UgYXJlIGRvbmUuIFdpdGhvdXQgVUNQIHN1cHBvcnQsIHRoZXJlIGlz
IG5vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VsZXNzIG1hdGNoaW5nIGZvciBV
VEYtOCBjaGFyYWN0ZXJzID4gMTI3OyB3ZSBjYW4gdXNlIHRoZSBiaXQgbWFwCkBAIC0xMTA4LDEz
ICs4OTgsMTMgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgICAgICBpZiAoKGMgPiAyNTUgfHwgKChvcHRpb25zICYgSWdub3JlQ2FzZU9w
dGlvbikgJiYgYyA+IDEyNykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENM
X1NJTkdMRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3Jl
X29yZDJ1dGY4KGMsIGNsYXNzX3V0ZjhkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgoYywgY2xhc3NfdXRmOGRhdGEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmIEln
bm9yZUNhc2VPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3RoZXJj
YXNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob3RoZXJjYXNlID0gX3BjcmVf
dWNwX290aGVyY2FzZShjKSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgob3RoZXJjYXNlID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY2xhc3NfdXRmOGRhdGErKyA9IFhDTF9TSU5HTEU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3Jl
X29yZDJ1dGY4KG90aGVyY2FzZSwgY2xhc3NfdXRmOGRhdGEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBlbmNvZGVVVEY4KG90aGVyY2FzZSwgY2xh
c3NfdXRmOGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEyMDIsNyAr
OTkyLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogTm93IGZpbGwgaW4gdGhlIGNv
bXBsZXRlIGxlbmd0aCBvZiB0aGUgaXRlbSAqLwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChwcmV2aW91cywgMSwgY29kZSAt
IHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlKHByZXZpb3VzICsg
MSwgY29kZSAtIHByZXZpb3VzKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogRW5k
IG9mIGNsYXNzIGhhbmRsaW5nICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMTIyNyw3ICsxMDE3LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBi
cmFja2V0cwogICAgICAgICAgICAgY2FzZSAneyc6CiAgICAgICAgICAgICAgICAgaWYgKCFpc19x
dWFudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAgICAg
ICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJnJlcGVhdF9taW4sICZy
ZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOworICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBl
YXRDb3VudHMocHRyICsgMSwgJnJlcGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIp
OwogICAgICAgICAgICAgICAgIGlmICgqZXJyb3Jjb2RlcHRyKQogICAgICAgICAgICAgICAgICAg
ICBnb3RvIEZBSUxFRDsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVDsKQEAgLTEyNjUsNiAr
MTA1NSw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBTYXZlIHN0YXJ0IG9mIHByZXZpb3VzIGl0
ZW0sIGluIGNhc2Ugd2UgaGF2ZSB0byBtb3ZlIGl0IHVwIHRvIG1ha2Ugc3BhY2UKICAgICAgICAg
ICAgICAgICAgZm9yIGFuIGluc2VydGVkIE9QX09OQ0UgZm9yIHRoZSBhZGRpdGlvbmFsICcrJyBl
eHRlbnNpb24uICovCisgICAgICAgICAgICAgICAgLyogRklYTUU6IFByb2JhYmx5IGRvbid0IG5l
ZWQgdGhpcyBiZWNhdXNlIHdlIGRvbid0IHVzZSBPUF9PTkNFLiAqLwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHRlbXBjb2RlID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAg
CkBAIC0xMjkzLDcgKzEwODQsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJy
YWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggcmF0aGVyIHRoYW4gYSBzbWFsbCBj
aGFyYWN0ZXIuICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
ZiAoY29kZVstMV0gJiAweDgwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIgKmxh
c3RjaGFyID0gY29kZSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICpsYXN0Y2hhciA9IGNvZGUgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoKCps
YXN0Y2hhciAmIDB4YzApID09IDB4ODApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dGNoYXItLTsKICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjb2RlIC0gbGFzdGNoYXI7ICAg
ICAgICAgICAgLyogTGVuZ3RoIG9mIFVURi04IGNoYXJhY3RlciAqLwpAQCAtMTMzOSw3ICsxMTMw
LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAg
ICAgICAgICAgICBpbnQgcHJvcF90eXBlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIGludCBw
cm9wX3ZhbHVlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICB1c2NoYXIqIG9sZGNvZGUgPSBjb2RlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyKiBvbGRjb2RlID0gY29kZTsKICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHByZXZpb3Vz
OyAgICAgICAgICAgICAgICAgIC8qIFVzdWFsbHkgb3ZlcndyaXRlIHByZXZpb3VzIGl0ZW0gKi8K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBtYXhp
bXVtIGlzIHplcm8gdGhlbiB0aGUgbWluaW11bSBtdXN0IGFsc28gYmUgemVybzsgUGVybCBhbGxv
d3MKQEAgLTEzNjIsNyArMTE1Myw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCog
YnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfUVVFUlkg
KyByZXBlYXRfdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9VUFRPICsgcmVwZWF0X3R5cGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2
YW5jZShjb2RlLCAwLCByZXBlYXRfbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWF4KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTEzNzksNyArMTE3MCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJh
Y2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0X21heCA9PSAxKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVORF9SRVBFQVQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRB
ZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWF4IC0gMSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0xMzg4LDcgKzExNzksNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25z
LCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9FWEFDVCArIG9w
X3R5cGU7ICAvKiBOQiBFWEFDVCBkb2Vzbid0IGhhdmUgcmVwZWF0X3R5cGUgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UoY29k
ZSwgMCwgcmVwZWF0X21pbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVl
QW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIG1heGltdW0gaXMgdW5saW1pdGVkLCBp
bnNlcnQgYW4gT1BfU1RBUi4gQmVmb3JlIGRvaW5nIHNvLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBjaGFyYWN0ZXIgZm9yIHRoZSBwcmV2aW91cyBjb2Rl
LiBGb3IgYSByZXBlYXRlZApAQCAtMTQyNSw3ICsxMjE2LDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRfbWF4IC09IHJlcGVhdF9taW47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRB
bmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKGNvZGUsIHJlcGVhdF9tYXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMTQ2NywyMCArMTI1OCwyMCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBp
bnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfQ1JRVUVS
WSArIHJlcGVhdF90eXBlOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICpjb2RlKysgPSBPUF9DUlJBTkdFICsgcmVwZWF0X3R5cGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNv
ZGUsIDAsIHJlcGVhdF9taW4pOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1
ZUFuZEFkdmFuY2UoY29kZSwgcmVwZWF0X21pbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVwZWF0X21heCA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRf
bWF4ID0gMDsgIC8qIDItYnl0ZSBlbmNvZGluZyBmb3IgbWF4ICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJl
cGVhdF9tYXgpOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFu
Y2UoY29kZSwgcmVwZWF0X21heCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogSWYgcHJldmlvdXMg
d2FzIGEgYnJhY2tldCBncm91cCwgd2UgbWF5IGhhdmUgdG8gcmVwbGljYXRlIGl0IGluIGNlcnRh
aW4KICAgICAgICAgICAgICAgICAgY2FzZXMuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoKnByZXZpb3VzID49IE9QX0JSQSB8fCAqcHJldmlvdXMgPT0gT1Bf
T05DRSkgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpwcmV2aW91cyA+PSBPUF9CUkEpIHsK
ICAgICAgICAgICAgICAgICAgICAgaW50IGtldG9mZnNldCA9IDA7CiAgICAgICAgICAgICAgICAg
ICAgIGludCBsZW4gPSBjb2RlIC0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgIHVzY2hh
ciogYnJhbGluayA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJy
YWxpbmsgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
LyogSWYgdGhlIG1heGltdW0gcmVwZWF0IGNvdW50IGlzIHVubGltaXRlZCwgZmluZCB0aGUgZW5k
IG9mIHRoZSBicmFja2V0CiAgICAgICAgICAgICAgICAgICAgICBieSBzY2FubmluZyB0aHJvdWdo
IGZyb20gdGhlIHN0YXJ0LCBhbmQgY29tcHV0ZSB0aGUgb2Zmc2V0IGJhY2sgdG8gaXQKQEAgLTE0
ODksMTAgKzEyODAsOCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRz
CiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLiAqLwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdF9tYXggPT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVzY2hhcioga2V0ID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V0ICs9IGdldE9wY29kZVZh
bHVlQXRPZmZzZXQoa2V0LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpr
ZXQgIT0gT1BfS0VUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGtldCA9IHByZXZpb3VzOworICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5k
T2ZCcmFja2V0KGtldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZXRvZmZzZXQgPSBjb2Rl
IC0ga2V0OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MTU0NCw3ICsxMzMzLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSAoIWJyYWxpbmspID8gMCA6IHByZXZpb3VzIC0gYnJhbGluazsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmFsaW5rID0gcHJldmlvdXM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UocHJldmlv
dXMsIDAsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVl
QWxsb3daZXJvQW5kQWR2YW5jZShwcmV2aW91cywgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwZWF0X21heC0tOwpAQCAtMTU4NSw3ICsxMzc0LDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Y29kZSsrID0gT1BfQlJBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gKCFicmFsaW5rKSA/IDAgOiBjb2RlIC0gYnJhbGluazsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhbGluayA9IGNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dExpbmtWYWx1ZUFsbG93WmVyb0Fu
ZEFkdmFuY2UoY29kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KGNvZGUsIHByZXZpb3VzLCBsZW4pOwpAQCAtMTU5NywxMiArMTM4NiwxMiBAQCBjb21w
aWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChicmFsaW5rKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvZGUgLSBicmFsaW5rICsgMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIqIGJyYSA9IGNvZGUgLSBvZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZGxpbmtvZmZzZXQgPSBnZXRPcGNvZGVW
YWx1ZUF0T2Zmc2V0KGJyYSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbGlu
ayA9IG9sZGxpbmtvZmZzZXQgPyBicmFsaW5rIC0gb2xkbGlua29mZnNldCA6IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYnJhID0gY29kZSAtIG9mZnNldDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkbGlua29mZnNldCA9IGdldExpbmtW
YWx1ZUFsbG93WmVybyhicmEgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFs
aW5rID0gKCFvbGRsaW5rb2Zmc2V0KSA/IDAgOiBicmFsaW5rIC0gb2xkbGlua29mZnNldDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfS0VUOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAs
IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9m
ZnNldChicmEsIDEsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlu
a1ZhbHVlQW5kQWR2YW5jZShjb2RlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1dExpbmtWYWx1ZShicmEgKyAxLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTY0
MywyNyArMTQzMiwyNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRz
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCooKytwdHIpID09ICc/Jykg
ewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCooKytwdHIpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgJzonOiAgICAgICAgICAgICAgICAgLyogTm9uLWV4dHJhY3RpbmcgYnJhY2tl
dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJhdmFsdWUgPSBPUF9CUkE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOiAg
ICAgICAgICAgICAgICAgLyogUG9zaXRpdmUgbG9va2FoZWFkICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0
cisrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6ICAgICAgICAgICAgICAgICAvKiBO
ZWdhdGl2ZSBsb29rYWhlYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0g
T1BfQVNTRVJUX05PVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJzonOiAgICAgICAgICAgICAgICAgLyogTm9uLWV4dHJhY3Rp
bmcgYnJhY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1Bf
QlJBOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnPSc6ICAgICAgICAgICAgICAgICAvKiBQb3NpdGl2ZSBs
b29rYWhlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FT
U0VSVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOiAgICAgICAgICAgICAgICAgLyogTmVnYXRpdmUg
bG9va2FoZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhdmFsdWUgPSBPUF9B
U1NFUlRfTk9UOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGFmdGVyICg/IG5vdCBzcGVjaWFs
bHkgcmVjb2duaXplZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgLyogT3B0aW9uIHNldHRpbmcgKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gRkFJTEVEOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLyogRWxzZSB3ZSBoYXZlIGEgcmVmZXJlbmNpbmcgZ3JvdXA7IGFkanVzdCB0aGUgb3Bjb2Rl
LiBJZiB0aGUgYnJhY2tldApAQCAtMTY3NCw3ICsxNDYzLDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICBpZiAoKysoKmJyYWNr
ZXRzKSA+IEVYVFJBQ1RfQkFTSUNfTUFYKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmF2
YWx1ZSA9IE9QX0JSQSArIEVYVFJBQ1RfQkFTSUNfTUFYICsgMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVbMSArIExJTktfU0laRV0gPSBPUF9CUkFOVU1CRVI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMitMSU5LX1NJWkUs
ICpicmFja2V0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlKGNvZGUg
KyAyICsgTElOS19TSVpFLCAqYnJhY2tldHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2tp
cGJ5dGVzID0gMzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBl
bHNlCkBAIC0xNjg2LDcgKzE0NzUsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQq
IGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgIHRvIHBhc3MgaXRzIGFkZHJlc3MgYmVjYXVzZSBz
b21lIGNvbXBpbGVycyBjb21wbGFpbiBvdGhlcndpc2UuIFBhc3MgaW4gYQogICAgICAgICAgICAg
ICAgICBuZXcgc2V0dGluZyBmb3IgdGhlIGltcyBvcHRpb25zIGlmIHRoZXkgaGF2ZSBjaGFuZ2Vk
LiAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHByZXZpb3VzID0gKGJyYXZh
bHVlID49IE9QX09OQ0UpID8gY29kZSA6IDA7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSAo
YnJhdmFsdWUgPj0gT1BfQlJBWkVSTykgPyBjb2RlIDogMDsKICAgICAgICAgICAgICAgICAqY29k
ZSA9IGJyYXZhbHVlOwogICAgICAgICAgICAgICAgIHRlbXBjb2RlID0gY29kZTsKICAgICAgICAg
ICAgICAgICB0ZW1wcmVxdmFyeSA9IGNkLnJlcV92YXJ5b3B0OyAgICAgLyogU2F2ZSB2YWx1ZSBi
ZWZvcmUgYnJhY2tldCAqLwpAQCAtMTcxOSw3ICsxNTA4LDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgIHplcm9maXJzdGJ5dGUgPSBm
aXJzdGJ5dGU7CiAgICAgICAgICAgICAgICAgZ3JvdXBzZXRmaXJzdGJ5dGUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQlJBIHx8
IGJyYXZhbHVlID09IE9QX09OQ0UpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnJhdmFsdWUgPj0g
T1BfQlJBKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgbm90IHlldCBzZXQg
YSBmaXJzdGJ5dGUgaW4gdGhpcyBicmFuY2gsIHRha2UgaXQgZnJvbSB0aGUKICAgICAgICAgICAg
ICAgICAgICAgIHN1YnBhdHRlcm4sIHJlbWVtYmVyaW5nIHRoYXQgaXQgd2FzIHNldCBoZXJlIHNv
IHRoYXQgYSByZXBlYXQgb2YgbW9yZQogICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmUgY2Fu
IHJlcGxpY2F0ZSBpdCBhcyByZXFieXRlIGlmIG5lY2Vzc2FyeS4gSWYgdGhlIHN1YnBhdHRlcm4g
aGFzCkBAIC0xNzc5LDcgKzE1NjgsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQq
IGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlICdcXCc6CiAgICAg
ICAgICAgICAgICAgdGVtcHB0ciA9IHB0cjsKLSAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNj
YXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29k
ZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLyogSGFuZGxlIG1ldGFjaGFyYWN0ZXJzIGludHJvZHVjZWQgYnkgXC4gRm9yIG9uZXMgbGlr
ZSBcZCwgdGhlIEVTQ18gdmFsdWVzCiAgICAgICAgICAgICAgICAgIGFyZSBhcnJhbmdlZCB0byBi
ZSB0aGUgbmVnYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgT1BfdmFsdWVzLiBGb3IgdGhlCkBA
IC0xODA2LDcgKzE1OTUsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNr
ZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyID0gLWMgLSBFU0NfUkVGOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBjb2RlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgKmNvZGUrKyA9IE9QX1JFRjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJC
eXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UoY29kZSwgMCwgbnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKGNvZGUsIG51bWJlcik7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8qIEZvciB0aGUgcmVzdCwgd2UgY2FuIG9idGFpbiB0aGUgT1AgdmFsdWUgYnkg
bmVnYXRpbmcgdGhlIGVzY2FwZQpAQCAtMTg0Miw3ICsxNjMxLDcgQEAgY29tcGlsZUJyYW5jaChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUr
KyA9IGM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBtY2xlbmd0aCA9IF9wY3JlX29yZDJ1dGY4KGMsIG1jYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgbWNsZW5ndGggPSBlbmNvZGVVVEY4KGMsIG1jYnVmZmVy
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSAo
b3B0aW9ucyAmIElnbm9yZUNhc2VPcHRpb24pID8gT1BfQ0hBUl9JR05PUklOR19DQVNFIDogT1Bf
Q0hBUjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IG1jbGVuZ3RoOyBjKysp
CkBAIC0xODkzLDkgKzE2ODIsNiBAQCBGQUlMRUQ6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0K
LQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog
KiAgICAgQ29tcGlsZSBzZXF1ZW5jZSBvZiBhbHRlcm5hdGl2ZXMgICAgICAgICAgICoKICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTIzLDIw
ICsxNzA5LDIwIEBAIFJldHVybnM6ICAgICAgdHJ1ZSBvbiBzdWNjZXNzCiAqLwogCiBzdGF0aWMg
Ym9vbAotY29tcGlsZUJyYWNrZXQoaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMsIHVzY2hhcioq
IGNvZGVwdHIsCitjb21waWxlQnJhY2tldChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cywgdW5z
aWduZWQgY2hhcioqIGNvZGVwdHIsCiAgICAgY29uc3QgVUNoYXIqKiBwdHJwdHIsIGNvbnN0IFVD
aGFyKiBwYXR0ZXJuRW5kLCBFcnJvckNvZGUqIGVycm9yY29kZXB0ciwgaW50IHNraXBieXRlcywK
ICAgICBpbnQqIGZpcnN0Ynl0ZXB0ciwgaW50KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2Qp
CiB7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9ICpwdHJwdHI7Ci0gICAgdXNjaGFyKiBjb2RlID0g
KmNvZGVwdHI7Ci0gICAgdXNjaGFyKiBsYXN0X2JyYW5jaCA9IGNvZGU7Ci0gICAgdXNjaGFyKiBz
dGFydF9icmFja2V0ID0gY29kZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBjb2RlID0gKmNvZGVwdHI7
CisgICAgdW5zaWduZWQgY2hhciogbGFzdF9icmFuY2ggPSBjb2RlOworICAgIHVuc2lnbmVkIGNo
YXIqIHN0YXJ0X2JyYWNrZXQgPSBjb2RlOwogICAgIGludCBmaXJzdGJ5dGUgPSBSRVFfVU5TRVQ7
CiAgICAgaW50IHJlcWJ5dGUgPSBSRVFfVU5TRVQ7CiAgICAgCiAgICAgLyogT2Zmc2V0IGlzIHNl
dCB6ZXJvIHRvIG1hcmsgdGhhdCB0aGlzIGJyYWNrZXQgaXMgc3RpbGwgb3BlbiAqLwogICAgIAot
ICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSwgMCk7CisgICAgcHV0TGlua1ZhbHVl
QWxsb3daZXJvKGNvZGUgKyAxLCAwKTsKICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkUgKyBza2lw
Ynl0ZXM7CiAgICAgCiAgICAgLyogTG9vcCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSBicmFuY2ggKi8K
QEAgLTIwMDIsOCArMTc4OCw4IEBAIGNvbXBpbGVCcmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJy
YWNrZXQKICAgICAgICAgaWYgKHB0ciA+PSBwYXR0ZXJuRW5kIHx8ICpwdHIgIT0gJ3wnKSB7CiAg
ICAgICAgICAgICBpbnQgbGVuZ3RoID0gY29kZSAtIGxhc3RfYnJhbmNoOwogICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgIGludCBwcmV2X2xlbmd0aCA9IGdldE9wY29kZVZhbHVlQXRP
ZmZzZXQobGFzdF9icmFuY2gsIDEpOwotICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRP
ZmZzZXQobGFzdF9icmFuY2gsIDEsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50IHByZXZf
bGVuZ3RoID0gZ2V0TGlua1ZhbHVlQWxsb3daZXJvKGxhc3RfYnJhbmNoICsgMSk7CisgICAgICAg
ICAgICAgICAgcHV0TGlua1ZhbHVlKGxhc3RfYnJhbmNoICsgMSwgbGVuZ3RoKTsKICAgICAgICAg
ICAgICAgICBsZW5ndGggPSBwcmV2X2xlbmd0aDsKICAgICAgICAgICAgICAgICBsYXN0X2JyYW5j
aCAtPSBsZW5ndGg7CiAgICAgICAgICAgICB9IHdoaWxlIChsZW5ndGggPiAwKTsKQEAgLTIwMTEs
NyArMTc5Nyw3IEBAIGNvbXBpbGVCcmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAg
ICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGtldCAqLwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAqY29kZSA9IE9QX0tFVDsKLSAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29k
ZSwgMSwgY29kZSAtIHN0YXJ0X2JyYWNrZXQpOworICAgICAgICAgICAgcHV0TGlua1ZhbHVlKGNv
ZGUgKyAxLCBjb2RlIC0gc3RhcnRfYnJhY2tldCk7CiAgICAgICAgICAgICBjb2RlICs9IDEgKyBM
SU5LX1NJWkU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8qIFNldCB2YWx1ZXMgdG8gcGFz
cyBiYWNrICovCkBAIC0yMDI5LDcgKzE4MTUsNyBAQCBjb21waWxlQnJhY2tldChpbnQgb3B0aW9u
cywgaW50KiBicmFja2V0CiAgICAgICAgICB6ZXJvIG9mZnNldCB1bnRpbCBpdCBpcyBjbG9zZWQs
IG1ha2luZyBpdCBwb3NzaWJsZSB0byBkZXRlY3QgcmVjdXJzaW9uLiAqLwogICAgICAgICAKICAg
ICAgICAgKmNvZGUgPSBPUF9BTFQ7Ci0gICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29k
ZSwgMSwgY29kZSAtIGxhc3RfYnJhbmNoKTsKKyAgICAgICAgcHV0TGlua1ZhbHVlKGNvZGUgKyAx
LCBjb2RlIC0gbGFzdF9icmFuY2gpOwogICAgICAgICBsYXN0X2JyYW5jaCA9IGNvZGU7CiAgICAg
ICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKICAgICAgICAgcHRyKys7CkBAIC0yMDM3LDcgKzE4
MjMsNiBAQCBjb21waWxlQnJhY2tldChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgQ2hlY2sgZm9yIGFuY2hvcmVkIGV4cHJl
c3Npb24gICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwpAQCAtMjA1NSwyNSArMTg0MCwyNSBAQCBBcmd1bWVudHM6CiAgIGJhY2tyZWZN
YXAgICAgdGhlIGJhY2sgcmVmZXJlbmNlIGJpdG1hcAogKi8KIAotc3RhdGljIGJvb2wgYnJhbmNo
SXNBbmNob3JlZChjb25zdCB1c2NoYXIqIGNvZGUpCitzdGF0aWMgYm9vbCBicmFuY2hJc0FuY2hv
cmVkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUpCiB7Ci0gICAgY29uc3QgdXNjaGFyKiBzY29k
ZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29kZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3Bjb2RlKGNvZGUpOwogICAgIGludCBvcCA9ICpz
Y29kZTsKIAogICAgIC8qIEJyYWNrZXRzICovCi0gICAgaWYgKG9wID49IE9QX0JSQSB8fCBvcCA9
PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05DRSkKKyAgICBpZiAob3AgPj0gT1BfQlJBIHx8IG9w
ID09IE9QX0FTU0VSVCkKICAgICAgICAgcmV0dXJuIGJyYWNrZXRJc0FuY2hvcmVkKHNjb2RlKTsK
IAogICAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBhbmNob3JpbmcgKi8gICAgCiAgICAgcmV0dXJu
IG9wID09IE9QX0NJUkM7CiB9CiAKLXN0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0
IHVzY2hhciogY29kZSkKK3N0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGNvZGUpCiB7CiAgICAgZG8gewogICAgICAgICBpZiAoIWJyYW5jaElzQW5jaG9y
ZWQoY29kZSArIDEgKyBMSU5LX1NJWkUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSk7CisgICAgICAgIGNv
ZGUgKz0gZ2V0TGlua1ZhbHVlKGNvZGUgKyAxKTsKICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9B
TFQpOyAgIC8qIExvb3AgZm9yIGVhY2ggYWx0ZXJuYXRpdmUgKi8KICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTIxMDAsMjIgKzE4ODUsMjIgQEAgQXJndW1lbnRzOgogICBiYWNrcmVmTWFwICAgIHRo
ZSBiYWNrIHJlZmVyZW5jZSBiaXRtYXAKICovCiAKLXN0YXRpYyBib29sIGJyYW5jaE5lZWRzTGlu
ZVN0YXJ0KGNvbnN0IHVzY2hhciogY29kZSwgdW5zaWduZWQgY2FwdHVyZU1hcCwgdW5zaWduZWQg
YmFja3JlZk1hcCkKK3N0YXRpYyBib29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGNvZGUsIHVuc2lnbmVkIGNhcHR1cmVNYXAsIHVuc2lnbmVkIGJhY2tyZWZNYXAp
CiB7Ci0gICAgY29uc3QgdXNjaGFyKiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29k
ZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3Bj
b2RlKGNvZGUpOwogICAgIGludCBvcCA9ICpzY29kZTsKICAgICAKICAgICAvKiBDYXB0dXJpbmcg
YnJhY2tldHMgKi8KICAgICBpZiAob3AgPiBPUF9CUkEpIHsKICAgICAgICAgaW50IGNhcHR1cmVO
dW0gPSBvcCAtIE9QX0JSQTsKICAgICAgICAgaWYgKGNhcHR1cmVOdW0gPiBFWFRSQUNUX0JBU0lD
X01BWCkKLSAgICAgICAgICAgIGNhcHR1cmVOdW0gPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXQoc2NvZGUsIDIgKyBMSU5LX1NJWkUpOworICAgICAgICAgICAgY2FwdHVyZU51bSA9IGdldDJC
eXRlVmFsdWUoc2NvZGUgKyAyICsgTElOS19TSVpFKTsKICAgICAgICAgaW50IGJyYWNrZXRNYXNr
ID0gKGNhcHR1cmVOdW0gPCAzMikgPyAoMSA8PCBjYXB0dXJlTnVtKSA6IDE7CiAgICAgICAgIHJl
dHVybiBicmFja2V0TmVlZHNMaW5lU3RhcnQoc2NvZGUsIGNhcHR1cmVNYXAgfCBicmFja2V0TWFz
aywgYmFja3JlZk1hcCk7CiAgICAgfQogICAgIAogICAgIC8qIE90aGVyIGJyYWNrZXRzICovCi0g
ICAgaWYgKG9wID09IE9QX0JSQSB8fCBvcCA9PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05DRSkK
KyAgICBpZiAob3AgPT0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCkKICAgICAgICAgcmV0dXJu
IGJyYWNrZXROZWVkc0xpbmVTdGFydChzY29kZSwgY2FwdHVyZU1hcCwgYmFja3JlZk1hcCk7CiAg
ICAgCiAgICAgLyogLiogbWVhbnMgInN0YXJ0IGF0IHN0YXJ0IG9yIGFmdGVyIFxuIiBpZiBpdCBp
c24ndCBpbiBicmFja2V0cyB0aGF0CkBAIC0yMTI4LDEyICsxOTEzLDEyIEBAIHN0YXRpYyBib29s
IGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHUKICAgICByZXR1cm4gb3AgPT0gT1BfQ0lSQzsK
IH0KIAotc3RhdGljIGJvb2wgYnJhY2tldE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVzY2hhciogY29k
ZSwgdW5zaWduZWQgY2FwdHVyZU1hcCwgdW5zaWduZWQgYmFja3JlZk1hcCkKK3N0YXRpYyBib29s
IGJyYWNrZXROZWVkc0xpbmVTdGFydChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25l
ZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKQogewogICAgIGRvIHsKICAgICAgICAg
aWYgKCFicmFuY2hOZWVkc0xpbmVTdGFydChjb2RlICsgMSArIExJTktfU0laRSwgY2FwdHVyZU1h
cCwgYmFja3JlZk1hcCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvZGUg
Kz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAxKTsKKyAgICAgICAgY29kZSArPSBnZXRM
aW5rVmFsdWUoY29kZSArIDEpOwogICAgIH0gd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7ICAvKiBM
b29wIGZvciBlYWNoIGFsdGVybmF0aXZlICovCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMTU4
LDkgKzE5NDMsOSBAQCBBcmd1bWVudHM6CiBSZXR1cm5zOiAgICAgLTEgb3IgdGhlIGZpeGVkIGZp
cnN0IGNoYXIKICovCiAKLXN0YXRpYyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0
ZXIoY29uc3QgdXNjaGFyKiBjb2RlLCBib29sIGluYXNzZXJ0KQorc3RhdGljIGludCBicmFuY2hG
aW5kRmlyc3RBc3NlcnRlZENoYXJhY3Rlcihjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCBib29s
IGluYXNzZXJ0KQogewotICAgIGNvbnN0IHVzY2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50
T3BDb2RlU2tpcHBpbmdBc3NlcnRpb25zKGNvZGUpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHNjb2RlID0gZmlyc3RTaWduaWZpY2FudE9wY29kZVNraXBwaW5nQXNzZXJ0aW9ucyhjb2RlKTsK
ICAgICBpbnQgb3AgPSAqc2NvZGU7CiAgICAgCiAgICAgaWYgKG9wID49IE9QX0JSQSkKQEAgLTIx
NzIsNyArMTk1Nyw2IEBAIHN0YXRpYyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWMK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE9QX0JSQToKICAgICAgICAgY2FzZSBPUF9BU1NF
UlQ6Ci0gICAgICAgIGNhc2UgT1BfT05DRToKICAgICAgICAgICAgIHJldHVybiBicmFja2V0Rmlu
ZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIoc2NvZGUsIG9wID09IE9QX0FTU0VSVCk7CiAKICAgICAg
ICAgY2FzZSBPUF9FWEFDVDoKQEAgLTIxOTEsNyArMTk3NSw3IEBAIHN0YXRpYyBpbnQgYnJhbmNo
RmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWMKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgYnJhY2tldEZp
bmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVzY2hhciogY29kZSwgYm9vbCBpbmFzc2Vy
dCkKK3N0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5hc3NlcnQpCiB7CiAgICAgaW50IGMgPSAtMTsKICAg
ICBkbyB7CkBAIC0yMjAyLDcgKzE5ODYsNyBAQCBzdGF0aWMgaW50IGJyYWNrZXRGaW5kRmlyc3RB
c3NlcnRlZENoYXJhCiAgICAgICAgICAgICBjID0gZDsKICAgICAgICAgZWxzZSBpZiAoYyAhPSBk
KQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVl
QXRPZmZzZXQoY29kZSwgMSk7CisgICAgICAgIGNvZGUgKz0gZ2V0TGlua1ZhbHVlKGNvZGUgKyAx
KTsKICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOwogICAgIHJldHVybiBjOwogfQpAQCAt
MjIyMiw3ICsyMDA2LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5n
dAogICAgIGludCBsYXN0aXRlbWxlbmd0aCA9IDA7CiAgICAgdW5zaWduZWQgYnJhc3RhY2twdHIg
PSAwOwogICAgIGludCBicmFzdGFja1tCUkFTVEFDS19TSVpFXTsKLSAgICB1c2NoYXIgYnJhbGVu
c3RhY2tbQlJBU1RBQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBicmFsZW5zdGFja1tCUkFT
VEFDS19TSVpFXTsKICAgICBpbnQgYnJhY291bnQgPSAwOwogICAgIAogICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSAoY29uc3QgVUNoYXIqKShwYXR0ZXJuIC0gMSk7CkBAIC0yMjM3LDcgKzIwMjEsNyBA
QCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAg
Y2hhcmFjdGVyIHR5cGUuICovCiAKICAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAg
ICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNv
dW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRl
cm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYg
KGVycm9yY29kZSAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg
ICAgICAgICAgCkBAIC0yMjQ4LDggKzIwMzIsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBp
bGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAoYyA+IDEyNykgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsg
aSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFi
bGUxW2ldKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBr
anNfcGNyZV91dGY4X3RhYmxlMV9zaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGMgPD0ga2pzX3BjcmVfdXRmOF90YWJsZTFbaV0pIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoICs9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aXRl
bWxlbmd0aCArPSBpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjcxLDggKzIwNTUsOCBA
QCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZWZudW0gPiBjZC50b3BfYmFja3JlZikKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNkLnRvcF9iYWNrcmVmID0gcmVmbnVtOwogICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
Kz0gMjsgICAvKiBGb3Igc2luZ2xlIGJhY2sgcmVmZXJlbmNlICovCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChzYWZlbHlDaGVja05leHRDaGFyKHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc19j
b3VudGVkX3JlcGVhdChwdHIgKyAyLCBwYXR0ZXJuRW5kKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0ciArIDIsICZtaW5SZXBlYXRzLCAmbWF4
UmVwZWF0cywgJmVycm9yY29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVj
a05leHRDaGFyKHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc0NvdW50ZWRSZXBlYXQocHRyICsg
MiwgcGF0dGVybkVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBl
YXRDb3VudHMocHRyICsgMiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5S
ZXBlYXRzID09IDAgJiYgKG1heFJlcGVhdHMgPT0gMSB8fCBtYXhSZXBlYXRzID09IC0xKSkgfHwK
QEAgLTIzMDMsOSArMjA4Nyw5IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJu
TGVuZ3QKICAgICAgICAgICAgICBjbGFzcywgb3IgYmFjayByZWZlcmVuY2UuICovCiAKICAgICAg
ICAgICAgIGNhc2UgJ3snOgotICAgICAgICAgICAgICAgIGlmICghaXNfY291bnRlZF9yZXBlYXQo
cHRyKzEsIHBhdHRlcm5FbmQpKQorICAgICAgICAgICAgICAgIGlmICghaXNDb3VudGVkUmVwZWF0
KHB0ciArIDEsIHBhdHRlcm5FbmQpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIE5PUk1BTF9D
SEFSOwotICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJm1p
blJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKKyAgICAgICAgICAgICAgICBwdHIg
PSByZWFkUmVwZWF0Q291bnRzKHB0ciArIDEsICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVy
cm9yY29kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgCkBAIC0yMzcwLDcgKzIxNTQs
NyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAg
ICAgICAgICAgIC8qIENoZWNrIGZvciBlc2NhcGVzICovCiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJy
YWNvdW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgm
cHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNDEwLDcgKzIx
OTQsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVUNoYXIgY29uc3QgKmh5cHRyID0gcHRyKys7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJu
RW5kLCAnXFwnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0
ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2Rl
LCBicmFjb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
cnJvcmNvZGUgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1kID09IEVTQ19iKQpA
QCAtMjQzMyw3ICsyMjE3LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5M
ZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGQgPiAyNTUgfHwgKGln
bm9yZUNhc2UgJiYgZCA+IDEyNykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzY2hhciBidWZmZXJbNl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYnVmZmVyWzZdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWNsYXNzX3V0ZjgpICAgICAgICAgLyogQWxsb3cgZm9yIFhDTEFTUyBvdmVyaGVhZCAqLwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc191dGY4ID0gdHJ1ZTsKQEAgLTI0NTAsNyArMjIzNCw3IEBAIHN0YXRp
YyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvY2MsIG9jZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjYyA9IGM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb3JpZ2QgPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKGdldF9vdGhlcmNhc2VfcmFuZ2UoJmNjLCBvcmlnZCwgJm9jYywgJm9jZCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChnZXRPdGhlcmNhc2VSYW5nZSgm
Y2MsIG9yaWdkLCAmb2NjLCAmb2NkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvY2MgPj0gYyAmJiBvY2QgPD0gZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogU2tpcCBlbWJlZGRlZCAqLwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjQ2NywxNCArMjI1
MSwxNCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogQW4gZXh0cmEgaXRlbSBpcyBuZWVkZWQgKi8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMSArIF9wY3JlX29yZDJ1dGY4KG9jYywgYnVmZmVy
KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvY2MgPT0gb2Nk
KSA/IDAgOiBfcGNyZV9vcmQydXRmOChvY2QsIGJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxICsgZW5jb2RlVVRGOChvY2MsIGJ1ZmZl
cikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgob2NjID09IG9j
ZCkgPyAwIDogZW5jb2RlVVRGOChvY2QsIGJ1ZmZlcikpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSAocG9zc2libHkgZXh0ZW5kZWQpIHJhbmdlICovCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggKz0gMSArIF9wY3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikgKyBfcGNyZV9v
cmQydXRmOChkLCBidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5n
dGggKz0gMSArIGVuY29kZVVURjgoYywgYnVmZmVyKSArIGVuY29kZVVURjgoZCwgYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDg2LDE0ICsyMjcwLDE0IEBAIHN0
YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChjID4gMjU1IHx8IChpZ25vcmVDYXNlICYmIGMgPiAxMjcpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIgYnVmZmVyWzZdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2XTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nfb3B0Y291bnQgPSAxMDsgICAgIC8qIEVu
c3VyZSA+IDEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGFzc191
dGY4KSAgICAgICAgIC8qIEFsbG93IGZvciBYQ0xBU1Mgb3ZlcmhlYWQgKi8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3NfdXRmOCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggKz0gTElOS19TSVpFICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gKGlnbm9yZUNh
c2UgPyAyIDogMSkgKiAoMSArIF9wY3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gKGlnbm9yZUNhc2UgPyAyIDogMSkgKiAo
MSArIGVuY29kZVVURjgoYywgYnVmZmVyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0y
NTE5LDggKzIzMDMsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0
CiAgICAgICAgICAgICAgICAgICAgIC8qIEEgcmVwZWF0IG5lZWRzIGVpdGhlciAxIG9yIDUgYnl0
ZXMuIElmIGl0IGlzIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyLAogICAgICAgICAgICAgICAgICAg
ICAgd2UgYWxzbyBuZWVkIGV4dHJhIGZvciB3cmFwcGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gYSBz
dWItcGF0dGVybi4gKi8KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmIChzYWZlbHlDaGVja05leHRDaGFyKHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc19jb3Vu
dGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRz
LCAmZXJyb3Jjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4dENo
YXIocHRyLCBwYXR0ZXJuRW5kLCAneycpICYmIGlzQ291bnRlZFJlcGVhdChwdHIgKyAyLCBwYXR0
ZXJuRW5kKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZFJlcGVhdENvdW50
cyhwdHIgKyAyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWluUmVw
ZWF0cyA9PSAwICYmIChtYXhSZXBlYXRzID09IDEgfHwgbWF4UmVwZWF0cyA9PSAtMSkpIHx8CkBA
IC0yNTQ5LDEwICsyMzMzLDEwIEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJu
TGVuZ3QKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc2FmZWx5Q2hlY2tO
ZXh0Q2hhcihwdHIsIHBhdHRlcm5FbmQsICc/JykpIHsKICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjID0gKHB0ciArIDIgPCBwYXR0ZXJuRW5kID8gcHRyWzJdIDogMCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBOb24tcmVmZXJlbmNpbmcgZ3JvdXBzIGFuZCBsb29rYWhl
YWRzIGp1c3QgbW92ZSB0aGUgcG9pbnRlciBvbiwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZW4gYmVoYXZlIGxpa2UgYSBub24tc3BlY2lhbCBicmFja2V0LCBleGNlcHQgdGhh
dCB0aGV5IGRvbid0IGluY3JlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg
Y291bnQgb2YgZXh0cmFjdGluZyBicmFja2V0cy4gRGl0dG8gZm9yIHRoZSAib25jZSBvbmx5IiBi
cmFja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBpbiBQZXJsIGZy
b20gdmVyc2lvbiA1LjAwNS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbi1yZWZl
cmVuY2luZyBncm91cHMgYW5kIGxvb2thaGVhZHMganVzdCBtb3ZlIHRoZSBwb2ludGVyIG9uLCBh
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGJlaGF2ZSBsaWtlIGEgbm9uLXNwZWNp
YWwgYnJhY2tldCwgZXhjZXB0IHRoYXQgdGhleSBkb24ndCBpbmNyZW1lbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgY291bnQgb2YgZXh0cmFjdGluZyBicmFja2V0cy4gRGl0dG8gZm9y
IHRoZSAib25jZSBvbmx5IiBicmFja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNo
IGlzIGluIFBlcmwgZnJvbSB2ZXJzaW9uIDUuMDA1LiAqLwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOic6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICc9JzoKQEAgLTI1NjAsMTAgKzIzNDQsMTAgQEAgc3RhdGljIGludCBj
YWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB0ciArPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2Ug
bG9vcCBjaGVja2luZyB2YWxpZCBvcHRpb25zIHVudGlsICkgaXMgbWV0LiBBbnl0aGluZyBlbHNl
IGlzIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLiBJZiB3ZSBhcmUgd2l0
aG91dCBhbnkgYnJhY2tldHMsIGkuZS4gYXQgdG9wIGxldmVsLCB0aGUgc2V0dGluZ3MKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0IGFzIGlmIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9u
cywgc28gbWFzc2FnZSB0aGUgb3B0aW9ucyBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGhpcyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwg
NS4wMDQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbHNlIGxvb3AgY2hlY2tpbmcg
dmFsaWQgb3B0aW9ucyB1bnRpbCApIGlzIG1ldC4gQW55dGhpbmcgZWxzZSBpcyBhbgorICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yLiBJZiB3ZSBhcmUgd2l0aG91dCBhbnkgYnJhY2tldHMs
IGkuZS4gYXQgdG9wIGxldmVsLCB0aGUgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBhY3QgYXMgaWYgc3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBzbyBtYXNzYWdlIHRoZSBvcHRp
b25zIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZm9yIGJh
Y2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDUuMDA0LiAqLwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSBFUlIxMjsKQEAgLTI2MTYsMTEgKzI0MDAs
MTEgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZHVwbGVuZ3RoID0gMDsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBMZWF2ZSBwdHIgYXQgdGhlIGZpbmFsIGNoYXI7
IGZvciByZWFkX3JlcGVhdF9jb3VudHMgdGhpcyBoYXBwZW5zCisgICAgICAgICAgICAgICAgLyog
TGVhdmUgcHRyIGF0IHRoZSBmaW5hbCBjaGFyOyBmb3IgcmVhZFJlcGVhdENvdW50cyB0aGlzIGhh
cHBlbnMKICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseTsgZm9yIHRoZSBvdGhlcnMgd2Ug
bmVlZCBhbiBpbmNyZW1lbnQuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKChwdHIgKyAxIDwgcGF0dGVybkVuZCkgJiYgKGMgPSBwdHJbMV0pID09ICd7JyAmJiBpc19j
b3VudGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
cHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMs
ICZlcnJvcmNvZGUpOworICAgICAgICAgICAgICAgIGlmICgocHRyICsgMSA8IHBhdHRlcm5FbmQp
ICYmIChjID0gcHRyWzFdKSA9PSAneycgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDIsIHBhdHRl
cm5FbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRy
ICsgMiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVycm9yY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt
MTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJyonKSB7CkBAIC0yNjgzLDggKzI0
NjcsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAKICAgICAg
ICAgICAgICAgICBpZiAoYyA+IDEyNykgewogICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUx
W2ldKQorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2pzX3BjcmVfdXRmOF90
YWJsZTFfc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0ga2pzX3Bj
cmVfdXRmOF90YWJsZTFbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBpOwogICAgICAgICAgICAgICAgICAgICBsYXN0
aXRlbWxlbmd0aCArPSBpOwpAQCAtMjcyMCw5ICsyNTA0LDkgQEAgUmV0dXJuczogICAgICAgIHBv
aW50ZXIgdG8gY29tcGlsZWQgZGF0YQogICAgICAgICAgICAgICAgIHdpdGggZXJyb3JwdHIgYW5k
IGVycm9yb2Zmc2V0IHNldAogKi8KIAotc3RhdGljIEpTUmVnRXhwKiByZXR1cm5FcnJvcihFcnJv
ckNvZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCitzdGF0aWMgaW5saW5lIEpT
UmVnRXhwKiByZXR1cm5FcnJvcihFcnJvckNvZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJy
b3JwdHIpCiB7Ci0gICAgKmVycm9ycHRyID0gZXJyb3JfdGV4dChlcnJvcmNvZGUpOworICAgICpl
cnJvcnB0ciA9IGVycm9yVGV4dChlcnJvcmNvZGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0y
NzU3LDcgKzI1NDEsNyBAQCBKU1JlZ0V4cCoganNSZWdFeHBDb21waWxlKGNvbnN0IFVDaGFyKiBw
CiAgICAgLyogVGhlIHN0YXJ0aW5nIHBvaW50cyBvZiB0aGUgbmFtZS9udW1iZXIgdHJhbnNsYXRp
b24gdGFibGUgYW5kIG9mIHRoZSBjb2RlIGFyZQogICAgICBwYXNzZWQgYXJvdW5kIGluIHRoZSBj
b21waWxlIGRhdGEgYmxvY2suICovCiAgICAgCi0gICAgY29uc3QgdXNjaGFyKiBjb2RlU3RhcnQg
PSAoY29uc3QgdXNjaGFyKikocmUgKyAxKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2Rl
U3RhcnQgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKHJlICsgMSk7CiAgICAgY2Quc3RhcnRfY29k
ZSA9IGNvZGVTdGFydDsKICAgICBjZC5zdGFydF9wYXR0ZXJuID0gKGNvbnN0IFVDaGFyKilwYXR0
ZXJuOwogICAgIApAQCAtMjc2Nyw3ICsyNTUxLDcgQEAgSlNSZWdFeHAqIGpzUmVnRXhwQ29tcGls
ZShjb25zdCBVQ2hhciogcAogICAgIAogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSAoY29uc3QgVUNo
YXIqKXBhdHRlcm47CiAgICAgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQgPSBwYXR0ZXJuICsgcGF0
dGVybkxlbmd0aDsKLSAgICB1c2NoYXIqIGNvZGUgPSAodXNjaGFyKiljb2RlU3RhcnQ7CisgICAg
dW5zaWduZWQgY2hhciogY29kZSA9ICh1bnNpZ25lZCBjaGFyKiljb2RlU3RhcnQ7CiAgICAgaW50
IGZpcnN0Ynl0ZSwgcmVxYnl0ZTsKICAgICBpbnQgYnJhY2tldENvdW50ID0gMDsKICAgICBpZiAo
IWNkLm5lZWRPdXRlckJyYWNrZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhl
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMuY3BwCShy
ZXZpc2lvbiAyODc2NikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAgICAgLyog
RnVuY3Rpb24gYXJndW1lbnRzIHRoYXQgbWF5IGNoYW5nZSAqLwogICAgIHN0cnVjdCB7CiAgICAg
ICAgIGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyOwotICAgICAgICBjb25zdCB1c2NoYXIqIGluc3Ry
dWN0aW9uUHRyOwotICAgICAgICBpbnQgb2Zmc2V0X3RvcDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRUb3A7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBzdWJwYXR0ZXJuU3RhcnQ7CiAgICAgfSBhcmdzOwogICAgIApAQCAtODMs
MTIgKzgzLDEyIEBAIHN0cnVjdCBNYXRjaEZyYW1lIHsKICAgICAgc3RhY2stYmFzZWQgbG9jYWwg
dmFyaWFibGVzIGFyZSBub3Qgc2FmZSB0byB1c2UuICBJbnN0ZWFkIHdlIGhhdmUgdG8KICAgICAg
c3RvcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBjdXJyZW50IE1hdGNoRnJhbWUuICovCiAgICAg
c3RydWN0IHsKLSAgICAgICAgY29uc3QgdXNjaGFyKiBkYXRhOwotICAgICAgICBjb25zdCB1c2No
YXIqIHN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBkYXRhOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzdGFydE9mUmVwZWF0aW5nQnJh
Y2tldDsKICAgICAgICAgY29uc3QgVUNoYXIqIHN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlv
bjsgLy8gU2V2ZXJhbCBpbnN0cnV0aW9ucyBzdGFzaCBhd2F5IGEgc3ViamVjdFB0ciBoZXJlIGZv
ciBsYXRlciBjb21wYXJlCi0gICAgICAgIGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25QdHJBdFN0
YXJ0T2ZPbmNlOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0cnVjdGlvblB0ckF0
U3RhcnRPZk9uY2U7CiAgICAgICAgIAotICAgICAgICBpbnQgcmVwZWF0X290aGVyY2FzZTsKKyAg
ICAgICAgaW50IHJlcGVhdE90aGVyY2FzZTsKICAgICAgICAgCiAgICAgICAgIGludCBjdHlwZTsK
ICAgICAgICAgaW50IGZjOwpAQCAtOTcsOSArOTcsOSBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAg
ICAgICAgIGludCBtYXg7CiAgICAgICAgIGludCBudW1iZXI7CiAgICAgICAgIGludCBvZmZzZXQ7
Ci0gICAgICAgIGludCBzYXZlX29mZnNldDE7Ci0gICAgICAgIGludCBzYXZlX29mZnNldDI7Ci0g
ICAgICAgIGludCBzYXZlX29mZnNldDM7CisgICAgICAgIGludCBzYXZlT2Zmc2V0MTsKKyAgICAg
ICAgaW50IHNhdmVPZmZzZXQyOworICAgICAgICBpbnQgc2F2ZU9mZnNldDM7CiAgICAgICAgIAog
ICAgICAgICBjb25zdCBVQ2hhciogc3VicGF0dGVyblN0YXJ0OwogICAgIH0gbG9jYWxzOwpAQCAt
MTA5LDI0ICsxMDksMzggQEAgc3RydWN0IE1hdGNoRnJhbWUgewogZG9pbmcgdHJhZGl0aW9uYWwg
TkZBIG1hdGNoaW5nLCBzbyB0aGF0IHRoZXkgYXJlIHRocmVhZC1zYWZlLiAqLwogCiBzdHJ1Y3Qg
TWF0Y2hEYXRhIHsKLSAgaW50KiAgIG9mZnNldF92ZWN0b3I7ICAgICAgICAgLyogT2Zmc2V0IHZl
Y3RvciAqLwotICBpbnQgICAgb2Zmc2V0X2VuZDsgICAgICAgICAgICAvKiBPbmUgcGFzdCB0aGUg
ZW5kICovCi0gIGludCAgICBvZmZzZXRfbWF4OyAgICAgICAgICAgIC8qIFRoZSBtYXhpbXVtIHVz
YWJsZSBmb3IgcmV0dXJuIGRhdGEgKi8KLSAgYm9vbCAgIG9mZnNldF9vdmVyZmxvdzsgICAgICAg
LyogU2V0IGlmIHRvbyBtYW55IGV4dHJhY3Rpb25zICovCi0gIGNvbnN0IFVDaGFyKiAgc3RhcnRf
c3ViamVjdDsgICAgICAgICAvKiBTdGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KLSAgY29u
c3QgVUNoYXIqICBlbmRfc3ViamVjdDsgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgc3ViamVjdCBz
dHJpbmcgKi8KLSAgY29uc3QgVUNoYXIqICBlbmRfbWF0Y2hfcHRyOyAgICAgICAgIC8qIFN1Ympl
Y3QgcG9zaXRpb24gYXQgZW5kIG1hdGNoICovCi0gIGludCAgICBlbmRfb2Zmc2V0X3RvcDsgICAg
ICAgIC8qIEhpZ2h3YXRlciBtYXJrIGF0IGVuZCBvZiBtYXRjaCAqLworICBpbnQqICAgb2Zmc2V0
VmVjdG9yOyAgICAgICAgIC8qIE9mZnNldCB2ZWN0b3IgKi8KKyAgaW50ICAgIG9mZnNldEVuZDsg
ICAgICAgICAgICAvKiBPbmUgcGFzdCB0aGUgZW5kICovCisgIGludCAgICBvZmZzZXRNYXg7ICAg
ICAgICAgICAgLyogVGhlIG1heGltdW0gdXNhYmxlIGZvciByZXR1cm4gZGF0YSAqLworICBib29s
ICAgb2Zmc2V0T3ZlcmZsb3c7ICAgICAgIC8qIFNldCBpZiB0b28gbWFueSBleHRyYWN0aW9ucyAq
LworICBjb25zdCBVQ2hhciogIHN0YXJ0U3ViamVjdDsgICAgICAgICAvKiBTdGFydCBvZiB0aGUg
c3ViamVjdCBzdHJpbmcgKi8KKyAgY29uc3QgVUNoYXIqICBlbmRTdWJqZWN0OyAgICAgICAgICAg
LyogRW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBjb25zdCBVQ2hhciogIGVuZE1hdGNo
UHRyOyAgICAgICAgIC8qIFN1YmplY3QgcG9zaXRpb24gYXQgZW5kIG1hdGNoICovCisgIGludCAg
ICBlbmRPZmZzZXRUb3A7ICAgICAgICAvKiBIaWdod2F0ZXIgbWFyayBhdCBlbmQgb2YgbWF0Y2gg
Ki8KICAgYm9vbCAgIG11bHRpbGluZTsKICAgYm9vbCAgIGlnbm9yZUNhc2U7CiB9OwogCiAvKiBO
b24tZXJyb3IgcmV0dXJucyBmcm9tIHRoZSBtYXRjaCgpIGZ1bmN0aW9uLiBFcnJvciByZXR1cm5z
IGFyZSBleHRlcm5hbGx5Ci1kZWZpbmVkIFBDUkVfRVJST1JfeHh4IGNvZGVzLCB3aGljaCBhcmUg
YWxsIG5lZ2F0aXZlLiAqLworZGVmaW5lZCBlcnJvciBjb2Rlcywgd2hpY2ggYXJlIGFsbCBuZWdh
dGl2ZS4gKi8KIAogI2RlZmluZSBNQVRDSF9NQVRDSCAgICAgICAgMQogI2RlZmluZSBNQVRDSF9O
T01BVENIICAgICAgMAogCisvKiBUaGUgbWF4aW11bSByZW1haW5pbmcgbGVuZ3RoIG9mIHN1Ympl
Y3Qgd2UgYXJlIHByZXBhcmVkIHRvIHNlYXJjaCBmb3IgYQorcmVxX2J5dGUgbWF0Y2guICovCisK
KyNkZWZpbmUgUkVRX0JZVEVfTUFYIDEwMDAKKworLyogVGhlIGJlbG93IGxpbWl0IHJlc3RyaWN0
cyB0aGUgbnVtYmVyIG9mIHJlY3Vyc2l2ZSBtYXRjaCBjYWxscyBpbiBvcmRlciB0bworbGltaXQg
dGhlIG1heGltdW0gYW1vdW50IG9mIHN0b3JhZ2UuCisgCitUaGlzIGxpbWl0IGlzIHRpZWQgdG8g
dGhlIHNpemUgb2YgTWF0Y2hGcmFtZS4gIFJpZ2h0IG5vdyB3ZSBhbGxvdyBQQ1JFIHRvIGFsbG9j
YXRlIHVwCit0byBNQVRDSF9SRUNVUlNJT05fTElNSVQgLSAxNiAqIHNpemVvZihNYXRjaEZyYW1l
KSBieXRlcyBvZiAic3RhY2siIHNwYWNlIGJlZm9yZSB3ZSBnaXZlIHVwLgorQ3VycmVudGx5IHRo
YXQncyAxMDAwMDAgLSAxNiAqICgyMyAqIDQpICB+IDkwTUIuICovCisKKyNkZWZpbmUgTUFUQ0hf
UkVDVVJTSU9OX0xJTUlUIDEwMDAwMAorCiAjaWZkZWYgREVCVUcKIC8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICBEZWJ1Z2dpbmcgZnVu
Y3Rpb24gdG8gcHJpbnQgY2hhcnMgICAgICAgKgpAQCAtMTM4LDE0ICsxNTIsMTQgQEAgc3ViamVj
dCBpZiB0aGUgcmVxdWVzdGVkLgogQXJndW1lbnRzOgogICBwICAgICAgICAgICBwb2ludHMgdG8g
Y2hhcmFjdGVycwogICBsZW5ndGggICAgICBudW1iZXIgdG8gcHJpbnQKLSAgaXNfc3ViamVjdCAg
dHJ1ZSBpZiBwcmludGluZyBmcm9tIHdpdGhpbiBtZC5zdGFydF9zdWJqZWN0Ci0gIG1kICAgICAg
ICAgIHBvaW50ZXIgdG8gbWF0Y2hpbmcgZGF0YSBibG9jaywgaWYgaXNfc3ViamVjdCBpcyB0cnVl
CisgIGlzU3ViamVjdCAgdHJ1ZSBpZiBwcmludGluZyBmcm9tIHdpdGhpbiBtZC5zdGFydFN1Ympl
Y3QKKyAgbWQgICAgICAgICAgcG9pbnRlciB0byBtYXRjaGluZyBkYXRhIGJsb2NrLCBpZiBpc1N1
YmplY3QgaXMgdHJ1ZQogKi8KIAotc3RhdGljIHZvaWQgcGNoYXJzKGNvbnN0IFVDaGFyKiBwLCBp
bnQgbGVuZ3RoLCBib29sIGlzX3N1YmplY3QsIGNvbnN0IE1hdGNoRGF0YSYgbWQpCitzdGF0aWMg
dm9pZCBwY2hhcnMoY29uc3QgVUNoYXIqIHAsIGludCBsZW5ndGgsIGJvb2wgaXNTdWJqZWN0LCBj
b25zdCBNYXRjaERhdGEmIG1kKQogewotICAgIGlmIChpc19zdWJqZWN0ICYmIGxlbmd0aCA+IG1k
LmVuZF9zdWJqZWN0IC0gcCkKLSAgICAgICAgbGVuZ3RoID0gbWQuZW5kX3N1YmplY3QgLSBwOwor
ICAgIGlmIChpc1N1YmplY3QgJiYgbGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHApCisgICAgICAg
IGxlbmd0aCA9IG1kLmVuZFN1YmplY3QgLSBwOwogICAgIHdoaWxlIChsZW5ndGgtLSA+IDApIHsK
ICAgICAgICAgaW50IGM7CiAgICAgICAgIGlmIChpc3ByaW50KGMgPSAqKHArKykpKQpAQCAtMTU4
LDggKzE3Miw2IEBAIHN0YXRpYyB2b2lkIHBjaGFycyhjb25zdCBVQ2hhciogcCwgaW50IGwKIH0K
ICNlbmRpZgogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICogICAgICAgICAgTWF0Y2ggYSBiYWNrLXJlZmVyZW5jZSAgICAgICAgICAgICAg
ICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpA
QCAtMTc2LDEyICsxODgsMTIgQEAgQXJndW1lbnRzOgogUmV0dXJuczogICAgICB0cnVlIGlmIG1h
dGNoZWQKICovCiAKLXN0YXRpYyBib29sIG1hdGNoX3JlZihpbnQgb2Zmc2V0LCBjb25zdCBVQ2hh
ciogc3ViamVjdFB0ciwgaW50IGxlbmd0aCwgY29uc3QgTWF0Y2hEYXRhJiBtZCkKK3N0YXRpYyBi
b29sIG1hdGNoUmVmKGludCBvZmZzZXQsIGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBpbnQgbGVu
Z3RoLCBjb25zdCBNYXRjaERhdGEmIG1kKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gbWQuc3Rh
cnRfc3ViamVjdCArIG1kLm9mZnNldF92ZWN0b3Jbb2Zmc2V0XTsKKyAgICBjb25zdCBVQ2hhciog
cCA9IG1kLnN0YXJ0U3ViamVjdCArIG1kLm9mZnNldFZlY3RvcltvZmZzZXRdOwogICAgIAogI2lm
ZGVmIERFQlVHCi0gICAgaWYgKHN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgaWYg
KHN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgcHJpbnRmKCJtYXRjaGluZyBz
dWJqZWN0IDxudWxsPiIpOwogICAgIGVsc2UgewogICAgICAgICBwcmludGYoIm1hdGNoaW5nIHN1
YmplY3QgIik7CkBAIC0xOTQsNyArMjA2LDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hfcmVmKGludCBv
ZmZzZXQsIGNvbnN0IAogICAgIAogICAgIC8qIEFsd2F5cyBmYWlsIGlmIG5vdCBlbm91Z2ggY2hh
cmFjdGVycyBsZWZ0ICovCiAgICAgCi0gICAgaWYgKGxlbmd0aCA+IG1kLmVuZF9zdWJqZWN0IC0g
c3ViamVjdFB0cikKKyAgICBpZiAobGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHN1YmplY3RQdHIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvKiBTZXBhcmF0ZSB0aGUgY2FzZWxl
c3NzIGNhc2UgZm9yIHNwZWVkICovCkBAIC0yMDIsNyArMjE0LDcgQEAgc3RhdGljIGJvb2wgbWF0
Y2hfcmVmKGludCBvZmZzZXQsIGNvbnN0IAogICAgIGlmIChtZC5pZ25vcmVDYXNlKSB7CiAgICAg
ICAgIHdoaWxlIChsZW5ndGgtLSA+IDApIHsKICAgICAgICAgICAgIFVDaGFyIGMgPSAqcCsrOwot
ICAgICAgICAgICAgaW50IG90aGVyY2FzZSA9IF9wY3JlX3VjcF9vdGhlcmNhc2UoYyk7CisgICAg
ICAgICAgICBpbnQgb3RoZXJjYXNlID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZShjKTsKICAgICAg
ICAgICAgIFVDaGFyIGQgPSAqc3ViamVjdFB0cisrOwogICAgICAgICAgICAgaWYgKGMgIT0gZCAm
JiBvdGhlcmNhc2UgIT0gZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzgs
MzcgKzI1MCwyOSBAQCBhIGJpdCBtb3JlIGNvZGUgYW5kIG5vdGljZSBpZiB3ZSB1c2UgY29uCiAK
ICNlbmRpZgogCi0jZGVmaW5lIENIRUNLX1JFQ1VSU0lPTl9MSU1JVCBcCi0gICAgaWYgKHN0YWNr
LnNpemUgPj0gTUFUQ0hfTElNSVRfUkVDVVJTSU9OKSBcCi0gICAgICAgIHJldHVybiBtYXRjaEVy
cm9yKEpTUmVnRXhwRXJyb3JSZWN1cnNpb25MaW1pdCwgc3RhY2spOwotCi0jZGVmaW5lIFJFQ1VS
U0VfV0lUSF9SRVRVUk5fTlVNQkVSKG51bSkgXAotICAgIENIRUNLX1JFQ1VSU0lPTl9MSU1JVCBc
CisjZGVmaW5lIFJFQ1VSU0lWRV9NQVRDSF9DT01NT04obnVtKSBcCisgICAgaWYgKHN0YWNrLnNp
emUgPj0gTUFUQ0hfUkVDVVJTSU9OX0xJTUlUKSBcCisgICAgICAgIHJldHVybiBtYXRjaEVycm9y
KEpTUmVnRXhwRXJyb3JSZWN1cnNpb25MaW1pdCwgc3RhY2spOyBcCiAgICAgZ290byBSRUNVUlNF
O1wKLSAgICBSUkVUVVJOXyMjbnVtOgorICAgIFJSRVRVUk5fIyNudW06IFwKKyAgICBzdGFjay5w
b3BDdXJyZW50RnJhbWUoKTsKIAogI2RlZmluZSBSRUNVUlNJVkVfTUFUQ0gobnVtLCByYSwgcmIp
IFwKLXtcCi0gICAgc3RhY2sucHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVSRShu
dW0pKTsgXAotICAgIFJFQ1VSU0VfV0lUSF9SRVRVUk5fTlVNQkVSKG51bSkgXAotICAgIHN0YWNr
LnBvcEN1cnJlbnRGcmFtZSgpOyBcCi19CisgICAgZG8geyBcCisgICAgICAgIHN0YWNrLnB1c2hO
ZXdGcmFtZSgocmEpLCAocmIpLCBSTUFUQ0hfV0hFUkUobnVtKSk7IFwKKyAgICAgICAgUkVDVVJT
SVZFX01BVENIX0NPTU1PTihudW0pIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFQ1VS
U0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUChudW0sIHJhLCByYikgXAote1wKLSAgICBzdGFj
ay5wdXNoTmV3RnJhbWUoKHJhKSwgKHJiKSwgUk1BVENIX1dIRVJFKG51bSkpOyBcCi0gICAgc3Rh
cnROZXdHcm91cChzdGFjay5jdXJyZW50RnJhbWUpOyBcCi0gICAgUkVDVVJTRV9XSVRIX1JFVFVS
Tl9OVU1CRVIobnVtKSBcCi0gICAgc3RhY2sucG9wQ3VycmVudEZyYW1lKCk7IFwKLX0KKyAgICBk
byB7IFwKKyAgICAgICAgc3RhY2sucHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVS
RShudW0pKTsgXAorICAgICAgICBzdGFydE5ld0dyb3VwKHN0YWNrLmN1cnJlbnRGcmFtZSk7IFwK
KyAgICAgICAgUkVDVVJTSVZFX01BVENIX0NPTU1PTihudW0pIFwKKyAgICB9IHdoaWxlICgwKQog
CiAjZGVmaW5lIFJSRVRVUk4gZ290byBSUkVUVVJOX0xBQkVMCiAKLSNkZWZpbmUgUlJFVFVSTl9O
T19NQVRDSCBcCi0gIHtcCi0gICAgaXNfbWF0Y2ggPSBmYWxzZTtcCi0gICAgUlJFVFVSTjtcCi0g
IH0KKyNkZWZpbmUgUlJFVFVSTl9OT19NQVRDSCBkbyB7IGlzTWF0Y2ggPSBmYWxzZTsgUlJFVFVS
TjsgfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKICogICAgICAgICBNYXRjaCBmcm9tIGN1cnJlbnQgcG9zaXRpb24gICAgICAg
ICAgICAqCkBAIC0yODQsMTIgKzI4OCwxMiBAQCBzYW1lIHJlc3BvbnNlLgogQXJndW1lbnRzOgog
ICAgc3ViamVjdFB0ciAgICAgICAgcG9pbnRlciBpbiBzdWJqZWN0CiAgICBpbnN0cnVjdGlvblB0
ciAgICAgICBwb3NpdGlvbiBpbiBjb2RlCi0gICBvZmZzZXRfdG9wICBjdXJyZW50IHRvcCBwb2lu
dGVyCisgICBvZmZzZXRUb3AgIGN1cnJlbnQgdG9wIHBvaW50ZXIKICAgIG1kICAgICAgICAgIHBv
aW50ZXIgdG8gInN0YXRpYyIgaW5mbyBmb3IgdGhlIG1hdGNoCiAKIFJldHVybnM6ICAgICAgIE1B
VENIX01BVENIIGlmIG1hdGNoZWQgICAgICAgICAgICApICB0aGVzZSB2YWx1ZXMgYXJlID49IDAK
ICAgICAgICAgICAgICAgIE1BVENIX05PTUFUQ0ggaWYgZmFpbGVkIHRvIG1hdGNoICApCi0gICAg
ICAgICAgICAgICBhIG5lZ2F0aXZlIFBDUkVfRVJST1JfeHh4IHZhbHVlIGlmIGFib3J0ZWQgYnkg
YW4gZXJyb3IgY29uZGl0aW9uCisgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIHZhbHVl
IGlmIGFib3J0ZWQgYnkgYW4gZXJyb3IgY29uZGl0aW9uCiAgICAgICAgICAgICAgICAgIChlLmcu
IHN0b3BwZWQgYnkgcmVwZWF0ZWQgY2FsbCBvciByZWN1cnNpb24gbGltaXQpCiAqLwogCkBAIC0z
MjEsMTMgKzMyNSwxMyBAQCBzdHJ1Y3QgTWF0Y2hTdGFjayB7CiAgICAgICAgIHJldHVybiBuZXcg
TWF0Y2hGcmFtZTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgcHVzaE5ld0ZyYW1lKGNv
bnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25QdHIsIGNvbnN0IFVDaGFyKiBzdWJwYXR0ZXJuU3RhcnQs
IFJldHVybkxvY2F0aW9uIHJldHVybkxvY2F0aW9uKQorICAgIGlubGluZSB2b2lkIHB1c2hOZXdG
cmFtZShjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0cnVjdGlvblB0ciwgY29uc3QgVUNoYXIqIHN1
YnBhdHRlcm5TdGFydCwgUmV0dXJuTG9jYXRpb24gcmV0dXJuTG9jYXRpb24pCiAgICAgewogICAg
ICAgICBNYXRjaEZyYW1lKiBuZXdmcmFtZSA9IGFsbG9jYXRlTmV4dEZyYW1lKCk7CiAgICAgICAg
IG5ld2ZyYW1lLT5wcmV2aW91c0ZyYW1lID0gY3VycmVudEZyYW1lOwogCiAgICAgICAgIG5ld2Zy
YW1lLT5hcmdzLnN1YmplY3RQdHIgPSBjdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKLSAg
ICAgICAgbmV3ZnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA9IGN1cnJlbnRGcmFtZS0+YXJncy5vZmZz
ZXRfdG9wOworICAgICAgICBuZXdmcmFtZS0+YXJncy5vZmZzZXRUb3AgPSBjdXJyZW50RnJhbWUt
PmFyZ3Mub2Zmc2V0VG9wOwogICAgICAgICBuZXdmcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9
IGluc3RydWN0aW9uUHRyOwogICAgICAgICBuZXdmcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQg
PSBzdWJwYXR0ZXJuU3RhcnQ7CiAgICAgICAgIG5ld2ZyYW1lLT5yZXR1cm5Mb2NhdGlvbiA9IHJl
dHVybkxvY2F0aW9uOwpAQCAtMzYxLDEzICszNjUsMTMgQEAgc3RhdGljIGludCBtYXRjaEVycm9y
KGludCBlcnJvckNvZGUsIE1hdAogLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3Rlciwgbm90
IGFkdmFuY2luZyB0aGUgcG9pbnRlciwgaW5jcmVtZW50aW5nIGxlbmd0aAogIGlmIHRoZXJlIGFy
ZSBleHRyYSBieXRlcy4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbiBVVEYt
OCBtb2RlLiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0VVRGOENoYXJBbmRJbmNyZW1lbnRM
ZW5ndGgoaW50JiBjLCBjb25zdCB1c2NoYXIqIHN1YmplY3RQdHIsIGludCYgbGVuKQorc3RhdGlj
IGlubGluZSB2b2lkIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3RoKGludCYgYywgY29uc3Qg
dW5zaWduZWQgY2hhciogc3ViamVjdFB0ciwgaW50JiBsZW4pCiB7CiAgICAgYyA9ICpzdWJqZWN0
UHRyOwogICAgIGlmICgoYyAmIDB4YzApID09IDB4YzApIHsKLSAgICAgICAgaW50IGdjYWEgPSBf
cGNyZV91dGY4X3RhYmxlNFtjICYgMHgzZl07ICAvKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBieXRl
cyAqLworICAgICAgICBpbnQgZ2NhYSA9IGtqc19wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsg
IC8qIE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovCiAgICAgICAgIGludCBnY3NzID0gNiAq
IGdjYWE7Ci0gICAgICAgIGMgPSAoYyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8PCBnY3Nz
OworICAgICAgICBjID0gKGMgJiBranNfcGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwgZ2NzczsK
ICAgICAgICAgZm9yIChpbnQgZ2NpaSA9IDE7IGdjaWkgPD0gZ2NhYTsgZ2NpaSsrKSB7CiAgICAg
ICAgICAgICBnY3NzIC09IDY7CiAgICAgICAgICAgICBjIHw9IChzdWJqZWN0UHRyW2djaWldICYg
MHgzZikgPDwgZ2NzczsKQEAgLTQwMSw5ICs0MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVw
ZWF0SW5mb3JtYXRpb25Gcm9tCiAgICAgbWF4aW11bVJlcGVhdHMgPSBtYXhpbXVtUmVwZWF0c0Zy
b21JbnN0cnVjdGlvbk9mZnNldFtpbnN0cnVjdGlvbk9mZnNldF07CiB9CiAKLXN0YXRpYyBpbnQg
bWF0Y2goY29uc3QgVUNoYXIqIHN1YmplY3RQdHIsIGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25Q
dHIsIGludCBvZmZzZXRfdG9wLCBNYXRjaERhdGEmIG1kKQorc3RhdGljIGludCBtYXRjaChjb25z
dCBVQ2hhciogc3ViamVjdFB0ciwgY29uc3QgdW5zaWduZWQgY2hhciogaW5zdHJ1Y3Rpb25QdHIs
IGludCBvZmZzZXRUb3AsIE1hdGNoRGF0YSYgbWQpCiB7Ci0gICAgaW50IGlzX21hdGNoID0gZmFs
c2U7CisgICAgaW50IGlzTWF0Y2ggPSBmYWxzZTsKICAgICBpbnQgbWluOwogICAgIGJvb2wgbWlu
aW1pemUgPSBmYWxzZTsgLyogSW5pdGlhbGl6YXRpb24gbm90IHJlYWxseSBuZWVkZWQsIGJ1dCBz
b21lIGNvbXBpbGVycyB0aGluayBzby4gKi8KICAgICAKQEAgLTQxMiwxNCArNDE2LDE0IEBAIHN0
YXRpYyBpbnQgbWF0Y2goY29uc3QgVUNoYXIqIHN1YmplY3RQdHIKICAgICAvKiBUaGUgb3Bjb2Rl
IGp1bXAgdGFibGUuICovCiAjaWZkZWYgVVNFX0NPTVBVVEVEX0dPVE9fRk9SX01BVENIX09QQ09E
RV9MT09QCiAjZGVmaW5lIEVNSVRfSlVNUF9UQUJMRV9FTlRSWShvcGNvZGUpICYmTEFCRUxfT1Bf
IyNvcGNvZGUsCi0gICAgc3RhdGljIHZvaWQqIG9wY29kZV9qdW1wX3RhYmxlWzI1Nl0gPSB7IEZP
Ul9FQUNIX09QQ09ERShFTUlUX0pVTVBfVEFCTEVfRU5UUlkpIH07CisgICAgc3RhdGljIHZvaWQq
IG9wY29kZUp1bXBUYWJsZVsyNTZdID0geyBGT1JfRUFDSF9PUENPREUoRU1JVF9KVU1QX1RBQkxF
X0VOVFJZKSB9OwogI3VuZGVmIEVNSVRfSlVNUF9UQUJMRV9FTlRSWQogI2VuZGlmCiAgICAgCiAg
ICAgLyogT25lLXRpbWUgc2V0dXAgb2YgdGhlIG9wY29kZSBqdW1wIHRhYmxlLiAqLwogI2lmZGVm
IFVTRV9DT01QVVRFRF9HT1RPX0ZPUl9NQVRDSF9PUENPREVfTE9PUAotICAgIGZvciAoaW50IGkg
PSAyNTU7ICFvcGNvZGVfanVtcF90YWJsZVtpXTsgaS0tKQotICAgICAgICBvcGNvZGVfanVtcF90
YWJsZVtpXSA9ICYmQ0FQVFVSSU5HX0JSQUNLRVQ7CisgICAgZm9yIChpbnQgaSA9IDI1NTsgIW9w
Y29kZUp1bXBUYWJsZVtpXTsgaS0tKQorICAgICAgICBvcGNvZGVKdW1wVGFibGVbaV0gPSAmJkNB
UFRVUklOR19CUkFDS0VUOwogI2VuZGlmCiAgICAgCiAjaWZkZWYgVVNFX0NPTVBVVEVEX0dPVE9f
Rk9SX01BVENIX1JFQ1VSU0lPTgpAQCAtNDMxLDcgKzQzNSw3IEBAIHN0YXRpYyBpbnQgbWF0Y2go
Y29uc3QgVUNoYXIqIHN1YmplY3RQdHIKICNlbmRpZgogICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyID0gc3ViamVjdFB0cjsKICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvblB0cjsKLSAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Mub2Zmc2V0X3RvcCA9IG9mZnNldF90b3A7CisgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLm9mZnNldFRvcCA9IG9mZnNldFRvcDsKICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3VicGF0dGVyblN0YXJ0ID0gMDsKICAgICBzdGFydE5ld0dyb3VwKHN0YWNrLmN1cnJlbnRG
cmFtZSk7CiAgICAgCkBAIC00NDgsNyArNDUyLDcgQEAgUkVDVVJTRToKICAgICAgICAgCiAjaWZk
ZWYgVVNFX0NPTVBVVEVEX0dPVE9fRk9SX01BVENIX09QQ09ERV9MT09QCiAjZGVmaW5lIEJFR0lO
X09QQ09ERShvcGNvZGUpIExBQkVMX09QXyMjb3Bjb2RlCi0jZGVmaW5lIE5FWFRfT1BDT0RFIGdv
dG8gKm9wY29kZV9qdW1wX3RhYmxlWypzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHJdCisjZGVmaW5lIE5FWFRfT1BDT0RFIGdvdG8gKm9wY29kZUp1bXBUYWJsZVsqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyXQogI2Vsc2UKICNkZWZpbmUgQkVHSU5f
T1BDT0RFKG9wY29kZSkgY2FzZSBPUF8jI29wY29kZQogI2RlZmluZSBORVhUX09QQ09ERSBjb250
aW51ZQpAQCAtNDY3LDkgKzQ3MSw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgRFBSSU5U
RigoInN0YXJ0IGJyYWNrZXQgMFxuIikpOwogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDIsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldExpbmtW
YWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAg
ICAgICAgICAgICB9IHdoaWxlICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyID09IE9QX0FMVCk7CiAgICAgICAgICAgICAgICAgRFBSSU5URigoImJyYWNrZXQgMCBmYWls
ZWRcbiIpKTsKICAgICAgICAgICAgICAgICBSUkVUVVJOOwpAQCAtNDgzLDkgKzQ4Nyw5IEBAIFJF
Q1VSU0U6CiAgICAgICAgICAgICAvKiBFbmQgb2YgdGhlIHBhdHRlcm4uICovCiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoRU5EKToKLSAgICAgICAgICAgICAgICBt
ZC5lbmRfbWF0Y2hfcHRyID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7ICAg
ICAgICAgIC8qIFJlY29yZCB3aGVyZSB3ZSBlbmRlZCAqLwotICAgICAgICAgICAgICAgIG1kLmVu
ZF9vZmZzZXRfdG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3A7ICAgLyog
YW5kIGhvdyBtYW55IGV4dHJhY3RzIHdlcmUgdGFrZW4gKi8KLSAgICAgICAgICAgICAgICBpc19t
YXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWQuZW5kTWF0Y2hQdHIgPSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsgICAgICAgICAgLyogUmVjb3JkIHdoZXJlIHdlIGVu
ZGVkICovCisgICAgICAgICAgICAgICAgbWQuZW5kT2Zmc2V0VG9wID0gc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLm9mZnNldFRvcDsgICAvKiBhbmQgaG93IG1hbnkgZXh0cmFjdHMgd2VyZSB0YWtl
biAqLworICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgIFJS
RVRVUk47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBBc3NlcnRpb24gYnJhY2tl
dHMuIENoZWNrIHRoZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBpbiB0dXJuIC0gdGhlCkBAIC00OTcs
OSArNTAxLDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShBU1NFUlQpOgog
ICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
X1NUQVJUTkdfTkVXX0dST1VQKDYsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArIDEgKyBMSU5LX1NJWkUsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNf
bWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFsdWUoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBP
UF9BTFQpOwogICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyID09IE9QX0tFVCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKQEAgLTUwNyw5ICs1MTEsOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIC8qIENv
bnRpbnVlIGZyb20gYWZ0ZXIgdGhlIGFzc2VydGlvbiwgdXBkYXRpbmcgdGhlIG9mZnNldHMgaGln
aCB3YXRlcgogICAgICAgICAgICAgICAgICBtYXJrLCBzaW5jZSBleHRyYWN0cyBtYXkgaGF2ZSBi
ZWVuIHRha2VuIGR1cmluZyB0aGUgYXNzZXJ0aW9uLiAqLwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKTsKKyAgICAgICAgICAgICAgICBhZHZh
bmNlVG9FbmRPZkJyYWNrZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
KTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKz0gMSArIExJTktfU0laRTsKLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Mub2Zmc2V0X3RvcCA9IG1kLmVuZF9vZmZzZXRfdG9wOworICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRUb3AgPSBtZC5lbmRPZmZzZXRUb3A7CiAgICAg
ICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAv
KiBOZWdhdGl2ZSBhc3NlcnRpb246IGFsbCBicmFuY2hlcyBtdXN0IGZhaWwgdG8gbWF0Y2ggKi8K
QEAgLTUxNyw4MyArNTIxLDE5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUo
QVNTRVJUX05PVCk6CiAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoNywgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgTlVMTCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwotICAgICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2Rl
VmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEp
OworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKz0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArIDEpOwogICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfQUxUKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMSAr
IExJTktfU0laRTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8qICJPbmNlIiBicmFja2V0cyBhcmUgbGlrZSBhc3NlcnRpb24gYnJh
Y2tldHMgZXhjZXB0IHRoYXQgYWZ0ZXIgYSBtYXRjaCwKLSAgICAgICAgICAgICB0aGUgcG9pbnQg
aW4gdGhlIHN1YmplY3Qgc3RyaW5nIGlzIG5vdCBtb3ZlZCBiYWNrLiBUaHVzIHRoZXJlIGNhbiBu
ZXZlciBiZQotICAgICAgICAgICAgIGEgbW92ZSBiYWNrIGludG8gdGhlIGJyYWNrZXRzLiBGcmll
ZGwgY2FsbHMgdGhlc2UgImF0b21pYyIgc3VicGF0dGVybnMuCi0gICAgICAgICAgICAgQ2hlY2sg
dGhlIGFsdGVybmF0aXZlIGJyYW5jaGVzIGluIHR1cm4gLSB0aGUgbWF0Y2hpbmcgd29uJ3QgcGFz
cyB0aGUgS0VUCi0gICAgICAgICAgICAgZm9yIHRoaXMga2luZCBvZiBzdWJwYXR0ZXJuLiBJZiBh
bnkgb25lIGJyYW5jaCBtYXRjaGVzLCB3ZSBjYXJyeSBvbiBhcyBhdAotICAgICAgICAgICAgIHRo
ZSBlbmQgb2YgYSBub3JtYWwgYnJhY2tldCwgbGVhdmluZyB0aGUgc3ViamVjdCBwb2ludGVyLiAq
LwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE9OQ0UpOgotICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRT
dGFydE9mT25jZSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cjsKLSAg
ICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFy
dE9mSW5zdHJ1Y3Rpb24gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
IFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCg5LCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNo
KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0
T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7Ci0gICAg
ICAgICAgICAgICAgfSB3aGlsZSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciA9PSBPUF9BTFQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIElm
IGhpdCB0aGUgZW5kIG9mIHRoZSBncm91cCAod2hpY2ggY291bGQgYmUgcmVwZWF0ZWQpLCBmYWls
ICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgIT0gT1BfT05DRSAmJiAqc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICE9IE9QX0FMVCkKLSAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBDb250aW51ZSBh
cyBmcm9tIGFmdGVyIHRoZSBhc3NlcnRpb24sIHVwZGF0aW5nIHRoZSBvZmZzZXRzIGhpZ2ggd2F0
ZXIKLSAgICAgICAgICAgICAgICAgbWFyaywgc2luY2UgZXh0cmFjdHMgbWF5IGhhdmUgYmVlbiB0
YWtlbi4gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtb3ZlT3Bjb2RlUHRy
UGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0cik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLm9mZnNldF90b3AgPSBtZC5lbmRfb2Zmc2V0X3RvcDsKLSAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA9IG1kLmVuZF9tYXRjaF9w
dHI7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogRm9yIGEgbm9uLXJlcGVh
dGluZyBrZXQsIGp1c3QgY29udGludWUgYXQgdGhpcyBsZXZlbC4gVGhpcyBhbHNvCi0gICAgICAg
ICAgICAgICAgIGhhcHBlbnMgZm9yIGEgcmVwZWF0aW5nIGtldCBpZiBubyBjaGFyYWN0ZXJzIHdl
cmUgbWF0Y2hlZCBpbiB0aGUgZ3JvdXAuCi0gICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZv
cmNpYmxlIGJyZWFraW5nIG9mIGluZmluaXRlIGxvb3BzIGFzIGltcGxlbWVudGVkIGluIFBlcmwK
LSAgICAgICAgICAgICAgICAgNS4wMDUuIElmIHRoZXJlIGlzIGFuIG9wdGlvbnMgcmVzZXQsIGl0
IHdpbGwgZ2V0IG9iZXllZCBpbiB0aGUgbm9ybWFsCi0gICAgICAgICAgICAgICAgIGNvdXJzZSBv
ZiBldmVudHMuICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfS0VUIHx8IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMSArIExJTktfU0laRTsK
LSAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIFRoZSByZXBlYXRpbmcga2V0cyB0cnkg
dGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gb3IgcmVzdGFydCBmcm9tIHRoZQotICAgICAgICAgICAg
ICAgICBwcmVjZWRpbmcgYnJhY2tldCwgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXZSBuZWVk
IHRvIHJlc2V0IGFueSBvcHRpb25zCi0gICAgICAgICAgICAgICAgIHRoYXQgY2hhbmdlZCB3aXRo
aW4gdGhlIGJyYWNrZXQgYmVmb3JlIHJlLXJ1bm5pbmcgaXQsIHNvIGNoZWNrIHRoZSBuZXh0Ci0g
ICAgICAgICAgICAgICAgIG9wY29kZS4gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9L
RVRSTUlOKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgxMCwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpc19tYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAg
ICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxMSwgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlLCBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgeyAvKiBPUF9LRVRSTUFYICovCi0gICAgICAgICAgICAgICAgICAgIFJF
Q1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxMiwgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgUkVD
VVJTSVZFX01BVENIKDEzLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
KyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUlJFVFVS
TjsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8qIEFuIGFsdGVybmF0aW9uIGlzIHRo
ZSBlbmQgb2YgYSBicmFuY2g7IHNjYW4gYWxvbmcgdG8gZmluZCB0aGUgZW5kIG9mIHRoZQogICAg
ICAgICAgICAgIGJyYWNrZXRlZCBncm91cCBhbmQgZ28gdG8gdGhlcmUuICovCiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQUxUKToKLSAgICAgICAgICAgICAgICBt
b3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0cik7CisgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFj
a2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cik7CiAgICAgICAgICAg
ICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBCUkFa
RVJPIGFuZCBCUkFNSU5aRVJPIG9jY3VyIGp1c3QgYmVmb3JlIGEgYnJhY2tldCBncm91cCwgaW5k
aWNhdGluZwpAQCAtNjA1LDE4ICs1NDUsMTggQEAgUkVDVVJTRToKICAgICAgICAgICAgIEJFR0lO
X09QQ09ERShCUkFaRVJPKTogewogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMTsKICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RB
UlROR19ORVdfR1JPVVAoMTQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBl
YXRpbmdCcmFja2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgaWYgKGlzTWF0
Y2gpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgbW92ZU9w
Y29kZVB0clBhc3RBbnlBbHRlcm5hdGVCcmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5k
T2ZCcmFja2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFj
a2V0KTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tl
dCArIDEgKyBMSU5LX1NJWkU7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQlJBTUlO
WkVSTyk6IHsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFy
dE9mUmVwZWF0aW5nQnJhY2tldCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArIDE7Ci0gICAgICAgICAgICAgICAgbW92ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5hdGVC
cmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tl
dCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0KTsKICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0ICsgMSArIExJTktfU0laRSwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
X21hdGNoKQorICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtNjMwLDE0ICs1
NzAsMTMgQEAgUkVDVVJTRToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShLRVQpOgogICAgICAg
ICAgICAgQkVHSU5fT1BDT0RFKEtFVFJNSU4pOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEtF
VFJNQVgpOgotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3Ry
dWN0aW9uUHRyQXRTdGFydE9mT25jZSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciAtIGdldE9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgLSBnZXRMaW5rVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1
YnBhdHRlcm5TdGFydDsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5zdWJwYXR0ZXJuU3RhcnQgPSBzdGFjay5jdXJyZW50RnJhbWUtPnByZXZpb3VzRnJhbWUtPmFy
Z3Muc3VicGF0dGVyblN0YXJ0OwogCi0gICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1BfQVNTRVJUIHx8
ICpzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2Ug
PT0gT1BfQVNTRVJUX05PVCB8fCAqc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rp
b25QdHJBdFN0YXJ0T2ZPbmNlID09IE9QX09OQ0UpIHsKLSAgICAgICAgICAgICAgICAgICAgbWQu
ZW5kX21hdGNoX3B0ciA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOyAgICAg
IC8qIEZvciBPTkNFICovCi0gICAgICAgICAgICAgICAgICAgIG1kLmVuZF9vZmZzZXRfdG9wID0g
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3A7Ci0gICAgICAgICAgICAgICAgICAg
IGlzX21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9PSBPUF9BU1NFUlQgfHwgKnN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9PSBP
UF9BU1NFUlRfTk9UKSB7CisgICAgICAgICAgICAgICAgICAgIG1kLmVuZE9mZnNldFRvcCA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRUb3A7CisgICAgICAgICAgICAgICAgICAgIGlz
TWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTY1MSw3ICs1OTAsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgICB0aGUgbnVtYmVyIGZyb20gYSBkdW1teSBvcGNvZGUgYXQgdGhlIHN0YXJ0
LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5udW1iZXIgPiBFWFRSQUNUX0JBU0lDX01BWCkKLSAgICAgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyID0gZ2V0MkJ5dGVPcGNvZGVW
YWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRT
dGFydE9mT25jZSwgMitMSU5LX1NJWkUpOworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSArIDIgKyBMSU5LX1NJWkUpOwog
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA8PCAxOwogICAgICAgICAgICAgICAgIAogI2lm
ZGVmIERFQlVHCkBAIC02NjUsMTQgKzYwNCwxNCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
ICB0aGUgT1BfRU5EIGlzIHJlYWNoZWQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA+IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA+PSBt
ZC5vZmZzZXRfbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X292ZXJmbG93
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLm9mZnNldCA+PSBtZC5vZmZzZXRNYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBtZC5v
ZmZzZXRPdmVyZmxvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5vZmZzZXRdID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldF92ZWN0b3Jb
bWQub2Zmc2V0X2VuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm9mZnNldCsxXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC0g
bWQuc3RhcnRfc3ViamVjdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA8PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5v
ZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLm9mZnNldF90b3AgPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVj
dG9yW21kLm9mZnNldEVuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMub2Zmc2V0KzFdID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
LSBtZC5zdGFydFN1YmplY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcCA8PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5v
ZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLm9mZnNldFRvcCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDI7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CkBAIC02OTIsMTcgKzYzMSwxNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09
IE9QX0tFVFJNSU4pIHsKICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDE2LCBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgIFJFQ1VS
U0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxNywgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk47CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogT1BfS0VUUk1BWCAqLwogICAgICAg
ICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTgsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVf
TUFUQ0goMTksIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBM
SU5LX1NJWkUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChp
c01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgUlJFVFVSTjsKQEAgLTcxMCw3ICs2NDksNyBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgLyogU3RhcnQgb2Ygc3ViamVjdCwgb3IgYWZ0ZXIgaW50ZXJuYWwgbmV3
bGluZSBpZiBtdWx0aWxpbmUuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJ
Tl9PUENPREUoQ0lSQyk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyICE9IG1kLnN0YXJ0X3N1YmplY3QgJiYgKCFtZC5tdWx0aWxpbmUgfHwg
IWlzTmV3bGluZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0clstMV0pKSkKKyAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0g
bWQuc3RhcnRTdWJqZWN0ICYmICghbWQubXVsdGlsaW5lIHx8ICFpc05ld2xpbmUoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHJbLTFdKSkpCiAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC03MTgs
NyArNjU3LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIEVuZCBvZiBzdWJqZWN0LCBvciBi
ZWZvcmUgaW50ZXJuYWwgbmV3bGluZSBpZiBtdWx0aWxpbmUuICovCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoRE9MTCk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIDwgbWQuZW5kX3N1YmplY3QgJiYgKCFt
ZC5tdWx0aWxpbmUgfHwgIWlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIpKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPCBtZC5lbmRTdWJqZWN0ICYmICghbWQubXVsdGlsaW5lIHx8ICFpc05ld2xpbmUo
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkpCiAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBA
IC03MzAsOSArNjY5LDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBib29sIGN1cnJlbnRD
aGFySXNXb3JkQ2hhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgcHJldmlvdXNDaGFy
SXNXb3JkQ2hhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+IG1kLnN0YXJ0X3N1YmplY3Qp
CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ID4gbWQuc3RhcnRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NoYXJJc1dv
cmRDaGFyID0gaXNXb3JkQ2hhcihzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0clst
MV0pOwotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA8IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA8IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRDaGFySXNXb3JkQ2hhciA9IGlzV29yZENoYXIoKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
KiBOb3cgc2VlIGlmIHRoZSBzaXR1YXRpb24gaXMgd2hhdCB3ZSB3YW50ICovCkBAIC03NDUsNyAr
Njg0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rl
ciB0eXBlOyBpbmxpbmUgZm9yIHNwZWVkICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBCRUdJTl9PUENPREUoTk9UX05FV0xJTkUpOgotICAgICAgICAgICAgICAgIGlmIChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5k
U3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAg
ICAgICAgICBpZiAoaXNOZXdsaW5lKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTc1Myw3ICs2
OTIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogCiAgICAgICAg
ICAgICBCRUdJTl9PUENPREUoTk9UX0RJR0lUKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVu
ZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIrKykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC03NjEs
NyArNzAwLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKIAogICAg
ICAgICAgICAgQkVHSU5fT1BDT0RFKERJR0lUKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVu
ZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAg
ICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtNzY5
LDcgKzcwOCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAKICAg
ICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfV0hJVEVTUEFDRSk6Ci0gICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENI
OwogICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlQ2hhcigqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIrKykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7
CkBAIC03NzcsNyArNzE2LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RTsKIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFdISVRFU1BBQ0UpOgotICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3Vi
amVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VDaGFyKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKQEAgLTc4NSw3ICs3MjQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVF9X
T1JEQ0hBUik6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmIChpc1dvcmRD
aGFyKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTc5Myw3ICs3MzIsNyBAQCBSRUNVUlNFOgog
ICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQkVHSU5fT1BDT0RFKFdPUkRDSEFSKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1
YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc1dvcmRDaGFyKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTgwOSw3ICs3
NDgsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgIGxvb3BzKS4gKi8KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShSRUYpOgotICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpIDw8IDE7ICAgICAg
ICAgICAgICAgLyogRG91YmxlZCByZWYgbnVtYmVyICovCisgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKSA8PCAxOyAgICAgICAgICAgICAgIC8qIERv
dWJsZWQgcmVmIG51bWJlciAqLwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIEFkdmFuY2UgcGFzdCBpdGVtICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLyogSWYgdGhlIHJlZmVyZW5jZSBpcyB1bnNldCwgc2V0IHRoZSBsZW5ndGggdG8gYmUgbG9u
Z2VyIHRoYW4gdGhlIGFtb3VudApAQCAtODE3LDEwICs3NTYsMTAgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgY2FuJ3QganVzdCBmYWlsIGhlcmUsIGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmls
aXR5IG9mIHF1YW50aWZpZXJzIHdpdGggemVybwogICAgICAgICAgICAgICAgICBtaW5pbWEuICov
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldCA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCB8
fCBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPCAw
KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQg
Pj0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcCB8fCBtZC5vZmZzZXRWZWN0b3Jb
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XSA8IDApCiAgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5s
ZW5ndGggPSBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNl
dCsxXSAtIG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0
XTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3Ro
ID0gbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCsxXSAt
IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIFNldCB1cCBmb3IgcmVwZXRpdGlvbiwg
b3IgaGFuZGxlIHRoZSBub24tcmVwZWF0ZWQgY2FzZSAqLwogICAgICAgICAgICAgICAgIApAQCAt
ODM3LDE1ICs3NzYsMTUgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9D
UlJBTkdFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9ICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyID09IE9QX0NSTUlOUkFOR0UpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bWluID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1pbiA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciArIDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IElOVF9NQVg7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gNTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiBObyByZXBlYXQgZm9s
bG93cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaF9yZWYoc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1hdGNoUmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9m
ZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciArPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7
CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTg2MCw3ICs3OTksNyBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0g
bnVtYmVyIG9mIG1hdGNoZXMgYXJlIHByZXNlbnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtYXRjaF9yZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0
LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubGVuZ3RoLCBtZCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hSZWYo
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciArPSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgfQpAQCAtODc2LDkgKzgxNSw5
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0goMjAsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCAhbWF0Y2hfcmVmKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heCB8fCAhbWF0Y2hSZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtODkwLDEzICs4MjksMTMgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47
IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtYXRjaF9yZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1h
dGNoUmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwg
bWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgKz0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+
PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rp
b24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyMSwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRj
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAtPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5s
ZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTkzMyw4ICs4NzIsOCBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0NSUkFOR0U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltaXpl
ID0gKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfQ1JNSU5S
QU5HRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBnZXQyQnl0ZU9wY29kZVZhbHVl
QXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdl
dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVWYWx1
ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRl
VmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID09
IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMubWF4ID0gSU5UX01BWDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSA1OwpAQCAtOTQ4LDcgKzg4Nyw3IEBAIFJFQ1VS
U0U6CiAgICAgICAgICAgICAgICAgLyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11bSBudW1iZXIg
b2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtaW47IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1Ympl
Y3QpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVS
Tl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUp
IHsKQEAgLTk3MSw5ICs5MTAsOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIGlmIChtaW5p
bWl6ZSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDIyLCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJu
U3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJF
VFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+IDI1
NSkgewpAQCAtOTkxLDcgKzkzMCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUpIHsK
QEAgLTEwMDUsNyArOTQ0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNV
UlNJVkVfTUFUQ0goMjQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwg
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNN
YXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLS0gPT0g
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9u
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgLyogU3RvcCBpZiB0
cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KQEAgLTEwMTksNyArOTU4LDcgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShYQ0xBU1MpOgogICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEgPSBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFOyAgICAgICAgICAgICAg
ICAvKiBTYXZlIGZvciBtYXRjaGluZyAqLwotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7ICAgICAgICAgICAgICAgICAg
ICAgIC8qIEFkdmFuY2UgcGFzdCB0aGUgaXRlbSAqLworICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFsdWUoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7ICAgICAgICAgICAgICAgICAgICAg
IC8qIEFkdmFuY2UgcGFzdCB0aGUgaXRlbSAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cikg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0NSU1RBUjoKQEAgLTEwMzQsOCArOTczLDgg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBtaW5pbWl6ZSA9ICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09
IE9QX0NSTUlOUkFOR0UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVP
cGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyLCAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdl
dDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXgg
PSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
IDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLm1heCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heCA9IElOVF9NQVg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gNTsKQEAgLTEwNDMsMTUgKzk4
MiwxNSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgLyogTm8gcmVwZWF0IGZvbGxvd3MgKi8KICAg
ICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1h
eCA9IDE7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9m
IG1hdGNoZXMgYXJlIHByZXNlbnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5f
Tk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghX3BjcmVfeGNs
YXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWtqc19wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5k
YXRhKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTA2NywxMiArMTAwNiwxMiBAQCBSRUNV
UlNFOgogICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAgICAgICAg
ICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZF
X01BVENIKDI2LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
Pj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIV9wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5kYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2pzX3BjcmVf
eGNsYXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KQEAgLTEwODMsMTYg
KzEwMjIsMTYgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZklu
c3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1k
LmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3BjcmVfeGNsYXNzKGMsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFranNfcGNyZV94Y2xhc3MoYywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGZvcig7OykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgUkVDVVJTSVZFX01BVENIKDI3LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJ
bnN0cnVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8q
IFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCkBAIC0xMTA5LDcgKzEwNDgsNyBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0cisrOwogICAgICAgICAgICAgICAgIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3Ro
KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCk7CiAgICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1k
LmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICE9ICpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKQogICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOX05PX01BVENIOwpAQCAtMTEyMiwxMCArMTA2MSwxMCBAQCBSRUNVUlNFOgogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAg
ICAgICAgICAgIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmZjLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAg
ICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaW50IGRj
ID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICE9IGRjICYmIF9wY3JlX3VjcF9v
dGhlcmNhc2Uoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMpICE9IGRjKQorICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyAhPSBkYyAmJiBranNfcGNy
ZV91Y3Bfb3RoZXJjYXNlKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKSAhPSBkYykKICAg
ICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERTsKICAgICAgICAgICAgIH0KQEAgLTExMzMsNyArMTA3Miw3IEBAIFJFQ1VSU0U6CiAg
ICAgICAgICAgICAvKiBNYXRjaCBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuICovCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQVNDSUlfQ0hBUik6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1kLmVuZF9zdWJqZWN0ID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyKQorICAgICAgICAgICAgICAgIGlmIChtZC5lbmRTdWJqZWN0ID09IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
X05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyWzFd
KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtMTE0NCw3ICsxMDgz
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIE1hdGNoIG9uZSBvZiB0d28gY2FzZXMgb2Yg
YW4gQVNDSUkgbGV0dGVyLiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5f
T1BDT0RFKEFTQ0lJX0xFVFRFUl9JR05PUklOR19DQVNFKToKLSAgICAgICAgICAgICAgICBpZiAo
bWQuZW5kX3N1YmplY3QgPT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCisg
ICAgICAgICAgICAgICAgaWYgKG1kLmVuZFN1YmplY3QgPT0gc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAg
ICAgICAgICAgICAgICAgaWYgKCgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
fCAweDIwKSAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHJbMV0pCiAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC0xMTU1LDcgKzEwOTQsNyBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggYSBzaW5nbGUgY2hhcmFjdGVyIHJlcGVh
dGVkbHk7IGRpZmZlcmVudCBvcGNvZGVzIHNoYXJlIGNvZGUuICovCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoRVhBQ1QpOgotICAgICAgICAgICAgICAgIG1pbiA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9m
ZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAg
ICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRl
VmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAg
ICAgICAgICAgICAgbWluaW1pemUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAgICBnb3Rv
IFJFUEVBVENIQVI7CkBAIC0xMTYzLDcgKzExMDIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
QkVHSU5fT1BDT0RFKFVQVE8pOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE1JTlVQVE8pOgog
ICAgICAgICAgICAgICAgIG1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9
ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfTUlOVVBUTzsK
ICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
Kz0gMzsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVENIQVI7CkBAIC0xMTg0LDEyICsxMTIz
LDEyIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoID0gMTsKICAgICAgICAgICAgICAgICBnZXRVVEY4
Q2hhckFuZEluY3JlbWVudExlbmd0aChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYywgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmIChtaW4gKiAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmMgPiAweEZGRkYgPyAyIDogMSkgPiBtZC5lbmRfc3ViamVjdCAtIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQorICAgICAgICAgICAgICAgIGlmICht
aW4gKiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPiAweEZGRkYgPyAyIDogMSkgPiBt
ZC5lbmRTdWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCiAgICAg
ICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPD0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBvdGhlcmNhc2UgPSBtZC5pZ25vcmVDYXNlID8gX3BjcmVfdWNwX290aGVyY2FzZShz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAg
aW50IG90aGVyY2FzZSA9IG1kLmlnbm9yZUNhc2UgPyBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IG90aGVyY2FzZSkKQEAgLTEyMDEsMTQgKzExNDAsMTQg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5yZXBlYXRfb3Ro
ZXJjYXNlID0gb3RoZXJjYXNlOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMucmVwZWF0T3RoZXJjYXNlID0gb3RoZXJjYXNlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9IG1pbjs7IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUNVUlNJVkVfTUFUQ0goMjgsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLnJlcGVhdF9vdGhlcmNhc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyAmJiAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMucmVwZWF0T3RoZXJjYXNlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjE2LDcgKzExNTUsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVu
ZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IG90aGVyY2FzZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjI0LDcgKzExNjMsNyBAQCBSRUNVUlNFOgogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyOSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1zdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEy
NDYsOSArMTE4NSw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5maSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMzAsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5k
X3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk47CkBAIC0xMjU4LDcgKzExOTcsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPiBtZC5lbmRfc3ViamVjdCAtIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID4gbWQuZW5kU3ViamVjdCAt
IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
IT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTI2Niw3ICsxMjA1LDcgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMzEsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0x
Mjc5LDcgKzEyMTgsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggYSBuZWdhdGVk
IHNpbmdsZSBvbmUtYnl0ZSBjaGFyYWN0ZXIuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBCRUdJTl9PUENPREUoTk9UKTogewotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3Vi
amVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAg
ICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwpA
QCAtMTMwMyw3ICsxMjQyLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICBhYm91dC4uLiAqLwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVEVYQUNUKToKLSAg
ICAgICAgICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQy
Qnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXplID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAg
ICAgICAgICAgICAgICAgZ290byBSRVBFQVROT1RDSEFSOwpAQCAtMTMxMSw3ICsxMjUwLDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RVUFRPKToKICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShOT1RNSU5VUFRPKToKICAgICAgICAgICAgICAgICBtaW4gPSAwOwotICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bj
b2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIs
IDEpOworICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdl
dDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7
CiAgICAgICAgICAgICAgICAgbWluaW1pemUgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyID09IE9QX05PVE1JTlVQVE87CiAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290
byBSRVBFQVROT1RDSEFSOwpAQCAtMTMyOSw3ICsxMjY4LDcgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICBzdWJqZWN0LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVQRUFUTk9U
Q0hBUjoKLSAgICAgICAgICAgICAgICBpZiAobWluID4gbWQuZW5kX3N1YmplY3QgLSBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWluID4g
bWQuZW5kU3ViamVjdCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIApAQCAtMTM2MSwxMiArMTMwMCwxMiBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgICAgICBpZiAobWluaW1pemUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVDVVJTSVZFX01BVENIKDM4LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZCA9ICpzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkIDwgMTI4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gdG9Mb3dl
ckNhc2UoZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kU3ViamVjdCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBuZXZlciByZWFjaGVz
IGhlcmUgKi8KQEAgLTEzNzgsNyArMTMxNyw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5z
dHJ1Y3Rpb24gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1p
bjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZCA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IDEyOCkKQEAgLTEzODksNyArMTMyOCw3IEBA
IFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01B
VENIKDQwLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNN
YXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5z
dHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
LyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KQEAgLTE0MTUsMTAgKzEzNTQsMTAg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWlu
Ozsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCg0Miwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGQgPSAqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49
IG1kLmVuZF9zdWJqZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmZjID09IGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLwpAQCAtMTQzMCw3ICsxMzY5LDcgQEAgUkVD
VVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49
IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQpAQCAtMTQzOSw3ICsxMzc4LDcgQEAgUkVDVVJT
RToKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoOzspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNDQs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlv
bikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBTdG9w
IGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwpAQCAtMTQ1NSw3ICsxMzk0LDcgQEAgUkVDVVJT
RToKICAgICAgICAgICAgICByZXBlYXQgaXQgaW4gdGhlIGludGVyZXN0cyBvZiBlZmZpY2llbmN5
LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVFWEFD
VCk6Ci0gICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9
IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVRUWVBFOwpAQCAtMTQ2Myw3ICsxNDAyLDcg
QEAgUkVDVVJTRToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShUWVBFVVBUTyk6CiAgICAgICAg
ICAgICBCRUdJTl9PUENPREUoVFlQRU1JTlVQVE8pOgogICAgICAgICAgICAgICAgIG1pbiA9IDA7
Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5
dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciwgMSk7CisgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
KyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfVFlQRU1JTlVQVE87CiAgICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAg
ICAgZ290byBSRVBFQVRUWVBFOwpAQCAtMTQ4OCw3ICsxNDI3LDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgKGkuZS4ga2VlcCBpdCBvdXQgb2YgdGhlIGxvb3ApLiBBbHNvIHdlIGNhbiB0
ZXN0IHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0CiAgICAgICAgICAgICAgICAgIHRoZSBtaW5pbXVt
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSB3ZSBzdGFydC4gKi8KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobWluID4gbWQuZW5kX3N1YmplY3QgLSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWluID4gbWQu
ZW5kU3ViamVjdCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmIChtaW4g
PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuY3R5cGUpIHsKQEAgLTE1NjUsOSArMTUwNCw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNDgsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1h
eCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cisrOwpAQCAtMTYyNCw3ICsxNTYzLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5jdHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9OT1RfTkVXTElORToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0IHx8IGlzTmV3bGluZSgq
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kU3ViamVjdCB8fCBpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE2MzIsNyArMTU3
MSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzQVNDSUlEaWdpdChjKSkKQEAgLTE2NDMsNyArMTU4Miw3IEBAIFJFQ1VSU0U6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIE9QX0RJR0lUOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBt
aW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlE
aWdpdChjKSkKQEAgLTE2NTQsNyArMTU5Myw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQ
QUNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZUNoYXIoYykpCkBA
IC0xNjY1LDcgKzE2MDQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3Qp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VDaGFyKGMpKQpAQCAtMTY3Niw3ICsxNjE1
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5t
YXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNXb3JkQ2hhcihjKSkKQEAgLTE2ODcsNyArMTYyNiw3IEBAIFJFQ1VSU0U6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIE9QX1dPUkRDSEFSOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJq
ZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV29y
ZENoYXIoYykpCkBAIC0xNzA1LDcgKzE2NDQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgUkVDVVJTSVZFX01BVENIKDUyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJ
bnN0cnVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8q
IFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCkBAIC0xNzU1LDcgKzE2OTQsNyBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgICBudW1iZXIgZnJvbSBhIGR1bW15IG9wY29kZSBhdCB0
aGUgc3RhcnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA+IEVYVFJBQ1RfQkFTSUNfTUFYKQotICAgICAg
ICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPSBnZXQyQnl0
ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyLCAyK0xJTktfU0laRSk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm51bWJlciA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMiArIExJTktfU0laRSk7CiAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bnVtYmVyIDw8IDE7CiAgICAgICAgICAgICAgICAgCiAjaWZkZWYgREVCVUcKQEAgLTE3NjQsMjYg
KzE3MDMsMjYgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAjZW5k
aWYKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMub2Zmc2V0IDwgbWQub2Zmc2V0X21heCkgewotICAgICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDEgPSBtZC5vZmZzZXRfdmVj
dG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MiA9IG1kLm9mZnNldF92
ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ICsgMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MyA9IG1kLm9m
ZnNldF92ZWN0b3JbbWQub2Zmc2V0X2VuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51
bWJlcl07CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9m
ZnNldCA8IG1kLm9mZnNldE1heCkgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MSA9IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5vZmZzZXRdOworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MiA9IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDMgPSBtZC5vZmZzZXRWZWN0b3JbbWQub2Zmc2V0
RW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyXTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIERQUklOVEYoKCJzYXZpbmcgJWQgJWQgJWRcbiIs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MSwgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZl
X29mZnNldDMpKTsKLSAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvclttZC5vZmZz
ZXRfZW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyXSA9IHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC0gbWQuc3RhcnRfc3ViamVjdDsKKyAgICAgICAgICAg
ICAgICAgICAgRFBSSU5URigoInNhdmluZyAlZCAlZCAlZFxuIiwgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuc2F2ZU9mZnNldDEsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZz
ZXQyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MykpOworICAgICAgICAg
ICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3JbbWQub2Zmc2V0RW5kIC0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubnVtYmVyXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
IC0gbWQuc3RhcnRTdWJqZWN0OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJU
TkdfTkVXX0dST1VQKDEsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
IDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVS
TjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgICAg
ICB9IHdoaWxlICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9Q
X0FMVCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBEUFJJTlRG
KCgiYnJhY2tldCAlZCBmYWlsZWRcbiIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJl
cikpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0
X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdID0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQxOwotICAgICAgICAgICAgICAgICAgICBtZC5vZmZz
ZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDFdID0gc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQyOwotICAgICAgICAgICAgICAgICAgICBt
ZC5vZmZzZXRfdmVjdG9yW21kLm9mZnNldF9lbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5udW1iZXJdID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQzOworICAg
ICAgICAgICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMub2Zmc2V0XSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQxOworICAg
ICAgICAgICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMub2Zmc2V0ICsgMV0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MjsK
KyAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW21kLm9mZnNldEVuZCAtIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5zYXZlT2Zmc2V0MzsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg0NSw4ICsxNzg0LDggQEAgUlJFVFVS
Tl9TV0lUQ0g6CiAjZW5kaWYKICAgICAKIFJFVFVSTjoKLSAgICBBU1NFUlQoaXNfbWF0Y2ggPT0g
TUFUQ0hfTUFUQ0ggfHwgaXNfbWF0Y2ggPT0gTUFUQ0hfTk9NQVRDSCk7Ci0gICAgcmV0dXJuIGlz
X21hdGNoOworICAgIEFTU0VSVChpc01hdGNoID09IE1BVENIX01BVENIIHx8IGlzTWF0Y2ggPT0g
TUFUQ0hfTk9NQVRDSCk7CisgICAgcmV0dXJuIGlzTWF0Y2g7CiB9CiAKIApAQCAtMTkwMyw3ICsx
ODQyLDcgQEAgc3RhdGljIHZvaWQgdHJ5Rmlyc3RCeXRlT3B0aW1pemF0aW9uKGNvbgogICAgIH0K
IH0KIAotc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9uKGNvbnN0IFVDaGFy
KiYgc3ViamVjdFB0ciwgY29uc3QgVUNoYXIqIGVuZFN1YmplY3QsIGludCByZXFfYnl0ZSwgaW50
IHJlcV9ieXRlMiwgYm9vbCByZXFfYnl0ZV9jYXNlbGVzcywgYm9vbCBoYXNGaXJzdEJ5dGUsIGNv
bnN0IFVDaGFyKiYgcmVxX2J5dGVfcHRyKQorc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRlT3B0
aW1pemF0aW9uKGNvbnN0IFVDaGFyKiYgc3ViamVjdFB0ciwgY29uc3QgVUNoYXIqIGVuZFN1Ympl
Y3QsIGludCByZXFfYnl0ZSwgaW50IHJlcV9ieXRlMiwgYm9vbCByZXFfYnl0ZV9jYXNlbGVzcywg
Ym9vbCBoYXNGaXJzdEJ5dGUsIGNvbnN0IFVDaGFyKiYgcmVxQnl0ZVB0cikKIHsKICAgICAvKiBJ
ZiByZXFfYnl0ZSBpcyBzZXQsIHdlIGtub3cgdGhhdCB0aGF0IGNoYXJhY3RlciBtdXN0IGFwcGVh
ciBpbiB0aGUgc3ViamVjdAogICAgICBmb3IgdGhlIG1hdGNoIHRvIHN1Y2NlZWQuIElmIHRoZSBm
aXJzdCBjaGFyYWN0ZXIgaXMgc2V0LCByZXFfYnl0ZSBtdXN0IGJlCkBAIC0xOTI1LDcgKzE4NjQs
NyBAQCBzdGF0aWMgYm9vbCB0cnlSZXF1aXJlZEJ5dGVPcHRpbWl6YXRpb24oCiAgICAgICAgIC8q
IFdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoZSBzZWFyY2ggaWYgd2UgaGF2ZW4ndCB5ZXQgcmVh
Y2hlZCB0aGUKICAgICAgICAgIHBsYWNlIHdlIGZvdW5kIGl0IGF0IGxhc3QgdGltZS4gKi8KIAot
ICAgICAgICBpZiAocCA+IHJlcV9ieXRlX3B0cikgeworICAgICAgICBpZiAocCA+IHJlcUJ5dGVQ
dHIpIHsKICAgICAgICAgICAgIGlmIChyZXFfYnl0ZV9jYXNlbGVzcykgewogICAgICAgICAgICAg
ICAgIHdoaWxlIChwIDwgZW5kU3ViamVjdCkgewogICAgICAgICAgICAgICAgICAgICBpbnQgcHAg
PSAqcCsrOwpAQCAtMTk1Miw3ICsxODkxLDcgQEAgc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRl
T3B0aW1pemF0aW9uKAogICAgICAgICAgICAgIGZvdW5kIGl0LCBzbyB0aGF0IHdlIGRvbid0IHNl
YXJjaCBhZ2FpbiBuZXh0IHRpbWUgcm91bmQgdGhlIGxvb3AgaWYKICAgICAgICAgICAgICB0aGUg
c3RhcnQgaGFzbid0IHBhc3NlZCB0aGlzIGNoYXJhY3RlciB5ZXQuICovCiAKLSAgICAgICAgICAg
IHJlcV9ieXRlX3B0ciA9IHA7CisgICAgICAgICAgICByZXFCeXRlUHRyID0gcDsKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTY3LDEzICsxOTA2LDEzIEBAIGludCBq
c1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgIEFTU0VSVChvZmZzZXRjb3Vu
dCA+PSAwKTsKICAgICBBU1NFUlQob2Zmc2V0cyB8fCBvZmZzZXRjb3VudCA9PSAwKTsKICAgICAK
LSAgICBNYXRjaERhdGEgbWF0Y2hfYmxvY2s7Ci0gICAgbWF0Y2hfYmxvY2suc3RhcnRfc3ViamVj
dCA9IHN1YmplY3Q7Ci0gICAgbWF0Y2hfYmxvY2suZW5kX3N1YmplY3QgPSBtYXRjaF9ibG9jay5z
dGFydF9zdWJqZWN0ICsgbGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBlbmRfc3ViamVjdCA9IG1h
dGNoX2Jsb2NrLmVuZF9zdWJqZWN0OworICAgIE1hdGNoRGF0YSBtYXRjaEJsb2NrOworICAgIG1h
dGNoQmxvY2suc3RhcnRTdWJqZWN0ID0gc3ViamVjdDsKKyAgICBtYXRjaEJsb2NrLmVuZFN1Ympl
Y3QgPSBtYXRjaEJsb2NrLnN0YXJ0U3ViamVjdCArIGxlbmd0aDsKKyAgICBjb25zdCBVQ2hhciog
ZW5kU3ViamVjdCA9IG1hdGNoQmxvY2suZW5kU3ViamVjdDsKICAgICAKLSAgICBtYXRjaF9ibG9j
ay5tdWx0aWxpbmUgPSAocmUtPm9wdGlvbnMgJiBNYXRjaEFjcm9zc011bHRpcGxlTGluZXNPcHRp
b24pOwotICAgIG1hdGNoX2Jsb2NrLmlnbm9yZUNhc2UgPSAocmUtPm9wdGlvbnMgJiBJZ25vcmVD
YXNlT3B0aW9uKTsKKyAgICBtYXRjaEJsb2NrLm11bHRpbGluZSA9IChyZS0+b3B0aW9ucyAmIE1h
dGNoQWNyb3NzTXVsdGlwbGVMaW5lc09wdGlvbik7CisgICAgbWF0Y2hCbG9jay5pZ25vcmVDYXNl
ID0gKHJlLT5vcHRpb25zICYgSWdub3JlQ2FzZU9wdGlvbik7CiAgICAgCiAgICAgLyogSWYgdGhl
IGV4cHJlc3Npb24gaGFzIGdvdCBtb3JlIGJhY2sgcmVmZXJlbmNlcyB0aGFuIHRoZSBvZmZzZXRz
IHN1cHBsaWVkIGNhbgogICAgICBob2xkLCB3ZSBnZXQgYSB0ZW1wb3JhcnkgY2h1bmsgb2Ygd29y
a2luZyBzdG9yZSB0byB1c2UgZHVyaW5nIHRoZSBtYXRjaGluZy4KQEAgLTE5ODgsMTYgKzE5Mjcs
MTYgQEAgaW50IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4cCogcmUsCiAgICAgYm9vbCB1
c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cyA9IGZhbHNlOwogICAgIGlmIChyZS0+dG9wX2JhY2tyZWYg
PiAwICYmIHJlLT50b3BfYmFja3JlZiA+PSBvY291bnQvMykgewogICAgICAgICBvY291bnQgPSBy
ZS0+dG9wX2JhY2tyZWYgKiAzICsgMzsKLSAgICAgICAgbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3Rv
ciA9IG5ldyBpbnRbb2NvdW50XTsKLSAgICAgICAgaWYgKCFtYXRjaF9ibG9jay5vZmZzZXRfdmVj
dG9yKQorICAgICAgICBtYXRjaEJsb2NrLm9mZnNldFZlY3RvciA9IG5ldyBpbnRbb2NvdW50XTsK
KyAgICAgICAgaWYgKCFtYXRjaEJsb2NrLm9mZnNldFZlY3RvcikKICAgICAgICAgICAgIHJldHVy
biBKU1JlZ0V4cEVycm9yTm9NZW1vcnk7CiAgICAgICAgIHVzaW5nX3RlbXBvcmFyeV9vZmZzZXRz
ID0gdHJ1ZTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciA9
IG9mZnNldHM7CisgICAgICAgIG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yID0gb2Zmc2V0czsKICAg
ICAKLSAgICBtYXRjaF9ibG9jay5vZmZzZXRfZW5kID0gb2NvdW50OwotICAgIG1hdGNoX2Jsb2Nr
Lm9mZnNldF9tYXggPSAoMipvY291bnQpLzM7Ci0gICAgbWF0Y2hfYmxvY2sub2Zmc2V0X292ZXJm
bG93ID0gZmFsc2U7CisgICAgbWF0Y2hCbG9jay5vZmZzZXRFbmQgPSBvY291bnQ7CisgICAgbWF0
Y2hCbG9jay5vZmZzZXRNYXggPSAoMipvY291bnQpLzM7CisgICAgbWF0Y2hCbG9jay5vZmZzZXRP
dmVyZmxvdyA9IGZhbHNlOwogICAgIAogICAgIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gbnVtYmVy
IG9mIG9mZnNldHMgdGhhdCB3ZSBuZWVkIHRvIHJlc2V0IGVhY2ggdGltZS4gRG9pbmcKICAgICAg
dGhpcyBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSB0byBleGVjdXRpb24gdGltZSB3aGVuIHRoZXJl
IGFyZW4ndCBtYW55IGJyYWNrZXRzCkBAIC0yMDExLDggKzE5NTAsOCBAQCBpbnQganNSZWdFeHBF
eGVjdXRlKGNvbnN0IEpTUmVnRXhwKiByZSwKICAgICAgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgcHJl
dmlvdXNseSBzZXQsIGJ1dCB0aGV5IGdldCBzYXZlZCBhbmQgcmVzdG9yZWQsIGFuZCBzbyB3ZQog
ICAgICBpbml0aWFsaXplIHRoZW0gdG8gYXZvaWQgcmVhZGluZyB1bmluaXRpYWxpemVkIGxvY2F0
aW9ucy4gKi8KICAgICAKLSAgICBpZiAobWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcikgewotICAg
ICAgICBpbnQqIGlwdHIgPSBtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yICsgb2NvdW50OworICAg
IGlmIChtYXRjaEJsb2NrLm9mZnNldFZlY3RvcikgeworICAgICAgICBpbnQqIGlwdHIgPSBtYXRj
aEJsb2NrLm9mZnNldFZlY3RvciArIG9jb3VudDsKICAgICAgICAgaW50KiBpZW5kID0gaXB0ciAt
IHJlc2V0Y291bnQvMiArIDE7CiAgICAgICAgIHdoaWxlICgtLWlwdHIgPj0gaWVuZCkKICAgICAg
ICAgICAgICppcHRyID0gLTE7CkBAIC0yMDQ3LDIxICsxOTg2LDIxIEBAIGludCBqc1JlZ0V4cEV4
ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgIC8qIExvb3AgZm9yIGhhbmRsaW5nIHVuYW5j
aG9yZWQgcmVwZWF0ZWQgbWF0Y2hpbmcgYXR0ZW1wdHM7IGZvciBhbmNob3JlZCByZWdleHMKICAg
ICAgdGhlIGxvb3AgcnVucyBqdXN0IG9uY2UuICovCiAgICAgCi0gICAgY29uc3QgVUNoYXIqIHN0
YXJ0X21hdGNoID0gc3ViamVjdCArIHN0YXJ0X29mZnNldDsKLSAgICBjb25zdCBVQ2hhciogcmVx
X2J5dGVfcHRyID0gc3RhcnRfbWF0Y2ggLSAxOworICAgIGNvbnN0IFVDaGFyKiBzdGFydE1hdGNo
ID0gc3ViamVjdCArIHN0YXJ0X29mZnNldDsKKyAgICBjb25zdCBVQ2hhciogcmVxQnl0ZVB0ciA9
IHN0YXJ0TWF0Y2ggLSAxOwogICAgIGJvb2wgdXNlTXVsdGlMaW5lRmlyc3RDaGFyT3B0aW1pemF0
aW9uID0gcmUtPm9wdGlvbnMgJiBVc2VNdWx0aUxpbmVGaXJzdEJ5dGVPcHRpbWl6YXRpb25PcHRp
b247CiAgICAgCiAgICAgZG8gewogICAgICAgICAvKiBSZXNldCB0aGUgbWF4aW11bSBudW1iZXIg
b2YgZXh0cmFjdGlvbnMgd2UgbWlnaHQgc2VlLiAqLwotICAgICAgICBpZiAobWF0Y2hfYmxvY2su
b2Zmc2V0X3ZlY3RvcikgewotICAgICAgICAgICAgaW50KiBpcHRyID0gbWF0Y2hfYmxvY2sub2Zm
c2V0X3ZlY3RvcjsKKyAgICAgICAgaWYgKG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yKSB7CisgICAg
ICAgICAgICBpbnQqIGlwdHIgPSBtYXRjaEJsb2NrLm9mZnNldFZlY3RvcjsKICAgICAgICAgICAg
IGludCogaWVuZCA9IGlwdHIgKyByZXNldGNvdW50OwogICAgICAgICAgICAgd2hpbGUgKGlwdHIg
PCBpZW5kKQogICAgICAgICAgICAgICAgICppcHRyKysgPSAtMTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgdHJ5Rmlyc3RCeXRlT3B0aW1pemF0aW9uKHN0YXJ0X21hdGNoLCBlbmRfc3Vi
amVjdCwgZmlyc3RfYnl0ZSwgZmlyc3RfYnl0ZV9jYXNlbGVzcywgdXNlTXVsdGlMaW5lRmlyc3RD
aGFyT3B0aW1pemF0aW9uLCBtYXRjaF9ibG9jay5zdGFydF9zdWJqZWN0ICsgc3RhcnRfb2Zmc2V0
KTsKLSAgICAgICAgaWYgKHRyeVJlcXVpcmVkQnl0ZU9wdGltaXphdGlvbihzdGFydF9tYXRjaCwg
ZW5kX3N1YmplY3QsIHJlcV9ieXRlLCByZXFfYnl0ZTIsIHJlcV9ieXRlX2Nhc2VsZXNzLCBmaXJz
dF9ieXRlID49IDAsIHJlcV9ieXRlX3B0cikpCisgICAgICAgIHRyeUZpcnN0Qnl0ZU9wdGltaXph
dGlvbihzdGFydE1hdGNoLCBlbmRTdWJqZWN0LCBmaXJzdF9ieXRlLCBmaXJzdF9ieXRlX2Nhc2Vs
ZXNzLCB1c2VNdWx0aUxpbmVGaXJzdENoYXJPcHRpbWl6YXRpb24sIG1hdGNoQmxvY2suc3RhcnRT
dWJqZWN0ICsgc3RhcnRfb2Zmc2V0KTsKKyAgICAgICAgaWYgKHRyeVJlcXVpcmVkQnl0ZU9wdGlt
aXphdGlvbihzdGFydE1hdGNoLCBlbmRTdWJqZWN0LCByZXFfYnl0ZSwgcmVxX2J5dGUyLCByZXFf
Ynl0ZV9jYXNlbGVzcywgZmlyc3RfYnl0ZSA+PSAwLCByZXFCeXRlUHRyKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvKiBXaGVuIGEgbWF0Y2ggb2NjdXJz
LCBzdWJzdHJpbmdzIHdpbGwgYmUgc2V0IGZvciBhbGwgaW50ZXJuYWwgZXh0cmFjdGlvbnM7CkBA
IC0yMDcyLDE1ICsyMDExLDE1IEBAIGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAq
IHJlLAogICAgICAgICAgaWYgY2VydGFpbiBwYXJ0cyBvZiB0aGUgcGF0dGVybiB3ZXJlIG5vdCB1
c2VkLiAqLwogICAgICAgICAKICAgICAgICAgLyogVGhlIGNvZGUgc3RhcnRzIGFmdGVyIHRoZSBK
U1JlZ0V4cCBibG9jayBhbmQgdGhlIGNhcHR1cmUgbmFtZSB0YWJsZS4gKi8KLSAgICAgICAgY29u
c3QgdXNjaGFyKiBzdGFydF9jb2RlID0gKGNvbnN0IHVzY2hhciopKHJlICsgMSk7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0YXJ0X2NvZGUgPSAoY29uc3QgdW5zaWduZWQgY2hhciop
KHJlICsgMSk7CiAgICAgICAgIAotICAgICAgICBpbnQgcmV0dXJuQ29kZSA9IG1hdGNoKHN0YXJ0
X21hdGNoLCBzdGFydF9jb2RlLCAyLCBtYXRjaF9ibG9jayk7CisgICAgICAgIGludCByZXR1cm5D
b2RlID0gbWF0Y2goc3RhcnRNYXRjaCwgc3RhcnRfY29kZSwgMiwgbWF0Y2hCbG9jayk7CiAgICAg
ICAgIAogICAgICAgICAvKiBXaGVuIHRoZSByZXN1bHQgaXMgbm8gbWF0Y2gsIGFkdmFuY2UgdGhl
IHBvaW50ZXIgdG8gdGhlIG5leHQgY2hhcmFjdGVyCiAgICAgICAgICBhbmQgY29udGludWUuICov
CiAgICAgICAgIAogICAgICAgICBpZiAocmV0dXJuQ29kZSA9PSBNQVRDSF9OT01BVENIKSB7Ci0g
ICAgICAgICAgICBzdGFydF9tYXRjaCsrOworICAgICAgICAgICAgc3RhcnRNYXRjaCsrOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDk0LDMyICsyMDMz
LDMyIEBAIGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgICAgICAK
ICAgICAgICAgaWYgKHVzaW5nX3RlbXBvcmFyeV9vZmZzZXRzKSB7CiAgICAgICAgICAgICBpZiAo
b2Zmc2V0Y291bnQgPj0gNCkgewotICAgICAgICAgICAgICAgIG1lbWNweShvZmZzZXRzICsgMiwg
bWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciArIDIsIChvZmZzZXRjb3VudCAtIDIpICogc2l6ZW9m
KGludCkpOworICAgICAgICAgICAgICAgIG1lbWNweShvZmZzZXRzICsgMiwgbWF0Y2hCbG9jay5v
ZmZzZXRWZWN0b3IgKyAyLCAob2Zmc2V0Y291bnQgLSAyKSAqIHNpemVvZihpbnQpKTsKICAgICAg
ICAgICAgICAgICBEUFJJTlRGKCgiQ29waWVkIG9mZnNldHMgZnJvbSB0ZW1wb3JhcnkgbWVtb3J5
XG4iKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWF0Y2hfYmxvY2suZW5kX29m
ZnNldF90b3AgPiBvZmZzZXRjb3VudCkKLSAgICAgICAgICAgICAgICBtYXRjaF9ibG9jay5vZmZz
ZXRfb3ZlcmZsb3cgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1hdGNoQmxvY2suZW5kT2Zmc2V0
VG9wID4gb2Zmc2V0Y291bnQpCisgICAgICAgICAgICAgICAgbWF0Y2hCbG9jay5vZmZzZXRPdmVy
ZmxvdyA9IHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIERQUklOVEYoKCJGcmVlaW5n
IHRlbXBvcmFyeSBtZW1vcnlcbiIpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBbXSBtYXRjaF9ibG9j
ay5vZmZzZXRfdmVjdG9yOworICAgICAgICAgICAgZGVsZXRlIFtdIG1hdGNoQmxvY2sub2Zmc2V0
VmVjdG9yOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm5Db2RlID0gbWF0Y2hf
YmxvY2sub2Zmc2V0X292ZXJmbG93ID8gMCA6IG1hdGNoX2Jsb2NrLmVuZF9vZmZzZXRfdG9wIC8g
MjsKKyAgICAgICAgcmV0dXJuQ29kZSA9IG1hdGNoQmxvY2sub2Zmc2V0T3ZlcmZsb3cgPyAwIDog
bWF0Y2hCbG9jay5lbmRPZmZzZXRUb3AgLyAyOwogICAgICAgICAKICAgICAgICAgaWYgKG9mZnNl
dGNvdW50IDwgMikKICAgICAgICAgICAgIHJldHVybkNvZGUgPSAwOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIG9mZnNldHNbMF0gPSBzdGFydF9tYXRjaCAtIG1hdGNoX2Jsb2NrLnN0YXJ0
X3N1YmplY3Q7Ci0gICAgICAgICAgICBvZmZzZXRzWzFdID0gbWF0Y2hfYmxvY2suZW5kX21hdGNo
X3B0ciAtIG1hdGNoX2Jsb2NrLnN0YXJ0X3N1YmplY3Q7CisgICAgICAgICAgICBvZmZzZXRzWzBd
ID0gc3RhcnRNYXRjaCAtIG1hdGNoQmxvY2suc3RhcnRTdWJqZWN0OworICAgICAgICAgICAgb2Zm
c2V0c1sxXSA9IG1hdGNoQmxvY2suZW5kTWF0Y2hQdHIgLSBtYXRjaEJsb2NrLnN0YXJ0U3ViamVj
dDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRFBSSU5URigoIj4+Pj4gcmV0dXJuaW5n
ICVkXG4iLCByYykpOwogICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgICB9IHdoaWxlIChz
dGFydF9tYXRjaCA8PSBlbmRfc3ViamVjdCk7CisgICAgfSB3aGlsZSAoc3RhcnRNYXRjaCA8PSBl
bmRTdWJqZWN0KTsKICAgICAKICAgICBpZiAodXNpbmdfdGVtcG9yYXJ5X29mZnNldHMpIHsKICAg
ICAgICAgRFBSSU5URigoIkZyZWVpbmcgdGVtcG9yYXJ5IG1lbW9yeVxuIikpOwotICAgICAgICBk
ZWxldGUgW10gbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcjsKKyAgICAgICAgZGVsZXRlIFtdIG1h
dGNoQmxvY2sub2Zmc2V0VmVjdG9yOwogICAgIH0KICAgICAKICAgICBEUFJJTlRGKCgiPj4+PiBy
ZXR1cm5pbmcgUENSRV9FUlJPUl9OT01BVENIXG4iKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
Y3JlL3BjcmVfaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3Bj
cmVfaW50ZXJuYWwuaAkocmV2aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3Bj
cmVfaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMzQgKzc2LDE0IEBAIHRvdGFsIGxl
bmd0aC4gKi8KICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KQogI2VuZGlmCiAKKyNpbmNs
dWRlICJwY3JlLmgiCisKIC8qIFRoZSB2YWx1ZSBvZiBMSU5LX1NJWkUgZGV0ZXJtaW5lcyB0aGUg
bnVtYmVyIG9mIGJ5dGVzIHVzZWQgdG8gc3RvcmUgbGlua3MgYXMKIG9mZnNldHMgd2l0aGluIHRo
ZSBjb21waWxlZCByZWdleC4gVGhlIGRlZmF1bHQgaXMgMiwgd2hpY2ggYWxsb3dzIGZvciBjb21w
aWxlZAotcGF0dGVybnMgdXAgdG8gNjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0IG1ham9y
aXR5IG9mIGNhc2VzLiBIb3dldmVyLCBQQ1JFCi1jYW4gYWxzbyBiZSBjb21waWxlZCB0byB1c2Ug
MyBvciA0IGJ5dGVzIGluc3RlYWQuIFRoaXMgYWxsb3dzIGZvciBsb25nZXIKLXBhdHRlcm5zIGlu
IGV4dHJlbWUgY2FzZXMuIE9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LCAiY29uZmlndXJlIiBj
YW4gYmUgdXNlZAotdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LiAqLworcGF0dGVybnMgdXAgdG8g
NjRLIGxvbmcuICovCiAKICNkZWZpbmUgTElOS19TSVpFICAgMgogCi0vKiBUaGUgYmVsb3cgbGlt
aXQgcmVzdHJpY3RzIHRoZSBudW1iZXIgb2YgcmVjdXJzaXZlIG1hdGNoIGNhbGxzIGluIG9yZGVy
IHRvCi1saW1pdCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3RhY2sgKG9yIGhlYXAsIGlmIE5PX1JF
Q1VSU0UgaXMgZGVmaW5lZCkgdGhhdCBpcyB1c2VkLiBUaGUKLXZhbHVlIG9mIE1BVENIX0xJTUlU
X1JFQ1VSU0lPTiBhcHBsaWVzIG9ubHkgdG8gcmVjdXJzaXZlIGNhbGxzIG9mIG1hdGNoKCkuCi0g
Ci0gVGhpcyBsaW1pdCBpcyB0aWVkIHRvIHRoZSBzaXplIG9mIE1hdGNoRnJhbWUuICBSaWdodCBu
b3cgd2UgYWxsb3cgUENSRSB0byBhbGxvY2F0ZSB1cAotIHRvIE1BVENIX0xJTUlUX1JFQ1VSU0lP
TiAtIDE2ICogc2l6ZW9mKE1hdGNoRnJhbWUpIGJ5dGVzIG9mICJzdGFjayIgc3BhY2UgYmVmb3Jl
IHdlIGdpdmUgdXAuCi0gQ3VycmVudGx5IHRoYXQncyAxMDAwMDAgLSAxNiAqICgyMyAqIDQpICB+
IDkwTUIKLSAqLwotCi0jZGVmaW5lIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiAxMDAwMDAKLQotI2Rl
ZmluZSBfcGNyZV9kZWZhdWx0X3RhYmxlcyBranNfcGNyZV9kZWZhdWx0X3RhYmxlcwotI2RlZmlu
ZSBfcGNyZV9vcmQydXRmOCBranNfcGNyZV9vcmQydXRmOAotI2RlZmluZSBfcGNyZV91dGY4X3Rh
YmxlMSBranNfcGNyZV91dGY4X3RhYmxlMQotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMiBranNf
cGNyZV91dGY4X3RhYmxlMgotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMyBranNfcGNyZV91dGY4
X3RhYmxlMwotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlNCBranNfcGNyZV91dGY4X3RhYmxlNAot
I2RlZmluZSBfcGNyZV94Y2xhc3Mga2pzX3BjcmVfeGNsYXNzCi0KIC8qIERlZmluZSBERUJVRyB0
byBnZXQgZGVidWdnaW5nIG91dHB1dCBvbiBzdGRvdXQuICovCiAKICNpZiAwCkBAIC0xMjEsMTE4
ICsxMDEsNzIgQEAgYWxsLCBpdCBoYWQgb25seSBiZWVuIGFib3V0IDEwIHllYXJzIHRoZQogI2Rl
ZmluZSBEUFJJTlRGKHApIC8qbm90aGluZyovCiAjZW5kaWYKIAotLyogU3RhbmRhcmQgQyBoZWFk
ZXJzIHBsdXMgdGhlIGV4dGVybmFsIGludGVyZmFjZSBkZWZpbml0aW9uLiBUaGUgb25seSB0aW1l
Ci1zZXRqbXAgYW5kIHN0ZGFyZyBhcmUgdXNlZCBpcyB3aGVuIE5PX1JFQ1VSU0UgaXMgc2V0LiAq
LwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxz
ZXRqbXAuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
Ci0vKiBJbmNsdWRlIHRoZSBwdWJsaWMgUENSRSBoZWFkZXIgYW5kIHRoZSBkZWZpbml0aW9ucyBv
ZiBVQ1AgY2hhcmFjdGVyIHByb3BlcnR5Ci12YWx1ZXMuICovCi0KLSNpbmNsdWRlICJwY3JlLmgi
Ci0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGNyZV91aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVk
IHBjcmVfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVzY2hhcjsKLQogLyogUENSRSBr
ZWVwcyBvZmZzZXRzIGluIGl0cyBjb21waWxlZCBjb2RlIGFzIDItYnl0ZSBxdWFudGl0aWVzIChh
bHdheXMgc3RvcmVkCiBpbiBiaWctZW5kaWFuIG9yZGVyKSBieSBkZWZhdWx0LiBUaGVzZSBhcmUg
dXNlZCwgZm9yIGV4YW1wbGUsIHRvIGxpbmsgZnJvbSB0aGUKIHN0YXJ0IG9mIGEgc3VicGF0dGVy
biB0byBpdHMgYWx0ZXJuYXRpdmVzIGFuZCBpdHMgZW5kLiBUaGUgdXNlIG9mIDIgYnl0ZXMgcGVy
CiBvZmZzZXQgbGltaXRzIHRoZSBzaXplIG9mIHRoZSBjb21waWxlZCByZWdleCB0byBhcm91bmQg
NjRLLCB3aGljaCBpcyBiaWcgZW5vdWdoCiBmb3IgYWxtb3N0IGV2ZXJ5Ym9keS4gSG93ZXZlciwg
SSByZWNlaXZlZCBhIHJlcXVlc3QgZm9yIGFuIGV2ZW4gYmlnZ2VyIGxpbWl0LgogRm9yIHRoaXMg
cmVhc29uLCBhbmQgYWxzbyB0byBtYWtlIHRoZSBjb2RlIGVhc2llciB0byBtYWludGFpbiwgdGhl
IHN0b3JpbmcgYW5kCi1sb2FkaW5nIG9mIG9mZnNldHMgZnJvbSB0aGUgYnl0ZSBzdHJpbmcgaXMg
bm93IGhhbmRsZWQgYnkgdGhlIG1hY3JvcyB0aGF0IGFyZQotZGVmaW5lZCBoZXJlLgotCi1UaGUg
bWFjcm9zIGFyZSBjb250cm9sbGVkIGJ5IHRoZSB2YWx1ZSBvZiBMSU5LX1NJWkUuIFRoaXMgZGVm
YXVsdHMgdG8gMiBpbgotdGhlIGNvbmZpZy5oIGZpbGUsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBi
eSB1c2luZyAtRCBvbiB0aGUgY29tbWFuZCBsaW5lLiBUaGlzCi1pcyBhdXRvbWF0ZWQgb24gVW5p
eCBzeXN0ZW1zIHZpYSB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4gKi8KK2xvYWRpbmcgb2Ygb2Zm
c2V0cyBmcm9tIHRoZSBieXRlIHN0cmluZyBpcyBub3cgaGFuZGxlZCBieSB0aGUgZnVuY3Rpb25z
IHRoYXQgYXJlCitkZWZpbmVkIGhlcmUuICovCiAKLSNpZiBMSU5LX1NJWkUgPT0gMgotCi1zdGF0
aWMgaW5saW5lIHZvaWQgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldCh1c2NoYXIqIG9wY29kZVB0ciwg
c2l6ZV90IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCi17Ci0gICAgb3Bjb2RlUHRyW29m
ZnNldF0gPSB2YWx1ZSA+PiA4OwotICAgIG9wY29kZVB0cltvZmZzZXQgKyAxXSA9IHZhbHVlICYg
MjU1OwotfQorLyogUENSRSB1c2VzIHNvbWUgb3RoZXIgMi1ieXRlIHF1YW50aXRpZXMgdGhhdCBk
byBub3QgY2hhbmdlIHdoZW4gdGhlIHNpemUgb2YKK29mZnNldHMgY2hhbmdlcy4gVGhlcmUgYXJl
IHVzZWQgZm9yIHJlcGVhdCBjb3VudHMgYW5kIGZvciBvdGhlciB0aGluZ3Mgc3VjaCBhcworY2Fw
dHVyaW5nIHBhcmVudGhlc2lzIG51bWJlcnMgaW4gYmFjayByZWZlcmVuY2VzLiAqLwogCi1zdGF0
aWMgaW5saW5lIHNob3J0IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29uc3QgdXNjaGFyKiBvcGNv
ZGVQdHIsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVWYWx1ZSh1
bnNpZ25lZCBjaGFyKiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKChvcGNv
ZGVQdHJbb2Zmc2V0XSA8PCA4KSB8IG9wY29kZVB0cltvZmZzZXQgKyAxXSk7CisgICAgQVNTRVJU
KHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMHhGRkZGKTsKKyAgICBvcGNvZGVQdHJbMF0gPSB2YWx1
ZSA+PiA4OworICAgIG9wY29kZVB0clsxXSA9IHZhbHVlOwogfQogCi0jZGVmaW5lIE1BWF9QQVRU
RVJOX1NJWkUgKDEgPDwgMTYpCi0KLSNlbGlmIExJTktfU0laRSA9PSAzCi0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBwdXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHVzY2hhciogb3Bjb2RlUHRyLCBzaXplX3Qg
b2Zmc2V0LCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGdldDJCeXRlVmFsdWUo
Y29uc3QgdW5zaWduZWQgY2hhciogb3Bjb2RlUHRyKQogewotICAgIEFTU0VSVCghKHZhbHVlICYg
MHhGRjAwMDAwMCkpOyAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgYWxsb3dzIHZhbHVlcyA8IDJeMjQK
LSAgICBvcGNvZGVQdHJbb2Zmc2V0XSA9IHZhbHVlID4+IDE2OwotICAgIG9wY29kZVB0cltvZmZz
ZXQgKyAxXSA9IHZhbHVlID4+IDg7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDJdID0gdmFsdWUg
JiAyNTU7CisgICAgcmV0dXJuIChvcGNvZGVQdHJbMF0gPDwgOCkgfCBvcGNvZGVQdHJbMV07CiB9
CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29uc3QgdXNjaGFy
KiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVW
YWx1ZUFuZEFkdmFuY2UodW5zaWduZWQgY2hhciomIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewot
ICAgIHJldHVybiAoKG9wY29kZVB0cltvZmZzZXRdIDw8IDE2KSB8IChvcGNvZGVQdHJbb2Zmc2V0
ICsgMV0gPDwgOCkgfCBvcGNvZGVQdHJbb2Zmc2V0ICsgMl0pOworICAgIHB1dDJCeXRlVmFsdWUo
b3Bjb2RlUHRyLCB2YWx1ZSk7CisgICAgb3Bjb2RlUHRyICs9IDI7CiB9CiAKLSNkZWZpbmUgTUFY
X1BBVFRFUk5fU0laRSAoMSA8PCAyNCkKLQotI2VsaWYgTElOS19TSVpFID09IDQKLQotc3RhdGlj
IGlubGluZSB2b2lkIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQodXNjaGFyKiBvcGNvZGVQdHIsIHNp
emVfdCBvZmZzZXQsIHVuc2lnbmVkIHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtW
YWx1ZUFsbG93WmVybyh1bnNpZ25lZCBjaGFyKiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAg
ICBvcGNvZGVQdHJbb2Zmc2V0XSA9IHZhbHVlID4+IDI0OwotICAgIG9wY29kZVB0cltvZmZzZXQg
KyAxXSA9IHZhbHVlID4+IDE2OwotICAgIG9wY29kZVB0cltvZmZzZXQgKyAyXSA9IHZhbHVlID4+
IDg7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDNdID0gdmFsdWUgJiAyNTU7CisgICAgcHV0MkJ5
dGVWYWx1ZShvcGNvZGVQdHIsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2V0T3Bj
b2RlVmFsdWVBdE9mZnNldChjb25zdCB1c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCkK
K3N0YXRpYyBpbmxpbmUgaW50IGdldExpbmtWYWx1ZUFsbG93WmVybyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBvcGNvZGVQdHIpCiB7Ci0gICAgcmV0dXJuICgob3Bjb2RlUHRyW29mZnNldF0gPDwgMjQp
IHwgKG9wY29kZVB0cltvZmZzZXQgKyAxXSA8PCAxNikgfCAob3Bjb2RlUHRyW29mZnNldCArIDJd
IDw8IDgpIHwgb3Bjb2RlUHRyW29mZnNldCArIDNdKTsKKyAgICByZXR1cm4gZ2V0MkJ5dGVWYWx1
ZShvcGNvZGVQdHIpOwogfQogCi0jZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMzApICAg
LyogS2VlcCBpdCBwb3NpdGl2ZSAqLwotCi0jZWxzZQotI2Vycm9yIExJTktfU0laRSBtdXN0IGJl
IGVpdGhlciAyLCAzLCBvciA0Ci0jZW5kaWYKKyNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8
PCAxNikKIAotc3RhdGljIGlubGluZSB2b2lkIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZh
bmNlKHVzY2hhciomIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFs
dWUpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0TGlua1ZhbHVlKHVuc2lnbmVkIGNoYXIqIG9wY29k
ZVB0ciwgaW50IHZhbHVlKQogewotICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQob3Bjb2RlUHRy
LCBvZmZzZXQsIHZhbHVlKTsKLSAgICBvcGNvZGVQdHIgKz0gTElOS19TSVpFOworICAgIEFTU0VS
VCh2YWx1ZSk7CisgICAgcHV0TGlua1ZhbHVlQWxsb3daZXJvKG9wY29kZVB0ciwgdmFsdWUpOwog
fQogCi0vKiBQQ1JFIHVzZXMgc29tZSBvdGhlciAyLWJ5dGUgcXVhbnRpdGllcyB0aGF0IGRvIG5v
dCBjaGFuZ2Ugd2hlbiB0aGUgc2l6ZSBvZgotb2Zmc2V0cyBjaGFuZ2VzLiBUaGVyZSBhcmUgdXNl
ZCBmb3IgcmVwZWF0IGNvdW50cyBhbmQgZm9yIG90aGVyIHRoaW5ncyBzdWNoIGFzCi1jYXB0dXJp
bmcgcGFyZW50aGVzaXMgbnVtYmVycyBpbiBiYWNrIHJlZmVyZW5jZXMuICovCi0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQodXNjaGFyKiBvcGNvZGVQdHIs
IHNpemVfdCBvZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQg
Z2V0TGlua1ZhbHVlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0cikKIHsKLSAgICBvcGNv
ZGVQdHJbb2Zmc2V0XSA9IHZhbHVlID4+IDg7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDFdID0g
dmFsdWUgJiAyNTU7CisgICAgaW50IHZhbHVlID0gZ2V0TGlua1ZhbHVlQWxsb3daZXJvKG9wY29k
ZVB0cik7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgc2hvcnQgZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNvbnN0IHVzY2hhciog
b3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtWYWx1
ZUFuZEFkdmFuY2UodW5zaWduZWQgY2hhciomIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewotICAg
IHJldHVybiAoKG9wY29kZVB0cltvZmZzZXRdIDw8IDgpIHwgb3Bjb2RlUHRyW29mZnNldCArIDFd
KTsKKyAgICBwdXRMaW5rVmFsdWUob3Bjb2RlUHRyLCB2YWx1ZSk7CisgICAgb3Bjb2RlUHRyICs9
IExJTktfU0laRTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHB1dDJCeXRlT3Bjb2RlVmFsdWVB
dE9mZnNldEFuZEFkdmFuY2UodXNjaGFyKiYgb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNp
Z25lZCBzaG9ydCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRMaW5rVmFsdWVBbGxvd1pl
cm9BbmRBZHZhbmNlKHVuc2lnbmVkIGNoYXIqJiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAg
ICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQob3Bjb2RlUHRyLCBvZmZzZXQsIHZhbHVlKTsK
LSAgICBvcGNvZGVQdHIgKz0gMjsKKyAgICBwdXRMaW5rVmFsdWVBbGxvd1plcm8ob3Bjb2RlUHRy
LCB2YWx1ZSk7CisgICAgb3Bjb2RlUHRyICs9IExJTktfU0laRTsKIH0KIAogLy8gRklYTUU6IFRo
ZXNlIGFyZSByZWFsbHkgbW9yZSBvZiBhICJjb21waWxlZCByZWdleHAgc3RhdGUiIHRoYW4gInJl
Z2V4cCBvcHRpb25zIgpAQCAtMjQ1LDE2ICsxNzksNiBAQCBlbnVtIFJlZ0V4cE9wdGlvbnMgewog
ICAgIE1hdGNoQWNyb3NzTXVsdGlwbGVMaW5lc09wdGlvbiA9IDB4MDAwMDAwMDIKIH07CiAKLS8q
IE5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2YXJpYWJsZXMg
Ki8KLQotI2RlZmluZSBSRVFfVU5TRVQgKC0yKQotI2RlZmluZSBSRVFfTk9ORSAgKC0xKQotCi0v
KiBUaGUgbWF4aW11bSByZW1haW5pbmcgbGVuZ3RoIG9mIHN1YmplY3Qgd2UgYXJlIHByZXBhcmVk
IHRvIHNlYXJjaCBmb3IgYQotcmVxX2J5dGUgbWF0Y2guICovCi0KLSNkZWZpbmUgUkVRX0JZVEVf
TUFYIDEwMDAKLQogLyogRmxhZ3MgYWRkZWQgdG8gZmlyc3RieXRlIG9yIHJlcWJ5dGU7IGEgIm5v
bi1saXRlcmFsIiBpdGVtIGlzIGVpdGhlciBhCiB2YXJpYWJsZS1sZW5ndGggcmVwZWF0LCBvciBh
IGFueXRoaW5nIG90aGVyIHRoYW4gbGl0ZXJhbCBjaGFyYWN0ZXJzLiAqLwogCkBAIC0zNjYsOCAr
MjkwLDYgQEAgbXVzdCBhbHNvIGJlIHVwZGF0ZWQgdG8gbWF0Y2guICovCiAgICAgbWFjcm8oQVNT
RVJUKSBcCiAgICAgbWFjcm8oQVNTRVJUX05PVCkgXAogICAgIFwKLSAgICBtYWNybyhPTkNFKSBc
Ci0gICAgXAogICAgIG1hY3JvKEJSQVpFUk8pIFwKICAgICBtYWNybyhCUkFNSU5aRVJPKSBcCiAg
ICAgbWFjcm8oQlJBTlVNQkVSKSBcCkBAIC0zODEsNTcgKzMwMywxNSBAQCBzdHVkeS5jIHRoYXQg
YWxsIG9wY29kZXMgYXJlIGxlc3MgdGhhbiAxCiBjaGFyYWN0ZXIgc2VxdWVuY2VzIGVhc2llci4g
Ki8KIAogLyogVGhlIGhpZ2hlc3QgZXh0cmFjdGlvbiBudW1iZXIgYmVmb3JlIHdlIGhhdmUgdG8g
c3RhcnQgdXNpbmcgYWRkaXRpb25hbAotYnl0ZXMuIChPcmlnaW5hbGx5IFBDUkUgZGlkbid0IGhh
dmUgc3VwcG9ydCBmb3IgZXh0cmFjdGlvbiBjb3VudHMgaGlnaHRlciB0aGFuCitieXRlcy4gKE9y
aWdpbmFsbHkgUENSRSBkaWRuJ3QgaGF2ZSBzdXBwb3J0IGZvciBleHRyYWN0aW9uIGNvdW50cyBo
aWdoZXIgdGhhbgogdGhpcyBudW1iZXIuKSBUaGUgdmFsdWUgaXMgbGltaXRlZCBieSB0aGUgbnVt
YmVyIG9mIG9wY29kZXMgbGVmdCBhZnRlciBPUF9CUkEsCiBpLmUuIDI1NSAtIE9QX0JSQS4gV2Ug
YWN0dWFsbHkgc2V0IGl0IGEgYml0IGxvd2VyIHRvIGxlYXZlIHJvb20gZm9yIGFkZGl0aW9uYWwK
IG9wY29kZXMuICovCiAKLSNkZWZpbmUgRVhUUkFDVF9CQVNJQ19NQVggIDEwMAotCi0vKiBUaGlz
IG1hY3JvIGRlZmluZXMgdGhlIGxlbmd0aCBvZiBmaXhlZCBsZW5ndGggb3BlcmF0aW9ucyBpbiB0
aGUgY29tcGlsZWQKLXJlZ2V4LiBUaGUgbGVuZ3RocyBhcmUgdXNlZCB3aGVuIHNlYXJjaGluZyBm
b3Igc3BlY2lmaWMgdGhpbmdzLCBhbmQgYWxzbyBpbiB0aGUKLWRlYnVnZ2luZyBwcmludGluZyBv
ZiBhIGNvbXBpbGVkIHJlZ2V4LiBXZSB1c2UgYSBtYWNybyBzbyB0aGF0IGl0IGNhbiBiZQotZGVm
aW5lZCBjbG9zZSB0byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhlbXNlbHZlcy4K
LQotQXMgdGhpbmdzIGhhdmUgYmVlbiBleHRlbmRlZCwgc29tZSBvZiB0aGVzZSBhcmUgbm8gbG9u
Z2VyIGZpeGVkIGxlbnRocywgYnV0IGFyZQotbWluaW1hIGluc3RlYWQuIEZvciBleGFtcGxlLCB0
aGUgbGVuZ3RoIG9mIGEgc2luZ2xlLWNoYXJhY3RlciByZXBlYXQgbWF5IHZhcnkKLWluIFVURi04
IG1vZGUuIFRoZSBjb2RlIHRoYXQgdXNlcyB0aGlzIHRhYmxlIG11c3Qga25vdyBhYm91dCBzdWNo
IHRoaW5ncy4gKi8KLQotI2RlZmluZSBPUF9MRU5HVEhTIFwKLSAgMSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
IFwKLSAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgIC8qIFxCLCBcYiwgXEQsIFxkLCBc
UywgXHMsIFxXLCBcdyAgICAgICAgICovIFwKLSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIEFueSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwg
MSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF4sICQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovIFwKLSAgMiwgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENo
YXIsIENoYXJuYyAtIG1pbmltdW0gbGVuZ3RocyAgICAgICAgICovIFwKLSAgMiwgMiwgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXIgb3Igbm9uLWNhc2VkICAgICAgICAgICAg
ICAgICovIFwKLSAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgLyogUG9zaXRpdmUgc2luZ2xlLWNo
YXIgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiBUaGVzZSBhcmUgICovIFwK
LSAgMiwgMiwgMiwgMiwgMiwgMiwgICAgICAgICAgICAgIC8qICosICo/LCArLCArPywgPywgPz8g
ICAgICAqKiBtaW5pbWEgaW4gICovIFwKLSAgNCwgNCwgNCwgICAgICAgICAgICAgICAgICAgICAg
IC8qIHVwdG8sIG1pbnVwdG8sIGV4YWN0ICAgICAqKiBVVEYtOCBtb2RlICovIFwKLSAgLyogTmVn
YXRpdmUgc2luZ2xlLWNoYXIgcmVwZWF0cyAtIG9ubHkgZm9yIGNoYXJzIDwgMjU2ICAgICAgICAg
ICAgICAgICAgICovIFwKLSAgMiwgMiwgMiwgMiwgMiwgMiwgICAgICAgICAgICAgIC8qIE5PVCAq
LCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAgICAgICovIFwKLSAgNCwgNCwgNCwgICAgICAg
ICAgICAgICAgICAgICAgIC8qIE5PVCB1cHRvLCBtaW51cHRvLCBleGFjdCAgICAgICAgICAgICAg
ICovIFwKLSAgLyogUG9zaXRpdmUgdHlwZSByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMiwgMiwgMiwgMiwgMiwgMiwgICAgICAg
ICAgICAgIC8qIFR5cGUgKiwgKj8sICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICovIFwKLSAg
NCwgNCwgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgdXB0bywgbWludXB0bywgZXhh
Y3QgICAgICAgICAgICAgICovIFwKLSAgLyogQ2hhcmFjdGVyIGNsYXNzICYgcmVmIHJlcGVhdHMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwgMSwgMSwg
MSwgMSwgMSwgICAgICAgICAgICAgIC8qICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAg
ICAgICAgICovIFwKLSAgNSwgNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENSUkFOR0Us
IENSTUlOUkFOR0UgICAgICAgICAgICAgICAgICAgICovIFwKLSAzMywgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIENMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
IFwKLSAzMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5DTEFTUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIFhDTEFTUyAtIHZhcmlhYmxlIGxlbmd0aCAgICAgICAgICAgICAgICovIFwKLSAgMywg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAgLyog
QWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19T
SVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIEtldFJt
YXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwg
ICAgICAgICAgICAgICAgICAgLyogS2V0Um1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8gXAotICAxICsgTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAg
ICAgICAgICAgICAgIC8qIEFzc2VydCBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
IFwKLSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAgLyogT25jZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxLCAxLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogQlJBWkVSTywgQlJBTUlOWkVSTyAgICAgICAgICAgICAgICAgICAgKi8gXAotICAz
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlJBTlVNQkVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19TSVpFICAgICAgICAgICAgICAgICAgICAv
KiBCUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisvKiBGSVhNRTog
Tm90ZSB0aGF0IE9QX0JSQSArIDEwMCBpcyA+IDEyOCwgc28gdGhlIHR3byBjb21tZW50cyBhYm92
ZQorYXJlIGluIGNvbmZsaWN0ISAqLwogCisjZGVmaW5lIEVYVFJBQ1RfQkFTSUNfTUFYICAxMDAK
IAogLyogVGhlIGluZGV4IG9mIG5hbWVzIGFuZCB0aGUKIGNvZGUgdmVjdG9yIHJ1biBvbiBhcyBs
b25nIGFzIG5lY2Vzc2FyeSBhZnRlciB0aGUgZW5kLiBXZSBzdG9yZSBhbiBleHBsaWNpdApAQCAt
NDQyLDE2ICszMjIsMTMgQEAgcG9pbnRlciB0aGF0IGlzIGFsd2F5cyBOVUxMLgogKi8KIAogc3Ry
dWN0IEpTUmVnRXhwIHsKLSAgICBwY3JlX3VpbnQzMiBvcHRpb25zOworICAgIHVuc2lnbmVkIG9w
dGlvbnM7CiAKLSAgICBwY3JlX3VpbnQxNiB0b3BfYnJhY2tldDsKLSAgICBwY3JlX3VpbnQxNiB0
b3BfYmFja3JlZjsKKyAgICB1bnNpZ25lZCBzaG9ydCB0b3BfYnJhY2tldDsKKyAgICB1bnNpZ25l
ZCBzaG9ydCB0b3BfYmFja3JlZjsKICAgICAKLSAgICAvLyBqc1JlZ0V4cEV4ZWN1dGUgJiYganNS
ZWdFeHBDb21waWxlIGN1cnJlbnRseSBvbmx5IGhvdyB0byBoYW5kbGUgQVNDSUkKLSAgICAvLyBj
aGFycyBmb3IgdGhzZSBvcHRpbWl6YXRpb25zLCBob3dldmVyIGl0IHdvdWxkIGJlIHRyaXZpYWwg
dG8gYWRkIHN1cHBvcnQKLSAgICAvLyBmb3Igb3B0aW1pemVkIFVDaGFyIGZpcnN0X2J5dGUvcmVx
X2J5dGUgc2NhbnMKLSAgICBwY3JlX3VpbnQxNiBmaXJzdF9ieXRlOwotICAgIHBjcmVfdWludDE2
IHJlcV9ieXRlOworICAgIHVuc2lnbmVkIHNob3J0IGZpcnN0X2J5dGU7CisgICAgdW5zaWduZWQg
c2hvcnQgcmVxX2J5dGU7CiB9OwogCiAvKiBJbnRlcm5hbCBzaGFyZWQgZGF0YSB0YWJsZXMuIFRo
ZXNlIGFyZSB0YWJsZXMgdGhhdCBhcmUgdXNlZCBieSBtb3JlIHRoYW4gb25lCkBAIC00NTksNzMg
KzMzNiw4MiBAQCBzdHJ1Y3QgSlNSZWdFeHAgewogIGJ1dCBhcmUgbm90IHBhcnQgb2YgdGhlIFBD
UkUgcHVibGljIEFQSS4gVGhlIGRhdGEgZm9yIHRoZXNlIHRhYmxlcyBpcyBpbiB0aGUKICBwY3Jl
X3RhYmxlcy5jIG1vZHVsZS4gKi8KIAotI2RlZmluZSBfcGNyZV91dGY4X3RhYmxlMV9zaXplIDYK
KyNkZWZpbmUga2pzX3BjcmVfdXRmOF90YWJsZTFfc2l6ZSA2CiAKLWV4dGVybiBjb25zdCBpbnQg
ICAgX3BjcmVfdXRmOF90YWJsZTFbNl07Ci1leHRlcm4gY29uc3QgaW50ICAgIF9wY3JlX3V0Zjhf
dGFibGUyWzZdOwotZXh0ZXJuIGNvbnN0IGludCAgICBfcGNyZV91dGY4X3RhYmxlM1s2XTsKLWV4
dGVybiBjb25zdCB1c2NoYXIgX3BjcmVfdXRmOF90YWJsZTRbMHg0MF07CitleHRlcm4gY29uc3Qg
aW50ICAgIGtqc19wY3JlX3V0ZjhfdGFibGUxWzZdOworZXh0ZXJuIGNvbnN0IGludCAgICBranNf
cGNyZV91dGY4X3RhYmxlMls2XTsKK2V4dGVybiBjb25zdCBpbnQgICAga2pzX3BjcmVfdXRmOF90
YWJsZTNbNl07CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBranNfcGNyZV91dGY4X3RhYmxl
NFsweDQwXTsKIAotZXh0ZXJuIGNvbnN0IHVzY2hhciBfcGNyZV9kZWZhdWx0X3RhYmxlc1t0YWJs
ZXNfbGVuZ3RoXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGtqc19wY3JlX2RlZmF1bHRf
dGFibGVzW3RhYmxlc19sZW5ndGhdOwogCi1zdGF0aWMgaW5saW5lIHVzY2hhciB0b0xvd2VyQ2Fz
ZSh1c2NoYXIgYykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB0b0xvd2VyQ2FzZSh1bnNp
Z25lZCBjaGFyIGMpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHVzY2hhciogbG93ZXJDYXNlQ2hhcnMg
PSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGxjY19vZmZzZXQ7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGxvd2VyQ2FzZUNoYXJzID0ga2pzX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBs
Y2Nfb2Zmc2V0OwogICAgIHJldHVybiBsb3dlckNhc2VDaGFyc1tjXTsKIH0KIAotc3RhdGljIGlu
bGluZSB1c2NoYXIgZmxpcENhc2UodXNjaGFyIGMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNo
YXIgZmxpcENhc2UodW5zaWduZWQgY2hhciBjKQogewotICAgIHN0YXRpYyBjb25zdCB1c2NoYXIq
IGZsaXBwZWRDYXNlQ2hhcnMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGZjY19vZmZzZXQ7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZsaXBwZWRDYXNlQ2hhcnMgPSBranNfcGNy
ZV9kZWZhdWx0X3RhYmxlcyArIGZjY19vZmZzZXQ7CiAgICAgcmV0dXJuIGZsaXBwZWRDYXNlQ2hh
cnNbY107CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNjaGFyIGNsYXNzQml0bWFwRm9yQ2hhcih1c2No
YXIgYykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbGFzc0JpdG1hcEZvckNoYXIodW5z
aWduZWQgY2hhciBjKQogewotICAgIHN0YXRpYyBjb25zdCB1c2NoYXIqIGNoYXJDbGFzc0JpdG1h
cHMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGNiaXRzX29mZnNldDsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciogY2hhckNsYXNzQml0bWFwcyA9IGtqc19wY3JlX2RlZmF1bHRfdGFi
bGVzICsgY2JpdHNfb2Zmc2V0OwogICAgIHJldHVybiBjaGFyQ2xhc3NCaXRtYXBzW2NdOwogfQog
Ci1zdGF0aWMgaW5saW5lIHVzY2hhciBjaGFyVHlwZUZvckNoYXIodXNjaGFyIGMpCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGNoYXIgY2hhclR5cGVGb3JDaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsK
LSAgICBjb25zdCB1c2NoYXIqIGNoYXJUeXBlTWFwID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBj
dHlwZXNfb2Zmc2V0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNoYXJUeXBlTWFwID0ga2pz
X3BjcmVfZGVmYXVsdF90YWJsZXMgKyBjdHlwZXNfb2Zmc2V0OwogICAgIHJldHVybiBjaGFyVHlw
ZU1hcFtjXTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzV29yZENoYXIoVUNoYXIgYykKIHsK
LSAgICAvKiBVVEY4IENoYXJhY3RlcnMgPiAxMjggYXJlIGFzc3VtZWQgdG8gYmUgIm5vbi13b3Jk
IiBjaGFyYWN0ZXJzLiAqLwotICAgIHJldHVybiAoYyA8IDEyOCAmJiAoY2hhclR5cGVGb3JDaGFy
KGMpICYgY3R5cGVfd29yZCkpOworICAgIHJldHVybiBjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNo
YXIoYykgJiBjdHlwZV93b3JkKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VDaGFy
KFVDaGFyIGMpCiB7Ci0gICAgcmV0dXJuIChjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNoYXIoYykg
JiBjdHlwZV9zcGFjZSkpOworICAgIHJldHVybiBjIDwgMTI4ICYmIChjaGFyVHlwZUZvckNoYXIo
YykgJiBjdHlwZV9zcGFjZSk7CiB9CiAKLS8qIEludGVybmFsIHNoYXJlZCBmdW5jdGlvbnMuIFRo
ZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBieSBtb3JlIHRoYW4KLW9uZSBvZiB0aGUg
ZXhwb3J0ZWQgcHVibGljIGZ1bmN0aW9ucy4gVGhleSBoYXZlIHRvIGJlICJleHRlcm5hbCIgaW4g
dGhlIEMKLXNlbnNlLCBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuICov
Ci0KLWV4dGVybiBpbnQgICAgICAgICBfcGNyZV91Y3Bfb3RoZXJjYXNlKGNvbnN0IHVuc2lnbmVk
IGludCk7Ci1leHRlcm4gYm9vbCAgICAgICAgX3BjcmVfeGNsYXNzKGludCwgY29uc3QgdXNjaGFy
Kik7Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc05ld2xpbmUoVUNoYXIgbmwpCiB7CiAgICAgcmV0
dXJuIChubCA9PSAweEEgfHwgbmwgPT0gMHhEIHx8IG5sID09IDB4MjAyOCB8fCBubCA9PSAweDIw
MjkpOwogfQogCi0vLyBGSVhNRTogSXQncyB1bmNsZWFyIHRvIG1lIGlmIHRoaXMgbW92ZXMgdGhl
IG9wY29kZSBwdHIgdG8gdGhlIHN0YXJ0IG9mIGFsbCBicmFuY2hlcwotLy8gb3IgdG8gdGhlIGVu
ZCBvZiBhbGwgYnJhbmNoZXMgLS0gZWNzCi0vLyBGSVhNRTogVGhpcyBhYnN0cmFjdGlvbiBpcyBw
b29yIHNpbmNlIGl0IGFzc3VtZXMgdGhhdCB5b3Ugd2FudCB0byBqdW1wIGJhc2VkIG9uIHdoYXRl
dmVyCi0vLyB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgc3RyZWFtIGlzLCBhbmQgKnRoZW4qIGZvbGxv
dyBhbnkgT1BfQUxUIGJyYW5jaGVzLgotc3RhdGljIGlubGluZSB2b2lkIG1vdmVPcGNvZGVQdHJQ
YXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoY29uc3QgdXNjaGFyKiYgb3Bjb2RlUHRyKQotewotICAg
IGRvIHsKLSAgICAgICAgb3Bjb2RlUHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQob3Bjb2Rl
UHRyLCAxKTsKLSAgICB9IHdoaWxlICgqb3Bjb2RlUHRyID09IE9QX0FMVCk7CitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNCcmFja2V0U3RhcnRPcGNvZGUodW5zaWduZWQgY2hhciBvcGNvZGUpCit7Cisg
ICAgaWYgKG9wY29kZSA+PSBPUF9CUkEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgT1BfQVNTRVJUOgorICAgICAgICBjYXNlIE9QX0FT
U0VSVF9OT1Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
ZHZhbmNlVG9FbmRPZkJyYWNrZXQoY29uc3QgdW5zaWduZWQgY2hhciomIG9wY29kZVB0cikKK3sK
KyAgICBBU1NFUlQoaXNCcmFja2V0U3RhcnRPcGNvZGUoKm9wY29kZVB0cikgfHwgKm9wY29kZVB0
ciA9PSBPUF9BTFQpOworICAgIGRvCisgICAgICAgIG9wY29kZVB0ciArPSBnZXRMaW5rVmFsdWUo
b3Bjb2RlUHRyICsgMSk7CisgICAgd2hpbGUgKCpvcGNvZGVQdHIgPT0gT1BfQUxUKTsKIH0KIAor
LyogSW50ZXJuYWwgc2hhcmVkIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGFy
ZSB1c2VkIGluIG1vcmUKK3RoYXQgb25lIG9mIHRoZSBzb3VyY2UgZmlsZXMuIFRoZXkgaGF2ZSB0
byBoYXZlIGV4dGVybmFsIGxpbmthZ2UsIGJ1dAorYnV0IGFyZSBub3QgcGFydCBvZiB0aGUgcHVi
bGljIEFQSSBhbmQgc28gbm90IGV4cG9ydGVkIGZyb20gdGhlIGxpYnJhcnkuICovCisKK2V4dGVy
biBpbnQga2pzX3BjcmVfdWNwX290aGVyY2FzZSh1bnNpZ25lZCk7CitleHRlcm4gYm9vbCBranNf
cGNyZV94Y2xhc3MoaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CisKICNlbmRpZgogCiAjZW5k
aWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV90YWJsZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV90YWJsZXMuY3BwCShyZXZpc2lvbiAyODc2NikK
KysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV90YWJsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSwyMCArNDksMjAgQEAgUENSRSBjb2RlIG1vZHVsZXMuICovCiAvKiBUaGVzZSBhcmUgdGhl
IGJyZWFrcG9pbnRzIGZvciBkaWZmZXJlbnQgbnVtYmVycyBvZiBieXRlcyBpbiBhIFVURi04CiBj
aGFyYWN0ZXIuICovCiAKLWNvbnN0IGludCBfcGNyZV91dGY4X3RhYmxlMVs2XSA9Citjb25zdCBp
bnQga2pzX3BjcmVfdXRmOF90YWJsZTFbNl0gPQogICB7IDB4N2YsIDB4N2ZmLCAweGZmZmYsIDB4
MWZmZmZmLCAweDNmZmZmZmYsIDB4N2ZmZmZmZmZ9OwogCiAvKiBUaGVzZSBhcmUgdGhlIGluZGlj
YXRvciBiaXRzIGFuZCB0aGUgbWFzayBmb3IgdGhlIGRhdGEgYml0cyB0byBzZXQgaW4gdGhlCiBm
aXJzdCBieXRlIG9mIGEgY2hhcmFjdGVyLCBpbmRleGVkIGJ5IHRoZSBudW1iZXIgb2YgYWRkaXRp
b25hbCBieXRlcy4gKi8KIAotY29uc3QgaW50IF9wY3JlX3V0ZjhfdGFibGUyWzZdID0geyAwLCAg
ICAweGMwLCAweGUwLCAweGYwLCAweGY4LCAweGZjfTsKLWNvbnN0IGludCBfcGNyZV91dGY4X3Rh
YmxlM1s2XSA9IHsgMHhmZiwgMHgxZiwgMHgwZiwgMHgwNywgMHgwMywgMHgwMX07Citjb25zdCBp
bnQga2pzX3BjcmVfdXRmOF90YWJsZTJbNl0gPSB7IDAsICAgIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4
ZjgsIDB4ZmN9OworY29uc3QgaW50IGtqc19wY3JlX3V0ZjhfdGFibGUzWzZdID0geyAweGZmLCAw
eDFmLCAweDBmLCAweDA3LCAweDAzLCAweDAxfTsKIAogLyogVGFibGUgb2YgdGhlIG51bWJlciBv
ZiBleHRyYSBjaGFyYWN0ZXJzLCBpbmRleGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIKIG1hc2tl
ZCB3aXRoIDB4M2YuIFRoZSBoaWdoZXN0IG51bWJlciBmb3IgYSB2YWxpZCBVVEYtOCBjaGFyYWN0
ZXIgaXMgaW4gZmFjdAogMHgzZC4gKi8KIAotY29uc3QgdXNjaGFyIF9wY3JlX3V0ZjhfdGFibGU0
WzB4NDBdID0geworY29uc3QgdW5zaWduZWQgY2hhciBranNfcGNyZV91dGY4X3RhYmxlNFsweDQw
XSA9IHsKICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKICAgMSwxLDEsMSwxLDEs
MSwxLDEsMSwxLDEsMSwxLDEsMSwKICAgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVuY3MuY3BwCShy
ZXZpc2lvbiAyODc2NikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV91Y3Bfc2VhcmNoZnVu
Y3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEFyZ3VtZW50czoKIFJldHVy
bnM6ICAgICAgdGhlIG90aGVyIGNhc2Ugb3IgLTEgaWYgbm9uZQogKi8KIAotaW50IF9wY3JlX3Vj
cF9vdGhlcmNhc2UoY29uc3QgdW5zaWduZWQgYykKK2ludCBranNfcGNyZV91Y3Bfb3RoZXJjYXNl
KHVuc2lnbmVkIGMpCiB7CiAgICAgaW50IGJvdCA9IDA7CiAgICAgaW50IHRvcCA9IHNpemVvZih1
Y3BfdGFibGUpIC8gc2l6ZW9mKGNub2RlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNy
ZV94Y2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xh
c3MuY3BwCShyZXZpc2lvbiAyODc2NikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV94Y2xh
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMyArNTksMTMgQEAgUmV0dXJuczogICAgICB0
cnVlIGlmIGNoYXJhY3RlciBtYXRjaGVzLAogLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3Rl
ciwgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlCiAga25vdyB3
ZSBhcmUgaW4gVVRGLTggbW9kZS4gKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGdldFVURjhDaGFy
QW5kQWR2YW5jZVBvaW50ZXIoaW50JiBjLCBjb25zdCB1c2NoYXIqJiBzdWJqZWN0UHRyKQorc3Rh
dGljIGlubGluZSB2b2lkIGdldFVURjhDaGFyQW5kQWR2YW5jZVBvaW50ZXIoaW50JiBjLCBjb25z
dCB1bnNpZ25lZCBjaGFyKiYgc3ViamVjdFB0cikKIHsKICAgICBjID0gKnN1YmplY3RQdHIrKzsK
ICAgICBpZiAoKGMgJiAweGMwKSA9PSAweGMwKSB7Ci0gICAgICAgIGludCBnY2FhID0gX3BjcmVf
dXRmOF90YWJsZTRbYyAmIDB4M2ZdOyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMgKi8K
KyAgICAgICAgaW50IGdjYWEgPSBranNfcGNyZV91dGY4X3RhYmxlNFtjICYgMHgzZl07ICAvKiBO
dW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAqLwogICAgICAgICBpbnQgZ2NzcyA9IDYgKiBnY2Fh
OwotICAgICAgICBjID0gKGMgJiBfcGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwgZ2NzczsKKyAg
ICAgICAgYyA9IChjICYga2pzX3BjcmVfdXRmOF90YWJsZTNbZ2NhYV0pIDw8IGdjc3M7CiAgICAg
ICAgIHdoaWxlIChnY2FhLS0gPiAwKSB7CiAgICAgICAgICAgICBnY3NzIC09IDY7CiAgICAgICAg
ICAgICBjIHw9ICgqc3ViamVjdFB0cisrICYgMHgzZikgPDwgZ2NzczsKQEAgLTczLDcgKzczLDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGdldFVURjhDaGFyQW5kQWR2YW5jZQogICAgIH0KIH0KIAot
Ym9vbCBfcGNyZV94Y2xhc3MoaW50IGMsIGNvbnN0IHVzY2hhciogZGF0YSkKK2Jvb2wga2pzX3Bj
cmVfeGNsYXNzKGludCBjLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhKQogewogICAgIGJvb2wg
bmVnYXRlZCA9ICgqZGF0YSAmIFhDTF9OT1QpOwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUv
cGNyZS91Y3BpbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvdWNw
aW50ZXJuYWwuaAkocmV2aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3VjcGlu
dGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiB3b3JkcyB0aGF0IGZvcm0gYSBkYXRhIGl0ZW0gaW4gdGhlIHRhYmxlLiAq
LwogCiB0eXBlZGVmIHN0cnVjdCBjbm9kZSB7Ci0gIHBjcmVfdWludDMyIGYwOwotICBwY3JlX3Vp
bnQzMiBmMTsKKyAgdW5zaWduZWQgZjA7CisgIHVuc2lnbmVkIGYxOwogfSBjbm9kZTsKIAogLyog
VGhpbmdzIGZvciB0aGUgZjAgZmllbGQgKi8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJ
SUNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAko
cmV2aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAjaWYgIUNPTVBJ
TEVSKE1TVkMpIHx8IGRlZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5l
IGJvb2wgaXNBU0NJSUFscGhhKHdjaGFyX3QgYykgeyByZXR1cm4gKGMgfCAweDIwKSA+PSAnYScg
JiYgKGMgfCAweDIwKSA8PSAneic7IH0KICNlbmRpZgorICAgIGlubGluZSBib29sIGlzQVNDSUlB
bHBoYShpbnQgYykgeyByZXR1cm4gKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAn
eic7IH0KIAogICAgIGlubGluZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWMoY2hhciBjKSB7IHJl
dHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4
MjApIDw9ICd6JzsgfQogICAgIGlubGluZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWModW5zaWdu
ZWQgc2hvcnQgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAweDIwKSA+
PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7IH0KICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVm
aW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxw
aGFudW1lcmljKHdjaGFyX3QgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMg
fCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7IH0KICNlbmRpZgorICAgIGlubGlu
ZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWMoaW50IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMg
PD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAKICAg
ICBpbmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQoY2hhciBjKSB7IHJldHVybiAoYyA+PSAnMCcpICYg
KGMgPD0gJzknKTsgfQogICAgIGlubGluZSBib29sIGlzQVNDSUlEaWdpdCh1bnNpZ25lZCBzaG9y
dCBjKSB7IHJldHVybiAoYyA+PSAnMCcpICYgKGMgPD0gJzknKTsgfQpAQCAtNjcsMzAgKzY5LDM1
IEBAIG5hbWVzcGFjZSBXVEYgewogI2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJ
VkVfV0NIQVJfVF9ERUZJTkVEKQogICAgIGlubGluZSBib29sIGlzQVNDSUlIZXhEaWdpdCh3Y2hh
cl90IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2En
ICYmIChjIHwgMHgyMCkgPD0gJ2YnOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJ
SGV4RGlnaXQoaW50IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgy
MCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ2YnOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0FT
Q0lJTG93ZXIoY2hhciBjKSB7IHJldHVybiBjID49ICdhJyAmJiBjIDw9ICd6JzsgfQogICAgIGlu
bGluZSBib29sIGlzQVNDSUlMb3dlcih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjID49ICdh
JyAmJiBjIDw9ICd6JzsgfQogI2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVf
V0NIQVJfVF9ERUZJTkVEKQogICAgIGlubGluZSBib29sIGlzQVNDSUlMb3dlcih3Y2hhcl90IGMp
IHsgcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgYm9v
bCBpc0FTQ0lJTG93ZXIoaW50IGMpIHsgcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9CiAK
ICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJU3BhY2UoY2hhciBjKSB7IHJldHVybiBjID09ICdcdCcg
fHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x2JyB8fCBjID09J1xmJyB8fCBjID09ICdccicgfHwgYyA9
PSAnICc7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJU3BhY2UodW5zaWduZWQgc2hvcnQgYykg
eyByZXR1cm4gYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicg
fHwgYyA9PSAnXHInIHx8IGMgPT0gJyAnOyB9CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRlZmlu
ZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSVNwYWNl
KHdjaGFyX3QgYykgeyByZXR1cm4gYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdicg
fHwgYyA9PSdcZicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJyAnOyB9CiAjZW5kaWYKKyAgICBpbmxp
bmUgYm9vbCBpc0FTQ0lJU3BhY2UoaW50IGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdc
bicgfHwgYyA9PSAnXHYnIHx8IGMgPT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQog
CiAgICAgaW5saW5lIGNoYXIgdG9BU0NJSUxvd2VyKGNoYXIgYykgeyByZXR1cm4gYyB8ICgoYyA+
PSAnQScgJiYgYyA8PSAnWicpIDw8IDUpOyB9CiAgICAgaW5saW5lIHVuc2lnbmVkIHNob3J0IHRv
QVNDSUlMb3dlcih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjIHwgKChjID49ICdBJyAmJiBj
IDw9ICdaJykgPDwgNSk7IH0KICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5lZChfTkFUSVZF
X1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgd2NoYXJfdCB0b0FTQ0lJTG93ZXIod2NoYXJf
dCBjKSB7IHJldHVybiBjIHwgKChjID49ICdBJyAmJiBjIDw9ICdaJykgPDwgNSk7IH0KICNlbmRp
ZgorICAgIGlubGluZSBpbnQgdG9BU0NJSUxvd2VyKGludCBjKSB7IHJldHVybiBjIHwgKChjID49
ICdBJyAmJiBjIDw9ICdaJykgPDwgNSk7IH0KIAogICAgIGlubGluZSBjaGFyIHRvQVNDSUlVcHBl
cihjaGFyIGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KGMgJiB+KChjID49ICdhJyAmJiBj
IDw9ICd6JykgPDwgNSkpOyB9CiAgICAgaW5saW5lIHVuc2lnbmVkIHNob3J0IHRvQVNDSUlVcHBl
cih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
YyAmIH4oKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSA8PCA1KSk7IH0KICNpZiAhQ09NUElMRVIoTVNW
QykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgd2NoYXJf
dCB0b0FTQ0lJVXBwZXIod2NoYXJfdCBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDx3Y2hhcl90Pihj
ICYgfigoYyA+PSAnYScgJiYgYyA8PSAneicpIDw8IDUpKTsgfQogI2VuZGlmCisgICAgaW5saW5l
IGludCB0b0FTQ0lJVXBwZXIoaW50IGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAmIH4o
KGMgPj0gJ2EnICYmIGMgPD0gJ3onKSA8PCA1KSk7IH0KIAogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17922</attachid>
            <date>2007-12-15 20:02:11 -0800</date>
            <delta_ts>2007-12-15 20:02:11 -0800</delta_ts>
            <desc>patch with &quot;ignore whitespace differences&quot; on -- may be easier to review</desc>
            <filename>PCREPatchNoWS.txt</filename>
            <type>text/plain</type>
            <size>162218</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTkgQEAKKzIwMDctMTItMTUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0MzgKKyAgICAgICAgLSByZW1vdmVkIHNvbWUgbW9yZSB1bnVzZWQgY29kZQorICAgICAgICAt
IGNoYW5nZWQgcXVpdGUgYSBmZXcgbW9yZSBuYW1lcyB0byBXZWJLaXQtc3R5bGUKKyAgICAgICAg
LSBtb3ZlZCBtb3JlIHRoaW5ncyBvdXQgb2YgcGNyZV9pbnRlcm5hbC5oCisgICAgICAgIC0gY2hh
bmdlZCBzb21lIGluZGVudGF0aW9uIHRvIFdlYktpdC1zdHlsZQorICAgICAgICAtIGltcHJvdmVk
IGRlc2lnbiBvZiB0aGUgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisgICAgICAg
ICAgMi1ieXRlIHZhbHVlcyBmcm9tIHRoZSBvcGNvZGUgc3RyZWFtIChpbiBwY3JlX2ludGVybmFs
LmgpCisKKyAgICAgICAgKiBwY3JlL2RmdGFibGVzLmNwcDoKKyAgICAgICAgKG1haW4pOiBBZGRl
ZCB0aGUga2pzIHByZWZpeCBhIG5vcm1hbCB3YXkgaW4gbGlldSBvZiB1c2luZyBtYWNyb3MuCisK
KyAgICAgICAgKiBwY3JlL3BjcmVfY29tcGlsZS5jcHA6IE1vdmVkIHNvbWUgZGVmaW5pdGlvbnMg
aGVyZSBmcm9tIHBjcmVfaW50ZXJuYWwuaC4KKyAgICAgICAgKGVycm9yVGV4dCk6IE5hbWUgY2hh
bmdlcywgZmV3ZXIgdHlwZWRlZnMuCisgICAgICAgIChjaGVja0VzY2FwZSk6IERpdHRvLiBDaGFu
Z2VkIHVwcGVyY2FzZSBjb252ZXJzaW9uIHRvIHVzZSB0b0FTQ0lJVXBwZXIuCisgICAgICAgIChp
c0NvdW50ZWRSZXBlYXQpOiBOYW1lIGNoYW5nZS4KKyAgICAgICAgKHJlYWRSZXBlYXRDb3VudHMp
OiBOYW1lIGNoYW5nZS4KKyAgICAgICAgKGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUpOiBHb3Qgcmlk
IG9mIHRoZSB1c2Ugb2YgT1BfbGVuZ3Rocywgd2hpY2ggaXMKKyAgICAgICAgdmVyeSBsaWdodGx5
IHVzZWQgaGVyZS4gSGFyZC1jb2RlZCB0aGUgbGVuZ3RoIG9mIE9QX0JSQU5VTUJFUi4KKyAgICAg
ICAgKGZpcnN0U2lnbmlmaWNhbnRPcGNvZGVTa2lwcGluZ0Fzc2VydGlvbnMpOiBEaXR0by4gQWxz
byBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSB0aGUgYWR2YW5jZVRvRW5kT2ZCcmFja2V0IGZ1bmN0
aW9uLgorICAgICAgICAoZ2V0T3RoZXJjYXNlUmFuZ2UpOiBOYW1lIGNoYW5nZXMuCisgICAgICAg
IChlbmNvZGVVVEY4KTogRGl0dG8uCisgICAgICAgIChjb21waWxlQnJhbmNoKTogTmFtZSBjaGFu
Z2VzLiBSZW1vdmVkIHVudXNlZCBhZnRlcl9tYW51YWxfY2FsbG91dCBhbmQKKyAgICAgICAgdGhl
IGNvZGUgdG8gaGFuZGxlIGl0LiBSZW1vdmVkIGNvZGUgdG8gaGFuZGxlIE9QX09OQ0Ugc2luY2Ug
d2UgbmV2ZXIKKyAgICAgICAgZW1pdCB0aGlzIG9wY29kZS4gQ2hhbmdlZCB0byB1c2UgYWR2YW5j
ZVRvRW5kT2ZCcmFja2V0IGluIG1vcmUgcGxhY2VzLgorICAgICAgICAoY29tcGlsZUJyYWNrZXQp
OiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChicmFuY2hJc0FuY2hvcmVkKTogUmVtb3ZlZCBjb2Rl
IHRvIGhhbmRsZSBPUF9PTkNFIHNpbmNlIHdlIG5ldmVyIGVtaXQKKyAgICAgICAgdGhpcyBvcGNv
ZGUuCisgICAgICAgIChicmFja2V0SXNBbmNob3JlZCk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAg
KGJyYW5jaE5lZWRzTGluZVN0YXJ0KTogTW9yZSBmbyB0aGUgc2FtZS4KKyAgICAgICAgKGJyYWNr
ZXROZWVkc0xpbmVTdGFydCk6IERpdHRvLgorICAgICAgICAoYnJhbmNoRmluZEZpcnN0QXNzZXJ0
ZWRDaGFyYWN0ZXIpOiBSZW1vdmVkIE9QX09OQ0UgY29kZS4KKyAgICAgICAgKGJyYWNrZXRGaW5k
Rmlyc3RBc3NlcnRlZENoYXJhY3Rlcik6IE1vcmUgb2YgdGhlIHNhbWUuCisgICAgICAgIChjYWxj
dWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndGhBbmRGbGFncyk6IERpdHRvLgorICAgICAgICAocmV0
dXJuRXJyb3IpOiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChqc1JlZ0V4cENvbXBpbGUpOiBEaXR0
by4KKworICAgICAgICAqIHBjcmUvcGNyZV9leGVjLmNwcDogTW92ZWQgc29tZSBkZWZpbml0aW9u
cyBoZXJlIGZyb20gcGNyZV9pbnRlcm5hbC5oLgorICAgICAgICAobWF0Y2hSZWYpOiBVcGRhdGVk
IG5hbWVzLgorICAgICAgICBJbXByb3ZlZCBtYWNyb3MgdG8gdXNlIHRoZSBkbyB7IH0gd2hpbGUo
MCkgaWRpb20gc28gdGhleSBleHBhbmQgdG8gc2luZ2xlCisgICAgICAgIHN0YXRlbWVudHMgcmF0
aGVyIHRoYW4gdG8gYmxvY2tzIG9yIG11bHRpcGxlIHN0YXRlbWVudHMuIEFuZCByZWZlYWN0b3Jl
ZAorICAgICAgICB0aGUgcmVjdXJzaXZlIG1hdGNoIG1hY3Jvcy4KKyAgICAgICAgKE1hdGNoU3Rh
Y2s6OnB1c2hOZXdGcmFtZSk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAgKGdldFVURjhDaGFyQW5k
SW5jcmVtZW50TGVuZ3RoKTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAobWF0Y2gpOiBOYW1lIGNo
YW5nZXMuIFJlbW92ZWQgdGhlIE9OQ0Ugb3Bjb2RlLgorICAgICAgICAoanNSZWdFeHBFeGVjdXRl
KTogTmFtZSBjaGFuZ2VzLgorCisgICAgICAgICogcGNyZS9wY3JlX2ludGVybmFsLmg6IFJlbW92
ZWQgcXVpdGUgYSBmZXcgdW5uZWVkZWQgaW5jbHVkZXMuIFJld3JvdGUKKyAgICAgICAgcXVpdGUg
YSBmZXcgY29tbWVudHMuIFJlbW92ZWQgdGhlIG1hY3JvcyB0aGF0IGFkZCBranMgcHJlZml4ZXMg
dG8gdGhlCisgICAgICAgIGZ1bmN0aW9ucyB3aXRoIGV4dGVybmFsIGxpbmthZ2U7IGluc3RlYWQg
cmVuYW1lZCB0aGUgZnVuY3Rpb25zLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCB0eXBl
ZGVmcyBwY3JlX3VpbnQxNiwgcGNyZV91aW50MzIsIGFuZCB1c2NoYXIuIFJlbW92ZWQgdGhlCisg
ICAgICAgIGRlYWQgYW5kIG5vdC1hbGwtd29ya2luZyBjb2RlIGZvciBMSU5LX1NJWkUgdmFsdWVz
IG90aGVyIHRoYW4gMiwgYWx0aG91Z2gKKyAgICAgICAgd2UgYWltIHRvIGtlZXAgdGhlIGFic3Ry
YWN0aW9uIHdvcmtpbmcuIFJlbW92ZWQgdGhlIE9QX0xFTkdUSFMgbWFjcm8uCisgICAgICAgIChw
dXQyQnl0ZVZhbHVlKTogUmVwbGFjZXMgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0LgorICAg
ICAgICAoZ2V0MkJ5dGVWYWx1ZSk6IFJlcGxhY2VzIGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dC4KKyAgICAgICAgKHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKTogUmVwbGFjZXMgcHV0MkJ5dGVP
cGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2YW5jZS4KKyAgICAgICAgKHB1dExpbmtWYWx1ZUFsbG93
WmVybyk6IFJlcGxhY2VzIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQ7IGRvZXNuJ3QgZG8gdGhlCisg
ICAgICAgIGFkZGl0aW9uLCBzaW5jZSBhIGNvbW1hIGlzIHJlYWxseSBubyBiZXR0ZXIgdGhhbiBh
IHBsdXMgc2lnbi4gQWRkZWQgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHRvIGNhdGNoIG91dCBvZiBy
YW5nZSB2YWx1ZXMgYW5kIGNoYW5nZWQgdGhlIHBhcmFtZXRlciB0eXBlIHRvCisgICAgICAgIGlu
dCByYXRoZXIgdGhhbiB1bnNpZ25lZC4KKyAgICAgICAgKGdldExpbmtWYWx1ZUFsbG93WmVybyk6
IFJlcGxhY2VzIGdldE9wY29kZVZhbHVlQXRPZmZzZXQuCisgICAgICAgIChwdXRMaW5rVmFsdWUp
OiBOZXcgZnVuY3Rpb24gdGhhdCBtb3N0IGZvcm1lciBjYWxsZXJzIG9mIHRoZQorICAgICAgICBw
dXRPcGNvZGVWYWx1ZUF0T2Zmc2V0IGZ1bmN0aW9uIGNhbiB1c2U7IGFzc2VydHMgdGhlIHZhbHVl
IHRoYXQgaXMKKyAgICAgICAgYmVpbmcgc3RvcmVkIGlzIG5vbi16ZXJvIGFuZCB0aGVuIGNhbGxz
IHB1dExpbmtWYWx1ZUFsbG93WmVyby4KKyAgICAgICAgKGdldExpbmtWYWx1ZSk6IERpdHRvLgor
ICAgICAgICAocHV0TGlua1ZhbHVlQW5kQWR2YW5jZSk6IFJlcGxhY2VzIHB1dE9wY29kZVZhbHVl
QXRPZmZzZXRBbmRBZHZhbmNlLiBObworICAgICAgICBjYWxsZXIgd2FzIHVzaW5nIGFuIG9mZnNl
dCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGFkdmFuY2luZyBiZWhhdmlvci4KKyAgICAg
ICAgKHB1dExpbmtWYWx1ZUFsbG93WmVyb0FuZEFkdmFuY2UpOiBEaXR0by4KKyAgICAgICAgKGlz
QnJhY2tldE9wY29kZSk6IEFkZGVkLiBGb3IgdXNlIGluIGFuIGFzc2VydGlvbi4KKyAgICAgICAg
KGFkdmFuY2VUb0VuZE9mQnJhY2tldCk6IFJlbmFtZWQgZnJvbSBtb3ZlT3Bjb2RlUHRyUGFzdEFu
eUFsdGVybmF0ZUJyYW5jaGVzLAorICAgICAgICBhbmQgcmVtb3ZlZCBjb21tZW50cyBhYm91dCBo
b3cgaXQncyBub3Qgd2VsbCBkZXNpZ25lZC4gVGhpcyBmdW5jdGlvbiB0YWtlcworICAgICAgICBh
IHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBhIGJyYWNrZXQgYW5kIGFkdmFuY2VzIHRvIHRo
ZSBlbmQgb2YgdGhlCisgICAgICAgIGJyYWNrZXQuCisKKyAgICAgICAgKiBwY3JlL3BjcmVfdGFi
bGVzLmNwcDogVXBkYXRlZCBuYW1lcy4KKyAgICAgICAgKiBwY3JlL3BjcmVfdWNwX3NlYXJjaGZ1
bmNzLmNwcDoKKyAgICAgICAgKGtqc19wY3JlX3VjcF9vdGhlcmNhc2UpOiBEaXR0by4KKyAgICAg
ICAgKiBwY3JlL3BjcmVfeGNsYXNzLmNwcDoKKyAgICAgICAgKGdldFVURjhDaGFyQW5kQWR2YW5j
ZVBvaW50ZXIpOiBEaXR0by4KKyAgICAgICAgKGtqc19wY3JlX3hjbGFzcyk6IERpdHRvLgorICAg
ICAgICAqIHBjcmUvdWNwaW50ZXJuYWwuaDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvQVNDSUlD
VHlwZS5oOgorICAgICAgICAoV1RGOjppc0FTQ0lJQWxwaGEpOiBBZGRlZCBhbiBpbnQgb3Zlcmxv
YWQsIGxpa2UgdGhlIG9uZSB3ZSBhbHJlYWR5IGhhdmUgZm9yCisgICAgICAgIGlzQVNDSUlEaWdp
dC4KKyAgICAgICAgKFdURjo6aXNBU0NJSUFscGhhbnVtZXJpYyk6IERpdHRvLgorICAgICAgICAo
V1RGOjppc0FTQ0lJSGV4RGlnaXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6aXNBU0NJSUxvd2Vy
KTogRGl0dG8uCisgICAgICAgIChXVEY6OmlzQVNDSUlTcGFjZSk6IERpdHRvLgorICAgICAgICAo
V1RGOjp0b0FTQ0lJTG93ZXIpOiBEaXR0by4KKyAgICAgICAgKFdURjo6dG9BU0NJSVVwcGVyKTog
RGl0dG8uCisKIDIwMDctMTItMTQgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KQEAgLTEwOTcsNyArMTE5Myw5IEBACiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgogCi0gICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3Vi
amVjdFB0ciBhZGp1c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEg
c2luZ2xlIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9z
c2libHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhciBjbGFzc2VzIGFuZCBnYXJibGVkIFVU
RjE2IHN0cmluZ3MuCisgICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3ViamVjdFB0ciBhZGp1
c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEgc2luZ2xlCisgICAg
ICAgIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwgcG9zc2li
bHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhcgorICAgICAgICBjbGFzc2VzIGFuZCBnYXJi
bGVkIFVURjE2IHN0cmluZ3MuCiAKICAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6CiAgICAg
ICAgIChtYXRjaCk6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkocmV2aXNpb24gMjg3
NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCBmcHJpbnRmKGYsCiAgICJUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRl
ZmF1bHQgdGFibGVzIGZvciBjaGFyYWN0ZXJzIHdpdGggY29kZXMgbGVzcyB0aGFuXG4iCiAgICIx
MjggKEFTQ0lJIGNoYXJhY3RlcnMpLiBUaGVzZSB0YWJsZXMgYXJlIHVzZWQgd2hlbiBubyBleHRl
cm5hbCB0YWJsZXMgYXJlXG4iCiAgICJwYXNzZWQgdG8gUENSRS4gKi9cblxuIgotICAiY29uc3Qg
dW5zaWduZWQgY2hhciBfcGNyZV9kZWZhdWx0X3RhYmxlc1slZF0gPSB7XG5cbiIKKyAgImNvbnN0
IHVuc2lnbmVkIGNoYXIga2pzX3BjcmVfZGVmYXVsdF90YWJsZXNbJWRdID0ge1xuXG4iCiAgICIv
KiBUaGlzIHRhYmxlIGlzIGEgbG93ZXIgY2FzaW5nIHRhYmxlLiAqL1xuXG4iLCB0YWJsZXNfbGVu
Z3RoKTsKIAogaWYgKGxjY19vZmZzZXQgIT0gMCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUv
cGNyZV9jb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVf
Y29tcGlsZS5jcHAJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3Jl
X2NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxMSBAQCBzdXBwb3J0aW5n
IGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBuCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
Ky8qIE5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2YXJpYWJs
ZXMgKi8KKworI2RlZmluZSBSRVFfVU5TRVQgKC0yKQorI2RlZmluZSBSRVFfTk9ORSAgKC0xKQor
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAg
ICAgIENvZGUgcGFyYW1ldGVycyBhbmQgc3RhdGljIHRhYmxlcyAgICAgICAgICoKICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04OCwxNyArOTMs
MTIgQEAgZW51bSBFcnJvckNvZGUgewogICAgIEVSUjEwLCBFUlIxMSwgRVJSMTIsIEVSUjEzLCBF
UlIxNCwgRVJSMTUsIEVSUjE2LCBFUlIxNwogfTsKIAotLyogVGFibGUgb2Ygc2l6ZXMgZm9yIHRo
ZSBmaXhlZC1sZW5ndGggb3Bjb2Rlcy4gSXQncyBkZWZpbmVkIGluIGEgbWFjcm8gc28gdGhhdAot
dGhlIGRlZmluaXRpb24gaXMgbmV4dCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3Bjb2RlcyBp
biBwY3JlX2ludGVybmFsLmguICovCi0KLXN0YXRpYyBjb25zdCB1c2NoYXIgT1BfbGVuZ3Roc1td
ID0geyBPUF9MRU5HVEhTIH07Ci0KIC8qIFRoZSB0ZXh0cyBvZiBjb21waWxlLXRpbWUgZXJyb3Ig
bWVzc2FnZXMuIFRoZXNlIGFyZSAiY2hhciAqIiBiZWNhdXNlIHRoZXkKIGFyZSBwYXNzZWQgdG8g
dGhlIG91dHNpZGUgd29ybGQuICovCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvcl90ZXh0KEVy
cm9yQ29kZSBjb2RlKQorc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yVGV4dChFcnJvckNvZGUgY29k
ZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBlcnJvcl90ZXh0c1tdID0KKyAgICBzdGF0aWMg
Y29uc3QgY2hhciBlcnJvclRleHRzW10gPQogICAgICAgLyogMSAqLwogICAgICAgIlxcIGF0IGVu
ZCBvZiBwYXR0ZXJuXDAiCiAgICAgICAiXFxjIGF0IGVuZCBvZiBwYXR0ZXJuXDAiCkBAIC0xMjMs
NyArMTIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yX3RleHQoRXJyb3JDb2RlIAogICAg
IDsKIAogICAgIGludCBpID0gY29kZTsKLSAgICBjb25zdCBjaGFyKiB0ZXh0ID0gZXJyb3JfdGV4
dHM7CisgICAgY29uc3QgY2hhciogdGV4dCA9IGVycm9yVGV4dHM7CiAgICAgd2hpbGUgKGkgPiAx
KQogICAgICAgICBpIC09ICEqdGV4dCsrOwogICAgIHJldHVybiB0ZXh0OwpAQCAtMTQxLDcgKzE0
MSw3IEBAIHN0cnVjdCBDb21waWxlRGF0YSB7CiAgICAgICAgIHJlcV92YXJ5b3B0ID0gMDsKICAg
ICAgICAgbmVlZE91dGVyQnJhY2tldCA9IGZhbHNlOwogICAgIH0KLSAgICBjb25zdCB1c2NoYXIq
IHN0YXJ0X2NvZGU7ICAgLyogVGhlIHN0YXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlICovCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogc3RhcnRfY29kZTsgICAvKiBUaGUgc3RhcnQgb2YgdGhlIGNv
bXBpbGVkIGNvZGUgKi8KICAgICBjb25zdCBVQ2hhciogc3RhcnRfcGF0dGVybjsgLyogVGhlIHN0
YXJ0IG9mIHRoZSBwYXR0ZXJuICovCiAgICAgaW50IHRvcF9iYWNrcmVmOyAgICAgICAgICAgIC8q
IE1heGltdW0gYmFjayByZWZlcmVuY2UgKi8KICAgICB1bnNpZ25lZCBiYWNrcmVmTWFwOyAgICAg
ICAvKiBCaXRtYXAgb2YgbG93IGJhY2sgcmVmcyAqLwpAQCAtMTUxLDEwICsxNTEsMTAgQEAgc3Ry
dWN0IENvbXBpbGVEYXRhIHsKIAogLyogRGVmaW5pdGlvbnMgdG8gYWxsb3cgbXV0dWFsIHJlY3Vy
c2lvbiAqLwogCi1zdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGludCosIHVzY2hhcioq
LCBjb25zdCBVQ2hhcioqLCBjb25zdCBVQ2hhciosIEVycm9yQ29kZSosIGludCwgaW50KiwgaW50
KiwgQ29tcGlsZURhdGEmKTsKLXN0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVz
Y2hhciogY29kZSk7Ci1zdGF0aWMgYm9vbCBicmFja2V0TmVlZHNMaW5lU3RhcnQoY29uc3QgdXNj
aGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKLXN0
YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVzY2hhciog
Y29kZSwgYm9vbCBpbmFzc2VydCk7CitzdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGlu
dCosIHVuc2lnbmVkIGNoYXIqKiwgY29uc3QgVUNoYXIqKiwgY29uc3QgVUNoYXIqLCBFcnJvckNv
ZGUqLCBpbnQsIGludCosIGludCosIENvbXBpbGVEYXRhJik7CitzdGF0aWMgYm9vbCBicmFja2V0
SXNBbmNob3JlZChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlKTsKK3N0YXRpYyBib29sIGJyYWNr
ZXROZWVkc0xpbmVTdGFydChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0
dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKK3N0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJz
dEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5hc3Nl
cnQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgogKiAgICAgICAgICAgIEhhbmRsZSBlc2NhcGVzICAgICAgICAgICAgICAgICAgICAgICoKQEAg
LTE3OCw3ICsxNzgsNyBAQCBSZXR1cm5zOiAgICAgICAgIHplcm8gb3IgcG9zaXRpdmUgPT4gYSBk
CiAgICAgICAgICAgICAgICAgIG9uIGVycm9yLCBlcnJvcnB0ciBpcyBzZXQKICovCiAKLXN0YXRp
YyBpbnQgY2hlY2tfZXNjYXBlKGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hhciogcGF0
dGVybkVuZCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIsIGludCBicmFjb3VudCwgYm9vbCBpc2Ns
YXNzKQorc3RhdGljIGludCBjaGVja0VzY2FwZShjb25zdCBVQ2hhcioqIHB0cnB0ciwgY29uc3Qg
VUNoYXIqIHBhdHRlcm5FbmQsIEVycm9yQ29kZSogZXJyb3Jjb2RlcHRyLCBpbnQgYnJhY291bnQs
IGJvb2wgaXNjbGFzcykKIHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gKnB0cnB0ciArIDE7CiAK
QEAgLTI1Miw2ICsyNTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2VzY2FwZShjb25zdCBVQ2hhcioq
IHB0CiAgICAgICAgICAgICBwdHIgKz0gaSAtIDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgJ3gnOiB7CiAgICAgICAgICAgICBjID0gMDsKICAgICAgICAg
ICAgIGludCBpOwpAQCAtMjY5LDYgKzI3MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZXNjYXBlKGNv
bnN0IFVDaGFyKiogcHQKICAgICAgICAgICAgIHB0ciArPSBpIC0gMTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSAndSc6IHsKICAgICAgICAgICAgIGMgPSAw
OwogICAgICAgICAgICAgaW50IGk7CkBAIC0yODUsOSArMjg3LDggQEAgc3RhdGljIGludCBjaGVj
a19lc2NhcGUoY29uc3QgVUNoYXIqKiBwdAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHRy
ICs9IGkgLSAxOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8qIE90aGVyIHNwZWNpYWwgZXNjYXBlcyBub3Qgc3RhcnRpbmcgd2l0aCBhIGRpZ2l0IGFyZSBz
dHJhaWdodGZvcndhcmQgKi8KICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgJ2MnOgogICAgICAg
ICAgICAgaWYgKCsrcHRyID09IHBhdHRlcm5FbmQpIHsKICAgICAgICAgICAgICAgICAqZXJyb3Jj
b2RlcHRyID0gRVJSMjsKQEAgLTI5NywxMCArMjk4LDcgQEAgc3RhdGljIGludCBjaGVja19lc2Nh
cGUoY29uc3QgVUNoYXIqKiBwdAogICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBBIGxldHRl
ciBpcyB1cHBlci1jYXNlZDsgdGhlbiB0aGUgMHg0MCBiaXQgaXMgZmxpcHBlZC4gVGhpcyBjb2Rp
bmcKICAgICAgICAgICAgICBpcyBBU0NJSS1zcGVjaWZpYywgYnV0IHRoZW4gdGhlIHdob2xlIGNv
bmNlcHQgb2YgXGN4IGlzIEFTQ0lJLXNwZWNpZmljLiAqLwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCi0gICAgICAgICAgICAgICAgYyAtPSAzMjsK
LSAgICAgICAgICAgIGMgXj0gMHg0MDsKKyAgICAgICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVy
KGMpIF4gMHg0MDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA5
LDggKzMwNyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfZXNjYXBlKGNvbnN0IFVDaGFyKiogcHQKICAg
ICByZXR1cm4gYzsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgQ2hlY2sgZm9yIGNvdW50ZWQgcmVwZWF0ICAg
ICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KQEAgLTMyNiw3ICszMjIsNyBAQCBBcmd1bWVudHM6CiBSZXR1cm5zOiAgICB0cnVlIG9y
IGZhbHNlCiAqLwogCi1zdGF0aWMgYm9vbCBpc19jb3VudGVkX3JlcGVhdChjb25zdCBVQ2hhciog
cCwgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQpCitzdGF0aWMgYm9vbCBpc0NvdW50ZWRSZXBlYXQo
Y29uc3QgVUNoYXIqIHAsIGNvbnN0IFVDaGFyKiBwYXR0ZXJuRW5kKQogewogICAgIGlmIChwID49
IHBhdHRlcm5FbmQgfHwgIWlzQVNDSUlEaWdpdCgqcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM1MCwxMyArMzQ2LDEyIEBAIHN0YXRpYyBib29sIGlzX2NvdW50ZWRfcmVwZWF0KGNvbnN0
IFVDaGEKICAgICByZXR1cm4gKHAgPCBwYXR0ZXJuRW5kICYmICpwID09ICd9Jyk7CiB9CiAKLQog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAg
ICAgICBSZWFkIHJlcGVhdCBjb3VudHMgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBSZWFkIGFuIGl0
ZW0gb2YgdGhlIGZvcm0ge24sbX0gYW5kIHJldHVybiB0aGUgdmFsdWVzLiBUaGlzIGlzIGNhbGxl
ZCBvbmx5Ci1hZnRlciBpc19jb3VudGVkX3JlcGVhdCgpIGhhcyBjb25maXJtZWQgdGhhdCBhIHJl
cGVhdC1jb3VudCBxdWFudGlmaWVyIGV4aXN0cywKK2FmdGVyIGlzQ291bnRlZFJlcGVhdCgpIGhh
cyBjb25maXJtZWQgdGhhdCBhIHJlcGVhdC1jb3VudCBxdWFudGlmaWVyIGV4aXN0cywKIHNvIHRo
ZSBzeW50YXggaXMgZ3VhcmFudGVlZCB0byBiZSBjb3JyZWN0LCBidXQgd2UgbmVlZCB0byBjaGVj
ayB0aGUgdmFsdWVzLgogCiBBcmd1bWVudHM6CkBAIC0zNzAsNyArMzY1LDcgQEAgUmV0dXJuczog
ICAgICAgICBwb2ludGVyIHRvICd9JyBvbiBzdWNjZQogICAgICAgICAgICAgICAgICBjdXJyZW50
IHB0ciBvbiBlcnJvciwgd2l0aCBlcnJvcmNvZGVwdHIgc2V0IG5vbi16ZXJvCiAqLwogCi1zdGF0
aWMgY29uc3QgVUNoYXIqIHJlYWRfcmVwZWF0X2NvdW50cyhjb25zdCBVQ2hhciogcCwgaW50KiBt
aW5wLCBpbnQqIG1heHAsIEVycm9yQ29kZSogZXJyb3Jjb2RlcHRyKQorc3RhdGljIGNvbnN0IFVD
aGFyKiByZWFkUmVwZWF0Q291bnRzKGNvbnN0IFVDaGFyKiBwLCBpbnQqIG1pbnAsIGludCogbWF4
cCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIpCiB7CiAgICAgaW50IG1pbiA9IDA7CiAgICAgaW50
IG1heCA9IC0xOwpAQCAtNDE0LDI0NCArNDA5LDQ3IEBAIHN0YXRpYyBjb25zdCBVQ2hhciogcmVh
ZF9yZXBlYXRfY291bnRzKGMKICAgICByZXR1cm4gcDsKIH0KIAotCiAvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgIEZpbmQgZmlyc3Qgc2ln
bmlmaWNhbnQgb3AgY29kZSAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwg
ZnVuY3Rpb25zIHRoYXQgc2NhbiBhIGNvbXBpbGVkIGV4cHJlc3Npb24gbG9va2luZwogZm9yIGEg
Zml4ZWQgZmlyc3QgY2hhcmFjdGVyLCBvciBhbiBhbmNob3Jpbmcgb3AgY29kZSBldGMuIEl0IHNr
aXBzIG92ZXIgdGhpbmdzCi10aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4gRm9yIHNvbWUgY2Fs
bHMsIGEgY2hhbmdlIG9mIG9wdGlvbiBpcyBpbXBvcnRhbnQuCi1Gb3Igc29tZSBjYWxscywgaXQg
bWFrZXMgc2Vuc2UgdG8gc2tpcCBuZWdhdGl2ZSBmb3J3YXJkIGFuZCBhbGwgYmFja3dhcmQKLWFz
c2VydGlvbnMsIGFuZCBhbHNvIHRoZSBcYiBhc3NlcnRpb247IGZvciBvdGhlcnMgaXQgZG9lcyBu
b3QuCit0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4KIAogQXJndW1lbnRzOgogICBjb2RlICAg
ICAgICAgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwCi0gIHNraXBhc3NlcnQgICB0
cnVlIGlmIGNlcnRhaW4gYXNzZXJ0aW9ucyBhcmUgdG8gYmUgc2tpcHBlZAotCiBSZXR1cm5zOiAg
ICAgICBwb2ludGVyIHRvIHRoZSBmaXJzdCBzaWduaWZpY2FudCBvcGNvZGUKICovCiAKLXN0YXRp
YyBjb25zdCB1c2NoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29uc3QgdXNjaGFyKiBjb2Rl
KQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUoY29u
c3QgdW5zaWduZWQgY2hhciogY29kZSkKIHsKICAgICB3aGlsZSAoKmNvZGUgPT0gT1BfQlJBTlVN
QkVSKQotICAgICAgICBjb2RlICs9IE9QX2xlbmd0aHNbKmNvZGVdOworICAgICAgICBjb2RlICs9
IDM7CiAgICAgcmV0dXJuIGNvZGU7CiB9CiAKLXN0YXRpYyBjb25zdCB1c2NoYXIqIGZpcnN0U2ln
bmlmaWNhbnRPcENvZGVTa2lwcGluZ0Fzc2VydGlvbnMoY29uc3QgdXNjaGFyKiBjb2RlKQorc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0U2lnbmlmaWNhbnRPcGNvZGVTa2lwcGluZ0Fz
c2VydGlvbnMoY29uc3QgdW5zaWduZWQgY2hhciogY29kZSkKIHsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBzd2l0Y2ggKCpjb2RlKSB7CiAgICAgICAgIGNhc2UgT1BfQVNTRVJUX05PVDoK
LSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVl
QXRPZmZzZXQoY29kZSwgMSk7Ci0gICAgICAgICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9BTFQp
OwotICAgICAgICAgICAgY29kZSArPSBPUF9sZW5ndGhzWypjb2RlXTsKKyAgICAgICAgICAgICAg
ICBhZHZhbmNlVG9FbmRPZkJyYWNrZXQoY29kZSk7CisgICAgICAgICAgICAgICAgY29kZSArPSAx
ICsgTElOS19TSVpFOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgT1BfV09SRF9C
T1VOREFSWToKICAgICAgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKLSAgICAgICAgY2Fz
ZSBPUF9CUkFOVU1CRVI6Ci0gICAgICAgICAgICBjb2RlICs9IE9QX2xlbmd0aHNbKmNvZGVdOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
Y29kZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAg
ICAgICAgRmluZCB0aGUgZml4ZWQgbGVuZ3RoIG9mIGEgcGF0dGVybiAgICAgICoKLSoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFNjYW4gYSBw
YXR0ZXJuIGFuZCBjb21wdXRlIHRoZSBmaXhlZCBsZW5ndGggb2Ygc3ViamVjdCB0aGF0IHdpbGwg
bWF0Y2ggaXQsCi1pZiB0aGUgbGVuZ3RoIGlzIGZpeGVkLiBUaGlzIGlzIG5lZWRlZCBmb3IgZGVh
bGluZyB3aXRoIGJhY2t3YXJkIGFzc2VydGlvbnMuCi1JbiBVVEY4IG1vZGUsIHRoZSByZXN1bHQg
aXMgaW4gY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KLQotQXJndW1lbnRzOgotICBjb2Rl
ICAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuICh0aGUgYnJhY2tldCkKLSAg
b3B0aW9ucyAgdGhlIGNvbXBpbGluZyBvcHRpb25zCi0KLVJldHVybnM6ICAgdGhlIGZpeGVkIGxl
bmd0aCwgb3IgLTEgaWYgdGhlcmUgaXMgbm8gZml4ZWQgbGVuZ3RoLAotICAgICAgICAgICAgIG9y
IC0yIGlmIFxDIHdhcyBlbmNvdW50ZXJlZAotKi8KLQotc3RhdGljIGludCBmaW5kX2ZpeGVkbGVu
Z3RoKHVzY2hhciogY29kZSwgaW50IG9wdGlvbnMpCi17Ci0gICAgaW50IGxlbmd0aCA9IC0xOwot
ICAgIAotICAgIGludCBicmFuY2hsZW5ndGggPSAwOwotICAgIHVzY2hhciogY2MgPSBjb2RlICsg
MSArIExJTktfU0laRTsKLSAgICAKLSAgICAvKiBTY2FuIGFsb25nIHRoZSBvcGNvZGVzIGZvciB0
aGlzIGJyYW5jaC4gSWYgd2UgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlCi0gICAgIGJyYW5jaCwgY2hl
Y2sgdGhlIGxlbmd0aCBhZ2FpbnN0IHRoYXQgb2YgdGhlIG90aGVyIGJyYW5jaGVzLiAqLwotICAg
IAotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBkOwotICAgICAgICBpbnQgb3AgPSAq
Y2M7Ci0gICAgICAgIGlmIChvcCA+PSBPUF9CUkEpCi0gICAgICAgICAgICBvcCA9IE9QX0JSQTsK
LSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgICAgIGNhc2UgT1BfQlJB
OgotICAgICAgICAgICAgY2FzZSBPUF9PTkNFOgotICAgICAgICAgICAgICAgIGQgPSBmaW5kX2Zp
eGVkbGVuZ3RoKGNjLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBpZiAoZCA8IDApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCAr
PSBkOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgY2MgKz0gZ2V0
T3Bjb2RlVmFsdWVBdE9mZnNldChjYywgMSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoKmNj
ID09IE9QX0FMVCk7Ci0gICAgICAgICAgICAgICAgY2MgKz0gMSArIExJTktfU0laRTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBS
ZWFjaGVkIGVuZCBvZiBhIGJyYW5jaDsgaWYgaXQncyBhIGtldCBpdCBpcyB0aGUgZW5kIG9mIGEg
bmVzdGVkCi0gICAgICAgICAgICAgICAgIGNhbGwuIElmIGl0J3MgQUxUIGl0IGlzIGFuIGFsdGVy
bmF0aW9uIGluIGEgbmVzdGVkIGNhbGwuIElmIGl0IGlzCi0gICAgICAgICAgICAgICAgIEVORCBp
dCdzIHRoZSBlbmQgb2YgdGhlIG91dGVyIGNhbGwuIEFsbCBjYW4gYmUgaGFuZGxlZCBieSB0aGUg
c2FtZSBjb2RlLiAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9BTFQ6
Ci0gICAgICAgICAgICBjYXNlIE9QX0tFVDoKLSAgICAgICAgICAgIGNhc2UgT1BfS0VUUk1BWDoK
LSAgICAgICAgICAgIGNhc2UgT1BfS0VUUk1JTjoKLSAgICAgICAgICAgIGNhc2UgT1BfRU5EOgot
ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSBicmFuY2hsZW5ndGg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobGVuZ3RoICE9IGJy
YW5jaGxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAg
ICAgIGlmICgqY2MgIT0gT1BfQUxUKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICAgICAgICAgICAg
YnJhbmNobGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICArK2NvZGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVy
IGFzc2VydGl2ZSBzdWJwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBPUF9BU1NFUlQ6Ci0gICAgICAgICAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6Ci0gICAgICAg
ICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBjYyArPSBnZXRPcGNvZGVWYWx1ZUF0
T2Zmc2V0KGNjLCAxKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsK
LSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgdGhpbmdzIHRoYXQgZG9uJ3QgbWF0Y2ggY2hhcnMg
Ki8KLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgT1BfQlJBTlVNQkVSOgotICAg
ICAgICAgICAgY2FzZSBPUF9DSVJDOgotICAgICAgICAgICAgY2FzZSBPUF9ET0xMOgotICAgICAg
ICAgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKLSAgICAgICAgICAgIGNhc2UgT1BfV09S
RF9CT1VOREFSWToKLSAgICAgICAgICAgICAgICBjYyArPSBPUF9sZW5ndGhzWypjY107Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyog
SGFuZGxlIGxpdGVyYWwgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBPUF9DSEFSOgotICAgICAgICAgICAgY2FzZSBPUF9DSEFSX0lHTk9SSU5HX0NBU0U6
Ci0gICAgICAgICAgICBjYXNlIE9QX05PVDoKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGgr
KzsKLSAgICAgICAgICAgICAgICBjYyArPSAyOwotICAgICAgICAgICAgICAgIHdoaWxlICgoKmNj
ICYgMHhjMCkgPT0gMHg4MCkKLSAgICAgICAgICAgICAgICAgICAgY2MrKzsKKyAgICAgICAgICAg
ICAgICBjb2RlICs9IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIE9QX0FTQ0lJX0NIQVI6Ci0gICAgICAgICAgICBjYXNlIE9QX0FT
Q0lJX0xFVFRFUl9JR05PUklOR19DQVNFOgotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCsr
OwotICAgICAgICAgICAgICAgIGNjICs9IDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogSGFuZGxlIGV4YWN0IHJlcGV0aXRpb25z
LiBUaGUgY291bnQgaXMgYWxyZWFkeSBpbiBjaGFyYWN0ZXJzLCBidXQgd2UKLSAgICAgICAgICAg
ICAgICAgbmVlZCB0byBza2lwIG92ZXIgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGluIFVURjggbW9k
ZS4gICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE9QX0VYQUNUOgotICAg
ICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQo
Y2MsMSk7Ci0gICAgICAgICAgICAgICAgY2MgKz0gNDsKLSAgICAgICAgICAgICAgICB3aGlsZSgo
KmNjICYgMHg4MCkgPT0gMHg4MCkKLSAgICAgICAgICAgICAgICAgICAgY2MrKzsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfVFlQ
RUVYQUNUOgotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBnZXQyQnl0ZU9wY29kZVZh
bHVlQXRPZmZzZXQoY2MsMSk7Ci0gICAgICAgICAgICAgICAgY2MgKz0gNDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBIYW5kbGUg
c2luZ2xlLWNoYXIgbWF0Y2hlcnMgKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgT1BfTk9UX0RJR0lUOgotICAgICAgICAgICAgY2FzZSBPUF9ESUdJVDoKLSAgICAgICAgICAg
IGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6Ci0gICAgICAgICAgICBjYXNlIE9QX1dISVRFU1BBQ0U6
Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKLSAgICAgICAgICAgIGNhc2UgT1Bf
V09SRENIQVI6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9ORVdMSU5FOgotICAgICAgICAgICAg
ICAgIGJyYW5jaGxlbmd0aCsrOwotICAgICAgICAgICAgICAgIGNjKys7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogQ2hlY2sgYSBj
bGFzcyBmb3IgdmFyaWFibGUgcXVhbnRpZmljYXRpb24gKi8KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgT1BfWENMQVNTOgotICAgICAgICAgICAgICAgIGNjICs9IGdldE9wY29k
ZVZhbHVlQXRPZmZzZXQoY2MsIDEpIC0gMzM7Ci0gICAgICAgICAgICAgICAgLyogRmFsbCB0aHJv
dWdoICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE9QX0NMQVNTOgotICAg
ICAgICAgICAgY2FzZSBPUF9OQ0xBU1M6Ci0gICAgICAgICAgICAgICAgY2MgKz0gMzM7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoICgqY2MpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIE9QX0NSU1RBUjoKLSAgICAgICAgICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoK
LSAgICAgICAgICAgICAgICBjYXNlIE9QX0NSUVVFUlk6Ci0gICAgICAgICAgICAgICAgY2FzZSBP
UF9DUk1JTlFVRVJZOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKLSAgICAgICAgICAg
ICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXQyQnl0
ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpICE9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dChjYywgMykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2Ms
IDEpOwotICAgICAgICAgICAgICAgICAgICBjYyArPSA1OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgYnJhbmNobGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8q
IEFueXRoaW5nIGVsc2UgaXMgdmFyaWFibGUgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY29kZTsKICAgICAgICAgfQogICAgIH0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgotKiAgICAgICAgIENvbXBsZXRlIGEgY2FsbG91dCBpdGVtICAgICAgICAgICAg
ICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLS8qIEEgY2FsbG91dCBpdGVtIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgaXRl
bSBpbiB0aGUgcGF0dGVybiwgd2hpY2gKLXdlIGNhbid0IGZpbGwgaW4gdGlsbCBhZnRlciB3ZSBo
YXZlIHJlYWNoZWQgdGhlIHJlbGV2YW50IHBvaW50LiBUaGlzIGlzIHVzZWQKLWZvciBib3RoIGF1
dG9tYXRpYyBhbmQgbWFudWFsIGNhbGxvdXRzLgotCi1Bcmd1bWVudHM6Ci0gIHByZXZpb3VzX2Nh
bGxvdXQgICBwb2ludHMgdG8gcHJldmlvdXMgY2FsbG91dCBpdGVtCi0gIHB0ciAgICAgICAgICAg
ICAgICBjdXJyZW50IHBhdHRlcm4gcG9pbnRlcgotICBjZCAgICAgICAgICAgICAgICAgcG9pbnRl
cnMgdG8gdGFibGVzIGV0YwotKi8KLQotc3RhdGljIHZvaWQgY29tcGxldGVfY2FsbG91dCh1c2No
YXIqIHByZXZpb3VzX2NhbGxvdXQsIGNvbnN0IFVDaGFyKiBwdHIsIGNvbnN0IENvbXBpbGVEYXRh
JiBjZCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gcHRyIC0gY2Quc3RhcnRfcGF0dGVybiAtIGdldE9w
Y29kZVZhbHVlQXRPZmZzZXQocHJldmlvdXNfY2FsbG91dCwgMik7Ci0gICAgcHV0T3Bjb2RlVmFs
dWVBdE9mZnNldChwcmV2aW91c19jYWxsb3V0LCAyICsgTElOS19TSVpFLCBsZW5ndGgpOwogfQog
Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICogICAgICAgICAgIEdldCBvdGhlcmNhc2UgcmFuZ2UgICAgICAgICAgICAgICAgICAqCiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjcwLDEy
ICs0NjgsMTIgQEAgQXJndW1lbnRzOgogWWllbGQ6ICAgICAgICB0cnVlIHdoZW4gcmFuZ2UgcmV0
dXJuZWQ7IGZhbHNlIHdoZW4gbm8gbW9yZQogKi8KIAotc3RhdGljIGJvb2wgZ2V0X290aGVyY2Fz
ZV9yYW5nZShpbnQqIGNwdHIsIGludCBkLCBpbnQqIG9jcHRyLCBpbnQqIG9kcHRyKQorc3RhdGlj
IGJvb2wgZ2V0T3RoZXJjYXNlUmFuZ2UoaW50KiBjcHRyLCBpbnQgZCwgaW50KiBvY3B0ciwgaW50
KiBvZHB0cikKIHsKICAgICBpbnQgYywgb3RoZXJjYXNlID0gMDsKICAgICAKICAgICBmb3IgKGMg
PSAqY3B0cjsgYyA8PSBkOyBjKyspIHsKLSAgICAgICAgaWYgKChvdGhlcmNhc2UgPSBfcGNyZV91
Y3Bfb3RoZXJjYXNlKGMpKSA+PSAwKQorICAgICAgICBpZiAoKG90aGVyY2FzZSA9IGtqc19wY3Jl
X3VjcF9vdGhlcmNhc2UoYykpID49IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CkBAIC02ODYsNyArNDg0LDcgQEAgc3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQq
IGNwdAogICAgIGludCBuZXh0ID0gb3RoZXJjYXNlICsgMTsKICAgICAKICAgICBmb3IgKCsrYzsg
YyA8PSBkOyBjKyspIHsKLSAgICAgICAgaWYgKF9wY3JlX3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4
dCkKKyAgICAgICAgaWYgKGtqc19wY3JlX3VjcF9vdGhlcmNhc2UoYykgIT0gbmV4dCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0Kys7CiAgICAgfQpAQCAtNzExLDE5ICs1MDksMTgg
QEAgc3RhdGljIGJvb2wgZ2V0X290aGVyY2FzZV9yYW5nZShpbnQqIGNwdAogIFJldHVybnM6ICAg
ICBudW1iZXIgb2YgY2hhcmFjdGVycyBwbGFjZWQgaW4gdGhlIGJ1ZmZlcgogICovCiAKLS8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gYXMgYWxsIFVURjggdXNlcyBhcmUg
cmVtb3ZlZCBmcm9tIFBDUkUKLWludCBfcGNyZV9vcmQydXRmOChpbnQgY3ZhbHVlLCB1c2NoYXIg
KmJ1ZmZlcikKK3N0YXRpYyBpbnQgZW5jb2RlVVRGOChpbnQgY3ZhbHVlLCB1bnNpZ25lZCBjaGFy
ICpidWZmZXIpCiB7CiAgICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0Zjhf
dGFibGUxX3NpemU7IGkrKykKLSAgICAgICAgaWYgKGN2YWx1ZSA8PSBfcGNyZV91dGY4X3RhYmxl
MVtpXSkKKyAgICBmb3IgKGkgPSAwOyBpIDwga2pzX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsr
KQorICAgICAgICBpZiAoY3ZhbHVlIDw9IGtqc19wY3JlX3V0ZjhfdGFibGUxW2ldKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgYnVmZmVyICs9IGk7CiAgICAgZm9yIChpbnQgaiA9IGk7IGogPiAw
OyBqLS0pIHsKICAgICAgICAgKmJ1ZmZlci0tID0gMHg4MCB8IChjdmFsdWUgJiAweDNmKTsKICAg
ICAgICAgY3ZhbHVlID4+PSA2OwogICAgIH0KLSAgICAqYnVmZmVyID0gX3BjcmVfdXRmOF90YWJs
ZTJbaV0gfCBjdmFsdWU7CisgICAgKmJ1ZmZlciA9IGtqc19wY3JlX3V0ZjhfdGFibGUyW2ldIHwg
Y3ZhbHVlOwogICAgIHJldHVybiBpICsgMTsKIH0KIApAQCAtNzUzLDcgKzU1MCw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzYWZlbHlDaGVja05leHRDaGFyKGMKIH0KIAogc3RhdGljIGJvb2wKLWNv
bXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMsIHVzY2hhcioqIGNvZGVwdHIs
Citjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzLCB1bnNpZ25lZCBjaGFy
KiogY29kZXB0ciwKICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBV
Q2hhciogcGF0dGVybkVuZCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIsIGludCAqZmlyc3RieXRl
cHRyLAogICAgICAgICAgICAgICAgaW50KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2QpCiB7
CkBAIC03NjEsMjAgKzU1OCwxOCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJy
YWNrZXRzCiAgICAgaW50IHJlcGVhdF9taW4gPSAwLCByZXBlYXRfbWF4ID0gMDsgICAgICAvKiBU
byBwbGVhc2UgcGlja3kgY29tcGlsZXJzICovCiAgICAgaW50IGJyYXZhbHVlID0gMDsKICAgICBp
bnQgcmVxdmFyeSwgdGVtcHJlcXZhcnk7Ci0gICAgaW50IGFmdGVyX21hbnVhbF9jYWxsb3V0ID0g
MDsKICAgICBpbnQgYzsKLSAgICB1c2NoYXIqIGNvZGUgPSAqY29kZXB0cjsKLSAgICB1c2NoYXIq
IHRlbXBjb2RlOworICAgIHVuc2lnbmVkIGNoYXIqIGNvZGUgPSAqY29kZXB0cjsKKyAgICB1bnNp
Z25lZCBjaGFyKiB0ZW1wY29kZTsKICAgICBib29sIGdyb3Vwc2V0Zmlyc3RieXRlID0gZmFsc2U7
CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9ICpwdHJwdHI7CiAgICAgY29uc3QgVUNoYXIqIHRlbXBw
dHI7Ci0gICAgdXNjaGFyKiBwcmV2aW91cyA9IE5VTEw7Ci0gICAgdXNjaGFyKiBwcmV2aW91c19j
YWxsb3V0ID0gTlVMTDsKLSAgICB1c2NoYXIgY2xhc3NiaXRzWzMyXTsKKyAgICB1bnNpZ25lZCBj
aGFyKiBwcmV2aW91cyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjbGFzc2JpdHNbMzJdOwog
ICAgIAogICAgIGJvb2wgY2xhc3NfdXRmODsKLSAgICB1c2NoYXIqIGNsYXNzX3V0ZjhkYXRhOwot
ICAgIHVzY2hhciB1dGY4X2NoYXJbNl07CisgICAgdW5zaWduZWQgY2hhciogY2xhc3NfdXRmOGRh
dGE7CisgICAgdW5zaWduZWQgY2hhciB1dGY4X2NoYXJbNl07CiAgICAgCiAgICAgLyogSW5pdGlh
bGl6ZSBubyBmaXJzdCBieXRlLCBubyByZXF1aXJlZCBieXRlLiBSRVFfVU5TRVQgbWVhbnMgIm5v
IGNoYXIKICAgICAgbWF0Y2hpbmcgZW5jb3VudGVyZWQgeWV0Ii4gSXQgZ2V0cyBjaGFuZ2VkIHRv
IFJFUV9OT05FIGlmIHdlIGhpdCBzb21ldGhpbmcgdGhhdApAQCAtODA5LDcgKzYwNCw3IEBAIGNv
bXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgaW50IHN1YnJl
cWJ5dGU7CiAgICAgICAgIGludCBzdWJmaXJzdGJ5dGU7CiAgICAgICAgIGludCBtY2xlbmd0aDsK
LSAgICAgICAgdXNjaGFyIG1jYnVmZmVyWzhdOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1jYnVm
ZmVyWzhdOwogICAgICAgICAKICAgICAgICAgLyogTmV4dCBieXRlIGluIHRoZSBwYXR0ZXJuICov
CiAgICAgICAgIApAQCAtODE4LDEyICs2MTMsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25z
LCBpbnQqIGJyYWNrZXRzCiAgICAgICAgIC8qIEZpbGwgaW4gbGVuZ3RoIG9mIGEgcHJldmlvdXMg
Y2FsbG91dCwgZXhjZXB0IHdoZW4gdGhlIG5leHQgdGhpbmcgaXMKICAgICAgICAgIGEgcXVhbnRp
Zmllci4gKi8KICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNfcXVhbnRpZmllciA9IGMgPT0gJyon
IHx8IGMgPT0gJysnIHx8IGMgPT0gJz8nIHx8IChjID09ICd7JyAmJiBpc19jb3VudGVkX3JlcGVh
dChwdHIgKyAxLCBwYXR0ZXJuRW5kKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzX3F1YW50
aWZpZXIgJiYgcHJldmlvdXNfY2FsbG91dCAmJiBhZnRlcl9tYW51YWxfY2FsbG91dC0tIDw9IDAp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRlX2NhbGxvdXQocHJldmlvdXNfY2FsbG91dCwgcHRyLCBj
ZCk7Ci0gICAgICAgICAgICBwcmV2aW91c19jYWxsb3V0ID0gTlVMTDsKLSAgICAgICAgfQorICAg
ICAgICBib29sIGlzX3F1YW50aWZpZXIgPSBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICc/
JyB8fCAoYyA9PSAneycgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKTsK
ICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgLyogVGhlIGJyYW5j
aCB0ZXJtaW5hdGVzIGF0IGVuZCBvZiBzdHJpbmcsIHwsIG9yICkuICovCkBAIC05MTYsNyArNzA2
LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAg
ICAgICAgICBjaGFyYWN0ZXIgKDwgMjU2KSwgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIGNvbXBp
bGVkIGNvZGUgZG9lc24ndCB1c2UgdGhlCiAgICAgICAgICAgICAgICAgIGJpdCBtYXAuICovCiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwgMzIg
KiBzaXplb2YodXNjaGFyKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KGNsYXNzYml0cywgMCwg
MzIgKiBzaXplb2YodW5zaWduZWQgY2hhcikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8qIFByb2Nlc3MgY2hhcmFjdGVycyB1bnRpbCBdIGlzIHJlYWNoZWQuIFRoZSBmaXJz
dCBwYXNzCiAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIHJlZ2V4IGNoZWNrZWQgdGhlIG92
ZXJhbGwgc3ludGF4LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGJlIHZlcnkKQEAgLTkzMyw3ICs3MjMs
NyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAg
ICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlbSwgc28gc2V0IGNsYXNzX2NoYXJjb3VudCBiaWdn
ZXIgdGhhbiBvbmUuICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNj
YXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBl
cnJvcmNvZGVwdHIsICpicmFja2V0cywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtYyA9PSBFU0NfYikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjID0gJ1xiJzsgICAgICAgLyogXGIgaXMgYmFja3NsYXNoIGluIGEgY2xh
c3MgKi8KQEAgLTEwMDQsNyArNzk0LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50
KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZCA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIG9sZHB0ciA9IHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY2hl
Y2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY2hlY2tFc2NhcGUoJnB0ciwgcGF0
dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxiIGlzIGJhY2tz
bGFzaDsgXFggaXMgbGl0ZXJhbCBYOyBhbnkgb3RoZXIgc3BlY2lhbCBtZWFucyB0aGUgJy0nCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBsaXRlcmFsICovCkBAIC0xMDQxLDcgKzgz
MSw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9jYywgb2NkOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2MgPSBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb3JpZ2QgPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
Z2V0X290aGVyY2FzZV9yYW5nZSgmY2MsIG9yaWdkLCAmb2NjLCAmb2NkKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0T3RoZXJjYXNlUmFuZ2UoJmNjLCBvcmln
ZCwgJm9jYywgJm9jZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvY2MgPj0gYyAmJiBvY2QgPD0gZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsgIC8qIFNraXAgZW1iZWRkZWQgcmFuZ2VzICovCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNjAsOSArODUwLDkgQEAgY29tcGlsZUJy
YW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3Jl
X29yZDJ1dGY4KG9jYywgY2xhc3NfdXRmOGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgob2NjLCBjbGFzc191
dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQy
dXRmOChvY2QsIGNsYXNzX3V0ZjhkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgob2NkLCBjbGFzc191dGY4ZGF0YSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDcwLDggKzg2MCw4
IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmcgcmFuZ2VzLiAqLwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0
YSsrID0gWENMX1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0Zjhk
YXRhICs9IF9wY3JlX29yZDJ1dGY4KGMsIGNsYXNzX3V0ZjhkYXRhKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRmOChkLCBjbGFzc191
dGY4ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0g
ZW5jb2RlVVRGOChjLCBjbGFzc191dGY4ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5jb2RlVVRGOChkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
V2l0aCBVQ1Agc3VwcG9ydCwgd2UgYXJlIGRvbmUuIFdpdGhvdXQgVUNQIHN1cHBvcnQsIHRoZXJl
IGlzIG5vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VsZXNzIG1hdGNoaW5nIGZv
ciBVVEYtOCBjaGFyYWN0ZXJzID4gMTI3OyB3ZSBjYW4gdXNlIHRoZSBiaXQgbWFwCkBAIC0xMTA4
LDEzICs4OTgsMTMgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwog
ICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPiAyNTUgfHwgKChvcHRpb25zICYgSWdub3JlQ2Fz
ZU9wdGlvbikgJiYgYyA+IDEyNykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191
dGY4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0g
WENMX1NJTkdMRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9w
Y3JlX29yZDJ1dGY4KGMsIGNsYXNzX3V0ZjhkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgoYywgY2xhc3NfdXRmOGRhdGEpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAm
IElnbm9yZUNhc2VPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3Ro
ZXJjYXNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob3RoZXJjYXNlID0gX3Bj
cmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgob3RoZXJjYXNlID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2xhc3NfdXRmOGRhdGErKyA9IFhDTF9TSU5H
TEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9w
Y3JlX29yZDJ1dGY4KG90aGVyY2FzZSwgY2xhc3NfdXRmOGRhdGEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSArPSBlbmNvZGVVVEY4KG90aGVyY2FzZSwg
Y2xhc3NfdXRmOGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEyMDIs
NyArOTkyLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogTm93IGZpbGwgaW4gdGhl
IGNvbXBsZXRlIGxlbmd0aCBvZiB0aGUgaXRlbSAqLwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChwcmV2aW91cywgMSwgY29k
ZSAtIHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlKHByZXZpb3Vz
ICsgMSwgY29kZSAtIHByZXZpb3VzKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyog
RW5kIG9mIGNsYXNzIGhhbmRsaW5nICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMTIyNyw3ICsxMDE3LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50
KiBicmFja2V0cwogICAgICAgICAgICAgY2FzZSAneyc6CiAgICAgICAgICAgICAgICAgaWYgKCFp
c19xdWFudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAg
ICAgICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJnJlcGVhdF9taW4s
ICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOworICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRS
ZXBlYXRDb3VudHMocHRyICsgMSwgJnJlcGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVw
dHIpOwogICAgICAgICAgICAgICAgIGlmICgqZXJyb3Jjb2RlcHRyKQogICAgICAgICAgICAgICAg
ICAgICBnb3RvIEZBSUxFRDsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVDsKQEAgLTEyNjUs
NiArMTA1NSw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBTYXZlIHN0YXJ0IG9mIHByZXZpb3Vz
IGl0ZW0sIGluIGNhc2Ugd2UgaGF2ZSB0byBtb3ZlIGl0IHVwIHRvIG1ha2Ugc3BhY2UKICAgICAg
ICAgICAgICAgICAgZm9yIGFuIGluc2VydGVkIE9QX09OQ0UgZm9yIHRoZSBhZGRpdGlvbmFsICcr
JyBleHRlbnNpb24uICovCisgICAgICAgICAgICAgICAgLyogRklYTUU6IFByb2JhYmx5IGRvbid0
IG5lZWQgdGhpcyBiZWNhdXNlIHdlIGRvbid0IHVzZSBPUF9PTkNFLiAqLwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHRlbXBjb2RlID0gcHJldmlvdXM7CiAgICAgICAgICAgICAg
ICAgCkBAIC0xMjkzLDcgKzEwODQsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQq
IGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggcmF0aGVyIHRoYW4gYSBzbWFs
bCBjaGFyYWN0ZXIuICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAoY29kZVstMV0gJiAweDgwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIg
Kmxhc3RjaGFyID0gY29kZSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyICpsYXN0Y2hhciA9IGNvZGUgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUo
KCpsYXN0Y2hhciAmIDB4YzApID09IDB4ODApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdGNoYXItLTsKICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjb2RlIC0gbGFzdGNoYXI7
ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIFVURi04IGNoYXJhY3RlciAqLwpAQCAtMTMzOSw3ICsx
MTMwLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAg
ICAgICAgICAgICAgICBpbnQgcHJvcF90eXBlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIGlu
dCBwcm9wX3ZhbHVlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICB1c2NoYXIqIG9sZGNvZGUgPSBjb2RlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyKiBvbGRjb2RlID0gY29kZTsKICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHByZXZp
b3VzOyAgICAgICAgICAgICAgICAgIC8qIFVzdWFsbHkgb3ZlcndyaXRlIHByZXZpb3VzIGl0ZW0g
Ki8KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBt
YXhpbXVtIGlzIHplcm8gdGhlbiB0aGUgbWluaW11bSBtdXN0IGFsc28gYmUgemVybzsgUGVybCBh
bGxvd3MKQEAgLTEzNjIsNyArMTE1Myw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGlu
dCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfUVVF
UlkgKyByZXBlYXRfdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9VUFRPICsgcmVwZWF0X3R5cGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0QW5k
QWR2YW5jZShjb2RlLCAwLCByZXBlYXRfbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWF4KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTEzNzksNyArMTE3MCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCog
YnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0X21heCA9PSAx
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVORF9SRVBFQVQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRB
bmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWF4IC0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0xMzg4LDcgKzExNzksNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRp
b25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9FWEFDVCAr
IG9wX3R5cGU7ICAvKiBOQiBFWEFDVCBkb2Vzbid0IGhhdmUgcmVwZWF0X3R5cGUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2Uo
Y29kZSwgMCwgcmVwZWF0X21pbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZh
bHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWluKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIG1heGltdW0gaXMgdW5saW1pdGVk
LCBpbnNlcnQgYW4gT1BfU1RBUi4gQmVmb3JlIGRvaW5nIHNvLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBjaGFyYWN0ZXIgZm9yIHRoZSBwcmV2aW91cyBj
b2RlLiBGb3IgYSByZXBlYXRlZApAQCAtMTQyNSw3ICsxMjE2LDcgQEAgY29tcGlsZUJyYW5jaChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRfbWF4IC09IHJlcGVhdF9taW47CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlw
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKGNvZGUsIHJlcGVhdF9tYXgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMTQ2NywyMCArMTI1OCwyMCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25z
LCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfQ1JR
VUVSWSArIHJlcGVhdF90eXBlOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9DUlJBTkdFICsgcmVwZWF0X3R5cGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNl
KGNvZGUsIDAsIHJlcGVhdF9taW4pOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVW
YWx1ZUFuZEFkdmFuY2UoY29kZSwgcmVwZWF0X21pbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVwZWF0X21heCA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBl
YXRfbWF4ID0gMDsgIC8qIDItYnl0ZSBlbmNvZGluZyBmb3IgbWF4ICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAs
IHJlcGVhdF9tYXgpOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFk
dmFuY2UoY29kZSwgcmVwZWF0X21heCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogSWYgcHJldmlv
dXMgd2FzIGEgYnJhY2tldCBncm91cCwgd2UgbWF5IGhhdmUgdG8gcmVwbGljYXRlIGl0IGluIGNl
cnRhaW4KICAgICAgICAgICAgICAgICAgY2FzZXMuICovCiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoKnByZXZpb3VzID49IE9QX0JSQSB8fCAqcHJldmlvdXMgPT0g
T1BfT05DRSkgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpwcmV2aW91cyA+PSBPUF9CUkEp
IHsKICAgICAgICAgICAgICAgICAgICAgaW50IGtldG9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBsZW4gPSBjb2RlIC0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgIHVz
Y2hhciogYnJhbGluayA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGJyYWxpbmsgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgLyogSWYgdGhlIG1heGltdW0gcmVwZWF0IGNvdW50IGlzIHVubGltaXRlZCwgZmluZCB0aGUg
ZW5kIG9mIHRoZSBicmFja2V0CiAgICAgICAgICAgICAgICAgICAgICBieSBzY2FubmluZyB0aHJv
dWdoIGZyb20gdGhlIHN0YXJ0LCBhbmQgY29tcHV0ZSB0aGUgb2Zmc2V0IGJhY2sgdG8gaXQKQEAg
LTE0ODksMTAgKzEyODAsOCBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNr
ZXRzCiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLiAqLwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdF9tYXggPT0gLTEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVzY2hhcioga2V0ID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V0ICs9IGdldE9wY29k
ZVZhbHVlQXRPZmZzZXQoa2V0LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUg
KCprZXQgIT0gT1BfS0VUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGtldCA9IHByZXZpb3VzOworICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRv
RW5kT2ZCcmFja2V0KGtldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZXRvZmZzZXQgPSBj
b2RlIC0ga2V0OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtMTU0NCw3ICsxMzMzLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFj
a2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBvZmZzZXQgPSAoIWJyYWxpbmspID8gMCA6IHByZXZpb3VzIC0gYnJhbGluazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFsaW5rID0gcHJldmlvdXM7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UocHJl
dmlvdXMsIDAsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlua1Zh
bHVlQWxsb3daZXJvQW5kQWR2YW5jZShwcmV2aW91cywgb2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwZWF0X21heC0tOwpAQCAtMTU4NSw3ICsxMzc0LDcgQEAgY29tcGlsZUJyYW5jaChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqY29kZSsrID0gT1BfQlJBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gKCFicmFsaW5rKSA/IDAgOiBjb2RlIC0gYnJhbGluazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJhbGluayA9IGNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dExpbmtWYWx1ZUFsbG93WmVy
b0FuZEFkdmFuY2UoY29kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtY3B5KGNvZGUsIHByZXZpb3VzLCBsZW4pOwpAQCAtMTU5NywxMiArMTM4NiwxMiBAQCBj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChicmFsaW5rKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvZGUgLSBicmFsaW5rICsgMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2NoYXIqIGJyYSA9IGNvZGUgLSBvZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZGxpbmtvZmZzZXQgPSBnZXRPcGNv
ZGVWYWx1ZUF0T2Zmc2V0KGJyYSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJh
bGluayA9IG9sZGxpbmtvZmZzZXQgPyBicmFsaW5rIC0gb2xkbGlua29mZnNldCA6IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYnJhID0gY29kZSAtIG9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkbGlua29mZnNldCA9IGdldExp
bmtWYWx1ZUFsbG93WmVybyhicmEgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmFsaW5rID0gKCFvbGRsaW5rb2Zmc2V0KSA/IDAgOiBicmFsaW5rIC0gb2xkbGlua29mZnNldDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfS0VUOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUs
IDAsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVB
dE9mZnNldChicmEsIDEsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0
TGlua1ZhbHVlQW5kQWR2YW5jZShjb2RlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1dExpbmtWYWx1ZShicmEgKyAxLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MTY2MCw3ICsxNDQ5LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD
aGFyYWN0ZXIgYWZ0ZXIgKD8gbm90IHNwZWNpYWxseSByZWNvZ25pemVkICovCiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAvKiBPcHRpb24gc2V0dGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC0xNjc0LDcgKzE0NjMsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNr
ZXRzCiAgICAgICAgICAgICAgICAgICAgIGlmICgrKygqYnJhY2tldHMpID4gRVhUUkFDVF9CQVNJ
Q19NQVgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBICsgRVhU
UkFDVF9CQVNJQ19NQVggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgY29kZVsxICsgTElO
S19TSVpFXSA9IE9QX0JSQU5VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRl
T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAyK0xJTktfU0laRSwgKmJyYWNrZXRzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlVmFsdWUoY29kZSArIDIgKyBMSU5LX1NJWkUsICpi
cmFja2V0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBza2lwYnl0ZXMgPSAzOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTE2ODYsNyArMTQ3
NSw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAg
ICAgICAgICAgdG8gcGFzcyBpdHMgYWRkcmVzcyBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIGNvbXBs
YWluIG90aGVyd2lzZS4gUGFzcyBpbiBhCiAgICAgICAgICAgICAgICAgIG5ldyBzZXR0aW5nIGZv
ciB0aGUgaW1zIG9wdGlvbnMgaWYgdGhleSBoYXZlIGNoYW5nZWQuICovCiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgcHJldmlvdXMgPSAoYnJhdmFsdWUgPj0gT1BfT05DRSkgPyBj
b2RlIDogMDsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IChicmF2YWx1ZSA+PSBPUF9CUkFa
RVJPKSA/IGNvZGUgOiAwOwogICAgICAgICAgICAgICAgICpjb2RlID0gYnJhdmFsdWU7CiAgICAg
ICAgICAgICAgICAgdGVtcGNvZGUgPSBjb2RlOwogICAgICAgICAgICAgICAgIHRlbXByZXF2YXJ5
ID0gY2QucmVxX3ZhcnlvcHQ7ICAgICAvKiBTYXZlIHZhbHVlIGJlZm9yZSBicmFja2V0ICovCkBA
IC0xNzE5LDcgKzE1MDgsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNr
ZXRzCiAgICAgICAgICAgICAgICAgemVyb2ZpcnN0Ynl0ZSA9IGZpcnN0Ynl0ZTsKICAgICAgICAg
ICAgICAgICBncm91cHNldGZpcnN0Ynl0ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChicmF2YWx1ZSA+PSBPUF9CUkEgfHwgYnJhdmFsdWUgPT0gT1BfT05D
RSkgeworICAgICAgICAgICAgICAgIGlmIChicmF2YWx1ZSA+PSBPUF9CUkEpIHsKICAgICAgICAg
ICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBub3QgeWV0IHNldCBhIGZpcnN0Ynl0ZSBpbiB0aGlz
IGJyYW5jaCwgdGFrZSBpdCBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgc3VicGF0dGVy
biwgcmVtZW1iZXJpbmcgdGhhdCBpdCB3YXMgc2V0IGhlcmUgc28gdGhhdCBhIHJlcGVhdCBvZiBt
b3JlCiAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uZSBjYW4gcmVwbGljYXRlIGl0IGFzIHJl
cWJ5dGUgaWYgbmVjZXNzYXJ5LiBJZiB0aGUgc3VicGF0dGVybiBoYXMKQEAgLTE3NzksNyArMTU2
OCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgJ1xcJzoKICAgICAgICAgICAgICAgICB0ZW1wcHRy
ID0gcHRyOwotICAgICAgICAgICAgICAgIGMgPSBjaGVja19lc2NhcGUoJnB0ciwgcGF0dGVybkVu
ZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjID0g
Y2hlY2tFc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIGZh
bHNlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgbWV0YWNo
YXJhY3RlcnMgaW50cm9kdWNlZCBieSBcLiBGb3Igb25lcyBsaWtlIFxkLCB0aGUgRVNDXyB2YWx1
ZXMKICAgICAgICAgICAgICAgICAgYXJlIGFycmFuZ2VkIHRvIGJlIHRoZSBuZWdhdGlvbiBvZiB0
aGUgY29ycmVzcG9uZGluZyBPUF92YWx1ZXMuIEZvciB0aGUKQEAgLTE4MDYsNyArMTU5NSw3IEBA
IGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBudW1iZXIgPSAtYyAtIEVTQ19SRUY7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmV2aW91cyA9IGNvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0g
T1BfUkVGOwotICAgICAgICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zm
c2V0QW5kQWR2YW5jZShjb2RlLCAwLCBudW1iZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UoY29kZSwgbnVtYmVyKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHRo
ZSByZXN0LCB3ZSBjYW4gb2J0YWluIHRoZSBPUCB2YWx1ZSBieSBuZWdhdGluZyB0aGUgZXNjYXBl
CkBAIC0xODQyLDcgKzE2MzEsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJy
YWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gYzsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1jbGVuZ3RoID0gX3BjcmVfb3JkMnV0ZjgoYywgbWNidWZmZXIpOworICAgICAgICAgICAgICAg
ICAgICBtY2xlbmd0aCA9IGVuY29kZVVURjgoYywgbWNidWZmZXIpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IChvcHRpb25zICYgSWdub3JlQ2Fz
ZU9wdGlvbikgPyBPUF9DSEFSX0lHTk9SSU5HX0NBU0UgOiBPUF9DSEFSOwogICAgICAgICAgICAg
ICAgICAgICBmb3IgKGMgPSAwOyBjIDwgbWNsZW5ndGg7IGMrKykKQEAgLTE4OTMsOSArMTY4Miw2
IEBAIEZBSUxFRDoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLQotCi0KIC8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICBDb21waWxlIHNlcXVl
bmNlIG9mIGFsdGVybmF0aXZlcyAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5MjMsMjAgKzE3MDksMjAgQEAgUmV0dXJu
czogICAgICB0cnVlIG9uIHN1Y2Nlc3MKICovCiAKIHN0YXRpYyBib29sCi1jb21waWxlQnJhY2tl
dChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cywgdXNjaGFyKiogY29kZXB0ciwKK2NvbXBpbGVC
cmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzLCB1bnNpZ25lZCBjaGFyKiogY29kZXB0
ciwKICAgICBjb25zdCBVQ2hhcioqIHB0cnB0ciwgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQsIEVy
cm9yQ29kZSogZXJyb3Jjb2RlcHRyLCBpbnQgc2tpcGJ5dGVzLAogICAgIGludCogZmlyc3RieXRl
cHRyLCBpbnQqIHJlcWJ5dGVwdHIsIENvbXBpbGVEYXRhJiBjZCkKIHsKICAgICBjb25zdCBVQ2hh
ciogcHRyID0gKnB0cnB0cjsKLSAgICB1c2NoYXIqIGNvZGUgPSAqY29kZXB0cjsKLSAgICB1c2No
YXIqIGxhc3RfYnJhbmNoID0gY29kZTsKLSAgICB1c2NoYXIqIHN0YXJ0X2JyYWNrZXQgPSBjb2Rl
OworICAgIHVuc2lnbmVkIGNoYXIqIGNvZGUgPSAqY29kZXB0cjsKKyAgICB1bnNpZ25lZCBjaGFy
KiBsYXN0X2JyYW5jaCA9IGNvZGU7CisgICAgdW5zaWduZWQgY2hhciogc3RhcnRfYnJhY2tldCA9
IGNvZGU7CiAgICAgaW50IGZpcnN0Ynl0ZSA9IFJFUV9VTlNFVDsKICAgICBpbnQgcmVxYnl0ZSA9
IFJFUV9VTlNFVDsKICAgICAKICAgICAvKiBPZmZzZXQgaXMgc2V0IHplcm8gdG8gbWFyayB0aGF0
IHRoaXMgYnJhY2tldCBpcyBzdGlsbCBvcGVuICovCiAgICAgCi0gICAgcHV0T3Bjb2RlVmFsdWVB
dE9mZnNldChjb2RlLCAxLCAwKTsKKyAgICBwdXRMaW5rVmFsdWVBbGxvd1plcm8oY29kZSArIDEs
IDApOwogICAgIGNvZGUgKz0gMSArIExJTktfU0laRSArIHNraXBieXRlczsKICAgICAKICAgICAv
KiBMb29wIGZvciBlYWNoIGFsdGVybmF0aXZlIGJyYW5jaCAqLwpAQCAtMjAwMiw4ICsxNzg4LDgg
QEAgY29tcGlsZUJyYWNrZXQoaW50IG9wdGlvbnMsIGludCogYnJhY2tldAogICAgICAgICBpZiAo
cHRyID49IHBhdHRlcm5FbmQgfHwgKnB0ciAhPSAnfCcpIHsKICAgICAgICAgICAgIGludCBsZW5n
dGggPSBjb2RlIC0gbGFzdF9icmFuY2g7CiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgaW50IHByZXZfbGVuZ3RoID0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChsYXN0X2JyYW5jaCwg
MSk7Ci0gICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChsYXN0X2JyYW5jaCwg
MSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpbnQgcHJldl9sZW5ndGggPSBnZXRMaW5rVmFs
dWVBbGxvd1plcm8obGFzdF9icmFuY2ggKyAxKTsKKyAgICAgICAgICAgICAgICBwdXRMaW5rVmFs
dWUobGFzdF9icmFuY2ggKyAxLCBsZW5ndGgpOwogICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBy
ZXZfbGVuZ3RoOwogICAgICAgICAgICAgICAgIGxhc3RfYnJhbmNoIC09IGxlbmd0aDsKICAgICAg
ICAgICAgIH0gd2hpbGUgKGxlbmd0aCA+IDApOwpAQCAtMjAxMSw3ICsxNzk3LDcgQEAgY29tcGls
ZUJyYWNrZXQoaW50IG9wdGlvbnMsIGludCogYnJhY2tldAogICAgICAgICAgICAgLyogRmlsbCBp
biB0aGUga2V0ICovCiAgICAgICAgICAgICAKICAgICAgICAgICAgICpjb2RlID0gT1BfS0VUOwot
ICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAxLCBjb2RlIC0gc3RhcnRf
YnJhY2tldCk7CisgICAgICAgICAgICBwdXRMaW5rVmFsdWUoY29kZSArIDEsIGNvZGUgLSBzdGFy
dF9icmFja2V0KTsKICAgICAgICAgICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLyogU2V0IHZhbHVlcyB0byBwYXNzIGJhY2sgKi8KQEAgLTIwMjks
NyArMTgxNSw3IEBAIGNvbXBpbGVCcmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAg
ICAgICAgIHplcm8gb2Zmc2V0IHVudGlsIGl0IGlzIGNsb3NlZCwgbWFraW5nIGl0IHBvc3NpYmxl
IHRvIGRldGVjdCByZWN1cnNpb24uICovCiAgICAgICAgIAogICAgICAgICAqY29kZSA9IE9QX0FM
VDsKLSAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAxLCBjb2RlIC0gbGFzdF9i
cmFuY2gpOworICAgICAgICBwdXRMaW5rVmFsdWUoY29kZSArIDEsIGNvZGUgLSBsYXN0X2JyYW5j
aCk7CiAgICAgICAgIGxhc3RfYnJhbmNoID0gY29kZTsKICAgICAgICAgY29kZSArPSAxICsgTElO
S19TSVpFOwogICAgICAgICBwdHIrKzsKQEAgLTIwMzcsNyArMTgyMyw2IEBAIGNvbXBpbGVCcmFj
a2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgogKiAgICAgICAgICBDaGVjayBmb3IgYW5jaG9yZWQgZXhwcmVzc2lvbiAgICAgICAgICoKICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMDU1
LDI1ICsxODQwLDI1IEBAIEFyZ3VtZW50czoKICAgYmFja3JlZk1hcCAgICB0aGUgYmFjayByZWZl
cmVuY2UgYml0bWFwCiAqLwogCi1zdGF0aWMgYm9vbCBicmFuY2hJc0FuY2hvcmVkKGNvbnN0IHVz
Y2hhciogY29kZSkKK3N0YXRpYyBib29sIGJyYW5jaElzQW5jaG9yZWQoY29uc3QgdW5zaWduZWQg
Y2hhciogY29kZSkKIHsKLSAgICBjb25zdCB1c2NoYXIqIHNjb2RlID0gZmlyc3RTaWduaWZpY2Fu
dE9wQ29kZShjb2RlKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzY29kZSA9IGZpcnN0U2ln
bmlmaWNhbnRPcGNvZGUoY29kZSk7CiAgICAgaW50IG9wID0gKnNjb2RlOwogCiAgICAgLyogQnJh
Y2tldHMgKi8KLSAgICBpZiAob3AgPj0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCB8fCBvcCA9
PSBPUF9PTkNFKQorICAgIGlmIChvcCA+PSBPUF9CUkEgfHwgb3AgPT0gT1BfQVNTRVJUKQogICAg
ICAgICByZXR1cm4gYnJhY2tldElzQW5jaG9yZWQoc2NvZGUpOwogCiAgICAgLyogQ2hlY2sgZm9y
IGV4cGxpY2l0IGFuY2hvcmluZyAqLyAgICAKICAgICByZXR1cm4gb3AgPT0gT1BfQ0lSQzsKIH0K
IAotc3RhdGljIGJvb2wgYnJhY2tldElzQW5jaG9yZWQoY29uc3QgdXNjaGFyKiBjb2RlKQorc3Rh
dGljIGJvb2wgYnJhY2tldElzQW5jaG9yZWQoY29uc3QgdW5zaWduZWQgY2hhciogY29kZSkKIHsK
ICAgICBkbyB7CiAgICAgICAgIGlmICghYnJhbmNoSXNBbmNob3JlZChjb2RlICsgMSArIExJTktf
U0laRSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvZGUgKz0gZ2V0T3Bj
b2RlVmFsdWVBdE9mZnNldChjb2RlLCAxKTsKKyAgICAgICAgY29kZSArPSBnZXRMaW5rVmFsdWUo
Y29kZSArIDEpOwogICAgIH0gd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7ICAgLyogTG9vcCBmb3Ig
ZWFjaCBhbHRlcm5hdGl2ZSAqLwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjEwMCwyMiArMTg4
NSwyMiBAQCBBcmd1bWVudHM6CiAgIGJhY2tyZWZNYXAgICAgdGhlIGJhY2sgcmVmZXJlbmNlIGJp
dG1hcAogKi8KIAotc3RhdGljIGJvb2wgYnJhbmNoTmVlZHNMaW5lU3RhcnQoY29uc3QgdXNjaGFy
KiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKQorc3RhdGlj
IGJvb2wgYnJhbmNoTmVlZHNMaW5lU3RhcnQoY29uc3QgdW5zaWduZWQgY2hhciogY29kZSwgdW5z
aWduZWQgY2FwdHVyZU1hcCwgdW5zaWduZWQgYmFja3JlZk1hcCkKIHsKLSAgICBjb25zdCB1c2No
YXIqIHNjb2RlID0gZmlyc3RTaWduaWZpY2FudE9wQ29kZShjb2RlKTsKKyAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRPcGNvZGUoY29kZSk7CiAgICAgaW50
IG9wID0gKnNjb2RlOwogICAgIAogICAgIC8qIENhcHR1cmluZyBicmFja2V0cyAqLwogICAgIGlm
IChvcCA+IE9QX0JSQSkgewogICAgICAgICBpbnQgY2FwdHVyZU51bSA9IG9wIC0gT1BfQlJBOwog
ICAgICAgICBpZiAoY2FwdHVyZU51bSA+IEVYVFJBQ1RfQkFTSUNfTUFYKQotICAgICAgICAgICAg
Y2FwdHVyZU51bSA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzY29kZSwgMiArIExJTktf
U0laRSk7CisgICAgICAgICAgICBjYXB0dXJlTnVtID0gZ2V0MkJ5dGVWYWx1ZShzY29kZSArIDIg
KyBMSU5LX1NJWkUpOwogICAgICAgICBpbnQgYnJhY2tldE1hc2sgPSAoY2FwdHVyZU51bSA8IDMy
KSA/ICgxIDw8IGNhcHR1cmVOdW0pIDogMTsKICAgICAgICAgcmV0dXJuIGJyYWNrZXROZWVkc0xp
bmVTdGFydChzY29kZSwgY2FwdHVyZU1hcCB8IGJyYWNrZXRNYXNrLCBiYWNrcmVmTWFwKTsKICAg
ICB9CiAgICAgCiAgICAgLyogT3RoZXIgYnJhY2tldHMgKi8KLSAgICBpZiAob3AgPT0gT1BfQlJB
IHx8IG9wID09IE9QX0FTU0VSVCB8fCBvcCA9PSBPUF9PTkNFKQorICAgIGlmIChvcCA9PSBPUF9C
UkEgfHwgb3AgPT0gT1BfQVNTRVJUKQogICAgICAgICByZXR1cm4gYnJhY2tldE5lZWRzTGluZVN0
YXJ0KHNjb2RlLCBjYXB0dXJlTWFwLCBiYWNrcmVmTWFwKTsKICAgICAKICAgICAvKiAuKiBtZWFu
cyAic3RhcnQgYXQgc3RhcnQgb3IgYWZ0ZXIgXG4iIGlmIGl0IGlzbid0IGluIGJyYWNrZXRzIHRo
YXQKQEAgLTIxMjgsMTIgKzE5MTMsMTIgQEAgc3RhdGljIGJvb2wgYnJhbmNoTmVlZHNMaW5lU3Rh
cnQoY29uc3QgdQogICAgIHJldHVybiBvcCA9PSBPUF9DSVJDOwogfQogCi1zdGF0aWMgYm9vbCBi
cmFja2V0TmVlZHNMaW5lU3RhcnQoY29uc3QgdXNjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJl
TWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKQorc3RhdGljIGJvb2wgYnJhY2tldE5lZWRzTGluZVN0
YXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIHVuc2lnbmVkIGNhcHR1cmVNYXAsIHVuc2ln
bmVkIGJhY2tyZWZNYXApCiB7CiAgICAgZG8gewogICAgICAgICBpZiAoIWJyYW5jaE5lZWRzTGlu
ZVN0YXJ0KGNvZGUgKyAxICsgTElOS19TSVpFLCBjYXB0dXJlTWFwLCBiYWNrcmVmTWFwKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29kZSArPSBnZXRPcGNvZGVWYWx1ZUF0
T2Zmc2V0KGNvZGUsIDEpOworICAgICAgICBjb2RlICs9IGdldExpbmtWYWx1ZShjb2RlICsgMSk7
CiAgICAgfSB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsgIC8qIExvb3AgZm9yIGVhY2ggYWx0ZXJu
YXRpdmUgKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIxNTgsOSArMTk0Myw5IEBAIEFyZ3Vt
ZW50czoKIFJldHVybnM6ICAgICAtMSBvciB0aGUgZml4ZWQgZmlyc3QgY2hhcgogKi8KIAotc3Rh
dGljIGludCBicmFuY2hGaW5kRmlyc3RBc3NlcnRlZENoYXJhY3Rlcihjb25zdCB1c2NoYXIqIGNv
ZGUsIGJvb2wgaW5hc3NlcnQpCitzdGF0aWMgaW50IGJyYW5jaEZpbmRGaXJzdEFzc2VydGVkQ2hh
cmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5hc3NlcnQpCiB7Ci0gICAg
Y29uc3QgdXNjaGFyKiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGVTa2lwcGluZ0Fzc2Vy
dGlvbnMoY29kZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc2NvZGUgPSBmaXJzdFNpZ25p
ZmljYW50T3Bjb2RlU2tpcHBpbmdBc3NlcnRpb25zKGNvZGUpOwogICAgIGludCBvcCA9ICpzY29k
ZTsKICAgICAKICAgICBpZiAob3AgPj0gT1BfQlJBKQpAQCAtMjE3Miw3ICsxOTU3LDYgQEAgc3Rh
dGljIGludCBicmFuY2hGaW5kRmlyc3RBc3NlcnRlZENoYXJhYwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgT1BfQlJBOgogICAgICAgICBjYXNlIE9QX0FTU0VSVDoKLSAgICAgICAgY2FzZSBP
UF9PTkNFOgogICAgICAgICAgICAgcmV0dXJuIGJyYWNrZXRGaW5kRmlyc3RBc3NlcnRlZENoYXJh
Y3RlcihzY29kZSwgb3AgPT0gT1BfQVNTRVJUKTsKIAogICAgICAgICBjYXNlIE9QX0VYQUNUOgpA
QCAtMjE5MSw3ICsxOTc1LDcgQEAgc3RhdGljIGludCBicmFuY2hGaW5kRmlyc3RBc3NlcnRlZENo
YXJhYwogICAgIH0KIH0KIAotc3RhdGljIGludCBicmFja2V0RmluZEZpcnN0QXNzZXJ0ZWRDaGFy
YWN0ZXIoY29uc3QgdXNjaGFyKiBjb2RlLCBib29sIGluYXNzZXJ0KQorc3RhdGljIGludCBicmFj
a2V0RmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIoY29uc3QgdW5zaWduZWQgY2hhciogY29kZSwg
Ym9vbCBpbmFzc2VydCkKIHsKICAgICBpbnQgYyA9IC0xOwogICAgIGRvIHsKQEAgLTIyMDIsNyAr
MTk4Niw3IEBAIHN0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmEKICAgICAg
ICAgICAgIGMgPSBkOwogICAgICAgICBlbHNlIGlmIChjICE9IGQpCiAgICAgICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICAgIGNvZGUgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAxKTsK
KyAgICAgICAgY29kZSArPSBnZXRMaW5rVmFsdWUoY29kZSArIDEpOwogICAgIH0gd2hpbGUgKCpj
b2RlID09IE9QX0FMVCk7CiAgICAgcmV0dXJuIGM7CiB9CkBAIC0yMjIyLDcgKzIwMDYsNyBAQCBz
dGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgaW50IGxhc3RpdGVt
bGVuZ3RoID0gMDsKICAgICB1bnNpZ25lZCBicmFzdGFja3B0ciA9IDA7CiAgICAgaW50IGJyYXN0
YWNrW0JSQVNUQUNLX1NJWkVdOwotICAgIHVzY2hhciBicmFsZW5zdGFja1tCUkFTVEFDS19TSVpF
XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJyYWxlbnN0YWNrW0JSQVNUQUNLX1NJWkVdOwogICAgIGlu
dCBicmFjb3VudCA9IDA7CiAgICAgCiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IChjb25zdCBVQ2hh
ciopKHBhdHRlcm4gLSAxKTsKQEAgLTIyMzcsNyArMjAyMSw3IEBAIHN0YXRpYyBpbnQgY2FsY3Vs
YXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICBjaGFyYWN0ZXIgdHlwZS4gKi8K
IAogICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIGMgPSBjaGVja19lc2Nh
cGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBjID0gY2hlY2tFc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwg
YnJhY291bnQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAKQEAgLTIyNDgs
OCArMjAzMiw4IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChjID4gMTI3KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBfcGNyZV91dGY4X3RhYmxlMV9zaXplOyBpKyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGMgPD0gX3BjcmVfdXRmOF90YWJsZTFbaV0pIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGtqc19wY3JlX3V0ZjhfdGFibGUx
X3NpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8PSBranNfcGNy
ZV91dGY4X3RhYmxlMVtpXSkgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
Kz0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RpdGVtbGVuZ3RoICs9IGk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTIyNzEsOCArMjA1NSw4IEBAIHN0YXRpYyBpbnQgY2FsY3Vs
YXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZm51bSA+
IGNkLnRvcF9iYWNrcmVmKQogICAgICAgICAgICAgICAgICAgICAgICAgY2QudG9wX2JhY2tyZWYg
PSByZWZudW07CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAyOyAgIC8qIEZvciBzaW5n
bGUgYmFjayByZWZlcmVuY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNr
TmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAneycpICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0ciAr
IDIsIHBhdHRlcm5FbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSByZWFkX3Jl
cGVhdF9jb3VudHMocHRyICsgMiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0
ZXJuRW5kLCAneycpICYmIGlzQ291bnRlZFJlcGVhdChwdHIgKyAyLCBwYXR0ZXJuRW5kKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZFJlcGVhdENvdW50cyhwdHIgKyAyLCAm
bWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVycm9yY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1pblJlcGVhdHMgPT0gMCAmJiAobWF4
UmVwZWF0cyA9PSAxIHx8IG1heFJlcGVhdHMgPT0gLTEpKSB8fApAQCAtMjMwMyw5ICsyMDg3LDkg
QEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAg
IGNsYXNzLCBvciBiYWNrIHJlZmVyZW5jZS4gKi8KIAogICAgICAgICAgICAgY2FzZSAneyc6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc19jb3VudGVkX3JlcGVhdChwdHIrMSwgcGF0dGVybkVuZCkp
CisgICAgICAgICAgICAgICAgaWYgKCFpc0NvdW50ZWRSZXBlYXQocHRyICsgMSwgcGF0dGVybkVu
ZCkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gTk9STUFMX0NIQVI7Ci0gICAgICAgICAgICAg
ICAgcHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisxLCAmbWluUmVwZWF0cywgJm1heFJlcGVh
dHMsICZlcnJvcmNvZGUpOworICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMo
cHRyICsgMSwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAg
ICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt
MTsKICAgICAgICAgICAgICAgICAKQEAgLTIzNzAsNyArMjE1NCw3IEBAIHN0YXRpYyBpbnQgY2Fs
Y3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sg
Zm9yIGVzY2FwZXMgKi8KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGlmICgqcHRyID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja19l
c2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZl
cnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
cnJvcmNvZGUgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI0MTAsNyArMjE5NCw3IEBAIHN0YXRpYyBpbnQg
Y2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVQ2hhciBjb25zdCAqaHlwdHIgPSBwdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2FmZWx5Q2hlY2tOZXh0Q2hhcihwdHIsIHBhdHRlcm5FbmQsICdcXCcpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUs
IGJyYWNvdW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNo
ZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoLWQgPT0gRVNDX2IpCkBAIC0yNDMzLDcgKzIyMTcsNyBA
QCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgoZCA+IDI1NSB8fCAoaWdub3JlQ2FzZSAmJiBkID4gMTI3
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNjaGFyIGJ1ZmZlcls2XTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNl07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2xhc3NfdXRmOCkgICAgICAg
ICAvKiBBbGxvdyBmb3IgWENMQVNTIG92ZXJoZWFkICovCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0
ZjggPSB0cnVlOwpAQCAtMjQ1MCw3ICsyMjM0LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21w
aWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG9jYywgb2NkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNjID0g
YzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcmlnZCA9IGQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0X290aGVyY2FzZV9y
YW5nZSgmY2MsIG9yaWdkLCAmb2NjLCAmb2NkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKGdldE90aGVyY2FzZVJhbmdlKCZjYywgb3JpZ2QsICZvY2MsICZv
Y2QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9jYyA+
PSBjICYmIG9jZCA8PSBkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsgICAvKiBTa2lwIGVtYmVkZGVkICovCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNDY3LDE0ICsyMjUxLDE0IEBAIHN0YXRpYyBpbnQg
Y2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBBbiBleHRyYSBpdGVtIGlzIG5lZWRlZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCArPSAxICsgX3BjcmVfb3JkMnV0Zjgob2NjLCBidWZmZXIpICsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9jYyA9PSBvY2QpID8gMCA6IF9wY3JlX29yZDJ1
dGY4KG9jZCwgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoICs9IDEgKyBlbmNvZGVVVEY4KG9jYywgYnVmZmVyKSArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvY2MgPT0gb2NkKSA/IDAgOiBlbmNvZGVVVEY4
KG9jZCwgYnVmZmVyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBsZW5ndGgg
b2YgdGhlIChwb3NzaWJseSBleHRlbmRlZCkgcmFuZ2UgKi8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAx
ICsgX3BjcmVfb3JkMnV0ZjgoYywgYnVmZmVyKSArIF9wY3JlX29yZDJ1dGY4KGQsIGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxICsgZW5jb2RlVVRG
OChjLCBidWZmZXIpICsgZW5jb2RlVVRGOChkLCBidWZmZXIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTI0ODYsMTQgKzIyNzAsMTQgQEAgc3RhdGljIGludCBjYWxjdWxhdGVD
b21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMg
PiAyNTUgfHwgKGlnbm9yZUNhc2UgJiYgYyA+IDEyNykpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzY2hhciBidWZmZXJbNl07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzZdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc19vcHRjb3VudCA9IDEwOyAgICAgLyogRW5zdXJlID4gMSAqLwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYXNzX3V0ZjgpICAgICAgICAgLyogQWxs
b3cgZm9yIFhDTEFTUyBvdmVyaGVhZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBMSU5LX1NJ
WkUgKyAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAoaWdub3JlQ2FzZSA/IDIgOiAxKSAqICgxICsg
X3BjcmVfb3JkMnV0ZjgoYywgYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aCArPSAoaWdub3JlQ2FzZSA/IDIgOiAxKSAqICgxICsgZW5jb2RlVVRGOChjLCBi
dWZmZXIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1MTksOCArMjMwMyw4IEBAIHN0
YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAg
ICAgLyogQSByZXBlYXQgbmVlZHMgZWl0aGVyIDEgb3IgNSBieXRlcy4gSWYgaXQgaXMgYSBwb3Nz
ZXNzaXZlIHF1YW50aWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICB3ZSBhbHNvIG5lZWQgZXh0
cmEgZm9yIHdyYXBwaW5nIHRoZSB3aG9sZSB0aGluZyBpbiBhIHN1Yi1wYXR0ZXJuLiAqLwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4
dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAneycpICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0cisyLCBw
YXR0ZXJuRW5kKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRf
Y291bnRzKHB0cisyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2FmZWx5Q2hlY2tOZXh0Q2hhcihwdHIsIHBhdHRlcm5FbmQs
ICd7JykgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDIsIHBhdHRlcm5FbmQpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdHIgPSByZWFkUmVwZWF0Q291bnRzKHB0ciArIDIsICZtaW5SZXBl
YXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3Jjb2RlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5SZXBlYXRzID09IDAgJiYgKG1heFJl
cGVhdHMgPT0gMSB8fCBtYXhSZXBlYXRzID09IC0xKSkgfHwKQEAgLTI2MTYsMTEgKzI0MDAsMTEg
QEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZHVwbGVuZ3RoID0gMDsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvKiBMZWF2ZSBwdHIgYXQgdGhlIGZpbmFsIGNoYXI7IGZv
ciByZWFkX3JlcGVhdF9jb3VudHMgdGhpcyBoYXBwZW5zCisgICAgICAgICAgICAgICAgLyogTGVh
dmUgcHRyIGF0IHRoZSBmaW5hbCBjaGFyOyBmb3IgcmVhZFJlcGVhdENvdW50cyB0aGlzIGhhcHBl
bnMKICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseTsgZm9yIHRoZSBvdGhlcnMgd2UgbmVl
ZCBhbiBpbmNyZW1lbnQuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KChwdHIgKyAxIDwgcGF0dGVybkVuZCkgJiYgKGMgPSBwdHJbMV0pID09ICd7JyAmJiBpc19jb3Vu
dGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHRy
ID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZl
cnJvcmNvZGUpOworICAgICAgICAgICAgICAgIGlmICgocHRyICsgMSA8IHBhdHRlcm5FbmQpICYm
IChjID0gcHRyWzFdKSA9PSAneycgJiYgaXNDb3VudGVkUmVwZWF0KHB0ciArIDIsIHBhdHRlcm5F
bmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsg
MiwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVycm9yY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJyonKSB7CkBAIC0yNjgzLDggKzI0Njcs
OCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAKICAgICAgICAg
ICAgICAgICBpZiAoYyA+IDEyNykgewogICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ld
KQorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2pzX3BjcmVfdXRmOF90YWJs
ZTFfc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0ga2pzX3BjcmVf
dXRmOF90YWJsZTFbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCArPSBpOwogICAgICAgICAgICAgICAgICAgICBsYXN0aXRl
bWxlbmd0aCArPSBpOwpAQCAtMjcyMCw5ICsyNTA0LDkgQEAgUmV0dXJuczogICAgICAgIHBvaW50
ZXIgdG8gY29tcGlsZWQgZGF0YQogICAgICAgICAgICAgICAgIHdpdGggZXJyb3JwdHIgYW5kIGVy
cm9yb2Zmc2V0IHNldAogKi8KIAotc3RhdGljIEpTUmVnRXhwKiByZXR1cm5FcnJvcihFcnJvckNv
ZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCitzdGF0aWMgaW5saW5lIEpTUmVn
RXhwKiByZXR1cm5FcnJvcihFcnJvckNvZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJyb3Jw
dHIpCiB7Ci0gICAgKmVycm9ycHRyID0gZXJyb3JfdGV4dChlcnJvcmNvZGUpOworICAgICplcnJv
cnB0ciA9IGVycm9yVGV4dChlcnJvcmNvZGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNzU3
LDcgKzI1NDEsNyBAQCBKU1JlZ0V4cCoganNSZWdFeHBDb21waWxlKGNvbnN0IFVDaGFyKiBwCiAg
ICAgLyogVGhlIHN0YXJ0aW5nIHBvaW50cyBvZiB0aGUgbmFtZS9udW1iZXIgdHJhbnNsYXRpb24g
dGFibGUgYW5kIG9mIHRoZSBjb2RlIGFyZQogICAgICBwYXNzZWQgYXJvdW5kIGluIHRoZSBjb21w
aWxlIGRhdGEgYmxvY2suICovCiAgICAgCi0gICAgY29uc3QgdXNjaGFyKiBjb2RlU3RhcnQgPSAo
Y29uc3QgdXNjaGFyKikocmUgKyAxKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlU3Rh
cnQgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKHJlICsgMSk7CiAgICAgY2Quc3RhcnRfY29kZSA9
IGNvZGVTdGFydDsKICAgICBjZC5zdGFydF9wYXR0ZXJuID0gKGNvbnN0IFVDaGFyKilwYXR0ZXJu
OwogICAgIApAQCAtMjc2Nyw3ICsyNTUxLDcgQEAgSlNSZWdFeHAqIGpzUmVnRXhwQ29tcGlsZShj
b25zdCBVQ2hhciogcAogICAgIAogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSAoY29uc3QgVUNoYXIq
KXBhdHRlcm47CiAgICAgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQgPSBwYXR0ZXJuICsgcGF0dGVy
bkxlbmd0aDsKLSAgICB1c2NoYXIqIGNvZGUgPSAodXNjaGFyKiljb2RlU3RhcnQ7CisgICAgdW5z
aWduZWQgY2hhciogY29kZSA9ICh1bnNpZ25lZCBjaGFyKiljb2RlU3RhcnQ7CiAgICAgaW50IGZp
cnN0Ynl0ZSwgcmVxYnl0ZTsKICAgICBpbnQgYnJhY2tldENvdW50ID0gMDsKICAgICBpZiAoIWNk
Lm5lZWRPdXRlckJyYWNrZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMuY3BwCShyZXZp
c2lvbiAyODc2NikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAgICAgLyogRnVu
Y3Rpb24gYXJndW1lbnRzIHRoYXQgbWF5IGNoYW5nZSAqLwogICAgIHN0cnVjdCB7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyOwotICAgICAgICBjb25zdCB1c2NoYXIqIGluc3RydWN0
aW9uUHRyOwotICAgICAgICBpbnQgb2Zmc2V0X3RvcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRUb3A7CiAgICAgICAgIGNv
bnN0IFVDaGFyKiBzdWJwYXR0ZXJuU3RhcnQ7CiAgICAgfSBhcmdzOwogICAgIApAQCAtODMsMTIg
KzgzLDEyIEBAIHN0cnVjdCBNYXRjaEZyYW1lIHsKICAgICAgc3RhY2stYmFzZWQgbG9jYWwgdmFy
aWFibGVzIGFyZSBub3Qgc2FmZSB0byB1c2UuICBJbnN0ZWFkIHdlIGhhdmUgdG8KICAgICAgc3Rv
cmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBjdXJyZW50IE1hdGNoRnJhbWUuICovCiAgICAgc3Ry
dWN0IHsKLSAgICAgICAgY29uc3QgdXNjaGFyKiBkYXRhOwotICAgICAgICBjb25zdCB1c2NoYXIq
IHN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzdGFydE9mUmVwZWF0aW5nQnJhY2tl
dDsKICAgICAgICAgY29uc3QgVUNoYXIqIHN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbjsg
Ly8gU2V2ZXJhbCBpbnN0cnV0aW9ucyBzdGFzaCBhd2F5IGEgc3ViamVjdFB0ciBoZXJlIGZvciBs
YXRlciBjb21wYXJlCi0gICAgICAgIGNvbnN0IHVzY2hhciogaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0
T2ZPbmNlOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0cnVjdGlvblB0ckF0U3Rh
cnRPZk9uY2U7CiAgICAgICAgIAotICAgICAgICBpbnQgcmVwZWF0X290aGVyY2FzZTsKKyAgICAg
ICAgaW50IHJlcGVhdE90aGVyY2FzZTsKICAgICAgICAgCiAgICAgICAgIGludCBjdHlwZTsKICAg
ICAgICAgaW50IGZjOwpAQCAtOTcsOSArOTcsOSBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiAgICAg
ICAgIGludCBtYXg7CiAgICAgICAgIGludCBudW1iZXI7CiAgICAgICAgIGludCBvZmZzZXQ7Ci0g
ICAgICAgIGludCBzYXZlX29mZnNldDE7Ci0gICAgICAgIGludCBzYXZlX29mZnNldDI7Ci0gICAg
ICAgIGludCBzYXZlX29mZnNldDM7CisgICAgICAgIGludCBzYXZlT2Zmc2V0MTsKKyAgICAgICAg
aW50IHNhdmVPZmZzZXQyOworICAgICAgICBpbnQgc2F2ZU9mZnNldDM7CiAgICAgICAgIAogICAg
ICAgICBjb25zdCBVQ2hhciogc3VicGF0dGVyblN0YXJ0OwogICAgIH0gbG9jYWxzOwpAQCAtMTA5
LDI0ICsxMDksMzggQEAgc3RydWN0IE1hdGNoRnJhbWUgewogZG9pbmcgdHJhZGl0aW9uYWwgTkZB
IG1hdGNoaW5nLCBzbyB0aGF0IHRoZXkgYXJlIHRocmVhZC1zYWZlLiAqLwogCiBzdHJ1Y3QgTWF0
Y2hEYXRhIHsKLSAgaW50KiAgIG9mZnNldF92ZWN0b3I7ICAgICAgICAgLyogT2Zmc2V0IHZlY3Rv
ciAqLwotICBpbnQgICAgb2Zmc2V0X2VuZDsgICAgICAgICAgICAvKiBPbmUgcGFzdCB0aGUgZW5k
ICovCi0gIGludCAgICBvZmZzZXRfbWF4OyAgICAgICAgICAgIC8qIFRoZSBtYXhpbXVtIHVzYWJs
ZSBmb3IgcmV0dXJuIGRhdGEgKi8KLSAgYm9vbCAgIG9mZnNldF9vdmVyZmxvdzsgICAgICAgLyog
U2V0IGlmIHRvbyBtYW55IGV4dHJhY3Rpb25zICovCi0gIGNvbnN0IFVDaGFyKiAgc3RhcnRfc3Vi
amVjdDsgICAgICAgICAvKiBTdGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KLSAgY29uc3Qg
VUNoYXIqICBlbmRfc3ViamVjdDsgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgc3ViamVjdCBzdHJp
bmcgKi8KLSAgY29uc3QgVUNoYXIqICBlbmRfbWF0Y2hfcHRyOyAgICAgICAgIC8qIFN1YmplY3Qg
cG9zaXRpb24gYXQgZW5kIG1hdGNoICovCi0gIGludCAgICBlbmRfb2Zmc2V0X3RvcDsgICAgICAg
IC8qIEhpZ2h3YXRlciBtYXJrIGF0IGVuZCBvZiBtYXRjaCAqLworICBpbnQqICAgb2Zmc2V0VmVj
dG9yOyAgICAgICAgIC8qIE9mZnNldCB2ZWN0b3IgKi8KKyAgaW50ICAgIG9mZnNldEVuZDsgICAg
ICAgICAgICAvKiBPbmUgcGFzdCB0aGUgZW5kICovCisgIGludCAgICBvZmZzZXRNYXg7ICAgICAg
ICAgICAgLyogVGhlIG1heGltdW0gdXNhYmxlIGZvciByZXR1cm4gZGF0YSAqLworICBib29sICAg
b2Zmc2V0T3ZlcmZsb3c7ICAgICAgIC8qIFNldCBpZiB0b28gbWFueSBleHRyYWN0aW9ucyAqLwor
ICBjb25zdCBVQ2hhciogIHN0YXJ0U3ViamVjdDsgICAgICAgICAvKiBTdGFydCBvZiB0aGUgc3Vi
amVjdCBzdHJpbmcgKi8KKyAgY29uc3QgVUNoYXIqICBlbmRTdWJqZWN0OyAgICAgICAgICAgLyog
RW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBjb25zdCBVQ2hhciogIGVuZE1hdGNoUHRy
OyAgICAgICAgIC8qIFN1YmplY3QgcG9zaXRpb24gYXQgZW5kIG1hdGNoICovCisgIGludCAgICBl
bmRPZmZzZXRUb3A7ICAgICAgICAvKiBIaWdod2F0ZXIgbWFyayBhdCBlbmQgb2YgbWF0Y2ggKi8K
ICAgYm9vbCAgIG11bHRpbGluZTsKICAgYm9vbCAgIGlnbm9yZUNhc2U7CiB9OwogCiAvKiBOb24t
ZXJyb3IgcmV0dXJucyBmcm9tIHRoZSBtYXRjaCgpIGZ1bmN0aW9uLiBFcnJvciByZXR1cm5zIGFy
ZSBleHRlcm5hbGx5Ci1kZWZpbmVkIFBDUkVfRVJST1JfeHh4IGNvZGVzLCB3aGljaCBhcmUgYWxs
IG5lZ2F0aXZlLiAqLworZGVmaW5lZCBlcnJvciBjb2Rlcywgd2hpY2ggYXJlIGFsbCBuZWdhdGl2
ZS4gKi8KIAogI2RlZmluZSBNQVRDSF9NQVRDSCAgICAgICAgMQogI2RlZmluZSBNQVRDSF9OT01B
VENIICAgICAgMAogCisvKiBUaGUgbWF4aW11bSByZW1haW5pbmcgbGVuZ3RoIG9mIHN1YmplY3Qg
d2UgYXJlIHByZXBhcmVkIHRvIHNlYXJjaCBmb3IgYQorcmVxX2J5dGUgbWF0Y2guICovCisKKyNk
ZWZpbmUgUkVRX0JZVEVfTUFYIDEwMDAKKworLyogVGhlIGJlbG93IGxpbWl0IHJlc3RyaWN0cyB0
aGUgbnVtYmVyIG9mIHJlY3Vyc2l2ZSBtYXRjaCBjYWxscyBpbiBvcmRlciB0bworbGltaXQgdGhl
IG1heGltdW0gYW1vdW50IG9mIHN0b3JhZ2UuCisgCitUaGlzIGxpbWl0IGlzIHRpZWQgdG8gdGhl
IHNpemUgb2YgTWF0Y2hGcmFtZS4gIFJpZ2h0IG5vdyB3ZSBhbGxvdyBQQ1JFIHRvIGFsbG9jYXRl
IHVwCit0byBNQVRDSF9SRUNVUlNJT05fTElNSVQgLSAxNiAqIHNpemVvZihNYXRjaEZyYW1lKSBi
eXRlcyBvZiAic3RhY2siIHNwYWNlIGJlZm9yZSB3ZSBnaXZlIHVwLgorQ3VycmVudGx5IHRoYXQn
cyAxMDAwMDAgLSAxNiAqICgyMyAqIDQpICB+IDkwTUIuICovCisKKyNkZWZpbmUgTUFUQ0hfUkVD
VVJTSU9OX0xJTUlUIDEwMDAwMAorCiAjaWZkZWYgREVCVUcKIC8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICBEZWJ1Z2dpbmcgZnVuY3Rp
b24gdG8gcHJpbnQgY2hhcnMgICAgICAgKgpAQCAtMTM4LDE0ICsxNTIsMTQgQEAgc3ViamVjdCBp
ZiB0aGUgcmVxdWVzdGVkLgogQXJndW1lbnRzOgogICBwICAgICAgICAgICBwb2ludHMgdG8gY2hh
cmFjdGVycwogICBsZW5ndGggICAgICBudW1iZXIgdG8gcHJpbnQKLSAgaXNfc3ViamVjdCAgdHJ1
ZSBpZiBwcmludGluZyBmcm9tIHdpdGhpbiBtZC5zdGFydF9zdWJqZWN0Ci0gIG1kICAgICAgICAg
IHBvaW50ZXIgdG8gbWF0Y2hpbmcgZGF0YSBibG9jaywgaWYgaXNfc3ViamVjdCBpcyB0cnVlCisg
IGlzU3ViamVjdCAgdHJ1ZSBpZiBwcmludGluZyBmcm9tIHdpdGhpbiBtZC5zdGFydFN1YmplY3QK
KyAgbWQgICAgICAgICAgcG9pbnRlciB0byBtYXRjaGluZyBkYXRhIGJsb2NrLCBpZiBpc1N1Ympl
Y3QgaXMgdHJ1ZQogKi8KIAotc3RhdGljIHZvaWQgcGNoYXJzKGNvbnN0IFVDaGFyKiBwLCBpbnQg
bGVuZ3RoLCBib29sIGlzX3N1YmplY3QsIGNvbnN0IE1hdGNoRGF0YSYgbWQpCitzdGF0aWMgdm9p
ZCBwY2hhcnMoY29uc3QgVUNoYXIqIHAsIGludCBsZW5ndGgsIGJvb2wgaXNTdWJqZWN0LCBjb25z
dCBNYXRjaERhdGEmIG1kKQogewotICAgIGlmIChpc19zdWJqZWN0ICYmIGxlbmd0aCA+IG1kLmVu
ZF9zdWJqZWN0IC0gcCkKLSAgICAgICAgbGVuZ3RoID0gbWQuZW5kX3N1YmplY3QgLSBwOworICAg
IGlmIChpc1N1YmplY3QgJiYgbGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHApCisgICAgICAgIGxl
bmd0aCA9IG1kLmVuZFN1YmplY3QgLSBwOwogICAgIHdoaWxlIChsZW5ndGgtLSA+IDApIHsKICAg
ICAgICAgaW50IGM7CiAgICAgICAgIGlmIChpc3ByaW50KGMgPSAqKHArKykpKQpAQCAtMTU4LDgg
KzE3Miw2IEBAIHN0YXRpYyB2b2lkIHBjaGFycyhjb25zdCBVQ2hhciogcCwgaW50IGwKIH0KICNl
bmRpZgogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKICogICAgICAgICAgTWF0Y2ggYSBiYWNrLXJlZmVyZW5jZSAgICAgICAgICAgICAgICAq
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAt
MTc2LDEyICsxODgsMTIgQEAgQXJndW1lbnRzOgogUmV0dXJuczogICAgICB0cnVlIGlmIG1hdGNo
ZWQKICovCiAKLXN0YXRpYyBib29sIG1hdGNoX3JlZihpbnQgb2Zmc2V0LCBjb25zdCBVQ2hhciog
c3ViamVjdFB0ciwgaW50IGxlbmd0aCwgY29uc3QgTWF0Y2hEYXRhJiBtZCkKK3N0YXRpYyBib29s
IG1hdGNoUmVmKGludCBvZmZzZXQsIGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBpbnQgbGVuZ3Ro
LCBjb25zdCBNYXRjaERhdGEmIG1kKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gbWQuc3RhcnRf
c3ViamVjdCArIG1kLm9mZnNldF92ZWN0b3Jbb2Zmc2V0XTsKKyAgICBjb25zdCBVQ2hhciogcCA9
IG1kLnN0YXJ0U3ViamVjdCArIG1kLm9mZnNldFZlY3RvcltvZmZzZXRdOwogICAgIAogI2lmZGVm
IERFQlVHCi0gICAgaWYgKHN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgaWYgKHN1
YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgcHJpbnRmKCJtYXRjaGluZyBzdWJq
ZWN0IDxudWxsPiIpOwogICAgIGVsc2UgewogICAgICAgICBwcmludGYoIm1hdGNoaW5nIHN1Ympl
Y3QgIik7CkBAIC0xOTQsNyArMjA2LDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hfcmVmKGludCBvZmZz
ZXQsIGNvbnN0IAogICAgIAogICAgIC8qIEFsd2F5cyBmYWlsIGlmIG5vdCBlbm91Z2ggY2hhcmFj
dGVycyBsZWZ0ICovCiAgICAgCi0gICAgaWYgKGxlbmd0aCA+IG1kLmVuZF9zdWJqZWN0IC0gc3Vi
amVjdFB0cikKKyAgICBpZiAobGVuZ3RoID4gbWQuZW5kU3ViamVjdCAtIHN1YmplY3RQdHIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvKiBTZXBhcmF0ZSB0aGUgY2FzZWxlc3Nz
IGNhc2UgZm9yIHNwZWVkICovCkBAIC0yMDIsNyArMjE0LDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hf
cmVmKGludCBvZmZzZXQsIGNvbnN0IAogICAgIGlmIChtZC5pZ25vcmVDYXNlKSB7CiAgICAgICAg
IHdoaWxlIChsZW5ndGgtLSA+IDApIHsKICAgICAgICAgICAgIFVDaGFyIGMgPSAqcCsrOwotICAg
ICAgICAgICAgaW50IG90aGVyY2FzZSA9IF9wY3JlX3VjcF9vdGhlcmNhc2UoYyk7CisgICAgICAg
ICAgICBpbnQgb3RoZXJjYXNlID0ga2pzX3BjcmVfdWNwX290aGVyY2FzZShjKTsKICAgICAgICAg
ICAgIFVDaGFyIGQgPSAqc3ViamVjdFB0cisrOwogICAgICAgICAgICAgaWYgKGMgIT0gZCAmJiBv
dGhlcmNhc2UgIT0gZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzgsMzcg
KzI1MCwyOSBAQCBhIGJpdCBtb3JlIGNvZGUgYW5kIG5vdGljZSBpZiB3ZSB1c2UgY29uCiAKICNl
bmRpZgogCi0jZGVmaW5lIENIRUNLX1JFQ1VSU0lPTl9MSU1JVCBcCi0gICAgaWYgKHN0YWNrLnNp
emUgPj0gTUFUQ0hfTElNSVRfUkVDVVJTSU9OKSBcCi0gICAgICAgIHJldHVybiBtYXRjaEVycm9y
KEpTUmVnRXhwRXJyb3JSZWN1cnNpb25MaW1pdCwgc3RhY2spOwotCi0jZGVmaW5lIFJFQ1VSU0Vf
V0lUSF9SRVRVUk5fTlVNQkVSKG51bSkgXAotICAgIENIRUNLX1JFQ1VSU0lPTl9MSU1JVCBcCisj
ZGVmaW5lIFJFQ1VSU0lWRV9NQVRDSF9DT01NT04obnVtKSBcCisgICAgaWYgKHN0YWNrLnNpemUg
Pj0gTUFUQ0hfUkVDVVJTSU9OX0xJTUlUKSBcCisgICAgICAgIHJldHVybiBtYXRjaEVycm9yKEpT
UmVnRXhwRXJyb3JSZWN1cnNpb25MaW1pdCwgc3RhY2spOyBcCiAgICAgZ290byBSRUNVUlNFO1wK
LSAgICBSUkVUVVJOXyMjbnVtOgorICAgIFJSRVRVUk5fIyNudW06IFwKKyAgICBzdGFjay5wb3BD
dXJyZW50RnJhbWUoKTsKIAogI2RlZmluZSBSRUNVUlNJVkVfTUFUQ0gobnVtLCByYSwgcmIpIFwK
LXtcCisgICAgZG8geyBcCiAgICAgc3RhY2sucHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRD
SF9XSEVSRShudW0pKTsgXAotICAgIFJFQ1VSU0VfV0lUSF9SRVRVUk5fTlVNQkVSKG51bSkgXAot
ICAgIHN0YWNrLnBvcEN1cnJlbnRGcmFtZSgpOyBcCi19CisgICAgICAgIFJFQ1VSU0lWRV9NQVRD
SF9DT01NT04obnVtKSBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRUNVUlNJVkVfTUFU
Q0hfU1RBUlROR19ORVdfR1JPVVAobnVtLCByYSwgcmIpIFwKLXtcCisgICAgZG8geyBcCiAgICAg
c3RhY2sucHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVSRShudW0pKTsgXAogICAg
IHN0YXJ0TmV3R3JvdXAoc3RhY2suY3VycmVudEZyYW1lKTsgXAotICAgIFJFQ1VSU0VfV0lUSF9S
RVRVUk5fTlVNQkVSKG51bSkgXAotICAgIHN0YWNrLnBvcEN1cnJlbnRGcmFtZSgpOyBcCi19Cisg
ICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9DT01NT04obnVtKSBcCisgICAgfSB3aGlsZSAoMCkKIAog
I2RlZmluZSBSUkVUVVJOIGdvdG8gUlJFVFVSTl9MQUJFTAogCi0jZGVmaW5lIFJSRVRVUk5fTk9f
TUFUQ0ggXAotICB7XAotICAgIGlzX21hdGNoID0gZmFsc2U7XAotICAgIFJSRVRVUk47XAotICB9
CisjZGVmaW5lIFJSRVRVUk5fTk9fTUFUQ0ggZG8geyBpc01hdGNoID0gZmFsc2U7IFJSRVRVUk47
IH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCiAqICAgICAgICAgTWF0Y2ggZnJvbSBjdXJyZW50IHBvc2l0aW9uICAgICAgICAg
ICAgKgpAQCAtMjg0LDEyICsyODgsMTIgQEAgc2FtZSByZXNwb25zZS4KIEFyZ3VtZW50czoKICAg
IHN1YmplY3RQdHIgICAgICAgIHBvaW50ZXIgaW4gc3ViamVjdAogICAgaW5zdHJ1Y3Rpb25QdHIg
ICAgICAgcG9zaXRpb24gaW4gY29kZQotICAgb2Zmc2V0X3RvcCAgY3VycmVudCB0b3AgcG9pbnRl
cgorICAgb2Zmc2V0VG9wICBjdXJyZW50IHRvcCBwb2ludGVyCiAgICBtZCAgICAgICAgICBwb2lu
dGVyIHRvICJzdGF0aWMiIGluZm8gZm9yIHRoZSBtYXRjaAogCiBSZXR1cm5zOiAgICAgICBNQVRD
SF9NQVRDSCBpZiBtYXRjaGVkICAgICAgICAgICAgKSAgdGhlc2UgdmFsdWVzIGFyZSA+PSAwCiAg
ICAgICAgICAgICAgICBNQVRDSF9OT01BVENIIGlmIGZhaWxlZCB0byBtYXRjaCAgKQotICAgICAg
ICAgICAgICAgYSBuZWdhdGl2ZSBQQ1JFX0VSUk9SX3h4eCB2YWx1ZSBpZiBhYm9ydGVkIGJ5IGFu
IGVycm9yIGNvbmRpdGlvbgorICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBp
ZiBhYm9ydGVkIGJ5IGFuIGVycm9yIGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAoZS5nLiBz
dG9wcGVkIGJ5IHJlcGVhdGVkIGNhbGwgb3IgcmVjdXJzaW9uIGxpbWl0KQogKi8KIApAQCAtMzIx
LDEzICszMjUsMTMgQEAgc3RydWN0IE1hdGNoU3RhY2sgewogICAgICAgICByZXR1cm4gbmV3IE1h
dGNoRnJhbWU7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2b2lkIHB1c2hOZXdGcmFtZShjb25z
dCB1c2NoYXIqIGluc3RydWN0aW9uUHRyLCBjb25zdCBVQ2hhciogc3VicGF0dGVyblN0YXJ0LCBS
ZXR1cm5Mb2NhdGlvbiByZXR1cm5Mb2NhdGlvbikKKyAgICBpbmxpbmUgdm9pZCBwdXNoTmV3RnJh
bWUoY29uc3QgdW5zaWduZWQgY2hhciogaW5zdHJ1Y3Rpb25QdHIsIGNvbnN0IFVDaGFyKiBzdWJw
YXR0ZXJuU3RhcnQsIFJldHVybkxvY2F0aW9uIHJldHVybkxvY2F0aW9uKQogICAgIHsKICAgICAg
ICAgTWF0Y2hGcmFtZSogbmV3ZnJhbWUgPSBhbGxvY2F0ZU5leHRGcmFtZSgpOwogICAgICAgICBu
ZXdmcmFtZS0+cHJldmlvdXNGcmFtZSA9IGN1cnJlbnRGcmFtZTsKIAogICAgICAgICBuZXdmcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID0gY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7Ci0gICAg
ICAgIG5ld2ZyYW1lLT5hcmdzLm9mZnNldF90b3AgPSBjdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0
X3RvcDsKKyAgICAgICAgbmV3ZnJhbWUtPmFyZ3Mub2Zmc2V0VG9wID0gY3VycmVudEZyYW1lLT5h
cmdzLm9mZnNldFRvcDsKICAgICAgICAgbmV3ZnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPSBp
bnN0cnVjdGlvblB0cjsKICAgICAgICAgbmV3ZnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0ID0g
c3VicGF0dGVyblN0YXJ0OwogICAgICAgICBuZXdmcmFtZS0+cmV0dXJuTG9jYXRpb24gPSByZXR1
cm5Mb2NhdGlvbjsKQEAgLTM2MSwxMyArMzY1LDEzIEBAIHN0YXRpYyBpbnQgbWF0Y2hFcnJvcihp
bnQgZXJyb3JDb2RlLCBNYXQKIC8qIEdldCB0aGUgbmV4dCBVVEYtOCBjaGFyYWN0ZXIsIG5vdCBh
ZHZhbmNpbmcgdGhlIHBvaW50ZXIsIGluY3JlbWVudGluZyBsZW5ndGgKICBpZiB0aGVyZSBhcmUg
ZXh0cmEgYnl0ZXMuIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2Uga25vdyB3ZSBhcmUgaW4gVVRGLTgg
bW9kZS4gKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVu
Z3RoKGludCYgYywgY29uc3QgdXNjaGFyKiBzdWJqZWN0UHRyLCBpbnQmIGxlbikKK3N0YXRpYyBp
bmxpbmUgdm9pZCBnZXRVVEY4Q2hhckFuZEluY3JlbWVudExlbmd0aChpbnQmIGMsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIHN1YmplY3RQdHIsIGludCYgbGVuKQogewogICAgIGMgPSAqc3ViamVjdFB0
cjsKICAgICBpZiAoKGMgJiAweGMwKSA9PSAweGMwKSB7Ci0gICAgICAgIGludCBnY2FhID0gX3Bj
cmVfdXRmOF90YWJsZTRbYyAmIDB4M2ZdOyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMg
Ki8KKyAgICAgICAgaW50IGdjYWEgPSBranNfcGNyZV91dGY4X3RhYmxlNFtjICYgMHgzZl07ICAv
KiBOdW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAqLwogICAgICAgICBpbnQgZ2NzcyA9IDYgKiBn
Y2FhOwotICAgICAgICBjID0gKGMgJiBfcGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwgZ2NzczsK
KyAgICAgICAgYyA9IChjICYga2pzX3BjcmVfdXRmOF90YWJsZTNbZ2NhYV0pIDw8IGdjc3M7CiAg
ICAgICAgIGZvciAoaW50IGdjaWkgPSAxOyBnY2lpIDw9IGdjYWE7IGdjaWkrKykgewogICAgICAg
ICAgICAgZ2NzcyAtPSA2OwogICAgICAgICAgICAgYyB8PSAoc3ViamVjdFB0cltnY2lpXSAmIDB4
M2YpIDw8IGdjc3M7CkBAIC00MDEsOSArNDA1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlcGVh
dEluZm9ybWF0aW9uRnJvbQogICAgIG1heGltdW1SZXBlYXRzID0gbWF4aW11bVJlcGVhdHNGcm9t
SW5zdHJ1Y3Rpb25PZmZzZXRbaW5zdHJ1Y3Rpb25PZmZzZXRdOwogfQogCi1zdGF0aWMgaW50IG1h
dGNoKGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBjb25zdCB1c2NoYXIqIGluc3RydWN0aW9uUHRy
LCBpbnQgb2Zmc2V0X3RvcCwgTWF0Y2hEYXRhJiBtZCkKK3N0YXRpYyBpbnQgbWF0Y2goY29uc3Qg
VUNoYXIqIHN1YmplY3RQdHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluc3RydWN0aW9uUHRyLCBp
bnQgb2Zmc2V0VG9wLCBNYXRjaERhdGEmIG1kKQogewotICAgIGludCBpc19tYXRjaCA9IGZhbHNl
OworICAgIGludCBpc01hdGNoID0gZmFsc2U7CiAgICAgaW50IG1pbjsKICAgICBib29sIG1pbmlt
aXplID0gZmFsc2U7IC8qIEluaXRpYWxpemF0aW9uIG5vdCByZWFsbHkgbmVlZGVkLCBidXQgc29t
ZSBjb21waWxlcnMgdGhpbmsgc28uICovCiAgICAgCkBAIC00MTIsMTQgKzQxNiwxNCBAQCBzdGF0
aWMgaW50IG1hdGNoKGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyCiAgICAgLyogVGhlIG9wY29kZSBq
dW1wIHRhYmxlLiAqLwogI2lmZGVmIFVTRV9DT01QVVRFRF9HT1RPX0ZPUl9NQVRDSF9PUENPREVf
TE9PUAogI2RlZmluZSBFTUlUX0pVTVBfVEFCTEVfRU5UUlkob3Bjb2RlKSAmJkxBQkVMX09QXyMj
b3Bjb2RlLAotICAgIHN0YXRpYyB2b2lkKiBvcGNvZGVfanVtcF90YWJsZVsyNTZdID0geyBGT1Jf
RUFDSF9PUENPREUoRU1JVF9KVU1QX1RBQkxFX0VOVFJZKSB9OworICAgIHN0YXRpYyB2b2lkKiBv
cGNvZGVKdW1wVGFibGVbMjU2XSA9IHsgRk9SX0VBQ0hfT1BDT0RFKEVNSVRfSlVNUF9UQUJMRV9F
TlRSWSkgfTsKICN1bmRlZiBFTUlUX0pVTVBfVEFCTEVfRU5UUlkKICNlbmRpZgogICAgIAogICAg
IC8qIE9uZS10aW1lIHNldHVwIG9mIHRoZSBvcGNvZGUganVtcCB0YWJsZS4gKi8KICNpZmRlZiBV
U0VfQ09NUFVURURfR09UT19GT1JfTUFUQ0hfT1BDT0RFX0xPT1AKLSAgICBmb3IgKGludCBpID0g
MjU1OyAhb3Bjb2RlX2p1bXBfdGFibGVbaV07IGktLSkKLSAgICAgICAgb3Bjb2RlX2p1bXBfdGFi
bGVbaV0gPSAmJkNBUFRVUklOR19CUkFDS0VUOworICAgIGZvciAoaW50IGkgPSAyNTU7ICFvcGNv
ZGVKdW1wVGFibGVbaV07IGktLSkKKyAgICAgICAgb3Bjb2RlSnVtcFRhYmxlW2ldID0gJiZDQVBU
VVJJTkdfQlJBQ0tFVDsKICNlbmRpZgogICAgIAogI2lmZGVmIFVTRV9DT01QVVRFRF9HT1RPX0ZP
Ul9NQVRDSF9SRUNVUlNJT04KQEAgLTQzMSw3ICs0MzUsNyBAQCBzdGF0aWMgaW50IG1hdGNoKGNv
bnN0IFVDaGFyKiBzdWJqZWN0UHRyCiAjZW5kaWYKICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciA9IHN1YmplY3RQdHI7CiAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb25QdHI7Ci0gICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLm9mZnNldF90b3AgPSBvZmZzZXRfdG9wOworICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5vZmZzZXRUb3AgPSBvZmZzZXRUb3A7CiAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YnBhdHRlcm5TdGFydCA9IDA7CiAgICAgc3RhcnROZXdHcm91cChzdGFjay5jdXJyZW50RnJh
bWUpOwogICAgIApAQCAtNDQ4LDcgKzQ1Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgIAogI2lmZGVm
IFVTRV9DT01QVVRFRF9HT1RPX0ZPUl9NQVRDSF9PUENPREVfTE9PUAogI2RlZmluZSBCRUdJTl9P
UENPREUob3Bjb2RlKSBMQUJFTF9PUF8jI29wY29kZQotI2RlZmluZSBORVhUX09QQ09ERSBnb3Rv
ICpvcGNvZGVfanVtcF90YWJsZVsqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyXQorI2RlZmluZSBORVhUX09QQ09ERSBnb3RvICpvcGNvZGVKdW1wVGFibGVbKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cl0KICNlbHNlCiAjZGVmaW5lIEJFR0lOX09Q
Q09ERShvcGNvZGUpIGNhc2UgT1BfIyNvcGNvZGUKICNkZWZpbmUgTkVYVF9PUENPREUgY29udGlu
dWUKQEAgLTQ2Nyw5ICs0NzEsOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIERQUklOVEYo
KCJzdGFydCBicmFja2V0IDBcbiIpKTsKICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgyLCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFs
dWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAg
ICAgICAgICAgfSB3aGlsZSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciA9PSBPUF9BTFQpOwogICAgICAgICAgICAgICAgIERQUklOVEYoKCJicmFja2V0IDAgZmFpbGVk
XG4iKSk7CiAgICAgICAgICAgICAgICAgUlJFVFVSTjsKQEAgLTQ4Myw5ICs0ODcsOSBAQCBSRUNV
UlNFOgogICAgICAgICAgICAgLyogRW5kIG9mIHRoZSBwYXR0ZXJuLiAqLwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEVORCk6Ci0gICAgICAgICAgICAgICAgbWQu
ZW5kX21hdGNoX3B0ciA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOyAgICAg
ICAgICAvKiBSZWNvcmQgd2hlcmUgd2UgZW5kZWQgKi8KLSAgICAgICAgICAgICAgICBtZC5lbmRf
b2Zmc2V0X3RvcCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wOyAgIC8qIGFu
ZCBob3cgbWFueSBleHRyYWN0cyB3ZXJlIHRha2VuICovCi0gICAgICAgICAgICAgICAgaXNfbWF0
Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIG1kLmVuZE1hdGNoUHRyID0gc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7ICAgICAgICAgIC8qIFJlY29yZCB3aGVyZSB3ZSBlbmRl
ZCAqLworICAgICAgICAgICAgICAgIG1kLmVuZE9mZnNldFRvcCA9IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5vZmZzZXRUb3A7ICAgLyogYW5kIGhvdyBtYW55IGV4dHJhY3RzIHdlcmUgdGFrZW4g
Ki8KKyAgICAgICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBSUkVU
VVJOOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLyogQXNzZXJ0aW9uIGJyYWNrZXRz
LiBDaGVjayB0aGUgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgaW4gdHVybiAtIHRoZQpAQCAtNDk3LDkg
KzUwMSw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoQVNTRVJUKToKICAg
ICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9T
VEFSVE5HX05FV19HUk9VUCg2LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKyAxICsgTElOS19TSVpFLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21h
dGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0TGlua1ZhbHVlKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAg
IH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1Bf
QUxUKTsKICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciA9PSBPUF9LRVQpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFU
Q0g7CkBAIC01MDcsOSArNTExLDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAvKiBDb250
aW51ZSBmcm9tIGFmdGVyIHRoZSBhc3NlcnRpb24sIHVwZGF0aW5nIHRoZSBvZmZzZXRzIGhpZ2gg
d2F0ZXIKICAgICAgICAgICAgICAgICAgbWFyaywgc2luY2UgZXh0cmFjdHMgbWF5IGhhdmUgYmVl
biB0YWtlbiBkdXJpbmcgdGhlIGFzc2VydGlvbi4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cik7CisgICAgICAgICAgICAgICAgYWR2YW5j
ZVRvRW5kT2ZCcmFja2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cik7
CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
ICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLm9mZnNldF90b3AgPSBtZC5lbmRfb2Zmc2V0X3RvcDsKKyAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wID0gbWQuZW5kT2Zmc2V0VG9wOwogICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLyog
TmVnYXRpdmUgYXNzZXJ0aW9uOiBhbGwgYnJhbmNoZXMgbXVzdCBmYWlsIHRvIG1hdGNoICovCkBA
IC01MTcsODMgKzUyMSwxOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEFT
U0VSVF9OT1QpOgogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgUkVD
VVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDcsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIE5VTEwpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9wY29kZVZh
bHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyICs9IGdldExpbmtWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKyAxKTsKICAgICAgICAgICAgICAgICB9IHdoaWxlICgqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyID09IE9QX0FMVCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDEgKyBM
SU5LX1NJWkU7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvKiAiT25jZSIgYnJhY2tldHMgYXJlIGxpa2UgYXNzZXJ0aW9uIGJyYWNr
ZXRzIGV4Y2VwdCB0aGF0IGFmdGVyIGEgbWF0Y2gsCi0gICAgICAgICAgICAgdGhlIHBvaW50IGlu
IHRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QgbW92ZWQgYmFjay4gVGh1cyB0aGVyZSBjYW4gbmV2
ZXIgYmUKLSAgICAgICAgICAgICBhIG1vdmUgYmFjayBpbnRvIHRoZSBicmFja2V0cy4gRnJpZWRs
IGNhbGxzIHRoZXNlICJhdG9taWMiIHN1YnBhdHRlcm5zLgotICAgICAgICAgICAgIENoZWNrIHRo
ZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBpbiB0dXJuIC0gdGhlIG1hdGNoaW5nIHdvbid0IHBhc3Mg
dGhlIEtFVAotICAgICAgICAgICAgIGZvciB0aGlzIGtpbmQgb2Ygc3VicGF0dGVybi4gSWYgYW55
IG9uZSBicmFuY2ggbWF0Y2hlcywgd2UgY2Fycnkgb24gYXMgYXQKLSAgICAgICAgICAgICB0aGUg
ZW5kIG9mIGEgbm9ybWFsIGJyYWNrZXQsIGxlYXZpbmcgdGhlIHN1YmplY3QgcG9pbnRlci4gKi8K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJFR0lOX09QQ09ERShPTkNFKToKLSAgICAg
ICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3Rh
cnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHI7Ci0gICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRP
Zkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoOSwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9m
ZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOwotICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgPT0gT1BfQUxUKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBJZiBo
aXQgdGhlIGVuZCBvZiB0aGUgZ3JvdXAgKHdoaWNoIGNvdWxkIGJlIHJlcGVhdGVkKSwgZmFpbCAq
LwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICE9IE9QX09OQ0UgJiYgKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5pbnN0cnVjdGlvblB0ciAhPSBPUF9BTFQpCi0gICAgICAgICAgICAgICAgICAgIFJS
RVRVUk47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogQ29udGludWUgYXMg
ZnJvbSBhZnRlciB0aGUgYXNzZXJ0aW9uLCB1cGRhdGluZyB0aGUgb2Zmc2V0cyBoaWdoIHdhdGVy
Ci0gICAgICAgICAgICAgICAgIG1hcmssIHNpbmNlIGV4dHJhY3RzIG1heSBoYXZlIGJlZW4gdGFr
ZW4uICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbW92ZU9wY29kZVB0clBh
c3RBbnlBbHRlcm5hdGVCcmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5vZmZzZXRfdG9wID0gbWQuZW5kX29mZnNldF90b3A7Ci0gICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPSBtZC5lbmRfbWF0Y2hfcHRy
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIEZvciBhIG5vbi1yZXBlYXRp
bmcga2V0LCBqdXN0IGNvbnRpbnVlIGF0IHRoaXMgbGV2ZWwuIFRoaXMgYWxzbwotICAgICAgICAg
ICAgICAgICBoYXBwZW5zIGZvciBhIHJlcGVhdGluZyBrZXQgaWYgbm8gY2hhcmFjdGVycyB3ZXJl
IG1hdGNoZWQgaW4gdGhlIGdyb3VwLgotICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBmb3Jj
aWJsZSBicmVha2luZyBvZiBpbmZpbml0ZSBsb29wcyBhcyBpbXBsZW1lbnRlZCBpbiBQZXJsCi0g
ICAgICAgICAgICAgICAgIDUuMDA1LiBJZiB0aGVyZSBpcyBhbiBvcHRpb25zIHJlc2V0LCBpdCB3
aWxsIGdldCBvYmV5ZWQgaW4gdGhlIG5vcm1hbAotICAgICAgICAgICAgICAgICBjb3Vyc2Ugb2Yg
ZXZlbnRzLiAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICgqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0tFVCB8fCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5z
dWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDEgKyBMSU5LX1NJWkU7Ci0g
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBUaGUgcmVwZWF0aW5nIGtldHMgdHJ5IHRo
ZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG9yIHJlc3RhcnQgZnJvbSB0aGUKLSAgICAgICAgICAgICAg
ICAgcHJlY2VkaW5nIGJyYWNrZXQsIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gV2UgbmVlZCB0
byByZXNldCBhbnkgb3B0aW9ucwotICAgICAgICAgICAgICAgICB0aGF0IGNoYW5nZWQgd2l0aGlu
IHRoZSBicmFja2V0IGJlZm9yZSByZS1ydW5uaW5nIGl0LCBzbyBjaGVjayB0aGUgbmV4dAotICAg
ICAgICAgICAgICAgICBvcGNvZGUuICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfS0VU
Uk1JTikgewotICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMTAsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfbWF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAg
ICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTEsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpc19tYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsgLyogT1BfS0VUUk1BWCAqLwotICAgICAgICAgICAgICAgICAgICBSRUNV
UlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgIFJFQ1VS
U0lWRV9NQVRDSCgxMywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsg
MSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFJSRVRVUk47
Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBBbiBhbHRlcm5hdGlvbiBpcyB0aGUg
ZW5kIG9mIGEgYnJhbmNoOyBzY2FuIGFsb25nIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUKICAgICAg
ICAgICAgICBicmFja2V0ZWQgZ3JvdXAgYW5kIGdvIHRvIHRoZXJlLiAqLwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEFMVCk6Ci0gICAgICAgICAgICAgICAgbW92
ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5hdGVCcmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIpOworICAgICAgICAgICAgICAgIGFkdmFuY2VUb0VuZE9mQnJhY2tl
dChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIpOwogICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLyogQlJBWkVS
TyBhbmQgQlJBTUlOWkVSTyBvY2N1ciBqdXN0IGJlZm9yZSBhIGJyYWNrZXQgZ3JvdXAsIGluZGlj
YXRpbmcKQEAgLTYwNSwxOCArNTQ1LDE4IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9P
UENPREUoQlJBWkVSTyk6IHsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciArIDE7CiAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJU
TkdfTkVXX0dST1VQKDE0LCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0
aW5nQnJhY2tldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgIGlmIChpc01hdGNo
KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgIG1vdmVPcGNv
ZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQpOworICAgICAgICAgICAgICAgIGFkdmFuY2VUb0VuZE9m
QnJhY2tldChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tl
dCk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQg
KyAxICsgTElOS19TSVpFOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEJSQU1JTlpF
Uk8pOiB7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRP
ZlJlcGVhdGluZ0JyYWNrZXQgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKyAxOwotICAgICAgICAgICAgICAgIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJh
bmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQp
OworICAgICAgICAgICAgICAgIGFkdmFuY2VUb0VuZE9mQnJhY2tldChzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCk7CiAgICAgICAgICAgICAgICAgUkVD
VVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDE1LCBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgIGlmIChpc19t
YXRjaCkKKyAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTYzMCwxNCArNTcw
LDEzIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoS0VUKToKICAgICAgICAg
ICAgIEJFR0lOX09QQ09ERShLRVRSTUlOKToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShLRVRS
TUFYKToKLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVj
dGlvblB0ckF0U3RhcnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgLSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID0gc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyIC0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQgPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJw
YXR0ZXJuU3RhcnQ7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c3VicGF0dGVyblN0YXJ0ID0gc3RhY2suY3VycmVudEZyYW1lLT5wcmV2aW91c0ZyYW1lLT5hcmdz
LnN1YnBhdHRlcm5TdGFydDsKIAotICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID09IE9QX0FTU0VSVCB8fCAq
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID09
IE9QX0FTU0VSVF9OT1QgfHwgKnN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9u
UHRyQXRTdGFydE9mT25jZSA9PSBPUF9PTkNFKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1kLmVu
ZF9tYXRjaF9wdHIgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsgICAgICAv
KiBGb3IgT05DRSAqLwotICAgICAgICAgICAgICAgICAgICBtZC5lbmRfb2Zmc2V0X3RvcCA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wOwotICAgICAgICAgICAgICAgICAgICBp
c19tYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1BfQVNTRVJUIHx8ICpzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1Bf
QVNTRVJUX05PVCkgeworICAgICAgICAgICAgICAgICAgICBtZC5lbmRPZmZzZXRUb3AgPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wOworICAgICAgICAgICAgICAgICAgICBpc01h
dGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCkBAIC02NTEsNyArNTkwLDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgdGhlIG51bWJlciBmcm9tIGEgZHVtbXkgb3Bjb2RlIGF0IHRoZSBzdGFydC4g
Ki8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubnVtYmVyID4gRVhUUkFDVF9CQVNJQ19NQVgpCi0gICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA9IGdldDJCeXRlT3Bjb2RlVmFs
dWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3Rh
cnRPZk9uY2UsIDIrTElOS19TSVpFKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubnVtYmVyID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgKyAyICsgTElOS19TSVpFKTsKICAg
ICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPSBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPDwgMTsKICAgICAgICAgICAgICAgICAKICNpZmRl
ZiBERUJVRwpAQCAtNjY1LDE0ICs2MDQsMTQgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAg
dGhlIE9QX0VORCBpcyByZWFjaGVkLiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPj0gbWQu
b2Zmc2V0X21heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldF9vdmVyZmxvdyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5vZmZzZXQgPj0gbWQub2Zmc2V0TWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zm
c2V0T3ZlcmZsb3cgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMub2Zmc2V0XSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVjdG9yW21k
Lm9mZnNldF9lbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5vZmZzZXQrMV0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAtIG1k
LnN0YXJ0X3N1YmplY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLm9mZnNldF90b3AgPD0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5vZmZzZXRfdG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ICsgMjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5vZmZzZXRdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3Rv
clttZC5vZmZzZXRFbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm9mZnNldCsxXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC0g
bWQuc3RhcnRTdWJqZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5vZmZzZXRUb3AgPD0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5vZmZzZXRUb3AgPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAyOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtNjkyLDE3ICs2MzEsMTcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBP
UF9LRVRSTUlOKSB7CiAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgxNiwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJ
VkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTcsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIE9QX0tFVFJNQVggKi8KICAgICAgICAg
ICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDE4LCBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01B
VENIKDE5LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElO
S19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNN
YXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIFJSRVRVUk47CkBAIC03MTAsNyArNjQ5LDcgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIHN1YmplY3QsIG9yIGFmdGVyIGludGVybmFsIG5ld2xp
bmUgaWYgbXVsdGlsaW5lLiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5f
T1BDT0RFKENJUkMpOgotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciAhPSBtZC5zdGFydF9zdWJqZWN0ICYmICghbWQubXVsdGlsaW5lIHx8ICFp
c05ld2xpbmUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHJbLTFdKSkpCisgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IG1k
LnN0YXJ0U3ViamVjdCAmJiAoIW1kLm11bHRpbGluZSB8fCAhaXNOZXdsaW5lKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyWy0xXSkpKQogICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtNzE4LDcg
KzY1Nyw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBFbmQgb2Ygc3ViamVjdCwgb3IgYmVm
b3JlIGludGVybmFsIG5ld2xpbmUgaWYgbXVsdGlsaW5lLiAqLwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKERPTEwpOgotICAgICAgICAgICAgICAgIGlmIChzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA8IG1kLmVuZF9zdWJqZWN0ICYmICghbWQu
bXVsdGlsaW5lIHx8ICFpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyKSkpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyIDwgbWQuZW5kU3ViamVjdCAmJiAoIW1kLm11bHRpbGluZSB8fCAhaXNOZXdsaW5lKCpz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikpKQogICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAt
NzMwLDkgKzY2OSw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgYm9vbCBjdXJyZW50Q2hh
cklzV29yZENoYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29sIHByZXZpb3VzQ2hhcklz
V29yZENoYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPiBtZC5zdGFydF9zdWJqZWN0KQor
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+
IG1kLnN0YXJ0U3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaGFySXNXb3Jk
Q2hhciA9IGlzV29yZENoYXIoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHJbLTFd
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPCBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIgPCBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2hhcklzV29yZENoYXIgPSBpc1dvcmRDaGFyKCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyog
Tm93IHNlZSBpZiB0aGUgc2l0dWF0aW9uIGlzIHdoYXQgd2Ugd2FudCAqLwpAQCAtNzQ1LDcgKzY4
NCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBNYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIg
dHlwZTsgaW5saW5lIGZvciBzcGVlZCAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
QkVHSU5fT1BDT0RFKE5PVF9ORVdMSU5FKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1
YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIr
KykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC03NTMsNyArNjky
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKIAogICAgICAgICAg
ICAgQkVHSU5fT1BDT0RFKE5PVF9ESUdJVCk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRT
dWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtNzYxLDcg
KzcwMCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAKICAgICAg
ICAgICAgIEJFR0lOX09QQ09ERShESUdJVCk6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRT
dWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTc2OSw3
ICs3MDgsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogCiAgICAg
ICAgICAgICBCRUdJTl9PUENPREUoTk9UX1dISVRFU1BBQ0UpOgotICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
Pj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsK
ICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZUNoYXIoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpA
QCAtNzc3LDcgKzcxNiw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7
CiAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShXSElURVNQQUNFKToKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1Ympl
Y3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFU
Q0g7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlQ2hhcigqc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIrKykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFU
Q0g7CkBAIC03ODUsNyArNzI0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09Q
Q09ERTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfV09S
RENIQVIpOgotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBpZiAoaXNXb3JkQ2hh
cigqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKykpCiAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC03OTMsNyArNzMyLDcgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShXT1JEQ0hBUik6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJq
ZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAg
ICAgIGlmICghaXNXb3JkQ2hhcigqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIr
KykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC04MDksNyArNzQ4
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICBsb29wcykuICovCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoUkVGKToKLSAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKSA8PCAxOyAgICAgICAg
ICAgICAgIC8qIERvdWJsZWQgcmVmIG51bWJlciAqLworICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSkgPDwgMTsgICAgICAgICAgICAgICAvKiBEb3Vi
bGVkIHJlZiBudW1iZXIgKi8KICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBBZHZhbmNlIHBhc3QgaXRlbSAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8qIElmIHRoZSByZWZlcmVuY2UgaXMgdW5zZXQsIHNldCB0aGUgbGVuZ3RoIHRvIGJlIGxvbmdl
ciB0aGFuIHRoZSBhbW91bnQKQEAgLTgxNywxMCArNzU2LDEwIEBAIFJFQ1VSU0U6CiAgICAgICAg
ICAgICAgICAgIGNhbid0IGp1c3QgZmFpbCBoZXJlLCBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0
eSBvZiBxdWFudGlmaWVycyB3aXRoIHplcm8KICAgICAgICAgICAgICAgICAgbWluaW1hLiAqLwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5vZmZzZXQgPj0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3AgfHwg
bWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdIDwgMCkK
KyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ID49
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRUb3AgfHwgbWQub2Zmc2V0VmVjdG9yW3N0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPCAwKQogICAgICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoID0gbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQr
MV0gLSBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF07
CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCA9
IG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQrMV0gLSBt
ZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgZm9yIHJlcGV0aXRpb24sIG9y
IGhhbmRsZSB0aGUgbm9uLXJlcGVhdGVkIGNhc2UgKi8KICAgICAgICAgICAgICAgICAKQEAgLTgz
NywxNSArNzc2LDE1IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JS
QU5HRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbWluaW1pemUgPSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciA9PSBPUF9DUk1JTlJBTkdFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1p
biA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtaW4gPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIgKyAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5tYXggPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBJTlRfTUFYOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgLyogTm8gcmVwZWF0IGZvbGxv
d3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hfcmVmKHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtYXRjaFJlZihzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZz
ZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgKz0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBAIC04NjAsNyArNzk5LDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICAgICAvKiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5pbXVtIG51
bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbWF0Y2hfcmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCwg
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLmxlbmd0aCwgbWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoUmVmKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgKz0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubGVuZ3RoOwogICAgICAgICAgICAgICAgIH0KQEAgLTg3Niw5ICs4MTUsOSBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVD
VVJTSVZFX01BVENIKDIwLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIs
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
TWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgIW1hdGNoX3JlZihzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXggfHwgIW1hdGNoUmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9m
ZnNldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciArPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTg5MCwxMyArODI5LDEzIEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBp
IDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWF0Y2hfcmVmKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNl
dCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmxlbmd0aCwgbWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRj
aFJlZihzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1k
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjEsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgLT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC05MzMsOCArODcyLDggQEAgUkVDVVJTRToK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIE9QX0NSTUlOUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9
ICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX0NSTUlOUkFO
R0UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0
T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQy
Qnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyLCAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdldDJCeXRlVmFsdWUo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZh
bHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDMpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9PSAw
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm1heCA9IElOVF9NQVg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gNTsKQEAgLTk0OCw3ICs4ODcsNyBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9m
IG1hdGNoZXMgYXJlIHByZXNlbnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5f
Tk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjID4gMjU1KSB7
CkBAIC05NzEsOSArOTEwLDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBpZiAobWluaW1p
emUpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5maSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyMiwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0
YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk47CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUp
IHsKQEAgLTk5MSw3ICs5MzAsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4gMjU1KSB7CkBA
IC0xMDA1LDcgKzk0NCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJT
SVZFX01BVENIKDI0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0
Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJp
ZWQgYXQgb3JpZ2luYWwgcG9zICovCkBAIC0xMDE5LDcgKzk1OCw3IEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoWENMQVNTKToKICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhID0gc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRTsgICAgICAgICAgICAgICAg
LyogU2F2ZSBmb3IgbWF0Y2hpbmcgKi8KLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOyAgICAgICAgICAgICAgICAgICAg
ICAvKiBBZHZhbmNlIHBhc3QgdGhlIGl0ZW0gKi8KKyAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOyAgICAgICAgICAgICAgICAgICAgICAv
KiBBZHZhbmNlIHBhc3QgdGhlIGl0ZW0gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9DUlNUQVI6CkBAIC0xMDM0LDggKzk3Myw4IEBA
IFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgogICAgICAgICAgICAgICAgICAgICAgICAg
bWluaW1pemUgPSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBP
UF9DUk1JTlJBTkdFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdldDJCeXRlT3Bj
b2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIs
IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciwgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBnZXQy
Qnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0g
Z2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAz
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5tYXggPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXggPSBJTlRfTUFYOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDU7CkBAIC0xMDQ4LDEwICs5ODcs
MTAgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAvKiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5p
bXVtIG51bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiAqLwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBt
ZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIV9wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFranNfcGNyZV94Y2xhc3MoYywgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01B
VENIOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTEwNjcsMTIgKzEw
MDYsMTIgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBpZiAobWluaW1pemUpIHsKICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9IG1pbjs7
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFQ1VSU0lWRV9NQVRDSCgyNiwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0g
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5l
bmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cisrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfcGNyZV94Y2xhc3MoYywgc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWtqc19wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlICov
CkBAIC0xMDgzLDE2ICsxMDIyLDE2IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQ
dHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9wY3JlX3hj
bGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgha2pzX3BjcmVfeGNsYXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmRhdGEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3IoOzspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyNywgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVy
blN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0
UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwpAQCAtMTEwOSw3
ICsxMDQ4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBnZXRVVEY4Q2hhckFuZElu
Y3JlbWVudExlbmd0aChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYywgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5s
ZW5ndGgpOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciArPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9z
dWJqZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05P
X01BVENIOwogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
YyAhPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKykKICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTExMjIsMTAgKzEwNjEsMTAgQEAgUkVDVVJT
RToKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIrKzsKICAgICAgICAgICAgICAgICBnZXRVVEY4Q2hhckFuZEluY3JlbWVudExlbmd0aChzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgpOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRT
dWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIGludCBkYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwot
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyAhPSBkYyAm
JiBfcGNyZV91Y3Bfb3RoZXJjYXNlKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKSAhPSBk
YykKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgIT0g
ZGMgJiYga2pzX3BjcmVfdWNwX290aGVyY2FzZShzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
YykgIT0gZGMpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAg
ICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICB9CkBAIC0xMTMzLDcgKzEwNzIsNyBA
QCBSRUNVUlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVy
LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEFTQ0lJX0NI
QVIpOgotICAgICAgICAgICAgICAgIGlmIChtZC5lbmRfc3ViamVjdCA9PSBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWQuZW5kU3ViamVj
dCA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0clsxXSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAg
LTExNDQsNyArMTA4Myw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBNYXRjaCBvbmUgb2Yg
dHdvIGNhc2VzIG9mIGFuIEFTQ0lJIGxldHRlci4gKi8KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEJFR0lOX09QQ09ERShBU0NJSV9MRVRURVJfSUdOT1JJTkdfQ0FTRSk6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1kLmVuZF9zdWJqZWN0ID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyKQorICAgICAgICAgICAgICAgIGlmIChtZC5lbmRTdWJqZWN0ID09IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
X05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmICgoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyIHwgMHgyMCkgIT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyWzFdKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtMTE1
NSw3ICsxMDk0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNo
YXJhY3RlciByZXBlYXRlZGx5OyBkaWZmZXJlbnQgb3Bjb2RlcyBzaGFyZSBjb2RlLiAqLwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEVYQUNUKToKLSAgICAgICAg
ICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9w
Y29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
LCAxKTsKKyAgICAgICAgICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5t
YXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciArIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXplID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAg
ICAgICAgICAgZ290byBSRVBFQVRDSEFSOwpAQCAtMTE2Myw3ICsxMTAyLDcgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShVUFRPKToKICAgICAgICAgICAgIEJFR0lOX09QQ09E
RShNSU5VUFRPKToKICAgICAgICAgICAgICAgICBtaW4gPSAwOwotICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNl
dChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAg
ICAgbWluaW1pemUgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09
IE9QX01JTlVQVE87CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVRDSEFSOwpAQCAt
MTE4NCwxMiArMTEyMywxMiBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCA9IDE7CiAgICAgICAgICAg
ICAgICAgZ2V0VVRGOENoYXJBbmRJbmNyZW1lbnRMZW5ndGgoc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuZmMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBpZiAobWluICog
KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID4gMHhGRkZGID8gMiA6IDEpID4gbWQuZW5k
X3N1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKKyAgICAgICAg
ICAgICAgICBpZiAobWluICogKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID4gMHhGRkZG
ID8gMiA6IDEpID4gbWQuZW5kU3ViamVjdCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjIDw9IDB4RkZGRikgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgb3RoZXJjYXNlID0gbWQuaWdub3JlQ2FzZSA/IF9wY3JlX3Vj
cF9vdGhlcmNhc2Uoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMpIDogLTE7CisgICAgICAg
ICAgICAgICAgICAgIGludCBvdGhlcmNhc2UgPSBtZC5pZ25vcmVDYXNlID8ga2pzX3BjcmVfdWNw
X290aGVyY2FzZShzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykgOiAtMTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1p
bjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICYmICpz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBvdGhlcmNhc2UpCkBAIC0xMjAx
LDE0ICsxMTQwLDE0IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09Q
Q09ERTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5p
bWl6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMucmVwZWF0X290aGVyY2FzZSA9IG90aGVyY2FzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnJlcGVhdE90aGVyY2FzZSA9IG90aGVyY2FzZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDI4LCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJu
U3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJq
ZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmZjICYmICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5yZXBlYXRfb3RoZXJjYXNlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgIT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgJiYgKnN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnJlcGVh
dE90aGVyY2FzZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTIxNiw3ICsxMTU1LDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0
cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICYmICpz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBvdGhlcmNhc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIyNCw3ICsxMTYzLDcgQEAgUkVD
VVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjksIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0xMjQ2LDkgKzExODUsOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAg
ICBpZiAobWluaW1pemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDMwLCBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3Vi
amVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOOwpAQCAtMTI1OCw3ICsxMTk3LDcgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID4gbWQuZW5kX3N1YmplY3QgLSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+IG1k
LmVuZFN1YmplY3QgLSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyNjYsNyArMTIwNSw3IEBAIFJFQ1VS
U0U6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDMxLCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0
ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAtPSAyOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTI3OSw3ICsxMjE4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIE1h
dGNoIGEgbmVnYXRlZCBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVyLiAqLwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVCk6IHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3Qp
CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7
CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
Kys7CiAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIrKzsKQEAgLTEzMDMsNyArMTI0Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAg
YWJvdXQuLi4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShO
T1RFWEFDVCk6Ci0gICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArPSAzOwogICAgICAgICAgICAgICAgIGdvdG8gUkVQRUFUTk9UQ0hBUjsKQEAgLTEzMTEs
NyArMTI1MCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UVVBUTyk6
CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UTUlOVVBUTyk6CiAgICAgICAgICAgICAgICAg
bWluID0gMDsKLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXgg
PSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXplID0gKnN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9OT1RNSU5VUFRPOwogICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOwogICAgICAg
ICAgICAgICAgIGdvdG8gUkVQRUFUTk9UQ0hBUjsKQEAgLTEzMjksNyArMTI2OCw3IEBAIFJFQ1VS
U0U6CiAgICAgICAgICAgICAgc3ViamVjdC4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIFJFUEVBVE5PVENIQVI6Ci0gICAgICAgICAgICAgICAgaWYgKG1pbiA+IG1kLmVuZF9zdWJq
ZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCisgICAgICAgICAgICAg
ICAgaWYgKG1pbiA+IG1kLmVuZFN1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cikKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9ICpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICAKQEAgLTEzNjEsMTIg
KzEzMDAsMTIgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmZpID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgzOCwgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVy
blN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGQg
PSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZCA8IDEyOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZCA9IHRvTG93ZXJDYXNlKGQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1
YmplY3QgfHwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPT0gZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QgfHwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmMgPT0gZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wg
bmV2ZXIgcmVhY2hlcyBoZXJlICovCkBAIC0xMzc4LDcgKzEzMTcsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0
ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3Vi
amVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGQgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgPCAxMjgpCkBAIC0xMzg5
LDcgKzEzMjgsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJFQ1VSU0lWRV9NQVRDSCg0MCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0
ckF0U3RhcnRPZkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCkBAIC0xNDE1
LDEwICsxMzU0LDEwIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5maSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNDIsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBkID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5mYyA9PSBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KQEAgLTE0MzAsNyAr
MTM2OSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZCA9ICpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPT0gZCkKQEAgLTE0MzksNyArMTM3
OCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJT
SVZFX01BVENIKDQ0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFy
dE9mSW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KQEAgLTE0NTUsNyArMTM5
NCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgcmVwZWF0IGl0IGluIHRoZSBpbnRlcmVzdHMg
b2YgZWZmaWNpZW5jeS4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09Q
Q09ERShUWVBFRVhBQ1QpOgotICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgIG1pbiA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgbWluaW1p
emUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArPSAzOwogICAgICAgICAgICAgICAgIGdvdG8gUkVQRUFUVFlQRTsKQEAgLTE0
NjMsNyArMTQwMiw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoVFlQRVVQ
VE8pOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVNSU5VUFRPKToKICAgICAgICAgICAg
ICAgICBtaW4gPSAwOwotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgbWluaW1pemUgPSAqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyID09IE9QX1RZUEVNSU5VUFRPOwogICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOwog
ICAgICAgICAgICAgICAgIGdvdG8gUkVQRUFUVFlQRTsKQEAgLTE0ODgsNyArMTQyNyw3IEBAIFJF
Q1VSU0U6CiAgICAgICAgICAgICAgICAgIChpLmUuIGtlZXAgaXQgb3V0IG9mIHRoZSBsb29wKS4g
QWxzbyB3ZSBjYW4gdGVzdCB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdAogICAgICAgICAgICAgICAg
ICB0aGUgbWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgd2Ugc3RhcnQuICovCiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1pbiA+IG1kLmVuZF9zdWJqZWN0
IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCisgICAgICAgICAgICAgICAg
aWYgKG1pbiA+IG1kLmVuZFN1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cikKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAg
ICAgICBpZiAobWluID4gMCkgewogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmN0eXBlKSB7CkBAIC0xNTY1LDkgKzE1MDQsOSBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewogICAgICAgICAgICAgICAgICAgICBm
b3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01B
VENIKDQ4LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIrKzsKQEAgLTE2MjQsNyArMTU2Myw3IEBAIFJFQ1VSU0U6CiAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuY3R5cGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfTk9UX05FV0xJTkU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCB8
fCBpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QgfHwgaXNOZXdsaW5lKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0cikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBA
IC0xNjMyLDcgKzE1NzEsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoYykpCkBAIC0xNjQzLDcgKzE1ODIs
NyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9ESUdJVDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0g
bWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0FTQ0lJRGlnaXQoYykpCkBAIC0xNjU0LDcgKzE1OTMsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBP
UF9OT1RfV0hJVEVTUEFDRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3Vi
amVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3Bh
Y2VDaGFyKGMpKQpAQCAtMTY2NSw3ICsxNjA0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfV0hJVEVTUEFD
RToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1k
LmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlQ2hhcihjKSkKQEAg
LTE2NzYsNyArMTYxNSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV29yZENoYXIoYykpCkBAIC0xNjg3LDcgKzE2MjYs
NyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9XT1JEQ0hBUjoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
Pj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc1dvcmRDaGFyKGMpKQpAQCAtMTcwNSw3ICsxNjQ0LDcgQEAgUkVDVVJTRToKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCg1Miwgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVy
blN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0
UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwpAQCAtMTc1NSw3
ICsxNjk0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgbnVtYmVyIGZyb20gYSBkdW1t
eSBvcGNvZGUgYXQgdGhlIHN0YXJ0LiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPiBFWFRSQUNUX0JBU0lD
X01BWCkKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVt
YmVyID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciwgMitMSU5LX1NJWkUpOworICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDIgKyBMSU5LX1NJWkUpOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm51bWJlciA8PCAxOwogICAgICAgICAgICAgICAgIAogI2lmZGVmIERFQlVH
CkBAIC0xNzY0LDI2ICsxNzAzLDI2IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgcHJpbnRm
KCJcbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA8IG1kLm9mZnNldF9tYXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQxID0g
bWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdOwotICAg
ICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDIg
PSBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDFd
OwotICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29m
ZnNldDMgPSBtZC5vZmZzZXRfdmVjdG9yW21kLm9mZnNldF9lbmQgLSBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5udW1iZXJdOworICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5vZmZzZXQgPCBtZC5vZmZzZXRNYXgpIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDEgPSBtZC5vZmZzZXRWZWN0b3Jb
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDIgPSBtZC5vZmZzZXRWZWN0b3Jb
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ICsgMV07CisgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQzID0gbWQub2Zmc2V0VmVj
dG9yW21kLm9mZnNldEVuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl07CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBEUFJJTlRGKCgic2F2aW5n
ICVkICVkICVkXG4iLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDEsIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0Miwgc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuc2F2ZV9vZmZzZXQzKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldF92
ZWN0b3JbbWQub2Zmc2V0X2VuZCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl0g
PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAtIG1kLnN0YXJ0X3N1YmplY3Q7
CisgICAgICAgICAgICAgICAgICAgIERQUklOVEYoKCJzYXZpbmcgJWQgJWQgJWRcbiIsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQxLCBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5zYXZlT2Zmc2V0Miwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDMp
KTsKKyAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW21kLm9mZnNldEVuZCAtIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlcl0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciAtIG1kLnN0YXJ0U3ViamVjdDsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lW
RV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
cGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldExpbmtW
YWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAg
ICAgICAgICAgICAgICAgfSB3aGlsZSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciA9PSBPUF9BTFQpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgRFBSSU5URigoImJyYWNrZXQgJWQgZmFpbGVkXG4iLCBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5udW1iZXIpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XSA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MTsKLSAgICAgICAgICAgICAg
ICAgICAgbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQg
KyAxXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MjsKLSAgICAgICAg
ICAgICAgICAgICAgbWQub2Zmc2V0X3ZlY3RvclttZC5vZmZzZXRfZW5kIC0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubnVtYmVyXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVf
b2Zmc2V0MzsKKyAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZl
T2Zmc2V0MTsKKyAgICAgICAgICAgICAgICAgICAgbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDFdID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c2F2ZU9mZnNldDI7CisgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvclttZC5vZmZz
ZXRFbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdID0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuc2F2ZU9mZnNldDM7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgIH0KQEAgLTE4NDUsOCArMTc4
NCw4IEBAIFJSRVRVUk5fU1dJVENIOgogI2VuZGlmCiAgICAgCiBSRVRVUk46Ci0gICAgQVNTRVJU
KGlzX21hdGNoID09IE1BVENIX01BVENIIHx8IGlzX21hdGNoID09IE1BVENIX05PTUFUQ0gpOwot
ICAgIHJldHVybiBpc19tYXRjaDsKKyAgICBBU1NFUlQoaXNNYXRjaCA9PSBNQVRDSF9NQVRDSCB8
fCBpc01hdGNoID09IE1BVENIX05PTUFUQ0gpOworICAgIHJldHVybiBpc01hdGNoOwogfQogCiAK
QEAgLTE5MDMsNyArMTg0Miw3IEBAIHN0YXRpYyB2b2lkIHRyeUZpcnN0Qnl0ZU9wdGltaXphdGlv
bihjb24KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHRyeVJlcXVpcmVkQnl0ZU9wdGltaXphdGlv
bihjb25zdCBVQ2hhciomIHN1YmplY3RQdHIsIGNvbnN0IFVDaGFyKiBlbmRTdWJqZWN0LCBpbnQg
cmVxX2J5dGUsIGludCByZXFfYnl0ZTIsIGJvb2wgcmVxX2J5dGVfY2FzZWxlc3MsIGJvb2wgaGFz
Rmlyc3RCeXRlLCBjb25zdCBVQ2hhciomIHJlcV9ieXRlX3B0cikKK3N0YXRpYyBib29sIHRyeVJl
cXVpcmVkQnl0ZU9wdGltaXphdGlvbihjb25zdCBVQ2hhciomIHN1YmplY3RQdHIsIGNvbnN0IFVD
aGFyKiBlbmRTdWJqZWN0LCBpbnQgcmVxX2J5dGUsIGludCByZXFfYnl0ZTIsIGJvb2wgcmVxX2J5
dGVfY2FzZWxlc3MsIGJvb2wgaGFzRmlyc3RCeXRlLCBjb25zdCBVQ2hhciomIHJlcUJ5dGVQdHIp
CiB7CiAgICAgLyogSWYgcmVxX2J5dGUgaXMgc2V0LCB3ZSBrbm93IHRoYXQgdGhhdCBjaGFyYWN0
ZXIgbXVzdCBhcHBlYXIgaW4gdGhlIHN1YmplY3QKICAgICAgZm9yIHRoZSBtYXRjaCB0byBzdWNj
ZWVkLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHNldCwgcmVxX2J5dGUgbXVzdCBiZQpAQCAt
MTkyNSw3ICsxODY0LDcgQEAgc3RhdGljIGJvb2wgdHJ5UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9u
KAogICAgICAgICAvKiBXZSBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGUgc2VhcmNoIGlmIHdlIGhh
dmVuJ3QgeWV0IHJlYWNoZWQgdGhlCiAgICAgICAgICBwbGFjZSB3ZSBmb3VuZCBpdCBhdCBsYXN0
IHRpbWUuICovCiAKLSAgICAgICAgaWYgKHAgPiByZXFfYnl0ZV9wdHIpIHsKKyAgICAgICAgaWYg
KHAgPiByZXFCeXRlUHRyKSB7CiAgICAgICAgICAgICBpZiAocmVxX2J5dGVfY2FzZWxlc3MpIHsK
ICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGVuZFN1YmplY3QpIHsKICAgICAgICAgICAgICAg
ICAgICAgaW50IHBwID0gKnArKzsKQEAgLTE5NTIsNyArMTg5MSw3IEBAIHN0YXRpYyBib29sIHRy
eVJlcXVpcmVkQnl0ZU9wdGltaXphdGlvbigKICAgICAgICAgICAgICBmb3VuZCBpdCwgc28gdGhh
dCB3ZSBkb24ndCBzZWFyY2ggYWdhaW4gbmV4dCB0aW1lIHJvdW5kIHRoZSBsb29wIGlmCiAgICAg
ICAgICAgICAgdGhlIHN0YXJ0IGhhc24ndCBwYXNzZWQgdGhpcyBjaGFyYWN0ZXIgeWV0LiAqLwog
Ci0gICAgICAgICAgICByZXFfYnl0ZV9wdHIgPSBwOworICAgICAgICAgICAgcmVxQnl0ZVB0ciA9
IHA7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2NywxMyArMTkw
NiwxMyBAQCBpbnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhwKiByZSwKICAgICBBU1NF
UlQob2Zmc2V0Y291bnQgPj0gMCk7CiAgICAgQVNTRVJUKG9mZnNldHMgfHwgb2Zmc2V0Y291bnQg
PT0gMCk7CiAgICAgCi0gICAgTWF0Y2hEYXRhIG1hdGNoX2Jsb2NrOwotICAgIG1hdGNoX2Jsb2Nr
LnN0YXJ0X3N1YmplY3QgPSBzdWJqZWN0OwotICAgIG1hdGNoX2Jsb2NrLmVuZF9zdWJqZWN0ID0g
bWF0Y2hfYmxvY2suc3RhcnRfc3ViamVjdCArIGxlbmd0aDsKLSAgICBjb25zdCBVQ2hhciogZW5k
X3N1YmplY3QgPSBtYXRjaF9ibG9jay5lbmRfc3ViamVjdDsKKyAgICBNYXRjaERhdGEgbWF0Y2hC
bG9jazsKKyAgICBtYXRjaEJsb2NrLnN0YXJ0U3ViamVjdCA9IHN1YmplY3Q7CisgICAgbWF0Y2hC
bG9jay5lbmRTdWJqZWN0ID0gbWF0Y2hCbG9jay5zdGFydFN1YmplY3QgKyBsZW5ndGg7CisgICAg
Y29uc3QgVUNoYXIqIGVuZFN1YmplY3QgPSBtYXRjaEJsb2NrLmVuZFN1YmplY3Q7CiAgICAgCi0g
ICAgbWF0Y2hfYmxvY2subXVsdGlsaW5lID0gKHJlLT5vcHRpb25zICYgTWF0Y2hBY3Jvc3NNdWx0
aXBsZUxpbmVzT3B0aW9uKTsKLSAgICBtYXRjaF9ibG9jay5pZ25vcmVDYXNlID0gKHJlLT5vcHRp
b25zICYgSWdub3JlQ2FzZU9wdGlvbik7CisgICAgbWF0Y2hCbG9jay5tdWx0aWxpbmUgPSAocmUt
Pm9wdGlvbnMgJiBNYXRjaEFjcm9zc011bHRpcGxlTGluZXNPcHRpb24pOworICAgIG1hdGNoQmxv
Y2suaWdub3JlQ2FzZSA9IChyZS0+b3B0aW9ucyAmIElnbm9yZUNhc2VPcHRpb24pOwogICAgIAog
ICAgIC8qIElmIHRoZSBleHByZXNzaW9uIGhhcyBnb3QgbW9yZSBiYWNrIHJlZmVyZW5jZXMgdGhh
biB0aGUgb2Zmc2V0cyBzdXBwbGllZCBjYW4KICAgICAgaG9sZCwgd2UgZ2V0IGEgdGVtcG9yYXJ5
IGNodW5rIG9mIHdvcmtpbmcgc3RvcmUgdG8gdXNlIGR1cmluZyB0aGUgbWF0Y2hpbmcuCkBAIC0x
OTg4LDE2ICsxOTI3LDE2IEBAIGludCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJl
LAogICAgIGJvb2wgdXNpbmdfdGVtcG9yYXJ5X29mZnNldHMgPSBmYWxzZTsKICAgICBpZiAocmUt
PnRvcF9iYWNrcmVmID4gMCAmJiByZS0+dG9wX2JhY2tyZWYgPj0gb2NvdW50LzMpIHsKICAgICAg
ICAgb2NvdW50ID0gcmUtPnRvcF9iYWNrcmVmICogMyArIDM7Ci0gICAgICAgIG1hdGNoX2Jsb2Nr
Lm9mZnNldF92ZWN0b3IgPSBuZXcgaW50W29jb3VudF07Ci0gICAgICAgIGlmICghbWF0Y2hfYmxv
Y2sub2Zmc2V0X3ZlY3RvcikKKyAgICAgICAgbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IgPSBuZXcg
aW50W29jb3VudF07CisgICAgICAgIGlmICghbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IpCiAgICAg
ICAgICAgICByZXR1cm4gSlNSZWdFeHBFcnJvck5vTWVtb3J5OwogICAgICAgICB1c2luZ190ZW1w
b3Jhcnlfb2Zmc2V0cyA9IHRydWU7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGNoX2Jsb2NrLm9m
ZnNldF92ZWN0b3IgPSBvZmZzZXRzOworICAgICAgICBtYXRjaEJsb2NrLm9mZnNldFZlY3RvciA9
IG9mZnNldHM7CiAgICAgCi0gICAgbWF0Y2hfYmxvY2sub2Zmc2V0X2VuZCA9IG9jb3VudDsKLSAg
ICBtYXRjaF9ibG9jay5vZmZzZXRfbWF4ID0gKDIqb2NvdW50KS8zOwotICAgIG1hdGNoX2Jsb2Nr
Lm9mZnNldF9vdmVyZmxvdyA9IGZhbHNlOworICAgIG1hdGNoQmxvY2sub2Zmc2V0RW5kID0gb2Nv
dW50OworICAgIG1hdGNoQmxvY2sub2Zmc2V0TWF4ID0gKDIqb2NvdW50KS8zOworICAgIG1hdGNo
QmxvY2sub2Zmc2V0T3ZlcmZsb3cgPSBmYWxzZTsKICAgICAKICAgICAvKiBDb21wdXRlIHRoZSBt
aW5pbXVtIG51bWJlciBvZiBvZmZzZXRzIHRoYXQgd2UgbmVlZCB0byByZXNldCBlYWNoIHRpbWUu
IERvaW5nCiAgICAgIHRoaXMgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgdG8gZXhlY3V0aW9uIHRp
bWUgd2hlbiB0aGVyZSBhcmVuJ3QgbWFueSBicmFja2V0cwpAQCAtMjAxMSw4ICsxOTUwLDggQEAg
aW50IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4cCogcmUsCiAgICAgIG5ldmVyIGJlIHVz
ZWQgdW5sZXNzIHByZXZpb3VzbHkgc2V0LCBidXQgdGhleSBnZXQgc2F2ZWQgYW5kIHJlc3RvcmVk
LCBhbmQgc28gd2UKICAgICAgaW5pdGlhbGl6ZSB0aGVtIHRvIGF2b2lkIHJlYWRpbmcgdW5pbml0
aWFsaXplZCBsb2NhdGlvbnMuICovCiAgICAgCi0gICAgaWYgKG1hdGNoX2Jsb2NrLm9mZnNldF92
ZWN0b3IpIHsKLSAgICAgICAgaW50KiBpcHRyID0gbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvciAr
IG9jb3VudDsKKyAgICBpZiAobWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IpIHsKKyAgICAgICAgaW50
KiBpcHRyID0gbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IgKyBvY291bnQ7CiAgICAgICAgIGludCog
aWVuZCA9IGlwdHIgLSByZXNldGNvdW50LzIgKyAxOwogICAgICAgICB3aGlsZSAoLS1pcHRyID49
IGllbmQpCiAgICAgICAgICAgICAqaXB0ciA9IC0xOwpAQCAtMjA0NywyMSArMTk4NiwyMSBAQCBp
bnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhwKiByZSwKICAgICAvKiBMb29wIGZvciBo
YW5kbGluZyB1bmFuY2hvcmVkIHJlcGVhdGVkIG1hdGNoaW5nIGF0dGVtcHRzOyBmb3IgYW5jaG9y
ZWQgcmVnZXhzCiAgICAgIHRoZSBsb29wIHJ1bnMganVzdCBvbmNlLiAqLwogICAgIAotICAgIGNv
bnN0IFVDaGFyKiBzdGFydF9tYXRjaCA9IHN1YmplY3QgKyBzdGFydF9vZmZzZXQ7Ci0gICAgY29u
c3QgVUNoYXIqIHJlcV9ieXRlX3B0ciA9IHN0YXJ0X21hdGNoIC0gMTsKKyAgICBjb25zdCBVQ2hh
ciogc3RhcnRNYXRjaCA9IHN1YmplY3QgKyBzdGFydF9vZmZzZXQ7CisgICAgY29uc3QgVUNoYXIq
IHJlcUJ5dGVQdHIgPSBzdGFydE1hdGNoIC0gMTsKICAgICBib29sIHVzZU11bHRpTGluZUZpcnN0
Q2hhck9wdGltaXphdGlvbiA9IHJlLT5vcHRpb25zICYgVXNlTXVsdGlMaW5lRmlyc3RCeXRlT3B0
aW1pemF0aW9uT3B0aW9uOwogICAgIAogICAgIGRvIHsKICAgICAgICAgLyogUmVzZXQgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGV4dHJhY3Rpb25zIHdlIG1pZ2h0IHNlZS4gKi8KLSAgICAgICAgaWYg
KG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3IpIHsKLSAgICAgICAgICAgIGludCogaXB0ciA9IG1h
dGNoX2Jsb2NrLm9mZnNldF92ZWN0b3I7CisgICAgICAgIGlmIChtYXRjaEJsb2NrLm9mZnNldFZl
Y3RvcikgeworICAgICAgICAgICAgaW50KiBpcHRyID0gbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3I7
CiAgICAgICAgICAgICBpbnQqIGllbmQgPSBpcHRyICsgcmVzZXRjb3VudDsKICAgICAgICAgICAg
IHdoaWxlIChpcHRyIDwgaWVuZCkKICAgICAgICAgICAgICAgICAqaXB0cisrID0gLTE7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHRyeUZpcnN0Qnl0ZU9wdGltaXphdGlvbihzdGFydF9t
YXRjaCwgZW5kX3N1YmplY3QsIGZpcnN0X2J5dGUsIGZpcnN0X2J5dGVfY2FzZWxlc3MsIHVzZU11
bHRpTGluZUZpcnN0Q2hhck9wdGltaXphdGlvbiwgbWF0Y2hfYmxvY2suc3RhcnRfc3ViamVjdCAr
IHN0YXJ0X29mZnNldCk7Ci0gICAgICAgIGlmICh0cnlSZXF1aXJlZEJ5dGVPcHRpbWl6YXRpb24o
c3RhcnRfbWF0Y2gsIGVuZF9zdWJqZWN0LCByZXFfYnl0ZSwgcmVxX2J5dGUyLCByZXFfYnl0ZV9j
YXNlbGVzcywgZmlyc3RfYnl0ZSA+PSAwLCByZXFfYnl0ZV9wdHIpKQorICAgICAgICB0cnlGaXJz
dEJ5dGVPcHRpbWl6YXRpb24oc3RhcnRNYXRjaCwgZW5kU3ViamVjdCwgZmlyc3RfYnl0ZSwgZmly
c3RfYnl0ZV9jYXNlbGVzcywgdXNlTXVsdGlMaW5lRmlyc3RDaGFyT3B0aW1pemF0aW9uLCBtYXRj
aEJsb2NrLnN0YXJ0U3ViamVjdCArIHN0YXJ0X29mZnNldCk7CisgICAgICAgIGlmICh0cnlSZXF1
aXJlZEJ5dGVPcHRpbWl6YXRpb24oc3RhcnRNYXRjaCwgZW5kU3ViamVjdCwgcmVxX2J5dGUsIHJl
cV9ieXRlMiwgcmVxX2J5dGVfY2FzZWxlc3MsIGZpcnN0X2J5dGUgPj0gMCwgcmVxQnl0ZVB0cikp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgLyogV2hlbiBh
IG1hdGNoIG9jY3Vycywgc3Vic3RyaW5ncyB3aWxsIGJlIHNldCBmb3IgYWxsIGludGVybmFsIGV4
dHJhY3Rpb25zOwpAQCAtMjA3MiwxNSArMjAxMSwxNSBAQCBpbnQganNSZWdFeHBFeGVjdXRlKGNv
bnN0IEpTUmVnRXhwKiByZSwKICAgICAgICAgIGlmIGNlcnRhaW4gcGFydHMgb2YgdGhlIHBhdHRl
cm4gd2VyZSBub3QgdXNlZC4gKi8KICAgICAgICAgCiAgICAgICAgIC8qIFRoZSBjb2RlIHN0YXJ0
cyBhZnRlciB0aGUgSlNSZWdFeHAgYmxvY2sgYW5kIHRoZSBjYXB0dXJlIG5hbWUgdGFibGUuICov
Ci0gICAgICAgIGNvbnN0IHVzY2hhciogc3RhcnRfY29kZSA9IChjb25zdCB1c2NoYXIqKShyZSAr
IDEpOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzdGFydF9jb2RlID0gKGNvbnN0IHVu
c2lnbmVkIGNoYXIqKShyZSArIDEpOwogICAgICAgICAKLSAgICAgICAgaW50IHJldHVybkNvZGUg
PSBtYXRjaChzdGFydF9tYXRjaCwgc3RhcnRfY29kZSwgMiwgbWF0Y2hfYmxvY2spOworICAgICAg
ICBpbnQgcmV0dXJuQ29kZSA9IG1hdGNoKHN0YXJ0TWF0Y2gsIHN0YXJ0X2NvZGUsIDIsIG1hdGNo
QmxvY2spOwogICAgICAgICAKICAgICAgICAgLyogV2hlbiB0aGUgcmVzdWx0IGlzIG5vIG1hdGNo
LCBhZHZhbmNlIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGNoYXJhY3RlcgogICAgICAgICAgYW5k
IGNvbnRpbnVlLiAqLwogICAgICAgICAKICAgICAgICAgaWYgKHJldHVybkNvZGUgPT0gTUFUQ0hf
Tk9NQVRDSCkgewotICAgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgICAgICAgIHN0YXJ0
TWF0Y2grKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MjA5NCwzMiArMjAzMywzMiBAQCBpbnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhwKiBy
ZSwKICAgICAgICAgCiAgICAgICAgIGlmICh1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cykgewogICAg
ICAgICAgICAgaWYgKG9mZnNldGNvdW50ID49IDQpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHko
b2Zmc2V0cyArIDIsIG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3IgKyAyLCAob2Zmc2V0Y291bnQg
LSAyKSAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkob2Zmc2V0cyArIDIs
IG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yICsgMiwgKG9mZnNldGNvdW50IC0gMikgKiBzaXplb2Yo
aW50KSk7CiAgICAgICAgICAgICAgICAgRFBSSU5URigoIkNvcGllZCBvZmZzZXRzIGZyb20gdGVt
cG9yYXJ5IG1lbW9yeVxuIikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1hdGNo
X2Jsb2NrLmVuZF9vZmZzZXRfdG9wID4gb2Zmc2V0Y291bnQpCi0gICAgICAgICAgICAgICAgbWF0
Y2hfYmxvY2sub2Zmc2V0X292ZXJmbG93ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtYXRjaEJs
b2NrLmVuZE9mZnNldFRvcCA+IG9mZnNldGNvdW50KQorICAgICAgICAgICAgICAgIG1hdGNoQmxv
Y2sub2Zmc2V0T3ZlcmZsb3cgPSB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBEUFJJ
TlRGKCgiRnJlZWluZyB0ZW1wb3JhcnkgbWVtb3J5XG4iKSk7Ci0gICAgICAgICAgICBkZWxldGUg
W10gbWF0Y2hfYmxvY2sub2Zmc2V0X3ZlY3RvcjsKKyAgICAgICAgICAgIGRlbGV0ZSBbXSBtYXRj
aEJsb2NrLm9mZnNldFZlY3RvcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJu
Q29kZSA9IG1hdGNoX2Jsb2NrLm9mZnNldF9vdmVyZmxvdyA/IDAgOiBtYXRjaF9ibG9jay5lbmRf
b2Zmc2V0X3RvcCAvIDI7CisgICAgICAgIHJldHVybkNvZGUgPSBtYXRjaEJsb2NrLm9mZnNldE92
ZXJmbG93ID8gMCA6IG1hdGNoQmxvY2suZW5kT2Zmc2V0VG9wIC8gMjsKICAgICAgICAgCiAgICAg
ICAgIGlmIChvZmZzZXRjb3VudCA8IDIpCiAgICAgICAgICAgICByZXR1cm5Db2RlID0gMDsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBvZmZzZXRzWzBdID0gc3RhcnRfbWF0Y2ggLSBtYXRj
aF9ibG9jay5zdGFydF9zdWJqZWN0OwotICAgICAgICAgICAgb2Zmc2V0c1sxXSA9IG1hdGNoX2Js
b2NrLmVuZF9tYXRjaF9wdHIgLSBtYXRjaF9ibG9jay5zdGFydF9zdWJqZWN0OworICAgICAgICAg
ICAgb2Zmc2V0c1swXSA9IHN0YXJ0TWF0Y2ggLSBtYXRjaEJsb2NrLnN0YXJ0U3ViamVjdDsKKyAg
ICAgICAgICAgIG9mZnNldHNbMV0gPSBtYXRjaEJsb2NrLmVuZE1hdGNoUHRyIC0gbWF0Y2hCbG9j
ay5zdGFydFN1YmplY3Q7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIERQUklOVEYoKCI+
Pj4+IHJldHVybmluZyAlZFxuIiwgcmMpKTsKICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7Ci0g
ICAgfSB3aGlsZSAoc3RhcnRfbWF0Y2ggPD0gZW5kX3N1YmplY3QpOworICAgIH0gd2hpbGUgKHN0
YXJ0TWF0Y2ggPD0gZW5kU3ViamVjdCk7CiAgICAgCiAgICAgaWYgKHVzaW5nX3RlbXBvcmFyeV9v
ZmZzZXRzKSB7CiAgICAgICAgIERQUklOVEYoKCJGcmVlaW5nIHRlbXBvcmFyeSBtZW1vcnlcbiIp
KTsKLSAgICAgICAgZGVsZXRlIFtdIG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3I7CisgICAgICAg
IGRlbGV0ZSBbXSBtYXRjaEJsb2NrLm9mZnNldFZlY3RvcjsKICAgICB9CiAgICAgCiAgICAgRFBS
SU5URigoIj4+Pj4gcmV0dXJuaW5nIFBDUkVfRVJST1JfTk9NQVRDSFxuIikpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlw
dENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDM0ICs3Niwx
NCBAQCB0b3RhbCBsZW5ndGguICovCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKICNl
bmRpZgogCisjaW5jbHVkZSAicGNyZS5oIgorCiAvKiBUaGUgdmFsdWUgb2YgTElOS19TSVpFIGRl
dGVybWluZXMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIHRvIHN0b3JlIGxpbmtzIGFzCiBvZmZz
ZXRzIHdpdGhpbiB0aGUgY29tcGlsZWQgcmVnZXguIFRoZSBkZWZhdWx0IGlzIDIsIHdoaWNoIGFs
bG93cyBmb3IgY29tcGlsZWQKLXBhdHRlcm5zIHVwIHRvIDY0SyBsb25nLiBUaGlzIGNvdmVycyB0
aGUgdmFzdCBtYWpvcml0eSBvZiBjYXNlcy4gSG93ZXZlciwgUENSRQotY2FuIGFsc28gYmUgY29t
cGlsZWQgdG8gdXNlIDMgb3IgNCBieXRlcyBpbnN0ZWFkLiBUaGlzIGFsbG93cyBmb3IgbG9uZ2Vy
Ci1wYXR0ZXJucyBpbiBleHRyZW1lIGNhc2VzLiBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwg
ImNvbmZpZ3VyZSIgY2FuIGJlIHVzZWQKLXRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4gKi8KK3Bh
dHRlcm5zIHVwIHRvIDY0SyBsb25nLiAqLwogCiAjZGVmaW5lIExJTktfU0laRSAgIDIKIAotLyog
VGhlIGJlbG93IGxpbWl0IHJlc3RyaWN0cyB0aGUgbnVtYmVyIG9mIHJlY3Vyc2l2ZSBtYXRjaCBj
YWxscyBpbiBvcmRlciB0bwotbGltaXQgdGhlIG1heGltdW0gYW1vdW50IG9mIHN0YWNrIChvciBo
ZWFwLCBpZiBOT19SRUNVUlNFIGlzIGRlZmluZWQpIHRoYXQgaXMgdXNlZC4gVGhlCi12YWx1ZSBv
ZiBNQVRDSF9MSU1JVF9SRUNVUlNJT04gYXBwbGllcyBvbmx5IHRvIHJlY3Vyc2l2ZSBjYWxscyBv
ZiBtYXRjaCgpLgotIAotIFRoaXMgbGltaXQgaXMgdGllZCB0byB0aGUgc2l6ZSBvZiBNYXRjaEZy
YW1lLiAgUmlnaHQgbm93IHdlIGFsbG93IFBDUkUgdG8gYWxsb2NhdGUgdXAKLSB0byBNQVRDSF9M
SU1JVF9SRUNVUlNJT04gLSAxNiAqIHNpemVvZihNYXRjaEZyYW1lKSBieXRlcyBvZiAic3RhY2si
IHNwYWNlIGJlZm9yZSB3ZSBnaXZlIHVwLgotIEN1cnJlbnRseSB0aGF0J3MgMTAwMDAwIC0gMTYg
KiAoMjMgKiA0KSAgfiA5ME1CCi0gKi8KLQotI2RlZmluZSBNQVRDSF9MSU1JVF9SRUNVUlNJT04g
MTAwMDAwCi0KLSNkZWZpbmUgX3BjcmVfZGVmYXVsdF90YWJsZXMga2pzX3BjcmVfZGVmYXVsdF90
YWJsZXMKLSNkZWZpbmUgX3BjcmVfb3JkMnV0Zjgga2pzX3BjcmVfb3JkMnV0ZjgKLSNkZWZpbmUg
X3BjcmVfdXRmOF90YWJsZTEga2pzX3BjcmVfdXRmOF90YWJsZTEKLSNkZWZpbmUgX3BjcmVfdXRm
OF90YWJsZTIga2pzX3BjcmVfdXRmOF90YWJsZTIKLSNkZWZpbmUgX3BjcmVfdXRmOF90YWJsZTMg
a2pzX3BjcmVfdXRmOF90YWJsZTMKLSNkZWZpbmUgX3BjcmVfdXRmOF90YWJsZTQga2pzX3BjcmVf
dXRmOF90YWJsZTQKLSNkZWZpbmUgX3BjcmVfeGNsYXNzIGtqc19wY3JlX3hjbGFzcwotCiAvKiBE
ZWZpbmUgREVCVUcgdG8gZ2V0IGRlYnVnZ2luZyBvdXRwdXQgb24gc3Rkb3V0LiAqLwogCiAjaWYg
MApAQCAtMTIxLDExOCArMTAxLDcyIEBAIGFsbCwgaXQgaGFkIG9ubHkgYmVlbiBhYm91dCAxMCB5
ZWFycyB0aGUKICNkZWZpbmUgRFBSSU5URihwKSAvKm5vdGhpbmcqLwogI2VuZGlmCiAKLS8qIFN0
YW5kYXJkIEMgaGVhZGVycyBwbHVzIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UgZGVmaW5pdGlvbi4g
VGhlIG9ubHkgdGltZQotc2V0am1wIGFuZCBzdGRhcmcgYXJlIHVzZWQgaXMgd2hlbiBOT19SRUNV
UlNFIGlzIHNldC4gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+
Ci0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLQotLyogSW5jbHVkZSB0aGUgcHVibGljIFBDUkUgaGVhZGVyIGFuZCB0aGUg
ZGVmaW5pdGlvbnMgb2YgVUNQIGNoYXJhY3RlciBwcm9wZXJ0eQotdmFsdWVzLiAqLwotCi0jaW5j
bHVkZSAicGNyZS5oIgotCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBjcmVfdWludDE2OwotdHlw
ZWRlZiB1bnNpZ25lZCBwY3JlX3VpbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1c2NoYXI7
Ci0KIC8qIFBDUkUga2VlcHMgb2Zmc2V0cyBpbiBpdHMgY29tcGlsZWQgY29kZSBhcyAyLWJ5dGUg
cXVhbnRpdGllcyAoYWx3YXlzIHN0b3JlZAogaW4gYmlnLWVuZGlhbiBvcmRlcikgYnkgZGVmYXVs
dC4gVGhlc2UgYXJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBsaW5rIGZyb20gdGhlCiBzdGFydCBv
ZiBhIHN1YnBhdHRlcm4gdG8gaXRzIGFsdGVybmF0aXZlcyBhbmQgaXRzIGVuZC4gVGhlIHVzZSBv
ZiAyIGJ5dGVzIHBlcgogb2Zmc2V0IGxpbWl0cyB0aGUgc2l6ZSBvZiB0aGUgY29tcGlsZWQgcmVn
ZXggdG8gYXJvdW5kIDY0Sywgd2hpY2ggaXMgYmlnIGVub3VnaAogZm9yIGFsbW9zdCBldmVyeWJv
ZHkuIEhvd2V2ZXIsIEkgcmVjZWl2ZWQgYSByZXF1ZXN0IGZvciBhbiBldmVuIGJpZ2dlciBsaW1p
dC4KIEZvciB0aGlzIHJlYXNvbiwgYW5kIGFsc28gdG8gbWFrZSB0aGUgY29kZSBlYXNpZXIgdG8g
bWFpbnRhaW4sIHRoZSBzdG9yaW5nIGFuZAotbG9hZGluZyBvZiBvZmZzZXRzIGZyb20gdGhlIGJ5
dGUgc3RyaW5nIGlzIG5vdyBoYW5kbGVkIGJ5IHRoZSBtYWNyb3MgdGhhdCBhcmUKLWRlZmluZWQg
aGVyZS4KLQotVGhlIG1hY3JvcyBhcmUgY29udHJvbGxlZCBieSB0aGUgdmFsdWUgb2YgTElOS19T
SVpFLiBUaGlzIGRlZmF1bHRzIHRvIDIgaW4KLXRoZSBjb25maWcuaCBmaWxlLCBidXQgY2FuIGJl
IG92ZXJyaWRkZW4gYnkgdXNpbmcgLUQgb24gdGhlIGNvbW1hbmQgbGluZS4gVGhpcwotaXMgYXV0
b21hdGVkIG9uIFVuaXggc3lzdGVtcyB2aWEgdGhlICJjb25maWd1cmUiIGNvbW1hbmQuICovCits
b2FkaW5nIG9mIG9mZnNldHMgZnJvbSB0aGUgYnl0ZSBzdHJpbmcgaXMgbm93IGhhbmRsZWQgYnkg
dGhlIGZ1bmN0aW9ucyB0aGF0IGFyZQorZGVmaW5lZCBoZXJlLiAqLwogCi0jaWYgTElOS19TSVpF
ID09IDIKLQotc3RhdGljIGlubGluZSB2b2lkIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQodXNjaGFy
KiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQotewotICAg
IG9wY29kZVB0cltvZmZzZXRdID0gdmFsdWUgPj4gODsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0ICsg
MV0gPSB2YWx1ZSAmIDI1NTsKLX0KKy8qIFBDUkUgdXNlcyBzb21lIG90aGVyIDItYnl0ZSBxdWFu
dGl0aWVzIHRoYXQgZG8gbm90IGNoYW5nZSB3aGVuIHRoZSBzaXplIG9mCitvZmZzZXRzIGNoYW5n
ZXMuIFRoZXJlIGFyZSB1c2VkIGZvciByZXBlYXQgY291bnRzIGFuZCBmb3Igb3RoZXIgdGhpbmdz
IHN1Y2ggYXMKK2NhcHR1cmluZyBwYXJlbnRoZXNpcyBudW1iZXJzIGluIGJhY2sgcmVmZXJlbmNl
cy4gKi8KIAotc3RhdGljIGlubGluZSBzaG9ydCBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNvbnN0
IHVzY2hhciogb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB2b2lkIHB1
dDJCeXRlVmFsdWUodW5zaWduZWQgY2hhciogb3Bjb2RlUHRyLCBpbnQgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuICgob3Bjb2RlUHRyW29mZnNldF0gPDwgOCkgfCBvcGNvZGVQdHJbb2Zmc2V0ICsgMV0p
OworICAgIEFTU0VSVCh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDB4RkZGRik7CisgICAgb3Bjb2Rl
UHRyWzBdID0gdmFsdWUgPj4gODsKKyAgICBvcGNvZGVQdHJbMV0gPSB2YWx1ZTsKIH0KIAotI2Rl
ZmluZSBNQVhfUEFUVEVSTl9TSVpFICgxIDw8IDE2KQotCi0jZWxpZiBMSU5LX1NJWkUgPT0gMwot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldCh1c2NoYXIqIG9wY29k
ZVB0ciwgc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBn
ZXQyQnl0ZVZhbHVlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0cikKIHsKLSAgICBBU1NF
UlQoISh2YWx1ZSAmIDB4RkYwMDAwMDApKTsgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGFsbG93cyB2
YWx1ZXMgPCAyXjI0Ci0gICAgb3Bjb2RlUHRyW29mZnNldF0gPSB2YWx1ZSA+PiAxNjsKLSAgICBv
cGNvZGVQdHJbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiA4OwotICAgIG9wY29kZVB0cltvZmZzZXQg
KyAyXSA9IHZhbHVlICYgMjU1OworICAgIHJldHVybiAob3Bjb2RlUHRyWzBdIDw8IDgpIHwgb3Bj
b2RlUHRyWzFdOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0
KGNvbnN0IHVzY2hhciogb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB2
b2lkIHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNlKHVuc2lnbmVkIGNoYXIqJiBvcGNvZGVQdHIsIGlu
dCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKChvcGNvZGVQdHJbb2Zmc2V0XSA8PCAxNikgfCAob3Bj
b2RlUHRyW29mZnNldCArIDFdIDw8IDgpIHwgb3Bjb2RlUHRyW29mZnNldCArIDJdKTsKKyAgICBw
dXQyQnl0ZVZhbHVlKG9wY29kZVB0ciwgdmFsdWUpOworICAgIG9wY29kZVB0ciArPSAyOwogfQog
Ci0jZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMjQpCi0KLSNlbGlmIExJTktfU0laRSA9
PSA0Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHVzY2hhciog
b3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUg
dm9pZCBwdXRMaW5rVmFsdWVBbGxvd1plcm8odW5zaWduZWQgY2hhciogb3Bjb2RlUHRyLCBpbnQg
dmFsdWUpCiB7Ci0gICAgb3Bjb2RlUHRyW29mZnNldF0gPSB2YWx1ZSA+PiAyNDsKLSAgICBvcGNv
ZGVQdHJbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxNjsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0ICsg
Ml0gPSB2YWx1ZSA+PiA4OwotICAgIG9wY29kZVB0cltvZmZzZXQgKyAzXSA9IHZhbHVlICYgMjU1
OworICAgIHB1dDJCeXRlVmFsdWUob3Bjb2RlUHRyLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgaW50IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29uc3QgdXNjaGFyKiBvcGNvZGVQdHIsIHNp
emVfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIGludCBnZXRMaW5rVmFsdWVBbGxvd1plcm8oY29u
c3QgdW5zaWduZWQgY2hhciogb3Bjb2RlUHRyKQogewotICAgIHJldHVybiAoKG9wY29kZVB0cltv
ZmZzZXRdIDw8IDI0KSB8IChvcGNvZGVQdHJbb2Zmc2V0ICsgMV0gPDwgMTYpIHwgKG9wY29kZVB0
cltvZmZzZXQgKyAyXSA8PCA4KSB8IG9wY29kZVB0cltvZmZzZXQgKyAzXSk7CisgICAgcmV0dXJu
IGdldDJCeXRlVmFsdWUob3Bjb2RlUHRyKTsKIH0KIAotI2RlZmluZSBNQVhfUEFUVEVSTl9TSVpF
ICgxIDw8IDMwKSAgIC8qIEtlZXAgaXQgcG9zaXRpdmUgKi8KLQotI2Vsc2UKLSNlcnJvciBMSU5L
X1NJWkUgbXVzdCBiZSBlaXRoZXIgMiwgMywgb3IgNAotI2VuZGlmCisjZGVmaW5lIE1BWF9QQVRU
RVJOX1NJWkUgKDEgPDwgMTYpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRPcGNvZGVWYWx1ZUF0
T2Zmc2V0QW5kQWR2YW5jZSh1c2NoYXIqJiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQsIHVuc2ln
bmVkIHNob3J0IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtWYWx1ZSh1bnNpZ25l
ZCBjaGFyKiBvcGNvZGVQdHIsIGludCB2YWx1ZSkKIHsKLSAgICBwdXRPcGNvZGVWYWx1ZUF0T2Zm
c2V0KG9wY29kZVB0ciwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgb3Bjb2RlUHRyICs9IExJTktfU0la
RTsKKyAgICBBU1NFUlQodmFsdWUpOworICAgIHB1dExpbmtWYWx1ZUFsbG93WmVybyhvcGNvZGVQ
dHIsIHZhbHVlKTsKIH0KIAotLyogUENSRSB1c2VzIHNvbWUgb3RoZXIgMi1ieXRlIHF1YW50aXRp
ZXMgdGhhdCBkbyBub3QgY2hhbmdlIHdoZW4gdGhlIHNpemUgb2YKLW9mZnNldHMgY2hhbmdlcy4g
VGhlcmUgYXJlIHVzZWQgZm9yIHJlcGVhdCBjb3VudHMgYW5kIGZvciBvdGhlciB0aGluZ3Mgc3Vj
aCBhcwotY2FwdHVyaW5nIHBhcmVudGhlc2lzIG51bWJlcnMgaW4gYmFjayByZWZlcmVuY2VzLiAq
LwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHVzY2hh
ciogb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3N0YXRp
YyBpbmxpbmUgaW50IGdldExpbmtWYWx1ZShjb25zdCB1bnNpZ25lZCBjaGFyKiBvcGNvZGVQdHIp
CiB7Ci0gICAgb3Bjb2RlUHRyW29mZnNldF0gPSB2YWx1ZSA+PiA4OwotICAgIG9wY29kZVB0cltv
ZmZzZXQgKyAxXSA9IHZhbHVlICYgMjU1OworICAgIGludCB2YWx1ZSA9IGdldExpbmtWYWx1ZUFs
bG93WmVybyhvcGNvZGVQdHIpOworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVl
OwogfQogCi1zdGF0aWMgaW5saW5lIHNob3J0IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChj
b25zdCB1c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBwdXRMaW5rVmFsdWVBbmRBZHZhbmNlKHVuc2lnbmVkIGNoYXIqJiBvcGNvZGVQdHIsIGludCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gKChvcGNvZGVQdHJbb2Zmc2V0XSA8PCA4KSB8IG9wY29kZVB0
cltvZmZzZXQgKyAxXSk7CisgICAgcHV0TGlua1ZhbHVlKG9wY29kZVB0ciwgdmFsdWUpOworICAg
IG9wY29kZVB0ciArPSBMSU5LX1NJWkU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXQyQnl0
ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKHVzY2hhciomIG9wY29kZVB0ciwgc2l6ZV90
IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0TGlu
a1ZhbHVlQWxsb3daZXJvQW5kQWR2YW5jZSh1bnNpZ25lZCBjaGFyKiYgb3Bjb2RlUHRyLCBpbnQg
dmFsdWUpCiB7Ci0gICAgcHV0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KG9wY29kZVB0ciwgb2Zm
c2V0LCB2YWx1ZSk7Ci0gICAgb3Bjb2RlUHRyICs9IDI7CisgICAgcHV0TGlua1ZhbHVlQWxsb3da
ZXJvKG9wY29kZVB0ciwgdmFsdWUpOworICAgIG9wY29kZVB0ciArPSBMSU5LX1NJWkU7CiB9CiAK
IC8vIEZJWE1FOiBUaGVzZSBhcmUgcmVhbGx5IG1vcmUgb2YgYSAiY29tcGlsZWQgcmVnZXhwIHN0
YXRlIiB0aGFuICJyZWdleHAgb3B0aW9ucyIKQEAgLTI0NSwxNiArMTc5LDYgQEAgZW51bSBSZWdF
eHBPcHRpb25zIHsKICAgICBNYXRjaEFjcm9zc011bHRpcGxlTGluZXNPcHRpb24gPSAweDAwMDAw
MDAyCiB9OwogCi0vKiBOZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSBmaXJzdGNoYXIgYW5kIHJlcWNo
YXIgdmFyaWFibGVzICovCi0KLSNkZWZpbmUgUkVRX1VOU0VUICgtMikKLSNkZWZpbmUgUkVRX05P
TkUgICgtMSkKLQotLyogVGhlIG1heGltdW0gcmVtYWluaW5nIGxlbmd0aCBvZiBzdWJqZWN0IHdl
IGFyZSBwcmVwYXJlZCB0byBzZWFyY2ggZm9yIGEKLXJlcV9ieXRlIG1hdGNoLiAqLwotCi0jZGVm
aW5lIFJFUV9CWVRFX01BWCAxMDAwCi0KIC8qIEZsYWdzIGFkZGVkIHRvIGZpcnN0Ynl0ZSBvciBy
ZXFieXRlOyBhICJub24tbGl0ZXJhbCIgaXRlbSBpcyBlaXRoZXIgYQogdmFyaWFibGUtbGVuZ3Ro
IHJlcGVhdCwgb3IgYSBhbnl0aGluZyBvdGhlciB0aGFuIGxpdGVyYWwgY2hhcmFjdGVycy4gKi8K
IApAQCAtMzY2LDggKzI5MCw2IEBAIG11c3QgYWxzbyBiZSB1cGRhdGVkIHRvIG1hdGNoLiAqLwog
ICAgIG1hY3JvKEFTU0VSVCkgXAogICAgIG1hY3JvKEFTU0VSVF9OT1QpIFwKICAgICBcCi0gICAg
bWFjcm8oT05DRSkgXAotICAgIFwKICAgICBtYWNybyhCUkFaRVJPKSBcCiAgICAgbWFjcm8oQlJB
TUlOWkVSTykgXAogICAgIG1hY3JvKEJSQU5VTUJFUikgXApAQCAtMzgxLDU3ICszMDMsMTUgQEAg
c3R1ZHkuYyB0aGF0IGFsbCBvcGNvZGVzIGFyZSBsZXNzIHRoYW4gMQogY2hhcmFjdGVyIHNlcXVl
bmNlcyBlYXNpZXIuICovCiAKIC8qIFRoZSBoaWdoZXN0IGV4dHJhY3Rpb24gbnVtYmVyIGJlZm9y
ZSB3ZSBoYXZlIHRvIHN0YXJ0IHVzaW5nIGFkZGl0aW9uYWwKLWJ5dGVzLiAoT3JpZ2luYWxseSBQ
Q1JFIGRpZG4ndCBoYXZlIHN1cHBvcnQgZm9yIGV4dHJhY3Rpb24gY291bnRzIGhpZ2h0ZXIgdGhh
bgorYnl0ZXMuIChPcmlnaW5hbGx5IFBDUkUgZGlkbid0IGhhdmUgc3VwcG9ydCBmb3IgZXh0cmFj
dGlvbiBjb3VudHMgaGlnaGVyIHRoYW4KIHRoaXMgbnVtYmVyLikgVGhlIHZhbHVlIGlzIGxpbWl0
ZWQgYnkgdGhlIG51bWJlciBvZiBvcGNvZGVzIGxlZnQgYWZ0ZXIgT1BfQlJBLAogaS5lLiAyNTUg
LSBPUF9CUkEuIFdlIGFjdHVhbGx5IHNldCBpdCBhIGJpdCBsb3dlciB0byBsZWF2ZSByb29tIGZv
ciBhZGRpdGlvbmFsCiBvcGNvZGVzLiAqLwogCi0jZGVmaW5lIEVYVFJBQ1RfQkFTSUNfTUFYICAx
MDAKLQotLyogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBsZW5ndGggb2YgZml4ZWQgbGVuZ3RoIG9w
ZXJhdGlvbnMgaW4gdGhlIGNvbXBpbGVkCi1yZWdleC4gVGhlIGxlbmd0aHMgYXJlIHVzZWQgd2hl
biBzZWFyY2hpbmcgZm9yIHNwZWNpZmljIHRoaW5ncywgYW5kIGFsc28gaW4gdGhlCi1kZWJ1Z2dp
bmcgcHJpbnRpbmcgb2YgYSBjb21waWxlZCByZWdleC4gV2UgdXNlIGEgbWFjcm8gc28gdGhhdCBp
dCBjYW4gYmUKLWRlZmluZWQgY2xvc2UgdG8gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBvcGNvZGVz
IHRoZW1zZWx2ZXMuCi0KLUFzIHRoaW5ncyBoYXZlIGJlZW4gZXh0ZW5kZWQsIHNvbWUgb2YgdGhl
c2UgYXJlIG5vIGxvbmdlciBmaXhlZCBsZW50aHMsIGJ1dCBhcmUKLW1pbmltYSBpbnN0ZWFkLiBG
b3IgZXhhbXBsZSwgdGhlIGxlbmd0aCBvZiBhIHNpbmdsZS1jaGFyYWN0ZXIgcmVwZWF0IG1heSB2
YXJ5Ci1pbiBVVEYtOCBtb2RlLiBUaGUgY29kZSB0aGF0IHVzZXMgdGhpcyB0YWJsZSBtdXN0IGtu
b3cgYWJvdXQgc3VjaCB0aGluZ3MuICovCi0KLSNkZWZpbmUgT1BfTEVOR1RIUyBcCi0gIDEsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLyBcCi0gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAvKiBcQiwg
XGIsIFxELCBcZCwgXFMsIFxzLCBcVywgXHcgICAgICAgICAqLyBcCi0gIDEsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLyBcCi0gIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBeLCAkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDIsIDIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBDaGFyLCBDaGFybmMgLSBtaW5pbXVtIGxlbmd0aHMgICAgICAgICAqLyBcCi0g
IDIsIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyIG9yIG5vbi1jYXNl
ZCAgICAgICAgICAgICAgICAqLyBcCi0gIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIC8qIFBvc2l0
aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogVGhl
c2UgYXJlICAqLyBcCi0gIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiAqLCAqPywg
KywgKz8sID8sID8/ICAgICAgKiogbWluaW1hIGluICAqLyBcCi0gIDQsIDQsIDQsICAgICAgICAg
ICAgICAgICAgICAgICAvKiB1cHRvLCBtaW51cHRvLCBleGFjdCAgICAgKiogVVRGLTggbW9kZSAq
LyBcCi0gIC8qIE5lZ2F0aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgLSBvbmx5IGZvciBjaGFycyA8
IDI1NiAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAg
ICAgICAvKiBOT1QgKiwgKj8sICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICAqLyBcCi0gIDQs
IDQsIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1QgdXB0bywgbWludXB0bywgZXhhY3Qg
ICAgICAgICAgICAgICAqLyBcCi0gIC8qIFBvc2l0aXZlIHR5cGUgcmVwZWF0cyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDIsIDIsIDIsIDIs
IDIsIDIsICAgICAgICAgICAgICAvKiBUeXBlICosICo/LCArLCArPywgPywgPz8gICAgICAgICAg
ICAgICAqLyBcCi0gIDQsIDQsIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIHVwdG8s
IG1pbnVwdG8sIGV4YWN0ICAgICAgICAgICAgICAqLyBcCi0gIC8qIENoYXJhY3RlciBjbGFzcyAm
IHJlZiByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBc
Ci0gIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiAqLCAqPywgKywgKz8sID8sID8/
ICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDUsIDUsICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiBDUlJBTkdFLCBDUk1JTlJBTkdFICAgICAgICAgICAgICAgICAgICAqLyBcCi0gMzMsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTEFTUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLyBcCi0gMzMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOQ0xB
U1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBYQ0xBU1MgLSB2YXJpYWJsZSBsZW5ndGggICAgICAgICAgICAg
ICAqLyBcCi0gIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRUYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAgICAg
ICAgICAgICAgIC8qIEFsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwK
LSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAgLyogS2V0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19TSVpFLCAgICAgICAgICAgICAg
ICAgICAvKiBLZXRSbWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEg
KyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIEtldFJtaW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAgICAg
LyogQXNzZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElO
S19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgbm90ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIE9u
Y2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSwgMSwgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEJSQVpFUk8sIEJSQU1JTlpFUk8gICAgICAgICAgICAgICAg
ICAgICovIFwKLSAgMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJSQU5VTUJFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSAgICAgICAg
ICAgICAgICAgICAgLyogQlJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8g
XAorLyogRklYTUU6IE5vdGUgdGhhdCBPUF9CUkEgKyAxMDAgaXMgPiAxMjgsIHNvIHRoZSB0d28g
Y29tbWVudHMgYWJvdmUKK2FyZSBpbiBjb25mbGljdCEgKi8KIAorI2RlZmluZSBFWFRSQUNUX0JB
U0lDX01BWCAgMTAwCiAKIC8qIFRoZSBpbmRleCBvZiBuYW1lcyBhbmQgdGhlCiBjb2RlIHZlY3Rv
ciBydW4gb24gYXMgbG9uZyBhcyBuZWNlc3NhcnkgYWZ0ZXIgdGhlIGVuZC4gV2Ugc3RvcmUgYW4g
ZXhwbGljaXQKQEAgLTQ0MiwxNiArMzIyLDEzIEBAIHBvaW50ZXIgdGhhdCBpcyBhbHdheXMgTlVM
TC4KICovCiAKIHN0cnVjdCBKU1JlZ0V4cCB7Ci0gICAgcGNyZV91aW50MzIgb3B0aW9uczsKKyAg
ICB1bnNpZ25lZCBvcHRpb25zOwogCi0gICAgcGNyZV91aW50MTYgdG9wX2JyYWNrZXQ7Ci0gICAg
cGNyZV91aW50MTYgdG9wX2JhY2tyZWY7CisgICAgdW5zaWduZWQgc2hvcnQgdG9wX2JyYWNrZXQ7
CisgICAgdW5zaWduZWQgc2hvcnQgdG9wX2JhY2tyZWY7CiAgICAgCi0gICAgLy8ganNSZWdFeHBF
eGVjdXRlICYmIGpzUmVnRXhwQ29tcGlsZSBjdXJyZW50bHkgb25seSBob3cgdG8gaGFuZGxlIEFT
Q0lJCi0gICAgLy8gY2hhcnMgZm9yIHRoc2Ugb3B0aW1pemF0aW9ucywgaG93ZXZlciBpdCB3b3Vs
ZCBiZSB0cml2aWFsIHRvIGFkZCBzdXBwb3J0Ci0gICAgLy8gZm9yIG9wdGltaXplZCBVQ2hhciBm
aXJzdF9ieXRlL3JlcV9ieXRlIHNjYW5zCi0gICAgcGNyZV91aW50MTYgZmlyc3RfYnl0ZTsKLSAg
ICBwY3JlX3VpbnQxNiByZXFfYnl0ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCBmaXJzdF9ieXRlOwor
ICAgIHVuc2lnbmVkIHNob3J0IHJlcV9ieXRlOwogfTsKIAogLyogSW50ZXJuYWwgc2hhcmVkIGRh
dGEgdGFibGVzLiBUaGVzZSBhcmUgdGFibGVzIHRoYXQgYXJlIHVzZWQgYnkgbW9yZSB0aGFuIG9u
ZQpAQCAtNDU5LDczICszMzYsODIgQEAgc3RydWN0IEpTUmVnRXhwIHsKICBidXQgYXJlIG5vdCBw
YXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuIFRoZSBkYXRhIGZvciB0aGVzZSB0YWJsZXMgaXMg
aW4gdGhlCiAgcGNyZV90YWJsZXMuYyBtb2R1bGUuICovCiAKLSNkZWZpbmUgX3BjcmVfdXRmOF90
YWJsZTFfc2l6ZSA2CisjZGVmaW5lIGtqc19wY3JlX3V0ZjhfdGFibGUxX3NpemUgNgogCi1leHRl
cm4gY29uc3QgaW50ICAgIF9wY3JlX3V0ZjhfdGFibGUxWzZdOwotZXh0ZXJuIGNvbnN0IGludCAg
ICBfcGNyZV91dGY4X3RhYmxlMls2XTsKLWV4dGVybiBjb25zdCBpbnQgICAgX3BjcmVfdXRmOF90
YWJsZTNbNl07Ci1leHRlcm4gY29uc3QgdXNjaGFyIF9wY3JlX3V0ZjhfdGFibGU0WzB4NDBdOwor
ZXh0ZXJuIGNvbnN0IGludCAgICBranNfcGNyZV91dGY4X3RhYmxlMVs2XTsKK2V4dGVybiBjb25z
dCBpbnQgICAga2pzX3BjcmVfdXRmOF90YWJsZTJbNl07CitleHRlcm4gY29uc3QgaW50ICAgIGtq
c19wY3JlX3V0ZjhfdGFibGUzWzZdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIga2pzX3Bj
cmVfdXRmOF90YWJsZTRbMHg0MF07CiAKLWV4dGVybiBjb25zdCB1c2NoYXIgX3BjcmVfZGVmYXVs
dF90YWJsZXNbdGFibGVzX2xlbmd0aF07CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBranNf
cGNyZV9kZWZhdWx0X3RhYmxlc1t0YWJsZXNfbGVuZ3RoXTsKIAotc3RhdGljIGlubGluZSB1c2No
YXIgdG9Mb3dlckNhc2UodXNjaGFyIGMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdG9M
b3dlckNhc2UodW5zaWduZWQgY2hhciBjKQogewotICAgIHN0YXRpYyBjb25zdCB1c2NoYXIqIGxv
d2VyQ2FzZUNoYXJzID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBsY2Nfb2Zmc2V0OworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb3dlckNhc2VDaGFycyA9IGtqc19wY3JlX2RlZmF1
bHRfdGFibGVzICsgbGNjX29mZnNldDsKICAgICByZXR1cm4gbG93ZXJDYXNlQ2hhcnNbY107CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdXNjaGFyIGZsaXBDYXNlKHVzY2hhciBjKQorc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBjaGFyIGZsaXBDYXNlKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBzdGF0aWMg
Y29uc3QgdXNjaGFyKiBmbGlwcGVkQ2FzZUNoYXJzID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBm
Y2Nfb2Zmc2V0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKiBmbGlwcGVkQ2FzZUNo
YXJzID0ga2pzX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBmY2Nfb2Zmc2V0OwogICAgIHJldHVybiBm
bGlwcGVkQ2FzZUNoYXJzW2NdOwogfQogCi1zdGF0aWMgaW5saW5lIHVzY2hhciBjbGFzc0JpdG1h
cEZvckNoYXIodXNjaGFyIGMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY2xhc3NCaXRt
YXBGb3JDaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBzdGF0aWMgY29uc3QgdXNjaGFyKiBj
aGFyQ2xhc3NCaXRtYXBzID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBjYml0c19vZmZzZXQ7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNoYXJDbGFzc0JpdG1hcHMgPSBranNfcGNy
ZV9kZWZhdWx0X3RhYmxlcyArIGNiaXRzX29mZnNldDsKICAgICByZXR1cm4gY2hhckNsYXNzQml0
bWFwc1tjXTsKIH0KIAotc3RhdGljIGlubGluZSB1c2NoYXIgY2hhclR5cGVGb3JDaGFyKHVzY2hh
ciBjKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNoYXJUeXBlRm9yQ2hhcih1bnNpZ25l
ZCBjaGFyIGMpCiB7Ci0gICAgY29uc3QgdXNjaGFyKiBjaGFyVHlwZU1hcCA9IF9wY3JlX2RlZmF1
bHRfdGFibGVzICsgY3R5cGVzX29mZnNldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjaGFy
VHlwZU1hcCA9IGtqc19wY3JlX2RlZmF1bHRfdGFibGVzICsgY3R5cGVzX29mZnNldDsKICAgICBy
ZXR1cm4gY2hhclR5cGVNYXBbY107CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1dvcmRDaGFy
KFVDaGFyIGMpCiB7Ci0gICAgLyogVVRGOCBDaGFyYWN0ZXJzID4gMTI4IGFyZSBhc3N1bWVkIHRv
IGJlICJub24td29yZCIgY2hhcmFjdGVycy4gKi8KLSAgICByZXR1cm4gKGMgPCAxMjggJiYgKGNo
YXJUeXBlRm9yQ2hhcihjKSAmIGN0eXBlX3dvcmQpKTsKKyAgICByZXR1cm4gYyA8IDEyOCAmJiAo
Y2hhclR5cGVGb3JDaGFyKGMpICYgY3R5cGVfd29yZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc1NwYWNlQ2hhcihVQ2hhciBjKQogewotICAgIHJldHVybiAoYyA8IDEyOCAmJiAoY2hhclR5
cGVGb3JDaGFyKGMpICYgY3R5cGVfc3BhY2UpKTsKKyAgICByZXR1cm4gYyA8IDEyOCAmJiAoY2hh
clR5cGVGb3JDaGFyKGMpICYgY3R5cGVfc3BhY2UpOwogfQogCi0vKiBJbnRlcm5hbCBzaGFyZWQg
ZnVuY3Rpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgYnkgbW9yZSB0aGFu
Ci1vbmUgb2YgdGhlIGV4cG9ydGVkIHB1YmxpYyBmdW5jdGlvbnMuIFRoZXkgaGF2ZSB0byBiZSAi
ZXh0ZXJuYWwiIGluIHRoZSBDCi1zZW5zZSwgYnV0IGFyZSBub3QgcGFydCBvZiB0aGUgUENSRSBw
dWJsaWMgQVBJLiAqLwotCi1leHRlcm4gaW50ICAgICAgICAgX3BjcmVfdWNwX290aGVyY2FzZShj
b25zdCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGJvb2wgICAgICAgIF9wY3JlX3hjbGFzcyhpbnQs
IGNvbnN0IHVzY2hhciopOwotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNOZXdsaW5lKFVDaGFyIG5s
KQogewogICAgIHJldHVybiAobmwgPT0gMHhBIHx8IG5sID09IDB4RCB8fCBubCA9PSAweDIwMjgg
fHwgbmwgPT0gMHgyMDI5KTsKIH0KIAotLy8gRklYTUU6IEl0J3MgdW5jbGVhciB0byBtZSBpZiB0
aGlzIG1vdmVzIHRoZSBvcGNvZGUgcHRyIHRvIHRoZSBzdGFydCBvZiBhbGwgYnJhbmNoZXMKLS8v
IG9yIHRvIHRoZSBlbmQgb2YgYWxsIGJyYW5jaGVzIC0tIGVjcwotLy8gRklYTUU6IFRoaXMgYWJz
dHJhY3Rpb24gaXMgcG9vciBzaW5jZSBpdCBhc3N1bWVzIHRoYXQgeW91IHdhbnQgdG8ganVtcCBi
YXNlZCBvbiB3aGF0ZXZlcgotLy8gdGhlIG5leHQgdmFsdWUgaW4gdGhlIHN0cmVhbSBpcywgYW5k
ICp0aGVuKiBmb2xsb3cgYW55IE9QX0FMVCBicmFuY2hlcy4KLXN0YXRpYyBpbmxpbmUgdm9pZCBt
b3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKGNvbnN0IHVzY2hhciomIG9wY29k
ZVB0cikKLXsKLSAgICBkbyB7Ci0gICAgICAgIG9wY29kZVB0ciArPSBnZXRPcGNvZGVWYWx1ZUF0
T2Zmc2V0KG9wY29kZVB0ciwgMSk7Ci0gICAgfSB3aGlsZSAoKm9wY29kZVB0ciA9PSBPUF9BTFQp
Oworc3RhdGljIGlubGluZSBib29sIGlzQnJhY2tldFN0YXJ0T3Bjb2RlKHVuc2lnbmVkIGNoYXIg
b3Bjb2RlKQoreworICAgIGlmIChvcGNvZGUgPj0gT1BfQlJBKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICAg
ICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIqJiBv
cGNvZGVQdHIpCit7CisgICAgQVNTRVJUKGlzQnJhY2tldFN0YXJ0T3Bjb2RlKCpvcGNvZGVQdHIp
IHx8ICpvcGNvZGVQdHIgPT0gT1BfQUxUKTsKKyAgICBkbworICAgICAgICBvcGNvZGVQdHIgKz0g
Z2V0TGlua1ZhbHVlKG9wY29kZVB0ciArIDEpOworICAgIHdoaWxlICgqb3Bjb2RlUHRyID09IE9Q
X0FMVCk7CiB9CiAKKy8qIEludGVybmFsIHNoYXJlZCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBmdW5j
dGlvbnMgdGhhdCBhcmUgdXNlZCBpbiBtb3JlCit0aGF0IG9uZSBvZiB0aGUgc291cmNlIGZpbGVz
LiBUaGV5IGhhdmUgdG8gaGF2ZSBleHRlcm5hbCBsaW5rYWdlLCBidXQKK2J1dCBhcmUgbm90IHBh
cnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIHNvIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBsaWJyYXJ5
LiAqLworCitleHRlcm4gaW50IGtqc19wY3JlX3VjcF9vdGhlcmNhc2UodW5zaWduZWQpOworZXh0
ZXJuIGJvb2wga2pzX3BjcmVfeGNsYXNzKGludCwgY29uc3QgdW5zaWduZWQgY2hhciopOworCiAj
ZW5kaWYKIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdGFibGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdGFibGVzLmNwcAkocmV2
aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdGFibGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksMjAgKzQ5LDIwIEBAIFBDUkUgY29kZSBtb2R1bGVzLiAqLwogLyog
VGhlc2UgYXJlIHRoZSBicmVha3BvaW50cyBmb3IgZGlmZmVyZW50IG51bWJlcnMgb2YgYnl0ZXMg
aW4gYSBVVEYtOAogY2hhcmFjdGVyLiAqLwogCi1jb25zdCBpbnQgX3BjcmVfdXRmOF90YWJsZTFb
Nl0gPQorY29uc3QgaW50IGtqc19wY3JlX3V0ZjhfdGFibGUxWzZdID0KICAgeyAweDdmLCAweDdm
ZiwgMHhmZmZmLCAweDFmZmZmZiwgMHgzZmZmZmZmLCAweDdmZmZmZmZmfTsKIAogLyogVGhlc2Ug
YXJlIHRoZSBpbmRpY2F0b3IgYml0cyBhbmQgdGhlIG1hc2sgZm9yIHRoZSBkYXRhIGJpdHMgdG8g
c2V0IGluIHRoZQogZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciwgaW5kZXhlZCBieSB0aGUgbnVt
YmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMuICovCiAKLWNvbnN0IGludCBfcGNyZV91dGY4X3RhYmxl
Mls2XSA9IHsgMCwgICAgMHhjMCwgMHhlMCwgMHhmMCwgMHhmOCwgMHhmY307Ci1jb25zdCBpbnQg
X3BjcmVfdXRmOF90YWJsZTNbNl0gPSB7IDB4ZmYsIDB4MWYsIDB4MGYsIDB4MDcsIDB4MDMsIDB4
MDF9OworY29uc3QgaW50IGtqc19wY3JlX3V0ZjhfdGFibGUyWzZdID0geyAwLCAgICAweGMwLCAw
eGUwLCAweGYwLCAweGY4LCAweGZjfTsKK2NvbnN0IGludCBranNfcGNyZV91dGY4X3RhYmxlM1s2
XSA9IHsgMHhmZiwgMHgxZiwgMHgwZiwgMHgwNywgMHgwMywgMHgwMX07CiAKIC8qIFRhYmxlIG9m
IHRoZSBudW1iZXIgb2YgZXh0cmEgY2hhcmFjdGVycywgaW5kZXhlZCBieSB0aGUgZmlyc3QgY2hh
cmFjdGVyCiBtYXNrZWQgd2l0aCAweDNmLiBUaGUgaGlnaGVzdCBudW1iZXIgZm9yIGEgdmFsaWQg
VVRGLTggY2hhcmFjdGVyIGlzIGluIGZhY3QKIDB4M2QuICovCiAKLWNvbnN0IHVzY2hhciBfcGNy
ZV91dGY4X3RhYmxlNFsweDQwXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGNoYXIga2pzX3BjcmVfdXRm
OF90YWJsZTRbMHg0MF0gPSB7CiAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCiAg
IDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCiAgIDIsMiwyLDIsMiwyLDIsMiwyLDIs
MiwyLDIsMiwyLDIsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdWNwX3NlYXJjaGZ1
bmNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfdWNwX3NlYXJj
aGZ1bmNzLmNwcAkocmV2aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVf
dWNwX3NlYXJjaGZ1bmNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBBcmd1
bWVudHM6CiBSZXR1cm5zOiAgICAgIHRoZSBvdGhlciBjYXNlIG9yIC0xIGlmIG5vbmUKICovCiAK
LWludCBfcGNyZV91Y3Bfb3RoZXJjYXNlKGNvbnN0IHVuc2lnbmVkIGMpCitpbnQga2pzX3BjcmVf
dWNwX290aGVyY2FzZSh1bnNpZ25lZCBjKQogewogICAgIGludCBib3QgPSAwOwogICAgIGludCB0
b3AgPSBzaXplb2YodWNwX3RhYmxlKSAvIHNpemVvZihjbm9kZSk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9wY3JlL3BjcmVfeGNsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9w
Y3JlL3BjcmVfeGNsYXNzLmNwcAkocmV2aXNpb24gMjg3NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9w
Y3JlL3BjcmVfeGNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDEzIEBAIFJl
dHVybnM6ICAgICAgdHJ1ZSBpZiBjaGFyYWN0ZXIgbWF0Y2hlcywKIC8qIEdldCB0aGUgbmV4dCBV
VEYtOCBjaGFyYWN0ZXIsIGFkdmFuY2luZyB0aGUgcG9pbnRlci4gVGhpcyBpcyBjYWxsZWQgd2hl
biB3ZQogIGtub3cgd2UgYXJlIGluIFVURi04IG1vZGUuICovCiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBnZXRVVEY4Q2hhckFuZEFkdmFuY2VQb2ludGVyKGludCYgYywgY29uc3QgdXNjaGFyKiYgc3Vi
amVjdFB0cikKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRVVEY4Q2hhckFuZEFkdmFuY2VQb2ludGVy
KGludCYgYywgY29uc3QgdW5zaWduZWQgY2hhciomIHN1YmplY3RQdHIpCiB7CiAgICAgYyA9ICpz
dWJqZWN0UHRyKys7CiAgICAgaWYgKChjICYgMHhjMCkgPT0gMHhjMCkgewotICAgICAgICBpbnQg
Z2NhYSA9IF9wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBhZGRpdGlv
bmFsIGJ5dGVzICovCisgICAgICAgIGludCBnY2FhID0ga2pzX3BjcmVfdXRmOF90YWJsZTRbYyAm
IDB4M2ZdOyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMgKi8KICAgICAgICAgaW50IGdj
c3MgPSA2ICogZ2NhYTsKLSAgICAgICAgYyA9IChjICYgX3BjcmVfdXRmOF90YWJsZTNbZ2NhYV0p
IDw8IGdjc3M7CisgICAgICAgIGMgPSAoYyAmIGtqc19wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8
PCBnY3NzOwogICAgICAgICB3aGlsZSAoZ2NhYS0tID4gMCkgewogICAgICAgICAgICAgZ2NzcyAt
PSA2OwogICAgICAgICAgICAgYyB8PSAoKnN1YmplY3RQdHIrKyAmIDB4M2YpIDw8IGdjc3M7CkBA
IC03Myw3ICs3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRVVEY4Q2hhckFuZEFkdmFuY2UK
ICAgICB9CiB9CiAKLWJvb2wgX3BjcmVfeGNsYXNzKGludCBjLCBjb25zdCB1c2NoYXIqIGRhdGEp
Citib29sIGtqc19wY3JlX3hjbGFzcyhpbnQgYywgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSkK
IHsKICAgICBib29sIG5lZ2F0ZWQgPSAoKmRhdGEgJiBYQ0xfTk9UKTsKICAgICAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3BjcmUvdWNwaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9wY3JlL3VjcGludGVybmFsLmgJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENv
cmUvcGNyZS91Y3BpbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogd29yZHMgdGhhdCBmb3JtIGEgZGF0YSBpdGVtIGlu
IHRoZSB0YWJsZS4gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgY25vZGUgewotICBwY3JlX3VpbnQzMiBm
MDsKLSAgcGNyZV91aW50MzIgZjE7CisgIHVuc2lnbmVkIGYwOworICB1bnNpZ25lZCBmMTsKIH0g
Y25vZGU7CiAKIC8qIFRoaW5ncyBmb3IgdGhlIGYwIGZpZWxkICovCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvQVNDSUlDVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9B
U0NJSUNUeXBlLmgJKHJldmlzaW9uIDI4NzY2KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJ
Q1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXVEYg
ewogI2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVE
KQogICAgIGlubGluZSBib29sIGlzQVNDSUlBbHBoYSh3Y2hhcl90IGMpIHsgcmV0dXJuIChjIHwg
MHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUg
Ym9vbCBpc0FTQ0lJQWxwaGEoaW50IGMpIHsgcmV0dXJuIChjIHwgMHgyMCkgPj0gJ2EnICYmIChj
IHwgMHgyMCkgPD0gJ3onOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmlj
KGNoYXIgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAweDIwKSA+PSAn
YScgJiYgKGMgfCAweDIwKSA8PSAneic7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFu
dW1lcmljKHVuc2lnbmVkIHNob3J0IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8
IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAjaWYgIUNPTVBJTEVS
KE1TVkMpIHx8IGRlZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIGJv
b2wgaXNBU0NJSUFscGhhbnVtZXJpYyh3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMg
PD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAjZW5k
aWYKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmljKGludCBjKSB7IHJldHVybiBj
ID49ICcwJyAmJiBjIDw9ICc5JyB8fCAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9
ICd6JzsgfQogCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSURpZ2l0KGNoYXIgYykgeyByZXR1cm4g
KGMgPj0gJzAnKSAmIChjIDw9ICc5Jyk7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQo
dW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gKGMgPj0gJzAnKSAmIChjIDw9ICc5Jyk7IH0KQEAg
LTY3LDMwICs2OSwzNSBAQCBuYW1lc3BhY2UgV1RGIHsKICNpZiAhQ09NUElMRVIoTVNWQykgfHwg
ZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJ
SGV4RGlnaXQod2NoYXJfdCBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCAoYyB8
IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICdmJzsgfQogI2VuZGlmCisgICAgaW5saW5l
IGJvb2wgaXNBU0NJSUhleERpZ2l0KGludCBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5
JyB8fCAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICdmJzsgfQogCiAgICAgaW5s
aW5lIGJvb2wgaXNBU0NJSUxvd2VyKGNoYXIgYykgeyByZXR1cm4gYyA+PSAnYScgJiYgYyA8PSAn
eic7IH0KICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJTG93ZXIodW5zaWduZWQgc2hvcnQgYykgeyBy
ZXR1cm4gYyA+PSAnYScgJiYgYyA8PSAneic7IH0KICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVm
aW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJTG93
ZXIod2NoYXJfdCBjKSB7IHJldHVybiBjID49ICdhJyAmJiBjIDw9ICd6JzsgfQogI2VuZGlmCisg
ICAgaW5saW5lIGJvb2wgaXNBU0NJSUxvd2VyKGludCBjKSB7IHJldHVybiBjID49ICdhJyAmJiBj
IDw9ICd6JzsgfQogCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSVNwYWNlKGNoYXIgYykgeyByZXR1
cm4gYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicgfHwgYyA9
PSAnXHInIHx8IGMgPT0gJyAnOyB9CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSVNwYWNlKHVuc2ln
bmVkIHNob3J0IGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHYn
IHx8IGMgPT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQogI2lmICFDT01QSUxFUihN
U1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQogICAgIGlubGluZSBib29s
IGlzQVNDSUlTcGFjZSh3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdcbicg
fHwgYyA9PSAnXHYnIHx8IGMgPT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQogI2Vu
ZGlmCisgICAgaW5saW5lIGJvb2wgaXNBU0NJSVNwYWNlKGludCBjKSB7IHJldHVybiBjID09ICdc
dCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x2JyB8fCBjID09J1xmJyB8fCBjID09ICdccicgfHwg
YyA9PSAnICc7IH0KIAogICAgIGlubGluZSBjaGFyIHRvQVNDSUlMb3dlcihjaGFyIGMpIHsgcmV0
dXJuIGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsgfQogICAgIGlubGluZSB1bnNp
Z25lZCBzaG9ydCB0b0FTQ0lJTG93ZXIodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gYyB8ICgo
YyA+PSAnQScgJiYgYyA8PSAnWicpIDw8IDUpOyB9CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRl
ZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIHdjaGFyX3QgdG9BU0NJ
SUxvd2VyKHdjaGFyX3QgYykgeyByZXR1cm4gYyB8ICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIDw8
IDUpOyB9CiAjZW5kaWYKKyAgICBpbmxpbmUgaW50IHRvQVNDSUlMb3dlcihpbnQgYykgeyByZXR1
cm4gYyB8ICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIDw8IDUpOyB9CiAKICAgICBpbmxpbmUgY2hh
ciB0b0FTQ0lJVXBwZXIoY2hhciBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPihjICYgfigo
YyA+PSAnYScgJiYgYyA8PSAneicpIDw8IDUpKTsgfQogICAgIGlubGluZSB1bnNpZ25lZCBzaG9y
dCB0b0FTQ0lJVXBwZXIodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSkpOyB9CiAjaWYg
IUNPTVBJTEVSKE1TVkMpIHx8IGRlZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAg
aW5saW5lIHdjaGFyX3QgdG9BU0NJSVVwcGVyKHdjaGFyX3QgYykgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8d2NoYXJfdD4oYyAmIH4oKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSA8PCA1KSk7IH0KICNlbmRp
ZgorICAgIGlubGluZSBpbnQgdG9BU0NJSVVwcGVyKGludCBjKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSkpOyB9CiAKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17947</attachid>
            <date>2007-12-16 17:36:06 -0800</date>
            <delta_ts>2007-12-16 18:04:38 -0800</delta_ts>
            <desc>patch rebased to r28788</desc>
            <filename>PCREPatch.txt</filename>
            <type>text/plain</type>
            <size>172305</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsMTAxIEBACiAyMDA3LTEyLTE2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDM4CisgICAgICAgIC0gcmVtb3ZlZCBzb21lIG1vcmUgdW51c2VkIGNvZGUKKyAgICAgICAg
LSBjaGFuZ2VkIHF1aXRlIGEgZmV3IG1vcmUgbmFtZXMgdG8gV2ViS2l0LXN0eWxlCisgICAgICAg
IC0gbW92ZWQgbW9yZSB0aGluZ3Mgb3V0IG9mIHBjcmVfaW50ZXJuYWwuaAorICAgICAgICAtIGNo
YW5nZWQgc29tZSBpbmRlbnRhdGlvbiB0byBXZWJLaXQtc3R5bGUKKyAgICAgICAgLSBpbXByb3Zl
ZCBkZXNpZ24gb2YgdGhlIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworICAgICAg
ICAgIDItYnl0ZSB2YWx1ZXMgZnJvbSB0aGUgb3Bjb2RlIHN0cmVhbSAoaW4gcGNyZV9pbnRlcm5h
bC5oKQorCisgICAgICAgICogcGNyZS9kZnRhYmxlcy5jcHA6CisgICAgICAgIChtYWluKTogQWRk
ZWQgdGhlIGtqcyBwcmVmaXggYSBub3JtYWwgd2F5IGluIGxpZXUgb2YgdXNpbmcgbWFjcm9zLgor
CisgICAgICAgICogcGNyZS9wY3JlX2NvbXBpbGUuY3BwOiBNb3ZlZCBzb21lIGRlZmluaXRpb25z
IGhlcmUgZnJvbSBwY3JlX2ludGVybmFsLmguCisgICAgICAgIChlcnJvclRleHQpOiBOYW1lIGNo
YW5nZXMsIGZld2VyIHR5cGVkZWZzLgorICAgICAgICAoY2hlY2tFc2NhcGUpOiBEaXR0by4gQ2hh
bmdlZCB1cHBlcmNhc2UgY29udmVyc2lvbiB0byB1c2UgdG9BU0NJSVVwcGVyLgorICAgICAgICAo
aXNDb3VudGVkUmVwZWF0KTogTmFtZSBjaGFuZ2UuCisgICAgICAgIChyZWFkUmVwZWF0Q291bnRz
KTogTmFtZSBjaGFuZ2UuCisgICAgICAgIChmaXJzdFNpZ25pZmljYW50T3Bjb2RlKTogR290IHJp
ZCBvZiB0aGUgdXNlIG9mIE9QX2xlbmd0aHMsIHdoaWNoIGlzCisgICAgICAgIHZlcnkgbGlnaHRs
eSB1c2VkIGhlcmUuIEhhcmQtY29kZWQgdGhlIGxlbmd0aCBvZiBPUF9CUkFOVU1CRVIuCisgICAg
ICAgIChmaXJzdFNpZ25pZmljYW50T3Bjb2RlU2tpcHBpbmdBc3NlcnRpb25zKTogRGl0dG8uIEFs
c28gY2hhbmdlZCB0bworICAgICAgICB1c2UgdGhlIGFkdmFuY2VUb0VuZE9mQnJhY2tldCBmdW5j
dGlvbi4KKyAgICAgICAgKGdldE90aGVyY2FzZVJhbmdlKTogTmFtZSBjaGFuZ2VzLgorICAgICAg
ICAoZW5jb2RlVVRGOCk6IERpdHRvLgorICAgICAgICAoY29tcGlsZUJyYW5jaCk6IE5hbWUgY2hh
bmdlcy4gUmVtb3ZlZCB1bnVzZWQgYWZ0ZXJfbWFudWFsX2NhbGxvdXQgYW5kCisgICAgICAgIHRo
ZSBjb2RlIHRvIGhhbmRsZSBpdC4gUmVtb3ZlZCBjb2RlIHRvIGhhbmRsZSBPUF9PTkNFIHNpbmNl
IHdlIG5ldmVyCisgICAgICAgIGVtaXQgdGhpcyBvcGNvZGUuIENoYW5nZWQgdG8gdXNlIGFkdmFu
Y2VUb0VuZE9mQnJhY2tldCBpbiBtb3JlIHBsYWNlcy4KKyAgICAgICAgKGNvbXBpbGVCcmFja2V0
KTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAoYnJhbmNoSXNBbmNob3JlZCk6IFJlbW92ZWQgY29k
ZSB0byBoYW5kbGUgT1BfT05DRSBzaW5jZSB3ZSBuZXZlciBlbWl0CisgICAgICAgIHRoaXMgb3Bj
b2RlLgorICAgICAgICAoYnJhY2tldElzQW5jaG9yZWQpOiBOYW1lIGNoYW5nZXMuCisgICAgICAg
IChicmFuY2hOZWVkc0xpbmVTdGFydCk6IE1vcmUgZm8gdGhlIHNhbWUuCisgICAgICAgIChicmFj
a2V0TmVlZHNMaW5lU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKGJyYW5jaEZpbmRGaXJzdEFzc2Vy
dGVkQ2hhcmFjdGVyKTogUmVtb3ZlZCBPUF9PTkNFIGNvZGUuCisgICAgICAgIChicmFja2V0Rmlu
ZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIpOiBNb3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAoY2Fs
Y3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3RoQW5kRmxhZ3MpOiBEaXR0by4KKyAgICAgICAgKHJl
dHVybkVycm9yKTogTmFtZSBjaGFuZ2VzLgorICAgICAgICAoanNSZWdFeHBDb21waWxlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6IE1vdmVkIHNvbWUgZGVmaW5pdGlv
bnMgaGVyZSBmcm9tIHBjcmVfaW50ZXJuYWwuaC4KKyAgICAgICAgKG1hdGNoUmVmKTogVXBkYXRl
ZCBuYW1lcy4KKyAgICAgICAgSW1wcm92ZWQgbWFjcm9zIHRvIHVzZSB0aGUgZG8geyB9IHdoaWxl
KDApIGlkaW9tIHNvIHRoZXkgZXhwYW5kIHRvIHNpbmdsZQorICAgICAgICBzdGF0ZW1lbnRzIHJh
dGhlciB0aGFuIHRvIGJsb2NrcyBvciBtdWx0aXBsZSBzdGF0ZW1lbnRzLiBBbmQgcmVmZWFjdG9y
ZWQKKyAgICAgICAgdGhlIHJlY3Vyc2l2ZSBtYXRjaCBtYWNyb3MuCisgICAgICAgIChNYXRjaFN0
YWNrOjpwdXNoTmV3RnJhbWUpOiBOYW1lIGNoYW5nZXMuCisgICAgICAgIChnZXRVVEY4Q2hhckFu
ZEluY3JlbWVudExlbmd0aCk6IE5hbWUgY2hhbmdlcy4KKyAgICAgICAgKG1hdGNoKTogTmFtZSBj
aGFuZ2VzLiBSZW1vdmVkIHRoZSBPTkNFIG9wY29kZS4KKyAgICAgICAgKGpzUmVnRXhwRXhlY3V0
ZSk6IE5hbWUgY2hhbmdlcy4KKworICAgICAgICAqIHBjcmUvcGNyZV9pbnRlcm5hbC5oOiBSZW1v
dmVkIHF1aXRlIGEgZmV3IHVubmVlZGVkIGluY2x1ZGVzLiBSZXdyb3RlCisgICAgICAgIHF1aXRl
IGEgZmV3IGNvbW1lbnRzLiBSZW1vdmVkIHRoZSBtYWNyb3MgdGhhdCBhZGQga2pzIHByZWZpeGVz
IHRvIHRoZQorICAgICAgICBmdW5jdGlvbnMgd2l0aCBleHRlcm5hbCBsaW5rYWdlOyBpbnN0ZWFk
IHJlbmFtZWQgdGhlIGZ1bmN0aW9ucy4gUmVtb3ZlZAorICAgICAgICB0aGUgdW5uZWVkZWQgdHlw
ZWRlZnMgcGNyZV91aW50MTYsIHBjcmVfdWludDMyLCBhbmQgdXNjaGFyLiBSZW1vdmVkIHRoZQor
ICAgICAgICBkZWFkIGFuZCBub3QtYWxsLXdvcmtpbmcgY29kZSBmb3IgTElOS19TSVpFIHZhbHVl
cyBvdGhlciB0aGFuIDIsIGFsdGhvdWdoCisgICAgICAgIHdlIGFpbSB0byBrZWVwIHRoZSBhYnN0
cmFjdGlvbiB3b3JraW5nLiBSZW1vdmVkIHRoZSBPUF9MRU5HVEhTIG1hY3JvLgorICAgICAgICAo
cHV0MkJ5dGVWYWx1ZSk6IFJlcGxhY2VzIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldC4KKyAg
ICAgICAgKGdldDJCeXRlVmFsdWUpOiBSZXBsYWNlcyBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXQuCisgICAgICAgIChwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZSk6IFJlcGxhY2VzIHB1dDJCeXRl
T3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UuCisgICAgICAgIChwdXRMaW5rVmFsdWVBbGxv
d1plcm8pOiBSZXBsYWNlcyBwdXRPcGNvZGVWYWx1ZUF0T2Zmc2V0OyBkb2Vzbid0IGRvIHRoZQor
ICAgICAgICBhZGRpdGlvbiwgc2luY2UgYSBjb21tYSBpcyByZWFsbHkgbm8gYmV0dGVyIHRoYW4g
YSBwbHVzIHNpZ24uIEFkZGVkIGFuCisgICAgICAgIGFzc2VydGlvbiB0byBjYXRjaCBvdXQgb2Yg
cmFuZ2UgdmFsdWVzIGFuZCBjaGFuZ2VkIHRoZSBwYXJhbWV0ZXIgdHlwZSB0bworICAgICAgICBp
bnQgcmF0aGVyIHRoYW4gdW5zaWduZWQuCisgICAgICAgIChnZXRMaW5rVmFsdWVBbGxvd1plcm8p
OiBSZXBsYWNlcyBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0LgorICAgICAgICAocHV0TGlua1ZhbHVl
KTogTmV3IGZ1bmN0aW9uIHRoYXQgbW9zdCBmb3JtZXIgY2FsbGVycyBvZiB0aGUKKyAgICAgICAg
cHV0T3Bjb2RlVmFsdWVBdE9mZnNldCBmdW5jdGlvbiBjYW4gdXNlOyBhc3NlcnRzIHRoZSB2YWx1
ZSB0aGF0IGlzCisgICAgICAgIGJlaW5nIHN0b3JlZCBpcyBub24temVybyBhbmQgdGhlbiBjYWxs
cyBwdXRMaW5rVmFsdWVBbGxvd1plcm8uCisgICAgICAgIChnZXRMaW5rVmFsdWUpOiBEaXR0by4K
KyAgICAgICAgKHB1dExpbmtWYWx1ZUFuZEFkdmFuY2UpOiBSZXBsYWNlcyBwdXRPcGNvZGVWYWx1
ZUF0T2Zmc2V0QW5kQWR2YW5jZS4gTm8KKyAgICAgICAgY2FsbGVyIHdhcyB1c2luZyBhbiBvZmZz
ZXQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBhZHZhbmNpbmcgYmVoYXZpb3IuCisgICAg
ICAgIChwdXRMaW5rVmFsdWVBbGxvd1plcm9BbmRBZHZhbmNlKTogRGl0dG8uCisgICAgICAgIChp
c0JyYWNrZXRPcGNvZGUpOiBBZGRlZC4gRm9yIHVzZSBpbiBhbiBhc3NlcnRpb24uCisgICAgICAg
IChhZHZhbmNlVG9FbmRPZkJyYWNrZXQpOiBSZW5hbWVkIGZyb20gbW92ZU9wY29kZVB0clBhc3RB
bnlBbHRlcm5hdGVCcmFuY2hlcywKKyAgICAgICAgYW5kIHJlbW92ZWQgY29tbWVudHMgYWJvdXQg
aG93IGl0J3Mgbm90IHdlbGwgZGVzaWduZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMKKyAgICAgICAg
YSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBicmFja2V0IGFuZCBhZHZhbmNlcyB0byB0
aGUgZW5kIG9mIHRoZQorICAgICAgICBicmFja2V0LgorCisgICAgICAgICogcGNyZS9wY3JlX3Rh
Ymxlcy5jcHA6IFVwZGF0ZWQgbmFtZXMuCisgICAgICAgICogcGNyZS9wY3JlX3VjcF9zZWFyY2hm
dW5jcy5jcHA6CisgICAgICAgIChranNfcGNyZV91Y3Bfb3RoZXJjYXNlKTogRGl0dG8uCisgICAg
ICAgICogcGNyZS9wY3JlX3hjbGFzcy5jcHA6CisgICAgICAgIChnZXRVVEY4Q2hhckFuZEFkdmFu
Y2VQb2ludGVyKTogRGl0dG8uCisgICAgICAgIChranNfcGNyZV94Y2xhc3MpOiBEaXR0by4KKyAg
ICAgICAgKiBwY3JlL3VjcGludGVybmFsLmg6IERpdHRvLgorCisgICAgICAgICogd3RmL0FTQ0lJ
Q1R5cGUuaDoKKyAgICAgICAgKFdURjo6aXNBU0NJSUFscGhhKTogQWRkZWQgYW4gaW50IG92ZXJs
b2FkLCBsaWtlIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZlIGZvcgorICAgICAgICBpc0FTQ0lJRGln
aXQuCisgICAgICAgIChXVEY6OmlzQVNDSUlBbHBoYW51bWVyaWMpOiBEaXR0by4KKyAgICAgICAg
KFdURjo6aXNBU0NJSUhleERpZ2l0KTogRGl0dG8uCisgICAgICAgIChXVEY6OmlzQVNDSUlMb3dl
cik6IERpdHRvLgorICAgICAgICAoV1RGOjppc0FTQ0lJU3BhY2UpOiBEaXR0by4KKyAgICAgICAg
KFdURjo6dG9BU0NJSUxvd2VyKTogRGl0dG8uCisgICAgICAgIChXVEY6OnRvQVNDSUlVcHBlcik6
IERpdHRvLgorCisyMDA3LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwog
ICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWouCiAKICAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTkKQEAgLTExNzAsNyArMTI2Niw5IEBACiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgogCi0gICAgICAgIENlbnRyYWxpemUgY29kZSBm
b3Igc3ViamVjdFB0ciBhZGp1c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sg
Zm9yIGEgc2luZ2xlIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25l
KSwgcG9zc2libHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhciBjbGFzc2VzIGFuZCBnYXJi
bGVkIFVURjE2IHN0cmluZ3MuCisgICAgICAgIENlbnRyYWxpemUgY29kZSBmb3Igc3ViamVjdFB0
ciBhZGp1c3RtZW50cyB1c2luZyBpbmxpbmVzLCBvbmx5IGV2ZXIgY2hlY2sgZm9yIGEgc2luZ2xl
CisgICAgICAgIHRyYWlsaW5nIHN1cnJvZ2F0ZSAoYXMgVVRGMTYgb25seSBhbGxvd3Mgb25lKSwg
cG9zc2libHkgZml4IFBDUkUgYnVncyBpbnZvbHZpbmcgY2hhcgorICAgICAgICBjbGFzc2VzIGFu
ZCBnYXJibGVkIFVURjE2IHN0cmluZ3MuCiAKICAgICAgICAgKiBwY3JlL3BjcmVfZXhlYy5jcHA6
CiAgICAgICAgIChtYXRjaCk6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkocmV2aXNp
b24gMjg3ODgpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBmcHJpbnRmKGYsCiAgICJUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGRlZmF1bHQgdGFibGVzIGZvciBjaGFyYWN0ZXJzIHdpdGggY29kZXMgbGVzcyB0aGFuXG4i
CiAgICIxMjggKEFTQ0lJIGNoYXJhY3RlcnMpLiBUaGVzZSB0YWJsZXMgYXJlIHVzZWQgd2hlbiBu
byBleHRlcm5hbCB0YWJsZXMgYXJlXG4iCiAgICJwYXNzZWQgdG8gUENSRS4gKi9cblxuIgotICAi
Y29uc3QgdW5zaWduZWQgY2hhciBfcGNyZV9kZWZhdWx0X3RhYmxlc1slZF0gPSB7XG5cbiIKKyAg
ImNvbnN0IHVuc2lnbmVkIGNoYXIga2pzX3BjcmVfZGVmYXVsdF90YWJsZXNbJWRdID0ge1xuXG4i
CiAgICIvKiBUaGlzIHRhYmxlIGlzIGEgbG93ZXIgY2FzaW5nIHRhYmxlLiAqL1xuXG4iLCB0YWJs
ZXNfbGVuZ3RoKTsKIAogaWYgKGxjY19vZmZzZXQgIT0gMCkKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BjcmUvcGNyZV9jb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3Jl
L3BjcmVfY29tcGlsZS5jcHAJKHJldmlzaW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvcGNy
ZS9wY3JlX2NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxMSBAQCBzdXBw
b3J0aW5nIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBuCiAKIHVzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKKy8qIE5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIGZpcnN0Y2hhciBhbmQgcmVxY2hhciB2
YXJpYWJsZXMgKi8KKworI2RlZmluZSBSRVFfVU5TRVQgKC0yKQorI2RlZmluZSBSRVFfTk9ORSAg
KC0xKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgogKiAgICAgIENvZGUgcGFyYW1ldGVycyBhbmQgc3RhdGljIHRhYmxlcyAgICAgICAgICoKICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04OCwx
NyArOTMsMTIgQEAgZW51bSBFcnJvckNvZGUgewogICAgIEVSUjEwLCBFUlIxMSwgRVJSMTIsIEVS
UjEzLCBFUlIxNCwgRVJSMTUsIEVSUjE2LCBFUlIxNwogfTsKIAotLyogVGFibGUgb2Ygc2l6ZXMg
Zm9yIHRoZSBmaXhlZC1sZW5ndGggb3Bjb2Rlcy4gSXQncyBkZWZpbmVkIGluIGEgbWFjcm8gc28g
dGhhdAotdGhlIGRlZmluaXRpb24gaXMgbmV4dCB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3Bj
b2RlcyBpbiBwY3JlX2ludGVybmFsLmguICovCi0KLXN0YXRpYyBjb25zdCB1c2NoYXIgT1BfbGVu
Z3Roc1tdID0geyBPUF9MRU5HVEhTIH07Ci0KIC8qIFRoZSB0ZXh0cyBvZiBjb21waWxlLXRpbWUg
ZXJyb3IgbWVzc2FnZXMuIFRoZXNlIGFyZSAiY2hhciAqIiBiZWNhdXNlIHRoZXkKIGFyZSBwYXNz
ZWQgdG8gdGhlIG91dHNpZGUgd29ybGQuICovCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvcl90
ZXh0KEVycm9yQ29kZSBjb2RlKQorc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yVGV4dChFcnJvckNv
ZGUgY29kZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBlcnJvcl90ZXh0c1tdID0KKyAgICBz
dGF0aWMgY29uc3QgY2hhciBlcnJvclRleHRzW10gPQogICAgICAgLyogMSAqLwogICAgICAgIlxc
IGF0IGVuZCBvZiBwYXR0ZXJuXDAiCiAgICAgICAiXFxjIGF0IGVuZCBvZiBwYXR0ZXJuXDAiCkBA
IC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yX3RleHQoRXJyb3JDb2Rl
IAogICAgIDsKIAogICAgIGludCBpID0gY29kZTsKLSAgICBjb25zdCBjaGFyKiB0ZXh0ID0gZXJy
b3JfdGV4dHM7CisgICAgY29uc3QgY2hhciogdGV4dCA9IGVycm9yVGV4dHM7CiAgICAgd2hpbGUg
KGkgPiAxKQogICAgICAgICBpIC09ICEqdGV4dCsrOwogICAgIHJldHVybiB0ZXh0OwpAQCAtMTQx
LDcgKzE0MSw3IEBAIHN0cnVjdCBDb21waWxlRGF0YSB7CiAgICAgICAgIHJlcV92YXJ5b3B0ID0g
MDsKICAgICAgICAgbmVlZE91dGVyQnJhY2tldCA9IGZhbHNlOwogICAgIH0KLSAgICBjb25zdCB1
c2NoYXIqIHN0YXJ0X2NvZGU7ICAgLyogVGhlIHN0YXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlICov
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3RhcnRfY29kZTsgICAvKiBUaGUgc3RhcnQgb2Yg
dGhlIGNvbXBpbGVkIGNvZGUgKi8KICAgICBjb25zdCBVQ2hhciogc3RhcnRfcGF0dGVybjsgLyog
VGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuICovCiAgICAgaW50IHRvcF9iYWNrcmVmOyAgICAgICAg
ICAgIC8qIE1heGltdW0gYmFjayByZWZlcmVuY2UgKi8KICAgICB1bnNpZ25lZCBiYWNrcmVmTWFw
OyAgICAgICAvKiBCaXRtYXAgb2YgbG93IGJhY2sgcmVmcyAqLwpAQCAtMTUxLDEwICsxNTEsMTAg
QEAgc3RydWN0IENvbXBpbGVEYXRhIHsKIAogLyogRGVmaW5pdGlvbnMgdG8gYWxsb3cgbXV0dWFs
IHJlY3Vyc2lvbiAqLwogCi1zdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChpbnQsIGludCosIHVz
Y2hhcioqLCBjb25zdCBVQ2hhcioqLCBjb25zdCBVQ2hhciosIEVycm9yQ29kZSosIGludCwgaW50
KiwgaW50KiwgQ29tcGlsZURhdGEmKTsKLXN0YXRpYyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNv
bnN0IHVzY2hhciogY29kZSk7Ci1zdGF0aWMgYm9vbCBicmFja2V0TmVlZHNMaW5lU3RhcnQoY29u
c3QgdXNjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFw
KTsKLXN0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVz
Y2hhciogY29kZSwgYm9vbCBpbmFzc2VydCk7CitzdGF0aWMgYm9vbCBjb21waWxlQnJhY2tldChp
bnQsIGludCosIHVuc2lnbmVkIGNoYXIqKiwgY29uc3QgVUNoYXIqKiwgY29uc3QgVUNoYXIqLCBF
cnJvckNvZGUqLCBpbnQsIGludCosIGludCosIENvbXBpbGVEYXRhJik7CitzdGF0aWMgYm9vbCBi
cmFja2V0SXNBbmNob3JlZChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlKTsKK3N0YXRpYyBib29s
IGJyYWNrZXROZWVkc0xpbmVTdGFydChjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25l
ZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNrcmVmTWFwKTsKK3N0YXRpYyBpbnQgYnJhY2tldEZp
bmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wg
aW5hc3NlcnQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgogKiAgICAgICAgICAgIEhhbmRsZSBlc2NhcGVzICAgICAgICAgICAgICAgICAgICAg
ICoKQEAgLTE3OCw3ICsxNzgsNyBAQCBSZXR1cm5zOiAgICAgICAgIHplcm8gb3IgcG9zaXRpdmUg
PT4gYSBkCiAgICAgICAgICAgICAgICAgIG9uIGVycm9yLCBlcnJvcnB0ciBpcyBzZXQKICovCiAK
LXN0YXRpYyBpbnQgY2hlY2tfZXNjYXBlKGNvbnN0IFVDaGFyKiogcHRycHRyLCBjb25zdCBVQ2hh
ciogcGF0dGVybkVuZCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIsIGludCBicmFjb3VudCwgYm9v
bCBpc2NsYXNzKQorc3RhdGljIGludCBjaGVja0VzY2FwZShjb25zdCBVQ2hhcioqIHB0cnB0ciwg
Y29uc3QgVUNoYXIqIHBhdHRlcm5FbmQsIEVycm9yQ29kZSogZXJyb3Jjb2RlcHRyLCBpbnQgYnJh
Y291bnQsIGJvb2wgaXNjbGFzcykKIHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gKnB0cnB0ciAr
IDE7CiAKQEAgLTIwOCwxMTQgKzIwOCwxMTAgQEAgc3RhdGljIGludCBjaGVja19lc2NhcGUoY29u
c3QgVUNoYXIqKiBwdAogICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoYykgewot
ICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgY2FzZSAnMic6Ci0gICAgICAgIGNhc2UgJzMnOgot
ICAgICAgICBjYXNlICc0JzoKLSAgICAgICAgY2FzZSAnNSc6Ci0gICAgICAgIGNhc2UgJzYnOgot
ICAgICAgICBjYXNlICc3JzoKLSAgICAgICAgY2FzZSAnOCc6Ci0gICAgICAgIGNhc2UgJzknOgot
ICAgICAgICAgICAgLyogRXNjYXBlIHNlcXVlbmNlcyBzdGFydGluZyB3aXRoIGEgbm9uLXplcm8g
ZGlnaXQgYXJlIGJhY2tyZWZlcmVuY2VzLAotICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBhcmUg
aW5zdWZmaWNpZW50IGJyYWNrZXRzLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIG9jdGFsCi0gICAg
ICAgICAgICAgZXNjYXBlIHNlcXVlbmNlcy4gVGhvc2Ugc2VxdWVuY2VzIGVuZCBvbiB0aGUgZmly
c3Qgbm9uLW9jdGFsIGNoYXJhY3RlcgotICAgICAgICAgICAgIG9yIHdoZW4gd2Ugb3ZlcmZsb3cg
MC0yNTUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gKi8KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFpc2NsYXNzKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIG9sZHB0ciA9
IHB0cjsKLSAgICAgICAgICAgICAgICBjIC09ICcwJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
KHB0ciArIDEgPCBwYXR0ZXJuRW5kKSAmJiBpc0FTQ0lJRGlnaXQocHRyWzFdKSAmJiBjIDw9IGJy
YWNvdW50KQotICAgICAgICAgICAgICAgICAgICBjID0gYyAqIDEwICsgKigrK3B0cikgLSAnMCc7
Ci0gICAgICAgICAgICAgICAgaWYgKGMgPD0gYnJhY291bnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYyA9IC0oRVNDX1JFRiArIGMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgJzEnOgorICAgICAgICAgICAgY2FzZSAnMic6CisgICAgICAgICAgICBjYXNl
ICczJzoKKyAgICAgICAgICAgIGNhc2UgJzQnOgorICAgICAgICAgICAgY2FzZSAnNSc6CisgICAg
ICAgICAgICBjYXNlICc2JzoKKyAgICAgICAgICAgIGNhc2UgJzcnOgorICAgICAgICAgICAgY2Fz
ZSAnOCc6CisgICAgICAgICAgICBjYXNlICc5JzoKKyAgICAgICAgICAgICAgICAvKiBFc2NhcGUg
c2VxdWVuY2VzIHN0YXJ0aW5nIHdpdGggYSBub24temVybyBkaWdpdCBhcmUgYmFja3JlZmVyZW5j
ZXMsCisgICAgICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IGJyYWNr
ZXRzLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIG9jdGFsCisgICAgICAgICAgICAgICAgIGVzY2Fw
ZSBzZXF1ZW5jZXMuIFRob3NlIHNlcXVlbmNlcyBlbmQgb24gdGhlIGZpcnN0IG5vbi1vY3RhbCBj
aGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgb3Igd2hlbiB3ZSBvdmVyZmxvdyAwLTI1NSwgd2hp
Y2hldmVyIGNvbWVzIGZpcnN0LiAqLworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICghaXNjbGFzcykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogb2xkcHRy
ID0gcHRyOworICAgICAgICAgICAgICAgICAgICBjIC09ICcwJzsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKChwdHIgKyAxIDwgcGF0dGVybkVuZCkgJiYgaXNBU0NJSURpZ2l0KHB0clsxXSkg
JiYgYyA8PSBicmFjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjICogMTAgKyAq
KCsrcHRyKSAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0gYnJhY291bnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAtKEVTQ19SRUYgKyBjKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHB0ciA9IG9sZHB0cjsgICAgICAvKiBQdXQgdGhlIHBvaW50ZXIgYmFjayBhbmQgZmFs
bCB0aHJvdWdoICovCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB0ciA9IG9s
ZHB0cjsgICAgICAvKiBQdXQgdGhlIHBvaW50ZXIgYmFjayBhbmQgZmFsbCB0aHJvdWdoICovCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIEhhbmRsZSBhbiBvY3Rh
bCBudW1iZXIgZm9sbG93aW5nIFwuIElmIHRoZSBmaXJzdCBkaWdpdCBpcyA4IG9yIDksCi0gICAg
ICAgICAgICAgdGhpcyBpcyBub3Qgb2N0YWwuICovCi0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICgoYyA9ICpwdHIpID49ICc4JykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBhbiBvY3Rh
bCBudW1iZXIgZm9sbG93aW5nIFwuIElmIHRoZSBmaXJzdCBkaWdpdCBpcyA4IG9yIDksCisgICAg
ICAgICAgICAgICAgIHRoaXMgaXMgbm90IG9jdGFsLiAqLworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmICgoYyA9ICpwdHIpID49ICc4JykKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICAgIC8qIFwwIGFsd2F5cyBzdGFydHMgYW4gb2N0YWwgbnVtYmVy
LCBidXQgd2UgbWF5IGRyb3AgdGhyb3VnaCB0byBoZXJlIHdpdGggYQogICAgICAgICAgICAgIGxh
cmdlciBmaXJzdCBvY3RhbCBkaWdpdC4gKi8KLSAgICAgICAgCi0gICAgICAgIGNhc2UgJzAnOiB7
Ci0gICAgICAgICAgICBjIC09ICcwJzsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAg
Zm9yIChpID0gMTsgaSA8PSAyOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocHRyICsgaSA+
PSBwYXR0ZXJuRW5kIHx8IHB0cltpXSA8ICcwJyB8fCBwdHJbaV0gPiAnNycpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGludCBjYyA9IGMgKiA4ICsgcHRyW2ld
IC0gJzAnOwotICAgICAgICAgICAgICAgIGlmIChjYyA+IDI1NSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYyA9IGNjOworCisgICAgICAgICAgICBjYXNlICcw
JzogeworICAgICAgICAgICAgICAgIGMgLT0gJzAnOworICAgICAgICAgICAgICAgIGludCBpOwor
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMjsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwdHIgKyBpID49IHBhdHRlcm5FbmQgfHwgcHRyW2ldIDwgJzAnIHx8IHB0cltp
XSA+ICc3JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBpbnQgY2MgPSBjICogOCArIHB0cltpXSAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNjID4gMjU1KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGMgPSBjYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHRy
ICs9IGkgLSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcHRyICs9IGkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSAneCc6IHsKLSAgICAgICAgICAgIGMgPSAwOwotICAgICAgICAgICAgaW50IGk7Ci0g
ICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDI7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
IChwdHIgKyBpID49IHBhdHRlcm5FbmQgfHwgIWlzQVNDSUlIZXhEaWdpdChwdHJbaV0pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGMgPSAneCc7Ci0gICAgICAgICAgICAgICAgICAgIGkgPSAxOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAneCc6IHsKKyAg
ICAgICAgICAgICAgICBjID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGkgPSAxOyBpIDw9IDI7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
cHRyICsgaSA+PSBwYXR0ZXJuRW5kIHx8ICFpc0FTQ0lJSGV4RGlnaXQocHRyW2ldKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYyA9ICd4JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkg
PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGNjID0gcHRyW2ldOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2MgPj0gJ2EnKQorICAgICAgICAgICAgICAgICAgICAgICAgY2MgLT0gMzI7ICAg
ICAgICAgICAgIC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZSAqLworICAgICAgICAgICAgICAgICAg
ICBjID0gYyAqIDE2ICsgY2MgLSAoKGNjIDwgJ0EnKSA/ICcwJyA6ICgnQScgLSAxMCkpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgY2MgPSBwdHJbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKGNjID49ICdhJykKLSAgICAgICAgICAgICAgICAgICAgY2MgLT0gMzI7ICAg
ICAgICAgICAgIC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZSAqLwotICAgICAgICAgICAgICAgIGMg
PSBjICogMTYgKyBjYyAtICgoY2MgPCAnQScpID8gJzAnIDogKCdBJyAtIDEwKSk7CisgICAgICAg
ICAgICAgICAgcHRyICs9IGkgLSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcHRyICs9IGkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSAndSc6IHsKLSAgICAgICAgICAgIGMgPSAwOwotICAgICAgICAg
ICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDQ7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmIChwdHIgKyBpID49IHBhdHRlcm5FbmQgfHwgIWlzQVNDSUlIZXhEaWdpdChw
dHJbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSAndSc7Ci0gICAgICAgICAgICAgICAg
ICAgIGkgPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSAndSc6IHsKKyAgICAgICAgICAgICAgICBjID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgaTsK
KyAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDQ7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAocHRyICsgaSA+PSBwYXR0ZXJuRW5kIHx8ICFpc0FTQ0lJSGV4RGlnaXQocHRy
W2ldKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICd1JzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGNjID0gcHRyW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2MgPj0gJ2EnKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y2MgLT0gMzI7ICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZSAqLworICAgICAg
ICAgICAgICAgICAgICBjID0gYyAqIDE2ICsgY2MgLSAoKGNjIDwgJ0EnKSA/ICcwJyA6ICgnQScg
LSAxMCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgY2MgPSBwdHJb
aV07Ci0gICAgICAgICAgICAgICAgaWYgKGNjID49ICdhJykKLSAgICAgICAgICAgICAgICAgICAg
Y2MgLT0gMzI7ICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZSAqLwotICAgICAg
ICAgICAgICAgIGMgPSBjICogMTYgKyBjYyAtICgoY2MgPCAnQScpID8gJzAnIDogKCdBJyAtIDEw
KSk7CisgICAgICAgICAgICAgICAgcHRyICs9IGkgLSAxOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHRyICs9IGkgLSAxOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIE90aGVyIHNwZWNpYWwgZXNjYXBl
cyBub3Qgc3RhcnRpbmcgd2l0aCBhIGRpZ2l0IGFyZSBzdHJhaWdodGZvcndhcmQgKi8KLSAgICAg
ICAgfQotICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIGlmICgrK3B0ciA9PSBwYXR0ZXJu
RW5kKSB7Ci0gICAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjI7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAg
IGlmICgrK3B0ciA9PSBwYXR0ZXJuRW5kKSB7CisgICAgICAgICAgICAgICAgICAgICplcnJvcmNv
ZGVwdHIgPSBFUlIyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYyA9ICpwdHI7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLyogQSBsZXR0ZXIgaXMgdXBwZXItY2FzZWQ7IHRoZW4gdGhlIDB4NDAgYml0
IGlzIGZsaXBwZWQuIFRoaXMgY29kaW5nCisgICAgICAgICAgICAgICAgIGlzIEFTQ0lJLXNwZWNp
ZmljLCBidXQgdGhlbiB0aGUgd2hvbGUgY29uY2VwdCBvZiBcY3ggaXMgQVNDSUktc3BlY2lmaWMu
ICovCisgICAgICAgICAgICAgICAgYyA9IHRvQVNDSUlVcHBlcihjKSBeIDB4NDA7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjID0gKnB0cjsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLyogQSBsZXR0ZXIgaXMgdXBwZXItY2FzZWQ7IHRoZW4g
dGhlIDB4NDAgYml0IGlzIGZsaXBwZWQuIFRoaXMgY29kaW5nCi0gICAgICAgICAgICAgaXMgQVND
SUktc3BlY2lmaWMsIGJ1dCB0aGVuIHRoZSB3aG9sZSBjb25jZXB0IG9mIFxjeCBpcyBBU0NJSS1z
cGVjaWZpYy4gKi8KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGMgPj0gJ2EnICYmIGMg
PD0gJ3onKQotICAgICAgICAgICAgICAgIGMgLT0gMzI7Ci0gICAgICAgICAgICBjIF49IDB4NDA7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICAqcHRycHRy
ID0gcHRyOwogICAgIHJldHVybiBjOwogfQogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICBDaGVjayBmb3IgY291bnRl
ZCByZXBlYXQgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwpAQCAtMzMxLDcgKzMyNyw3IEBAIEFyZ3VtZW50czoKIFJldHVybnM6
ICAgIHRydWUgb3IgZmFsc2UKICovCiAKLXN0YXRpYyBib29sIGlzX2NvdW50ZWRfcmVwZWF0KGNv
bnN0IFVDaGFyKiBwLCBjb25zdCBVQ2hhciogcGF0dGVybkVuZCkKK3N0YXRpYyBib29sIGlzQ291
bnRlZFJlcGVhdChjb25zdCBVQ2hhciogcCwgY29uc3QgVUNoYXIqIHBhdHRlcm5FbmQpCiB7CiAg
ICAgaWYgKHAgPj0gcGF0dGVybkVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzU1LDEzICszNTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfY291bnRlZF9y
ZXBlYXQoY29uc3QgVUNoYQogICAgIHJldHVybiAocCA8IHBhdHRlcm5FbmQgJiYgKnAgPT0gJ30n
KTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgogKiAgICAgICAgIFJlYWQgcmVwZWF0IGNvdW50cyAgICAgICAgICAgICAgICAgICAgICoK
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8q
IFJlYWQgYW4gaXRlbSBvZiB0aGUgZm9ybSB7bixtfSBhbmQgcmV0dXJuIHRoZSB2YWx1ZXMuIFRo
aXMgaXMgY2FsbGVkIG9ubHkKLWFmdGVyIGlzX2NvdW50ZWRfcmVwZWF0KCkgaGFzIGNvbmZpcm1l
ZCB0aGF0IGEgcmVwZWF0LWNvdW50IHF1YW50aWZpZXIgZXhpc3RzLAorYWZ0ZXIgaXNDb3VudGVk
UmVwZWF0KCkgaGFzIGNvbmZpcm1lZCB0aGF0IGEgcmVwZWF0LWNvdW50IHF1YW50aWZpZXIgZXhp
c3RzLAogc28gdGhlIHN5bnRheCBpcyBndWFyYW50ZWVkIHRvIGJlIGNvcnJlY3QsIGJ1dCB3ZSBu
ZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZXMuCiAKIEFyZ3VtZW50czoKQEAgLTM3NSw3ICszNzAsNyBA
QCBSZXR1cm5zOiAgICAgICAgIHBvaW50ZXIgdG8gJ30nIG9uIHN1Y2NlCiAgICAgICAgICAgICAg
ICAgIGN1cnJlbnQgcHRyIG9uIGVycm9yLCB3aXRoIGVycm9yY29kZXB0ciBzZXQgbm9uLXplcm8K
ICovCiAKLXN0YXRpYyBjb25zdCBVQ2hhciogcmVhZF9yZXBlYXRfY291bnRzKGNvbnN0IFVDaGFy
KiBwLCBpbnQqIG1pbnAsIGludCogbWF4cCwgRXJyb3JDb2RlKiBlcnJvcmNvZGVwdHIpCitzdGF0
aWMgY29uc3QgVUNoYXIqIHJlYWRSZXBlYXRDb3VudHMoY29uc3QgVUNoYXIqIHAsIGludCogbWlu
cCwgaW50KiBtYXhwLCBFcnJvckNvZGUqIGVycm9yY29kZXB0cikKIHsKICAgICBpbnQgbWluID0g
MDsKICAgICBpbnQgbWF4ID0gLTE7CkBAIC00MTksMjQ0ICs0MTQsNDcgQEAgc3RhdGljIGNvbnN0
IFVDaGFyKiByZWFkX3JlcGVhdF9jb3VudHMoYwogICAgIHJldHVybiBwOwogfQogCi0KIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgRmlu
ZCBmaXJzdCBzaWduaWZpY2FudCBvcCBjb2RlICAgICAgICAgICAgKgogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVGhpcyBpcyBjYWxsZWQg
Ynkgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzY2FuIGEgY29tcGlsZWQgZXhwcmVzc2lvbiBsb29r
aW5nCiBmb3IgYSBmaXhlZCBmaXJzdCBjaGFyYWN0ZXIsIG9yIGFuIGFuY2hvcmluZyBvcCBjb2Rl
IGV0Yy4gSXQgc2tpcHMgb3ZlciB0aGluZ3MKLXRoYXQgZG8gbm90IGluZmx1ZW5jZSB0aGlzLiBG
b3Igc29tZSBjYWxscywgYSBjaGFuZ2Ugb2Ygb3B0aW9uIGlzIGltcG9ydGFudC4KLUZvciBzb21l
IGNhbGxzLCBpdCBtYWtlcyBzZW5zZSB0byBza2lwIG5lZ2F0aXZlIGZvcndhcmQgYW5kIGFsbCBi
YWNrd2FyZAotYXNzZXJ0aW9ucywgYW5kIGFsc28gdGhlIFxiIGFzc2VydGlvbjsgZm9yIG90aGVy
cyBpdCBkb2VzIG5vdC4KK3RoYXQgZG8gbm90IGluZmx1ZW5jZSB0aGlzLgogCiBBcmd1bWVudHM6
CiAgIGNvZGUgICAgICAgICBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZ3JvdXAKLSAgc2tp
cGFzc2VydCAgIHRydWUgaWYgY2VydGFpbiBhc3NlcnRpb25zIGFyZSB0byBiZSBza2lwcGVkCi0K
IFJldHVybnM6ICAgICAgIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHNpZ25pZmljYW50IG9wY29kZQog
Ki8KIAotc3RhdGljIGNvbnN0IHVzY2hhciogZmlyc3RTaWduaWZpY2FudE9wQ29kZShjb25zdCB1
c2NoYXIqIGNvZGUpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciogZmlyc3RTaWduaWZpY2Fu
dE9wY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlKQogewogICAgIHdoaWxlICgqY29kZSA9
PSBPUF9CUkFOVU1CRVIpCi0gICAgICAgIGNvZGUgKz0gT1BfbGVuZ3Roc1sqY29kZV07CisgICAg
ICAgIGNvZGUgKz0gMzsKICAgICByZXR1cm4gY29kZTsKIH0KIAotc3RhdGljIGNvbnN0IHVzY2hh
ciogZmlyc3RTaWduaWZpY2FudE9wQ29kZVNraXBwaW5nQXNzZXJ0aW9ucyhjb25zdCB1c2NoYXIq
IGNvZGUpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciogZmlyc3RTaWduaWZpY2FudE9wY29k
ZVNraXBwaW5nQXNzZXJ0aW9ucyhjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlKQogewogICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgIHN3aXRjaCAoKmNvZGUpIHsKLSAgICAgICAgY2FzZSBPUF9B
U1NFUlRfTk9UOgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGNvZGUgKz0gZ2V0
T3Bjb2RlVmFsdWVBdE9mZnNldChjb2RlLCAxKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCpjb2Rl
ID09IE9QX0FMVCk7Ci0gICAgICAgICAgICBjb2RlICs9IE9QX2xlbmd0aHNbKmNvZGVdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKLSAgICAgICAg
Y2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKLSAgICAgICAgY2FzZSBPUF9CUkFOVU1CRVI6Ci0g
ICAgICAgICAgICBjb2RlICs9IE9QX2xlbmd0aHNbKmNvZGVdOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gY29kZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotCi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgRmluZCB0aGUgZml4
ZWQgbGVuZ3RoIG9mIGEgcGF0dGVybiAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFNjYW4gYSBwYXR0ZXJuIGFuZCBjb21wdXRl
IHRoZSBmaXhlZCBsZW5ndGggb2Ygc3ViamVjdCB0aGF0IHdpbGwgbWF0Y2ggaXQsCi1pZiB0aGUg
bGVuZ3RoIGlzIGZpeGVkLiBUaGlzIGlzIG5lZWRlZCBmb3IgZGVhbGluZyB3aXRoIGJhY2t3YXJk
IGFzc2VydGlvbnMuCi1JbiBVVEY4IG1vZGUsIHRoZSByZXN1bHQgaXMgaW4gY2hhcmFjdGVycyBy
YXRoZXIgdGhhbiBieXRlcy4KLQotQXJndW1lbnRzOgotICBjb2RlICAgICBwb2ludHMgdG8gdGhl
IHN0YXJ0IG9mIHRoZSBwYXR0ZXJuICh0aGUgYnJhY2tldCkKLSAgb3B0aW9ucyAgdGhlIGNvbXBp
bGluZyBvcHRpb25zCi0KLVJldHVybnM6ICAgdGhlIGZpeGVkIGxlbmd0aCwgb3IgLTEgaWYgdGhl
cmUgaXMgbm8gZml4ZWQgbGVuZ3RoLAotICAgICAgICAgICAgIG9yIC0yIGlmIFxDIHdhcyBlbmNv
dW50ZXJlZAotKi8KLQotc3RhdGljIGludCBmaW5kX2ZpeGVkbGVuZ3RoKHVzY2hhciogY29kZSwg
aW50IG9wdGlvbnMpCi17Ci0gICAgaW50IGxlbmd0aCA9IC0xOwotICAgIAotICAgIGludCBicmFu
Y2hsZW5ndGggPSAwOwotICAgIHVzY2hhciogY2MgPSBjb2RlICsgMSArIExJTktfU0laRTsKLSAg
ICAKLSAgICAvKiBTY2FuIGFsb25nIHRoZSBvcGNvZGVzIGZvciB0aGlzIGJyYW5jaC4gSWYgd2Ug
Z2V0IHRvIHRoZSBlbmQgb2YgdGhlCi0gICAgIGJyYW5jaCwgY2hlY2sgdGhlIGxlbmd0aCBhZ2Fp
bnN0IHRoYXQgb2YgdGhlIG90aGVyIGJyYW5jaGVzLiAqLwotICAgIAotICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgIGludCBkOwotICAgICAgICBpbnQgb3AgPSAqY2M7Ci0gICAgICAgIGlmIChv
cCA+PSBPUF9CUkEpCi0gICAgICAgICAgICBvcCA9IE9QX0JSQTsKLSAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgICAgIGNhc2UgT1BfQlJBOgotICAgICAgICAgICAgY2Fz
ZSBPUF9PTkNFOgotICAgICAgICAgICAgICAgIGQgPSBmaW5kX2ZpeGVkbGVuZ3RoKGNjLCBvcHRp
b25zKTsKLSAgICAgICAgICAgICAgICBpZiAoZCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkOwotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBkOwotICAgICAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgY2MgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNl
dChjYywgMSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoKmNjID09IE9QX0FMVCk7Ci0gICAg
ICAgICAgICAgICAgY2MgKz0gMSArIExJTktfU0laRTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBSZWFjaGVkIGVuZCBvZiBhIGJy
YW5jaDsgaWYgaXQncyBhIGtldCBpdCBpcyB0aGUgZW5kIG9mIGEgbmVzdGVkCi0gICAgICAgICAg
ICAgICAgIGNhbGwuIElmIGl0J3MgQUxUIGl0IGlzIGFuIGFsdGVybmF0aW9uIGluIGEgbmVzdGVk
IGNhbGwuIElmIGl0IGlzCi0gICAgICAgICAgICAgICAgIEVORCBpdCdzIHRoZSBlbmQgb2YgdGhl
IG91dGVyIGNhbGwuIEFsbCBjYW4gYmUgaGFuZGxlZCBieSB0aGUgc2FtZSBjb2RlLiAqLwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9BTFQ6Ci0gICAgICAgICAgICBjYXNl
IE9QX0tFVDoKLSAgICAgICAgICAgIGNhc2UgT1BfS0VUUk1BWDoKLSAgICAgICAgICAgIGNhc2Ug
T1BfS0VUUk1JTjoKLSAgICAgICAgICAgIGNhc2UgT1BfRU5EOgotICAgICAgICAgICAgICAgIGlm
IChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBicmFuY2hsZW5ndGg7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobGVuZ3RoICE9IGJyYW5jaGxlbmd0aCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIGlmICgqY2MgIT0gT1Bf
QUxUKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgICAgICAgICAgICAg
IGNjICs9IDEgKyBMSU5LX1NJWkU7Ci0gICAgICAgICAgICAgICAgYnJhbmNobGVuZ3RoID0gMDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvKiBTa2lwIG92ZXIgYXNzZXJ0aXZlIHN1YnBhdHRlcm5zICovCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIE9QX0FTU0VSVDoKICAgICAgICAgICAgIGNhc2UgT1BfQVNTRVJU
X05PVDoKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGNjICs9IGdl
dE9wY29kZVZhbHVlQXRPZmZzZXQoY2MsIDEpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpj
YyA9PSBPUF9BTFQpOwotICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciB0aGluZ3MgdGhhdCBkb24n
dCBtYXRjaCBjaGFycyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBPUF9C
UkFOVU1CRVI6Ci0gICAgICAgICAgICBjYXNlIE9QX0NJUkM6Ci0gICAgICAgICAgICBjYXNlIE9Q
X0RPTEw6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9XT1JEX0JPVU5EQVJZOgotICAgICAgICAg
ICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgotICAgICAgICAgICAgICAgIGNjICs9IE9QX2xlbmd0
aHNbKmNjXTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvKiBIYW5kbGUgbGl0ZXJhbCBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIE9QX0NIQVI6Ci0gICAgICAgICAgICBjYXNlIE9QX0NIQVJf
SUdOT1JJTkdfQ0FTRToKLSAgICAgICAgICAgIGNhc2UgT1BfTk9UOgotICAgICAgICAgICAgICAg
IGJyYW5jaGxlbmd0aCsrOwotICAgICAgICAgICAgICAgIGNjICs9IDI7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKCgqY2MgJiAweGMwKSA9PSAweDgwKQotICAgICAgICAgICAgICAgICAgICBjYysr
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBPUF9BU0NJSV9DSEFSOgotICAgICAgICAgICAgY2FzZSBPUF9BU0NJSV9MRVRURVJfSUdO
T1JJTkdfQ0FTRToKLSAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGgrKzsKLSAgICAgICAgICAg
ICAgICBjYyArPSAyOworICAgICAgICAgICAgICAgIGFkdmFuY2VUb0VuZE9mQnJhY2tldChjb2Rl
KTsKKyAgICAgICAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogSGFuZGxlIGV4
YWN0IHJlcGV0aXRpb25zLiBUaGUgY291bnQgaXMgYWxyZWFkeSBpbiBjaGFyYWN0ZXJzLCBidXQg
d2UKLSAgICAgICAgICAgICAgICAgbmVlZCB0byBza2lwIG92ZXIgYSBtdWx0aWJ5dGUgY2hhcmFj
dGVyIGluIFVURjggbW9kZS4gICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IE9QX0VYQUNUOgotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBnZXQyQnl0ZU9wY29k
ZVZhbHVlQXRPZmZzZXQoY2MsMSk7Ci0gICAgICAgICAgICAgICAgY2MgKz0gNDsKLSAgICAgICAg
ICAgICAgICB3aGlsZSgoKmNjICYgMHg4MCkgPT0gMHg4MCkKLSAgICAgICAgICAgICAgICAgICAg
Y2MrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgT1BfVFlQRUVYQUNUOgotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCArPSBn
ZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY2MsMSk7Ci0gICAgICAgICAgICAgICAgY2MgKz0g
NDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvKiBIYW5kbGUgc2luZ2xlLWNoYXIgbWF0Y2hlcnMgKi8KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgotICAgICAgICAgICAgY2FzZSBPUF9ESUdJ
VDoKLSAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6Ci0gICAgICAgICAgICBjYXNl
IE9QX1dISVRFU1BBQ0U6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKLSAgICAg
ICAgICAgIGNhc2UgT1BfV09SRENIQVI6Ci0gICAgICAgICAgICBjYXNlIE9QX05PVF9ORVdMSU5F
OgotICAgICAgICAgICAgICAgIGJyYW5jaGxlbmd0aCsrOwotICAgICAgICAgICAgICAgIGNjKys7
CisgICAgICAgICAgICBjYXNlIE9QX1dPUkRfQk9VTkRBUlk6CisgICAgICAgICAgICBjYXNlIE9Q
X05PVF9XT1JEX0JPVU5EQVJZOgorICAgICAgICAgICAgICAgICsrY29kZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBDaGVjayBh
IGNsYXNzIGZvciB2YXJpYWJsZSBxdWFudGlmaWNhdGlvbiAqLwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBPUF9YQ0xBU1M6Ci0gICAgICAgICAgICAgICAgY2MgKz0gZ2V0T3Bj
b2RlVmFsdWVBdE9mZnNldChjYywgMSkgLSAzMzsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRo
cm91Z2ggKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgT1BfQ0xBU1M6Ci0g
ICAgICAgICAgICBjYXNlIE9QX05DTEFTUzoKLSAgICAgICAgICAgICAgICBjYyArPSAzMzsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCpjYykgewotICAgICAgICAg
ICAgICAgIGNhc2UgT1BfQ1JTVEFSOgotICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JNSU5TVEFS
OgotICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JRVUVSWToKLSAgICAgICAgICAgICAgICBjYXNl
IE9QX0NSTUlOUVVFUlk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgotICAgICAgICAg
ICAgICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldDJC
eXRlT3Bjb2RlVmFsdWVBdE9mZnNldChjYywgMSkgIT0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zm
c2V0KGNjLCAzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJhbmNobGVuZ3RoICs9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChj
YywgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNjICs9IDU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBicmFuY2hsZW5ndGgrKzsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIE9QX0JSQU5VTUJFUjoKKyAgICAgICAgICAgICAgICBjb2RlICs9IDM7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLyogQW55dGhpbmcgZWxzZSBpcyB2YXJpYWJsZSBsZW5ndGggKi8KLSAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICAgICAgICAgIHJldHVybiBjb2RlOwogICAgICAgICB9CiAgICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0qICAgICAgICAgQ29tcGxldGUgYSBjYWxsb3V0IGl0ZW0gICAgICAg
ICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQotLyogQSBjYWxsb3V0IGl0ZW0gY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUgbmV4
dCBpdGVtIGluIHRoZSBwYXR0ZXJuLCB3aGljaAotd2UgY2FuJ3QgZmlsbCBpbiB0aWxsIGFmdGVy
IHdlIGhhdmUgcmVhY2hlZCB0aGUgcmVsZXZhbnQgcG9pbnQuIFRoaXMgaXMgdXNlZAotZm9yIGJv
dGggYXV0b21hdGljIGFuZCBtYW51YWwgY2FsbG91dHMuCi0KLUFyZ3VtZW50czoKLSAgcHJldmlv
dXNfY2FsbG91dCAgIHBvaW50cyB0byBwcmV2aW91cyBjYWxsb3V0IGl0ZW0KLSAgcHRyICAgICAg
ICAgICAgICAgIGN1cnJlbnQgcGF0dGVybiBwb2ludGVyCi0gIGNkICAgICAgICAgICAgICAgICBw
b2ludGVycyB0byB0YWJsZXMgZXRjCi0qLwotCi1zdGF0aWMgdm9pZCBjb21wbGV0ZV9jYWxsb3V0
KHVzY2hhciogcHJldmlvdXNfY2FsbG91dCwgY29uc3QgVUNoYXIqIHB0ciwgY29uc3QgQ29tcGls
ZURhdGEmIGNkKQotewotICAgIGludCBsZW5ndGggPSBwdHIgLSBjZC5zdGFydF9wYXR0ZXJuIC0g
Z2V0T3Bjb2RlVmFsdWVBdE9mZnNldChwcmV2aW91c19jYWxsb3V0LCAyKTsKLSAgICBwdXRPcGNv
ZGVWYWx1ZUF0T2Zmc2V0KHByZXZpb3VzX2NhbGxvdXQsIDIgKyBMSU5LX1NJWkUsIGxlbmd0aCk7
Ci19Ci0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgogKiAgICAgICAgICAgR2V0IG90aGVyY2FzZSByYW5nZSAgICAgICAgICAgICAgICAgICoK
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02
NzUsMTIgKzQ3MywxMiBAQCBBcmd1bWVudHM6CiBZaWVsZDogICAgICAgIHRydWUgd2hlbiByYW5n
ZSByZXR1cm5lZDsgZmFsc2Ugd2hlbiBubyBtb3JlCiAqLwogCi1zdGF0aWMgYm9vbCBnZXRfb3Ro
ZXJjYXNlX3JhbmdlKGludCogY3B0ciwgaW50IGQsIGludCogb2NwdHIsIGludCogb2RwdHIpCitz
dGF0aWMgYm9vbCBnZXRPdGhlcmNhc2VSYW5nZShpbnQqIGNwdHIsIGludCBkLCBpbnQqIG9jcHRy
LCBpbnQqIG9kcHRyKQogewogICAgIGludCBjLCBvdGhlcmNhc2UgPSAwOwogICAgIAogICAgIGZv
ciAoYyA9ICpjcHRyOyBjIDw9IGQ7IGMrKykgewotICAgICAgICBpZiAoKG90aGVyY2FzZSA9IF9w
Y3JlX3VjcF9vdGhlcmNhc2UoYykpID49IDApCisgICAgICAgIGlmICgob3RoZXJjYXNlID0ga2pz
X3BjcmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAKQEAgLTY5MSw3ICs0ODksNyBAQCBzdGF0aWMgYm9vbCBnZXRfb3RoZXJjYXNlX3Jhbmdl
KGludCogY3B0CiAgICAgaW50IG5leHQgPSBvdGhlcmNhc2UgKyAxOwogICAgIAogICAgIGZvciAo
KytjOyBjIDw9IGQ7IGMrKykgewotICAgICAgICBpZiAoX3BjcmVfdWNwX290aGVyY2FzZShjKSAh
PSBuZXh0KQorICAgICAgICBpZiAoa2pzX3BjcmVfdWNwX290aGVyY2FzZShjKSAhPSBuZXh0KQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHQrKzsKICAgICB9CkBAIC03MTYsMTkgKzUx
NCwxOCBAQCBzdGF0aWMgYm9vbCBnZXRfb3RoZXJjYXNlX3JhbmdlKGludCogY3B0CiAgUmV0dXJu
czogICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBsYWNlZCBpbiB0aGUgYnVmZmVyCiAgKi8KIAot
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYXMgc29vbiBhcyBhbGwgVVRGOCB1c2Vz
IGFyZSByZW1vdmVkIGZyb20gUENSRQotaW50IF9wY3JlX29yZDJ1dGY4KGludCBjdmFsdWUsIHVz
Y2hhciAqYnVmZmVyKQorc3RhdGljIGludCBlbmNvZGVVVEY4KGludCBjdmFsdWUsIHVuc2lnbmVk
IGNoYXIgKmJ1ZmZlcikKIHsKICAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgX3BjcmVf
dXRmOF90YWJsZTFfc2l6ZTsgaSsrKQotICAgICAgICBpZiAoY3ZhbHVlIDw9IF9wY3JlX3V0Zjhf
dGFibGUxW2ldKQorICAgIGZvciAoaSA9IDA7IGkgPCBranNfcGNyZV91dGY4X3RhYmxlMV9zaXpl
OyBpKyspCisgICAgICAgIGlmIChjdmFsdWUgPD0ga2pzX3BjcmVfdXRmOF90YWJsZTFbaV0pCiAg
ICAgICAgICAgICBicmVhazsKICAgICBidWZmZXIgKz0gaTsKICAgICBmb3IgKGludCBqID0gaTsg
aiA+IDA7IGotLSkgewogICAgICAgICAqYnVmZmVyLS0gPSAweDgwIHwgKGN2YWx1ZSAmIDB4M2Yp
OwogICAgICAgICBjdmFsdWUgPj49IDY7CiAgICAgfQotICAgICpidWZmZXIgPSBfcGNyZV91dGY4
X3RhYmxlMltpXSB8IGN2YWx1ZTsKKyAgICAqYnVmZmVyID0ga2pzX3BjcmVfdXRmOF90YWJsZTJb
aV0gfCBjdmFsdWU7CiAgICAgcmV0dXJuIGkgKyAxOwogfQogCkBAIC03NTgsNyArNTU1LDcgQEAg
c3RhdGljIGlubGluZSBib29sIHNhZmVseUNoZWNrTmV4dENoYXIoYwogfQogCiBzdGF0aWMgYm9v
bAotY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cywgdXNjaGFyKiogY29k
ZXB0ciwKK2NvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMsIHVuc2lnbmVk
IGNoYXIqKiBjb2RlcHRyLAogICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqKiBwdHJwdHIsIGNv
bnN0IFVDaGFyKiBwYXR0ZXJuRW5kLCBFcnJvckNvZGUqIGVycm9yY29kZXB0ciwgaW50ICpmaXJz
dGJ5dGVwdHIsCiAgICAgICAgICAgICAgICBpbnQqIHJlcWJ5dGVwdHIsIENvbXBpbGVEYXRhJiBj
ZCkKIHsKQEAgLTc2NiwyMCArNTYzLDE4IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGlu
dCogYnJhY2tldHMKICAgICBpbnQgcmVwZWF0X21pbiA9IDAsIHJlcGVhdF9tYXggPSAwOyAgICAg
IC8qIFRvIHBsZWFzZSBwaWNreSBjb21waWxlcnMgKi8KICAgICBpbnQgYnJhdmFsdWUgPSAwOwog
ICAgIGludCByZXF2YXJ5LCB0ZW1wcmVxdmFyeTsKLSAgICBpbnQgYWZ0ZXJfbWFudWFsX2NhbGxv
dXQgPSAwOwogICAgIGludCBjOwotICAgIHVzY2hhciogY29kZSA9ICpjb2RlcHRyOwotICAgIHVz
Y2hhciogdGVtcGNvZGU7CisgICAgdW5zaWduZWQgY2hhciogY29kZSA9ICpjb2RlcHRyOworICAg
IHVuc2lnbmVkIGNoYXIqIHRlbXBjb2RlOwogICAgIGJvb2wgZ3JvdXBzZXRmaXJzdGJ5dGUgPSBm
YWxzZTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gKnB0cnB0cjsKICAgICBjb25zdCBVQ2hhciog
dGVtcHB0cjsKLSAgICB1c2NoYXIqIHByZXZpb3VzID0gTlVMTDsKLSAgICB1c2NoYXIqIHByZXZp
b3VzX2NhbGxvdXQgPSBOVUxMOwotICAgIHVzY2hhciBjbGFzc2JpdHNbMzJdOworICAgIHVuc2ln
bmVkIGNoYXIqIHByZXZpb3VzID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGNsYXNzYml0c1sz
Ml07CiAgICAgCiAgICAgYm9vbCBjbGFzc191dGY4OwotICAgIHVzY2hhciogY2xhc3NfdXRmOGRh
dGE7Ci0gICAgdXNjaGFyIHV0ZjhfY2hhcls2XTsKKyAgICB1bnNpZ25lZCBjaGFyKiBjbGFzc191
dGY4ZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIHV0ZjhfY2hhcls2XTsKICAgICAKICAgICAvKiBJ
bml0aWFsaXplIG5vIGZpcnN0IGJ5dGUsIG5vIHJlcXVpcmVkIGJ5dGUuIFJFUV9VTlNFVCBtZWFu
cyAibm8gY2hhcgogICAgICBtYXRjaGluZyBlbmNvdW50ZXJlZCB5ZXQiLiBJdCBnZXRzIGNoYW5n
ZWQgdG8gUkVRX05PTkUgaWYgd2UgaGl0IHNvbWV0aGluZyB0aGF0CkBAIC04MTQsNyArNjA5LDcg
QEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICBpbnQg
c3VicmVxYnl0ZTsKICAgICAgICAgaW50IHN1YmZpcnN0Ynl0ZTsKICAgICAgICAgaW50IG1jbGVu
Z3RoOwotICAgICAgICB1c2NoYXIgbWNidWZmZXJbOF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
bWNidWZmZXJbOF07CiAgICAgICAgIAogICAgICAgICAvKiBOZXh0IGJ5dGUgaW4gdGhlIHBhdHRl
cm4gKi8KICAgICAgICAgCkBAIC04MjMsMTIgKzYxOCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9w
dGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgLyogRmlsbCBpbiBsZW5ndGggb2YgYSBwcmV2
aW91cyBjYWxsb3V0LCBleGNlcHQgd2hlbiB0aGUgbmV4dCB0aGluZyBpcwogICAgICAgICAgYSBx
dWFudGlmaWVyLiAqLwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc19xdWFudGlmaWVyID0gYyA9
PSAnKicgfHwgYyA9PSAnKycgfHwgYyA9PSAnPycgfHwgKGMgPT0gJ3snICYmIGlzX2NvdW50ZWRf
cmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNf
cXVhbnRpZmllciAmJiBwcmV2aW91c19jYWxsb3V0ICYmIGFmdGVyX21hbnVhbF9jYWxsb3V0LS0g
PD0gMCkgewotICAgICAgICAgICAgY29tcGxldGVfY2FsbG91dChwcmV2aW91c19jYWxsb3V0LCBw
dHIsIGNkKTsKLSAgICAgICAgICAgIHByZXZpb3VzX2NhbGxvdXQgPSBOVUxMOwotICAgICAgICB9
CisgICAgICAgIGJvb2wgaXNfcXVhbnRpZmllciA9IGMgPT0gJyonIHx8IGMgPT0gJysnIHx8IGMg
PT0gJz8nIHx8IChjID09ICd7JyAmJiBpc0NvdW50ZWRSZXBlYXQocHRyICsgMSwgcGF0dGVybkVu
ZCkpOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgICAvKiBUaGUg
YnJhbmNoIHRlcm1pbmF0ZXMgYXQgZW5kIG9mIHN0cmluZywgfCwgb3IgKS4gKi8KQEAgLTkyMSw3
ICs3MTEsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAg
ICAgICAgICAgICAgIGNoYXJhY3RlciAoPCAyNTYpLCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUg
Y29tcGlsZWQgY29kZSBkb2Vzbid0IHVzZSB0aGUKICAgICAgICAgICAgICAgICAgYml0IG1hcC4g
Ki8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtZW1zZXQoY2xhc3NiaXRzLCAw
LCAzMiAqIHNpemVvZih1c2NoYXIpKTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoY2xhc3NiaXRz
LCAwLCAzMiAqIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLyogUHJvY2VzcyBjaGFyYWN0ZXJzIHVudGlsIF0gaXMgcmVhY2hlZC4gVGhl
IGZpcnN0IHBhc3MKICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgcmVnZXggY2hlY2tlZCB0
aGUgb3ZlcmFsbCBzeW50YXgsIHNvIHdlIGRvbid0IG5lZWQgdG8gYmUgdmVyeQpAQCAtOTM4LDcg
KzcyOCw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAg
ICAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVtLCBzbyBzZXQgY2xhc3NfY2hhcmNvdW50
IGJpZ2dlciB0aGFuIG9uZS4gKi8KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGVj
a19lc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIHRydWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5F
bmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NoYXJj
b3VudCArPSAyOyAgICAgLyogR3JlYXRlciB0aGFuIDEgaXMgd2hhdCBtYXR0ZXJzICovCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgtYykgewpAQCAtMTAwNSw3ICs3OTUsNyBA
QCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkID09ICdcXCcpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogb2xkcHRyID0gcHRyOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjaGVja19lc2NhcGUoJnB0ciwgcGF0dGVybkVu
ZCwgZXJyb3Jjb2RlcHRyLCAqYnJhY2tldHMsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJvcmNvZGVwdHIsICpi
cmFja2V0cywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogXFggaXMgbGl0ZXJhbCBYOyBhbnkgb3RoZXIgc3BlY2lhbCBt
ZWFucyB0aGUgJy0nIHdhcyBsaXRlcmFsICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGQgPCAwKSB7CkBAIC0xMDM2LDcgKzgyNiw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlv
bnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9j
Yywgb2NkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2MgPSBjOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3JpZ2QgPSBkOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZ2V0X290aGVyY2FzZV9yYW5nZSgmY2MsIG9yaWdk
LCAmb2NjLCAmb2NkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
Z2V0T3RoZXJjYXNlUmFuZ2UoJmNjLCBvcmlnZCwgJm9jYywgJm9jZCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvY2MgPj0gYyAmJiBvY2QgPD0gZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIFNraXAgZW1i
ZWRkZWQgcmFuZ2VzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTEwNTUsOSArODQ1LDkgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0
YSsrID0gWENMX1NJTkdMRTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbGFzc191dGY4
ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KG9jYywgY2xhc3NfdXRmOGRhdGEp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRh
ICs9IGVuY29kZVVURjgob2NjLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc191dGY4ZGF0YSArPSBfcGNyZV9vcmQydXRmOChvY2QsIGNsYXNzX3V0ZjhkYXRhKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29k
ZVVURjgob2NkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0xMDY1LDggKzg1NSw4IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMs
IGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmcg
cmFuZ2VzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1JBTkdFOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KGMsIGNsYXNz
X3V0ZjhkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0YSAr
PSBfcGNyZV9vcmQydXRmOChkLCBjbGFzc191dGY4ZGF0YSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5jb2RlVVRGOChjLCBjbGFzc191dGY4ZGF0YSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOGRhdGEgKz0gZW5jb2RlVVRG
OChkLCBjbGFzc191dGY4ZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2l0aCBVQ1Agc3VwcG9ydCwgd2UgYXJlIGRvbmUu
IFdpdGhvdXQgVUNQIHN1cHBvcnQsIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2VsZXNzIG1hdGNoaW5nIGZvciBVVEYtOCBjaGFyYWN0ZXJzID4gMTI3OyB3ZSBj
YW4gdXNlIHRoZSBiaXQgbWFwCkBAIC0xMTAzLDEzICs4OTMsMTMgQEAgY29tcGlsZUJyYW5jaChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPiAy
NTUgfHwgKChvcHRpb25zICYgSWdub3JlQ2FzZU9wdGlvbikgJiYgYyA+IDEyNykpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICpjbGFzc191dGY4ZGF0YSsrID0gWENMX1NJTkdMRTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KGMsIGNsYXNzX3V0ZjhkYXRh
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IGVuY29kZVVURjgo
YywgY2xhc3NfdXRmOGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmIElnbm9yZUNhc2VPcHRpb24pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgb3RoZXJjYXNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgob3RoZXJjYXNlID0gX3BjcmVfdWNwX290aGVyY2FzZShjKSkgPj0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob3RoZXJjYXNlID0ga2pzX3BjcmVfdWNw
X290aGVyY2FzZShjKSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Y2xhc3NfdXRmOGRhdGErKyA9IFhDTF9TSU5HTEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzX3V0ZjhkYXRhICs9IF9wY3JlX29yZDJ1dGY4KG90aGVyY2FzZSwgY2xhc3Nf
dXRmOGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc191dGY4ZGF0
YSArPSBlbmNvZGVVVEY4KG90aGVyY2FzZSwgY2xhc3NfdXRmOGRhdGEpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKQEAgLTExOTcsNyArOTg3LDcgQEAgY29tcGlsZUJyYW5jaChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLyogTm93IGZpbGwgaW4gdGhlIGNvbXBsZXRlIGxlbmd0aCBvZiB0aGUgaXRlbSAq
LwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHV0T3Bjb2RlVmFs
dWVBdE9mZnNldChwcmV2aW91cywgMSwgY29kZSAtIHByZXZpb3VzKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHV0TGlua1ZhbHVlKHByZXZpb3VzICsgMSwgY29kZSAtIHByZXZpb3VzKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogRW5kIG9mIGNsYXNzIGhhbmRsaW5nICovCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTIyMiw3ICsxMDEyLDcgQEAgY29t
cGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgY2FzZSAn
eyc6CiAgICAgICAgICAgICAgICAgaWYgKCFpc19xdWFudGlmaWVyKQogICAgICAgICAgICAgICAg
ICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0
X2NvdW50cyhwdHIrMSwgJnJlcGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOwor
ICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsgMSwgJnJlcGVhdF9t
aW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOwogICAgICAgICAgICAgICAgIGlmICgqZXJy
b3Jjb2RlcHRyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKICAgICAgICAgICAg
ICAgICBnb3RvIFJFUEVBVDsKQEAgLTEyNjAsNiArMTA1MCw3IEBAIGNvbXBpbGVCcmFuY2goaW50
IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvKiBTYXZlIHN0YXJ0IG9mIHByZXZpb3VzIGl0ZW0sIGluIGNhc2Ugd2UgaGF2ZSB0byBtb3Zl
IGl0IHVwIHRvIG1ha2Ugc3BhY2UKICAgICAgICAgICAgICAgICAgZm9yIGFuIGluc2VydGVkIE9Q
X09OQ0UgZm9yIHRoZSBhZGRpdGlvbmFsICcrJyBleHRlbnNpb24uICovCisgICAgICAgICAgICAg
ICAgLyogRklYTUU6IFByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBiZWNhdXNlIHdlIGRvbid0IHVz
ZSBPUF9PTkNFLiAqLwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHRlbXBjb2Rl
ID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAgCkBAIC0xMjg4LDcgKzEwNzksNyBAQCBjb21w
aWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggcmF0aGVyIHRoYW4gYSBzbWFsbCBjaGFyYWN0ZXIuICovCiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVstMV0gJiAweDgwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB1c2NoYXIgKmxhc3RjaGFyID0gY29kZSAtIDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpsYXN0Y2hhciA9IGNvZGUgLSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUoKCpsYXN0Y2hhciAmIDB4YzApID09IDB4ODApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGNoYXItLTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGMgPSBjb2RlIC0gbGFzdGNoYXI7ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIFVURi04
IGNoYXJhY3RlciAqLwpAQCAtMTMzNCw3ICsxMTI1LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0
aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcF90eXBlID0g
LTE7CiAgICAgICAgICAgICAgICAgICAgIGludCBwcm9wX3ZhbHVlID0gLTE7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB1c2NoYXIqIG9sZGNvZGUgPSBjb2RlOwor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvbGRjb2RlID0gY29kZTsKICAgICAg
ICAgICAgICAgICAgICAgY29kZSA9IHByZXZpb3VzOyAgICAgICAgICAgICAgICAgIC8qIFVzdWFs
bHkgb3ZlcndyaXRlIHByZXZpb3VzIGl0ZW0gKi8KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIC8qIElmIHRoZSBtYXhpbXVtIGlzIHplcm8gdGhlbiB0aGUgbWluaW11
bSBtdXN0IGFsc28gYmUgemVybzsgUGVybCBhbGxvd3MKQEAgLTEzNTcsNyArMTE0OCw3IEBAIGNv
bXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqY29kZSsrID0gT1BfUVVFUlkgKyByZXBlYXRfdHlwZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysg
PSBPUF9VUFRPICsgcmVwZWF0X3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0
MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2YW5jZShjb2RlLCAwLCByZXBlYXRfbWF4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2Rl
LCByZXBlYXRfbWF4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEzNzQsNyArMTE2NSw3IEBAIGNvbXBp
bGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tldHMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVwZWF0X21heCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIEVORF9SRVBFQVQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUr
KyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXgg
LSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5j
ZShjb2RlLCByZXBlYXRfbWF4IC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMzgzLDcgKzExNzQs
NyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICpjb2RlKysgPSBPUF9FWEFDVCArIG9wX3R5cGU7ICAvKiBOQiBFWEFDVCBkb2Vzbid0
IGhhdmUgcmVwZWF0X3R5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlT3Bj
b2RlVmFsdWVBdE9mZnNldEFuZEFkdmFuY2UoY29kZSwgMCwgcmVwZWF0X21pbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZShjb2RlLCByZXBlYXRfbWlu
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLyog
SWYgdGhlIG1heGltdW0gaXMgdW5saW1pdGVkLCBpbnNlcnQgYW4gT1BfU1RBUi4gQmVmb3JlIGRv
aW5nIHNvLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBj
aGFyYWN0ZXIgZm9yIHRoZSBwcmV2aW91cyBjb2RlLiBGb3IgYSByZXBlYXRlZApAQCAtMTQyMCw3
ICsxMjExLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBlYXRfbWF4IC09IHJlcGVhdF9taW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNv
ZGUrKyA9IE9QX1VQVE8gKyByZXBlYXRfdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9t
YXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlVmFsdWVBbmRBZHZhbmNl
KGNvZGUsIHJlcGVhdF9tYXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTQ2MiwyMCArMTI1MywyMCBA
QCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAqY29kZSsrID0gT1BfQ1JRVUVSWSArIHJlcGVhdF90eXBlOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9D
UlJBTkdFICsgcmVwZWF0X3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9w
Y29kZVZhbHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9taW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UoY29kZSwgcmVwZWF0X21p
bik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0X21heCA9PSAtMSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRfbWF4ID0gMDsgIC8qIDItYnl0ZSBlbmNvZGlu
ZyBmb3IgbWF4ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZhbHVl
QXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHV0MkJ5dGVWYWx1ZUFuZEFkdmFuY2UoY29kZSwgcmVwZWF0X21heCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLyogSWYgcHJldmlvdXMgd2FzIGEgYnJhY2tldCBncm91cCwgd2UgbWF5
IGhhdmUgdG8gcmVwbGljYXRlIGl0IGluIGNlcnRhaW4KICAgICAgICAgICAgICAgICAgY2FzZXMu
ICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKnByZXZpb3Vz
ID49IE9QX0JSQSB8fCAqcHJldmlvdXMgPT0gT1BfT05DRSkgeworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCpwcmV2aW91cyA+PSBPUF9CUkEpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGtl
dG9mZnNldCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBjb2RlIC0gcHJldmlv
dXM7Ci0gICAgICAgICAgICAgICAgICAgIHVzY2hhciogYnJhbGluayA9IE5VTEw7CisgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJyYWxpbmsgPSBOVUxMOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIG1heGltdW0gcmVwZWF0IGNv
dW50IGlzIHVubGltaXRlZCwgZmluZCB0aGUgZW5kIG9mIHRoZSBicmFja2V0CiAgICAgICAgICAg
ICAgICAgICAgICBieSBzY2FubmluZyB0aHJvdWdoIGZyb20gdGhlIHN0YXJ0LCBhbmQgY29tcHV0
ZSB0aGUgb2Zmc2V0IGJhY2sgdG8gaXQKQEAgLTE0ODQsMTAgKzEyNzUsOCBAQCBjb21waWxlQnJh
bmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICBwb2lu
dGVyLiAqLwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
cGVhdF9tYXggPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzY2hhcioga2V0ID0g
cHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAga2V0ICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoa2V0LCAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCprZXQgIT0gT1BfS0VUKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtldCA9IHByZXZpb3VzOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZVRvRW5kT2ZCcmFja2V0KGtldCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXRvZmZzZXQgPSBjb2RlIC0ga2V0OwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTUzOSw3ICsxMzI4LDcgQEAgY29tcGlsZUJy
YW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoIWJyYWxpbmsp
ID8gMCA6IHByZXZpb3VzIC0gYnJhbGluazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmFsaW5rID0gcHJldmlvdXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0T3Bjb2Rl
VmFsdWVBdE9mZnNldEFuZEFkdmFuY2UocHJldmlvdXMsIDAsIG9mZnNldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlQWxsb3daZXJvQW5kQWR2YW5jZShwcmV2aW91
cywgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0X21heC0tOwpAQCAtMTU4MCw3
ICsxMzY5LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29kZSsrID0gT1BfQlJBOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCFicmFsaW5rKSA/IDAgOiBjb2Rl
IC0gYnJhbGluazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbGluayA9IGNv
ZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZz
ZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1dExpbmtWYWx1ZUFsbG93WmVyb0FuZEFkdmFuY2UoY29kZSwgb2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGNvZGUsIHByZXZpb3VzLCBsZW4p
OwpAQCAtMTU5MiwxMiArMTM4MSwxMiBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQq
IGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChicmFsaW5rKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCA9IGNvZGUgLSBicmFsaW5rICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
c2NoYXIqIGJyYSA9IGNvZGUgLSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG9sZGxpbmtvZmZzZXQgPSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KGJyYSwgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJhbGluayA9IG9sZGxpbmtvZmZzZXQgPyBicmFsaW5r
IC0gb2xkbGlua29mZnNldCA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogYnJhID0gY29kZSAtIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb2xkbGlua29mZnNldCA9IGdldExpbmtWYWx1ZUFsbG93WmVybyhicmEgKyAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmFsaW5rID0gKCFvbGRsaW5rb2Zmc2V0KSA/IDAg
OiBicmFsaW5rIC0gb2xkbGlua29mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Y29kZSsrID0gT1BfS0VUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE9wY29kZVZh
bHVlQXRPZmZzZXRBbmRBZHZhbmNlKGNvZGUsIDAsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldChicmEsIDEsIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlQW5kQWR2YW5jZShjb2RlLCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dExpbmtWYWx1ZShicmEgKyAxLCBv
ZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTYzOCwyNyArMTQyNywyNyBAQCBjb21waWxlQnJh
bmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCooKytwdHIpID09ICc/JykgewogICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKCooKytwdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJzonOiAgICAgICAgICAg
ICAgICAgLyogTm9uLWV4dHJhY3RpbmcgYnJhY2tldCAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJhdmFsdWUgPSBPUF9CUkE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOiAgICAgICAgICAgICAgICAgLyogUG9zaXRpdmUg
bG9va2FoZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VS
VDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnISc6ICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBsb29rYWhlYWQgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1BfQVNTRVJUX05PVDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzonOiAg
ICAgICAgICAgICAgICAgLyogTm9uLWV4dHJhY3RpbmcgYnJhY2tldCAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPSc6
ICAgICAgICAgICAgICAgICAvKiBQb3NpdGl2ZSBsb29rYWhlYWQgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEn
OiAgICAgICAgICAgICAgICAgLyogTmVnYXRpdmUgbG9va2FoZWFkICovCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhdmFsdWUgPSBPUF9BU1NFUlRfTk9UOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLyog
Q2hhcmFjdGVyIGFmdGVyICg/IG5vdCBzcGVjaWFsbHkgcmVjb2duaXplZCAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgICAgLyogT3B0aW9uIHNldHRpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICplcnJv
cmNvZGVwdHIgPSBFUlIxMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICplcnJvcmNvZGVwdHIgPSBFUlIxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IEZBSUxFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogRWxzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNpbmcgZ3JvdXA7IGFkanVzdCB0aGUgb3Bjb2RlLiBJZiB0aGUgYnJhY2tldApAQCAtMTY2OSw3
ICsxNDU4LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgICAgICBpZiAoKysoKmJyYWNrZXRzKSA+IEVYVFJBQ1RfQkFTSUNfTUFYKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmF2YWx1ZSA9IE9QX0JSQSArIEVYVFJBQ1RfQkFT
SUNfTUFYICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVbMSArIExJTktfU0laRV0g
PSBPUF9CUkFOVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXQyQnl0ZU9wY29kZVZh
bHVlQXRPZmZzZXQoY29kZSwgMitMSU5LX1NJWkUsICpicmFja2V0cyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXQyQnl0ZVZhbHVlKGNvZGUgKyAyICsgTElOS19TSVpFLCAqYnJhY2tldHMp
OwogICAgICAgICAgICAgICAgICAgICAgICAgc2tpcGJ5dGVzID0gMzsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xNjgxLDcgKzE0NzAsNyBAQCBj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAg
IHRvIHBhc3MgaXRzIGFkZHJlc3MgYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBvdGhl
cndpc2UuIFBhc3MgaW4gYQogICAgICAgICAgICAgICAgICBuZXcgc2V0dGluZyBmb3IgdGhlIGlt
cyBvcHRpb25zIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLiAqLwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHByZXZpb3VzID0gKGJyYXZhbHVlID49IE9QX09OQ0UpID8gY29kZSA6IDA7
CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSAoYnJhdmFsdWUgPj0gT1BfQlJBWkVSTykgPyBj
b2RlIDogMDsKICAgICAgICAgICAgICAgICAqY29kZSA9IGJyYXZhbHVlOwogICAgICAgICAgICAg
ICAgIHRlbXBjb2RlID0gY29kZTsKICAgICAgICAgICAgICAgICB0ZW1wcmVxdmFyeSA9IGNkLnJl
cV92YXJ5b3B0OyAgICAgLyogU2F2ZSB2YWx1ZSBiZWZvcmUgYnJhY2tldCAqLwpAQCAtMTcxNCw3
ICsxNTAzLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgIHplcm9maXJzdGJ5dGUgPSBmaXJzdGJ5dGU7CiAgICAgICAgICAgICAgICAg
Z3JvdXBzZXRmaXJzdGJ5dGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQlJBIHx8IGJyYXZhbHVlID09IE9QX09OQ0UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQlJBKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8qIElmIHdlIGhhdmUgbm90IHlldCBzZXQgYSBmaXJzdGJ5dGUgaW4gdGhpcyBicmFuY2gs
IHRha2UgaXQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm4sIHJlbWVt
YmVyaW5nIHRoYXQgaXQgd2FzIHNldCBoZXJlIHNvIHRoYXQgYSByZXBlYXQgb2YgbW9yZQogICAg
ICAgICAgICAgICAgICAgICAgdGhhbiBvbmUgY2FuIHJlcGxpY2F0ZSBpdCBhcyByZXFieXRlIGlm
IG5lY2Vzc2FyeS4gSWYgdGhlIHN1YnBhdHRlcm4gaGFzCkBAIC0xNzc0LDcgKzE1NjMsNyBAQCBj
b21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlICdcXCc6CiAgICAgICAgICAgICAgICAgdGVtcHB0ciA9IHB0cjsK
LSAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9y
Y29kZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNj
YXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG1ldGFjaGFyYWN0ZXJz
IGludHJvZHVjZWQgYnkgXC4gRm9yIG9uZXMgbGlrZSBcZCwgdGhlIEVTQ18gdmFsdWVzCiAgICAg
ICAgICAgICAgICAgIGFyZSBhcnJhbmdlZCB0byBiZSB0aGUgbmVnYXRpb24gb2YgdGhlIGNvcnJl
c3BvbmRpbmcgT1BfdmFsdWVzLiBGb3IgdGhlCkBAIC0xODAxLDcgKzE1OTAsNyBAQCBjb21waWxl
QnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbnVtYmVyID0gLWMgLSBFU0NfUkVGOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXMgPSBjb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1JFRjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldEFuZEFk
dmFuY2UoY29kZSwgMCwgbnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dDJCeXRl
VmFsdWVBbmRBZHZhbmNlKGNvZGUsIG51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0aGUgcmVzdCwg
d2UgY2FuIG9idGFpbiB0aGUgT1AgdmFsdWUgYnkgbmVnYXRpbmcgdGhlIGVzY2FwZQpAQCAtMTgz
Nyw3ICsxNjI2LDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwog
ICAgICAgICAgICAgICAgICAgICAgICAgKmNvZGUrKyA9IGM7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtY2xlbmd0
aCA9IF9wY3JlX29yZDJ1dGY4KGMsIG1jYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgbWNs
ZW5ndGggPSBlbmNvZGVVVEY4KGMsIG1jYnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICpjb2RlKysgPSAob3B0aW9ucyAmIElnbm9yZUNhc2VPcHRpb24p
ID8gT1BfQ0hBUl9JR05PUklOR19DQVNFIDogT1BfQ0hBUjsKICAgICAgICAgICAgICAgICAgICAg
Zm9yIChjID0gMDsgYyA8IG1jbGVuZ3RoOyBjKyspCkBAIC0xODg4LDkgKzE2NzcsNiBAQCBGQUlM
RUQ6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KLQotCiAvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgQ29tcGlsZSBzZXF1ZW5jZSBvZiBh
bHRlcm5hdGl2ZXMgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCkBAIC0xOTE4LDIwICsxNzA0LDIwIEBAIFJldHVybnM6ICAgICAg
dHJ1ZSBvbiBzdWNjZXNzCiAqLwogCiBzdGF0aWMgYm9vbAotY29tcGlsZUJyYWNrZXQoaW50IG9w
dGlvbnMsIGludCogYnJhY2tldHMsIHVzY2hhcioqIGNvZGVwdHIsCitjb21waWxlQnJhY2tldChp
bnQgb3B0aW9ucywgaW50KiBicmFja2V0cywgdW5zaWduZWQgY2hhcioqIGNvZGVwdHIsCiAgICAg
Y29uc3QgVUNoYXIqKiBwdHJwdHIsIGNvbnN0IFVDaGFyKiBwYXR0ZXJuRW5kLCBFcnJvckNvZGUq
IGVycm9yY29kZXB0ciwgaW50IHNraXBieXRlcywKICAgICBpbnQqIGZpcnN0Ynl0ZXB0ciwgaW50
KiByZXFieXRlcHRyLCBDb21waWxlRGF0YSYgY2QpCiB7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9
ICpwdHJwdHI7Ci0gICAgdXNjaGFyKiBjb2RlID0gKmNvZGVwdHI7Ci0gICAgdXNjaGFyKiBsYXN0
X2JyYW5jaCA9IGNvZGU7Ci0gICAgdXNjaGFyKiBzdGFydF9icmFja2V0ID0gY29kZTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBjb2RlID0gKmNvZGVwdHI7CisgICAgdW5zaWduZWQgY2hhciogbGFzdF9i
cmFuY2ggPSBjb2RlOworICAgIHVuc2lnbmVkIGNoYXIqIHN0YXJ0X2JyYWNrZXQgPSBjb2RlOwog
ICAgIGludCBmaXJzdGJ5dGUgPSBSRVFfVU5TRVQ7CiAgICAgaW50IHJlcWJ5dGUgPSBSRVFfVU5T
RVQ7CiAgICAgCiAgICAgLyogT2Zmc2V0IGlzIHNldCB6ZXJvIHRvIG1hcmsgdGhhdCB0aGlzIGJy
YWNrZXQgaXMgc3RpbGwgb3BlbiAqLwogICAgIAotICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQo
Y29kZSwgMSwgMCk7CisgICAgcHV0TGlua1ZhbHVlQWxsb3daZXJvKGNvZGUgKyAxLCAwKTsKICAg
ICBjb2RlICs9IDEgKyBMSU5LX1NJWkUgKyBza2lwYnl0ZXM7CiAgICAgCiAgICAgLyogTG9vcCBm
b3IgZWFjaCBhbHRlcm5hdGl2ZSBicmFuY2ggKi8KQEAgLTE5OTcsOCArMTc4Myw4IEBAIGNvbXBp
bGVCcmFja2V0KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAgICAgICAgaWYgKHB0ciA+PSBw
YXR0ZXJuRW5kIHx8ICpwdHIgIT0gJ3wnKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gY29k
ZSAtIGxhc3RfYnJhbmNoOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGludCBw
cmV2X2xlbmd0aCA9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQobGFzdF9icmFuY2gsIDEpOwotICAg
ICAgICAgICAgICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQobGFzdF9icmFuY2gsIDEsIGxlbmd0
aCk7CisgICAgICAgICAgICAgICAgaW50IHByZXZfbGVuZ3RoID0gZ2V0TGlua1ZhbHVlQWxsb3da
ZXJvKGxhc3RfYnJhbmNoICsgMSk7CisgICAgICAgICAgICAgICAgcHV0TGlua1ZhbHVlKGxhc3Rf
YnJhbmNoICsgMSwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBsZW5ndGggPSBwcmV2X2xlbmd0
aDsKICAgICAgICAgICAgICAgICBsYXN0X2JyYW5jaCAtPSBsZW5ndGg7CiAgICAgICAgICAgICB9
IHdoaWxlIChsZW5ndGggPiAwKTsKQEAgLTIwMDYsNyArMTc5Miw3IEBAIGNvbXBpbGVCcmFja2V0
KGludCBvcHRpb25zLCBpbnQqIGJyYWNrZXQKICAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGtl
dCAqLwogICAgICAgICAgICAgCiAgICAgICAgICAgICAqY29kZSA9IE9QX0tFVDsKLSAgICAgICAg
ICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSwgY29kZSAtIHN0YXJ0X2JyYWNrZXQp
OworICAgICAgICAgICAgcHV0TGlua1ZhbHVlKGNvZGUgKyAxLCBjb2RlIC0gc3RhcnRfYnJhY2tl
dCk7CiAgICAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8qIFNldCB2YWx1ZXMgdG8gcGFzcyBiYWNrICovCkBAIC0yMDI0LDcgKzE4MTAs
NyBAQCBjb21waWxlQnJhY2tldChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0CiAgICAgICAgICB6
ZXJvIG9mZnNldCB1bnRpbCBpdCBpcyBjbG9zZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0byBkZXRl
Y3QgcmVjdXJzaW9uLiAqLwogICAgICAgICAKICAgICAgICAgKmNvZGUgPSBPUF9BTFQ7Ci0gICAg
ICAgIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSwgY29kZSAtIGxhc3RfYnJhbmNoKTsK
KyAgICAgICAgcHV0TGlua1ZhbHVlKGNvZGUgKyAxLCBjb2RlIC0gbGFzdF9icmFuY2gpOwogICAg
ICAgICBsYXN0X2JyYW5jaCA9IGNvZGU7CiAgICAgICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsK
ICAgICAgICAgcHRyKys7CkBAIC0yMDMyLDcgKzE4MTgsNiBAQCBjb21waWxlQnJhY2tldChpbnQg
b3B0aW9ucywgaW50KiBicmFja2V0CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLQog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAg
ICAgICAgQ2hlY2sgZm9yIGFuY2hvcmVkIGV4cHJlc3Npb24gICAgICAgICAqCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjA1MCwyNSArMTgz
NSwyNSBAQCBBcmd1bWVudHM6CiAgIGJhY2tyZWZNYXAgICAgdGhlIGJhY2sgcmVmZXJlbmNlIGJp
dG1hcAogKi8KIAotc3RhdGljIGJvb2wgYnJhbmNoSXNBbmNob3JlZChjb25zdCB1c2NoYXIqIGNv
ZGUpCitzdGF0aWMgYm9vbCBicmFuY2hJc0FuY2hvcmVkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNv
ZGUpCiB7Ci0gICAgY29uc3QgdXNjaGFyKiBzY29kZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGUo
Y29kZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50
T3Bjb2RlKGNvZGUpOwogICAgIGludCBvcCA9ICpzY29kZTsKIAogICAgIC8qIEJyYWNrZXRzICov
Ci0gICAgaWYgKG9wID49IE9QX0JSQSB8fCBvcCA9PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05D
RSkKKyAgICBpZiAob3AgPj0gT1BfQlJBIHx8IG9wID09IE9QX0FTU0VSVCkKICAgICAgICAgcmV0
dXJuIGJyYWNrZXRJc0FuY2hvcmVkKHNjb2RlKTsKIAogICAgIC8qIENoZWNrIGZvciBleHBsaWNp
dCBhbmNob3JpbmcgKi8gICAgCiAgICAgcmV0dXJuIG9wID09IE9QX0NJUkM7CiB9CiAKLXN0YXRp
YyBib29sIGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVzY2hhciogY29kZSkKK3N0YXRpYyBib29s
IGJyYWNrZXRJc0FuY2hvcmVkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUpCiB7CiAgICAgZG8g
ewogICAgICAgICBpZiAoIWJyYW5jaElzQW5jaG9yZWQoY29kZSArIDEgKyBMSU5LX1NJWkUpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVl
QXRPZmZzZXQoY29kZSwgMSk7CisgICAgICAgIGNvZGUgKz0gZ2V0TGlua1ZhbHVlKGNvZGUgKyAx
KTsKICAgICB9IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOyAgIC8qIExvb3AgZm9yIGVhY2ggYWx0
ZXJuYXRpdmUgKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOTUsMjIgKzE4ODAsMjIgQEAg
QXJndW1lbnRzOgogICBiYWNrcmVmTWFwICAgIHRoZSBiYWNrIHJlZmVyZW5jZSBiaXRtYXAKICov
CiAKLXN0YXRpYyBib29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVzY2hhciogY29kZSwg
dW5zaWduZWQgY2FwdHVyZU1hcCwgdW5zaWduZWQgYmFja3JlZk1hcCkKK3N0YXRpYyBib29sIGJy
YW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIHVuc2lnbmVkIGNh
cHR1cmVNYXAsIHVuc2lnbmVkIGJhY2tyZWZNYXApCiB7Ci0gICAgY29uc3QgdXNjaGFyKiBzY29k
ZSA9IGZpcnN0U2lnbmlmaWNhbnRPcENvZGUoY29kZSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hh
ciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3Bjb2RlKGNvZGUpOwogICAgIGludCBvcCA9ICpz
Y29kZTsKICAgICAKICAgICAvKiBDYXB0dXJpbmcgYnJhY2tldHMgKi8KICAgICBpZiAob3AgPiBP
UF9CUkEpIHsKICAgICAgICAgaW50IGNhcHR1cmVOdW0gPSBvcCAtIE9QX0JSQTsKICAgICAgICAg
aWYgKGNhcHR1cmVOdW0gPiBFWFRSQUNUX0JBU0lDX01BWCkKLSAgICAgICAgICAgIGNhcHR1cmVO
dW0gPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc2NvZGUsIDIgKyBMSU5LX1NJWkUpOwor
ICAgICAgICAgICAgY2FwdHVyZU51bSA9IGdldDJCeXRlVmFsdWUoc2NvZGUgKyAyICsgTElOS19T
SVpFKTsKICAgICAgICAgaW50IGJyYWNrZXRNYXNrID0gKGNhcHR1cmVOdW0gPCAzMikgPyAoMSA8
PCBjYXB0dXJlTnVtKSA6IDE7CiAgICAgICAgIHJldHVybiBicmFja2V0TmVlZHNMaW5lU3RhcnQo
c2NvZGUsIGNhcHR1cmVNYXAgfCBicmFja2V0TWFzaywgYmFja3JlZk1hcCk7CiAgICAgfQogICAg
IAogICAgIC8qIE90aGVyIGJyYWNrZXRzICovCi0gICAgaWYgKG9wID09IE9QX0JSQSB8fCBvcCA9
PSBPUF9BU1NFUlQgfHwgb3AgPT0gT1BfT05DRSkKKyAgICBpZiAob3AgPT0gT1BfQlJBIHx8IG9w
ID09IE9QX0FTU0VSVCkKICAgICAgICAgcmV0dXJuIGJyYWNrZXROZWVkc0xpbmVTdGFydChzY29k
ZSwgY2FwdHVyZU1hcCwgYmFja3JlZk1hcCk7CiAgICAgCiAgICAgLyogLiogbWVhbnMgInN0YXJ0
IGF0IHN0YXJ0IG9yIGFmdGVyIFxuIiBpZiBpdCBpc24ndCBpbiBicmFja2V0cyB0aGF0CkBAIC0y
MTIzLDEyICsxOTA4LDEyIEBAIHN0YXRpYyBib29sIGJyYW5jaE5lZWRzTGluZVN0YXJ0KGNvbnN0
IHUKICAgICByZXR1cm4gb3AgPT0gT1BfQ0lSQzsKIH0KIAotc3RhdGljIGJvb2wgYnJhY2tldE5l
ZWRzTGluZVN0YXJ0KGNvbnN0IHVzY2hhciogY29kZSwgdW5zaWduZWQgY2FwdHVyZU1hcCwgdW5z
aWduZWQgYmFja3JlZk1hcCkKK3N0YXRpYyBib29sIGJyYWNrZXROZWVkc0xpbmVTdGFydChjb25z
dCB1bnNpZ25lZCBjaGFyKiBjb2RlLCB1bnNpZ25lZCBjYXB0dXJlTWFwLCB1bnNpZ25lZCBiYWNr
cmVmTWFwKQogewogICAgIGRvIHsKICAgICAgICAgaWYgKCFicmFuY2hOZWVkc0xpbmVTdGFydChj
b2RlICsgMSArIExJTktfU0laRSwgY2FwdHVyZU1hcCwgYmFja3JlZk1hcCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvZGUgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChj
b2RlLCAxKTsKKyAgICAgICAgY29kZSArPSBnZXRMaW5rVmFsdWUoY29kZSArIDEpOwogICAgIH0g
d2hpbGUgKCpjb2RlID09IE9QX0FMVCk7ICAvKiBMb29wIGZvciBlYWNoIGFsdGVybmF0aXZlICov
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMTUzLDkgKzE5MzgsOSBAQCBBcmd1bWVudHM6CiBS
ZXR1cm5zOiAgICAgLTEgb3IgdGhlIGZpeGVkIGZpcnN0IGNoYXIKICovCiAKLXN0YXRpYyBpbnQg
YnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIoY29uc3QgdXNjaGFyKiBjb2RlLCBib29s
IGluYXNzZXJ0KQorc3RhdGljIGludCBicmFuY2hGaW5kRmlyc3RBc3NlcnRlZENoYXJhY3Rlcihj
b25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlLCBib29sIGluYXNzZXJ0KQogewotICAgIGNvbnN0IHVz
Y2hhciogc2NvZGUgPSBmaXJzdFNpZ25pZmljYW50T3BDb2RlU2tpcHBpbmdBc3NlcnRpb25zKGNv
ZGUpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNjb2RlID0gZmlyc3RTaWduaWZpY2FudE9w
Y29kZVNraXBwaW5nQXNzZXJ0aW9ucyhjb2RlKTsKICAgICBpbnQgb3AgPSAqc2NvZGU7CiAgICAg
CiAgICAgaWYgKG9wID49IE9QX0JSQSkKQEAgLTIxNjcsNyArMTk1Miw2IEBAIHN0YXRpYyBpbnQg
YnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWMKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE9QX0JSQToKICAgICAgICAgY2FzZSBPUF9BU1NFUlQ6Ci0gICAgICAgIGNhc2UgT1BfT05DRToK
ICAgICAgICAgICAgIHJldHVybiBicmFja2V0RmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWN0ZXIoc2Nv
ZGUsIG9wID09IE9QX0FTU0VSVCk7CiAKICAgICAgICAgY2FzZSBPUF9FWEFDVDoKQEAgLTIxODYs
NyArMTk3MCw3IEBAIHN0YXRpYyBpbnQgYnJhbmNoRmluZEZpcnN0QXNzZXJ0ZWRDaGFyYWMKICAg
ICB9CiB9CiAKLXN0YXRpYyBpbnQgYnJhY2tldEZpbmRGaXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNv
bnN0IHVzY2hhciogY29kZSwgYm9vbCBpbmFzc2VydCkKK3N0YXRpYyBpbnQgYnJhY2tldEZpbmRG
aXJzdEFzc2VydGVkQ2hhcmFjdGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGUsIGJvb2wgaW5h
c3NlcnQpCiB7CiAgICAgaW50IGMgPSAtMTsKICAgICBkbyB7CkBAIC0yMTk3LDcgKzE5ODEsNyBA
QCBzdGF0aWMgaW50IGJyYWNrZXRGaW5kRmlyc3RBc3NlcnRlZENoYXJhCiAgICAgICAgICAgICBj
ID0gZDsKICAgICAgICAgZWxzZSBpZiAoYyAhPSBkKQogICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICBjb2RlICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoY29kZSwgMSk7CisgICAgICAg
IGNvZGUgKz0gZ2V0TGlua1ZhbHVlKGNvZGUgKyAxKTsKICAgICB9IHdoaWxlICgqY29kZSA9PSBP
UF9BTFQpOwogICAgIHJldHVybiBjOwogfQpAQCAtMjIxNyw3ICsyMDAxLDcgQEAgc3RhdGljIGlu
dCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgIGludCBsYXN0aXRlbWxlbmd0aCA9
IDA7CiAgICAgdW5zaWduZWQgYnJhc3RhY2twdHIgPSAwOwogICAgIGludCBicmFzdGFja1tCUkFT
VEFDS19TSVpFXTsKLSAgICB1c2NoYXIgYnJhbGVuc3RhY2tbQlJBU1RBQ0tfU0laRV07CisgICAg
dW5zaWduZWQgY2hhciBicmFsZW5zdGFja1tCUkFTVEFDS19TSVpFXTsKICAgICBpbnQgYnJhY291
bnQgPSAwOwogICAgIAogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSAoY29uc3QgVUNoYXIqKShwYXR0
ZXJuIC0gMSk7CkBAIC0yMjMyLDcgKzIwMTYsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBp
bGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgY2hhcmFjdGVyIHR5cGUuICovCiAKICAgICAg
ICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZwdHIs
IHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgCkBAIC0yMjQzLDggKzIwMjcs
OCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoYyA+IDEyNykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKSBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBranNfcGNyZV91dGY4X3RhYmxlMV9zaXplOyBp
KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0ga2pzX3BjcmVfdXRmOF90
YWJsZTFbaV0pIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0aXRlbWxlbmd0aCArPSBpOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yMjY2LDggKzIwNTAsOCBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBp
bGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZudW0gPiBjZC50b3Bf
YmFja3JlZikKICAgICAgICAgICAgICAgICAgICAgICAgIGNkLnRvcF9iYWNrcmVmID0gcmVmbnVt
OwogICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMjsgICAvKiBGb3Igc2luZ2xlIGJhY2sg
cmVmZXJlbmNlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVja05leHRDaGFy
KHB0ciwgcGF0dGVybkVuZCwgJ3snKSAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIgKyAyLCBwYXR0
ZXJuRW5kKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291
bnRzKHB0ciArIDIsICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzYWZlbHlDaGVja05leHRDaGFyKHB0ciwgcGF0dGVybkVuZCwg
J3snKSAmJiBpc0NvdW50ZWRSZXBlYXQocHRyICsgMiwgcGF0dGVybkVuZCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRSZXBlYXRDb3VudHMocHRyICsgMiwgJm1pblJlcGVh
dHMsICZtYXhSZXBlYXRzLCAmZXJyb3Jjb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlcnJvcmNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5SZXBlYXRzID09IDAgJiYgKG1heFJlcGVhdHMg
PT0gMSB8fCBtYXhSZXBlYXRzID09IC0xKSkgfHwKQEAgLTIyOTgsOSArMjA4Miw5IEBAIHN0YXRp
YyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICBjbGFzcywg
b3IgYmFjayByZWZlcmVuY2UuICovCiAKICAgICAgICAgICAgIGNhc2UgJ3snOgotICAgICAgICAg
ICAgICAgIGlmICghaXNfY291bnRlZF9yZXBlYXQocHRyKzEsIHBhdHRlcm5FbmQpKQorICAgICAg
ICAgICAgICAgIGlmICghaXNDb3VudGVkUmVwZWF0KHB0ciArIDEsIHBhdHRlcm5FbmQpKQogICAg
ICAgICAgICAgICAgICAgICBnb3RvIE5PUk1BTF9DSEFSOwotICAgICAgICAgICAgICAgIHB0ciA9
IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJm1pblJlcGVhdHMsICZtYXhSZXBlYXRzLCAmZXJy
b3Jjb2RlKTsKKyAgICAgICAgICAgICAgICBwdHIgPSByZWFkUmVwZWF0Q291bnRzKHB0ciArIDEs
ICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29kZSk7CiAgICAgICAgICAgICAgICAg
aWYgKGVycm9yY29kZSAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgICAgICAgICAgCkBAIC0yMzY1LDcgKzIxNDksNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNv
bXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBlc2Nh
cGVzICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoKnB0
ciA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tfZXNjYXBlKCZw
dHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2Rl
LCBicmFjb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2Rl
ICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0yNDAwLDcgKzIxODQsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0
ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIg
Y29uc3QgKmh5cHRyID0gcHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNh
ZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAnXFwnKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3Vu
dCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjaGVja0VzY2Fw
ZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yNDIxLDcgKzIyMDUsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBp
bGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZCA+
IDI1NSB8fCAoaWdub3JlQ2FzZSAmJiBkID4gMTI3KSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNjaGFyIGJ1ZmZlcls2XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNl07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghY2xhc3NfdXRmOCkgICAgICAgICAvKiBBbGxvdyBmb3IgWENMQVNTIG92ZXJo
ZWFkICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjggPSB0cnVlOwpAQCAtMjQzOCw3ICsyMjIy
LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9jYywgb2NkOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNjID0gYzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvcmlnZCA9IGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoZ2V0X290aGVyY2FzZV9yYW5nZSgmY2MsIG9yaWdkLCAmb2NjLCAmb2Nk
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGdldE90aGVy
Y2FzZVJhbmdlKCZjYywgb3JpZ2QsICZvY2MsICZvY2QpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9jYyA+PSBjICYmIG9jZCA8PSBkKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBTa2lwIGVt
YmVkZGVkICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0y
NDU1LDE0ICsyMjM5LDE0IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVu
Z3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbiBleHRyYSBpdGVtIGlzIG5lZWRlZCAq
LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxICsgX3BjcmVfb3JkMnV0Zjgo
b2NjLCBidWZmZXIpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KG9jYyA9PSBvY2QpID8gMCA6IF9wY3JlX29yZDJ1dGY4KG9jZCwgYnVmZmVyKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDEgKyBlbmNvZGVVVEY4
KG9jYywgYnVmZmVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KChvY2MgPT0gb2NkKSA/IDAgOiBlbmNvZGVVVEY4KG9jZCwgYnVmZmVyKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIFRoZSBsZW5ndGggb2YgdGhlIChwb3NzaWJseSBleHRlbmRlZCkg
cmFuZ2UgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxICsgX3BjcmVfb3JkMnV0ZjgoYywgYnVmZmVy
KSArIF9wY3JlX29yZDJ1dGY4KGQsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCArPSAxICsgZW5jb2RlVVRGOChjLCBidWZmZXIpICsgZW5jb2RlVVRGOChk
LCBidWZmZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI0NzQsMTQgKzIy
NTgsMTQgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPiAyNTUgfHwgKGlnbm9yZUNhc2UgJiYgYyA+
IDEyNykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzY2hhciBidWZmZXJb
Nl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVy
WzZdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19vcHRjb3VudCA9IDEw
OyAgICAgLyogRW5zdXJlID4gMSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNsYXNzX3V0ZjgpICAgICAgICAgLyogQWxsb3cgZm9yIFhDTEFTUyBvdmVyaGVhZCAqLwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc191dGY4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCArPSBMSU5LX1NJWkUgKyAyOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAr
PSAoaWdub3JlQ2FzZSA/IDIgOiAxKSAqICgxICsgX3BjcmVfb3JkMnV0ZjgoYywgYnVmZmVyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAoaWdub3JlQ2FzZSA/
IDIgOiAxKSAqICgxICsgZW5jb2RlVVRGOChjLCBidWZmZXIpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTI1MDcsOCArMjI5MSw4IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQ
YXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAgICAgLyogQSByZXBlYXQgbmVlZHMgZWl0aGVy
IDEgb3IgNSBieXRlcy4gSWYgaXQgaXMgYSBwb3NzZXNzaXZlIHF1YW50aWZpZXIsCiAgICAgICAg
ICAgICAgICAgICAgICB3ZSBhbHNvIG5lZWQgZXh0cmEgZm9yIHdyYXBwaW5nIHRoZSB3aG9sZSB0
aGluZyBpbiBhIHN1Yi1wYXR0ZXJuLiAqLwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAneycp
ICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0cisyLCBwYXR0ZXJuRW5kKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluUmVwZWF0cywg
Jm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZWx5
Q2hlY2tOZXh0Q2hhcihwdHIsIHBhdHRlcm5FbmQsICd7JykgJiYgaXNDb3VudGVkUmVwZWF0KHB0
ciArIDIsIHBhdHRlcm5FbmQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSByZWFk
UmVwZWF0Q291bnRzKHB0ciArIDIsICZtaW5SZXBlYXRzLCAmbWF4UmVwZWF0cywgJmVycm9yY29k
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChtaW5SZXBlYXRzID09IDAgJiYgKG1heFJlcGVhdHMgPT0gMSB8fCBtYXhSZXBlYXRzID09
IC0xKSkgfHwKQEAgLTI1MzcsMTAgKzIzMjEsMTAgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21w
aWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChz
YWZlbHlDaGVja05leHRDaGFyKHB0ciwgcGF0dGVybkVuZCwgJz8nKSkgewogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGMgPSAocHRyICsgMiA8IHBhdHRlcm5FbmQgPyBwdHJbMl0gOiAwKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbi1yZWZlcmVuY2luZyBncm91cHMg
YW5kIGxvb2thaGVhZHMganVzdCBtb3ZlIHRoZSBwb2ludGVyIG9uLCBhbmQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlbiBiZWhhdmUgbGlrZSBhIG5vbi1zcGVjaWFsIGJyYWNrZXQs
IGV4Y2VwdCB0aGF0IHRoZXkgZG9uJ3QgaW5jcmVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBjb3VudCBvZiBleHRyYWN0aW5nIGJyYWNrZXRzLiBEaXR0byBmb3IgdGhlICJv
bmNlIG9ubHkiIGJyYWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlz
IGluIFBlcmwgZnJvbSB2ZXJzaW9uIDUuMDA1LiAqLworICAgICAgICAgICAgICAgICAgICAgICAg
LyogTm9uLXJlZmVyZW5jaW5nIGdyb3VwcyBhbmQgbG9va2FoZWFkcyBqdXN0IG1vdmUgdGhlIHBv
aW50ZXIgb24sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gYmVoYXZlIGxpa2Ug
YSBub24tc3BlY2lhbCBicmFja2V0LCBleGNlcHQgdGhhdCB0aGV5IGRvbid0IGluY3JlbWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3VudCBvZiBleHRyYWN0aW5nIGJyYWNrZXRz
LiBEaXR0byBmb3IgdGhlICJvbmNlIG9ubHkiIGJyYWNrZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpY2ggaXMgaW4gUGVybCBmcm9tIHZlcnNpb24gNS4wMDUuICovCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc6JzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOgpAQCAtMjU0OCwxMCArMjMzMiwxMCBAQCBz
dGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHRyICs9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogRWxzZSBsb29wIGNoZWNraW5nIHZhbGlkIG9wdGlvbnMgdW50aWwgKSBpcyBtZXQuIEFu
eXRoaW5nIGVsc2UgaXMgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIElm
IHdlIGFyZSB3aXRob3V0IGFueSBicmFja2V0cywgaS5lLiBhdCB0b3AgbGV2ZWwsIHRoZSBzZXR0
aW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3QgYXMgaWYgc3BlY2lmaWVkIGlu
IHRoZSBvcHRpb25zLCBzbyBtYXNzYWdlIHRoZSBvcHRpb25zIGltbWVkaWF0ZWx5LgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
IHdpdGggUGVybCA1LjAwNC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgbG9v
cCBjaGVja2luZyB2YWxpZCBvcHRpb25zIHVudGlsICkgaXMgbWV0LiBBbnl0aGluZyBlbHNlIGlz
IGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIElmIHdlIGFyZSB3aXRob3V0IGFu
eSBicmFja2V0cywgaS5lLiBhdCB0b3AgbGV2ZWwsIHRoZSBzZXR0aW5ncworICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdCBhcyBpZiBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMsIHNvIG1hc3Nh
Z2UgdGhlIG9wdGlvbnMgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgVGhp
cyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwgNS4wMDQuICovCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IEVSUjEyOwpAQCAtMjYw
NCwxMSArMjM4OCwxMSBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBkdXBsZW5ndGggPSAw
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8qIExlYXZlIHB0ciBhdCB0aGUg
ZmluYWwgY2hhcjsgZm9yIHJlYWRfcmVwZWF0X2NvdW50cyB0aGlzIGhhcHBlbnMKKyAgICAgICAg
ICAgICAgICAvKiBMZWF2ZSBwdHIgYXQgdGhlIGZpbmFsIGNoYXI7IGZvciByZWFkUmVwZWF0Q291
bnRzIHRoaXMgaGFwcGVucwogICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5OyBmb3IgdGhl
IG90aGVycyB3ZSBuZWVkIGFuIGluY3JlbWVudC4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoKHB0ciArIDEgPCBwYXR0ZXJuRW5kKSAmJiAoYyA9IHB0clsxXSkgPT0g
J3snICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0cisyLCBwYXR0ZXJuRW5kKSkgewotICAgICAgICAg
ICAgICAgICAgICBwdHIgPSByZWFkX3JlcGVhdF9jb3VudHMocHRyKzIsICZtaW5SZXBlYXRzLCAm
bWF4UmVwZWF0cywgJmVycm9yY29kZSk7CisgICAgICAgICAgICAgICAgaWYgKChwdHIgKyAxIDwg
cGF0dGVybkVuZCkgJiYgKGMgPSBwdHJbMV0pID09ICd7JyAmJiBpc0NvdW50ZWRSZXBlYXQocHRy
ICsgMiwgcGF0dGVybkVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHRyID0gcmVhZFJlcGVh
dENvdW50cyhwdHIgKyAyLCAmbWluUmVwZWF0cywgJm1heFJlcGVhdHMsICZlcnJvcmNvZGUpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnKicpIHsKQEAg
LTI2NzEsOCArMjQ1NSw4IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVu
Z3QKIAogICAgICAgICAgICAgICAgIGlmIChjID4gMTI3KSB7CiAgICAgICAgICAgICAgICAgICAg
IGludCBpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3BjcmVfdXRmOF90
YWJsZTFfc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPD0gX3BjcmVf
dXRmOF90YWJsZTFbaV0pCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBranNf
cGNyZV91dGY4X3RhYmxlMV9zaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YyA8PSBranNfcGNyZV91dGY4X3RhYmxlMVtpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGk7CiAgICAgICAgICAgICAg
ICAgICAgIGxhc3RpdGVtbGVuZ3RoICs9IGk7CkBAIC0yNzA4LDkgKzI0OTIsOSBAQCBSZXR1cm5z
OiAgICAgICAgcG9pbnRlciB0byBjb21waWxlZCBkYXRhCiAgICAgICAgICAgICAgICAgd2l0aCBl
cnJvcnB0ciBhbmQgZXJyb3JvZmZzZXQgc2V0CiAqLwogCi1zdGF0aWMgSlNSZWdFeHAqIHJldHVy
bkVycm9yKEVycm9yQ29kZSBlcnJvcmNvZGUsIGNvbnN0IGNoYXIqKiBlcnJvcnB0cikKK3N0YXRp
YyBpbmxpbmUgSlNSZWdFeHAqIHJldHVybkVycm9yKEVycm9yQ29kZSBlcnJvcmNvZGUsIGNvbnN0
IGNoYXIqKiBlcnJvcnB0cikKIHsKLSAgICAqZXJyb3JwdHIgPSBlcnJvcl90ZXh0KGVycm9yY29k
ZSk7CisgICAgKmVycm9ycHRyID0gZXJyb3JUZXh0KGVycm9yY29kZSk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTI3NDUsNyArMjUyOSw3IEBAIEpTUmVnRXhwKiBqc1JlZ0V4cENvbXBpbGUoY29u
c3QgVUNoYXIqIHAKICAgICAvKiBUaGUgc3RhcnRpbmcgcG9pbnRzIG9mIHRoZSBuYW1lL251bWJl
ciB0cmFuc2xhdGlvbiB0YWJsZSBhbmQgb2YgdGhlIGNvZGUgYXJlCiAgICAgIHBhc3NlZCBhcm91
bmQgaW4gdGhlIGNvbXBpbGUgZGF0YSBibG9jay4gKi8KICAgICAKLSAgICBjb25zdCB1c2NoYXIq
IGNvZGVTdGFydCA9IChjb25zdCB1c2NoYXIqKShyZSArIDEpOworICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGNvZGVTdGFydCA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikocmUgKyAxKTsKICAgICBj
ZC5zdGFydF9jb2RlID0gY29kZVN0YXJ0OwogICAgIGNkLnN0YXJ0X3BhdHRlcm4gPSAoY29uc3Qg
VUNoYXIqKXBhdHRlcm47CiAgICAgCkBAIC0yNzU1LDcgKzI1MzksNyBAQCBKU1JlZ0V4cCoganNS
ZWdFeHBDb21waWxlKGNvbnN0IFVDaGFyKiBwCiAgICAgCiAgICAgY29uc3QgVUNoYXIqIHB0ciA9
IChjb25zdCBVQ2hhciopcGF0dGVybjsKICAgICBjb25zdCBVQ2hhciogcGF0dGVybkVuZCA9IHBh
dHRlcm4gKyBwYXR0ZXJuTGVuZ3RoOwotICAgIHVzY2hhciogY29kZSA9ICh1c2NoYXIqKWNvZGVT
dGFydDsKKyAgICB1bnNpZ25lZCBjaGFyKiBjb2RlID0gKHVuc2lnbmVkIGNoYXIqKWNvZGVTdGFy
dDsKICAgICBpbnQgZmlyc3RieXRlLCByZXFieXRlOwogICAgIGludCBicmFja2V0Q291bnQgPSAw
OwogICAgIGlmICghY2QubmVlZE91dGVyQnJhY2tldCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Bj
cmUvcGNyZV9leGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVf
ZXhlYy5jcHAJKHJldmlzaW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4
ZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBAIHN0cnVjdCBNYXRjaEZyYW1l
IHsKICAgICAvKiBGdW5jdGlvbiBhcmd1bWVudHMgdGhhdCBtYXkgY2hhbmdlICovCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgY29uc3QgVUNoYXIqIHN1YmplY3RQdHI7Ci0gICAgICAgIGNvbnN0IHVz
Y2hhciogaW5zdHJ1Y3Rpb25QdHI7Ci0gICAgICAgIGludCBvZmZzZXRfdG9wOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldFRv
cDsKICAgICAgICAgY29uc3QgVUNoYXIqIHN1YnBhdHRlcm5TdGFydDsKICAgICB9IGFyZ3M7CiAg
ICAgCkBAIC04MywxMiArODMsMTIgQEAgc3RydWN0IE1hdGNoRnJhbWUgewogICAgICBzdGFjay1i
YXNlZCBsb2NhbCB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlIHRvIHVzZS4gIEluc3RlYWQgd2UgaGF2
ZSB0bwogICAgICBzdG9yZSBsb2NhbCB2YXJpYWJsZXMgb24gdGhlIGN1cnJlbnQgTWF0Y2hGcmFt
ZS4gKi8KICAgICBzdHJ1Y3QgewotICAgICAgICBjb25zdCB1c2NoYXIqIGRhdGE7Ci0gICAgICAg
IGNvbnN0IHVzY2hhciogc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQ7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0YXJ0T2ZS
ZXBlYXRpbmdCcmFja2V0OwogICAgICAgICBjb25zdCBVQ2hhciogc3ViamVjdFB0ckF0U3RhcnRP
Zkluc3RydWN0aW9uOyAvLyBTZXZlcmFsIGluc3RydXRpb25zIHN0YXNoIGF3YXkgYSBzdWJqZWN0
UHRyIGhlcmUgZm9yIGxhdGVyIGNvbXBhcmUKLSAgICAgICAgY29uc3QgdXNjaGFyKiBpbnN0cnVj
dGlvblB0ckF0U3RhcnRPZk9uY2U7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluc3Ry
dWN0aW9uUHRyQXRTdGFydE9mT25jZTsKICAgICAgICAgCi0gICAgICAgIGludCByZXBlYXRfb3Ro
ZXJjYXNlOworICAgICAgICBpbnQgcmVwZWF0T3RoZXJjYXNlOwogICAgICAgICAKICAgICAgICAg
aW50IGN0eXBlOwogICAgICAgICBpbnQgZmM7CkBAIC05Nyw5ICs5Nyw5IEBAIHN0cnVjdCBNYXRj
aEZyYW1lIHsKICAgICAgICAgaW50IG1heDsKICAgICAgICAgaW50IG51bWJlcjsKICAgICAgICAg
aW50IG9mZnNldDsKLSAgICAgICAgaW50IHNhdmVfb2Zmc2V0MTsKLSAgICAgICAgaW50IHNhdmVf
b2Zmc2V0MjsKLSAgICAgICAgaW50IHNhdmVfb2Zmc2V0MzsKKyAgICAgICAgaW50IHNhdmVPZmZz
ZXQxOworICAgICAgICBpbnQgc2F2ZU9mZnNldDI7CisgICAgICAgIGludCBzYXZlT2Zmc2V0MzsK
ICAgICAgICAgCiAgICAgICAgIGNvbnN0IFVDaGFyKiBzdWJwYXR0ZXJuU3RhcnQ7CiAgICAgfSBs
b2NhbHM7CkBAIC0xMDksMjQgKzEwOSwzOCBAQCBzdHJ1Y3QgTWF0Y2hGcmFtZSB7CiBkb2luZyB0
cmFkaXRpb25hbCBORkEgbWF0Y2hpbmcsIHNvIHRoYXQgdGhleSBhcmUgdGhyZWFkLXNhZmUuICov
CiAKIHN0cnVjdCBNYXRjaERhdGEgewotICBpbnQqICAgb2Zmc2V0X3ZlY3RvcjsgICAgICAgICAv
KiBPZmZzZXQgdmVjdG9yICovCi0gIGludCAgICBvZmZzZXRfZW5kOyAgICAgICAgICAgIC8qIE9u
ZSBwYXN0IHRoZSBlbmQgKi8KLSAgaW50ICAgIG9mZnNldF9tYXg7ICAgICAgICAgICAgLyogVGhl
IG1heGltdW0gdXNhYmxlIGZvciByZXR1cm4gZGF0YSAqLwotICBib29sICAgb2Zmc2V0X292ZXJm
bG93OyAgICAgICAvKiBTZXQgaWYgdG9vIG1hbnkgZXh0cmFjdGlvbnMgKi8KLSAgY29uc3QgVUNo
YXIqICBzdGFydF9zdWJqZWN0OyAgICAgICAgIC8qIFN0YXJ0IG9mIHRoZSBzdWJqZWN0IHN0cmlu
ZyAqLwotICBjb25zdCBVQ2hhciogIGVuZF9zdWJqZWN0OyAgICAgICAgICAgLyogRW5kIG9mIHRo
ZSBzdWJqZWN0IHN0cmluZyAqLwotICBjb25zdCBVQ2hhciogIGVuZF9tYXRjaF9wdHI7ICAgICAg
ICAgLyogU3ViamVjdCBwb3NpdGlvbiBhdCBlbmQgbWF0Y2ggKi8KLSAgaW50ICAgIGVuZF9vZmZz
ZXRfdG9wOyAgICAgICAgLyogSGlnaHdhdGVyIG1hcmsgYXQgZW5kIG9mIG1hdGNoICovCisgIGlu
dCogICBvZmZzZXRWZWN0b3I7ICAgICAgICAgLyogT2Zmc2V0IHZlY3RvciAqLworICBpbnQgICAg
b2Zmc2V0RW5kOyAgICAgICAgICAgIC8qIE9uZSBwYXN0IHRoZSBlbmQgKi8KKyAgaW50ICAgIG9m
ZnNldE1heDsgICAgICAgICAgICAvKiBUaGUgbWF4aW11bSB1c2FibGUgZm9yIHJldHVybiBkYXRh
ICovCisgIGJvb2wgICBvZmZzZXRPdmVyZmxvdzsgICAgICAgLyogU2V0IGlmIHRvbyBtYW55IGV4
dHJhY3Rpb25zICovCisgIGNvbnN0IFVDaGFyKiAgc3RhcnRTdWJqZWN0OyAgICAgICAgIC8qIFN0
YXJ0IG9mIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBjb25zdCBVQ2hhciogIGVuZFN1YmplY3Q7
ICAgICAgICAgICAvKiBFbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nICovCisgIGNvbnN0IFVDaGFy
KiAgZW5kTWF0Y2hQdHI7ICAgICAgICAgLyogU3ViamVjdCBwb3NpdGlvbiBhdCBlbmQgbWF0Y2gg
Ki8KKyAgaW50ICAgIGVuZE9mZnNldFRvcDsgICAgICAgIC8qIEhpZ2h3YXRlciBtYXJrIGF0IGVu
ZCBvZiBtYXRjaCAqLwogICBib29sICAgbXVsdGlsaW5lOwogICBib29sICAgaWdub3JlQ2FzZTsK
IH07CiAKIC8qIE5vbi1lcnJvciByZXR1cm5zIGZyb20gdGhlIG1hdGNoKCkgZnVuY3Rpb24uIEVy
cm9yIHJldHVybnMgYXJlIGV4dGVybmFsbHkKLWRlZmluZWQgUENSRV9FUlJPUl94eHggY29kZXMs
IHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUuICovCitkZWZpbmVkIGVycm9yIGNvZGVzLCB3aGljaCBh
cmUgYWxsIG5lZ2F0aXZlLiAqLwogCiAjZGVmaW5lIE1BVENIX01BVENIICAgICAgICAxCiAjZGVm
aW5lIE1BVENIX05PTUFUQ0ggICAgICAwCiAKKy8qIFRoZSBtYXhpbXVtIHJlbWFpbmluZyBsZW5n
dGggb2Ygc3ViamVjdCB3ZSBhcmUgcHJlcGFyZWQgdG8gc2VhcmNoIGZvciBhCityZXFfYnl0ZSBt
YXRjaC4gKi8KKworI2RlZmluZSBSRVFfQllURV9NQVggMTAwMAorCisvKiBUaGUgYmVsb3cgbGlt
aXQgcmVzdHJpY3RzIHRoZSBudW1iZXIgb2YgcmVjdXJzaXZlIG1hdGNoIGNhbGxzIGluIG9yZGVy
IHRvCitsaW1pdCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3RvcmFnZS4KKyAKK1RoaXMgbGltaXQg
aXMgdGllZCB0byB0aGUgc2l6ZSBvZiBNYXRjaEZyYW1lLiAgUmlnaHQgbm93IHdlIGFsbG93IFBD
UkUgdG8gYWxsb2NhdGUgdXAKK3RvIE1BVENIX1JFQ1VSU0lPTl9MSU1JVCAtIDE2ICogc2l6ZW9m
KE1hdGNoRnJhbWUpIGJ5dGVzIG9mICJzdGFjayIgc3BhY2UgYmVmb3JlIHdlIGdpdmUgdXAuCitD
dXJyZW50bHkgdGhhdCdzIDEwMDAwMCAtIDE2ICogKDIzICogNCkgIH4gOTBNQi4gKi8KKworI2Rl
ZmluZSBNQVRDSF9SRUNVUlNJT05fTElNSVQgMTAwMDAwCisKICNpZmRlZiBERUJVRwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgIERl
YnVnZ2luZyBmdW5jdGlvbiB0byBwcmludCBjaGFycyAgICAgICAqCkBAIC0xMzgsMTQgKzE1Miwx
NCBAQCBzdWJqZWN0IGlmIHRoZSByZXF1ZXN0ZWQuCiBBcmd1bWVudHM6CiAgIHAgICAgICAgICAg
IHBvaW50cyB0byBjaGFyYWN0ZXJzCiAgIGxlbmd0aCAgICAgIG51bWJlciB0byBwcmludAotICBp
c19zdWJqZWN0ICB0cnVlIGlmIHByaW50aW5nIGZyb20gd2l0aGluIG1kLnN0YXJ0X3N1YmplY3QK
LSAgbWQgICAgICAgICAgcG9pbnRlciB0byBtYXRjaGluZyBkYXRhIGJsb2NrLCBpZiBpc19zdWJq
ZWN0IGlzIHRydWUKKyAgaXNTdWJqZWN0ICB0cnVlIGlmIHByaW50aW5nIGZyb20gd2l0aGluIG1k
LnN0YXJ0U3ViamVjdAorICBtZCAgICAgICAgICBwb2ludGVyIHRvIG1hdGNoaW5nIGRhdGEgYmxv
Y2ssIGlmIGlzU3ViamVjdCBpcyB0cnVlCiAqLwogCi1zdGF0aWMgdm9pZCBwY2hhcnMoY29uc3Qg
VUNoYXIqIHAsIGludCBsZW5ndGgsIGJvb2wgaXNfc3ViamVjdCwgY29uc3QgTWF0Y2hEYXRhJiBt
ZCkKK3N0YXRpYyB2b2lkIHBjaGFycyhjb25zdCBVQ2hhciogcCwgaW50IGxlbmd0aCwgYm9vbCBp
c1N1YmplY3QsIGNvbnN0IE1hdGNoRGF0YSYgbWQpCiB7Ci0gICAgaWYgKGlzX3N1YmplY3QgJiYg
bGVuZ3RoID4gbWQuZW5kX3N1YmplY3QgLSBwKQotICAgICAgICBsZW5ndGggPSBtZC5lbmRfc3Vi
amVjdCAtIHA7CisgICAgaWYgKGlzU3ViamVjdCAmJiBsZW5ndGggPiBtZC5lbmRTdWJqZWN0IC0g
cCkKKyAgICAgICAgbGVuZ3RoID0gbWQuZW5kU3ViamVjdCAtIHA7CiAgICAgd2hpbGUgKGxlbmd0
aC0tID4gMCkgewogICAgICAgICBpbnQgYzsKICAgICAgICAgaWYgKGlzcHJpbnQoYyA9ICoocCsr
KSkpCkBAIC0xNTgsOCArMTcyLDYgQEAgc3RhdGljIHZvaWQgcGNoYXJzKGNvbnN0IFVDaGFyKiBw
LCBpbnQgbAogfQogI2VuZGlmCiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICBNYXRjaCBhIGJhY2stcmVmZXJlbmNlICAg
ICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCkBAIC0xNzYsMTIgKzE4OCwxMiBAQCBBcmd1bWVudHM6CiBSZXR1cm5zOiAgICAg
IHRydWUgaWYgbWF0Y2hlZAogKi8KIAotc3RhdGljIGJvb2wgbWF0Y2hfcmVmKGludCBvZmZzZXQs
IGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBpbnQgbGVuZ3RoLCBjb25zdCBNYXRjaERhdGEmIG1k
KQorc3RhdGljIGJvb2wgbWF0Y2hSZWYoaW50IG9mZnNldCwgY29uc3QgVUNoYXIqIHN1YmplY3RQ
dHIsIGludCBsZW5ndGgsIGNvbnN0IE1hdGNoRGF0YSYgbWQpCiB7Ci0gICAgY29uc3QgVUNoYXIq
IHAgPSBtZC5zdGFydF9zdWJqZWN0ICsgbWQub2Zmc2V0X3ZlY3RvcltvZmZzZXRdOworICAgIGNv
bnN0IFVDaGFyKiBwID0gbWQuc3RhcnRTdWJqZWN0ICsgbWQub2Zmc2V0VmVjdG9yW29mZnNldF07
CiAgICAgCiAjaWZkZWYgREVCVUcKLSAgICBpZiAoc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICBpZiAoc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICBwcmludGYo
Im1hdGNoaW5nIHN1YmplY3QgPG51bGw+Iik7CiAgICAgZWxzZSB7CiAgICAgICAgIHByaW50Zigi
bWF0Y2hpbmcgc3ViamVjdCAiKTsKQEAgLTE5NCw3ICsyMDYsNyBAQCBzdGF0aWMgYm9vbCBtYXRj
aF9yZWYoaW50IG9mZnNldCwgY29uc3QgCiAgICAgCiAgICAgLyogQWx3YXlzIGZhaWwgaWYgbm90
IGVub3VnaCBjaGFyYWN0ZXJzIGxlZnQgKi8KICAgICAKLSAgICBpZiAobGVuZ3RoID4gbWQuZW5k
X3N1YmplY3QgLSBzdWJqZWN0UHRyKQorICAgIGlmIChsZW5ndGggPiBtZC5lbmRTdWJqZWN0IC0g
c3ViamVjdFB0cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8qIFNlcGFyYXRl
IHRoZSBjYXNlbGVzc3MgY2FzZSBmb3Igc3BlZWQgKi8KQEAgLTIwMiw3ICsyMTQsNyBAQCBzdGF0
aWMgYm9vbCBtYXRjaF9yZWYoaW50IG9mZnNldCwgY29uc3QgCiAgICAgaWYgKG1kLmlnbm9yZUNh
c2UpIHsKICAgICAgICAgd2hpbGUgKGxlbmd0aC0tID4gMCkgewogICAgICAgICAgICAgVUNoYXIg
YyA9ICpwKys7Ci0gICAgICAgICAgICBpbnQgb3RoZXJjYXNlID0gX3BjcmVfdWNwX290aGVyY2Fz
ZShjKTsKKyAgICAgICAgICAgIGludCBvdGhlcmNhc2UgPSBranNfcGNyZV91Y3Bfb3RoZXJjYXNl
KGMpOwogICAgICAgICAgICAgVUNoYXIgZCA9ICpzdWJqZWN0UHRyKys7CiAgICAgICAgICAgICBp
ZiAoYyAhPSBkICYmIG90aGVyY2FzZSAhPSBkKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTIzOCwzNyArMjUwLDI5IEBAIGEgYml0IG1vcmUgY29kZSBhbmQgbm90aWNlIGlmIHdl
IHVzZSBjb24KIAogI2VuZGlmCiAKLSNkZWZpbmUgQ0hFQ0tfUkVDVVJTSU9OX0xJTUlUIFwKLSAg
ICBpZiAoc3RhY2suc2l6ZSA+PSBNQVRDSF9MSU1JVF9SRUNVUlNJT04pIFwKLSAgICAgICAgcmV0
dXJuIG1hdGNoRXJyb3IoSlNSZWdFeHBFcnJvclJlY3Vyc2lvbkxpbWl0LCBzdGFjayk7Ci0KLSNk
ZWZpbmUgUkVDVVJTRV9XSVRIX1JFVFVSTl9OVU1CRVIobnVtKSBcCi0gICAgQ0hFQ0tfUkVDVVJT
SU9OX0xJTUlUIFwKKyNkZWZpbmUgUkVDVVJTSVZFX01BVENIX0NPTU1PTihudW0pIFwKKyAgICBp
ZiAoc3RhY2suc2l6ZSA+PSBNQVRDSF9SRUNVUlNJT05fTElNSVQpIFwKKyAgICAgICAgcmV0dXJu
IG1hdGNoRXJyb3IoSlNSZWdFeHBFcnJvclJlY3Vyc2lvbkxpbWl0LCBzdGFjayk7IFwKICAgICBn
b3RvIFJFQ1VSU0U7XAotICAgIFJSRVRVUk5fIyNudW06CisgICAgUlJFVFVSTl8jI251bTogXAor
ICAgIHN0YWNrLnBvcEN1cnJlbnRGcmFtZSgpOwogCiAjZGVmaW5lIFJFQ1VSU0lWRV9NQVRDSChu
dW0sIHJhLCByYikgXAote1wKLSAgICBzdGFjay5wdXNoTmV3RnJhbWUoKHJhKSwgKHJiKSwgUk1B
VENIX1dIRVJFKG51bSkpOyBcCi0gICAgUkVDVVJTRV9XSVRIX1JFVFVSTl9OVU1CRVIobnVtKSBc
Ci0gICAgc3RhY2sucG9wQ3VycmVudEZyYW1lKCk7IFwKLX0KKyAgICBkbyB7IFwKKyAgICAgICAg
c3RhY2sucHVzaE5ld0ZyYW1lKChyYSksIChyYiksIFJNQVRDSF9XSEVSRShudW0pKTsgXAorICAg
ICAgICBSRUNVUlNJVkVfTUFUQ0hfQ09NTU9OKG51bSkgXAorICAgIH0gd2hpbGUgKDApCiAKICNk
ZWZpbmUgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKG51bSwgcmEsIHJiKSBcCi17
XAotICAgIHN0YWNrLnB1c2hOZXdGcmFtZSgocmEpLCAocmIpLCBSTUFUQ0hfV0hFUkUobnVtKSk7
IFwKLSAgICBzdGFydE5ld0dyb3VwKHN0YWNrLmN1cnJlbnRGcmFtZSk7IFwKLSAgICBSRUNVUlNF
X1dJVEhfUkVUVVJOX05VTUJFUihudW0pIFwKLSAgICBzdGFjay5wb3BDdXJyZW50RnJhbWUoKTsg
XAotfQorICAgIGRvIHsgXAorICAgICAgICBzdGFjay5wdXNoTmV3RnJhbWUoKHJhKSwgKHJiKSwg
Uk1BVENIX1dIRVJFKG51bSkpOyBcCisgICAgICAgIHN0YXJ0TmV3R3JvdXAoc3RhY2suY3VycmVu
dEZyYW1lKTsgXAorICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfQ09NTU9OKG51bSkgXAorICAgIH0g
d2hpbGUgKDApCiAKICNkZWZpbmUgUlJFVFVSTiBnb3RvIFJSRVRVUk5fTEFCRUwKIAotI2RlZmlu
ZSBSUkVUVVJOX05PX01BVENIIFwKLSAge1wKLSAgICBpc19tYXRjaCA9IGZhbHNlO1wKLSAgICBS
UkVUVVJOO1wKLSAgfQorI2RlZmluZSBSUkVUVVJOX05PX01BVENIIGRvIHsgaXNNYXRjaCA9IGZh
bHNlOyBSUkVUVVJOOyB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgIE1hdGNoIGZyb20gY3VycmVudCBwb3Np
dGlvbiAgICAgICAgICAgICoKQEAgLTI4NCwxMiArMjg4LDEyIEBAIHNhbWUgcmVzcG9uc2UuCiBB
cmd1bWVudHM6CiAgICBzdWJqZWN0UHRyICAgICAgICBwb2ludGVyIGluIHN1YmplY3QKICAgIGlu
c3RydWN0aW9uUHRyICAgICAgIHBvc2l0aW9uIGluIGNvZGUKLSAgIG9mZnNldF90b3AgIGN1cnJl
bnQgdG9wIHBvaW50ZXIKKyAgIG9mZnNldFRvcCAgY3VycmVudCB0b3AgcG9pbnRlcgogICAgbWQg
ICAgICAgICAgcG9pbnRlciB0byAic3RhdGljIiBpbmZvIGZvciB0aGUgbWF0Y2gKIAogUmV0dXJu
czogICAgICAgTUFUQ0hfTUFUQ0ggaWYgbWF0Y2hlZCAgICAgICAgICAgICkgIHRoZXNlIHZhbHVl
cyBhcmUgPj0gMAogICAgICAgICAgICAgICAgTUFUQ0hfTk9NQVRDSCBpZiBmYWlsZWQgdG8gbWF0
Y2ggICkKLSAgICAgICAgICAgICAgIGEgbmVnYXRpdmUgUENSRV9FUlJPUl94eHggdmFsdWUgaWYg
YWJvcnRlZCBieSBhbiBlcnJvciBjb25kaXRpb24KKyAgICAgICAgICAgICAgIGEgbmVnYXRpdmUg
ZXJyb3IgdmFsdWUgaWYgYWJvcnRlZCBieSBhbiBlcnJvciBjb25kaXRpb24KICAgICAgICAgICAg
ICAgICAgKGUuZy4gc3RvcHBlZCBieSByZXBlYXRlZCBjYWxsIG9yIHJlY3Vyc2lvbiBsaW1pdCkK
ICovCiAKQEAgLTMyMSwxMyArMzI1LDEzIEBAIHN0cnVjdCBNYXRjaFN0YWNrIHsKICAgICAgICAg
cmV0dXJuIG5ldyBNYXRjaEZyYW1lOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBwdXNo
TmV3RnJhbWUoY29uc3QgdXNjaGFyKiBpbnN0cnVjdGlvblB0ciwgY29uc3QgVUNoYXIqIHN1YnBh
dHRlcm5TdGFydCwgUmV0dXJuTG9jYXRpb24gcmV0dXJuTG9jYXRpb24pCisgICAgaW5saW5lIHZv
aWQgcHVzaE5ld0ZyYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluc3RydWN0aW9uUHRyLCBjb25z
dCBVQ2hhciogc3VicGF0dGVyblN0YXJ0LCBSZXR1cm5Mb2NhdGlvbiByZXR1cm5Mb2NhdGlvbikK
ICAgICB7CiAgICAgICAgIE1hdGNoRnJhbWUqIG5ld2ZyYW1lID0gYWxsb2NhdGVOZXh0RnJhbWUo
KTsKICAgICAgICAgbmV3ZnJhbWUtPnByZXZpb3VzRnJhbWUgPSBjdXJyZW50RnJhbWU7CiAKICAg
ICAgICAgbmV3ZnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA9IGN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyOwotICAgICAgICBuZXdmcmFtZS0+YXJncy5vZmZzZXRfdG9wID0gY3VycmVudEZyYW1l
LT5hcmdzLm9mZnNldF90b3A7CisgICAgICAgIG5ld2ZyYW1lLT5hcmdzLm9mZnNldFRvcCA9IGN1
cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRUb3A7CiAgICAgICAgIG5ld2ZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb25QdHI7CiAgICAgICAgIG5ld2ZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCA9IHN1YnBhdHRlcm5TdGFydDsKICAgICAgICAgbmV3ZnJhbWUtPnJldHVybkxv
Y2F0aW9uID0gcmV0dXJuTG9jYXRpb247CkBAIC0zNjEsMTMgKzM2NSwxMyBAQCBzdGF0aWMgaW50
IG1hdGNoRXJyb3IoaW50IGVycm9yQ29kZSwgTWF0CiAvKiBHZXQgdGhlIG5leHQgVVRGLTggY2hh
cmFjdGVyLCBub3QgYWR2YW5jaW5nIHRoZSBwb2ludGVyLCBpbmNyZW1lbnRpbmcgbGVuZ3RoCiAg
aWYgdGhlcmUgYXJlIGV4dHJhIGJ5dGVzLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGtub3cgd2Ug
YXJlIGluIFVURi04IG1vZGUuICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRVVEY4Q2hhckFu
ZEluY3JlbWVudExlbmd0aChpbnQmIGMsIGNvbnN0IHVzY2hhciogc3ViamVjdFB0ciwgaW50JiBs
ZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0VVRGOENoYXJBbmRJbmNyZW1lbnRMZW5ndGgoaW50
JiBjLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzdWJqZWN0UHRyLCBpbnQmIGxlbikKIHsKICAgICBj
ID0gKnN1YmplY3RQdHI7CiAgICAgaWYgKChjICYgMHhjMCkgPT0gMHhjMCkgewotICAgICAgICBp
bnQgZ2NhYSA9IF9wY3JlX3V0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBhZGRp
dGlvbmFsIGJ5dGVzICovCisgICAgICAgIGludCBnY2FhID0ga2pzX3BjcmVfdXRmOF90YWJsZTRb
YyAmIDB4M2ZdOyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMgKi8KICAgICAgICAgaW50
IGdjc3MgPSA2ICogZ2NhYTsKLSAgICAgICAgYyA9IChjICYgX3BjcmVfdXRmOF90YWJsZTNbZ2Nh
YV0pIDw8IGdjc3M7CisgICAgICAgIGMgPSAoYyAmIGtqc19wY3JlX3V0ZjhfdGFibGUzW2djYWFd
KSA8PCBnY3NzOwogICAgICAgICBmb3IgKGludCBnY2lpID0gMTsgZ2NpaSA8PSBnY2FhOyBnY2lp
KyspIHsKICAgICAgICAgICAgIGdjc3MgLT0gNjsKICAgICAgICAgICAgIGMgfD0gKHN1YmplY3RQ
dHJbZ2NpaV0gJiAweDNmKSA8PCBnY3NzOwpAQCAtNDAxLDkgKzQwNSw5IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCByZXBlYXRJbmZvcm1hdGlvbkZyb20KICAgICBtYXhpbXVtUmVwZWF0cyA9IG1heGlt
dW1SZXBlYXRzRnJvbUluc3RydWN0aW9uT2Zmc2V0W2luc3RydWN0aW9uT2Zmc2V0XTsKIH0KIAot
c3RhdGljIGludCBtYXRjaChjb25zdCBVQ2hhciogc3ViamVjdFB0ciwgY29uc3QgdXNjaGFyKiBp
bnN0cnVjdGlvblB0ciwgaW50IG9mZnNldF90b3AsIE1hdGNoRGF0YSYgbWQpCitzdGF0aWMgaW50
IG1hdGNoKGNvbnN0IFVDaGFyKiBzdWJqZWN0UHRyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnN0
cnVjdGlvblB0ciwgaW50IG9mZnNldFRvcCwgTWF0Y2hEYXRhJiBtZCkKIHsKLSAgICBpbnQgaXNf
bWF0Y2ggPSBmYWxzZTsKKyAgICBpbnQgaXNNYXRjaCA9IGZhbHNlOwogICAgIGludCBtaW47CiAg
ICAgYm9vbCBtaW5pbWl6ZSA9IGZhbHNlOyAvKiBJbml0aWFsaXphdGlvbiBub3QgcmVhbGx5IG5l
ZWRlZCwgYnV0IHNvbWUgY29tcGlsZXJzIHRoaW5rIHNvLiAqLwogICAgIApAQCAtNDEyLDE0ICs0
MTYsMTQgQEAgc3RhdGljIGludCBtYXRjaChjb25zdCBVQ2hhciogc3ViamVjdFB0cgogICAgIC8q
IFRoZSBvcGNvZGUganVtcCB0YWJsZS4gKi8KICNpZmRlZiBVU0VfQ09NUFVURURfR09UT19GT1Jf
TUFUQ0hfT1BDT0RFX0xPT1AKICNkZWZpbmUgRU1JVF9KVU1QX1RBQkxFX0VOVFJZKG9wY29kZSkg
JiZMQUJFTF9PUF8jI29wY29kZSwKLSAgICBzdGF0aWMgdm9pZCogb3Bjb2RlX2p1bXBfdGFibGVb
MjU2XSA9IHsgRk9SX0VBQ0hfT1BDT0RFKEVNSVRfSlVNUF9UQUJMRV9FTlRSWSkgfTsKKyAgICBz
dGF0aWMgdm9pZCogb3Bjb2RlSnVtcFRhYmxlWzI1Nl0gPSB7IEZPUl9FQUNIX09QQ09ERShFTUlU
X0pVTVBfVEFCTEVfRU5UUlkpIH07CiAjdW5kZWYgRU1JVF9KVU1QX1RBQkxFX0VOVFJZCiAjZW5k
aWYKICAgICAKICAgICAvKiBPbmUtdGltZSBzZXR1cCBvZiB0aGUgb3Bjb2RlIGp1bXAgdGFibGUu
ICovCiAjaWZkZWYgVVNFX0NPTVBVVEVEX0dPVE9fRk9SX01BVENIX09QQ09ERV9MT09QCi0gICAg
Zm9yIChpbnQgaSA9IDI1NTsgIW9wY29kZV9qdW1wX3RhYmxlW2ldOyBpLS0pCi0gICAgICAgIG9w
Y29kZV9qdW1wX3RhYmxlW2ldID0gJiZDQVBUVVJJTkdfQlJBQ0tFVDsKKyAgICBmb3IgKGludCBp
ID0gMjU1OyAhb3Bjb2RlSnVtcFRhYmxlW2ldOyBpLS0pCisgICAgICAgIG9wY29kZUp1bXBUYWJs
ZVtpXSA9ICYmQ0FQVFVSSU5HX0JSQUNLRVQ7CiAjZW5kaWYKICAgICAKICNpZmRlZiBVU0VfQ09N
UFVURURfR09UT19GT1JfTUFUQ0hfUkVDVVJTSU9OCkBAIC00MzEsNyArNDM1LDcgQEAgc3RhdGlj
IGludCBtYXRjaChjb25zdCBVQ2hhciogc3ViamVjdFB0cgogI2VuZGlmCiAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPSBzdWJqZWN0UHRyOwogICAgIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uUHRyOwotICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wID0gb2Zmc2V0X3RvcDsKKyAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wID0gb2Zmc2V0VG9wOwogICAgIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQgPSAwOwogICAgIHN0YXJ0TmV3R3JvdXAoc3Rh
Y2suY3VycmVudEZyYW1lKTsKICAgICAKQEAgLTQ0OCw3ICs0NTIsNyBAQCBSRUNVUlNFOgogICAg
ICAgICAKICNpZmRlZiBVU0VfQ09NUFVURURfR09UT19GT1JfTUFUQ0hfT1BDT0RFX0xPT1AKICNk
ZWZpbmUgQkVHSU5fT1BDT0RFKG9wY29kZSkgTEFCRUxfT1BfIyNvcGNvZGUKLSNkZWZpbmUgTkVY
VF9PUENPREUgZ290byAqb3Bjb2RlX2p1bXBfdGFibGVbKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0cl0KKyNkZWZpbmUgTkVYVF9PUENPREUgZ290byAqb3Bjb2RlSnVtcFRh
YmxlWypzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHJdCiAjZWxzZQogI2Rl
ZmluZSBCRUdJTl9PUENPREUob3Bjb2RlKSBjYXNlIE9QXyMjb3Bjb2RlCiAjZGVmaW5lIE5FWFRf
T1BDT0RFIGNvbnRpbnVlCkBAIC00NjcsOSArNDcxLDkgQEAgUkVDVVJTRToKICAgICAgICAgICAg
ICAgICBEUFJJTlRGKCgic3RhcnQgYnJhY2tldCAwXG4iKSk7CiAgICAgICAgICAgICAgICAgZG8g
ewogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAo
Miwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0la
RSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gp
CiAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVB
dE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAg
ICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
Kz0gZ2V0TGlua1ZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
IDEpOwogICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIgPT0gT1BfQUxUKTsKICAgICAgICAgICAgICAgICBEUFJJTlRGKCgiYnJh
Y2tldCAwIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgICAgIFJSRVRVUk47CkBAIC00ODMsOSAr
NDg3LDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgcGF0dGVybi4gKi8K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShFTkQpOgotICAgICAg
ICAgICAgICAgIG1kLmVuZF9tYXRjaF9wdHIgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cjsgICAgICAgICAgLyogUmVjb3JkIHdoZXJlIHdlIGVuZGVkICovCi0gICAgICAgICAg
ICAgICAgbWQuZW5kX29mZnNldF90b3AgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0
X3RvcDsgICAvKiBhbmQgaG93IG1hbnkgZXh0cmFjdHMgd2VyZSB0YWtlbiAqLwotICAgICAgICAg
ICAgICAgIGlzX21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtZC5lbmRNYXRjaFB0ciA9
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOyAgICAgICAgICAvKiBSZWNvcmQg
d2hlcmUgd2UgZW5kZWQgKi8KKyAgICAgICAgICAgICAgICBtZC5lbmRPZmZzZXRUb3AgPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wOyAgIC8qIGFuZCBob3cgbWFueSBleHRyYWN0
cyB3ZXJlIHRha2VuICovCisgICAgICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8qIEFzc2Vy
dGlvbiBicmFja2V0cy4gQ2hlY2sgdGhlIGFsdGVybmF0aXZlIGJyYW5jaGVzIGluIHR1cm4gLSB0
aGUKQEAgLTQ5Nyw5ICs1MDEsOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RF
KEFTU0VSVCk6CiAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICBSRUNV
UlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoNiwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldExp
bmtWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAg
ICAgICAgICAgICAgICB9IHdoaWxlICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyID09IE9QX0FMVCk7CiAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfS0VUKQogICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOX05PX01BVENIOwpAQCAtNTA3LDkgKzUxMSw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgLyogQ29udGludWUgZnJvbSBhZnRlciB0aGUgYXNzZXJ0aW9uLCB1cGRhdGluZyB0aGUg
b2Zmc2V0cyBoaWdoIHdhdGVyCiAgICAgICAgICAgICAgICAgIG1hcmssIHNpbmNlIGV4dHJhY3Rz
IG1heSBoYXZlIGJlZW4gdGFrZW4gZHVyaW5nIHRoZSBhc3NlcnRpb24uICovCiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbW92ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5hdGVCcmFu
Y2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIpOworICAgICAgICAg
ICAgICAgIGFkdmFuY2VUb0VuZE9mQnJhY2tldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIpOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5p
bnN0cnVjdGlvblB0ciArPSAxICsgTElOS19TSVpFOwotICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wID0gbWQuZW5kX29mZnNldF90b3A7CisgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcCA9IG1kLmVuZE9mZnNl
dFRvcDsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8qIE5lZ2F0aXZlIGFzc2VydGlvbjogYWxsIGJyYW5jaGVzIG11c3QgZmFpbCB0
byBtYXRjaCAqLwpAQCAtNTE3LDgzICs1MjEsMTkgQEAgUkVDVVJTRToKICAgICAgICAgICAgIEJF
R0lOX09QQ09ERShBU1NFUlRfTk9UKToKICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCg3LCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19TSVpFLCBOVUxMKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAo
aXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAr
PSBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9BTFQpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArPSAxICsgTElOS19TSVpFOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgLyogIk9uY2UiIGJyYWNrZXRzIGFyZSBsaWtlIGFz
c2VydGlvbiBicmFja2V0cyBleGNlcHQgdGhhdCBhZnRlciBhIG1hdGNoLAotICAgICAgICAgICAg
IHRoZSBwb2ludCBpbiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgbm90IG1vdmVkIGJhY2suIFRodXMg
dGhlcmUgY2FuIG5ldmVyIGJlCi0gICAgICAgICAgICAgYSBtb3ZlIGJhY2sgaW50byB0aGUgYnJh
Y2tldHMuIEZyaWVkbCBjYWxscyB0aGVzZSAiYXRvbWljIiBzdWJwYXR0ZXJucy4KLSAgICAgICAg
ICAgICBDaGVjayB0aGUgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgaW4gdHVybiAtIHRoZSBtYXRjaGlu
ZyB3b24ndCBwYXNzIHRoZSBLRVQKLSAgICAgICAgICAgICBmb3IgdGhpcyBraW5kIG9mIHN1YnBh
dHRlcm4uIElmIGFueSBvbmUgYnJhbmNoIG1hdGNoZXMsIHdlIGNhcnJ5IG9uIGFzIGF0Ci0gICAg
ICAgICAgICAgdGhlIGVuZCBvZiBhIG5vcm1hbCBicmFja2V0LCBsZWF2aW5nIHRoZSBzdWJqZWN0
IHBvaW50ZXIuICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBCRUdJTl9PUENPREUo
T05DRSk6Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1
Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyOwotICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1Ympl
Y3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDksIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfbWF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9w
Y29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
LCAxKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyID09IE9QX0FMVCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLyogSWYgaGl0IHRoZSBlbmQgb2YgdGhlIGdyb3VwICh3aGljaCBjb3VsZCBiZSByZXBl
YXRlZCksIGZhaWwgKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoKnN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAhPSBPUF9PTkNFICYmICpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgIT0gT1BfQUxUKQotICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8q
IENvbnRpbnVlIGFzIGZyb20gYWZ0ZXIgdGhlIGFzc2VydGlvbiwgdXBkYXRpbmcgdGhlIG9mZnNl
dHMgaGlnaCB3YXRlcgotICAgICAgICAgICAgICAgICBtYXJrLCBzaW5jZSBleHRyYWN0cyBtYXkg
aGF2ZSBiZWVuIHRha2VuLiAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1v
dmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA9IG1kLmVuZF9vZmZzZXRfdG9wOwot
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID0gbWQu
ZW5kX21hdGNoX3B0cjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBGb3Ig
YSBub24tcmVwZWF0aW5nIGtldCwganVzdCBjb250aW51ZSBhdCB0aGlzIGxldmVsLiBUaGlzIGFs
c28KLSAgICAgICAgICAgICAgICAgaGFwcGVucyBmb3IgYSByZXBlYXRpbmcga2V0IGlmIG5vIGNo
YXJhY3RlcnMgd2VyZSBtYXRjaGVkIGluIHRoZSBncm91cC4KLSAgICAgICAgICAgICAgICAgVGhp
cyBpcyB0aGUgZm9yY2libGUgYnJlYWtpbmcgb2YgaW5maW5pdGUgbG9vcHMgYXMgaW1wbGVtZW50
ZWQgaW4gUGVybAotICAgICAgICAgICAgICAgICA1LjAwNS4gSWYgdGhlcmUgaXMgYW4gb3B0aW9u
cyByZXNldCwgaXQgd2lsbCBnZXQgb2JleWVkIGluIHRoZSBub3JtYWwKLSAgICAgICAgICAgICAg
ICAgY291cnNlIG9mIGV2ZW50cy4gKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9LRVQg
fHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPT0gc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAxICsg
TElOS19TSVpFOwotICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogVGhlIHJlcGVhdGlu
ZyBrZXRzIHRyeSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBvciByZXN0YXJ0IGZyb20gdGhlCi0g
ICAgICAgICAgICAgICAgIHByZWNlZGluZyBicmFja2V0LCBpbiB0aGUgYXBwcm9wcmlhdGUgb3Jk
ZXIuIFdlIG5lZWQgdG8gcmVzZXQgYW55IG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgdGhhdCBj
aGFuZ2VkIHdpdGhpbiB0aGUgYnJhY2tldCBiZWZvcmUgcmUtcnVubmluZyBpdCwgc28gY2hlY2sg
dGhlIG5leHQKLSAgICAgICAgICAgICAgICAgb3Bjb2RlLiAqLwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyID09IE9QX0tFVFJNSU4pIHsKLSAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
KDEwLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxICsgTElOS19T
SVpFLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVS
TjsKLSAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQ
KDExLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9u
Y2UsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIE9QX0tFVFJNQVggKi8KLSAgICAgICAgICAg
ICAgICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDEyLCBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNfbWF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAg
ICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMTMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJw
YXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLyogQW4gYWx0ZXJu
YXRpb24gaXMgdGhlIGVuZCBvZiBhIGJyYW5jaDsgc2NhbiBhbG9uZyB0byBmaW5kIHRoZSBlbmQg
b2YgdGhlCiAgICAgICAgICAgICAgYnJhY2tldGVkIGdyb3VwIGFuZCBnbyB0byB0aGVyZS4gKi8K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShBTFQpOgotICAgICAg
ICAgICAgICAgIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKTsKKyAgICAgICAgICAgICAgICBhZHZhbmNl
VG9FbmRPZkJyYWNrZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKTsK
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8qIEJSQVpFUk8gYW5kIEJSQU1JTlpFUk8gb2NjdXIganVzdCBiZWZvcmUgYSBicmFja2V0
IGdyb3VwLCBpbmRpY2F0aW5nCkBAIC02MDUsMTggKzU0NSwxOCBAQCBSRUNVUlNFOgogICAgICAg
ICAgICAgQkVHSU5fT1BDT0RFKEJSQVpFUk8pOiB7CiAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQgPSBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxOwogICAgICAgICAgICAgICAgIFJFQ1VSU0lW
RV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxNCwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
c3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0
ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAg
ICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAg
ICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0KTsKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlVG9FbmRPZkJyYWNrZXQoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJl
cGVhdGluZ0JyYWNrZXQpOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBl
YXRpbmdCcmFja2V0ICsgMSArIExJTktfU0laRTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09Q
Q09ERShCUkFNSU5aRVJPKTogewogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyICsgMTsKLSAgICAgICAgICAgICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFu
eUFsdGVybmF0ZUJyYW5jaGVzKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBl
YXRpbmdCcmFja2V0KTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlVG9FbmRPZkJyYWNrZXQoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQpOwogICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9VUCgxNSwgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQgKyAxICsgTElOS19TSVpF
LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CkBA
IC02MzAsMTQgKzU3MCwxMyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEtF
VCk6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoS0VUUk1JTik6CiAgICAgICAgICAgICBCRUdJ
Tl9PUENPREUoS0VUUk1BWCk6Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID0gc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyIC0gZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciAtIGdldExpbmtWYWx1ZShzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0ID0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuc3VicGF0dGVyblN0YXJ0OwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLnN1YnBhdHRlcm5TdGFydCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+cHJldmlv
dXNGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoKnN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRTdGFydE9mT25jZSA9PSBP
UF9BU1NFUlQgfHwgKnN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmluc3RydWN0aW9uUHRyQXRT
dGFydE9mT25jZSA9PSBPUF9BU1NFUlRfTk9UIHx8ICpzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPT0gT1BfT05DRSkgewotICAgICAgICAgICAg
ICAgICAgICBtZC5lbmRfbWF0Y2hfcHRyID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHI7ICAgICAgLyogRm9yIE9OQ0UgKi8KLSAgICAgICAgICAgICAgICAgICAgbWQuZW5kX29m
ZnNldF90b3AgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcDsKLSAgICAgICAg
ICAgICAgICAgICAgaXNfbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgqc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlID09IE9QX0FT
U0VSVCB8fCAqc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0
T2ZPbmNlID09IE9QX0FTU0VSVF9OT1QpIHsKKyAgICAgICAgICAgICAgICAgICAgbWQuZW5kT2Zm
c2V0VG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldFRvcDsKKyAgICAgICAgICAg
ICAgICAgICAgaXNNYXRjaCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtNjUxLDcgKzU5MCw3IEBAIFJF
Q1VSU0U6CiAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgZnJvbSBhIGR1bW15IG9wY29kZSBh
dCB0aGUgc3RhcnQuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA+IEVYVFJBQ1RfQkFTSUNfTUFYKQotICAg
ICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXIgPSBnZXQy
Qnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1
Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlLCAyK0xJTktfU0laRSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJlciA9IGdldDJCeXRlVmFsdWUoc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZPbmNlICsgMiArIExJ
TktfU0laRSk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyIDw8IDE7CiAgICAgICAgICAg
ICAgICAgCiAjaWZkZWYgREVCVUcKQEAgLTY2NSwxNCArNjA0LDE0IEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgIHRoZSBPUF9FTkQgaXMgcmVhY2hlZC4gKi8KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyID4g
MCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0ID49IG1kLm9mZnNldF9tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZz
ZXRfb3ZlcmZsb3cgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMub2Zmc2V0ID49IG1kLm9mZnNldE1heCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1kLm9mZnNldE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPQotICAgICAgICAgICAgICAgICAgICAgICAgbWQub2Zm
c2V0X3ZlY3RvclttZC5vZmZzZXRfZW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVt
YmVyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0KzFdID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgLSBtZC5zdGFydF9zdWJqZWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5vZmZzZXRfdG9wIDw9IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Mub2Zmc2V0X3RvcCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9m
ZnNldCArIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3Jbc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XSA9CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZC5vZmZzZXRWZWN0b3JbbWQub2Zmc2V0RW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bnVtYmVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvcltzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQrMV0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciAtIG1kLnN0YXJ0U3ViamVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wIDw9IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zm
c2V0ICsgMjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTY5MiwxNyArNjMxLDE3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIgPT0gT1BfS0VUUk1JTikgewogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVf
TUFUQ0goMTYsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBM
SU5LX1NJWkUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChp
c01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAg
ICAgICAgUkVDVVJTSVZFX01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDE3LCBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNf
bWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBPUF9LRVRSTUFY
ICovCiAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSF9TVEFSVE5HX05FV19HUk9V
UCgxOCwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuaW5zdHJ1Y3Rpb25QdHJBdFN0YXJ0T2ZP
bmNlLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRj
aCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAg
IFJFQ1VSU0lWRV9NQVRDSCgxOSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyICsgMSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBSUkVUVVJOOwpAQCAtNzEwLDcgKzY0OSw3
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBTdGFydCBvZiBzdWJqZWN0LCBvciBhZnRlciBp
bnRlcm5hbCBuZXdsaW5lIGlmIG11bHRpbGluZS4gKi8KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEJFR0lOX09QQ09ERShDSVJDKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gbWQuc3RhcnRfc3ViamVjdCAmJiAoIW1kLm11
bHRpbGluZSB8fCAhaXNOZXdsaW5lKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
Wy0xXSkpKQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciAhPSBtZC5zdGFydFN1YmplY3QgJiYgKCFtZC5tdWx0aWxpbmUgfHwgIWlzTmV3bGlu
ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0clstMV0pKSkKICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RTsKQEAgLTcxOCw3ICs2NTcsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgLyogRW5kIG9mIHN1
YmplY3QsIG9yIGJlZm9yZSBpbnRlcm5hbCBuZXdsaW5lIGlmIG11bHRpbGluZS4gKi8KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShET0xMKToKLSAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPCBtZC5lbmRfc3Vi
amVjdCAmJiAoIW1kLm11bHRpbGluZSB8fCAhaXNOZXdsaW5lKCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cikpKQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA8IG1kLmVuZFN1YmplY3QgJiYgKCFtZC5tdWx0aWxpbmUgfHwg
IWlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpKSkKICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERTsKQEAgLTczMCw5ICs2NjksOSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIGJv
b2wgY3VycmVudENoYXJJc1dvcmRDaGFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYm9vbCBw
cmV2aW91c0NoYXJJc1dvcmRDaGFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID4gbWQuc3Rh
cnRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIgPiBtZC5zdGFydFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzQ2hhcklzV29yZENoYXIgPSBpc1dvcmRDaGFyKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyWy0xXSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyIDwgbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIDwgbWQuZW5kU3ViamVjdCkKICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudENoYXJJc1dvcmRDaGFyID0gaXNXb3JkQ2hhcigqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlIHNpdHVhdGlvbiBpcyB3aGF0IHdlIHdhbnQgKi8K
QEAgLTc0NSw3ICs2ODQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggYSBzaW5n
bGUgY2hhcmFjdGVyIHR5cGU7IGlubGluZSBmb3Igc3BlZWQgKi8KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfTkVXTElORSk6Ci0gICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0
KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENI
OwogICAgICAgICAgICAgICAgIGlmIChpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpA
QCAtNzUzLDcgKzY5Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7
CiAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfRElHSVQpOgotICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRD
SDsKICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRD
SDsKQEAgLTc2MSw3ICs3MDAsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFOwogCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoRElHSVQpOgotICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRD
SDsKICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIrKykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFU
Q0g7CkBAIC03NjksNyArNzA4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBORVhUX09Q
Q09ERTsKIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVF9XSElURVNQQUNFKToKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQu
ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VDaGFyKCpzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVS
Tl9OT19NQVRDSDsKQEAgLTc3Nyw3ICs3MTYsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFOwogCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoV0hJVEVTUEFDRSk6Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49
IG1kLmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZUNoYXIoKnN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOX05PX01BVENIOwpAQCAtNzg1LDcgKzcyNCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9P
UENPREUoTk9UX1dPUkRDSEFSKToKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3Qp
CiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAg
aWYgKGlzV29yZENoYXIoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKyspKQog
ICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpAQCAtNzkzLDcgKzczMiw3IEBA
IFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBCRUdJTl9PUENPREUoV09SRENIQVIpOgotICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
Pj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsK
ICAgICAgICAgICAgICAgICBpZiAoIWlzV29yZENoYXIoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKyspKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwpA
QCAtODA5LDcgKzc0OCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgbG9vcHMpLiAqLwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFJFRik6Ci0gICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ID0gZ2V0MkJ5dGVPcGNvZGVW
YWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSkg
PDwgMTsgICAgICAgICAgICAgICAvKiBEb3VibGVkIHJlZiBudW1iZXIgKi8KKyAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPSBnZXQyQnl0ZVZhbHVlKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpIDw8IDE7ICAgICAgICAg
ICAgICAgLyogRG91YmxlZCByZWYgbnVtYmVyICovCiAgICAgICAgICAgICAgICAgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogQWR2YW5jZSBwYXN0IGl0ZW0gKi8KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvKiBJZiB0aGUgcmVmZXJlbmNlIGlzIHVuc2V0LCBzZXQgdGhlIGxlbmd0
aCB0byBiZSBsb25nZXIgdGhhbiB0aGUgYW1vdW50CkBAIC04MTcsMTAgKzc1NiwxMCBAQCBSRUNV
UlNFOgogICAgICAgICAgICAgICAgICBjYW4ndCBqdXN0IGZhaWwgaGVyZSwgYmVjYXVzZSBvZiB0
aGUgcG9zc2liaWxpdHkgb2YgcXVhbnRpZmllcnMgd2l0aCB6ZXJvCiAgICAgICAgICAgICAgICAg
IG1pbmltYS4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5v
ZmZzZXRfdG9wIHx8IG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0XSA8IDApCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLm9mZnNldCA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mub2Zmc2V0VG9wIHx8IG1kLm9m
ZnNldFZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXRdIDwgMCkKICAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoID0gMDsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmxlbmd0aCA9IG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMub2Zmc2V0KzFdIC0gbWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5vZmZzZXRdOworICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5sZW5ndGggPSBtZC5vZmZzZXRWZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
b2Zmc2V0KzFdIC0gbWQub2Zmc2V0VmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9m
ZnNldF07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogU2V0IHVwIGZvciBy
ZXBldGl0aW9uLCBvciBoYW5kbGUgdGhlIG5vbi1yZXBlYXRlZCBjYXNlICovCiAgICAgICAgICAg
ICAgICAgCkBAIC04MzcsMTUgKzc3NiwxNSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIE9QX0NSUkFOR0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JNSU5SQU5H
RToKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltaXplID0gKCpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfQ1JNSU5SQU5HRSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtaW4gPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9m
ZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWluID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID09IDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gSU5UX01BWDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciArPSA1OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgIC8qIE5v
IHJlcGVhdCBmb2xsb3dzICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoX3Jl
ZihzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hSZWYoc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtODYw
LDcgKzc5OSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgLyogRmlyc3QsIGVuc3VyZSB0
aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gKi8KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtaW47IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoX3JlZihzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRjaFJlZihzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5n
dGgsIG1kKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICB9CkBAIC04
NzYsOSArODE1LDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICBpZiAobWluaW1pemUpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9
IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyMCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8ICFtYXRjaF9yZWYoc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoLCBtZCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8ICFtYXRjaFJlZihzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgKz0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04OTAsMTMgKzgyOSwxMyBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoX3JlZihzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5vZmZzZXQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgsIG1kKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2hSZWYoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0LCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMubGVuZ3RoLCBtZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAr
PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0
T2ZJbnN0cnVjdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENI
KDIxLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyIC09IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtOTMzLDggKzg3Miw4
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgogICAgICAgICAgICAgICAgICAgICAg
ICAgbWluaW1pemUgPSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9
PSBPUF9DUk1JTlJBTkdFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IGdldDJCeXRl
T3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBn
ZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
KyAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXggPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5tYXggPSBJTlRfTUFYOwogICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDU7CkBAIC05NDgsNyArODg3
LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAvKiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5p
bXVtIG51bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiAqLwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBt
ZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoYyA+IDI1NSkgewpAQCAtOTcxLDkgKzkxMCw5IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAg
ICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsr
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjIsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8
fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
aSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjID4gMjU1KSB7CkBAIC05OTEsNyArOTMwLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZklu
c3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRf
c3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YyA+IDI1NSkgewpAQCAtMTAwNSw3ICs5NDQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyNCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9m
SW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAv
KiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwpAQCAtMTAxOSw3ICs5NTgsNyBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFhDTEFT
Uyk6CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSA9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkU7ICAg
ICAgICAgICAgICAgIC8qIFNhdmUgZm9yIG1hdGNoaW5nICovCi0gICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9wY29kZVZhbHVlQXRP
ZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsgICAgICAg
ICAgICAgICAgICAgICAgLyogQWR2YW5jZSBwYXN0IHRoZSBpdGVtICovCisgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldExpbmtWYWx1
ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxKTsgICAgICAgICAg
ICAgICAgICAgICAgLyogQWR2YW5jZSBwYXN0IHRoZSBpdGVtICovCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgc3dpdGNoICgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JTVEFSOgpAQCAtMTAz
NCw4ICs5NzMsOCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0NSUkFO
R0U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbmltaXplID0gKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIgPT0gT1BfQ1JNSU5SQU5HRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW4g
PSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWluID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyICsgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubWF4ID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gSU5UX01BWDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSA1OwpAQCAt
MTA0MywxNSArOTgyLDE1IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiBObyByZXBlYXQgZm9s
bG93cyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubWF4ID0gMTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11
bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gKi8KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtaW47IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQu
ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFfcGNyZV94Y2xhc3MoYywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCisgICAg
ICAgICAgICAgICAgICAgIGlmICgha2pzX3BjcmVfeGNsYXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmRhdGEpKQogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRD
SDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xMDY3LDEyICsxMDA2
LDEyIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPSBtaW47OyBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUNVUlNJVkVfTUFUQ0goMjYsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5k
U3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3BjcmVfeGNsYXNzKGMsIHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFranNfcGNyZV94Y2xhc3MoYywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLwpA
QCAtMTA4MywxNiArMTAyMiwxNiBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRy
QXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfcGNyZV94Y2xh
c3MoYywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWtqc19wY3JlX3hjbGFzcyhjLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5kYXRhKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZm9yKDs7KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjcsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0
ckF0U3RhcnRPZkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KQEAgLTExMDksNyAr
MTA0OCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgZ2V0VVRGOENoYXJBbmRJbmNy
ZW1lbnRMZW5ndGgoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoKTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKz0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoOwotICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3Vi
amVjdCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMg
IT0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKyspCiAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC0xMTIyLDEwICsxMDYxLDEwIEBAIFJFQ1VSU0U6
CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRy
Kys7CiAgICAgICAgICAgICAgICAgZ2V0VVRGOENoYXJBbmRJbmNyZW1lbnRMZW5ndGgoc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoKTsKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kU3Vi
amVjdCkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAg
ICAgICBpbnQgZGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgIT0gZGMgJiYg
X3BjcmVfdWNwX290aGVyY2FzZShzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykgIT0gZGMp
CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICE9IGRj
ICYmIGtqc19wY3JlX3VjcF9vdGhlcmNhc2Uoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMp
ICE9IGRjKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgfQpAQCAtMTEzMyw3ICsxMDcyLDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgIC8qIE1hdGNoIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci4g
Ki8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShBU0NJSV9DSEFS
KToKLSAgICAgICAgICAgICAgICBpZiAobWQuZW5kX3N1YmplY3QgPT0gc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIpCisgICAgICAgICAgICAgICAgaWYgKG1kLmVuZFN1YmplY3Qg
PT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCiAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHJbMV0pCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC0x
MTQ0LDcgKzEwODMsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgLyogTWF0Y2ggb25lIG9mIHR3
byBjYXNlcyBvZiBhbiBBU0NJSSBsZXR0ZXIuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBCRUdJTl9PUENPREUoQVNDSUlfTEVUVEVSX0lHTk9SSU5HX0NBU0UpOgotICAgICAgICAg
ICAgICAgIGlmIChtZC5lbmRfc3ViamVjdCA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cikKKyAgICAgICAgICAgICAgICBpZiAobWQuZW5kU3ViamVjdCA9PSBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9O
T19NQVRDSDsKICAgICAgICAgICAgICAgICBpZiAoKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciB8IDB4MjApICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0clsxXSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKQEAgLTExNTUs
NyArMTA5NCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBNYXRjaCBhIHNpbmdsZSBjaGFy
YWN0ZXIgcmVwZWF0ZWRseTsgZGlmZmVyZW50IG9wY29kZXMgc2hhcmUgY29kZS4gKi8KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShFWEFDVCk6Ci0gICAgICAgICAg
ICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNv
ZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwg
MSk7CisgICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4
ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIg
KyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOwogICAgICAgICAg
ICAgICAgIGdvdG8gUkVQRUFUQ0hBUjsKQEAgLTExNjMsNyArMTEwMiw3IEBAIFJFQ1VSU0U6CiAg
ICAgICAgICAgICBCRUdJTl9PUENPREUoVVBUTyk6CiAgICAgICAgICAgICBCRUdJTl9PUENPREUo
TUlOVVBUTyk6CiAgICAgICAgICAgICAgICAgbWluID0gMDsKLSAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAg
IG1pbmltaXplID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBP
UF9NSU5VUFRPOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArPSAzOwogICAgICAgICAgICAgICAgIGdvdG8gUkVQRUFUQ0hBUjsKQEAgLTEx
ODQsMTIgKzExMjMsMTIgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGggPSAxOwogICAgICAgICAgICAg
ICAgIGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLmZjLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1pbiAqIChz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA+IDB4RkZGRiA/IDIgOiAxKSA+IG1kLmVuZF9z
dWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCisgICAgICAgICAg
ICAgICAgaWYgKG1pbiAqIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA+IDB4RkZGRiA/
IDIgOiAxKSA+IG1kLmVuZFN1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cikKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubGVuZ3RoOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA8PSAweEZGRkYpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IG90aGVyY2FzZSA9IG1kLmlnbm9yZUNhc2UgPyBfcGNyZV91Y3Bf
b3RoZXJjYXNlKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjKSA6IC0xOworICAgICAgICAg
ICAgICAgICAgICBpbnQgb3RoZXJjYXNlID0gbWQuaWdub3JlQ2FzZSA/IGtqc19wY3JlX3VjcF9v
dGhlcmNhc2Uoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMpIDogLTE7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtaW47
IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyAmJiAqc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gb3RoZXJjYXNlKQpAQCAtMTIwMSwx
NCArMTE0MCwxNCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENP
REU7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAobWluaW1p
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LnJlcGVhdF9vdGhlcmNhc2UgPSBvdGhlcmNhc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5yZXBlYXRPdGhlcmNhc2UgPSBvdGhlcmNhc2U7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZp
ID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkrKykgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgyOCwgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0
YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1h
eCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5mYyAmJiAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIg
IT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMucmVwZWF0X290aGVyY2FzZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyICE9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICYmICpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5yZXBlYXRP
dGhlcmNhc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEyMTYsNyArMTE1NSw3IEBAIFJF
Q1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1
Y3Rpb24gPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyAmJiAqc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgIT0gb3RoZXJjYXNlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMjQsNyArMTE2Myw3IEBAIFJFQ1VS
U0U6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDI5LCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0
ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMTI0Niw5ICsxMTg1LDkgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1pbmltaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmZpID0gbWluOzsgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkr
KykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgzMCwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1Ympl
Y3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUlJFVFVSTjsKQEAgLTEyNTgsNyArMTE5Nyw3IEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24gPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+IG1kLmVuZF9zdWJqZWN0IC0gMikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPiBtZC5l
bmRTdWJqZWN0IC0gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
c3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjY2LDcgKzEyMDUsNyBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCgzMSwgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVy
blN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgLT0gMjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNzksNyArMTIxOCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAvKiBNYXRj
aCBhIG5lZ2F0ZWQgc2luZ2xlIG9uZS1ieXRlIGNoYXJhY3Rlci4gKi8KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1QpOiB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQor
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+
PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwog
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisr
OwogICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKys7CkBAIC0xMzAzLDcgKzEyNDIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgIGFi
b3V0Li4uICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9U
RVhBQ1QpOgotICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
Lm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOworICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlVmFsdWUoc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAgICAgICAgICAgbWluaW1pemUgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgKz0gMzsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVE5PVENIQVI7CkBAIC0xMzExLDcg
KzEyNTAsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVFVQVE8pOgog
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVE1JTlVQVE8pOgogICAgICAgICAgICAgICAgIG1p
biA9IDA7Ci0gICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0g
Z2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciwgMSk7CisgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMubWF4ID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgKyAxKTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9ICpzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgPT0gT1BfTk9UTUlOVVBUTzsKICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAgICAgICAg
ICAgICAgICBnb3RvIFJFUEVBVE5PVENIQVI7CkBAIC0xMzI5LDcgKzEyNjgsNyBAQCBSRUNVUlNF
OgogICAgICAgICAgICAgIHN1YmplY3QuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBSRVBFQVROT1RDSEFSOgotICAgICAgICAgICAgICAgIGlmIChtaW4gPiBtZC5lbmRfc3ViamVj
dCAtIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQorICAgICAgICAgICAgICAg
IGlmIChtaW4gPiBtZC5lbmRTdWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPSAqc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgCkBAIC0xMzYxLDEyICsx
MzAwLDEyIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5pbWl6ZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5m
aSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMzgsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkID0g
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGQgPCAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGQgPSB0b0xvd2VyQ2FzZShkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJq
ZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZj
ID09IGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIG5l
dmVyIHJlYWNoZXMgaGVyZSAqLwpAQCAtMTM3OCw3ICsxMzE3LDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJB
dFN0YXJ0T2ZJbnN0cnVjdGlvbiA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
OwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gbWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1Ympl
Y3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBkID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMTI4KQpAQCAtMTM4OSw3
ICsxMzI4LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0goNDAsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQdHJB
dFN0YXJ0T2ZJbnN0cnVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwpAQCAtMTQxNSwx
MCArMTM1NCwxMCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICBpZiAobWluaW1pemUp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuZmkgPSBtaW47OyBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSsrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZFX01BVENIKDQyLCBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0
ZXJuU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZCA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA+PSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QgfHwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmMgPT0gZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QgfHwgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPT0gZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlICovCkBAIC0xNDMwLDcgKzEz
NjksNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kU3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGQgPSAqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCkBAIC0xNDM5LDcgKzEzNzgs
NyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lW
RV9NQVRDSCg0NCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRP
Zkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCkBAIC0xNDU1LDcgKzEzOTQs
NyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgIHJlcGVhdCBpdCBpbiB0aGUgaW50ZXJlc3RzIG9m
IGVmZmljaWVuY3kuICovCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBCRUdJTl9PUENP
REUoVFlQRUVYQUNUKToKLSAgICAgICAgICAgICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICBtaW4gPSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXpl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVFRZUEU7CkBAIC0xNDYz
LDcgKzE0MDIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVVUFRP
KToKICAgICAgICAgICAgIEJFR0lOX09QQ09ERShUWVBFTUlOVVBUTyk6CiAgICAgICAgICAgICAg
ICAgbWluID0gMDsKLSAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5t
YXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5tYXggPSBnZXQyQnl0ZVZhbHVlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXplID0gKnN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9UWVBFTUlOVVBUTzsKICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAg
ICAgICAgICAgICAgICBnb3RvIFJFUEVBVFRZUEU7CkBAIC0xNDg4LDcgKzE0MjcsNyBAQCBSRUNV
UlNFOgogICAgICAgICAgICAgICAgICAoaS5lLiBrZWVwIGl0IG91dCBvZiB0aGUgbG9vcCkuIEFs
c28gd2UgY2FuIHRlc3QgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QKICAgICAgICAgICAgICAgICAg
dGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHdlIHN0YXJ0LiAqLwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtaW4gPiBtZC5lbmRfc3ViamVjdCAt
IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKQorICAgICAgICAgICAgICAgIGlm
IChtaW4gPiBtZC5lbmRTdWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAg
ICAgaWYgKG1pbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5jdHlwZSkgewpAQCAtMTU2NSw5ICsxNTA0LDkgQEAgUkVDVVJTRToK
ICAgICAgICAgICAgICAgICBpZiAobWluaW1pemUpIHsKICAgICAgICAgICAgICAgICAgICAgZm9y
IChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5maSA9IG1pbjs7IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmZpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRD
SCg0OCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc19tYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1k
LmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKys7CkBAIC0xNjI0LDcgKzE1NjMsNyBAQCBSRUNVUlNFOgogICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmN0eXBlKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX05PVF9ORVdMSU5FOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QgfHwg
aXNOZXdsaW5lKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0IHx8IGlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MTYzMiw3ICsxNTcxLDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5tYXg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciA+PSBtZC5lbmRTdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
ID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KGMpKQpAQCAtMTY0Myw3ICsxNTgyLDcg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgT1BfRElHSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1k
LmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNBU0NJSURpZ2l0KGMpKQpAQCAtMTY1NCw3ICsxNTkzLDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1Bf
Tk9UX1dISVRFU1BBQ0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1Ympl
Y3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNl
Q2hhcihjKSkKQEAgLTE2NjUsNyArMTYwNCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX1dISVRFU1BBQ0U6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5l
bmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZUNoYXIoYykpCkBAIC0x
Njc2LDcgKzE2MTUsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLm1heDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc1dvcmRDaGFyKGMpKQpAQCAtMTY4Nyw3ICsxNjI2LDcg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgT1BfV09SRENIQVI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49
IG1kLmVuZFN1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNXb3JkQ2hhcihjKSkKQEAgLTE3MDUsNyArMTY0NCw3IEBAIFJFQ1VSU0U6CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goNTIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5T
dGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0
ckF0U3RhcnRPZkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KQEAgLTE3NTUsNyAr
MTY5NCw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgIG51bWJlciBmcm9tIGEgZHVtbXkg
b3Bjb2RlIGF0IHRoZSBzdGFydC4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyID4gRVhUUkFDVF9CQVNJQ19N
QVgpCi0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm51bWJl
ciA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIsIDIrTElOS19TSVpFKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyID0gZ2V0MkJ5dGVWYWx1ZShzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAyICsgTElOS19TSVpFKTsKICAgICAgICAgICAg
ICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPSBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5udW1iZXIgPDwgMTsKICAgICAgICAgICAgICAgICAKICNpZmRlZiBERUJVRwpA
QCAtMTc2NCwyNiArMTcwMywyNiBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIHByaW50Zigi
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgPCBtZC5vZmZzZXRfbWF4KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVfb2Zmc2V0MSA9IG1k
Lm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0XTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQyID0g
bWQub2Zmc2V0X3ZlY3RvcltzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZz
ZXQzID0gbWQub2Zmc2V0X3ZlY3RvclttZC5vZmZzZXRfZW5kIC0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubnVtYmVyXTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMub2Zmc2V0IDwgbWQub2Zmc2V0TWF4KSB7CisgICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQxID0gbWQub2Zmc2V0VmVjdG9yW3N0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQyID0gbWQub2Zmc2V0VmVjdG9yW3N0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCArIDFdOworICAgICAgICAgICAgICAgICAg
ICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MyA9IG1kLm9mZnNldFZlY3Rv
clttZC5vZmZzZXRFbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgRFBSSU5URigoInNhdmluZyAl
ZCAlZCAlZFxuIiwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZV9vZmZzZXQxLCBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnNhdmVfb2Zmc2V0MykpOwotICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRfdmVj
dG9yW21kLm9mZnNldF9lbmQgLSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdID0g
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgLSBtZC5zdGFydF9zdWJqZWN0Owor
ICAgICAgICAgICAgICAgICAgICBEUFJJTlRGKCgic2F2aW5nICVkICVkICVkXG4iLCBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlT2Zmc2V0MSwgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuc2F2ZU9mZnNldDIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQzKSk7
CisgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvclttZC5vZmZzZXRFbmQgLSBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5udW1iZXJdID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIgLSBtZC5zdGFydFN1YmplY3Q7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVf
TUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3Ry
dWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyICs9IGdldE9wY29kZVZhbHVlQXRPZmZzZXQoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBnZXRMaW5rVmFs
dWUoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rp
b25QdHIgPT0gT1BfQUxUKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIERQUklOVEYoKCJicmFja2V0ICVkIGZhaWxlZFxuIiwgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMubnVtYmVyKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBtZC5vZmZzZXRfdmVjdG9yW3N0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldF0gPSBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDE7Ci0gICAgICAgICAgICAgICAg
ICAgIG1kLm9mZnNldF92ZWN0b3Jbc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMub2Zmc2V0ICsg
MV0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29mZnNldDI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1kLm9mZnNldF92ZWN0b3JbbWQub2Zmc2V0X2VuZCAtIHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLm51bWJlcl0gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zYXZlX29m
ZnNldDM7CisgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5vZmZzZXRdID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc2F2ZU9m
ZnNldDE7CisgICAgICAgICAgICAgICAgICAgIG1kLm9mZnNldFZlY3RvcltzdGFjay5jdXJyZW50
RnJhbWUtPmxvY2Fscy5vZmZzZXQgKyAxXSA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnNh
dmVPZmZzZXQyOworICAgICAgICAgICAgICAgICAgICBtZC5vZmZzZXRWZWN0b3JbbWQub2Zmc2V0
RW5kIC0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubnVtYmVyXSA9IHN0YWNrLmN1cnJlbnRG
cmFtZS0+bG9jYWxzLnNhdmVPZmZzZXQzOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICB9CkBAIC0xODQ1LDggKzE3ODQs
OCBAQCBSUkVUVVJOX1NXSVRDSDoKICNlbmRpZgogICAgIAogUkVUVVJOOgotICAgIEFTU0VSVChp
c19tYXRjaCA9PSBNQVRDSF9NQVRDSCB8fCBpc19tYXRjaCA9PSBNQVRDSF9OT01BVENIKTsKLSAg
ICByZXR1cm4gaXNfbWF0Y2g7CisgICAgQVNTRVJUKGlzTWF0Y2ggPT0gTUFUQ0hfTUFUQ0ggfHwg
aXNNYXRjaCA9PSBNQVRDSF9OT01BVENIKTsKKyAgICByZXR1cm4gaXNNYXRjaDsKIH0KIAogCkBA
IC0xOTAzLDcgKzE4NDIsNyBAQCBzdGF0aWMgdm9pZCB0cnlGaXJzdEJ5dGVPcHRpbWl6YXRpb24o
Y29uCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCB0cnlSZXF1aXJlZEJ5dGVPcHRpbWl6YXRpb24o
Y29uc3QgVUNoYXIqJiBzdWJqZWN0UHRyLCBjb25zdCBVQ2hhciogZW5kU3ViamVjdCwgaW50IHJl
cV9ieXRlLCBpbnQgcmVxX2J5dGUyLCBib29sIHJlcV9ieXRlX2Nhc2VsZXNzLCBib29sIGhhc0Zp
cnN0Qnl0ZSwgY29uc3QgVUNoYXIqJiByZXFfYnl0ZV9wdHIpCitzdGF0aWMgYm9vbCB0cnlSZXF1
aXJlZEJ5dGVPcHRpbWl6YXRpb24oY29uc3QgVUNoYXIqJiBzdWJqZWN0UHRyLCBjb25zdCBVQ2hh
ciogZW5kU3ViamVjdCwgaW50IHJlcV9ieXRlLCBpbnQgcmVxX2J5dGUyLCBib29sIHJlcV9ieXRl
X2Nhc2VsZXNzLCBib29sIGhhc0ZpcnN0Qnl0ZSwgY29uc3QgVUNoYXIqJiByZXFCeXRlUHRyKQog
ewogICAgIC8qIElmIHJlcV9ieXRlIGlzIHNldCwgd2Uga25vdyB0aGF0IHRoYXQgY2hhcmFjdGVy
IG11c3QgYXBwZWFyIGluIHRoZSBzdWJqZWN0CiAgICAgIGZvciB0aGUgbWF0Y2ggdG8gc3VjY2Vl
ZC4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBzZXQsIHJlcV9ieXRlIG11c3QgYmUKQEAgLTE5
MjUsNyArMTg2NCw3IEBAIHN0YXRpYyBib29sIHRyeVJlcXVpcmVkQnl0ZU9wdGltaXphdGlvbigK
ICAgICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhlIHNlYXJjaCBpZiB3ZSBoYXZl
bid0IHlldCByZWFjaGVkIHRoZQogICAgICAgICAgcGxhY2Ugd2UgZm91bmQgaXQgYXQgbGFzdCB0
aW1lLiAqLwogCi0gICAgICAgIGlmIChwID4gcmVxX2J5dGVfcHRyKSB7CisgICAgICAgIGlmIChw
ID4gcmVxQnl0ZVB0cikgewogICAgICAgICAgICAgaWYgKHJlcV9ieXRlX2Nhc2VsZXNzKSB7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlbmRTdWJqZWN0KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGludCBwcCA9ICpwKys7CkBAIC0xOTUyLDcgKzE4OTEsNyBAQCBzdGF0aWMgYm9vbCB0cnlS
ZXF1aXJlZEJ5dGVPcHRpbWl6YXRpb24oCiAgICAgICAgICAgICAgZm91bmQgaXQsIHNvIHRoYXQg
d2UgZG9uJ3Qgc2VhcmNoIGFnYWluIG5leHQgdGltZSByb3VuZCB0aGUgbG9vcCBpZgogICAgICAg
ICAgICAgIHRoZSBzdGFydCBoYXNuJ3QgcGFzc2VkIHRoaXMgY2hhcmFjdGVyIHlldC4gKi8KIAot
ICAgICAgICAgICAgcmVxX2J5dGVfcHRyID0gcDsKKyAgICAgICAgICAgIHJlcUJ5dGVQdHIgPSBw
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE5NjcsMTMgKzE5MDYs
MTMgQEAgaW50IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4cCogcmUsCiAgICAgQVNTRVJU
KG9mZnNldGNvdW50ID49IDApOwogICAgIEFTU0VSVChvZmZzZXRzIHx8IG9mZnNldGNvdW50ID09
IDApOwogICAgIAotICAgIE1hdGNoRGF0YSBtYXRjaF9ibG9jazsKLSAgICBtYXRjaF9ibG9jay5z
dGFydF9zdWJqZWN0ID0gc3ViamVjdDsKLSAgICBtYXRjaF9ibG9jay5lbmRfc3ViamVjdCA9IG1h
dGNoX2Jsb2NrLnN0YXJ0X3N1YmplY3QgKyBsZW5ndGg7Ci0gICAgY29uc3QgVUNoYXIqIGVuZF9z
dWJqZWN0ID0gbWF0Y2hfYmxvY2suZW5kX3N1YmplY3Q7CisgICAgTWF0Y2hEYXRhIG1hdGNoQmxv
Y2s7CisgICAgbWF0Y2hCbG9jay5zdGFydFN1YmplY3QgPSBzdWJqZWN0OworICAgIG1hdGNoQmxv
Y2suZW5kU3ViamVjdCA9IG1hdGNoQmxvY2suc3RhcnRTdWJqZWN0ICsgbGVuZ3RoOworICAgIGNv
bnN0IFVDaGFyKiBlbmRTdWJqZWN0ID0gbWF0Y2hCbG9jay5lbmRTdWJqZWN0OwogICAgIAotICAg
IG1hdGNoX2Jsb2NrLm11bHRpbGluZSA9IChyZS0+b3B0aW9ucyAmIE1hdGNoQWNyb3NzTXVsdGlw
bGVMaW5lc09wdGlvbik7Ci0gICAgbWF0Y2hfYmxvY2suaWdub3JlQ2FzZSA9IChyZS0+b3B0aW9u
cyAmIElnbm9yZUNhc2VPcHRpb24pOworICAgIG1hdGNoQmxvY2subXVsdGlsaW5lID0gKHJlLT5v
cHRpb25zICYgTWF0Y2hBY3Jvc3NNdWx0aXBsZUxpbmVzT3B0aW9uKTsKKyAgICBtYXRjaEJsb2Nr
Lmlnbm9yZUNhc2UgPSAocmUtPm9wdGlvbnMgJiBJZ25vcmVDYXNlT3B0aW9uKTsKICAgICAKICAg
ICAvKiBJZiB0aGUgZXhwcmVzc2lvbiBoYXMgZ290IG1vcmUgYmFjayByZWZlcmVuY2VzIHRoYW4g
dGhlIG9mZnNldHMgc3VwcGxpZWQgY2FuCiAgICAgIGhvbGQsIHdlIGdldCBhIHRlbXBvcmFyeSBj
aHVuayBvZiB3b3JraW5nIHN0b3JlIHRvIHVzZSBkdXJpbmcgdGhlIG1hdGNoaW5nLgpAQCAtMTk4
OCwxNiArMTkyNywxNiBAQCBpbnQganNSZWdFeHBFeGVjdXRlKGNvbnN0IEpTUmVnRXhwKiByZSwK
ICAgICBib29sIHVzaW5nX3RlbXBvcmFyeV9vZmZzZXRzID0gZmFsc2U7CiAgICAgaWYgKHJlLT50
b3BfYmFja3JlZiA+IDAgJiYgcmUtPnRvcF9iYWNrcmVmID49IG9jb3VudC8zKSB7CiAgICAgICAg
IG9jb3VudCA9IHJlLT50b3BfYmFja3JlZiAqIDMgKyAzOwotICAgICAgICBtYXRjaF9ibG9jay5v
ZmZzZXRfdmVjdG9yID0gbmV3IGludFtvY291bnRdOwotICAgICAgICBpZiAoIW1hdGNoX2Jsb2Nr
Lm9mZnNldF92ZWN0b3IpCisgICAgICAgIG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yID0gbmV3IGlu
dFtvY291bnRdOworICAgICAgICBpZiAoIW1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yKQogICAgICAg
ICAgICAgcmV0dXJuIEpTUmVnRXhwRXJyb3JOb01lbW9yeTsKICAgICAgICAgdXNpbmdfdGVtcG9y
YXJ5X29mZnNldHMgPSB0cnVlOwogICAgIH0gZWxzZQotICAgICAgICBtYXRjaF9ibG9jay5vZmZz
ZXRfdmVjdG9yID0gb2Zmc2V0czsKKyAgICAgICAgbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3IgPSBv
ZmZzZXRzOwogICAgIAotICAgIG1hdGNoX2Jsb2NrLm9mZnNldF9lbmQgPSBvY291bnQ7Ci0gICAg
bWF0Y2hfYmxvY2sub2Zmc2V0X21heCA9ICgyKm9jb3VudCkvMzsKLSAgICBtYXRjaF9ibG9jay5v
ZmZzZXRfb3ZlcmZsb3cgPSBmYWxzZTsKKyAgICBtYXRjaEJsb2NrLm9mZnNldEVuZCA9IG9jb3Vu
dDsKKyAgICBtYXRjaEJsb2NrLm9mZnNldE1heCA9ICgyKm9jb3VudCkvMzsKKyAgICBtYXRjaEJs
b2NrLm9mZnNldE92ZXJmbG93ID0gZmFsc2U7CiAgICAgCiAgICAgLyogQ29tcHV0ZSB0aGUgbWlu
aW11bSBudW1iZXIgb2Ygb2Zmc2V0cyB0aGF0IHdlIG5lZWQgdG8gcmVzZXQgZWFjaCB0aW1lLiBE
b2luZwogICAgICB0aGlzIG1ha2VzIGEgaHVnZSBkaWZmZXJlbmNlIHRvIGV4ZWN1dGlvbiB0aW1l
IHdoZW4gdGhlcmUgYXJlbid0IG1hbnkgYnJhY2tldHMKQEAgLTIwMTEsOCArMTk1MCw4IEBAIGlu
dCBqc1JlZ0V4cEV4ZWN1dGUoY29uc3QgSlNSZWdFeHAqIHJlLAogICAgICBuZXZlciBiZSB1c2Vk
IHVubGVzcyBwcmV2aW91c2x5IHNldCwgYnV0IHRoZXkgZ2V0IHNhdmVkIGFuZCByZXN0b3JlZCwg
YW5kIHNvIHdlCiAgICAgIGluaXRpYWxpemUgdGhlbSB0byBhdm9pZCByZWFkaW5nIHVuaW5pdGlh
bGl6ZWQgbG9jYXRpb25zLiAqLwogICAgIAotICAgIGlmIChtYXRjaF9ibG9jay5vZmZzZXRfdmVj
dG9yKSB7Ci0gICAgICAgIGludCogaXB0ciA9IG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3IgKyBv
Y291bnQ7CisgICAgaWYgKG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yKSB7CisgICAgICAgIGludCog
aXB0ciA9IG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yICsgb2NvdW50OwogICAgICAgICBpbnQqIGll
bmQgPSBpcHRyIC0gcmVzZXRjb3VudC8yICsgMTsKICAgICAgICAgd2hpbGUgKC0taXB0ciA+PSBp
ZW5kKQogICAgICAgICAgICAgKmlwdHIgPSAtMTsKQEAgLTIwNDcsMjEgKzE5ODYsMjEgQEAgaW50
IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4cCogcmUsCiAgICAgLyogTG9vcCBmb3IgaGFu
ZGxpbmcgdW5hbmNob3JlZCByZXBlYXRlZCBtYXRjaGluZyBhdHRlbXB0czsgZm9yIGFuY2hvcmVk
IHJlZ2V4cwogICAgICB0aGUgbG9vcCBydW5zIGp1c3Qgb25jZS4gKi8KICAgICAKLSAgICBjb25z
dCBVQ2hhciogc3RhcnRfbWF0Y2ggPSBzdWJqZWN0ICsgc3RhcnRfb2Zmc2V0OwotICAgIGNvbnN0
IFVDaGFyKiByZXFfYnl0ZV9wdHIgPSBzdGFydF9tYXRjaCAtIDE7CisgICAgY29uc3QgVUNoYXIq
IHN0YXJ0TWF0Y2ggPSBzdWJqZWN0ICsgc3RhcnRfb2Zmc2V0OworICAgIGNvbnN0IFVDaGFyKiBy
ZXFCeXRlUHRyID0gc3RhcnRNYXRjaCAtIDE7CiAgICAgYm9vbCB1c2VNdWx0aUxpbmVGaXJzdENo
YXJPcHRpbWl6YXRpb24gPSByZS0+b3B0aW9ucyAmIFVzZU11bHRpTGluZUZpcnN0Qnl0ZU9wdGlt
aXphdGlvbk9wdGlvbjsKICAgICAKICAgICBkbyB7CiAgICAgICAgIC8qIFJlc2V0IHRoZSBtYXhp
bXVtIG51bWJlciBvZiBleHRyYWN0aW9ucyB3ZSBtaWdodCBzZWUuICovCi0gICAgICAgIGlmICht
YXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yKSB7Ci0gICAgICAgICAgICBpbnQqIGlwdHIgPSBtYXRj
aF9ibG9jay5vZmZzZXRfdmVjdG9yOworICAgICAgICBpZiAobWF0Y2hCbG9jay5vZmZzZXRWZWN0
b3IpIHsKKyAgICAgICAgICAgIGludCogaXB0ciA9IG1hdGNoQmxvY2sub2Zmc2V0VmVjdG9yOwog
ICAgICAgICAgICAgaW50KiBpZW5kID0gaXB0ciArIHJlc2V0Y291bnQ7CiAgICAgICAgICAgICB3
aGlsZSAoaXB0ciA8IGllbmQpCiAgICAgICAgICAgICAgICAgKmlwdHIrKyA9IC0xOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICB0cnlGaXJzdEJ5dGVPcHRpbWl6YXRpb24oc3RhcnRfbWF0
Y2gsIGVuZF9zdWJqZWN0LCBmaXJzdF9ieXRlLCBmaXJzdF9ieXRlX2Nhc2VsZXNzLCB1c2VNdWx0
aUxpbmVGaXJzdENoYXJPcHRpbWl6YXRpb24sIG1hdGNoX2Jsb2NrLnN0YXJ0X3N1YmplY3QgKyBz
dGFydF9vZmZzZXQpOwotICAgICAgICBpZiAodHJ5UmVxdWlyZWRCeXRlT3B0aW1pemF0aW9uKHN0
YXJ0X21hdGNoLCBlbmRfc3ViamVjdCwgcmVxX2J5dGUsIHJlcV9ieXRlMiwgcmVxX2J5dGVfY2Fz
ZWxlc3MsIGZpcnN0X2J5dGUgPj0gMCwgcmVxX2J5dGVfcHRyKSkKKyAgICAgICAgdHJ5Rmlyc3RC
eXRlT3B0aW1pemF0aW9uKHN0YXJ0TWF0Y2gsIGVuZFN1YmplY3QsIGZpcnN0X2J5dGUsIGZpcnN0
X2J5dGVfY2FzZWxlc3MsIHVzZU11bHRpTGluZUZpcnN0Q2hhck9wdGltaXphdGlvbiwgbWF0Y2hC
bG9jay5zdGFydFN1YmplY3QgKyBzdGFydF9vZmZzZXQpOworICAgICAgICBpZiAodHJ5UmVxdWly
ZWRCeXRlT3B0aW1pemF0aW9uKHN0YXJ0TWF0Y2gsIGVuZFN1YmplY3QsIHJlcV9ieXRlLCByZXFf
Ynl0ZTIsIHJlcV9ieXRlX2Nhc2VsZXNzLCBmaXJzdF9ieXRlID49IDAsIHJlcUJ5dGVQdHIpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8qIFdoZW4gYSBt
YXRjaCBvY2N1cnMsIHN1YnN0cmluZ3Mgd2lsbCBiZSBzZXQgZm9yIGFsbCBpbnRlcm5hbCBleHRy
YWN0aW9uczsKQEAgLTIwNzIsMTUgKzIwMTEsMTUgQEAgaW50IGpzUmVnRXhwRXhlY3V0ZShjb25z
dCBKU1JlZ0V4cCogcmUsCiAgICAgICAgICBpZiBjZXJ0YWluIHBhcnRzIG9mIHRoZSBwYXR0ZXJu
IHdlcmUgbm90IHVzZWQuICovCiAgICAgICAgIAogICAgICAgICAvKiBUaGUgY29kZSBzdGFydHMg
YWZ0ZXIgdGhlIEpTUmVnRXhwIGJsb2NrIGFuZCB0aGUgY2FwdHVyZSBuYW1lIHRhYmxlLiAqLwot
ICAgICAgICBjb25zdCB1c2NoYXIqIHN0YXJ0X2NvZGUgPSAoY29uc3QgdXNjaGFyKikocmUgKyAx
KTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3RhcnRfY29kZSA9IChjb25zdCB1bnNp
Z25lZCBjaGFyKikocmUgKyAxKTsKICAgICAgICAgCi0gICAgICAgIGludCByZXR1cm5Db2RlID0g
bWF0Y2goc3RhcnRfbWF0Y2gsIHN0YXJ0X2NvZGUsIDIsIG1hdGNoX2Jsb2NrKTsKKyAgICAgICAg
aW50IHJldHVybkNvZGUgPSBtYXRjaChzdGFydE1hdGNoLCBzdGFydF9jb2RlLCAyLCBtYXRjaEJs
b2NrKTsKICAgICAgICAgCiAgICAgICAgIC8qIFdoZW4gdGhlIHJlc3VsdCBpcyBubyBtYXRjaCwg
YWR2YW5jZSB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBjaGFyYWN0ZXIKICAgICAgICAgIGFuZCBj
b250aW51ZS4gKi8KICAgICAgICAgCiAgICAgICAgIGlmIChyZXR1cm5Db2RlID09IE1BVENIX05P
TUFUQ0gpIHsKLSAgICAgICAgICAgIHN0YXJ0X21hdGNoKys7CisgICAgICAgICAgICBzdGFydE1h
dGNoKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIw
OTQsMzIgKzIwMzMsMzIgQEAgaW50IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4cCogcmUs
CiAgICAgICAgIAogICAgICAgICBpZiAodXNpbmdfdGVtcG9yYXJ5X29mZnNldHMpIHsKICAgICAg
ICAgICAgIGlmIChvZmZzZXRjb3VudCA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG9m
ZnNldHMgKyAyLCBtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yICsgMiwgKG9mZnNldGNvdW50IC0g
MikgKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KG9mZnNldHMgKyAyLCBt
YXRjaEJsb2NrLm9mZnNldFZlY3RvciArIDIsIChvZmZzZXRjb3VudCAtIDIpICogc2l6ZW9mKGlu
dCkpOwogICAgICAgICAgICAgICAgIERQUklOVEYoKCJDb3BpZWQgb2Zmc2V0cyBmcm9tIHRlbXBv
cmFyeSBtZW1vcnlcbiIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYXRjaF9i
bG9jay5lbmRfb2Zmc2V0X3RvcCA+IG9mZnNldGNvdW50KQotICAgICAgICAgICAgICAgIG1hdGNo
X2Jsb2NrLm9mZnNldF9vdmVyZmxvdyA9IHRydWU7CisgICAgICAgICAgICBpZiAobWF0Y2hCbG9j
ay5lbmRPZmZzZXRUb3AgPiBvZmZzZXRjb3VudCkKKyAgICAgICAgICAgICAgICBtYXRjaEJsb2Nr
Lm9mZnNldE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgRFBSSU5U
RigoIkZyZWVpbmcgdGVtcG9yYXJ5IG1lbW9yeVxuIikpOwotICAgICAgICAgICAgZGVsZXRlIFtd
IG1hdGNoX2Jsb2NrLm9mZnNldF92ZWN0b3I7CisgICAgICAgICAgICBkZWxldGUgW10gbWF0Y2hC
bG9jay5vZmZzZXRWZWN0b3I7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybkNv
ZGUgPSBtYXRjaF9ibG9jay5vZmZzZXRfb3ZlcmZsb3cgPyAwIDogbWF0Y2hfYmxvY2suZW5kX29m
ZnNldF90b3AgLyAyOworICAgICAgICByZXR1cm5Db2RlID0gbWF0Y2hCbG9jay5vZmZzZXRPdmVy
ZmxvdyA/IDAgOiBtYXRjaEJsb2NrLmVuZE9mZnNldFRvcCAvIDI7CiAgICAgICAgIAogICAgICAg
ICBpZiAob2Zmc2V0Y291bnQgPCAyKQogICAgICAgICAgICAgcmV0dXJuQ29kZSA9IDA7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgb2Zmc2V0c1swXSA9IHN0YXJ0X21hdGNoIC0gbWF0Y2hf
YmxvY2suc3RhcnRfc3ViamVjdDsKLSAgICAgICAgICAgIG9mZnNldHNbMV0gPSBtYXRjaF9ibG9j
ay5lbmRfbWF0Y2hfcHRyIC0gbWF0Y2hfYmxvY2suc3RhcnRfc3ViamVjdDsKKyAgICAgICAgICAg
IG9mZnNldHNbMF0gPSBzdGFydE1hdGNoIC0gbWF0Y2hCbG9jay5zdGFydFN1YmplY3Q7CisgICAg
ICAgICAgICBvZmZzZXRzWzFdID0gbWF0Y2hCbG9jay5lbmRNYXRjaFB0ciAtIG1hdGNoQmxvY2su
c3RhcnRTdWJqZWN0OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBEUFJJTlRGKCgiPj4+
PiByZXR1cm5pbmcgJWRcbiIsIHJjKSk7CiAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOwotICAg
IH0gd2hpbGUgKHN0YXJ0X21hdGNoIDw9IGVuZF9zdWJqZWN0KTsKKyAgICB9IHdoaWxlIChzdGFy
dE1hdGNoIDw9IGVuZFN1YmplY3QpOwogICAgIAogICAgIGlmICh1c2luZ190ZW1wb3Jhcnlfb2Zm
c2V0cykgewogICAgICAgICBEUFJJTlRGKCgiRnJlZWluZyB0ZW1wb3JhcnkgbWVtb3J5XG4iKSk7
Ci0gICAgICAgIGRlbGV0ZSBbXSBtYXRjaF9ibG9jay5vZmZzZXRfdmVjdG9yOworICAgICAgICBk
ZWxldGUgW10gbWF0Y2hCbG9jay5vZmZzZXRWZWN0b3I7CiAgICAgfQogICAgIAogICAgIERQUklO
VEYoKCI+Pj4+IHJldHVybmluZyBQQ1JFX0VSUk9SX05PTUFUQ0hcbiIpKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3BjcmUvcGNyZV9pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3BjcmUvcGNyZV9pbnRlcm5hbC5oCShyZXZpc2lvbiAyODc4OCkKKysrIEphdmFTY3JpcHRD
b3JlL3BjcmUvcGNyZV9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwzNCArNzYsMTQg
QEAgdG90YWwgbGVuZ3RoLiAqLwogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpCiAjZW5k
aWYKIAorI2luY2x1ZGUgInBjcmUuaCIKKwogLyogVGhlIHZhbHVlIG9mIExJTktfU0laRSBkZXRl
cm1pbmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBzdG9yZSBsaW5rcyBhcwogb2Zmc2V0
cyB3aXRoaW4gdGhlIGNvbXBpbGVkIHJlZ2V4LiBUaGUgZGVmYXVsdCBpcyAyLCB3aGljaCBhbGxv
d3MgZm9yIGNvbXBpbGVkCi1wYXR0ZXJucyB1cCB0byA2NEsgbG9uZy4gVGhpcyBjb3ZlcnMgdGhl
IHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMuIEhvd2V2ZXIsIFBDUkUKLWNhbiBhbHNvIGJlIGNvbXBp
bGVkIHRvIHVzZSAzIG9yIDQgYnl0ZXMgaW5zdGVhZC4gVGhpcyBhbGxvd3MgZm9yIGxvbmdlcgot
cGF0dGVybnMgaW4gZXh0cmVtZSBjYXNlcy4gT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsICJj
b25maWd1cmUiIGNhbiBiZSB1c2VkCi10byBvdmVycmlkZSB0aGlzIGRlZmF1bHQuICovCitwYXR0
ZXJucyB1cCB0byA2NEsgbG9uZy4gKi8KIAogI2RlZmluZSBMSU5LX1NJWkUgICAyCiAKLS8qIFRo
ZSBiZWxvdyBsaW1pdCByZXN0cmljdHMgdGhlIG51bWJlciBvZiByZWN1cnNpdmUgbWF0Y2ggY2Fs
bHMgaW4gb3JkZXIgdG8KLWxpbWl0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzdGFjayAob3IgaGVh
cCwgaWYgTk9fUkVDVVJTRSBpcyBkZWZpbmVkKSB0aGF0IGlzIHVzZWQuIFRoZQotdmFsdWUgb2Yg
TUFUQ0hfTElNSVRfUkVDVVJTSU9OIGFwcGxpZXMgb25seSB0byByZWN1cnNpdmUgY2FsbHMgb2Yg
bWF0Y2goKS4KLSAKLSBUaGlzIGxpbWl0IGlzIHRpZWQgdG8gdGhlIHNpemUgb2YgTWF0Y2hGcmFt
ZS4gIFJpZ2h0IG5vdyB3ZSBhbGxvdyBQQ1JFIHRvIGFsbG9jYXRlIHVwCi0gdG8gTUFUQ0hfTElN
SVRfUkVDVVJTSU9OIC0gMTYgKiBzaXplb2YoTWF0Y2hGcmFtZSkgYnl0ZXMgb2YgInN0YWNrIiBz
cGFjZSBiZWZvcmUgd2UgZ2l2ZSB1cC4KLSBDdXJyZW50bHkgdGhhdCdzIDEwMDAwMCAtIDE2ICog
KDIzICogNCkgIH4gOTBNQgotICovCi0KLSNkZWZpbmUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OIDEw
MDAwMAotCi0jZGVmaW5lIF9wY3JlX2RlZmF1bHRfdGFibGVzIGtqc19wY3JlX2RlZmF1bHRfdGFi
bGVzCi0jZGVmaW5lIF9wY3JlX29yZDJ1dGY4IGtqc19wY3JlX29yZDJ1dGY4Ci0jZGVmaW5lIF9w
Y3JlX3V0ZjhfdGFibGUxIGtqc19wY3JlX3V0ZjhfdGFibGUxCi0jZGVmaW5lIF9wY3JlX3V0Zjhf
dGFibGUyIGtqc19wY3JlX3V0ZjhfdGFibGUyCi0jZGVmaW5lIF9wY3JlX3V0ZjhfdGFibGUzIGtq
c19wY3JlX3V0ZjhfdGFibGUzCi0jZGVmaW5lIF9wY3JlX3V0ZjhfdGFibGU0IGtqc19wY3JlX3V0
ZjhfdGFibGU0Ci0jZGVmaW5lIF9wY3JlX3hjbGFzcyBranNfcGNyZV94Y2xhc3MKLQogLyogRGVm
aW5lIERFQlVHIHRvIGdldCBkZWJ1Z2dpbmcgb3V0cHV0IG9uIHN0ZG91dC4gKi8KIAogI2lmIDAK
QEAgLTEyMSwxMTggKzEwMSw3MiBAQCBhbGwsIGl0IGhhZCBvbmx5IGJlZW4gYWJvdXQgMTAgeWVh
cnMgdGhlCiAjZGVmaW5lIERQUklOVEYocCkgLypub3RoaW5nKi8KICNlbmRpZgogCi0vKiBTdGFu
ZGFyZCBDIGhlYWRlcnMgcGx1cyB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlIGRlZmluaXRpb24uIFRo
ZSBvbmx5IHRpbWUKLXNldGptcCBhbmQgc3RkYXJnIGFyZSB1c2VkIGlzIHdoZW4gTk9fUkVDVVJT
RSBpcyBzZXQuICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgot
I2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGRl
Zi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0KLS8qIEluY2x1ZGUgdGhlIHB1YmxpYyBQQ1JFIGhlYWRlciBhbmQgdGhlIGRl
ZmluaXRpb25zIG9mIFVDUCBjaGFyYWN0ZXIgcHJvcGVydHkKLXZhbHVlcy4gKi8KLQotI2luY2x1
ZGUgInBjcmUuaCIKLQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwY3JlX3VpbnQxNjsKLXR5cGVk
ZWYgdW5zaWduZWQgcGNyZV91aW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdXNjaGFyOwot
CiAvKiBQQ1JFIGtlZXBzIG9mZnNldHMgaW4gaXRzIGNvbXBpbGVkIGNvZGUgYXMgMi1ieXRlIHF1
YW50aXRpZXMgKGFsd2F5cyBzdG9yZWQKIGluIGJpZy1lbmRpYW4gb3JkZXIpIGJ5IGRlZmF1bHQu
IFRoZXNlIGFyZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gbGluayBmcm9tIHRoZQogc3RhcnQgb2Yg
YSBzdWJwYXR0ZXJuIHRvIGl0cyBhbHRlcm5hdGl2ZXMgYW5kIGl0cyBlbmQuIFRoZSB1c2Ugb2Yg
MiBieXRlcyBwZXIKIG9mZnNldCBsaW1pdHMgdGhlIHNpemUgb2YgdGhlIGNvbXBpbGVkIHJlZ2V4
IHRvIGFyb3VuZCA2NEssIHdoaWNoIGlzIGJpZyBlbm91Z2gKIGZvciBhbG1vc3QgZXZlcnlib2R5
LiBIb3dldmVyLCBJIHJlY2VpdmVkIGEgcmVxdWVzdCBmb3IgYW4gZXZlbiBiaWdnZXIgbGltaXQu
CiBGb3IgdGhpcyByZWFzb24sIGFuZCBhbHNvIHRvIG1ha2UgdGhlIGNvZGUgZWFzaWVyIHRvIG1h
aW50YWluLCB0aGUgc3RvcmluZyBhbmQKLWxvYWRpbmcgb2Ygb2Zmc2V0cyBmcm9tIHRoZSBieXRl
IHN0cmluZyBpcyBub3cgaGFuZGxlZCBieSB0aGUgbWFjcm9zIHRoYXQgYXJlCi1kZWZpbmVkIGhl
cmUuCi0KLVRoZSBtYWNyb3MgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHZhbHVlIG9mIExJTktfU0la
RS4gVGhpcyBkZWZhdWx0cyB0byAyIGluCi10aGUgY29uZmlnLmggZmlsZSwgYnV0IGNhbiBiZSBv
dmVycmlkZGVuIGJ5IHVzaW5nIC1EIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoaXMKLWlzIGF1dG9t
YXRlZCBvbiBVbml4IHN5c3RlbXMgdmlhIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLiAqLworbG9h
ZGluZyBvZiBvZmZzZXRzIGZyb20gdGhlIGJ5dGUgc3RyaW5nIGlzIG5vdyBoYW5kbGVkIGJ5IHRo
ZSBmdW5jdGlvbnMgdGhhdCBhcmUKK2RlZmluZWQgaGVyZS4gKi8KIAotI2lmIExJTktfU0laRSA9
PSAyCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHVzY2hhciog
b3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLXsKLSAgICBv
cGNvZGVQdHJbb2Zmc2V0XSA9IHZhbHVlID4+IDg7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDFd
ID0gdmFsdWUgJiAyNTU7Ci19CisvKiBQQ1JFIHVzZXMgc29tZSBvdGhlciAyLWJ5dGUgcXVhbnRp
dGllcyB0aGF0IGRvIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgc2l6ZSBvZgorb2Zmc2V0cyBjaGFuZ2Vz
LiBUaGVyZSBhcmUgdXNlZCBmb3IgcmVwZWF0IGNvdW50cyBhbmQgZm9yIG90aGVyIHRoaW5ncyBz
dWNoIGFzCitjYXB0dXJpbmcgcGFyZW50aGVzaXMgbnVtYmVycyBpbiBiYWNrIHJlZmVyZW5jZXMu
ICovCiAKLXN0YXRpYyBpbmxpbmUgc2hvcnQgZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChjb25zdCB1
c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXQy
Qnl0ZVZhbHVlKHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0ciwgaW50IHZhbHVlKQogewotICAgIHJl
dHVybiAoKG9wY29kZVB0cltvZmZzZXRdIDw8IDgpIHwgb3Bjb2RlUHRyW29mZnNldCArIDFdKTsK
KyAgICBBU1NFUlQodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAweEZGRkYpOworICAgIG9wY29kZVB0
clswXSA9IHZhbHVlID4+IDg7CisgICAgb3Bjb2RlUHRyWzFdID0gdmFsdWU7CiB9CiAKLSNkZWZp
bmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8PCAxNikKLQotI2VsaWYgTElOS19TSVpFID09IDMKLQot
c3RhdGljIGlubGluZSB2b2lkIHB1dE9wY29kZVZhbHVlQXRPZmZzZXQodXNjaGFyKiBvcGNvZGVQ
dHIsIHNpemVfdCBvZmZzZXQsIHVuc2lnbmVkIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ2V0
MkJ5dGVWYWx1ZShjb25zdCB1bnNpZ25lZCBjaGFyKiBvcGNvZGVQdHIpCiB7Ci0gICAgQVNTRVJU
KCEodmFsdWUgJiAweEZGMDAwMDAwKSk7IC8vIFRoaXMgZnVuY3Rpb24gb25seSBhbGxvd3MgdmFs
dWVzIDwgMl4yNAotICAgIG9wY29kZVB0cltvZmZzZXRdID0gdmFsdWUgPj4gMTY7Ci0gICAgb3Bj
b2RlUHRyW29mZnNldCArIDFdID0gdmFsdWUgPj4gODsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0ICsg
Ml0gPSB2YWx1ZSAmIDI1NTsKKyAgICByZXR1cm4gKG9wY29kZVB0clswXSA8PCA4KSB8IG9wY29k
ZVB0clsxXTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2V0T3Bjb2RlVmFsdWVBdE9mZnNldChj
b25zdCB1c2NoYXIqIG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBwdXQyQnl0ZVZhbHVlQW5kQWR2YW5jZSh1bnNpZ25lZCBjaGFyKiYgb3Bjb2RlUHRyLCBpbnQg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuICgob3Bjb2RlUHRyW29mZnNldF0gPDwgMTYpIHwgKG9wY29k
ZVB0cltvZmZzZXQgKyAxXSA8PCA4KSB8IG9wY29kZVB0cltvZmZzZXQgKyAyXSk7CisgICAgcHV0
MkJ5dGVWYWx1ZShvcGNvZGVQdHIsIHZhbHVlKTsKKyAgICBvcGNvZGVQdHIgKz0gMjsKIH0KIAot
I2RlZmluZSBNQVhfUEFUVEVSTl9TSVpFICgxIDw8IDI0KQotCi0jZWxpZiBMSU5LX1NJWkUgPT0g
NAotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0T3Bjb2RlVmFsdWVBdE9mZnNldCh1c2NoYXIqIG9w
Y29kZVB0ciwgc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZv
aWQgcHV0TGlua1ZhbHVlQWxsb3daZXJvKHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0ciwgaW50IHZh
bHVlKQogewotICAgIG9wY29kZVB0cltvZmZzZXRdID0gdmFsdWUgPj4gMjQ7Ci0gICAgb3Bjb2Rl
UHRyW29mZnNldCArIDFdID0gdmFsdWUgPj4gMTY7Ci0gICAgb3Bjb2RlUHRyW29mZnNldCArIDJd
ID0gdmFsdWUgPj4gODsKLSAgICBvcGNvZGVQdHJbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDI1NTsK
KyAgICBwdXQyQnl0ZVZhbHVlKG9wY29kZVB0ciwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5l
IGludCBnZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KGNvbnN0IHVzY2hhciogb3Bjb2RlUHRyLCBzaXpl
X3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSBpbnQgZ2V0TGlua1ZhbHVlQWxsb3daZXJvKGNvbnN0
IHVuc2lnbmVkIGNoYXIqIG9wY29kZVB0cikKIHsKLSAgICByZXR1cm4gKChvcGNvZGVQdHJbb2Zm
c2V0XSA8PCAyNCkgfCAob3Bjb2RlUHRyW29mZnNldCArIDFdIDw8IDE2KSB8IChvcGNvZGVQdHJb
b2Zmc2V0ICsgMl0gPDwgOCkgfCBvcGNvZGVQdHJbb2Zmc2V0ICsgM10pOworICAgIHJldHVybiBn
ZXQyQnl0ZVZhbHVlKG9wY29kZVB0cik7CiB9CiAKLSNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAo
MSA8PCAzMCkgICAvKiBLZWVwIGl0IHBvc2l0aXZlICovCi0KLSNlbHNlCi0jZXJyb3IgTElOS19T
SVpFIG11c3QgYmUgZWl0aGVyIDIsIDMsIG9yIDQKLSNlbmRpZgorI2RlZmluZSBNQVhfUEFUVEVS
Tl9TSVpFICgxIDw8IDE2KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0T3Bjb2RlVmFsdWVBdE9m
ZnNldEFuZEFkdmFuY2UodXNjaGFyKiYgb3Bjb2RlUHRyLCBzaXplX3Qgb2Zmc2V0LCB1bnNpZ25l
ZCBzaG9ydCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRMaW5rVmFsdWUodW5zaWduZWQg
Y2hhciogb3Bjb2RlUHRyLCBpbnQgdmFsdWUpCiB7Ci0gICAgcHV0T3Bjb2RlVmFsdWVBdE9mZnNl
dChvcGNvZGVQdHIsIG9mZnNldCwgdmFsdWUpOwotICAgIG9wY29kZVB0ciArPSBMSU5LX1NJWkU7
CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBwdXRMaW5rVmFsdWVBbGxvd1plcm8ob3Bjb2RlUHRy
LCB2YWx1ZSk7CiB9CiAKLS8qIFBDUkUgdXNlcyBzb21lIG90aGVyIDItYnl0ZSBxdWFudGl0aWVz
IHRoYXQgZG8gbm90IGNoYW5nZSB3aGVuIHRoZSBzaXplIG9mCi1vZmZzZXRzIGNoYW5nZXMuIFRo
ZXJlIGFyZSB1c2VkIGZvciByZXBlYXQgY291bnRzIGFuZCBmb3Igb3RoZXIgdGhpbmdzIHN1Y2gg
YXMKLWNhcHR1cmluZyBwYXJlbnRoZXNpcyBudW1iZXJzIGluIGJhY2sgcmVmZXJlbmNlcy4gKi8K
LQotc3RhdGljIGlubGluZSB2b2lkIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldCh1c2NoYXIq
IG9wY29kZVB0ciwgc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCitzdGF0aWMg
aW5saW5lIGludCBnZXRMaW5rVmFsdWUoY29uc3QgdW5zaWduZWQgY2hhciogb3Bjb2RlUHRyKQog
ewotICAgIG9wY29kZVB0cltvZmZzZXRdID0gdmFsdWUgPj4gODsKLSAgICBvcGNvZGVQdHJbb2Zm
c2V0ICsgMV0gPSB2YWx1ZSAmIDI1NTsKKyAgICBpbnQgdmFsdWUgPSBnZXRMaW5rVmFsdWVBbGxv
d1plcm8ob3Bjb2RlUHRyKTsKKyAgICBBU1NFUlQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsK
IH0KIAotc3RhdGljIGlubGluZSBzaG9ydCBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZzZXQoY29u
c3QgdXNjaGFyKiBvcGNvZGVQdHIsIHNpemVfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHZvaWQg
cHV0TGlua1ZhbHVlQW5kQWR2YW5jZSh1bnNpZ25lZCBjaGFyKiYgb3Bjb2RlUHRyLCBpbnQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuICgob3Bjb2RlUHRyW29mZnNldF0gPDwgOCkgfCBvcGNvZGVQdHJb
b2Zmc2V0ICsgMV0pOworICAgIHB1dExpbmtWYWx1ZShvcGNvZGVQdHIsIHZhbHVlKTsKKyAgICBv
cGNvZGVQdHIgKz0gTElOS19TSVpFOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0MkJ5dGVP
cGNvZGVWYWx1ZUF0T2Zmc2V0QW5kQWR2YW5jZSh1c2NoYXIqJiBvcGNvZGVQdHIsIHNpemVfdCBv
ZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIHB1dExpbmtW
YWx1ZUFsbG93WmVyb0FuZEFkdmFuY2UodW5zaWduZWQgY2hhciomIG9wY29kZVB0ciwgaW50IHZh
bHVlKQogewotICAgIHB1dDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChvcGNvZGVQdHIsIG9mZnNl
dCwgdmFsdWUpOwotICAgIG9wY29kZVB0ciArPSAyOworICAgIHB1dExpbmtWYWx1ZUFsbG93WmVy
byhvcGNvZGVQdHIsIHZhbHVlKTsKKyAgICBvcGNvZGVQdHIgKz0gTElOS19TSVpFOwogfQogCiAv
LyBGSVhNRTogVGhlc2UgYXJlIHJlYWxseSBtb3JlIG9mIGEgImNvbXBpbGVkIHJlZ2V4cCBzdGF0
ZSIgdGhhbiAicmVnZXhwIG9wdGlvbnMiCkBAIC0yNDUsMTYgKzE3OSw2IEBAIGVudW0gUmVnRXhw
T3B0aW9ucyB7CiAgICAgTWF0Y2hBY3Jvc3NNdWx0aXBsZUxpbmVzT3B0aW9uID0gMHgwMDAwMDAw
MgogfTsKIAotLyogTmVnYXRpdmUgdmFsdWVzIGZvciB0aGUgZmlyc3RjaGFyIGFuZCByZXFjaGFy
IHZhcmlhYmxlcyAqLwotCi0jZGVmaW5lIFJFUV9VTlNFVCAoLTIpCi0jZGVmaW5lIFJFUV9OT05F
ICAoLTEpCi0KLS8qIFRoZSBtYXhpbXVtIHJlbWFpbmluZyBsZW5ndGggb2Ygc3ViamVjdCB3ZSBh
cmUgcHJlcGFyZWQgdG8gc2VhcmNoIGZvciBhCi1yZXFfYnl0ZSBtYXRjaC4gKi8KLQotI2RlZmlu
ZSBSRVFfQllURV9NQVggMTAwMAotCiAvKiBGbGFncyBhZGRlZCB0byBmaXJzdGJ5dGUgb3IgcmVx
Ynl0ZTsgYSAibm9uLWxpdGVyYWwiIGl0ZW0gaXMgZWl0aGVyIGEKIHZhcmlhYmxlLWxlbmd0aCBy
ZXBlYXQsIG9yIGEgYW55dGhpbmcgb3RoZXIgdGhhbiBsaXRlcmFsIGNoYXJhY3RlcnMuICovCiAK
QEAgLTM2Niw4ICsyOTAsNiBAQCBtdXN0IGFsc28gYmUgdXBkYXRlZCB0byBtYXRjaC4gKi8KICAg
ICBtYWNybyhBU1NFUlQpIFwKICAgICBtYWNybyhBU1NFUlRfTk9UKSBcCiAgICAgXAotICAgIG1h
Y3JvKE9OQ0UpIFwKLSAgICBcCiAgICAgbWFjcm8oQlJBWkVSTykgXAogICAgIG1hY3JvKEJSQU1J
TlpFUk8pIFwKICAgICBtYWNybyhCUkFOVU1CRVIpIFwKQEAgLTM4MSw1NyArMzAzLDE1IEBAIHN0
dWR5LmMgdGhhdCBhbGwgb3Bjb2RlcyBhcmUgbGVzcyB0aGFuIDEKIGNoYXJhY3RlciBzZXF1ZW5j
ZXMgZWFzaWVyLiAqLwogCiAvKiBUaGUgaGlnaGVzdCBleHRyYWN0aW9uIG51bWJlciBiZWZvcmUg
d2UgaGF2ZSB0byBzdGFydCB1c2luZyBhZGRpdGlvbmFsCi1ieXRlcy4gKE9yaWdpbmFsbHkgUENS
RSBkaWRuJ3QgaGF2ZSBzdXBwb3J0IGZvciBleHRyYWN0aW9uIGNvdW50cyBoaWdodGVyIHRoYW4K
K2J5dGVzLiAoT3JpZ2luYWxseSBQQ1JFIGRpZG4ndCBoYXZlIHN1cHBvcnQgZm9yIGV4dHJhY3Rp
b24gY291bnRzIGhpZ2hlciB0aGFuCiB0aGlzIG51bWJlci4pIFRoZSB2YWx1ZSBpcyBsaW1pdGVk
IGJ5IHRoZSBudW1iZXIgb2Ygb3Bjb2RlcyBsZWZ0IGFmdGVyIE9QX0JSQSwKIGkuZS4gMjU1IC0g
T1BfQlJBLiBXZSBhY3R1YWxseSBzZXQgaXQgYSBiaXQgbG93ZXIgdG8gbGVhdmUgcm9vbSBmb3Ig
YWRkaXRpb25hbAogb3Bjb2Rlcy4gKi8KIAotI2RlZmluZSBFWFRSQUNUX0JBU0lDX01BWCAgMTAw
Ci0KLS8qIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgbGVuZ3RoIG9mIGZpeGVkIGxlbmd0aCBvcGVy
YXRpb25zIGluIHRoZSBjb21waWxlZAotcmVnZXguIFRoZSBsZW5ndGhzIGFyZSB1c2VkIHdoZW4g
c2VhcmNoaW5nIGZvciBzcGVjaWZpYyB0aGluZ3MsIGFuZCBhbHNvIGluIHRoZQotZGVidWdnaW5n
IHByaW50aW5nIG9mIGEgY29tcGlsZWQgcmVnZXguIFdlIHVzZSBhIG1hY3JvIHNvIHRoYXQgaXQg
Y2FuIGJlCi1kZWZpbmVkIGNsb3NlIHRvIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgb3Bjb2RlcyB0
aGVtc2VsdmVzLgotCi1BcyB0aGluZ3MgaGF2ZSBiZWVuIGV4dGVuZGVkLCBzb21lIG9mIHRoZXNl
IGFyZSBubyBsb25nZXIgZml4ZWQgbGVudGhzLCBidXQgYXJlCi1taW5pbWEgaW5zdGVhZC4gRm9y
IGV4YW1wbGUsIHRoZSBsZW5ndGggb2YgYSBzaW5nbGUtY2hhcmFjdGVyIHJlcGVhdCBtYXkgdmFy
eQotaW4gVVRGLTggbW9kZS4gVGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgdGFibGUgbXVzdCBrbm93
IGFib3V0IHN1Y2ggdGhpbmdzLiAqLwotCi0jZGVmaW5lIE9QX0xFTkdUSFMgXAotICAxLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8gXAotICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgLyogXEIsIFxi
LCBcRCwgXGQsIFxTLCBccywgXFcsIFx3ICAgICAgICAgKi8gXAotICAxLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogQW55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8gXAotICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXiwgJCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAyLCAyLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogQ2hhciwgQ2hhcm5jIC0gbWluaW11bSBsZW5ndGhzICAgICAgICAgKi8gXAotICAy
LCAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhciBvciBub24tY2FzZWQg
ICAgICAgICAgICAgICAgKi8gXAotICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
bm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAvKiBQb3NpdGl2
ZSBzaW5nbGUtY2hhciByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIFRoZXNl
IGFyZSAgKi8gXAotICAyLCAyLCAyLCAyLCAyLCAyLCAgICAgICAgICAgICAgLyogKiwgKj8sICss
ICs/LCA/LCA/PyAgICAgICoqIG1pbmltYSBpbiAgKi8gXAotICA0LCA0LCA0LCAgICAgICAgICAg
ICAgICAgICAgICAgLyogdXB0bywgbWludXB0bywgZXhhY3QgICAgICoqIFVURi04IG1vZGUgKi8g
XAotICAvKiBOZWdhdGl2ZSBzaW5nbGUtY2hhciByZXBlYXRzIC0gb25seSBmb3IgY2hhcnMgPCAy
NTYgICAgICAgICAgICAgICAgICAgKi8gXAotICAyLCAyLCAyLCAyLCAyLCAyLCAgICAgICAgICAg
ICAgLyogTk9UICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAgKi8gXAotICA0LCA0
LCA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIHVwdG8sIG1pbnVwdG8sIGV4YWN0ICAg
ICAgICAgICAgICAgKi8gXAotICAvKiBQb3NpdGl2ZSB0eXBlIHJlcGVhdHMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAyLCAyLCAyLCAyLCAy
LCAyLCAgICAgICAgICAgICAgLyogVHlwZSAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAg
ICAgKi8gXAotICA0LCA0LCA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSB1cHRvLCBt
aW51cHRvLCBleGFjdCAgICAgICAgICAgICAgKi8gXAotICAvKiBDaGFyYWN0ZXIgY2xhc3MgJiBy
ZWYgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAot
ICAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgLyogKiwgKj8sICssICs/LCA/LCA/PyAg
ICAgICAgICAgICAgICAgICAgKi8gXAotICA1LCA1LCAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogQ1JSQU5HRSwgQ1JNSU5SQU5HRSAgICAgICAgICAgICAgICAgICAgKi8gXAotIDMzLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8gXAotIDMzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkNMQVNT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogWENMQVNTIC0gdmFyaWFibGUgbGVuZ3RoICAgICAgICAgICAgICAg
Ki8gXAotICAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsgTElOS19TSVpFLCAgICAgICAgICAg
ICAgICAgICAvKiBBbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0g
IDEgKyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8qIEtldCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktfU0laRSwgICAgICAgICAgICAgICAg
ICAgLyogS2V0Um1heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAxICsg
TElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXRSbWluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUsICAgICAgICAgICAgICAgICAgIC8q
IEFzc2VydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgMSArIExJTktf
U0laRSwgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IG5vdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8gXAotICAxICsgTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBPbmNl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEsIDEsICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBCUkFaRVJPLCBCUkFNSU5aRVJPICAgICAgICAgICAgICAgICAg
ICAqLyBcCi0gIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCUkFOVU1CRVIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gIDEgKyBMSU5LX1NJWkUgICAgICAgICAg
ICAgICAgICAgIC8qIEJSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwK
Ky8qIEZJWE1FOiBOb3RlIHRoYXQgT1BfQlJBICsgMTAwIGlzID4gMTI4LCBzbyB0aGUgdHdvIGNv
bW1lbnRzIGFib3ZlCithcmUgaW4gY29uZmxpY3QhICovCiAKKyNkZWZpbmUgRVhUUkFDVF9CQVNJ
Q19NQVggIDEwMAogCiAvKiBUaGUgaW5kZXggb2YgbmFtZXMgYW5kIHRoZQogY29kZSB2ZWN0b3Ig
cnVuIG9uIGFzIGxvbmcgYXMgbmVjZXNzYXJ5IGFmdGVyIHRoZSBlbmQuIFdlIHN0b3JlIGFuIGV4
cGxpY2l0CkBAIC00NDIsMTYgKzMyMiwxMyBAQCBwb2ludGVyIHRoYXQgaXMgYWx3YXlzIE5VTEwu
CiAqLwogCiBzdHJ1Y3QgSlNSZWdFeHAgewotICAgIHBjcmVfdWludDMyIG9wdGlvbnM7CisgICAg
dW5zaWduZWQgb3B0aW9uczsKIAotICAgIHBjcmVfdWludDE2IHRvcF9icmFja2V0OwotICAgIHBj
cmVfdWludDE2IHRvcF9iYWNrcmVmOworICAgIHVuc2lnbmVkIHNob3J0IHRvcF9icmFja2V0Owor
ICAgIHVuc2lnbmVkIHNob3J0IHRvcF9iYWNrcmVmOwogICAgIAotICAgIC8vIGpzUmVnRXhwRXhl
Y3V0ZSAmJiBqc1JlZ0V4cENvbXBpbGUgY3VycmVudGx5IG9ubHkgaG93IHRvIGhhbmRsZSBBU0NJ
SQotICAgIC8vIGNoYXJzIGZvciB0aHNlIG9wdGltaXphdGlvbnMsIGhvd2V2ZXIgaXQgd291bGQg
YmUgdHJpdmlhbCB0byBhZGQgc3VwcG9ydAotICAgIC8vIGZvciBvcHRpbWl6ZWQgVUNoYXIgZmly
c3RfYnl0ZS9yZXFfYnl0ZSBzY2FucwotICAgIHBjcmVfdWludDE2IGZpcnN0X2J5dGU7Ci0gICAg
cGNyZV91aW50MTYgcmVxX2J5dGU7CisgICAgdW5zaWduZWQgc2hvcnQgZmlyc3RfYnl0ZTsKKyAg
ICB1bnNpZ25lZCBzaG9ydCByZXFfYnl0ZTsKIH07CiAKIC8qIEludGVybmFsIHNoYXJlZCBkYXRh
IHRhYmxlcy4gVGhlc2UgYXJlIHRhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUK
QEAgLTQ1OSw3MyArMzM2LDgyIEBAIHN0cnVjdCBKU1JlZ0V4cCB7CiAgYnV0IGFyZSBub3QgcGFy
dCBvZiB0aGUgUENSRSBwdWJsaWMgQVBJLiBUaGUgZGF0YSBmb3IgdGhlc2UgdGFibGVzIGlzIGlu
IHRoZQogIHBjcmVfdGFibGVzLmMgbW9kdWxlLiAqLwogCi0jZGVmaW5lIF9wY3JlX3V0ZjhfdGFi
bGUxX3NpemUgNgorI2RlZmluZSBranNfcGNyZV91dGY4X3RhYmxlMV9zaXplIDYKIAotZXh0ZXJu
IGNvbnN0IGludCAgICBfcGNyZV91dGY4X3RhYmxlMVs2XTsKLWV4dGVybiBjb25zdCBpbnQgICAg
X3BjcmVfdXRmOF90YWJsZTJbNl07Ci1leHRlcm4gY29uc3QgaW50ICAgIF9wY3JlX3V0ZjhfdGFi
bGUzWzZdOwotZXh0ZXJuIGNvbnN0IHVzY2hhciBfcGNyZV91dGY4X3RhYmxlNFsweDQwXTsKK2V4
dGVybiBjb25zdCBpbnQgICAga2pzX3BjcmVfdXRmOF90YWJsZTFbNl07CitleHRlcm4gY29uc3Qg
aW50ICAgIGtqc19wY3JlX3V0ZjhfdGFibGUyWzZdOworZXh0ZXJuIGNvbnN0IGludCAgICBranNf
cGNyZV91dGY4X3RhYmxlM1s2XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGtqc19wY3Jl
X3V0ZjhfdGFibGU0WzB4NDBdOwogCi1leHRlcm4gY29uc3QgdXNjaGFyIF9wY3JlX2RlZmF1bHRf
dGFibGVzW3RhYmxlc19sZW5ndGhdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIga2pzX3Bj
cmVfZGVmYXVsdF90YWJsZXNbdGFibGVzX2xlbmd0aF07CiAKLXN0YXRpYyBpbmxpbmUgdXNjaGFy
IHRvTG93ZXJDYXNlKHVzY2hhciBjKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHRvTG93
ZXJDYXNlKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBzdGF0aWMgY29uc3QgdXNjaGFyKiBsb3dl
ckNhc2VDaGFycyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgbGNjX29mZnNldDsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciogbG93ZXJDYXNlQ2hhcnMgPSBranNfcGNyZV9kZWZhdWx0
X3RhYmxlcyArIGxjY19vZmZzZXQ7CiAgICAgcmV0dXJuIGxvd2VyQ2FzZUNoYXJzW2NdOwogfQog
Ci1zdGF0aWMgaW5saW5lIHVzY2hhciBmbGlwQ2FzZSh1c2NoYXIgYykKK3N0YXRpYyBpbmxpbmUg
dW5zaWduZWQgY2hhciBmbGlwQ2FzZSh1bnNpZ25lZCBjaGFyIGMpCiB7Ci0gICAgc3RhdGljIGNv
bnN0IHVzY2hhciogZmxpcHBlZENhc2VDaGFycyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgZmNj
X29mZnNldDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciogZmxpcHBlZENhc2VDaGFy
cyA9IGtqc19wY3JlX2RlZmF1bHRfdGFibGVzICsgZmNjX29mZnNldDsKICAgICByZXR1cm4gZmxp
cHBlZENhc2VDaGFyc1tjXTsKIH0KIAotc3RhdGljIGlubGluZSB1c2NoYXIgY2xhc3NCaXRtYXBG
b3JDaGFyKHVzY2hhciBjKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNsYXNzQml0bWFw
Rm9yQ2hhcih1bnNpZ25lZCBjaGFyIGMpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHVzY2hhciogY2hh
ckNsYXNzQml0bWFwcyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgY2JpdHNfb2Zmc2V0OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKiBjaGFyQ2xhc3NCaXRtYXBzID0ga2pzX3BjcmVf
ZGVmYXVsdF90YWJsZXMgKyBjYml0c19vZmZzZXQ7CiAgICAgcmV0dXJuIGNoYXJDbGFzc0JpdG1h
cHNbY107CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNjaGFyIGNoYXJUeXBlRm9yQ2hhcih1c2NoYXIg
YykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjaGFyVHlwZUZvckNoYXIodW5zaWduZWQg
Y2hhciBjKQogewotICAgIGNvbnN0IHVzY2hhciogY2hhclR5cGVNYXAgPSBfcGNyZV9kZWZhdWx0
X3RhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogY2hhclR5
cGVNYXAgPSBranNfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGN0eXBlc19vZmZzZXQ7CiAgICAgcmV0
dXJuIGNoYXJUeXBlTWFwW2NdOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNXb3JkQ2hhcihV
Q2hhciBjKQogewotICAgIC8qIFVURjggQ2hhcmFjdGVycyA+IDEyOCBhcmUgYXNzdW1lZCB0byBi
ZSAibm9uLXdvcmQiIGNoYXJhY3RlcnMuICovCi0gICAgcmV0dXJuIChjIDwgMTI4ICYmIChjaGFy
VHlwZUZvckNoYXIoYykgJiBjdHlwZV93b3JkKSk7CisgICAgcmV0dXJuIGMgPCAxMjggJiYgKGNo
YXJUeXBlRm9yQ2hhcihjKSAmIGN0eXBlX3dvcmQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
aXNTcGFjZUNoYXIoVUNoYXIgYykKIHsKLSAgICByZXR1cm4gKGMgPCAxMjggJiYgKGNoYXJUeXBl
Rm9yQ2hhcihjKSAmIGN0eXBlX3NwYWNlKSk7CisgICAgcmV0dXJuIGMgPCAxMjggJiYgKGNoYXJU
eXBlRm9yQ2hhcihjKSAmIGN0eXBlX3NwYWNlKTsKIH0KIAotLyogSW50ZXJuYWwgc2hhcmVkIGZ1
bmN0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGJ5IG1vcmUgdGhhbgot
b25lIG9mIHRoZSBleHBvcnRlZCBwdWJsaWMgZnVuY3Rpb25zLiBUaGV5IGhhdmUgdG8gYmUgImV4
dGVybmFsIiBpbiB0aGUgQwotc2Vuc2UsIGJ1dCBhcmUgbm90IHBhcnQgb2YgdGhlIFBDUkUgcHVi
bGljIEFQSS4gKi8KLQotZXh0ZXJuIGludCAgICAgICAgIF9wY3JlX3VjcF9vdGhlcmNhc2UoY29u
c3QgdW5zaWduZWQgaW50KTsKLWV4dGVybiBib29sICAgICAgICBfcGNyZV94Y2xhc3MoaW50LCBj
b25zdCB1c2NoYXIqKTsKLQogc3RhdGljIGlubGluZSBib29sIGlzTmV3bGluZShVQ2hhciBubCkK
IHsKICAgICByZXR1cm4gKG5sID09IDB4QSB8fCBubCA9PSAweEQgfHwgbmwgPT0gMHgyMDI4IHx8
IG5sID09IDB4MjAyOSk7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgdG8gbWUgaWYgdGhp
cyBtb3ZlcyB0aGUgb3Bjb2RlIHB0ciB0byB0aGUgc3RhcnQgb2YgYWxsIGJyYW5jaGVzCi0vLyBv
ciB0byB0aGUgZW5kIG9mIGFsbCBicmFuY2hlcyAtLSBlY3MKLS8vIEZJWE1FOiBUaGlzIGFic3Ry
YWN0aW9uIGlzIHBvb3Igc2luY2UgaXQgYXNzdW1lcyB0aGF0IHlvdSB3YW50IHRvIGp1bXAgYmFz
ZWQgb24gd2hhdGV2ZXIKLS8vIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzdHJlYW0gaXMsIGFuZCAq
dGhlbiogZm9sbG93IGFueSBPUF9BTFQgYnJhbmNoZXMuCi1zdGF0aWMgaW5saW5lIHZvaWQgbW92
ZU9wY29kZVB0clBhc3RBbnlBbHRlcm5hdGVCcmFuY2hlcyhjb25zdCB1c2NoYXIqJiBvcGNvZGVQ
dHIpCi17Ci0gICAgZG8gewotICAgICAgICBvcGNvZGVQdHIgKz0gZ2V0T3Bjb2RlVmFsdWVBdE9m
ZnNldChvcGNvZGVQdHIsIDEpOwotICAgIH0gd2hpbGUgKCpvcGNvZGVQdHIgPT0gT1BfQUxUKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc0JyYWNrZXRTdGFydE9wY29kZSh1bnNpZ25lZCBjaGFyIG9w
Y29kZSkKK3sKKyAgICBpZiAob3Bjb2RlID49IE9QX0JSQSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBPUF9BU1NFUlQ6CisgICAgICAg
IGNhc2UgT1BfQVNTRVJUX05PVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkdmFuY2VUb0VuZE9mQnJhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyKiYgb3Bj
b2RlUHRyKQoreworICAgIEFTU0VSVChpc0JyYWNrZXRTdGFydE9wY29kZSgqb3Bjb2RlUHRyKSB8
fCAqb3Bjb2RlUHRyID09IE9QX0FMVCk7CisgICAgZG8KKyAgICAgICAgb3Bjb2RlUHRyICs9IGdl
dExpbmtWYWx1ZShvcGNvZGVQdHIgKyAxKTsKKyAgICB3aGlsZSAoKm9wY29kZVB0ciA9PSBPUF9B
TFQpOwogfQogCisvKiBJbnRlcm5hbCBzaGFyZWQgZnVuY3Rpb25zLiBUaGVzZSBhcmUgZnVuY3Rp
b25zIHRoYXQgYXJlIHVzZWQgaW4gbW9yZQordGhhdCBvbmUgb2YgdGhlIHNvdXJjZSBmaWxlcy4g
VGhleSBoYXZlIHRvIGhhdmUgZXh0ZXJuYWwgbGlua2FnZSwgYnV0CitidXQgYXJlIG5vdCBwYXJ0
IG9mIHRoZSBwdWJsaWMgQVBJIGFuZCBzbyBub3QgZXhwb3J0ZWQgZnJvbSB0aGUgbGlicmFyeS4g
Ki8KKworZXh0ZXJuIGludCBranNfcGNyZV91Y3Bfb3RoZXJjYXNlKHVuc2lnbmVkKTsKK2V4dGVy
biBib29sIGtqc19wY3JlX3hjbGFzcyhpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKKwogI2Vu
ZGlmCiAKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAJKHJldmlz
aW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDIwICs0OSwyMCBAQCBQQ1JFIGNvZGUgbW9kdWxlcy4gKi8KIC8qIFRo
ZXNlIGFyZSB0aGUgYnJlYWtwb2ludHMgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGJ5dGVzIGlu
IGEgVVRGLTgKIGNoYXJhY3Rlci4gKi8KIAotY29uc3QgaW50IF9wY3JlX3V0ZjhfdGFibGUxWzZd
ID0KK2NvbnN0IGludCBranNfcGNyZV91dGY4X3RhYmxlMVs2XSA9CiAgIHsgMHg3ZiwgMHg3ZmYs
IDB4ZmZmZiwgMHgxZmZmZmYsIDB4M2ZmZmZmZiwgMHg3ZmZmZmZmZn07CiAKIC8qIFRoZXNlIGFy
ZSB0aGUgaW5kaWNhdG9yIGJpdHMgYW5kIHRoZSBtYXNrIGZvciB0aGUgZGF0YSBiaXRzIHRvIHNl
dCBpbiB0aGUKIGZpcnN0IGJ5dGUgb2YgYSBjaGFyYWN0ZXIsIGluZGV4ZWQgYnkgdGhlIG51bWJl
ciBvZiBhZGRpdGlvbmFsIGJ5dGVzLiAqLwogCi1jb25zdCBpbnQgX3BjcmVfdXRmOF90YWJsZTJb
Nl0gPSB7IDAsICAgIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmN9OwotY29uc3QgaW50IF9w
Y3JlX3V0ZjhfdGFibGUzWzZdID0geyAweGZmLCAweDFmLCAweDBmLCAweDA3LCAweDAzLCAweDAx
fTsKK2NvbnN0IGludCBranNfcGNyZV91dGY4X3RhYmxlMls2XSA9IHsgMCwgICAgMHhjMCwgMHhl
MCwgMHhmMCwgMHhmOCwgMHhmY307Citjb25zdCBpbnQga2pzX3BjcmVfdXRmOF90YWJsZTNbNl0g
PSB7IDB4ZmYsIDB4MWYsIDB4MGYsIDB4MDcsIDB4MDMsIDB4MDF9OwogCiAvKiBUYWJsZSBvZiB0
aGUgbnVtYmVyIG9mIGV4dHJhIGNoYXJhY3RlcnMsIGluZGV4ZWQgYnkgdGhlIGZpcnN0IGNoYXJh
Y3RlcgogbWFza2VkIHdpdGggMHgzZi4gVGhlIGhpZ2hlc3QgbnVtYmVyIGZvciBhIHZhbGlkIFVU
Ri04IGNoYXJhY3RlciBpcyBpbiBmYWN0CiAweDNkLiAqLwogCi1jb25zdCB1c2NoYXIgX3BjcmVf
dXRmOF90YWJsZTRbMHg0MF0gPSB7Citjb25zdCB1bnNpZ25lZCBjaGFyIGtqc19wY3JlX3V0Zjhf
dGFibGU0WzB4NDBdID0gewogICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAogICAx
LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAogICAyLDIsMiwyLDIsMiwyLDIsMiwyLDIs
MiwyLDIsMiwyLApJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3VjcF9zZWFyY2hmdW5j
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3VjcF9zZWFyY2hm
dW5jcy5jcHAJKHJldmlzaW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3Vj
cF9zZWFyY2hmdW5jcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgQXJndW1l
bnRzOgogUmV0dXJuczogICAgICB0aGUgb3RoZXIgY2FzZSBvciAtMSBpZiBub25lCiAqLwogCi1p
bnQgX3BjcmVfdWNwX290aGVyY2FzZShjb25zdCB1bnNpZ25lZCBjKQoraW50IGtqc19wY3JlX3Vj
cF9vdGhlcmNhc2UodW5zaWduZWQgYykKIHsKICAgICBpbnQgYm90ID0gMDsKICAgICBpbnQgdG9w
ID0gc2l6ZW9mKHVjcF90YWJsZSkgLyBzaXplb2YoY25vZGUpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcGNyZS9wY3JlX3hjbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNy
ZS9wY3JlX3hjbGFzcy5jcHAJKHJldmlzaW9uIDI4Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvcGNy
ZS9wY3JlX3hjbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwxMyBAQCBSZXR1
cm5zOiAgICAgIHRydWUgaWYgY2hhcmFjdGVyIG1hdGNoZXMsCiAvKiBHZXQgdGhlIG5leHQgVVRG
LTggY2hhcmFjdGVyLCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuIFRoaXMgaXMgY2FsbGVkIHdoZW4g
d2UKICBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQg
Z2V0VVRGOENoYXJBbmRBZHZhbmNlUG9pbnRlcihpbnQmIGMsIGNvbnN0IHVzY2hhciomIHN1Ympl
Y3RQdHIpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0VVRGOENoYXJBbmRBZHZhbmNlUG9pbnRlcihp
bnQmIGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIqJiBzdWJqZWN0UHRyKQogewogICAgIGMgPSAqc3Vi
amVjdFB0cisrOwogICAgIGlmICgoYyAmIDB4YzApID09IDB4YzApIHsKLSAgICAgICAgaW50IGdj
YWEgPSBfcGNyZV91dGY4X3RhYmxlNFtjICYgMHgzZl07ICAvKiBOdW1iZXIgb2YgYWRkaXRpb25h
bCBieXRlcyAqLworICAgICAgICBpbnQgZ2NhYSA9IGtqc19wY3JlX3V0ZjhfdGFibGU0W2MgJiAw
eDNmXTsgIC8qIE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovCiAgICAgICAgIGludCBnY3Nz
ID0gNiAqIGdjYWE7Ci0gICAgICAgIGMgPSAoYyAmIF9wY3JlX3V0ZjhfdGFibGUzW2djYWFdKSA8
PCBnY3NzOworICAgICAgICBjID0gKGMgJiBranNfcGNyZV91dGY4X3RhYmxlM1tnY2FhXSkgPDwg
Z2NzczsKICAgICAgICAgd2hpbGUgKGdjYWEtLSA+IDApIHsKICAgICAgICAgICAgIGdjc3MgLT0g
NjsKICAgICAgICAgICAgIGMgfD0gKCpzdWJqZWN0UHRyKysgJiAweDNmKSA8PCBnY3NzOwpAQCAt
NzMsNyArNzMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0VVRGOENoYXJBbmRBZHZhbmNlCiAg
ICAgfQogfQogCi1ib29sIF9wY3JlX3hjbGFzcyhpbnQgYywgY29uc3QgdXNjaGFyKiBkYXRhKQor
Ym9vbCBranNfcGNyZV94Y2xhc3MoaW50IGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEpCiB7
CiAgICAgYm9vbCBuZWdhdGVkID0gKCpkYXRhICYgWENMX05PVCk7CiAgICAgCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9wY3JlL3VjcGludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcGNyZS91Y3BpbnRlcm5hbC5oCShyZXZpc2lvbiAyODc4OCkKKysrIEphdmFTY3JpcHRDb3Jl
L3BjcmUvdWNwaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIHdvcmRzIHRoYXQgZm9ybSBhIGRhdGEgaXRlbSBpbiB0
aGUgdGFibGUuICovCiAKIHR5cGVkZWYgc3RydWN0IGNub2RlIHsKLSAgcGNyZV91aW50MzIgZjA7
Ci0gIHBjcmVfdWludDMyIGYxOworICB1bnNpZ25lZCBmMDsKKyAgdW5zaWduZWQgZjE7CiB9IGNu
b2RlOwogCiAvKiBUaGluZ3MgZm9yIHRoZSBmMCBmaWVsZCAqLwpJbmRleDogSmF2YVNjcmlwdENv
cmUvd3RmL0FTQ0lJQ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQVND
SUlDVHlwZS5oCShyZXZpc2lvbiAyODc4OCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxNCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkK
ICAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGEod2NoYXJfdCBjKSB7IHJldHVybiAoYyB8IDB4
MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQogI2VuZGlmCisgICAgaW5saW5lIGJv
b2wgaXNBU0NJSUFscGhhKGludCBjKSB7IHJldHVybiAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8
IDB4MjApIDw9ICd6JzsgfQogCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVtZXJpYyhj
aGFyIGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkgPj0gJ2En
ICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVt
ZXJpYyh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCAo
YyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQogI2lmICFDT01QSUxFUihN
U1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQogICAgIGlubGluZSBib29s
IGlzQVNDSUlBbHBoYW51bWVyaWMod2NoYXJfdCBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9
ICc5JyB8fCAoYyB8IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQogI2VuZGlm
CisgICAgaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVtZXJpYyhpbnQgYykgeyByZXR1cm4gYyA+
PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAn
eic7IH0KIAogICAgIGlubGluZSBib29sIGlzQVNDSUlEaWdpdChjaGFyIGMpIHsgcmV0dXJuIChj
ID49ICcwJykgJiAoYyA8PSAnOScpOyB9CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSURpZ2l0KHVu
c2lnbmVkIHNob3J0IGMpIHsgcmV0dXJuIChjID49ICcwJykgJiAoYyA8PSAnOScpOyB9CkBAIC02
NywzMCArNjksMzUgQEAgbmFtZXNwYWNlIFdURiB7CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRl
ZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUhl
eERpZ2l0KHdjaGFyX3QgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMgfCAw
eDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAnZic7IH0KICNlbmRpZgorICAgIGlubGluZSBi
b29sIGlzQVNDSUlIZXhEaWdpdChpbnQgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScg
fHwgKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAnZic7IH0KIAogICAgIGlubGlu
ZSBib29sIGlzQVNDSUlMb3dlcihjaGFyIGMpIHsgcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3on
OyB9CiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUxvd2VyKHVuc2lnbmVkIHNob3J0IGMpIHsgcmV0
dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9CiAjaWYgIUNPTVBJTEVSKE1TVkMpIHx8IGRlZmlu
ZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCiAgICAgaW5saW5lIGJvb2wgaXNBU0NJSUxvd2Vy
KHdjaGFyX3QgYykgeyByZXR1cm4gYyA+PSAnYScgJiYgYyA8PSAneic7IH0KICNlbmRpZgorICAg
IGlubGluZSBib29sIGlzQVNDSUlMb3dlcihpbnQgYykgeyByZXR1cm4gYyA+PSAnYScgJiYgYyA8
PSAneic7IH0KIAogICAgIGlubGluZSBib29sIGlzQVNDSUlTcGFjZShjaGFyIGMpIHsgcmV0dXJu
IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHYnIHx8IGMgPT0nXGYnIHx8IGMgPT0g
J1xyJyB8fCBjID09ICcgJzsgfQogICAgIGlubGluZSBib29sIGlzQVNDSUlTcGFjZSh1bnNpZ25l
ZCBzaG9ydCBjKSB7IHJldHVybiBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x2JyB8
fCBjID09J1xmJyB8fCBjID09ICdccicgfHwgYyA9PSAnICc7IH0KICNpZiAhQ09NUElMRVIoTVNW
QykgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKICAgICBpbmxpbmUgYm9vbCBp
c0FTQ0lJU3BhY2Uod2NoYXJfdCBjKSB7IHJldHVybiBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8
IGMgPT0gJ1x2JyB8fCBjID09J1xmJyB8fCBjID09ICdccicgfHwgYyA9PSAnICc7IH0KICNlbmRp
ZgorICAgIGlubGluZSBib29sIGlzQVNDSUlTcGFjZShpbnQgYykgeyByZXR1cm4gYyA9PSAnXHQn
IHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicgfHwgYyA9PSAnXHInIHx8IGMg
PT0gJyAnOyB9CiAKICAgICBpbmxpbmUgY2hhciB0b0FTQ0lJTG93ZXIoY2hhciBjKSB7IHJldHVy
biBjIHwgKChjID49ICdBJyAmJiBjIDw9ICdaJykgPDwgNSk7IH0KICAgICBpbmxpbmUgdW5zaWdu
ZWQgc2hvcnQgdG9BU0NJSUxvd2VyKHVuc2lnbmVkIHNob3J0IGMpIHsgcmV0dXJuIGMgfCAoKGMg
Pj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsgfQogI2lmICFDT01QSUxFUihNU1ZDKSB8fCBkZWZp
bmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQogICAgIGlubGluZSB3Y2hhcl90IHRvQVNDSUlM
b3dlcih3Y2hhcl90IGMpIHsgcmV0dXJuIGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1
KTsgfQogI2VuZGlmCisgICAgaW5saW5lIGludCB0b0FTQ0lJTG93ZXIoaW50IGMpIHsgcmV0dXJu
IGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsgfQogCiAgICAgaW5saW5lIGNoYXIg
dG9BU0NJSVVwcGVyKGNoYXIgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oYyAmIH4oKGMg
Pj0gJ2EnICYmIGMgPD0gJ3onKSA8PCA1KSk7IH0KICAgICBpbmxpbmUgdW5zaWduZWQgc2hvcnQg
dG9BU0NJSVVwcGVyKHVuc2lnbmVkIHNob3J0IGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PihjICYgfigoYyA+PSAnYScgJiYgYyA8PSAneicpIDw8IDUpKTsgfQogI2lmICFD
T01QSUxFUihNU1ZDKSB8fCBkZWZpbmVkKF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEKQogICAgIGlu
bGluZSB3Y2hhcl90IHRvQVNDSUlVcHBlcih3Y2hhcl90IGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHdjaGFyX3Q+KGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSkpOyB9CiAjZW5kaWYK
KyAgICBpbmxpbmUgaW50IHRvQVNDSUlVcHBlcihpbnQgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihjICYgfigoYyA+PSAnYScgJiYgYyA8PSAneicpIDw8IDUpKTsgfQogCiB9CiAK
</data>
<flag name="review"
          id="7779"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>