<?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>95501</bug_id>
          
          <creation_ts>2012-08-30 14:50:20 -0700</creation_ts>
          <short_desc>Use one object instead of two for closures, eliminating ScopeChainNode</short_desc>
          <delta_ts>2012-08-31 14:46:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>95530</dependson>
    
    <dependson>95561</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>jberlin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>709046</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-30 14:50:20 -0700</bug_when>
    <thetext>Use one object instead of two for closures, eliminating ScopeChainNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709084</commentid>
    <comment_count>1</comment_count>
      <attachid>161570</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-30 15:14:29 -0700</bug_when>
    <thetext>Created attachment 161570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709113</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-30 15:49:34 -0700</bug_when>
    <thetext>Committed r127202: &lt;http://trac.webkit.org/changeset/127202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709116</commentid>
    <comment_count>3</comment_count>
      <attachid>161570</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-08-30 15:56:50 -0700</bug_when>
    <thetext>Comment on attachment 161570
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=161570&amp;action=review

&gt; Source/JavaScriptCore/jit/JIT.h:63
&gt; -    class ScopeChainNode;
&gt; +    class JSScope;

Fix the order!

http://webkitmemes.tumblr.com/post/18265177987/the-most-interesting-reviewer-in-the-world</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709705</commentid>
    <comment_count>4</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-08-31 09:16:23 -0700</bug_when>
    <thetext>It appears this change started causing http/tests/security/inactive-document-with-empty-security-origin.html to start timing out on Mountain Lion:

http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK1%20(Tests)/r127199%20(382)/results.html
http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK1%20(Tests)/r127202%20(383)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709708</commentid>
    <comment_count>5</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-08-31 09:18:07 -0700</bug_when>
    <thetext>And on Lion:

http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r127199%20(2393)/results.html
http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r127203%20(2394)/http/tests/security/inactive-document-with-empty-security-origin-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709715</commentid>
    <comment_count>6</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-08-31 09:25:45 -0700</bug_when>
    <thetext>This is one of the few remaining tests that are making the Lion WK1 bots red, so please investigate this soon or I will have to consider rolling out your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709822</commentid>
    <comment_count>7</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-08-31 11:13:38 -0700</bug_when>
    <thetext>Temporarily Skipped the test in http://trac.webkit.org/changeset/127292.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709828</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-31 11:23:44 -0700</bug_when>
    <thetext>Looking at this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710002</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-31 14:42:45 -0700</bug_when>
    <thetext>Looks like the new behavior (hanging on inactive-document-with-empty-security-origin-pretty-diff.html) is correct. I&apos;m going to:

(*) Commit a new reduced test demonstrating the behavior change from my patch.
(*) File a bug for investigating why the old test hangs / fails
(*) Leave the old test skipped

I tried to fix the old test, but it didn&apos;t have any explanation of what it was trying to test or how to verify whether it was correct, so I didn&apos;t make quick headway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710003</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-31 14:43:13 -0700</bug_when>
    <thetext>Investigation bug: &lt;rdar://problem/12217815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710010</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-31 14:46:54 -0700</bug_when>
    <thetext>New test: &lt;http://trac.webkit.org/changeset/127323&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161570</attachid>
            <date>2012-08-30 15:14:29 -0700</date>
            <delta_ts>2012-08-30 15:56:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95501-20120830151417.patch</filename>
            <type>text/plain</type>
            <size>235730</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA4LTMwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXNlIG9uZSBvYmplY3QgaW5zdGVhZCBvZiB0d28gZm9yIGNsb3N1cmVzLCBlbGltaW5hdGlu
ZyBTY29wZUNoYWluTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTU1MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgU2NvcGVDaGFpbk5vZGUsIGFuZCBtb3ZlcyBhbGwg
dGhlIGRhdGEgYW5kIHJlbGF0ZWQKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgdXNlZCB0byBiZSBp
biBTY29wZUNoYWluTm9kZSBpbnRvIEpTU2NvcGUuCisKKyAgICAgICAgTW9zdCBvZiB0aGlzIHBh
dGNoIGlzIG1lY2hhbmljYWwgY2hhbmdlcyB0byB1c2UgYSBKU1Njb3BlKiB3aGVyZSB3ZSB1c2Vk
CisgICAgICAgIHRvIHVzZSBhIFNjb3BlQ2hhaW5Ob2RlKi4gSSd2ZSBvbmx5IHNwZWNpZmljYWxs
eSBjb21tZW50ZWQgYWJvdXQgaXRlbXMKKyAgICAgICAgdGhhdCB3ZXJlIG5vbi1tZWNoYW5pY2Fs
LgorCisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOiBEb24ndCByZXF1aXJlIGFu
IGV4cGxpY2l0IHNjb3BlIGNoYWluIGFyZ3VtZW50CisgICAgICAgIHdoZW4gZXZhbHVhdGluZyBj
b2RlLiBDbGllbnRzIG5ldmVyIHdhbnRlZCBhbnl0aGluZyBvdGhlciB0aGFuIHRoZQorICAgICAg
ICBnbG9iYWwgc2NvcGUsIGFuZCBvdGhlciBhcmJpdHJhcnkgc2NvcGVzIHByb2JhYmx5IHdvdWxk
bid0IHdvcmsKKyAgICAgICAgY29ycmVjdGx5LCBhbnl3YXkuCisKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpKU1Njb3BlKTogSlNTY29wZSBub3cgcmVxdWlyZXMgdGhlIGRhdGEgd2UgdXNl
ZCB0byBwYXNzIHRvCisgICAgICAgIFNjb3BlQ2hhaW5Ob2RlLCBzbyBpdCBjYW4gbGluayBpdHNl
bGYgaW50byB0aGUgc2NvcGUgY2hhaW4gY29ycmVjdGx5LgorCisgICAgICAgICogcnVudGltZS9K
U1dpdGhTY29wZS5oOgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXaXRoU2NvcGU6OkpTV2l0aFNjb3BlKTogSlNXaXRoU2NvcGUgZ2V0cyBhbiBl
eHRyYSBjb25zdHJ1Y3RvcgorICAgICAgICBmb3Igc3BlY2lmaWNhbGx5IHN1cHBseWluZyB5b3Vy
IG93biBzY29wZSBjaGFpbi4gVGhlIERPTSBuZWVkcyB0aGlzCisgICAgICAgIGludGVyZmFjZSBm
b3Igc2V0dGluZyB1cCB0aGUgc2NvcGUgY2hhaW4gZm9yIGNlcnRhaW4gZXZlbnQgaGFuZGxlcnMu
CisgICAgICAgIE90aGVyIGNsaWVudHMgYWx3YXlzIGp1c3QgcHVzaCB0aGUgSlNXaXRoU2NvcGUg
dG8gdGhlIGhlYWQgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgc2NvcGUgY2hhaW4uCisKIDIwMTIt
MDgtMzAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVwbGFjZSBKU0M6OlVTdHJpbmcgYnkgV1RGOjpTdHJpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw2IEBAIFNF
VChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCiAgICAgcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuY3BwCi0gICAgcnVudGltZS9TY29wZUNoYWluLmNwcAogICAgIHJ1bnRpbWUvU21hbGxT
dHJpbmdzLmNwcAogICAgIHJ1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCiAgICAgcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjMwLDkgKzYzMCw2
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ0NvdW50ZXIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVD
aGFpbi5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaCBc
Ci0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbk1hcmsuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Rhcmdl
dC5wcmkJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyArMjQ0LDYgQEAgU09VUkNFUyArPSBcCiAgICAg
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENhY2hlLmNw
cCBcCiAgICAgcnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKLSAgICBydW50aW1lL1Njb3Bl
Q2hhaW4uY3BwIFwKICAgICBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAogICAgIHJ1bnRpbWUv
U3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIFwKICAgICBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgSlNWYWx1
ZSBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAgICBzdG9wV2F0Y2guc3Rh
cnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV4Y2VwdGlvbik7CisgICAgZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIEpTVmFsdWUo
KSwgJmV4Y2VwdGlvbik7CiAgICAgc3RvcFdhdGNoLnN0b3AoKTsKIAogICAgIGlmICghIWV4Y2Vw
dGlvbikgewpAQCAtMzc4LDcgKzM3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2EKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAogICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNjU291cmNlKHNjcmlwdC5k
YXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNj
U291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRz
KEdsb2JhbE9iamVjdCoKICAgICAgICAgZ2xvYmFsRGF0YS5zdGFydFNhbXBsaW5nKCk7CiAKICAg
ICAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVy
blZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFs
dWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQs
IGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIHN1
Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICBpZiAoZHVt
cCAmJiAhZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xu
IiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1
ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CkBAIC01OTYsNyAr
NTk2LDcgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAg
ICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxpbmUpOwogICAgICAgICBK
U1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUg
PSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxTY29wZUNoYWluKCksIGpzY1NvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVl
KCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZSwgaW50
ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IGZyZWUobGluZSk7CiAjZWxzZQogICAgICAgICBwcmludGYoIiVzIiwgaW50ZXJhY3RpdmVQcm9t
cHQpOwpAQCAtNjEzLDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2Jh
bE9iamVjdCoKICAgICAgICAgbGluZS5hcHBlbmQoJ1wwJyk7CiAKICAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVD
aGFpbigpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUo
KSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0g
ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShsaW5lLmRhdGEo
KSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAj
ZW5kaWYKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgICAgICBwcmlu
dGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSku
dXRmOCgpLmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShy
ZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2Ny
aXB0KEpTQ29udGV4dFJlZgogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3Jp
cHQtPnVzdHJpbmcoKSwgc291cmNlVVJMLT51c3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFs
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJl
cjo6Zmlyc3QoKSkpOwogCiAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAm
ZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzb3VyY2UsIGpzVGhpc09iamVjdCwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIEVYUE9SVFMKICAg
ICA/ZW51bWVyYWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkVfTlhaCiAgICAgP2VxdWFs
VVRGMTZXaXRoVVRGOEBVbmljb2RlQFdURkBAWUFfTlBCX1cwUEJEMUBaCiAgICAgP2V2YWx1YXRl
QERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQEFCVlVTdHJpbmdAMkBBQVYz
MkBAWgotICAgID9ldmFsdWF0ZUBKU0NAQFlBP0FWSlNWYWx1ZUAxQFBBVkV4ZWNTdGF0ZUAxQFBB
VlNjb3BlQ2hhaW5Ob2RlQDFAQUJWU291cmNlQ29kZUAxQFYyMUBQQVYyMUBAWgorICAgID9ldmFs
dWF0ZUBKU0NAQFlBP0FWSlNWYWx1ZUAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTU2NvcGVAMUBBQlZT
b3VyY2VDb2RlQDFAVjIxQFBBVjIxQEBaCiAgICAgP2V4Y2x1ZGVAUHJvZmlsZUBKU0NAQFFBRVhQ
QlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2V4ZWN1dGVAUGFyYWxsZWxFbnZpcm9ubWVudEBXVEZA
QFFBRVhQQVhAWgogICAgID9leHBhbmRATWFya1N0YWNrQXJyYXlASlNDQEBBQUVYWFoKQEAgLTI3
NCw3ICsyNzQsNyBAQCBFWFBPUlRTCiAgICAgP251bWJlclRvU3RyaW5nSW1wbEBXVEZAQFlBP0FW
PyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDFASUBaCiAgICAgP251bWJlclRvU3RyaW5n
SW1wbEBXVEZAQFlBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDFASkBaCiAgICAg
P251bWJlclRvU3RyaW5nSW1wbEBXVEZAQFlBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdU
RkBAQDFAS0BaCi0gICAgP29iamVjdEF0U2NvcGVASlNTY29wZUBKU0NAQFNBUEFWSlNPYmplY3RA
MkBQQVZTY29wZUNoYWluTm9kZUAyQEBaCisgICAgP29iamVjdEF0U2NvcGVASlNTY29wZUBKU0NA
QFNBUEFWSlNPYmplY3RAMkBQQVZKU1Njb3BlQDJAQFoKICAgICA/b2JqZWN0Q291bnRASGVhcEBK
U0NAQFFBRUlYWgogICAgID9vYmplY3RQcm90b0Z1bmNUb1N0cmluZ0BKU0NAQFlJX0pQQVZFeGVj
U3RhdGVAMUBAWgogICAgID9vYmplY3RUeXBlQ291bnRzQEhlYXBASlNDQEBRQUU/QVY/JFBhc3NP
d25QdHJAVj8kSGFzaENvdW50ZWRTZXRAUEJEVT8kUHRySGFzaEBQQkRAV1RGQEBVPyRIYXNoVHJh
aXRzQFBCREAyQEBXVEZAQEBXVEZAQFhaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTI3MDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTQsMTggKzEx
OTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXFNjb3BlQ2hhaW4uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFNjb3BlQ2hhaW4uaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxTY29w
ZUNoYWluTWFyay5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNyArMzI3LDYgQEAKIAkJMTQ0NjlERTYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE9iamVjdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI2ODBDODBFMTZENEU5MDBBMDZFOTIgLyogT2JqZWN0
UHJvdG90eXBlLmNwcCAqLzsgfTsKIAkJMTQ0NjlERTcxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3Bl
cnR5TmFtZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NDAwQzBGMEE2OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVBcnJheS5jcHAg
Ki87IH07CiAJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MjFFNkIwODlF
ODU5NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5jcHAgKi87IH07Ci0JCTE0NDY5REVBMTA3RUM3
RTcwMDY1MDQ0NiAvKiBTY29wZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzREM0E4MDM4RDlENzQwMDg2MzVDRSAvKiBTY29wZUNoYWlu
LmNwcCAqLzsgfTsKIAkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MThDM0MwMEUxNkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJ
CTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxOEMzQzIwRTE2RUUzMzAwQjM0
NDYwIC8qIFN0cmluZ09iamVjdC5jcHAgKi87IH07CiAJCTE0NDY5REVEMTA3RUM3RTcwMDY1MDQ0
NiAvKiBTdHJpbmdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMxOEMzQzUwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlw
ZS5jcHAgKi87IH07CkBAIC02NTYsNyArNjU1LDYgQEAKIAkJQkMxOEM0NUIwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZ0V4cE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8qIFJlZ0V4cE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDVE
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5QjI0RkYwRDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMx
OEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ2lzdGVyRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8q
IFJlZ2lzdGVyRmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUJDMThDNDYxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTY29wZUNoYWluLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc0RDNBNzAzOEQ5RDc0
MDA4NjM1Q0UgLyogU2NvcGVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVF
ODY2RUQwREQ1OUFGQTAwQTJCMkExIC8qIFNvdXJjZVByb3ZpZGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0
NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1RTg2NkVFMERENTlBRkEwMEEyQjJBMSAvKiBTb3VyY2VDb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NjYwRTE2
RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE4QzNDMTBFMTZFRTMzMDBCMzQ0NjAgLyogU3Ry
aW5nQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTExNzAsNyArMTE2OCw2IEBACiAJCTY1RUE3MzYy
MEJBRTM1RDEwMDFCQjU2MCAvKiBDb21tb25JZGVudGlmaWVycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tbW9uSWRlbnRpZmllcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUVBNzM2MzBCQUUzNUQxMDAxQkI1NjAgLyogQ29tbW9uSWRl
bnRpZmllcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbklkZW50
aWZpZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQw
MDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB9OwotCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogU2Nv
cGVDaGFpbk1hcmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVDaGFp
bk1hcmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0RUU3MDgwRUJCNzk2MzAw
NTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNEVF
NzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdFRkYwMDYzMEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlSW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI4Myw4ICsxMjgwLDYgQEAKIAkJOTMzNDVBODgxMkQ4MzhDNDAw
MzAyQkUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk5MzNBMzQ5RDAz
OEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07Ci0JCTkzNzREM0E3MDM4RDlENzQwMDg2MzVD
RSAvKiBTY29wZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NvcGVDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IH07Ci0JCTkzNzREM0E4MDM4RDlENzQwMDg2MzVDRSAvKiBTY29wZUNoYWluLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nv
cGVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJ
OTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUubWFrZTsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzLm1ha2U7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHVzZXNUYWJzID0gMTsgfTsKIAkJOTM4NzcyRTUwMzhCRkUxOTAwODYzNUNF
IC8qIEpTQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0FycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKIAkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjA2LDkgKzIyMDEsNiBAQAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJD
N0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCi0JCQkJOTM3NEQzQTgwMzhEOUQ3NDAwODYzNUNF
IC8qIFNjb3BlQ2hhaW4uY3BwICovLAotCQkJCTkzNzREM0E3MDM4RDlENzQwMDg2MzVDRSAvKiBT
Y29wZUNoYWluLmggKi8sCi0JCQkJN0UyQzZDOTgwRDMxQzZCNjAwMkQ0NEUyIC8qIFNjb3BlQ2hh
aW5NYXJrLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5o
ICovLAogCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICov
LApAQCAtMjc1Niw3ICsyNzQ4LDYgQEAKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyog
UmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVB
IC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4ODYwRUQyMUMz
RDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NjEw
RTE2RjVDRDAwQjM0NDYwIC8qIFNjb3BlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2
NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0QkE3OEYxMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNDIwLDcgKzM0MTEsNiBAQAogCQkJCTE0MjgwODNBMTA3RUMwNzUwMDEzRTdC
MiAvKiBSZWdpc3RlckZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYz
QzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5
RDg4NTBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTE0NDY5REVBMTA3RUM3RTcwMDY1MDQ0NiAvKiBTY29wZUNoYWluLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA0MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQ5REMxNkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEyNzAx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTMwLDcgKzI1MzAsNyBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0
aXZhdGlvbihDYWxsRnJhCiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZh
dGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSk7CiAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpKTsK
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpID0gSlNWYWx1
ZShhY3RpdmF0aW9uKTsKLSAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnB1c2goYWN0aXZhdGlvbikpOworICAgIGNhbGxGcmFtZS0+c2V0U2NvcGUo
YWN0aXZhdGlvbik7CiB9CiAKIHVuc2lnbmVkIENvZGVCbG9jazo6YWRkT3JGaW5kQ29uc3RhbnQo
SlNWYWx1ZSB2KQpAQCAtMjcyMCwyNyArMjcyMCwyNyBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpyZXBsYWNlbWVuCiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKG1faXNDb25z
dHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKLUpTT2JqZWN0
KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorSlNP
YmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5
cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19j
YXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1p
emVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRlY29kZUluZGV4KTsKKyAgICBKU09iamVjdCog
ZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgcmV0
dXJuIGVycm9yOwogfQogCi1KU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKK0pTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCiB7CiAgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpu
ZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBKU09iamVj
dCogZXJyb3IgPSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSwgYnl0ZWNvZGVJbmRleCk7
CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGUsIGJ5dGVjb2RlSW5k
ZXgpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2Nr
Ojpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorSlNPYmplY3QqIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWRGb3IoZXhlYywgc2Nv
cGVDaGFpbk5vZGUsIGJ5dGVjb2RlSW5kZXgsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25z
dHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVk
Rm9yKGV4ZWMsIHNjb3BlLCBieXRlY29kZUluZGV4LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9y
Q29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTI3
MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBt
X2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJ
VFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCku
Z2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KSA9IDA7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICBlbnVtIEpJVENvbXBpbGF0
aW9uUmVzdWx0IHsgQWxyZWFkeUNvbXBpbGVkLCBDb3VsZE5vdENvbXBpbGUsIENvbXBpbGVkU3Vj
Y2Vzc2Z1bGx5IH07CiAgICAgICAgIEpJVENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGUoRXhl
Y1N0YXRlKiBleGVjKQpAQCAtOTMxLDcgKzkzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogaWYgd2UgZXZlciBp
bmxpbmUgYmFzZWQgb24gZXhlY3V0YWJsZSBub3QgZnVuY3Rpb24sIHRoaXMgY29kZSB3aWxsIG5l
ZWQgdG8gY2hhbmdlLgotICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpLT5nbG9iYWxP
YmplY3QoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEp1bXAgVGFibGVzCkBAIC0xNDQ2LDcg
KzE0NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Nj
b3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7
CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwpAQCAtMTQ4MSw3ICsx
NDgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopOwog
ICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKQEAgLTE1MDcsNyArMTUw
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29u
KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJKHJldmlzaW9uIDEyNzAx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDMyICs0NSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEV2YWxDb2RlQ2FjaGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUq
IHRyeUdldChib29sIGluU3RyaWN0Q29udGV4dCwgY29uc3QgVVN0cmluZyYgZXZhbFNvdXJjZSwg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiB0cnlH
ZXQoYm9vbCBpblN0cmljdENvbnRleHQsIGNvbnN0IFVTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2Nv
cGUqIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWluU3RyaWN0Q29udGV4dCAm
JiBldmFsU291cmNlLmxlbmd0aCgpIDwgbWF4Q2FjaGVhYmxlU291cmNlTGVuZ3RoICYmIHNjb3Bl
Q2hhaW4tPmJlZ2luKCktPmlzVmFyaWFibGVPYmplY3QoKSkKKyAgICAgICAgICAgIGlmICghaW5T
dHJpY3RDb250ZXh0ICYmIGV2YWxTb3VyY2UubGVuZ3RoKCkgPCBtYXhDYWNoZWFibGVTb3VyY2VM
ZW5ndGggJiYgc2NvcGUtPmJlZ2luKCktPmlzVmFyaWFibGVPYmplY3QoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jYWNoZU1hcC5nZXQoZXZhbFNvdXJjZS5pbXBsKCkpLmdldCgpOwogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEV2YWxFeGVj
dXRhYmxlKiBnZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIs
IGJvb2wgaW5TdHJpY3RDb250ZXh0LCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCisgICAgICAgIEV2
YWxFeGVjdXRhYmxlKiBnZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBK
U1Njb3BlKiBzY29wZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsRXhlY3V0YWJsZSA9IEV2YWxFeGVjdXRhYmxlOjpj
cmVhdGUoZXhlYywgbWFrZVNvdXJjZShldmFsU291cmNlKSwgaW5TdHJpY3RDb250ZXh0KTsKLSAg
ICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXZhbEV4ZWN1dGFibGUtPmNvbXBpbGUoZXhlYywg
c2NvcGVDaGFpbik7CisgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGV2YWxFeGVjdXRhYmxl
LT5jb21waWxlKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFpblN0cmljdENvbnRleHQgJiYgZXZhbFNvdXJjZS5sZW5ndGgoKSA8IG1heENhY2hlYWJsZVNv
dXJjZUxlbmd0aCAmJiBzY29wZUNoYWluLT5iZWdpbigpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYg
bV9jYWNoZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCisgICAgICAgICAgICBpZiAoIWlu
U3RyaWN0Q29udGV4dCAmJiBldmFsU291cmNlLmxlbmd0aCgpIDwgbWF4Q2FjaGVhYmxlU291cmNl
TGVuZ3RoICYmIHNjb3BlLT5iZWdpbigpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgbV9jYWNoZU1h
cC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCiAgICAgICAgICAgICAgICAgbV9jYWNoZU1hcC5z
ZXQoZXZhbFNvdXJjZS5pbXBsKCksIFdyaXRlQmFycmllcjxFdmFsRXhlY3V0YWJsZT4oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvd25lciwgZXZhbEV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgcmV0dXJuIGV2YWxFeGVjdXRhYmxlOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0KEV4ZWNTdGF0ZSogZXhlYywgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNl
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCisg
ICAgICAgIEV2YWxFeGVjdXRhYmxlKiBnZXQoRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIGNvbnN0IFVTdHJpbmcmIGV2YWxTb3Vy
Y2UsIEpTU2NvcGUqIHNjb3BlLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKICAgICAgICAgewot
ICAgICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWxFeGVjdXRhYmxlID0gdHJ5R2V0KGluU3Ry
aWN0Q29udGV4dCwgZXZhbFNvdXJjZSwgc2NvcGVDaGFpbik7CisgICAgICAgICAgICBFdmFsRXhl
Y3V0YWJsZSogZXZhbEV4ZWN1dGFibGUgPSB0cnlHZXQoaW5TdHJpY3RDb250ZXh0LCBldmFsU291
cmNlLCBzY29wZSk7CiAKICAgICAgICAgICAgIGlmICghZXZhbEV4ZWN1dGFibGUpCi0gICAgICAg
ICAgICAgICAgZXZhbEV4ZWN1dGFibGUgPSBnZXRTbG93KGV4ZWMsIG93bmVyLCBpblN0cmljdENv
bnRleHQsIGV2YWxTb3VyY2UsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBldmFsRXhlY3V0YWJsZSA9IGdldFNsb3coZXhlYywgb3duZXIsIGluU3RyaWN0Q29u
dGV4dCwgZXZhbFNvdXJjZSwgc2NvcGUsIGV4Y2VwdGlvblZhbHVlKTsKIAogICAgICAgICAgICAg
cmV0dXJuIGV2YWxFeGVjdXRhYmxlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRl
ICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAK
IG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3MDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVy
cHJldGVyLmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5jbHVkZSAiU3Ryb25nSW5s
aW5lcy5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKIApAQCAtMjA5LDcgKzIwOSw3IEBAIEpTT2Jq
ZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogICAgIG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKSA9IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlvbnMp
OwogCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQotICAgICAgICBtX2NvZGVCbG9jay0+
ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAg
bV9jb2RlQmxvY2stPmR1bXAobV9zY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
CiAKICNpZmRlZiBOREVCVUcKICAgICBpZiAoKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYm
ICFtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmICFtX2NvZGVCbG9jay0+dXNl
c0FyZ3VtZW50cygpKSB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlKQpAQCAtMjE5LDcgKzIxOSw3
IEBAIEpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogICAgIG1fY29kZUJs
b2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkVhcmx5U2hyaW5rKTsKIAogICAgIGlmIChtX2V4
cHJlc3Npb25Ub29EZWVwKQotICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvciht
X3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKG1fc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKICAgICByZXR1cm4gMDsK
IH0KIApAQCAtMjYwLDExICsyNjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2Vy
dmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgp
OwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUq
IHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBj
b21waWxhdGlvbktpbmQpCi0gICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4t
Pmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKLSAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
cyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1
cHBvcnRzUHJvZmlsaW5nKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgLCBt
X3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+
Z2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAsIG1fc2NvcGVDaGFpbigqc2NvcGVDaGFpbi0+Z2xv
YmFsRGF0YSwgc2NvcGVDaGFpbikKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIEpTU2NvcGUqIHNjb3BlLCBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5k
IGNvbXBpbGF0aW9uS2luZCkKKyAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGUtPmds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQorICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9y
dHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkKKyAgICAsIG1fc2hvdWxkRW1pdFJp
Y2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQorICAg
ICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUpCiAgICAgLCBtX3N5bWJvbFRh
YmxlKHN5bWJvbFRhYmxlKQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKICAgICAsIG1f
Y3VycmVudENvbW1lbnRTdHJpbmcoMCkKQEAgLTI4MSw3ICsyODEsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0aW9u
KHRydWUpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVu
Y3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShzY29wZUNoYWluLT5nbG9iYWxEYXRhKQorICAg
ICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCiAgICAgLCBtX2xhc3RPcGNvZGVJ
RChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkK
QEAgLTMwNiw3ICszMDYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
UHJvCiAgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKICAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplciBvcHRpbWl6ZXIoKm1fZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0KTsKQEAgLTMyNCw3ICsz
MjQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgICAg
IGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IAogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZW1v
dmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50KCkpOyAvLyBOZXdseSBkZWNs
YXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCiAgICAgICAgIAot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5j
dGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlQ2hhaW4pOworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5jdGlvbihleGVjLCBmdW5jdGlvbiks
IHNjb3BlKTsKICAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKAogICAgICAgICAgICAg
ZnVuY3Rpb24tPmlkZW50KCksIElzVmFyaWFibGUsCiAgICAgICAgICAgICAhcHJvcGVydHlEaWRF
eGlzdCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6
YWJsZSk7CkBAIC0zNDEsMTEgKzM0MSwxMSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoUHJvCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCi0gICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9v
a3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5z
dXBwb3J0c1Byb2ZpbGluZyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICwg
bV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4t
Pmdsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgLCBtX3Njb3BlQ2hhaW4oKnNjb3BlQ2hhaW4tPmds
b2JhbERhdGEsIHNjb3BlQ2hhaW4pCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBKU1Njb3BlKiBzY29wZSwgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5k
KQorICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRl
YnVnZ2VyKCkpCisgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29w
ZS0+Z2xvYmFsT2JqZWN0KCkpKQorICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2Nv
cGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Jp
Y2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCisgICAgLCBtX3Njb3BlKCpzY29w
ZS0+Z2xvYmFsRGF0YSgpLCBzY29wZSkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUp
CiAjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQogICAgICwgbV9jdXJyZW50Q29tbWVudFN0
cmluZygwKQpAQCAtMzYyLDcgKzM2Miw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihGdW4KICAgICAsIG1faGFzQ3JlYXRlZEFjdGl2YXRpb24oZmFsc2UpCiAgICAgLCBt
X2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKLSAgICAs
IG1fZ2xvYmFsRGF0YShzY29wZUNoYWluLT5nbG9iYWxEYXRhKQorICAgICwgbV9nbG9iYWxEYXRh
KHNjb3BlLT5nbG9iYWxEYXRhKCkpCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZu
ZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTUwOCwxMSArNTA4
LDExIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICB9CiB9
CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5v
ZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQotICAgIDogbV9zaG91
bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCi0g
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZUNoYWluLT5n
bG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0
c1JpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgLCBt
X3Njb3BlQ2hhaW4oKnNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIHNjb3BlQ2hhaW4pCitCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3Bl
KiBzY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvbXBpbGF0aW9uS2luZCkKKyAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGUt
Pmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQorICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhv
b2tzKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3Vw
cG9ydHNQcm9maWxpbmcoc2NvcGUtPmdsb2JhbE9iamVjdCgpKSkKKyAgICAsIG1fc2hvdWxkRW1p
dFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQor
ICAgICwgbV9zY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUpCiAgICAgLCBtX3N5bWJv
bFRhYmxlKHN5bWJvbFRhYmxlKQogI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKICAgICAs
IG1fY3VycmVudENvbW1lbnRTdHJpbmcoMCkKQEAgLTUyOSw3ICs1MjksNyBAQCBCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhCiAgICAgLCBtX2hhc0NyZWF0ZWRBY3RpdmF0
aW9uKHRydWUpCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5
RnVuY3Rpb24oMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShzY29wZUNoYWluLT5nbG9iYWxEYXRhKQor
ICAgICwgbV9nbG9iYWxEYXRhKHNjb3BlLT5nbG9iYWxEYXRhKCkpCiAgICAgLCBtX2xhc3RPcGNv
ZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24o
MCkKQEAgLTEwNDAsNyArMTA0MCw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWkKIAogICAgIGVtaXRPcGNvZGUob3Bfam5lcV9wdHIpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChjb25kLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoSW5z
dHJ1Y3Rpb24oKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBt
X3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Y2FsbEZ1bmN0aW9uKCkpKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoSW5zdHJ1Y3Rpb24oKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBtX3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+Y2FsbEZ1bmN0aW9uKCkp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKICAgICByZXR1cm4gdGFyZ2V0OwogfQpAQCAtMTA1MSw3ICsxMDUx
LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaQogCiAgICAgZW1p
dE9wY29kZShvcF9qbmVxX3B0cik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbmQtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChJbnN0cnVjdGlvbigqbV9nbG9iYWxE
YXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG1fc2NvcGVDaGFpbi0+Z2xvYmFs
T2JqZWN0LT5hcHBseUZ1bmN0aW9uKCkpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoSW5z
dHJ1Y3Rpb24oKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBt
X3Njb3BlLT5nbG9iYWxPYmplY3QoKS0+YXBwbHlGdW5jdGlvbigpKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7
CiAgICAgcmV0dXJuIHRhcmdldDsKIH0KQEAgLTEyNjYsOCArMTI2Niw4IEBAIFJlc29sdmVSZXN1
bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cyB8fCAhY2FuT3B0aW1pemVOb25Mb2NhbHMoKSkKICAgICAgICAg
cmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKDApOwogCi0gICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGVuZCA9IG1fc2NvcGVDaGFpbi0+ZW5kKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGl0ZXIgPSBtX3Njb3BlLT5iZWdpbigpOworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBt
X3Njb3BlLT5lbmQoKTsKICAgICBzaXplX3QgZGVwdGggPSAwOwogICAgIHNpemVfdCBkZXB0aE9m
Rmlyc3RTY29wZVdpdGhEeW5hbWljQ2hlY2tzID0gMDsKICAgICB1bnNpZ25lZCBmbGFncyA9IDA7
CkBAIC0xMzM3LDggKzEzMzcsOCBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZXNvbHZlCiAgICAgfQogCiAgICAgLy8gQ29uc3QgZGVjbGFyYXRpb25zIGluIGV2YWwgY29kZSBv
ciBnbG9iYWwgY29kZS4KLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4o
KS0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbigpLT5l
bmQoKTsKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlKCktPmJlZ2luKCk7Cisg
ICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlKCktPmVuZCgpOwogICAgIHNpemVfdCBk
ZXB0aCA9IDA7CiAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsrZGVwdGgpIHsKICAg
ICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29wZSA9IGl0ZXIuZ2V0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIExhYmVs
OwotICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU2NvcGU7CiAKICAgICBj
bGFzcyBDYWxsQXJndW1lbnRzIHsKICAgICBwdWJsaWM6CkBAIC0yNjEsOSArMjYxLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldER1
bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRp
YyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgpOwogCi0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9y
KFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2Rl
QmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5j
dGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayos
IENvbXBpbGF0aW9uS2luZCk7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwg
U2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqLCBDb21waWxhdGlv
bktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIEpTU2NvcGUq
LCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAg
ICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgSlNTY29wZSosIFN5bWJv
bFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRXZhbE5vZGUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2Nr
KiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICB+Qnl0ZWNvZGVHZW5lcmF0b3IoKTsKICAg
ICAgICAgCkBAIC01NTgsNyArNTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAg
ICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0
cmljdE1vZGUoKTsgfQogICAgICAgICAKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW4uZ2V0KCk7IH0KKyAgICAgICAgSlNTY29w
ZSogc2NvcGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLmdldCgpOyB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTGFiZWw7CkBAIC03MDAsNyArNzAwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzOwogICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvOwogCi0gICAgICAgIFN0cm9uZzxTY29w
ZUNoYWluTm9kZT4gbV9zY29wZUNoYWluOworICAgICAgICBTdHJvbmc8SlNTY29wZT4gbV9zY29w
ZTsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKICNpZiBFTkFCTEUoQllU
RUNPREVfQ09NTUVOVFMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDkgQEAgaW5s
aW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbAogICAgIGlmICghbV9mdW5jdGlv
bkV4ZWN1dGFibGVzLmFkZChleGVjdXRhYmxlKS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47
CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0
LT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1
bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4
ZWMoKTsKICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwotICAgIGlm
IChtX2RlYnVnZ2VyID09IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2Vy
KCkpCisgICAgaWYgKG1fZGVidWdnZXIgPT0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpKQogICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBK
U1ZhbHVlIGV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUoY29uc3QgCiAgICAgICAgIHJldHVybiBl
eGNlcHRpb247CiAgICAgfQogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxEYXRhLmludGVy
cHJldGVyLT5leGVjdXRlKGV2YWwsIGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxE
YXRhLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxDYWxsRnJhbWUtPnNjb3BlKCkpOwogICAgIGlmIChnbG9iYWxEYXRhLmV4Y2Vw
dGlvbikgewogICAgICAgICBleGNlcHRpb24gPSBnbG9iYWxEYXRhLmV4Y2VwdGlvbjsKICAgICAg
ICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1ZSBEZWJ1
Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlv
biA9IEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbERhdGEu
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgbV9jYWxsRnJhbWUsIHRoaXNPYmplY3QoKSwgbV9j
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxEYXRh
LmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIG1fY2FsbEZyYW1lLCB0aGlzT2JqZWN0KCksIG1f
Y2FsbEZyYW1lLT5zY29wZSgpKTsKICAgICBpZiAoZ2xvYmFsRGF0YS5leGNlcHRpb24pIHsKICAg
ICAgICAgZXhjZXB0aW9uID0gZ2xvYmFsRGF0YS5leGNlcHRpb247CiAgICAgICAgIGdsb2JhbERh
dGEuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDEyNzAxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOyB9Ci0gICAgICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KTsgfQorICAgICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1l
LT5zY29wZSgpOyB9CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFVTdHJpbmcqIGZ1
bmN0aW9uTmFtZSgpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBVU3RyaW5nIGNh
bGN1bGF0ZWRGdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
VHlwZSB0eXBlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlQ2FjaGUuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBnZXQo
Y29uc3QgQ29kZUJsb2NrS2V5JiBrZXksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZSkKKyAgICBDb2Rl
QmxvY2sqIGdldChjb25zdCBDb2RlQmxvY2tLZXkmIGtleSwgSlNTY29wZSogc2NvcGUpCiAgICAg
ewogICAgICAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAg
IGlmIChpdGVyICE9IG1fbWFwLmVuZCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
bmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2Nv
cGVDaGFpbi5oIgorCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OTksNyArODk5LDcgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAg
IGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpKTsKKyAgICBleGVj
Q2FsbGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2Rl
QmxvY2soMCk7CiAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewpAQCAtOTU3LDcgKzk1
Nyw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUtPnNl
dFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKKyAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCkpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0cjsKQEAgLTEwMDcsNyArMTAwNyw3IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFs
Rm9yKEV4ZWNTdGF0ZSogZXhlY0MKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKICAg
ICAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZnVuY3Rpb24t
PnNjb3BlVW5jaGVja2VkKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5z
Y29wZVVuY2hlY2tlZCgpKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0
aW9uLT5leGVjdXRhYmxlKCk7CiAgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRD
b2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpA
QCAtMTEyNiw3ICsxMTI2LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZUFjdAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OwogICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKAog
ICAgICAgICBnbG9iYWxEYXRhLCBleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKLSAgICBleGVjLT5zZXRT
Y29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CisgICAgZXhl
Yy0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKQEAg
LTEyMjcsNyArMTIyNyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5j
dGkKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cygmRnVuY3Rpb25FeGVj
dXRhYmxlOjpzX2luZm8pKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlYyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1
bmN0aW9uRXhlY3V0YWJsZSktPm1ha2UoZXhlYywgZXhlYy0+c2NvcGVDaGFpbigpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxl
KS0+bWFrZShleGVjLCBleGVjLT5zY29wZSgpKTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
ZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsKQpAQCAtMTIzNSwxMiArMTIzNSwxMiBAQCBKU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhl
Y3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKSk7CiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPQogICAgICAgICBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpOwot
ICAgIEpTRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5tYWtlKGV4ZWMs
IGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPm1ha2UoZXhlYywgZXhlYy0+c2NvcGUoKSk7CiAgICAgaWYgKCFmdW5jdGlv
bkV4ZWN1dGFibGUtPm5hbWUoKS5pc051bGwoKSkgewogICAgICAgICBKU05hbWVTY29wZSogZnVu
Y3Rpb25TY29wZU9iamVjdCA9CiAgICAgICAgICAgICBKU05hbWVTY29wZTo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgIGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgZnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZnVuY3Rpb24tPnNjb3BlKCktPnB1c2goZnVuY3Rpb25TY29wZU9iamVj
dCkpOworICAgICAgICBmdW5jdGlvbi0+c2V0U2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5j
dGlvblNjb3BlT2JqZWN0KTsKICAgICB9CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ4LDcgKzEwNDgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgCiAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRvQ2hlY2spKTsKICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZVBheWxvYWRHUFIsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpICogUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgIG1faml0
LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW4gKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKIApAQCAtMzE1OSwzOCArMzE1OSwzNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBhY3RpdmF0aW9u
Tm90Q3JlYXRlZDsKICAgICAgICAgICAgIGlmIChjaGVja1RvcExldmVsKQogICAgICAgICAgICAg
ICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6WmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihtX2ppdC5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKSk7Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNU
X09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENy
ZWF0ZWQubGluaygmbV9qaXQpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChza2lwLS0pCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
T0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRP
RihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSksIHJlc3VsdEdQUik7Ci0KICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNj
b3BlQ2hhaW4odGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0VGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjb3BlQ2hhaW4uZ3ByKCksIEpTVmFy
aWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhzY29wZS5ncHIoKSwgSlNW
YXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQ
Uiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwg
bm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1dFNjb3Bl
ZFZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZUNoYWluKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlz
KTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoUmVnaXN0ZXIuZ3ByKCk7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGVDaGFpbi5ncHIo
KSwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjb3BlLmdwcigpLCBK
U1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBub2RlLnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
Uiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHdyaXRl
QmFycmllcihzY29wZUNoYWluLmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS5jaGlsZDIoKSwg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3cml0
ZUJhcnJpZXIoc2NvcGUuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMyLDcgKzEwMzIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0z
MihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIHNsb3dQYXRoID0g
bV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVl
R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSkpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNo
YWluKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJl
c3VsdEdQUik7CiAgICAgbV9qaXQuc3RvcmVQdHIocmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoUmVnaXN0ZXIpKSAqIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCiAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW47CkBA
IC0zMTc5LDM0ICszMTc5LDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVk
OwogICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCiAgICAgICAgICAgICAgICAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCBK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0
LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5r
KCZtX2ppdCk7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hh
aW5Ob2RlLCBvYmplY3QpKSwgcmVzdWx0R1BSKTsKLQogICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBH
ZXRTY29wZWRWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGVDaGFpbih0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGVDaGFpbi5ncHIoKSwgSlNWYXJpYWJs
ZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGUuZ3ByKCksIEpTVmFyaWFibGVPYmpl
Y3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNp
emVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQ
dXRTY29wZWRWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGVDaGFpbih0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVnaXN0
ZXIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdw
cigpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjb3BlQ2hh
aW4uZ3ByKCksIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhzY29wZS5n
cHIoKSwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hHUFIp
OwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAg
IHdyaXRlQmFycmllcihzY29wZUNoYWluLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDIo
KSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3
cml0ZUJhcnJpZXIoc2NvcGUuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNp
b24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgot
I2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKwogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKwogI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5j
bHVkZSAiVVN0cmluZy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5j
bHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJTY29wZUNoYWluLmgiCisKIAogbmFtZXNwYWNlIEpT
QyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJ
KHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
LSNpbmNsdWRlICJTY29wZUNoYWluLmgiCisKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMTI3MDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwUm9v
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW4u
aCIKKwogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAJKHJl
dmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0
cmFjdFBDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJKHJl
dmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNo
ZWRDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIENhY2hlZENhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudCkKICAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkK
ICAgICAgICAgICAgICwgbV9pbnRlcnByZXRlcihjYWxsRnJhbWUtPmludGVycHJldGVyKCkpCi0g
ICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QuZ2V0KCkpCisgICAgICAgICAgICAsIG1f
Z2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5zY29w
ZSgpLT5nbG9iYWxPYmplY3QoKSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFmdW5j
dGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBtX2ludGVy
cHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCksIGNh
bGxGcmFtZSwgZnVuY3Rpb24sIGFyZ3VtZW50Q291bnQgKyAxLCBmdW5jdGlvbi0+c2NvcGUoKSk7
CkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWxsRnJhbWUqIG5l
d0NhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gbV9jbG9zdXJlLm5ld0NhbGxGcmFtZTsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOworICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICAgICAgICAgIHJldHVybiBj
YWxsRnJhbWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNyArMTM5LDcgQEAgQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsRnJhbWUoQWJz
dAogICAgICAgICAvLyBGaWxsIGluIHRoZSBpbmxpbmVkQ2FsbGVyCiAgICAgICAgIGlubGluZWRD
YWxsZXItPnNldENvZGVCbG9jayhtYWNoaW5lQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAg
IGlubGluZWRDYWxsZXItPnNldFNjb3BlQ2hhaW4oY2FsbGVlQXNGdW5jdGlvbi0+c2NvcGUoKSk7
CisgICAgICAgIGlubGluZWRDYWxsZXItPnNldFNjb3BlKGNhbGxlZUFzRnVuY3Rpb24tPnNjb3Bl
KCkpOwogICAgICAgICBpZiAobmV4dElubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIGlubGlu
ZWRDYWxsZXItPnNldENhbGxlckZyYW1lKHRoaXMgKyBuZXh0SW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgY2xhc3MgQXJndW1lbnRzOwogICAgIGNs
YXNzIEpTQWN0aXZhdGlvbjsKICAgICBjbGFzcyBJbnRlcnByZXRlcjsKLSAgICBjbGFzcyBTY29w
ZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1Njb3BlOwogCiAgICAgLy8gUmVwcmVzZW50cyB0aGUg
Y3VycmVudCBzdGF0ZSBvZiBzY3JpcHQgZXhlY3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMuCkBAIC00MiwxMCArNDIsMTAgQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJl
dHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKCk7IH0KICAgICAgICAgSlNP
YmplY3QqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVd
LmZ1bmN0aW9uKCk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7
IH0KLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdAorICAgICAgICBK
U1Njb3BlKiBzY29wZSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0aGlz
W1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0uUmVnaXN0ZXI6OnNjb3BlQ2hhaW4oKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLlJlZ2lzdGVyOjpz
Y29wZUNoYWluKCk7CisgICAgICAgICAgICBBU1NFUlQodGhpc1tSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW5dLlJlZ2lzdGVyOjpzY29wZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzW1JlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbl0uUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KQEAgLTE2Niwx
NiArMTY2LDE2IEBAIG5hbWVzcGFjZSBKU0MgIHsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0
Q2FsbGVyRnJhbWUoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rl
cio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWVdID0gY2FsbGVyRnJhbWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRTY29wZUNoYWluKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKSB7IHN0
YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNj
b3BlQ2hhaW47IH0KKyAgICAgICAgdm9pZCBzZXRTY29wZShKU1Njb3BlKiBzY29wZSkgeyBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzY29w
ZTsgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0KENvZGVCbG9jayogY29kZUJs
b2NrLCBJbnN0cnVjdGlvbiogdlBDLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwKKyAgICAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0
aW9uKiB2UEMsIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSwgaW50IGFyZ2MsIEpTT2JqZWN0KiBjYWxsZWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVChjYWxsZXJGcmFtZSk7IC8vIFVzZSBub0NhbGxlcigpIHJhdGhlciB0aGFuIDAgZm9y
IHRoZSBvdXRlciBob3N0IGNhbGwgZnJhbWUgY2FsbGVyLgogICAgICAgICAgICAgQVNTRVJUKGNh
bGxlckZyYW1lID09IG5vQ2FsbGVyKCkgfHwgY2FsbGVyRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJh
bWVGbGFnKCktPnJlZ2lzdGVyRmlsZSgpLT5lbmQoKSA+PSB0aGlzKTsKIAogICAgICAgICAgICAg
c2V0Q29kZUJsb2NrKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBzZXRTY29wZUNoYWluKHNjb3Bl
Q2hhaW4pOworICAgICAgICAgICAgc2V0U2NvcGUoc2NvcGUpOwogICAgICAgICAgICAgc2V0Q2Fs
bGVyRnJhbWUoY2FsbGVyRnJhbWUpOwogICAgICAgICAgICAgc2V0UmV0dXJuUEModlBDKTsgLy8g
VGhpcyBpcyBlaXRoZXIgYW4gSW5zdHJ1Y3Rpb24qIG9yIGEgcG9pbnRlciBpbnRvIEpJVCBnZW5l
cmF0ZWQgY29kZSBzdG9yZWQgYXMgYW4gSW5zdHJ1Y3Rpb24qLgogICAgICAgICAgICAgc2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnYyk7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50
IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAko
cmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZUNsb3N1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBzdHJ1Y3Qg
Q2FsbEZyYW1lQ2xvc3VyZSB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGU7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwogICAgIFJlZ2lzdGVyKiBvbGRF
bmQ7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW47CisgICAgSlNTY29wZSogc2NvcGU7
CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7CiAgICAgCkBAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBDYWxsRnJh
bWVDbG9zdXJlIHsKIAogICAgIHZvaWQgcmVzZXRDYWxsRnJhbWUoKQogICAgIHsKLSAgICAgICAg
bmV3Q2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4pOworICAgICAgICBuZXdDYWxs
RnJhbWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyBpIDwgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyArK2kpCiAg
ICAgICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDks
OCBAQAogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFy
c2VyLmgiCiAjaW5jbHVkZSAiTmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCkBAIC04MCw3ICs4Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIENhbGxGcmFt
ZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2JhbERhdGEqLCBDYWxsRnJhbWUqLCBpbnQmIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCk7CiAKIC8vIFJldHVybnMgdGhlIGRlcHRoIG9m
IHRoZSBzY29wZSBjaGFpbiB3aXRoaW4gYSBnaXZlbiBjYWxsIGZyYW1lLgotc3RhdGljIGludCBk
ZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU2NvcGVDaGFpbk5vZGUqIHNjKQorc3RhdGljIGlu
dCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNTY29wZSogc2MpCiB7CiAgICAgaWYgKCFj
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0x
NTYsNyArMTU4LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAg
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+c2Nv
cGVDaGFpbigpOworICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJGcmFtZS0+
c2NvcGUoKTsKICAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZh
bENvZGVDYWNoZSgpLnRyeUdldChjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBwcm9n
cmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKIAogICAgIGlmICghZXZhbCkgewpAQCAtMzc4
LDcgKzM4MCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW0KICAg
ICArK2l0OwogICAgIGRhdGFMb2coIltDYWxsZWVdICAgICAgICAgICAgICAgICAgIHwgJTEwcCB8
ICVwIFxuIiwgaXQsIGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgICsraXQ7Ci0gICAgZGF0YUxv
ZygiW1Njb3BlQ2hhaW5dICAgICAgICAgICAgICAgfCAlMTBwIHwgJXAgXG4iLCBpdCwgY2FsbEZy
YW1lLT5zY29wZUNoYWluKCkpOworICAgIGRhdGFMb2coIltTY29wZUNoYWluXSAgICAgICAgICAg
ICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsIGNhbGxGcmFtZS0+c2NvcGUoKSk7CiAgICAgKytpdDsK
ICNpZiBFTkFCTEUoSklUKQogICAgIEFic3RyYWN0UEMgcGMgPSBjYWxsRnJhbWUtPmFic3RyYWN0
UmV0dXJuUEMoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwpAQCAtNDQ5LDcgKzQ1MSw3IEBAIGJv
b2wgSW50ZXJwcmV0ZXI6OmlzT3Bjb2RlKE9wY29kZSBvcGNvZGUKIE5FVkVSX0lOTElORSBib29s
IEludGVycHJldGVyOjp1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayom
IGNvZGVCbG9jaykKIHsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsK
LSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
OworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogCiAgICAgaWYgKERl
YnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1
Z2dlcigpKSB7CiAgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lIGRlYnVnZ2VyQ2FsbEZyYW1lKGNh
bGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOwpAQCAtNDYzLDE0ICs0NjUsMTQgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbAogICAgIGlmIChvbGRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpKSB7CiAgICAgICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9j
ay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkgewogICAgICAgICAgICAgb2xkQ29k
ZUJsb2NrLT5jcmVhdGVBY3RpdmF0aW9uKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgICAgICAgICBzY29wZSA9IGNhbGxG
cmFtZS0+c2NvcGUoKTsKICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIUpTU2NvcGU6Om9iamVj
dEF0U2NvcGUoc2NvcGVDaGFpbiktPmluaGVyaXRzKCZKU0FjdGl2YXRpb246OnNfaW5mbykpCi0g
ICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+cG9wKCk7CisgICAgICAgIHdoaWxl
ICghc2NvcGUtPmluaGVyaXRzKCZKU0FjdGl2YXRpb246OnNfaW5mbykpCisgICAgICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7CiAKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWlu
KHNjb3BlQ2hhaW4pOwotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBhc0FjdGl2
YXRpb24oSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZUNoYWluKSk7Ci0gICAgICAgIGFjdGl2
YXRpb24tPnRlYXJPZmYoKnNjb3BlQ2hhaW4tPmdsb2JhbERhdGEpOworICAgICAgICBjYWxsRnJh
bWUtPnNldFNjb3BlKHNjb3BlKTsKKyAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
YXNBY3RpdmF0aW9uKHNjb3BlKTsKKyAgICAgICAgYWN0aXZhdGlvbi0+dGVhck9mZigqc2NvcGUt
Pmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIob2xkQ29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpKSkuanNWYWx1ZSgpKQogICAgICAgICAgICAgYXNBcmd1bWVudHMo
YXJndW1lbnRzKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGFjdGl2YXRpb24pOwogICAgIH0gZWxzZSBpZiAob2xkQ29kZUJsb2NrLT51c2VzQXJndW1lbnRz
KCkgJiYgIW9sZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKQEAgLTgwOSwxNSArODExLDE1
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICBtX3JlZ2lz
dGVyRmlsZS5zaHJpbmsoaGlnaFdhdGVyTWFyayk7CiAKICAgICAvLyBVbndpbmQgdGhlIHNjb3Bl
IGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1lLgotICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAg
SlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgaW50IHNjb3BlRGVsdGEg
PSAwOwogICAgIGlmICghY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgfHwgY29kZUJs
b2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSAKICAgICAgICAgfHwgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkKLSAg
ICAgICAgc2NvcGVEZWx0YSA9IGRlcHRoKGNvZGVCbG9jaywgc2NvcGVDaGFpbikgLSBoYW5kbGVy
LT5zY29wZURlcHRoOworICAgICAgICBzY29wZURlbHRhID0gZGVwdGgoY29kZUJsb2NrLCBzY29w
ZSkgLSBoYW5kbGVyLT5zY29wZURlcHRoOwogICAgIEFTU0VSVChzY29wZURlbHRhID49IDApOwog
ICAgIHdoaWxlIChzY29wZURlbHRhLS0pCi0gICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWlu
LT5wb3AoKTsKLSAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc2NvcGVDaGFpbik7CisgICAg
ICAgIHNjb3BlID0gc2NvcGUtPm5leHQoKTsKKyAgICBjYWxsRnJhbWUtPnNldFNjb3BlKHNjb3Bl
KTsKIAogICAgIHJldHVybiBoYW5kbGVyOwogfQpAQCAtODM0LDEwICs4MzYsMTEgQEAgc3RhdGlj
IGlubGluZSBKU09iamVjdCogY2hlY2tlZFJldHVybihKUwogICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKIH0KIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU09iamVjdCogdGhpc09iaikKK0pTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3Jh
bUV4ZWN1dGFibGUqIHByb2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhp
c09iaikKIHsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICBB
U1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJU
KCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOworICAgIEFTU0VSVCghc2NvcGUt
Pmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIENSQVNIKCk7CkBAIC04NDUsNyArODQ4LDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgIGlmIChtX3Jl
ZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0
aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCiAgICAgICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwog
Ci0gICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpzY29wZUNo
YWluLT5nbG9iYWxEYXRhLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgIER5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERh
dGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKICAgICBWZWN0b3I8SlNPTlBEYXRhPiBKU09O
UERhdGE7CiAgICAgYm9vbCBwYXJzZVJlc3VsdDsKICAgICBjb25zdCBVU3RyaW5nIHByb2dyYW1T
b3VyY2UgPSBwcm9ncmFtLT5zb3VyY2UoKS50b1N0cmluZygpOwpAQCAtODUzLDE0ICs4NTYsMTQg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAocHJvZ3JhbVNvdXJjZS5pczhCaXQoKSkgewogICAg
ICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBsaXRlcmFsUGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3Jh
bVNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBKU09OUCk7Ci0g
ICAgICAgIHBhcnNlUmVzdWx0ID0gbGl0ZXJhbFBhcnNlci50cnlKU09OUFBhcnNlKEpTT05QRGF0
YSwgc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5z
dXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSkpOwor
ICAgICAgICBwYXJzZVJlc3VsdCA9IGxpdGVyYWxQYXJzZXIudHJ5SlNPTlBQYXJzZShKU09OUERh
dGEsIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3Vw
cG9ydHNSaWNoU291cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBMaXRlcmFsUGFyc2VyPFVDaGFyPiBsaXRlcmFsUGFyc2VyKGNhbGxGcmFtZSwg
cHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgSlNP
TlApOwotICAgICAgICBwYXJzZVJlc3VsdCA9IGxpdGVyYWxQYXJzZXIudHJ5SlNPTlBQYXJzZShK
U09OUERhdGEsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+c3VwcG9ydHNSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0
KCkpKTsKKyAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFyc2Uo
SlNPTlBEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpKSk7CiAgICAg
fQogCiAgICAgaWYgKHBhcnNlUmVzdWx0KSB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAg
IEpTVmFsdWUgcmVzdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5ID0gMDsgZW50cnkg
PCBKU09OUERhdGEuc2l6ZSgpOyBlbnRyeSsrKSB7CiAgICAgICAgICAgICBWZWN0b3I8SlNPTlBQ
YXRoRW50cnk+IEpTT05QUGF0aDsKQEAgLTk0NSw3ICs5NDgsNyBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ZmFpbGVkSlNPTlA6Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y29tcGlsZShjYWxs
RnJhbWUsIHNjb3BlQ2hhaW4pOworICAgIEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBp
bGUoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3IpKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwpAQCAtOTU3LDcgKzk2
MCw3IEBAIGZhaWxlZEpTT05QOgogCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxs
RnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSArIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgotICAgIG5ld0Nh
bGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIENhbGxGcmFtZTo6bm9DYWxs
ZXIoKSwgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgIG5ld0NhbGxGcmFtZS0+
aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCAwKTsKICAgICBuZXdDYWxsRnJhbWUtPnNldFRoaXNWYWx1ZSh0
aGlzT2JqKTsKICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOwogCkBAIC05NzEsNyArOTc0LDcgQEAgZmFpbGVk
SlNPTlA6CiAgICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoSklUKQogICAg
ICAgICBpZiAoIWNsYXNzaWNFbmFibGVkKCkpCi0gICAgICAgICAgICByZXN1bHQgPSBwcm9ncmFt
LT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFt
ZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSBwcm9ncmFt
LT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFt
ZSwgc2NvcGUtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAg
ICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0Nh
bGxGcmFtZSk7CkBAIC05OTksNyArMTAwMiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKENhbGxGcmEKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKICAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9yZWdp
c3RlckZpbGUuZW5kKCk7Ci0gICAgQVNTRVJUKGNhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA8PSBv
bGRFbmQgfHwgY2FsbEZyYW1lID09IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA8
PSBvbGRFbmQgfHwgY2FsbEZyYW1lID09IGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSk7CiAgICAgaW50IGFyZ0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAv
LyBpbXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCiAgICAgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0ID0g
YXJnQ291bnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAKQEAgLTEwMTIs
MTEgKzEwMTUsMTEgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQog
ICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwogCiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIGNh
bGxEYXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW47CisgICAgICAgIEpTU2Nv
cGUqIGNhbGxEYXRhU2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsKIAotICAgICAgICBEeW5hbWlj
R2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKmNhbGxEYXRhU2NvcGVDaGFpbi0+
Z2xvYmFsRGF0YSwgY2FsbERhdGFTY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCkpOworICAg
ICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKmNhbGxEYXRh
U2NvcGUtPmdsb2JhbERhdGEoKSwgY2FsbERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCi0g
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsKKyAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlKTsKICAgICAgICAg
aWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkgewogICAgICAgICAgICAgbV9yZWdpc3RlckZp
bGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJv
d0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CkBAIC0xMDI5LDcgKzEwMzIsNyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIDAsIGNh
bGxEYXRhU2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdD
b3VudCwgZnVuY3Rpb24pOworICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2Nr
LCAwLCBjYWxsRGF0YVNjb3BlLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFy
Z0NvdW50LCBmdW5jdGlvbik7CiAKICAgICAgICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxG
cmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsKIApAQCAtMTA0Myw3
ICsxMDQ2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAg
ICAgICAgICAgbV9yZWVudHJ5RGVwdGgrKzsgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAg
ICBpZiAoIWNsYXNzaWNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1
dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbi0+Z2xv
YmFsRGF0YSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJG
aWxlLCBuZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGUtPmdsb2JhbERhdGEoKSk7CiAgICAgICAg
ICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0
ZShOb3JtYWwsICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lKTsKQEAgLTEwNTgsMTIgKzEw
NjEsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIH0K
IAogICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpOwotICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgbmV3Q2FsbEZy
YW1lLT5pbml0KDAsIDAsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZs
YWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFt
ZS0+c2NvcGUoKTsKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgMCwgc2NvcGUsIGNhbGxGcmFt
ZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKIAogICAgIFRv
cENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5l
d0NhbGxGcmFtZSk7CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0
U2NvcGUoKnNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5n
ZXQoKSk7CisgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpz
Y29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgaWYgKFBy
b2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxl
cigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7
CkBAIC0xMTA2LDExICsxMTA5LDExIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNv
bnN0cnVjdCgKICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0KGkp
KTsKIAogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewotICAgICAg
ICBTY29wZUNoYWluTm9kZSogY29uc3RydWN0RGF0YVNjb3BlQ2hhaW4gPSBjb25zdHJ1Y3REYXRh
LmpzLnNjb3BlQ2hhaW47CisgICAgICAgIEpTU2NvcGUqIGNvbnN0cnVjdERhdGFTY29wZSA9IGNv
bnN0cnVjdERhdGEuanMuc2NvcGU7CiAKLSAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3Bl
IGdsb2JhbE9iamVjdFNjb3BlKCpjb25zdHJ1Y3REYXRhU2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwg
Y29uc3RydWN0RGF0YVNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgICAgIER5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqY29uc3RydWN0RGF0YVNj
b3BlLT5nbG9iYWxEYXRhKCksIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwog
Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNvbnN0cnVjdChjYWxsRnJhbWUsIGNvbnN0cnVjdERh
dGFTY29wZUNoYWluKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNvbnN0cnVj
dERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ29uc3RydWN0KGNhbGxGcmFt
ZSwgY29uc3RydWN0RGF0YVNjb3BlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVy
cm9yKSkgewogICAgICAgICAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAg
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGls
ZUVycm9yKSk7CkBAIC0xMTIzLDcgKzExMjYsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIG5ld0Nh
bGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIDAsIGNvbnN0cnVjdERhdGFTY29wZUNoYWluLCBj
YWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBjb25zdHJ1Y3Rvcik7
CisgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIDAsIGNvbnN0cnVjdERh
dGFTY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdDb3VudCwgY29u
c3RydWN0b3IpOwogCiAgICAgICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7CiAKQEAgLTExMzcsNyArMTE0MCw3
IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7ICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgaWYgKCFj
bGFzc2ljRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEu
anMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkuZXhl
Y3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgY29uc3RydWN0RGF0YVNjb3BlQ2hh
aW4tPmdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEu
anMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkuZXhl
Y3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgY29uc3RydWN0RGF0YVNjb3BlLT5n
bG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxG
cmFtZSk7CkBAIC0xMTU1LDEyICsxMTU4LDEyIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdCgKICAgICB9CiAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25z
dHJ1Y3RUeXBlSG9zdCk7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgMCwgc2NvcGVDaGFp
biwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdDb3VudCwgY29uc3RydWN0
b3IpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgIG5ld0Nh
bGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxh
ZygpLCBhcmdDb3VudCwgY29uc3RydWN0b3IpOwogCiAgICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRv
cENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsKIAotICAg
IER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGVDaGFpbi0+
Z2xvYmFsRGF0YSwgc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICBEeW5hbWlj
R2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCks
IHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2Zp
bGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKQEAgLTExODEsOSArMTE4
NCw5IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICByZXR1
cm4gY2hlY2tlZFJldHVybihhc09iamVjdChyZXN1bHQpKTsKIH0KIAotQ2FsbEZyYW1lQ2xvc3Vy
ZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVhdENhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbiwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbikKK0NhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRD
YWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxE
YXRhLT5leGNlcHRpb24pOworICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0
aW9uKTsKICAgICAKICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JC
dXN5KCkpCiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0xMjAyLDcgKzEy
MDUsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yCiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGVycm9y
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3BlQ2hh
aW4pOworICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZv
ckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIHRocm93
RXJyb3IoY2FsbEZyYW1lLCBlcnJvcik7CiAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhv
bGRFbmQpOwpAQCAtMTIxNiw5ICsxMjE5LDkgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRl
cjo6cHJlcGFyZUZvcgogICAgICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKICAg
ICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKICAgICB9Ci0gICAgbmV3Q2FsbEZyYW1l
LT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZy
YW1lRmxhZygpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZnVuY3Rpb24pOyAgCi0gICAg
c2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAg
IENhbGxGcmFtZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVu
Y3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgb2xkRW5k
LCBzY29wZUNoYWluLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgfTsKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29w
ZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgZnVuY3Rpb24pOyAgCisgICAgc2NvcGUtPmdsb2JhbERhdGEoKS0+dG9wQ2FsbEZy
YW1lID0gbmV3Q2FsbEZyYW1lOworICAgIENhbGxGcmFtZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxs
RnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgc2NvcGUt
Pmdsb2JhbERhdGEoKSwgb2xkRW5kLCBzY29wZSwgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTI2NCwyOSArMTI2NywyOSBAQCB2b2lkIEludGVycHJldGVyOjplbmRSZXBlYXRDYWxsKENh
bGxGcmFtCiAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKGNsb3N1cmUub2xkRW5kKTsKIH0KIAot
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KQorSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1Njb3BlKiBzY29wZSwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KQogewog
ICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFsdWUsIGNhbGxGcmFtZSkpOwotICAg
IEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQo
IXNjb3BlLT5nbG9iYWxEYXRhKCktPmV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAK
LSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlQ2hh
aW4tPmdsb2JhbERhdGEsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgRHlu
YW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpzY29wZS0+Z2xvYmFsRGF0
YSgpLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49
IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBKU09iamVj
dCogY29tcGlsZUVycm9yID0gZXZhbC0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwor
ICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5jb21waWxlKGNhbGxGcmFtZSwgc2Nv
cGUpOwogICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpCiAgICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICBF
dmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZhbC0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKIAog
ICAgIEpTT2JqZWN0KiB2YXJpYWJsZU9iamVjdDsKLSAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlKiBu
b2RlID0gc2NvcGVDaGFpbjsgOyBub2RlID0gbm9kZS0+bmV4dC5nZXQoKSkgeworICAgIGZvciAo
SlNTY29wZSogbm9kZSA9IHNjb3BlOyA7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKICAgICAgICAg
QVNTRVJUKG5vZGUpOwotICAgICAgICBpZiAoSlNTY29wZTo6b2JqZWN0QXRTY29wZShub2RlKS0+
aXNWYXJpYWJsZU9iamVjdCgpICYmICFKU1Njb3BlOjpvYmplY3RBdFNjb3BlKG5vZGUpLT5pc05h
bWVTY29wZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxK
U1N5bWJvbFRhYmxlT2JqZWN0Kj4oSlNTY29wZTo6b2JqZWN0QXRTY29wZShub2RlKSk7CisgICAg
ICAgIGlmIChub2RlLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgIW5vZGUtPmlzTmFtZVNjb3BlT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbm9kZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI5Niw4ICsxMjk5LDggQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIGJvb2wgcHVzaGVkU2NvcGUgPSBm
YWxzZTsKICAgICBpZiAobnVtVmFyaWFibGVzIHx8IG51bUZ1bmN0aW9ucykgewogICAgICAgICBp
ZiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgdmFyaWFibGVPYmpl
Y3QgPSBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZSk7Ci0gICAgICAgICAg
ICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+cHVzaCh2YXJpYWJsZU9iamVjdCk7CisgICAgICAg
ICAgICBzY29wZSA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gc2NvcGU7CiAgICAgICAgICAgICBwdXNoZWRTY29w
ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyCkBAIC0xMzE0LDIyICsxMzE3LDE5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GdW5j
dGlvbnM7ICsraSkgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHZh
cmlhYmxlT2JqZWN0LCBjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmN0aW9uLT5tYWtl
KGNhbGxGcmFtZSwgc2NvcGVDaGFpbiksIHNsb3QpOworICAgICAgICAgICAgdmFyaWFibGVPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPnB1dCh2YXJpYWJsZU9iamVjdCwgY2FsbEZyYW1lLCBmdW5jdGlv
bi0+bmFtZSgpLCBmdW5jdGlvbi0+bWFrZShjYWxsRnJhbWUsIHNjb3BlKSwgc2xvdCk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9yZWdpc3RlckZpbGUuZW5k
KCk7CiAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG1fcmVnaXN0ZXJGaWxlLmJlZ2luKCkgKyBnbG9i
YWxSZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0gICAg
aWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG5ld0VuZCkpIHsKLSAgICAgICAgaWYgKHB1c2hlZFNj
b3BlKQotICAgICAgICAgICAgc2NvcGVDaGFpbi0+cG9wKCk7CisgICAgaWYgKCFtX3JlZ2lzdGVy
RmlsZS5ncm93KG5ld0VuZCkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotICAgIH0KIAogICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobV9yZWdpc3RlckZpbGUuYmVnaW4oKSArIGds
b2JhbFJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICBuZXdDYWxsRnJhbWUt
PmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJh
bWVGbGFnKCksIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICBuZXdDYWxsRnJh
bWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1l
RmxhZygpLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgMCk7CiAgICAgbmV3Q2FsbEZyYW1l
LT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKIAogICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BD
YWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7CkBAIC0xMzQ3
LDcgKzEzNDcsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAj
aWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkKICNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0gZXZh
bC0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJh
bWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEpOworICAgICAgICAgICAgcmVzdWx0ID0gZXZhbC0+
Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUs
IHNjb3BlLT5nbG9iYWxEYXRhKCkpOwogI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQog
ICAgICAgICBlbHNlCiAjZW5kaWYKQEAgLTEzNjIsOCArMTM2Miw2IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUo
Y2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAgbV9y
ZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7Ci0gICAgaWYgKHB1c2hlZFNjb3BlKQotICAgICAg
ICBzY29wZUNoYWluLT5wb3AoKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwog
fQogCkBAIC0xMzk2LDE2ICsxMzk0LDE1IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWwKIH0KICAgICAKICNpZiBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikKLU5F
VkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNj
b3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQorTkVWRVJf
SU5MSU5FIEpTU2NvcGUqIEludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgSWRlbnRpZmllciYgcHJvcGVydHkgPSBjb2RlQmxvY2stPmlkZW50
aWZpZXIodlBDWzJdLnUub3BlcmFuZCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+
cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0gSlNO
YW1lU2NvcGU6OmNyZWF0ZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7
CisgICAgSlNOYW1lU2NvcGUqIHNjb3BlID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShjYWxsRnJhbWUs
IHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBKU1ZhbHVlKHNjb3BlKTsKLQotICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+cHVzaChzY29wZSk7CisgICAgcmV0dXJuIHNjb3BlOwogfQogCiBORVZFUl9JTkxJTkUg
dm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE3ODgsNyArMTc4NSw3IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gY3JlYXRlU3ludGF4RXJyb3IoY2FsbEZyYW1lLCAiSW52YWxpZCBmbGFncyBzdXBw
bGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIik7CiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93
OwogICAgICAgICB9Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1
ZShSZWdFeHBPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPnJlZ0V4
cFN0cnVjdHVyZSgpLCByZWdFeHApKTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSBKU1ZhbHVlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3Qo
KS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX25ld19yZWdleHApOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0y
NjkxLDkgKzI2ODgsOSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVj
CiAgICAgICAgIGludCBpbmRleCA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBza2lw
ID0gdlBDWzNdLnUub3BlcmFuZDsKIAotICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwotICAgICAgICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBl
bmQgPSBzY29wZUNoYWluLT5lbmQoKTsKKyAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJh
bWUtPnNjb3BlKCk7CisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGUtPmJl
Z2luKCk7CisgICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZS0+ZW5kKCk7CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CiAgICAgICAgIEFTU0VSVChj
b2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CiAgICAgICAgIGJvb2wgY2hlY2tU
b3BMZXZlbCA9IGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7CkBAIC0yNzA2LDkgKzI3MDMsOSBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAgICArK2l0ZXI7CiAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOwogICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc1ZhcmlhYmxlT2JqZWN0KCkpOwotICAgICAgICBKU1Zh
cmlhYmxlT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaXRlci5nZXQo
KSk7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gc2NvcGUtPnJlZ2lzdGVy
QXQoaW5kZXgpLmdldCgpOworICAgICAgICBBU1NFUlQoaXRlci0+aXNWYXJpYWJsZU9iamVjdCgp
KTsKKyAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNW
YXJpYWJsZU9iamVjdCo+KGl0ZXIuZ2V0KCkpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IHZhcmlhYmxlT2JqZWN0LT5yZWdpc3RlckF0KGluZGV4KS5nZXQoKTsKICAgICAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+cihkc3QpLmpzVmFsdWUoKSk7CiAgICAgICAgIHZQQyArPSBP
UENPREVfTEVOR1RIKG9wX2dldF9zY29wZWRfdmFyKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwpAQCAtMjcyMSw5ICsyNzE4LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlYwogICAgICAgICBpbnQgc2tpcCA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAg
IGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwotICAgICAgICBTY29wZUNoYWlu
SXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CisgICAgICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9
IHNjb3BlLT5iZWdpbigpOworICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUt
PmVuZCgpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOwogICAgICAgICBi
b29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwpAQCAtMjczNywxMCArMjczNCwx
MCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOwogICAgICAgICB9CiAKLSAgICAgICAg
QVNTRVJUKCgqaXRlciktPmlzVmFyaWFibGVPYmplY3QoKSk7Ci0gICAgICAgIEpTVmFyaWFibGVP
YmplY3QqIHNjb3BlID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihpdGVyLmdldCgpKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXItPmlzVmFyaWFibGVPYmplY3QoKSk7CisgICAgICAgIEpTVmFyaWFi
bGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihpdGVy
LmdldCgpKTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsK
LSAgICAgICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUs
IGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKKyAgICAgICAgdmFyaWFibGVPYmplY3Qt
PnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgdmFyaWFibGVPYmplY3QsIGNhbGxG
cmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQpA
QCAtNDIyNyw3ICs0MjI0LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgaW50IHNo
b3VsZENoZWNrID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+
Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpIHx8IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpOwogICAgICAgICBpZiAoIXNob3VsZENoZWNrIHx8ICFjYWxsRnJhbWUtPnIoZHN0
KS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpT
VmFsdWUoY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woZnVuYyktPm1ha2UoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKSkpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSBKU1ZhbHVlKGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGZ1bmMpLT5tYWtlKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5zY29wZSgpKSk7CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbmV3X2Z1bmMpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC00MjQ1LDcg
KzQyNDIsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAKICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNvZGVCbG9jay0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoZnVuY0luZGV4KTsKLSAgICAgICAgSlNGdW5j
dGlvbiogZnVuYyA9IGZ1bmN0aW9uLT5tYWtlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29wZUNo
YWluKCkpOworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gZnVuY3Rpb24tPm1ha2UoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnNjb3BlKCkpOwogCiAgICAgICAgIC8qIAogICAgICAgICAgICAgVGhl
IElkZW50aWZpZXIgaW4gYSBGdW5jdGlvbkV4cHJlc3Npb24gY2FuIGJlIHJlZmVyZW5jZWQgZnJv
bSBpbnNpZGUKQEAgLTQyNTYsNyArNDI1Myw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAg
ICAgICAqLwogICAgICAgICBpZiAoIWZ1bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKICAgICAg
ICAgICAgIEpTTmFtZVNjb3BlKiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNOYW1lU2NvcGU6OmNy
ZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7Ci0gICAgICAgICAgICBmdW5jLT5zZXRTY29wZSgqZ2xvYmFsRGF0YSwgZnVuYy0+c2Nv
cGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CisgICAgICAgICAgICBmdW5jLT5zZXRT
Y29wZSgqZ2xvYmFsRGF0YSwgZnVuY3Rpb25TY29wZU9iamVjdCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoZnVuYyk7CkBAIC00Mjg1
LDcgKzQyODIsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGlmIChpc0hvc3RG
dW5jdGlvbihmdW5jVmFsLCBnbG9iYWxGdW5jRXZhbCkpIHsKICAgICAgICAgICAgIENhbGxGcmFt
ZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2
UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNWYWwpKTsKKyAg
ICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2Nh
bGxfZXZhbCksIGNhbGxGcmFtZS0+c2NvcGUoKSwgY2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0
PEpTRnVuY3Rpb24qPihmdW5jVmFsKSk7CiAKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
ZXZhbChuZXdDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGds
b2JhbERhdGEtPmV4Y2VwdGlvbikpCkBAIC00MzIxLDkgKzQzMTgsOSBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHYsIGNhbGxE
YXRhKTsKIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewotICAgICAgICAg
ICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3Bl
Q2hhaW47CisgICAgICAgICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY2FsbERhdGEuanMu
c2NvcGU7CiAKLSAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hh
aW4pOworICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGUpOwogICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCEhZXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uVmFsdWUgPSBlcnJvcjsKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwpAQCAtNDMz
OCw3ICs0MzM1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAgICAgICBnb3Rv
IHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQo
bmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNjb3Bl
Q2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rpb24qPih2
KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNjb3BlLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJn
Q291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4odikpOwogICAgICAgICAgICAgY29kZUJsb2NrID0g
bmV3Q29kZUJsb2NrOwogICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1l
OwpAQCAtNDM1Miw5ICs0MzQ5LDkgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAg
ICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICAgICAgICAg
IENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+
aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBzY29wZUNoYWluLCBjYWxsRnJh
bWUsIGFyZ0NvdW50LCBhc09iamVjdCh2KSk7CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmlu
aXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwgc2NvcGUsIGNhbGxGcmFtZSwgYXJn
Q291bnQsIGFzT2JqZWN0KHYpKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgKnRvcENhbGxGcmFtZVNsb3QgPSBuZXdDYWxs
RnJhbWU7CkBAIC00NDAxLDkgKzQzOTgsOSBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHYsIGNhbGxEYXRhKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0gICAgICAgICAgICBTY29w
ZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gY2FsbERhdGEuanMuc2NvcGVDaGFpbjsK
KyAgICAgICAgICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsK
IAotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbik7Cisg
ICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZSk7CiAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoISFlcnJvcikpIHsKICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGVycm9yOwogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CkBAIC00NDE2LDcgKzQ0
MTMsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhy
b3c7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdD
b2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbERhdGFT
Y29wZUNoYWluLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsK
KyAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbERhdGFTY29wZSwgY2FsbEZyYW1lLCBhcmdD
b3VudCwganNDYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBu
ZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICBjYWxsRnJhbWUgPSBuZXdDYWxsRnJhbWU7CiAgICAg
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwpAQCAt
NDQzMSw4ICs0NDI4LDggQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAg
ICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2Nh
bGxfdmFyYXJncyksIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFzT2JqZWN0KHYp
KTsKKyAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAg
ICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bF92YXJhcmdzKSwgc2NvcGUsIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFzT2JqZWN0KHYpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAg
IHsKQEAgLTQ1OTksNyArNDU5Niw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGlm
ICghY2FsbEZyYW1lLT5yKGFjdGl2YXRpb25SZWcpLmpzVmFsdWUoKSkgewogICAgICAgICAgICAg
SlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoKmdsb2JhbERh
dGEsIGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGFjdGl2YXRp
b25SZWcpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0
U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7Cisg
ICAgICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogICAgICAgICB9CiAg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV9hY3RpdmF0aW9uKTsKICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtNDcwMyw5ICs0NzAwLDkgQEAgc2tpcF9pZF9jdXN0
b21fc2VsZjoKICAgICAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3Ry
dWN0RGF0YSh2LCBjb25zdHJ1Y3REYXRhKTsKIAogICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9
PSBDb25zdHJ1Y3RUeXBlSlMpIHsKLSAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0
YVNjb3BlQ2hhaW4gPSBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlQ2hhaW47CisgICAgICAgICAgICBK
U1Njb3BlKiBjYWxsRGF0YVNjb3BlID0gY29uc3RydWN0RGF0YS5qcy5zY29wZTsKIAotICAgICAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4pOwor
ICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlKTsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghIWVycm9yKSkgewogICAgICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gZXJyb3I7CiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKQEAg
LTQ3MjAsNyArNDcxNyw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAgICAgICAg
Z290byB2bV90aHJvdzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FsbEZyYW1lLT5p
bml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBjYWxs
RGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVu
Y3Rpb24qPih2KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2
UEMgKyBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCksIGNhbGxEYXRhU2NvcGUsIHByZXZpb3Vz
Q2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAgICAgICAgICAg
ICBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xv
dCA9IGNhbGxGcmFtZTsKICAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKQEAgLTQ3MzIsOSArNDcyOSw5IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBl
SG9zdCkgewotICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1l
LT5zY29wZSgpOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJh
bWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwotICAg
ICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY29u
c3RydWN0KSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QodikpOwor
ICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3Bf
Y29uc3RydWN0KSwgc2NvcGUsIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFzT2JqZWN0KHYpKTsKIAog
ICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIHsKQEAgLTQ3OTYs
NyArNDc5Myw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKIAogICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGUpID0gSlNWYWx1
ZShvKTsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKEpTV2l0aFNjb3BlKGNhbGxGcmFtZSwgbykpKTsKKyAgICAgICAgY2FsbEZy
YW1lLT5zZXRTY29wZShKU1dpdGhTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgbykpOwogCiAgICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1c2hfc2NvcGUpOwogICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7CkBAIC00ODA2LDcgKzQ4MDMsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
CiAgICAgICAgICAgIFJlbW92ZXMgdGhlIHRvcCBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUg
Y2hhaW4uCiAgICAgICAgICovCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3Bl
KGNhbGxGcmFtZS0+c2NvcGUoKS0+bmV4dCgpKTsKIAogICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9wb3Bfc2NvcGUpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC00ODg0
LDEwICs0ODgxLDEwIEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGludCBjb3VudCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwogCi0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KTsKKyAgICAgICAgSlNTY29wZSogdG1wID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgICAgICB3
aGlsZSAoY291bnQtLSkKLSAgICAgICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgICAgIGNh
bGxGcmFtZS0+c2V0U2NvcGVDaGFpbih0bXApOworICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0
KCk7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGUodG1wKTsKIAogICAgICAgICB2UEMgKz0g
dGFyZ2V0OwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC00OTAzLDcgKzQ5MDAsNyBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICBvYmplY3QgaXMgdGhlbiBwdXNoZWQg
b250byB0aGUgU2NvcGVDaGFpbi4gIFRoZSBzY29wZSBvYmplY3QgaXMgdGhlbiBzdG9yZWQKICAg
ICAgICAgICAgaW4gZHN0IGZvciBHQy4KICAgICAgICAgICovCi0gICAgICAgIGNhbGxGcmFtZS0+
c2V0U2NvcGVDaGFpbihjcmVhdGVFeGNlcHRpb25TY29wZShjYWxsRnJhbWUsIHZQQykpOworICAg
ICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGNyZWF0ZUV4Y2VwdGlvblNjb3BlKGNhbGxGcmFtZSwg
dlBDKSk7CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHVzaF9uZXdfc2NvcGUp
OwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTI3MDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwogICAgIGNsYXNz
IFJlZ2lzdGVyOwotICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU2NvcGU7
CiAgICAgY2xhc3MgU2FtcGxpbmdUb29sOwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwog
ICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKQEAgLTIyNSwxMSArMjI1LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgaXNPcGNvZGUoT3Bjb2RlKTsKIAotICAgICAgICBKU1ZhbHVl
IGV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBTY29wZUNoYWluTm9kZSos
IEpTT2JqZWN0KiB0aGlzT2JqKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlKFByb2dyYW1FeGVj
dXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNPYmplY3QqIHRoaXNPYmopOwogICAgICAgICBKU1ZhbHVl
IGV4ZWN1dGVDYWxsKENhbGxGcmFtZSosIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAg
ICAgSlNPYmplY3QqIGV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0
aW9uLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYp
OwotICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgSlNWYWx1ZSBleGVj
dXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjb3Bl
Q2hhaW5Ob2RlKiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgSlNWYWx1ZSBl
eGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
U2NvcGUqKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZy
YW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqLCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZz
ZXQpOwogCiAgICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKENhbGxG
cmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSByZXRyaWV2ZUNhbGxl
ckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwpAQCAtMjU0LDEyICsy
NTQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBFeGVj
dXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07CiAKLSAgICAgICAgQ2Fs
bEZyYW1lQ2xvc3VyZSBwcmVwYXJlRm9yUmVwZWF0Q2FsbChGdW5jdGlvbkV4ZWN1dGFibGUqLCBD
YWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICBDYWxsRnJhbWVDbG9zdXJlIHByZXBhcmVGb3JSZXBl
YXRDYWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSosIENhbGxGcmFtZSosIEpTRnVuY3Rpb24qLCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpTU2NvcGUqKTsKICAgICAgICAgdm9pZCBlbmRS
ZXBlYXRDYWxsKENhbGxGcmFtZUNsb3N1cmUmKTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKENh
bGxGcmFtZUNsb3N1cmUmKTsKIAogI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKQotICAg
ICAgICBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3BlKENh
bGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpOworICAgICAgICBORVZFUl9JTkxJTkUg
SlNTY29wZSogY3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHZQQyk7CiAKICAgICAgICAgdm9pZCB0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29k
ZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdm9pZCB1bmNh
Y2hlR2V0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKQEAgLTMwNyw5ICszMDcs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICF0aGlzVmFsdWUuaXNPYmplY3Qo
KSB8fCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpID09IHRoaXNWYWx1ZTsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSog
ZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbikKKyAgICBpbmxpbmUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBleGVjdXRlKGV2
YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZUNoYWluLCBtX3JlZ2lzdGVyRmlsZS5zaXpl
KCkgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKKyAgICAgICAgcmV0
dXJuIGV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3BlLCBtX3JlZ2lzdGVy
RmlsZS5zaXplKCkgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAg
ICB9CiAKICAgICBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gMTI3MDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBY3RpdmF0
aW9uOwogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I7Ci0gICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CisgICAgY2xhc3MgSlNTY29wZTsKIAogICAg
IHN0cnVjdCBJbmxpbmVDYWxsRnJhbWU7CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtNTks
NyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVyJiBv
cGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ29kZUJs
b2NrKik7Ci0gICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oU2NvcGVDaGFpbk5vZGUqKTsKKyAg
ICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Njb3BlKik7CiAgICAgICAgIFJlZ2lzdGVyJiBv
cGVyYXRvcj0oSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShJbmxp
bmVDYWxsRnJhbWUqKTsKIApAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIGZ1bmN0
aW9uKCkgY29uc3Q7CiAgICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFt
ZUl0ZXJhdG9yKCkgY29uc3Q7Ci0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkg
Y29uc3Q7CisgICAgICAgIEpTU2NvcGUqIHNjb3BlKCkgY29uc3Q7CiAgICAgICAgIEluc3RydWN0
aW9uKiB2UEMoKSBjb25zdDsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBhc0lubGluZUNhbGxG
cmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVk
ZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Ib3N0Q2FsbFJl
dHVyblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hv
c3RDYWxsUmV0dXJuVmFsdWUuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJTY29w
ZUNoYWluLmgiCisKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBSZWdpc3Rl
ckZpbGU7Ci0gICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CisgICAgY2xhc3MgSlNTY29wZTsKICAg
ICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIAogICAgIHN0cnVjdCBDYWxsTGlua0luZm87CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAx
MjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsKIAotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFp
bikpLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7CiAgICAgZW1pdFB1dENlbGxUb0NhbGxGcmFt
ZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKICAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIg
PSBlbWl0TmFrZWRDYWxsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zmc2V0Owog
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9zY29wZUNoYWluKSksIHJlZ1QxKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlZ1QxKTsKICAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CiAgICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0
aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6Ogog
ICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBK
U0Z1bmN0aW9uVHlwZSkpOwogCiAgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlv
biBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUp
KSwgcmVnVDEpOwogICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbik7CiAKICAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMg
Zm9yIHVzZSBieSBsYXp5IGxpbmtpbmcgYW5kIGV4Y2VwdGlvbnMuCkBAIC04OSw3ICs4OSw3IEBA
IFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gSklUOjoKICAgICBjb25zdHJ1Y3RT
bG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9u
VHlwZSkpOwogCiAgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUg
SlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDEp
OwogICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbik7CiAKICAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBi
eSBsYXp5IGxpbmtpbmcgYW5kIGV4ZXB0aW9ucy4KQEAgLTEwOSw3ICsxMDksNyBAQCBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6CiAgICAgY2FsbFNsb3dDYXNlLmFwcGVu
ZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7CiAKICAg
ICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBj
YWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7CiAgICAgZW1pdFB1
dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsK
IAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6OgogICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVu
ZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7CiAKICAg
ICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBj
YWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7CiAgICAgZW1pdFB1
dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsK
IAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3RpCiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
b252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICB2b2lkKiBnbG9iYWxUaGlzID0gbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCktPmdsb2JhbFRoaXMu
Z2V0KCk7CisgICAgdm9pZCogZ2xvYmFsVGhpcyA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsVGhpcygpOwogICAgIHVuc2lnbmVkIHRoaXNSZWdpc3RlciA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyNzAxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBK
SVQ6OgogICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJl
Z1QxLCBKU0Z1bmN0aW9uVHlwZSkpOwogCiAgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFs
aXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGUpKSwgcmVnVDEpOwogICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEs
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CiAKICAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0
dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxpbmtpbmcgYW5kIGV4Y2VwdGlvbnMuCkBAIC05NSw3ICs5
NSw3IEBAIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gSklUOjoKICAgICBjb25z
dHJ1Y3RTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1
bmN0aW9uVHlwZSkpOwogCiAgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBi
ZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwg
cmVnVDEpOwogICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbik7CiAKICAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9y
IHVzZSBieSBsYXp5IGxpbmtpbmcgYW5kIGV4ZXB0aW9ucy4KQEAgLTExNSw3ICsxMTUsNyBAQCBQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6CiAgICAgY2FsbFNsb3dDYXNl
LmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7
CiAKICAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5j
dGlvbiBjYWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7CiAgICAg
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CkBAIC0xMzgsNyArMTM4LDcgQEAgUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6OgogICAgIGNvbnN0cnVjdFNsb3dDYXNl
LmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7
CiAKICAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5j
dGlvbiBjYWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7CiAgICAg
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CkBAIC0xMzMxLDcgKzEzMzEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKEluc3RyCiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICB2b2lkKiBnbG9iYWxUaGlz
ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCktPmdsb2Jh
bFRoaXMuZ2V0KCk7CisgICAgdm9pZCogZ2xvYmFsVGhpcyA9IG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsVGhpcygpOwogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCkBAIC0xNTkxLDE1ICsxNTkxLDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMKICAgICAgICAgSnVtcCBhY3RpdmF0aW9u
Tm90Q3JlYXRlZDsKICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCiAgICAgICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihtX2NvZGVC
bG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBtX2dsb2JhbERhdGEtPmFj
dGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDApOworICAgICAg
ICBhZGRTbG93Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9nbG9iYWxEYXRhLT5hY3RpdmF0
aW9uU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVh
dGVkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIHdoaWxlIChza2lwLS0pIHsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVj
dCkpLCByZWdUMSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBt
X2dsb2JhbERhdGEtPmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwg
cmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9nbG9i
YWxEYXRhLT5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAgfQogICAg
IGVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwoY3VycmVudEluc3RydWN0aW9uLCB0cnVlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwOCwxMyAr
MTEwOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAgICAg
ICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7CiAgICAgICAgIGlmIChjaGVja1RvcExldmVs
KQogICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFn
Rm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QyKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QyKTsKICAg
ICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGluayh0aGlzKTsKICAgICB9CiAgICAgd2hpbGUg
KHNraXAtLSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDIpOwogCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCBy
ZWdUMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZz
ZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIpOwogCiAgICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDIpOwpAQCAtMTEzOCwxMiArMTEzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAgICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7
CiAgICAgICAgIGlmIChjaGVja1RvcExldmVsKQogICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENy
ZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBu
ZXh0KSksIHJlZ1QyKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QyKTsKICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGlu
ayh0aGlzKTsKICAgICB9CiAgICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwgcmVnVDIp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5O
b2RlLCBvYmplY3QpKSwgcmVnVDIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDIpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDMpOwogICAg
IGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI3
MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNjcsMTMgKzEwNjcsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlZF92YXIoSW5zdHJ1YwogICAgICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVk
OwogICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RD
cmVhdGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAg
ICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIHdoaWxlIChz
a2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNj
b3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0
T2ZSZWdpc3RlcnMoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKQEAgLTEwOTMsMTIgKzEwOTIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3Njb3BlZF92YXIoSW5zdHJ1YwogICAgICAgICBKdW1wIGFjdGl2
YXRpb25Ob3RDcmVhdGVkOwogICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKICAgICAgICAgICAg
IGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBhZGRyZXNzRm9yKG1f
Y29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMSk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMSk7CiAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CiAgICAg
fQogICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgT0JK
RUNUX09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QxKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgb2JqZWN0KSks
IHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QxKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDEsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91
dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
Um91dGluZS5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NvcGVD
aGFpbi5oIgorCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI3MDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4MCw3ICs4ODAsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNh
Y2hlUHV0CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+
cHJldmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKICAgICAgICAgc3R1YkluZm8tPmluaXRQdXRCeUlkVHJhbnNpdGlvbihjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2
aW91c0lEKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGRpcmVjdCk7Ci0gICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9i
YWxEYXRhLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSwgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm90b3R5cGVDaGFpbiwgcmV0dXJuQWRkcmVz
cywgZGlyZWN0KTsKKyAgICAgICAgSklUOjpjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oY2FsbEZy
YW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3RvdHlw
ZUNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtOTAzLDcgKzkwMyw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5
Q2FjaGVHZXQKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCk7CiAKICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1l
ID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBKSVQ6OmNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxE
YXRhLCBjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MpOworICAgICAgICBKSVQ6OmNvbXBpbGVQYXRj
aEdldEFycmF5TGVuZ3RoKGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxv
Y2ssIHJldHVybkFkZHJlc3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtOTYz
LDcgKzk2Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVHZXQKIAog
ICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgICAgICBBU1NF
UlQoIXNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAg
ICBKSVQ6OmNvbXBpbGVHZXRCeUlkUHJvdG8oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2Jh
bERhdGEsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90QmFz
ZU9iamVjdC0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5B
ZGRyZXNzKTsKKyAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+c2Nv
cGUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9m
ZnNldCwgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk3Niw3
ICs5NzYsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0CiAKICAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGNhbGxGcmFtZSk7CiAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkQ2hhaW4oY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3Bl
cnR5U2xvdDo6VmFsdWUpOwotICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRDaGFpbihjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+Z2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBv
ZmZzZXQsIHJldHVybkFkZHJlc3MpOworICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRDaGFpbihjYWxs
RnJhbWUtPnNjb3BlKCktPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90
LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOwogfQogCiAjaWYgIWRlZmluZWQoTkRFQlVHKQpAQCAt
MTU5MSw3ICsxNTkxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgICAgICAvLyBmb3Igbm93LiAgRm9yIG5vdyBpdCBwZXJmb3JtcyBhIGNoZWNrIG9uIGEg
c3BlY2lhbCBvYmplY3Qgb24gdGhlIGdsb2JhbCBvYmplY3Qgb25seSB1c2VkIGZvciB0aGlzCiAg
ICAgICAgIC8vIHB1cnBvc2UuICBUaGUgb2JqZWN0IGlzIGluIG5vIHdheSBleHBvc2VkLCBhbmQg
YXMgc3VjaCB0aGUgY2hlY2sgd2lsbCBhbHdheXMgcGFzcy4KICAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIEpJVDo6cGF0Y2hNZXRob2RDYWxs
UHJvdG8oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jaywgbWV0aG9kQ2FsbExpbmtJ
bmZvLCBzdHViSW5mbywgY2FsbGVlLCBzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5nbG9iYWxPYmplY3QtPm1ldGhvZENhbGxEdW1teSgpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsK
KyAgICAgICAgICAgIEpJVDo6cGF0Y2hNZXRob2RDYWxsUHJvdG8oY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNvZGVCbG9jaywgbWV0aG9kQ2FsbExpbmtJbmZvLCBzdHViSW5mbywgY2FsbGVlLCBz
dHJ1Y3R1cmUsIGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxE
dW1teSgpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2OTEsNyArMTY5MSw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAvLyB1c2VmdWwu
IFdlIGNvdWxkIHRyeSB0byBub3AgaXQgb3V0IGFsdG9nZXRoZXIsIGJ1dCB0aGF0J3MgYSBsaXR0
bGUgbWVzc3ksIHNvIGxldHMgZG8gc29tZXRoaW5nIHNpbXBsZXIKICAgICAvLyBmb3Igbm93LiBG
b3Igbm93IGl0IHBlcmZvcm1zIGEgY2hlY2sgb24gYSBzcGVjaWFsIG9iamVjdCBvbiB0aGUgZ2xv
YmFsIG9iamVjdCBvbmx5IHVzZWQgZm9yIHRoaXMKICAgICAvLyBwdXJwb3NlLiBUaGUgb2JqZWN0
IGlzIGluIG5vIHdheSBleHBvc2VkLCBhbmQgYXMgc3VjaCB0aGUgY2hlY2sgd2lsbCBhbHdheXMg
cGFzcy4KLSAgICBKSVQ6OnBhdGNoTWV0aG9kQ2FsbFByb3RvKGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjb2RlQmxvY2ssIG1ldGhvZENhbGxMaW5rSW5mbywgc3R1YkluZm8sIGNhbGxlZSwgc3Ry
dWN0dXJlLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5tZXRob2RDYWxs
RHVtbXkoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgSklUOjpwYXRjaE1ldGhvZENhbGxQ
cm90byhjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLCBtZXRob2RDYWxsTGlua0lu
Zm8sIHN0dWJJbmZvLCBjYWxsZWUsIHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9i
YWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTc2MSw3ICsxNzYxLDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICB9CiAg
ICAgICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwotICAgICAg
ICAgICAgSklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5nbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIGxpc3RJbmRleCwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQsIHNs
b3QsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQsIHNsb3QsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
CiAgICAgICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMpKTsKQEAgLTE4NzksNyArMTg3OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgaW50IGxpc3RJbmRleDsKICAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0UG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJbmRleCk7CiAgICAg
ICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRQcm90b0xpc3QoY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBl
U3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1
Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgSklUOjpj
b21waWxlR2V0QnlJZFByb3RvTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbERhdGEoKSwg
Y2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBs
aXN0SW5kZXgsIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIG9mZnNldCk7CiAKICAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7CkBAIC0xODkxLDcgKzE4
OTEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAg
IAogICAgICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7
CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG9DaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRD
aGFpbkxpc3QoY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBz
dHJ1Y3R1cmUsIHByb3RvQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCk7
CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KGNhbGxGcmFtZS0+c2Nv
cGUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJlLCBwcm90b0NoYWluLCBjb3Vu
dCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOwogCiAgICAgICAgICAgICBpZiAobGlzdElu
ZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVsbCkpOwpAQCAt
MjAyMiw4ICsyMDIyLDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgICAgIEpT
T2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNj
b3BlQ2hhaW4sIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxG
cmFtZS0+c2NvcGUoKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21w
aWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGUsIGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIGRhdGFM
b2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKQEAgLTIxNDEs
NyArMjE0MSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAgCiAgICAgQVNTRVJUKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNv
ZGUgfHwgIXN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpIHx8IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT51bmNoZWNrZWRSKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHN0YWNrRnJhbWUuYXJnc1swXS5mdW5jdGlvbigpLT5tYWtlKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKKyAgICByZXR1
cm4gc3RhY2tGcmFtZS5hcmdzWzBdLmZ1bmN0aW9uKCktPm1ha2Uoc3RhY2tGcmFtZS5jYWxsRnJh
bWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZSgpKTsKIH0KIAogaW5saW5lIHZvaWQqIGpp
dENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKQEAgLTIxNDksNyArMjE0OSw3IEBAIGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENh
bGxGcmFtZSogY2EKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24t
PmpzRXhlY3V0YWJsZSgpOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4g
PSBmdW5jdGlvbi0+c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBm
dW5jdGlvbi0+c2NvcGUoKTsKICAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5jb21w
aWxlRm9yKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluLCBraW5kKTsKICAgICBpZiAoIWVy
cm9yKQogICAgICAgICByZXR1cm4gZnVuY3Rpb247CkBAIC0yMjc5LDcgKzIyNzksNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNB
Y3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKLSAgICBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKKyAgICBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKQEAg
LTI5ODIsNyArMjk4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3
X2YKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IHN0YWNrRnJhbWUuYXJnc1swXS5mdW5j
dGlvbigpOwotICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBmdW5jdGlvbi0+bWFrZShjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jID0gZnVuY3Rp
b24tPm1ha2UoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlKCkpOwogICAgIEFTU0VSVChjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+dW5j
aGVja2VkUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNW
YWx1ZSgpKTsKIAogICAgIC8qIApAQCAtMjk5NCw3ICsyOTk0LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogICAgICAqLwogICAgIGlmICghZnVuY3Rpb24tPm5h
bWUoKS5pc051bGwoKSkgewogICAgICAgICBKU05hbWVTY29wZSogZnVuY3Rpb25TY29wZU9iamVj
dCA9IEpTTmFtZVNjb3BlOjpjcmVhdGUoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5j
LCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICBmdW5jLT5zZXRTY29wZShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0
KSk7CisgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5j
dGlvblNjb3BlT2JqZWN0KTsKICAgICB9CiAKICAgICByZXR1cm4gZnVuYzsKQEAgLTMwOTUsNyAr
MzA5NSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAg
ICAgfHwgIWNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKQogICAgICAgICB8fCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPnVuY2hlY2tl
ZFIoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lz
dGVyKCkpLmpzVmFsdWUoKSk7CiAKLSAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVy
RnJhbWUtPnNjb3BlQ2hhaW4oKSk7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZShjYWxsZXJGcmFt
ZS0+c2NvcGUoKSk7CiAgICAgY2FsbEZyYW1lLT5zZXRSZXR1cm5QQyhzdGF0aWNfY2FzdDxJbnN0
cnVjdGlvbio+KChTVFVCX1JFVFVSTl9BRERSRVNTKS52YWx1ZSgpKSk7CiAgICAgY2FsbEZyYW1l
LT5zZXRDb2RlQmxvY2soMCk7CiAKQEAgLTMxNDcsNyArMzE0Nyw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVzaF8KIAogICAgIEpTT2JqZWN0KiBvID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29w
ZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goSlNXaXRoU2Nv
cGU6OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgbykpKTsKKyAgICBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgbykpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0zMTU1LDcgKzMxNTUsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wb3Bfc2NvcGUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3Bl
Q2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOworICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGUo
KS0+bmV4dCgpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
X3R5cGVvZikKQEAgLTMyNjIsMTAgKzMyNjIsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNP
YmplY3QqLCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKIAotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTTmFtZVNjb3BlOjpjcmVhdGUoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUu
YXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIEpTTmFtZVNjb3BlKiBzY29wZSA9
IEpTTmFtZVNjb3BlOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJn
c1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCksIERvbnREZWxl
dGUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1
c2goc2NvcGUpKTsKKyAgICBjYWxsRnJhbWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICByZXR1cm4g
c2NvcGU7CiB9CiAKQEAgLTMyNzYsMTAgKzMyNzYsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3Bfam1wX3Njb3BlcwogICAgIHVuc2lnbmVkIGNvdW50ID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmludDMyKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KTsKKyAgICBKU1Njb3BlKiB0bXAgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgd2hpbGUgKGNv
dW50LS0pCi0gICAgICAgIHRtcCA9IHRtcC0+cG9wKCk7Ci0gICAgY2FsbEZyYW1lLT5zZXRTY29w
ZUNoYWluKHRtcCk7CisgICAgICAgIHRtcCA9IHRtcC0+bmV4dCgpOworICAgIGNhbGxGcmFtZS0+
c2V0U2NvcGUodG1wKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5
X2luZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVu
dHJ5cG9pbnRzLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2lu
Y2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJTY29wZUNoYWluLmgiCisK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1
ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRl
ICJWYWx1ZVByb2ZpbGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcg
KzIzNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHRyYWNlKQogICAgICAgICAgICAgZXhlYywK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAtIGV4ZWMtPmNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKICAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4ZWMt
Pmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpXSwK
LSAgICAgICAgICAgIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CisgICAgICAgICAgICBleGVjLT5zY29w
ZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChwY1swXS51Lm9wY29kZSkgPT0gb3BfcmV0KSB7CiAgICAgICAgIGRhdGFMb2coIldpbGwgYmUg
cmV0dXJuaW5nIHRvICVwXG4iLCBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCkpOwogICAgICAgICBk
YXRhTG9nKCJUaGUgbmV3IGNmciB3aWxsIGJlICVwXG4iLCBleGVjLT5jYWxsZXJGcmFtZSgpKTsK
QEAgLTQ0OCw3ICs0NDgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRl
X2FjCiAgICAgZGF0YUxvZygiQ3JlYXRpbmcgYW4gYWN0aXZhdGlvbiwgZXhlYyA9ICVwIVxuIiwg
ZXhlYyk7CiAjZW5kaWYKICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRp
b246OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKLSAgICBleGVjLT5z
ZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CisgICAg
ZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFsdWUoYWN0
aXZhdGlvbikpOwogfQogCkBAIC0xMTM2LDEwICsxMTM2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9qbXBfc2NvcGUKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIHVuc2ln
bmVkIGNvdW50ID0gcGNbMV0udS5vcGVyYW5kOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiB0bXAgPSBl
eGVjLT5zY29wZUNoYWluKCk7CisgICAgSlNTY29wZSogdG1wID0gZXhlYy0+c2NvcGUoKTsKICAg
ICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgdG1wID0gdG1wLT5wb3AoKTsKLSAgICBleGVjLT5z
ZXRTY29wZUNoYWluKHRtcCk7CisgICAgICAgIHRtcCA9IHRtcC0+bmV4dCgpOworICAgIGV4ZWMt
PnNldFNjb3BlKHRtcCk7CiAgICAgcGMgKz0gcGNbMl0udS5vcGVyYW5kOwogICAgIExMSU5UX0VO
RCgpOwogfQpAQCAtMTI1OCw3ICsxMjU4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19mdW5jKQogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZygi
Q3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKICNlbmRpZgotICAgIExMSU5UX1JFVFVSTihjb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChwY1syXS51Lm9wZXJhbmQpLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3Bl
Q2hhaW4oKSkpOworICAgIExMSU5UX1JFVFVSTihjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChwY1sy
XS51Lm9wZXJhbmQpLT5tYWtlKGV4ZWMsIGV4ZWMtPnNjb3BlKCkpKTsKIH0KIAogTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5jX2V4cCkKQEAgLTEyNjYsMTEgKzEyNjYsMTEg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5jXwogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIo
cGNbMl0udS5vcGVyYW5kKTsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jID0gZnVuY3Rpb24tPm1ha2Uo
ZXhlYywgZXhlYy0+c2NvcGVDaGFpbigpKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jID0gZnVuY3Rp
b24tPm1ha2UoZXhlYywgZXhlYy0+c2NvcGUoKSk7CiAgICAgCiAgICAgaWYgKCFmdW5jdGlvbi0+
bmFtZSgpLmlzTnVsbCgpKSB7CiAgICAgICAgIEpTTmFtZVNjb3BlKiBmdW5jdGlvblNjb3BlT2Jq
ZWN0ID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShleGVjLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBS
ZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICBmdW5jLT5zZXRTY29wZShnbG9iYWxEYXRh
LCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsKKyAgICAgICAgZnVu
Yy0+c2V0U2NvcGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb25TY29wZU9iamVjdCk7CiAgICAgfQogICAg
IAogICAgIExMSU5UX1JFVFVSTihmdW5jKTsKQEAgLTEyODEsNyArMTI4MSw3IEBAIHN0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBl
eGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZXhl
Yy0+c2NvcGVDaGFpbigpKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgp
KTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAgICAgZXhlY0NhbGxlZS0+Y2xl
YXJSZXR1cm5QQygpOwogCkBAIC0xMzQxLDkgKzEzNDEsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVj
Q2FsbGVlLCBwYywgY2FsbGVlQXNWYWx1ZSwga2luZCk7CiAgICAgCiAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29wZS0+Z2xvYmFsRGF0YTsKLSAgICBleGVjQ2Fs
bGVlLT5zZXRTY29wZUNoYWluKHNjb3BlKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+
c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc2NvcGUt
Pmdsb2JhbERhdGEoKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShzY29wZSk7CiAgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwKICAgICBleGVjQ2FsbGVlLT5z
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhwY1syXS51Lm9wZXJhbmQpOwogICAgIGV4ZWND
YWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIo
UmVnaXN0ZXJGaWxlOjpDYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CisgICAgZXhlY0NhbGxlZS0+c2V0U2Nv
cGUoZXhlYy0+c2NvcGUoKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMoYml0d2lzZV9j
YXN0PEluc3RydWN0aW9uKj4oJmxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50KSk7CiAgICAgZXhl
Y0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAgIGV4ZWMtPnNldEN1cnJlbnRWUEMocGMgKyBP
UENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCkpOwpAQCAtMTUzNiw3ICsxNTM2LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfc2NvcAogICAgIExMSU5UX0NIRUNLX0VYQ0VQ
VElPTigpOwogICAgIAogICAgIExMSU5UX09QKDEpID0gbzsKLSAgICBleGVjLT5zZXRTY29wZUNo
YWluKGV4ZWMtPnNjb3BlQ2hhaW4oKS0+cHVzaChKU1dpdGhTY29wZTo6Y3JlYXRlKGV4ZWMsIG8p
KSk7CisgICAgZXhlYy0+c2V0U2NvcGUoSlNXaXRoU2NvcGU6OmNyZWF0ZShleGVjLCBvKSk7CiAg
ICAgCiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xNTQ0LDcgKzE1NDQsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9zY29wCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcG9wX3Njb3BlKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgZXhlYy0+c2V0U2Nv
cGVDaGFpbihleGVjLT5zY29wZUNoYWluKCktPnBvcCgpKTsKKyAgICBleGVjLT5zZXRTY29wZShl
eGVjLT5zY29wZSgpLT5uZXh0KCkpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xNTUyLDgg
KzE1NTIsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF9uZXdfCiB7CiAg
ICAgTExJTlRfQkVHSU4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTTmFtZVNjb3BlOjpjcmVhdGUoZXhlYywg
Y29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCksIExMSU5UX09QKDMpLmpzVmFs
dWUoKSwgRG9udERlbGV0ZSk7Ci0gICAgZXhlYy0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNo
YWluKCktPnB1c2goc2NvcGUpKTsKKyAgICBKU05hbWVTY29wZSogc2NvcGUgPSBKU05hbWVTY29w
ZTo6Y3JlYXRlKGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpLCBM
TElOVF9PUCgzKS5qc1ZhbHVlKCksIERvbnREZWxldGUpOworICAgIGV4ZWMtPnNldFNjb3BlKHNj
b3BlKTsKICAgICBMTElOVF9SRVRVUk4oc2NvcGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiU2Nv
cGVDaGFpbi5oIgorCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEwMDYsMTQgKzEwMDYsMTQgQEAgbWFjcm8gZ2V0U2NvcGUoZGVCcnVpamluSW5kZXhPcGVyYW5k
LCBzYwogICAgICMgTmVlZCB0byBjb25kaXRpb25hbGx5IHNraXAgb3ZlciBvbmUgc2NvcGUuCiAg
ICAgYmllcSBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0sIEVtcHR5VmFsdWVUYWcsIC5ub0FjdGl2YXRp
b24KICAgICBzY29wZUNoZWNrKHQwLCB0MSkKLSAgICBsb2FkcCBTY29wZUNoYWluTm9kZTo6bmV4
dFt0MF0sIHQwCisgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKIC5ub0FjdGl2YXRp
b246CiAgICAgc3ViaSAxLCB0MgogICAgIAogICAgIGJ0aXogdDIsIC5kb25lCiAubG9vcDoKICAg
ICBzY29wZUNoZWNrKHQwLCB0MSkKLSAgICBsb2FkcCBTY29wZUNoYWluTm9kZTo6bmV4dFt0MF0s
IHQwCisgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKICAgICBzdWJpIDEsIHQyCiAg
ICAgYnRpbnogdDIsIC5sb29wCiAKQEAgLTEwMjcsOCArMTAyNyw3IEBAIF9sbGludF9vcF9yZXNv
bHZlX2dsb2JhbF9keW5hbWljOgogICAgIGdldFNjb3BlKAogICAgICAgICAyMFtQQ10sCiAgICAg
ICAgIG1hY3JvIChzY29wZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5O
b2RlOjpvYmplY3Rbc2NvcGVdLCBzY3JhdGNoCi0gICAgICAgICAgICBicG5lcSBKU0NlbGw6Om1f
c3RydWN0dXJlW3NjcmF0Y2hdLCB0MywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTdXBlclNsb3cK
KyAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbc2NvcGVdLCB0MywgLm9wUmVz
b2x2ZUdsb2JhbER5bmFtaWNTdXBlclNsb3cKICAgICAgICAgZW5kKQogICAgIHJlc29sdmVHbG9i
YWwoNywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTbG93KQogICAgIGRpc3BhdGNoKDcpCkBAIC0x
MDUxLDcgKzEwNTAsNiBAQCBfbGxpbnRfb3BfZ2V0X3Njb3BlZF92YXI6CiAgICAgZ2V0U2NvcGUo
MTJbUENdLCBtYWNybyAoc2NvcGUsIHNjcmF0Y2gpIGVuZCkKICAgICBsb2FkaSA0W1BDXSwgdDEK
ICAgICBsb2FkaSA4W1BDXSwgdDIKLSAgICBsb2FkcCBTY29wZUNoYWluTm9kZTo6b2JqZWN0W3Qw
XSwgdDAKICAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCiAg
ICAgbG9hZGkgVGFnT2Zmc2V0W3QwLCB0MiwgOF0sIHQzCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNl
dFt0MCwgdDIsIDhdLCB0MApAQCAtMTA2OSw3ICsxMDY3LDYgQEAgX2xsaW50X29wX3B1dF9zY29w
ZWRfdmFyOgogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQzLCB0MikKICAgICBsb2Fk
aSA0W1BDXSwgdDEKICAgICB3cml0ZUJhcnJpZXIodDMsIHQyKQotICAgIGxvYWRwIFNjb3BlQ2hh
aW5Ob2RlOjpvYmplY3RbdDBdLCB0MAogICAgIGxvYWRwIEpTVmFyaWFibGVPYmplY3Q6Om1fcmVn
aXN0ZXJzW3QwXSwgdDAKICAgICBzdG9yZWkgdDMsIFRhZ09mZnNldFt0MCwgdDEsIDhdCiAgICAg
c3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KQEAgLTE2MTUsNyArMTYxMiw3IEBA
IG1hY3JvIGRvQ2FsbChzbG93UGF0aCkKICAgICBhZGRwIDI0LCBQQwogICAgIGxzaGlmdGkgMywg
dDMKICAgICBhZGRwIGNmciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIK
LSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX3Njb3BlQ2hhaW5bdDJdLCB0MAorICAgIGxvYWRwIEpT
RnVuY3Rpb246Om1fc2NvcGVbdDJdLCB0MAogICAgIHN0b3JlaSB0MiwgQ2FsbGVlICsgUGF5bG9h
ZE9mZnNldFt0M10KICAgICBzdG9yZWkgdDAsIFNjb3BlQ2hhaW4gKyBQYXlsb2FkT2Zmc2V0W3Qz
XQogICAgIGxvYWRpIDggLSAyNFtQQ10sIHQyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI3
MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg1NywxNCArODU3LDE0IEBAIG1hY3JvIGdldFNjb3Bl
KGRlQnJ1aWppbkluZGV4T3BlcmFuZCwgc2MKICAgICAjIE5lZWQgdG8gY29uZGl0aW9uYWxseSBz
a2lwIG92ZXIgb25lIHNjb3BlLgogICAgIGJ0cHogW2NmciwgdDEsIDhdLCAubm9BY3RpdmF0aW9u
CiAgICAgc2NvcGVDaGVjayh0MCwgdDEpCi0gICAgbG9hZHAgU2NvcGVDaGFpbk5vZGU6Om5leHRb
dDBdLCB0MAorICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCiAubm9BY3RpdmF0aW9u
OgogICAgIHN1YmkgMSwgdDIKICAgICAKICAgICBidGl6IHQyLCAuZG9uZQogLmxvb3A6CiAgICAg
c2NvcGVDaGVjayh0MCwgdDEpCi0gICAgbG9hZHAgU2NvcGVDaGFpbk5vZGU6Om5leHRbdDBdLCB0
MAorICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCiAgICAgc3ViaSAxLCB0MgogICAg
IGJ0aW56IHQyLCAubG9vcAogCkBAIC04NzgsOCArODc4LDcgQEAgX2xsaW50X29wX3Jlc29sdmVf
Z2xvYmFsX2R5bmFtaWM6CiAgICAgZ2V0U2NvcGUoCiAgICAgICAgIDQwW1BCLCBQQywgOF0sCiAg
ICAgICAgIG1hY3JvIChzY29wZSwgc2NyYXRjaCkKLSAgICAgICAgICAgIGxvYWRwIFNjb3BlQ2hh
aW5Ob2RlOjpvYmplY3Rbc2NvcGVdLCBzY3JhdGNoCi0gICAgICAgICAgICBicG5lcSBKU0NlbGw6
Om1fc3RydWN0dXJlW3NjcmF0Y2hdLCB0MywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTdXBlclNs
b3cKKyAgICAgICAgICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbc2NvcGVdLCB0MywgLm9w
UmVzb2x2ZUdsb2JhbER5bmFtaWNTdXBlclNsb3cKICAgICAgICAgZW5kKQogICAgIHJlc29sdmVH
bG9iYWwoNywgLm9wUmVzb2x2ZUdsb2JhbER5bmFtaWNTbG93KQogICAgIGRpc3BhdGNoKDcpCkBA
IC05MDIsNyArOTAxLDYgQEAgX2xsaW50X29wX2dldF9zY29wZWRfdmFyOgogICAgIGdldFNjb3Bl
KDI0W1BCLCBQQywgOF0sIG1hY3JvIChzY29wZSwgc2NyYXRjaCkgZW5kKQogICAgIGxvYWRpcyA4
W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQyCi0gICAgbG9hZHAg
U2NvcGVDaGFpbk5vZGU6Om9iamVjdFt0MF0sIHQwCiAgICAgbG9hZHAgSlNWYXJpYWJsZU9iamVj
dDo6bV9yZWdpc3RlcnNbdDBdLCB0MAogICAgIGxvYWRwIFt0MCwgdDIsIDhdLCB0MwogICAgIHN0
b3JlcCB0MywgW2NmciwgdDEsIDhdCkBAIC05MTgsNyArOTE2LDYgQEAgX2xsaW50X29wX3B1dF9z
Y29wZWRfdmFyOgogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQzKQogICAgIGxvYWRp
cyA4W1BCLCBQQywgOF0sIHQxCiAgICAgd3JpdGVCYXJyaWVyKHQzKQotICAgIGxvYWRwIFNjb3Bl
Q2hhaW5Ob2RlOjpvYmplY3RbdDBdLCB0MAogICAgIGxvYWRwIEpTVmFyaWFibGVPYmplY3Q6Om1f
cmVnaXN0ZXJzW3QwXSwgdDAKICAgICBzdG9yZXAgdDMsIFt0MCwgdDEsIDhdCiAgICAgZGlzcGF0
Y2goNCkKQEAgLTE0NTUsNyArMTQ1Miw3IEBAIG1hY3JvIGRvQ2FsbChzbG93UGF0aCkKICAgICBh
ZGRpIDYsIFBDCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIGxvYWRw
IEpTRnVuY3Rpb246Om1fc2NvcGVDaGFpblt0Ml0sIHQwCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6
bV9zY29wZVt0Ml0sIHQwCiAgICAgc3RvcmVwIHQyLCBDYWxsZWVbdDNdCiAgICAgc3RvcmVwIHQw
LCBTY29wZUNoYWluW3QzXQogICAgIGxvYWRpcyAxNiAtIDQ4W1BCLCBQQywgOF0sIHQyCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxMjcwMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsK
ICAgICBjbGFzcyBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU7CiAgICAgY2xhc3MgUmVnaXN0ZXJJRDsK
LSAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNz
IFNjb3BlTm9kZTsKIAogICAgIHR5cGVkZWYgdW5zaWduZWQgQ29kZUZlYXR1cmVzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9uIDEyNzAx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2Nv
cGVDaGFpbi5oIgorCiAKIHVzaW5nIHN0ZDo6bWluOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCi0jaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0CiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGU7CiAKLSAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5jb21waWxl
Rm9yQ2FsbChleGVjLCBjYWxsRGF0YS5qcy5zY29wZUNoYWluKTsKKyAgICBKU09iamVjdCogZXJy
b3IgPSBleGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBjYWxsRGF0YS5qcy5zY29wZSk7
CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAg
Y2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNz
IFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU2NvcGU7CiAKICAgICBlbnVtIENhbGxUeXBl
IHsKICAgICAgICAgQ2FsbFR5cGVOb25lLApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfSBuYXRpdmU7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluOworICAgICAgICAgICAgSlNTY29wZSogc2NvcGU7CiAgICAgICAg
IH0ganM7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKK0pTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJl
YWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKQEAgLTcyLDcgKzcyLDcgQEAgSlNW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQwogICAgIGlmICghdGhpc1ZhbHVl
IHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFsdWUgPSBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXhlYy0+aW50
ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVjLCBzY29wZUNoYWluLCB0aGlzT2JqKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJvZ3Jh
bSwgZXhlYywgdGhpc09iaik7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSAr
MjgsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNs
YXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNl
Q29kZTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRl
KiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCksIEpTVmFs
dWUqIGV4Y2VwdGlvbiA9IDApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNW
YWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgJ
KHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0
cnVjdERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwog
ICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNz
IEpTU2NvcGU7CiAKICAgICBlbnVtIENvbnN0cnVjdFR5cGUgewogICAgICAgICBDb25zdHJ1Y3RU
eXBlTm9uZSwKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0gbmF0
aXZlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bjsKKyAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlOwogICAgICAgICB9IGpzOwogICAgIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDEzICsxNTgsMTMgQEAgdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUo
KTsKIH0KIAotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7
CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAg
ICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAg
ICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSwg
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNj
b3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSks
IGJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CiAgICAgcmV0
dXJuIGVycm9yOwogfQpAQCAtMTkxLDcgKzE5MSw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBzYW1w
bGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6
Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxp
bmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgICAgIH0KICAgICAgICAg
cmVjb3JkUGFyc2UoZXZhbE5vZGUtPmZlYXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBldmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsKICAg
ICAgICAgCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAKICAgICAgICAgT3duUHRy
PENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgp
OwogICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9
PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0
cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVh
c2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwg
ISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24g
OiBGaXJzdENvbXBpbGF0aW9uKSkpOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0
cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNjb3BlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwor
ICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlLCBtX2V2YWxDb2RlQmxvY2st
PnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9u
KSkpOwogICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsK
ICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENv
ZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAg
ICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKQEAgLTMwMCwxMyArMzAwLDEzIEBAIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgKICAgICByZXR1cm4gZXhjZXB0aW9u
OwogfQogCi1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OwogICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgSlNPYmplY3QqIGVycm9y
ID0gMDsKICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9j
ay0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKCEhbV9wcm9ncmFt
Q29kZUJsb2NrKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTgsNyArMzE4LDcgQEAgYm9v
bCBQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjUwogfQogI2VuZGlmCiAKLUpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAg
CkBAIC0zNDIsMTIgKzM0MiwxMiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlCiAgICAgICAgIH0KICAgICAgICAgcmVjb3JkUGFyc2UocHJvZ3JhbU5vZGUtPmZlYXR1
cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBwcm9ncmFtTm9kZS0+
bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgpKTsKIAotICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICAKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sg
PSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOwogICAgICAgICBBU1NFUlQoKGppdFR5cGUg
PT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwogICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0
aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZp
b3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUu
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJv
Z3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkg
PyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOworICAgICAgICBP
d25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVH
ZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlLCBnbG9iYWxPYmplY3QtPnN5bWJvbFRh
YmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFs
dGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkp
OwogICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKICAg
ICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3Jh
bUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAg
ICAgICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKQEAgLTQzMSwyNCArNDMxLDI0
IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1p
emVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwp
OwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+
Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKLSAgICAgICAgZXJyb3IgPSBj
b21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0
VGllckpJVChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSksIGJ5dGVjb2RlSW5kZXgp
OworICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJ
VENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSwgYnl0
ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICByZXR1
cm4gZXJyb3I7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNT
Y29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGV4ZWMt
Pmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklU
KCkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGVycm9yID0gY29tcGls
ZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVCht
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CiAg
ICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgIHJldHVybiBlcnJvcjsK
IH0KQEAgLTQ3MCwxNCArNDcwLDE0IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmMKICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CiB9CiAKLVBh
c3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNv
ZGVCbG9ja0ZvcihTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2lu
ZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25L
aW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29wZSwg
Q29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBz
cGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGlmICghIWNv
ZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJs
b2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpKTsKICAgICAKICAgICBleGNlcHRpb24gPSAwOwot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRh
OwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xv
YmFsT2JqZWN0LmdldCgpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlLT5n
bG9iYWxEYXRhKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5n
bG9iYWxPYmplY3QoKTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNl
PEZ1bmN0aW9uQm9keU5vZGU+KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIG1f
cGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJz
ZU5vcm1hbCwgRnVuY3Rpb25Cb2R5Tm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rp
b25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCAwLCAwLCAmZXhjZXB0aW9uKTsKIAogICAgIGlm
ICghYm9keSkgewpAQCAtNDkyLDcgKzQ5Miw3IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IEZ1bmN0aW9uRXgKICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdDsKICAg
ICBBU1NFUlQoKGNvbXBpbGF0aW9uS2luZCA9PSBGaXJzdENvbXBpbGF0aW9uKSA9PSAhY29kZUJs
b2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpOwogICAgIHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBG
dW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNl
KCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgc3BlY2lhbGl6YXRpb25LaW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVD
aGFpbk5vZGUsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSwgcmVzdWx0LmdldCgpLCBjb21waWxhdGlv
bktpbmQpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlLCByZXN1bHQtPnN5bWJv
bFRhYmxlKCksIHJlc3VsdC5nZXQoKSwgY29tcGlsYXRpb25LaW5kKSkpOwogICAgIGV4Y2VwdGlv
biA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAg
IGlmIChleGNlcHRpb24pCkBAIC01MDIsNyArNTAyLDcgQEAgUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1K
U09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0
aW9uKGppdFR5cGUpKTsKICAgICAKQEAgLTUxNCw3ICs1MTQsNyBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYKICAgICBBU1NFUlQoKGppdFR5cGUgPT0g
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBK
U09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29k
ZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9j
a0ZvckNhbGwgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2Rl
Rm9yQ2FsbCwgZXhjZXB0aW9uKTsKKyAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0Nv
ZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsICEhbV9jb2RlQmxvY2tGb3JDYWxs
ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGws
IGV4Y2VwdGlvbik7CiAgICAgaWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNl
cHRpb247CiAKQEAgLTU0NSw3ICs1NDUsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJ
VENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUp
KTsKICAgICAKQEAgLTU1Nyw3ICs1NTcsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yCiAgICAgCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRv
bVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0g
cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JD
b25zdHJ1Y3QsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdD
b2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCAhIW1fY29kZUJsb2NrRm9yQ29u
c3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZv
ckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogICAgIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOwotICAgIGNs
YXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgCiAgICAgZW51bSBD
b21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24g
fTsKIApAQCAtMzY3LDE3ICszNjcsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZShF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBp
ZiAoIW1fZXZhbENvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRl
cm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKKyAg
ICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2V2
YWxDb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25P
cHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IFVJTlRfTUFYKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
LCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJ
TlRfTUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxv
Y2s7CkBAIC00MzgsMTcgKzQzOCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorICAgICAgICBK
U09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlm
ICghbV9wcm9ncmFtQ29kZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUlu
dGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwor
ICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRD
b2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1f
cHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0K
IAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAg
ICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsK
IAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRf
TUFYKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Nj
b3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFY
KTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX3Byb2dyYW1Db2RlQmxv
Y2s7CkBAIC01MTMsOSArNTEzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgICAgICBKU0Z1bmN0aW9uKiBtYWtlKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCisgICAgICAgIEpTRnVuY3Rp
b24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBzY29wZUNoYWlu
KTsKKyAgICAgICAgICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2Nv
cGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBSZXR1cm5zIGVpdGhlciBjYWxs
IG9yIGNvbnN0cnVjdCBieXRlY29kZS4gVGhpcyBjYW4gYmUgYXBwcm9wcmlhdGUKQEAgLTUzMSwx
OSArNTMxLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1
Y2VDb2RlQmxvY2tGb3IoU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0
cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiwgQ29tcGls
YXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7
CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorICAgICAgICBKU09iamVjdCogY29tcGlsZUZv
ckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29kZUJs
b2NrRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJu
YWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CisgICAg
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAh
IW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAg
IH0KIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYpOwpAQCAtNTYx
LDE3ICs1NjEsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKm1fY29k
ZUJsb2NrRm9yQ2FsbDsKICAgICAgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9y
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQorICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xv
YmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0gICAg
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2Nv
cGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CisgICAgICAgICAgICAgICAg
ZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9
CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQog
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERh
dGEmKTsKQEAgLTU4OSwyOCArNTg5LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuICptX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbk5vZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+Y2FsbGVlKCkpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhl
cml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CiAgICAgICAgICAgICBBU1NFUlQoanNDYXN0PEpT
RnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOwogCiAg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGlsZUZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZSk7CiAgICAgICAgICAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9y
Q29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybiBjb21w
aWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRG
b3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoZXhlYy0+Y2FsbGVlKCkpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgp
LT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CiAgICAgICAgICAgICBBU1NFUlQoanND
YXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGVD
aGFpbk5vZGUsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxl
T3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAg
ICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgICAgIHJldHVybiBj
b21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0
KGV4ZWMsIHNjb3BlLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogICAgICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtNjkxLDggKzY5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
Y29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBm
b3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wpOwogICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29u
c3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wpOwogCi0gICAgICAgIEpT
T2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsK
LSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBVSU5UX01BWCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFs
KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4ID0gVUlOVF9NQVgpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVj
dEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgICAgICAKICAgICAgICAgT3duUHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTEsNyArMTExLDYgQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tp
cHBpbmdFdmFsRQogICAgICAgICBwcm9ncmFtID0gYnVpbGRlci50b1VTdHJpbmcoKTsKICAgICB9
CiAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2UocHJvZ3JhbSwgc291cmNl
VVJMLCBwb3NpdGlvbik7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENv
ZGUoZnVuY3Rpb25OYW1lLCBleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCksIHNvdXJjZSwgJmV4Y2VwdGlvbik7CkBAIC0xMjAsOCArMTE5LDcgQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBleGNlcHRpb24pOwogICAgIH0KIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZShleGVjLCAwLCBnbG9iYWxPYmplY3QsICZnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLCBzY29wZUNoYWluKTsKKyAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLCBnbG9iYWxPYmplY3QpOwog
fQogCiAvLyBFQ01BIDE1LjMuMiBUaGUgRnVuY3Rpb24gQ29uc3RydWN0b3IKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNw
cAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAxMjcwMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEwIEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJOdW1l
cmljU3RyaW5ncy5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlIDxuZXc+IC8v
IGZvciBwbGFjZW1lbnQgbmV3Ci0jaW5jbHVkZSA8c3RyaW5nLmg+IC8vIGZvciBzdHJsZW4KKyNp
bmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDE0IEBAIEFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBY3RpdmF0aW9uKTsKIGNvbnN0IENsYXNzSW5mbyBKU0Fj
dGl2YXRpb246OnNfaW5mbyA9IHsgIkpTQWN0aXZhdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNBY3RpdmF0aW9uKSB9OwogCiBKU0FjdGl2YXRpb246OkpT
QWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4ZWN1dGFibGUpCi0gICAgOiBCYXNlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpLCBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpKQorICAgIDogQmFzZSgKKyAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksCisgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFjdGl2YXRpb25TdHJ1Y3R1cmUu
Z2V0KCksCisgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCksCisgICAgICAgIGNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLAorICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbFRoaXNW
YWx1ZSgpLAorICAgICAgICBjYWxsRnJhbWUtPnNjb3BlKCkKKyAgICApCiAgICAgLCBtX3JlZ2lz
dGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIDApCiAgICAgLCBtX251bUNh
cHR1cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlv
bkV4ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHJldmlzaW9uIDEyNzAxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBACiAjaW5jbHVkZSAiSlNEYXRlTWF0aC5oIgogCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJTY29wZUNoYWluLmgiCisjaW5jbHVkZSAiSlNTY29w
ZS5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXku
aCIKLSNpbmNsdWRlICJTY29wZUNoYWluTWFyay5oIgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwog
dXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC04MSwxNCArODAsMTQgQEAgSlNGdW5jdGlvbiog
SlNGdW5jdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZQogSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIDogQmFzZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKICAgICAs
IG1fZXhlY3V0YWJsZSgpCi0gICAgLCBtX3Njb3BlQ2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSkKKyAgICAsIG1fc2NvcGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWxPYmplY3QpCiB7CiB9CiAKLUpTRnVuY3Rpb246
OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKLSAgICA6IEJhc2UoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVy
ZSgpKQorSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgOiBCYXNlKGV4ZWMtPmds
b2JhbERhdGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpKQog
ICAgICwgbV9leGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZXhlY3V0YWJsZSkK
LSAgICAsIG1fc2NvcGVDaGFpbihleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHNjb3BlQ2hhaW5O
b2RlKQorICAgICwgbV9zY29wZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHNjb3BlKQogewog
fQogCkBAIC0xMDEsMTggKzEwMCwxOCBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
IHwgRG9udEVudW0pOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbk5vZGUpCit2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29w
ZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIAogICAgIC8vIFN3aXRjaGluZyB0aGUgc3RydWN0dXJlIGhlcmUgaXMg
b25seSBzYWZlIGlmIHdlIGN1cnJlbnRseSBoYXZlIHRoZSBmdW5jdGlvbiBzdHJ1Y3R1cmUhCi0g
ICAgQVNTRVJUKHN0cnVjdHVyZSgpID09IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPmZ1
bmN0aW9uU3RydWN0dXJlKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKSA9PSBzY29wZS0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgIHNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoCiAgICAgICAgIGdsb2JhbERhdGEsCi0gICAgICAg
IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPm5hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7
Ci0gICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxP
YmplY3QtPmZ1bmN0aW9uTmFtZU9mZnNldCgpLCBleGVjdXRhYmxlLT5uYW1lVmFsdWUoKSk7Cisg
ICAgICAgIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+bmFtZWRGdW5jdGlvblN0cnVjdHVyZSgpKTsK
KyAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvbk5hbWVPZmZzZXQoKSwgZXhlY3V0YWJsZS0+bmFtZVZhbHVlKCkpOwogfQogCiBTdHJ1
Y3R1cmUqIEpTRnVuY3Rpb246OmNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTY5LDcgKzE2OCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGMK
ICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbigpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGVDaGFpbik7
CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2V4ZWN1dGFibGUpOwogfQogCkBAIC0xODEsNyArMTgwLDcg
QEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKgogICAgICAgICByZXR1
cm4gQ2FsbFR5cGVIb3N0OwogICAgIH0KICAgICBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFi
bGUgPSB0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKTsKLSAgICBjYWxsRGF0YS5qcy5zY29wZUNo
YWluID0gdGhpc09iamVjdC0+c2NvcGUoKTsKKyAgICBjYWxsRGF0YS5qcy5zY29wZSA9IHRoaXNP
YmplY3QtPnNjb3BlKCk7CiAgICAgcmV0dXJuIENhbGxUeXBlSlM7CiB9CiAKQEAgLTQ1MCw3ICs0
NDksNyBAQCBDb25zdHJ1Y3RUeXBlIEpTRnVuY3Rpb246OmdldENvbnN0cnVjdERhCiAgICAgICAg
IHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKICAgICB9CiAgICAgY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUgPSB0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKTsKLSAgICBjb25z
dHJ1Y3REYXRhLmpzLnNjb3BlQ2hhaW4gPSB0aGlzT2JqZWN0LT5zY29wZSgpOworICAgIGNvbnN0
cnVjdERhdGEuanMuc2NvcGUgPSB0aGlzT2JqZWN0LT5zY29wZSgpOwogICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSlM7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNkZWZpbmUgSlNGdW5jdGlvbl9oCiAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCi0j
aW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1Njb3BlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC01NywxMSArNTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFVTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uLCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3Ry
dWN0b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CiAKLSAgICAgICAgc3RhdGlj
IEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCisgICAgICAgIHN0YXRpYyBK
U0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpl
eGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWN1dGFibGUsIHNjb3BlQ2hhaW4pOwor
ICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBleGVjdXRh
YmxlLCBzY29wZSk7CiAgICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5n
bG9iYWxPYmplY3QoKSk7Ci0gICAgICAgICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhl
YywgZXhlY3V0YWJsZSwgc2NvcGVDaGFpbik7CisgICAgICAgICAgICBmdW5jdGlvbi0+ZmluaXNo
Q3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjksMjQgKzY5LDI0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBVU3RyaW5nIGRpc3BsYXlO
YW1lKEV4ZWNTdGF0ZSopOwogICAgICAgICBjb25zdCBVU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5
TmFtZShFeGVjU3RhdGUqKTsKIAotICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGUoKQorICAg
ICAgICBKU1Njb3BlKiBzY29wZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghaXNI
b3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zY29wZUNoYWlu
LmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmb3IgaG9zdCBmdW5jdGlucywgaW4g
d2hpY2ggY2FzZSBpdAogICAgICAgICAvLyB3aWxsIHJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUu
IFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IKICAgICAgICAgLy8gb3B0aW1pemVkIHBhdGhz
IGluIHdoaWNoIHRoZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgbWF0dGVyIGZvcgogICAgICAgICAv
LyBob3N0IGZ1bmN0aW9ucywgYW5kIGNoZWNraW5nIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGEg
aG9zdAogICAgICAgICAvLyBmdW5jdGlvbiBpcyBkZWVtZWQgdG9vIGV4cGVuc2l2ZS4KLSAgICAg
ICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlVW5jaGVja2VkKCkKKyAgICAgICAgSlNTY29wZSogc2Nv
cGVVbmNoZWNrZWQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zY29wZUNoYWlu
LmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7CiAgICAgICAgIH0KLSAg
ICAgICAgdm9pZCBzZXRTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluKQorICAgICAgICB2b2lkIHNldFNjb3BlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCgh
aXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7Ci0gICAgICAgICAgICBtX3Njb3BlQ2hhaW4uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHNjb3BlQ2hhaW4pOworICAgICAgICAgICAgbV9zY29wZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc2NvcGUpOwogICAgICAgICB9CiAKICAgICAgICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0K
QEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgaW5s
aW5lIHNpemVfdCBvZmZzZXRPZlNjb3BlQ2hhaW4oKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbik7CisgICAgICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIGlubGluZSBzaXplX3Qgb2Zmc2V0T2ZFeGVjdXRhYmxlKCkK
QEAgLTEzNywxMCArMTM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBzdGF0
aWMgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKik7Ci0gICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgRnVuY3Rpb25F
eGVjdXRhYmxlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNGdW5jdGlvbihFeGVjU3Rh
dGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAgICAgIAogICAgICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVu
Z3RoLCBjb25zdCBVU3RyaW5nJiBuYW1lKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpT
U2NvcGUqKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRl
Kik7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7
CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbV9zY29wZUNoYWluOworICAgICAg
ICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9jYWNoZWRJbmhlcml0b3JJRDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyNzAx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0
YShHbG9iYWxEYXRhVHlwCiAgICAgcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywgR2V0dGVyU2V0
dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgYXBpV3JhcHBl
clN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc2NvcGVDaGFpbk5vZGVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OworICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Njb3BlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEV4ZWN1dGFibGVCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBldmFsRXhlY3V0
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsy
MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVy
dHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRl
clNldHRlclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0
cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc2NvcGVDaGFpbk5vZGVTdHJ1Y3R1
cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IG5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3MDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw2IEBACiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5
LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBl
LmgiCi0jaW5jbHVkZSAiU2NvcGVDaGFpbk1hcmsuaCIKICNpbmNsdWRlICJTdHJpbmdDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
LmgiCkBAIC03OSw3ICs3OCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0lu
Zm8gSlNHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgIkdsb2JhbE9iamVjdCIsICZKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0OjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNHbG9iYWxPYmplY3QpIH07Citjb25zdCBDbGFzc0luZm8g
SlNHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgIkdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8s
IDAsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNH
bG9iYWxPYmplY3QpIH07CiAKIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xvYmFs
T2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0geyAmYWxsb3dzQWNjZXNzRnJvbSwg
JnN1cHBvcnRzUHJvZmlsaW5nLCAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywgJnNob3VsZEludGVy
cnVwdFNjcmlwdCwgJmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQgfTsKIApAQCAtMTA3LDgg
KzEwNiw3IEBAIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbFRpY2tDb3VudFRocmVzaG8KIHN0YXRp
YyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAxMDAwOwogCiBK
U0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQorICAgIDogQmFz
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHRoaXMsIHRoaXMsIDApCiAgICAgLCBtX21hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KEluaXRp
YWxpemVkV2F0Y2hpbmcpKSkKICAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtS
YW5kb21TZWVkKCkgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCgpIDogc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSArIDEuMCkpKQogICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQpAQCAtMTMzLDEw
ICsxMzEsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsCiB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpCiB7CiAgICAgQVNTRVJU
KGdsb2JhbERhdGEoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0g
ICAgCi0gICAgbV9nbG9iYWxTY29wZUNoYWluLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIFNjb3Bl
Q2hhaW5Ob2RlOjpjcmVhdGUoMCwgdGhpcywgJmdsb2JhbERhdGEoKSwgdGhpcywgdGhpc1ZhbHVl
KSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAsIG1fZ2xv
YmFsU2NvcGVDaGFpbi5nZXQoKSwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAwLCAwKTsKKyAgICBz
ZXRHbG9iYWxUaGlzKGdsb2JhbERhdGEoKSwgdGhpc1ZhbHVlKTsKKyAgICBKU0dsb2JhbE9iamVj
dDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAsIHRoaXMsIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwg
MCwgMCk7CiAKICAgICBtX2RlYnVnZ2VyID0gMDsKIApAQCAtMTUwLDcgKzE0Nyw3IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEUKIAogICAgIGlmIChzeW1ib2xUYWJs
ZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBC
YXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9
CiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTYzLDcgKzE2MCw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlMKIAogICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUg
PSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAg
ICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CiAgICAgaWYgKCF2YWx1ZUJlZm9yZSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIgPSB0
aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBpZiAodmFsdWVBZnRlcikKQEAgLTM0NSw5ICszNDIsOCBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKICAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFn
cyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0
U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2dsb2JhbFNjb3BlQ2hhaW4pOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21ldGhvZENhbGxEdW1teSk7CiAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9yZWdFeHBDb25zdHJ1Y3Rvcik7CkBAIC00MTgsNyArNDE0LDcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKLSAgICBpZiAo
Z2V0U3RhdGljRnVuY3Rpb25TbG90PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4
ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCisgICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNlPihleGVjLCBFeGVj
U3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQo
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KQEAgLTQyNiw3ICs0MjIsNyBAQCBi
b29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCiBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihvYmplY3QpOwotICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0
b3I8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmpl
Y3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKKyAg
ICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6
Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMjcw
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IEJh
c2U7CiAgICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8T3BhcXVlSlNXZWFrT2JqZWN0TWFw
PiA+IFdlYWtNYXBTZXQ7CiAKICAgICAgICAgc3RydWN0IEpTR2xvYmFsT2JqZWN0UmFyZURhdGEg
ewpAQCAtOTMsNyArOTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlciBt
X2dsb2JhbENhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemVdOwogCi0g
ICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbV9nbG9iYWxTY29wZUNoYWluOwog
ICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fbWV0aG9kQ2FsbER1bW15OwogCiAgICAg
ICAgIFdyaXRlQmFycmllcjxSZWdFeHBDb25zdHJ1Y3Rvcj4gbV9yZWdFeHBDb25zdHJ1Y3RvcjsK
QEAgLTE2NCw4ICsxNjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBC
YXNlOwotCiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0dsb2JhbE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNHbG9iYWxPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKQEAgLTI5MCw4ICsyODgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNQcm9maWxpbmcoY29uc3QgSlNHbG9iYWxPYmpl
Y3QqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBnbG9iYWxTY29wZUNoYWluKCkgeyByZXR1cm4gbV9nbG9iYWxT
Y29wZUNoYWluLmdldCgpOyB9Ci0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRXhlY1N0YXRl
KiBnbG9iYWxFeGVjKCk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgc2hvdWxkSW50ZXJydXB0U2Ny
aXB0KGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMzI3LDcgKzMy
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCB3ZWFrUmFuZG9tSW50ZWdl
cigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXRVaW50MzIoKTsgfQogICAgIHByb3RlY3RlZDoK
IAotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIHN0
cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewogICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWUgdiwgdW5zaWduZWQgYSkKQEAgLTM2Niw3ICsz
NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6
aGFzT3duUHJvcGVydHlGb3JXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgaWYg
KEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgYm9vbCBzbG90SXNXcml0ZWFibGU7CiAgICAgICAgIHJldHVybiBzeW1i
b2xUYWJsZUdldCh0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRlYWJsZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxOCwxMSArNTE4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0UKICAgICB9CiAKICAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRh
YmxlOjpjcmVhdGUoZXhlYywgbWFrZVNvdXJjZShzKSwgZmFsc2UpOwotICAgIEpTT2JqZWN0KiBl
cnJvciA9IGV2YWwtPmNvbXBpbGUoZXhlYywganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFw
cGVkT2JqZWN0KS0+Z2xvYmFsU2NvcGVDaGFpbigpKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBl
dmFsLT5jb21waWxlKGV4ZWMsIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVj
dCkpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBl
cnJvcik7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmludGVycHJldGVyKCkt
PmV4ZWN1dGUoZXZhbCwgZXhlYywgdGhpc09iamVjdCwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
dW53cmFwcGVkT2JqZWN0KS0+Z2xvYmFsU2NvcGVDaGFpbigpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWwsIGV4ZWMsIHRoaXNP
YmplY3QsIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRl
KiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCShy
ZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKwogCiAjaWYgVVNFKFBUSFJFQURTKQogI2luY2x1ZGUg
PHB0aHJlYWQuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1l
U2NvcGUuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsMTQgQEAgcHJvdGVj
dGVkOgogCiBwcml2YXRlOgogICAgIEpTTmFtZVNjb3BlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAg
ICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm5hbWVTY29w
ZVN0cnVjdHVyZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZtX3JlZ2lzdGVy
U3RvcmUgKyAxKSkKKyAgICAgICAgOiBCYXNlKAorICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0
YSgpLAorICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLm5hbWVTY29wZVN0cnVjdHVyZS5n
ZXQoKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3Rl
clN0b3JlICsgMSksCisgICAgICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksCisg
ICAgICAgICAgICBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSwKKyAgICAgICAgICAgIGV4ZWMtPnNj
b3BlKCkKKyAgICAgICAgKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgogI2lu
Y2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKwogI2lu
Y2x1ZGUgIlN0b3JhZ2VCYXJyaWVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDE5IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU2NvcGUpOwogCit2b2lk
IEpTU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBKU1Njb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2NvcGUqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworICAg
IENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fZ2xvYmFsVGhpcyk7Cit9CisKIGJvb2wgSlNTY29wZTo6aXNEeW5hbWljU2NvcGUo
Ym9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdAogewogICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CkBAIC01MiwzNCArNjUsNDggQEAgYm9vbCBKU1Nj
b3BlOjppc0R5bmFtaWNTY29wZShib29sJiByZXF1aQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
SlNPYmplY3QqIEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4pCitKU09iamVjdCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlKiBzY29wZSkKIHsK
LSAgICBKU09iamVjdCogb2JqZWN0ID0gc2NvcGVDaGFpbi0+b2JqZWN0LmdldCgpOworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBzY29wZTsKICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gV2l0aFNjb3BlVHlwZSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxK
U1dpdGhTY29wZSo+KG9iamVjdCktPm9iamVjdCgpOwogCiAgICAgcmV0dXJuIG9iamVjdDsKIH0K
IAoraW50IEpTU2NvcGU6OmxvY2FsRGVwdGgoKQoreworICAgIGludCBzY29wZURlcHRoID0gMDsK
KyAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7CisgICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOworICAgIHdoaWxlICghaXRlci0+aW5oZXJp
dHMoJkpTQWN0aXZhdGlvbjo6c19pbmZvKSkgeworICAgICAgICArK2l0ZXI7CisgICAgICAgIGlm
IChpdGVyID09IGVuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICArK3Njb3BlRGVwdGg7
CisgICAgfQorICAgIHJldHVybiBzY29wZURlcHRoOworfQorCiBKU1ZhbHVlIEpTU2NvcGU6OnJl
c29sdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIp
CiB7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKTsKLSAgICBBU1NFUlQoc2NvcGVDaGFpbik7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxs
RnJhbWUtPnNjb3BlKCk7CisgICAgQVNTRVJUKHNjb3BlKTsKIAogICAgIGRvIHsKLSAgICAgICAg
SlNPYmplY3QqIHNjb3BlID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZUNoYWluKTsKLSAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc2NvcGUpOwotICAgICAgICBpZiAoc2NvcGUtPmdldFBy
b3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZSk7CisgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgICAgIGlmIChvYmplY3QtPmdldFByb3BlcnR5U2xv
dChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudGlmaWVyKTsKLSAgICB9IHdoaWxlICgoc2NvcGVDaGFp
biA9IHNjb3BlQ2hhaW4tPm5leHQuZ2V0KCkpKTsKKyAgICB9IHdoaWxlICgoc2NvcGUgPSBzY29w
ZS0+bmV4dCgpKSk7CiAKICAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudGlmaWVyKSk7CiB9CiAKIEpTVmFs
dWUgSlNTY29wZTo6cmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIGludCBza2lwKQogewotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgQVNTRVJUKHNjb3BlQ2hhaW4p
OworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgIEFTU0VSVChz
Y29wZSk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAKQEAgLTg3LDE5ICsxMTQsMTkgQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlU2tpcChD
YWxsRnJhbWUqIAogICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKICAgICBpZiAo
Y2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAg
ICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+bmV4dC5nZXQoKTsKKyAgICAgICAgICAgIHNj
b3BlID0gc2NvcGUtPm5leHQoKTsKICAgICB9CiAgICAgd2hpbGUgKHNraXAtLSkgewotICAgICAg
ICBzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+bmV4dC5nZXQoKTsKLSAgICAgICAgQVNTRVJUKHNj
b3BlQ2hhaW4pOworICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAgIEFTU0VS
VChzY29wZSk7CiAgICAgfQogCiAgICAgZG8gewotICAgICAgICBKU09iamVjdCogc2NvcGUgPSBK
U1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlQ2hhaW4pOwotICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChzY29wZSk7Ci0gICAgICAgIGlmIChzY29wZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFt
ZSwgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1Njb3Bl
OjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
KTsKKyAgICAgICAgaWYgKG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnRp
Zmllciwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUs
IGlkZW50aWZpZXIpOwotICAgIH0gd2hpbGUgKChzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+bmV4
dC5nZXQoKSkpOworICAgIH0gd2hpbGUgKChzY29wZSA9IHNjb3BlLT5uZXh0KCkpKTsKIAogICAg
IHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJv
cihjYWxsRnJhbWUsIGlkZW50aWZpZXIpKTsKIH0KQEAgLTEzOCw4ICsxNjUsOCBAQCBKU1ZhbHVl
IEpTU2NvcGU6OnJlc29sdmVHbG9iYWxEeW5hbWljKAogICAgIFByb3BlcnR5T2Zmc2V0KiBjYWNo
ZWRPZmZzZXQKICkKIHsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChzY29wZUNoYWluKTsKKyAgICBKU1Njb3BlKiBz
Y29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKKyAgICBBU1NFUlQoc2NvcGUpOwogCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCkBAIC0xNDcsMTUg
KzE3NCwxNSBAQCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVHbG9iYWxEeW5hbWljKAogICAgIEFT
U0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBz
a2lwLS0pIHsKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFj
dGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICBzY29wZUNoYWluID0g
c2NvcGVDaGFpbi0+bmV4dC5nZXQoKTsKKyAgICAgICAgICAgIHNjb3BlID0gc2NvcGUtPm5leHQo
KTsKICAgICB9CiAgICAgd2hpbGUgKHNraXAtLSkgewotICAgICAgICBKU09iamVjdCogc2NvcGUg
PSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlQ2hhaW4pOwotICAgICAgICBpZiAoIXNjb3Bl
LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1Nj
b3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmhhc0N1c3Rv
bVByb3BlcnRpZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KHNjb3BlKTsKLSAgICAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGNh
bGxGcmFtZSwgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9i
amVjdCk7CisgICAgICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBp
ZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwpAQCAtMTY5
LDE4ICsxOTYsMTggQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsRHluYW1pYygKIAog
SlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgYm9vbCBpc1N0cmljdCkKIHsKLSAgICBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChz
Y29wZUNoYWluKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKKyAg
ICBBU1NFUlQoc2NvcGUpOwogCiAgICAgZG8gewotICAgICAgICBKU09iamVjdCogc2NvcGUgPSBK
U1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlQ2hhaW4pOworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZSk7CiAKLSAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Qoc2NvcGUpOwotICAgICAgICBpZiAoIXNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoY2Fs
bEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlk
ZW50aWZpZXIsIHNsb3QpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWUoc2NvcGUpOwotICAgIH0gd2hpbGUgKChzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+
bmV4dC5nZXQoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZShvYmplY3QpOworICAgIH0gd2hp
bGUgKChzY29wZSA9IHNjb3BlLT5uZXh0KCkpKTsKIAogICAgIGlmICghaXNTdHJpY3QpCiAgICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE5MCw0NiAr
MjE3LDQ2IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiAKIAogSlNW
YWx1ZSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVyKiBiYXNlKQogewotICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgQVNTRVJU
KHNjb3BlQ2hhaW4pOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwor
ICAgIEFTU0VSVChzY29wZSk7CiAKICAgICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBzY29wZSA9
IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGVDaGFpbik7CisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKIAotICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChzY29wZSk7Ci0gICAgICAgIGlmICghc2NvcGUtPmdldFByb3BlcnR5U2xvdChj
YWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QpOworICAgICAgICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwg
aWRlbnRpZmllciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwogICAgICAg
ICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKIAotICAgICAgICAqYmFzZSA9IEpTVmFsdWUoc2NvcGUpOworICAgICAg
ICAqYmFzZSA9IEpTVmFsdWUob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0g
d2hpbGUgKChzY29wZUNoYWluID0gc2NvcGVDaGFpbi0+bmV4dC5nZXQoKSkpOworICAgIH0gd2hp
bGUgKChzY29wZSA9IHNjb3BlLT5uZXh0KCkpKTsKIAogICAgIHJldHVybiB0aHJvd0Vycm9yKGNh
bGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50aWZp
ZXIpKTsKIH0KIAogSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVyKiBiYXNlKQog
ewotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCk7Ci0gICAgQVNTRVJUKHNjb3BlQ2hhaW4pOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT5zY29wZSgpOworICAgIEFTU0VSVChzY29wZSk7CiAKICAgICBkbyB7Ci0gICAgICAgIEpT
T2JqZWN0KiBzY29wZSA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGVDaGFpbik7CisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKIAot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSk7Ci0gICAgICAgIGlmICghc2NvcGUtPmdl
dFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChvYmplY3QpOworICAgICAgICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVydHlT
bG90KGNhbGxGcmFtZSwgaWRlbnRpZmllciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50
aWZpZXIpOwogICAgICAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAotICAgICAgICAqYmFzZSA9IHNjb3BlLT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5l
ZCgpIDogSlNWYWx1ZShzY29wZSk7CisgICAgICAgICpiYXNlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5lZCgpIDogSlNW
YWx1ZShvYmplY3QpOwogICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfSB3aGlsZSAoKHNjb3Bl
Q2hhaW4gPSBzY29wZUNoYWluLT5uZXh0LmdldCgpKSk7CisgICAgfSB3aGlsZSAoKHNjb3BlID0g
c2NvcGUtPm5leHQoKSkpOwogCiAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBjcmVh
dGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnRpZmllcikpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMTI3MDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFNjb3Bl
Q2hhaW5JdGVyYXRvcjsKKwogY2xhc3MgSlNTY29wZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU09iamVjdCogb2JqZWN0QXRTY29wZShTY29wZUNoYWlu
Tm9kZSopOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZk5leHQoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU09iamVjdCogb2JqZWN0QXRTY29wZShKU1Njb3BlKik7CiAKICAgICBzdGF0aWMgSlNWYWx1
ZSByZXNvbHZlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICBzdGF0aWMgSlNW
YWx1ZSByZXNvbHZlU2tpcChDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgaW50IHNraXAp
OwpAQCAtNTYsMjAgKzYxLDQzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZl
V2l0aEJhc2UoQ2FsbEZyYW1lKiwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVyKiBiYXNlKTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlV2l0aFRoaXMoQ2FsbEZyYW1lKiwgY29uc3QgSWRl
bnRpZmllciYsIFJlZ2lzdGVyKiBiYXNlKTsKIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9v
bCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAorICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBiZWdpbigpOworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQoKTsKKyAgICBKU1Njb3BlKiBu
ZXh0KCk7CisgICAgaW50IGxvY2FsRGVwdGgoKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKTsKKyAgICBKU09iamVj
dCogZ2xvYmFsVGhpcygpOworICAgIHZvaWQgc2V0R2xvYmFsVGhpcyhKU0dsb2JhbERhdGEmLCBK
U09iamVjdCopOworCiBwcm90ZWN0ZWQ6Ci0gICAgSlNTY29wZShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKKyAgICBKU1Njb3BlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqIGdsb2JhbFRoaXMsIEpTU2NvcGUqIG5leHQpOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBKU0dsb2JhbERhdGEqIG1f
Z2xvYmFsRGF0YTsKKyAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9uZXh0OworICAgIFdyaXRl
QmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBtX2dsb2JhbFRoaXM7CiB9OwogCi1pbmxpbmUgSlNTY29wZTo6SlNTY29wZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpT
U2NvcGU6OkpTU2NvcGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMs
IEpTU2NvcGUqIG5leHQpCiAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAs
IG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKKyAgICAsIG1fbmV4dChnbG9iYWxEYXRhLCB0aGlz
LCBuZXh0LCBXcml0ZUJhcnJpZXI8SlNTY29wZT46Ok1heUJlTnVsbCkKKyAgICAsIG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1fZ2xvYmFsVGhp
cyhnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxUaGlzKQogewogfQogCiBjbGFzcyBTY29wZUNoYWlu
SXRlcmF0b3IgewogcHVibGljOgotICAgIFNjb3BlQ2hhaW5JdGVyYXRvcihTY29wZUNoYWluTm9k
ZSogbm9kZSkKKyAgICBTY29wZUNoYWluSXRlcmF0b3IoSlNTY29wZSogbm9kZSkKICAgICAgICAg
OiBtX25vZGUobm9kZSkKICAgICB7CiAgICAgfQpAQCAtNzcsNyArMTA1LDcgQEAgcHVibGljOgog
ICAgIEpTT2JqZWN0KiBnZXQoKSBjb25zdCB7IHJldHVybiBKU1Njb3BlOjpvYmplY3RBdFNjb3Bl
KG1fbm9kZSk7IH0KICAgICBKU09iamVjdCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIEpT
U2NvcGU6Om9iamVjdEF0U2NvcGUobV9ub2RlKTsgfQogCi0gICAgU2NvcGVDaGFpbkl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgeyBtX25vZGUgPSBtX25vZGUtPm5leHQuZ2V0KCk7IHJldHVybiAqdGhp
czsgfQorICAgIFNjb3BlQ2hhaW5JdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgbV9ub2RlID0gbV9u
b2RlLT5uZXh0KCk7IHJldHVybiAqdGhpczsgfQogCiAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRp
b25hbGx5IG9taXR0ZWQKIApAQCAtODUsMTkgKzExMyw3NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFNjb3BlQ2hhaW5JdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZSAhPSBvdGhlci5tX25vZGU7IH0KIAogcHJpdmF0ZToKLSAgICBTY29wZUNoYWluTm9k
ZSogbV9ub2RlOworICAgIEpTU2NvcGUqIG1fbm9kZTsKIH07CiAKLWlubGluZSBTY29wZUNoYWlu
SXRlcmF0b3IgU2NvcGVDaGFpbk5vZGU6OmJlZ2luKCkKK2lubGluZSBTY29wZUNoYWluSXRlcmF0
b3IgSlNTY29wZTo6YmVnaW4oKQogewogICAgIHJldHVybiBTY29wZUNoYWluSXRlcmF0b3IodGhp
cyk7IAogfQogCi1pbmxpbmUgU2NvcGVDaGFpbkl0ZXJhdG9yIFNjb3BlQ2hhaW5Ob2RlOjplbmQo
KQoraW5saW5lIFNjb3BlQ2hhaW5JdGVyYXRvciBKU1Njb3BlOjplbmQoKQogeyAKICAgICByZXR1
cm4gU2NvcGVDaGFpbkl0ZXJhdG9yKDApOyAKIH0KIAoraW5saW5lIEpTU2NvcGUqIEpTU2NvcGU6
Om5leHQoKQoreyAKKyAgICByZXR1cm4gbV9uZXh0LmdldCgpOworfQorCitpbmxpbmUgSlNHbG9i
YWxPYmplY3QqIEpTU2NvcGU6Omdsb2JhbE9iamVjdCgpCit7IAorICAgIHJldHVybiBtX2dsb2Jh
bE9iamVjdC5nZXQoKTsKK30KKworaW5saW5lIEpTR2xvYmFsRGF0YSogSlNTY29wZTo6Z2xvYmFs
RGF0YSgpCit7IAorICAgIHJldHVybiBtX2dsb2JhbERhdGE7Cit9CisKK2lubGluZSBKU09iamVj
dCogSlNTY29wZTo6Z2xvYmFsVGhpcygpCit7IAorICAgIHJldHVybiBtX2dsb2JhbFRoaXMuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkIEpTU2NvcGU6OnNldEdsb2JhbFRoaXMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpcykKK3sgCisgICAgbV9nbG9iYWxUaGlz
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxUaGlzKTsKK30KKworaW5saW5lIFJlZ2lzdGVy
JiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTU2NvcGUqIHNjb3BlKQoreworICAgICp0aGlzID0gSlNW
YWx1ZShzY29wZSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSlNTY29wZSogUmVn
aXN0ZXI6OnNjb3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0PEpTU2NvcGUqPihqc1Zh
bHVlKCkpOworfQorCitpbmxpbmUgSlNHbG9iYWxEYXRhJiBFeGVjU3RhdGU6Omdsb2JhbERhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVChzY29wZSgpLT5nbG9iYWxEYXRhKCkpOworICAgIHJldHVy
biAqc2NvcGUoKS0+Z2xvYmFsRGF0YSgpOworfQorCitpbmxpbmUgSlNHbG9iYWxPYmplY3QqIEV4
ZWNTdGF0ZTo6bGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjb3Bl
KCktPmdsb2JhbE9iamVjdCgpOworfQorCitpbmxpbmUgSlNPYmplY3QqIEV4ZWNTdGF0ZTo6Z2xv
YmFsVGhpc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2NvcGUoKS0+Z2xvYmFsVGhpcygp
OworfQorCitpbmxpbmUgc2l6ZV90IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpCit7CisgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Njb3BlLCBtX25leHQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEpTU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNTeW1ib2xUYWJsZU9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CiAKLSAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNTeW1ib2xUYWJsZU9i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcywgSlNTY29wZSogc2Nv
cGUpCisgICAgICAgIDogSlNTeW1ib2xUYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcywgc2NvcGUpCiAgICAgewogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAko
cmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdKb2luZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAi
SlNTdHJpbmdKb2luZXIuaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJTY29wZUNo
YWluLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJ
KHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCi0gICAgSlNTeW1i
b2xUYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgIEpTU3ltYm9s
VGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMsIEpT
U2NvcGUqIHNjb3BlKQorICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QsIGdsb2JhbFRoaXMsIHNjb3BlKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDE3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3QsIG1fcmVnaXN0ZXJzKTsgfQogCiAgICAgcHJv
dGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKLSAgICAg
ICAgSlNWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQotICAgICAgICAgICAgOiBKU1N5bWJvbFRh
YmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgSlNWYXJpYWJsZU9iamVj
dCgKKyAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLAorICAgICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycywKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICBKU09i
amVjdCogZ2xvYmFsVGhpcywKKyAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlCisgICAgICAgICkK
KyAgICAgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwg
Z2xvYmFsVGhpcywgc2NvcGUpCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KHJlZ2lzdGVycykpCiAgICAgICAgIHsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB3aXRoU2NvcGU7CiAgICAgfQogCisgICAgc3RhdGljIEpTV2l0aFNj
b3BlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBKU1Njb3BlKiBu
ZXh0KQorICAgIHsKKyAgICAgICAgSlNXaXRoU2NvcGUqIHdpdGhTY29wZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2l0aFNjb3BlPigqZXhlYy0+aGVhcCgpKSkgSlNXaXRoU2NvcGUo
ZXhlYywgb2JqZWN0LCBuZXh0KTsKKyAgICAgICAgd2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gd2l0aFNjb3BlOworICAgIH0KKwog
ICAgIEpTT2JqZWN0KiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNTAs
MTQgKzU3LDMyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29wZVR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAog
cHJpdmF0ZToKICAgICBKU1dpdGhTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCi0gICAgICAgIDogQmFzZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEo
KS53aXRoU2NvcGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIDogQmFzZSgKKyAgICAgICAgICAg
IGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS53aXRo
U2NvcGVTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksCisgICAgICAgICAgICBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSwKKyAgICAgICAgICAg
IGV4ZWMtPnNjb3BlKCkKKyAgICAgICAgKQorICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgb2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBKU1dpdGhTY29wZShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTU2NvcGUqIG5leHQpCisgICAgICAg
IDogQmFzZSgKKyAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAgIGV4
ZWMtPmdsb2JhbERhdGEoKS53aXRoU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksCisgICAgICAgICAgICBleGVjLT5nbG9iYWxUaGlz
VmFsdWUoKSwKKyAgICAgICAgICAgIG5leHQKKyAgICAgICAgKQogICAgICAgICAsIG1fb2JqZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgb2JqZWN0KQogICAgIHsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXku
Y3BwCShyZXZpc2lvbiAxMjcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNp
bmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNp
bmNsdWRlICJTY29wZUNoYWluLmgiCisKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDaGFpbi5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZUNoYWluLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODUgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjb3BlQ2hhaW4u
aCIKLQotI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5o
IgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1BU1NFUlRfSEFTX1RS
SVZJQUxfREVTVFJVQ1RPUihTY29wZUNoYWluTm9kZSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0KLXZv
aWQgU2NvcGVDaGFpbk5vZGU6OnByaW50KCkKLXsKLSAgICBTY29wZUNoYWluSXRlcmF0b3Igc2Nv
cGVFbmQgPSBlbmQoKTsKLSAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBzY29wZUl0ZXIgPSBi
ZWdpbigpOyBzY29wZUl0ZXIgIT0gc2NvcGVFbmQ7ICsrc2NvcGVJdGVyKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBvID0gc2NvcGVJdGVyLmdldCgpOwotICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKLSAgICAgICAgby0+bWV0
aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvLCBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7Ci0gICAgICAgIFBy
b3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBwcm9wRW5kID0gcHJvcGVydHlOYW1lcy5l
bmQoKTsKLQotICAgICAgICBkYXRhTG9nKCItLS0tLSBbc2NvcGUgJXBdIC0tLS0tXG4iLCBvKTsK
LSAgICAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgcHJvcEl0ZXIg
PSBwcm9wZXJ0eU5hbWVzLmJlZ2luKCk7IHByb3BJdGVyICE9IHByb3BFbmQ7IHByb3BJdGVyKysp
IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgbmFtZSA9ICpwcm9wSXRlcjsKLSAgICAgICAgICAg
IGRhdGFMb2coIiVzLCAiLCBuYW1lLnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
fQotICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgIH0KLX0KLQotI2VuZGlmCi0KLWNvbnN0IENs
YXNzSW5mbyBTY29wZUNoYWluTm9kZTo6c19pbmZvID0geyAiU2NvcGVDaGFpbk5vZGUiLCAwLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlQ2hhaW5Ob2RlKSB9OwotCi1pbnQgU2NvcGVD
aGFpbk5vZGU6OmxvY2FsRGVwdGgoKQotewotICAgIGludCBzY29wZURlcHRoID0gMDsKLSAgICBT
Y29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOwotICAgIHdoaWxlICghaXRlci0+aW5oZXJpdHMoJkpT
QWN0aXZhdGlvbjo6c19pbmZvKSkgewotICAgICAgICArK2l0ZXI7Ci0gICAgICAgIGlmIChpdGVy
ID09IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK3Njb3BlRGVwdGg7Ci0gICAg
fQotICAgIHJldHVybiBzY29wZURlcHRoOwotfQotCi12b2lkIFNjb3BlQ2hhaW5Ob2RlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgU2Nv
cGVDaGFpbk5vZGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2NvcGVDaGFpbk5vZGUqPihjZWxsKTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAg
IENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7Ci0KLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bmV4dCk7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm9iamVjdCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPmds
b2JhbFRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTY29w
ZUNoYWluX2gKLSNkZWZpbmUgU2NvcGVDaGFpbl9oCi0KLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKLSAgICBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKLSAgICBjbGFzcyBKU09iamVjdDsKLSAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci0gICAgY2xhc3MgU2NvcGVDaGFpbkl0ZXJhdG9yOwotICAgIGNsYXNzIFNsb3RW
aXNpdG9yOwotICAgIAotICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlIDogcHVibGljIEpTQ2VsbCB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFpbk5vZGUqIG5l
eHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCi0gICAgICAgICAgICA6
IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c2NvcGVDaGFpbk5vZGVTdHJ1Y3R1cmUu
Z2V0KCkpCi0gICAgICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAg
ICwgbmV4dCgqZ2xvYmFsRGF0YSwgdGhpcywgbmV4dCwgV3JpdGVCYXJyaWVyPFNjb3BlQ2hhaW5O
b2RlPjo6TWF5QmVOdWxsKQotICAgICAgICAgICAgLCBvYmplY3QoKmdsb2JhbERhdGEsIHRoaXMs
IG9iamVjdCkKLSAgICAgICAgICAgICwgZ2xvYmFsT2JqZWN0KCpnbG9iYWxEYXRhLCB0aGlzLCBn
bG9iYWxPYmplY3QpCi0gICAgICAgICAgICAsIGdsb2JhbFRoaXMoKmdsb2JhbERhdGEsIHRoaXMs
IGdsb2JhbFRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLQotICAgICAgICBzdGF0aWMgU2NvcGVDaGFpbk5vZGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY29w
ZUNoYWluTm9kZSogbm9kZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlQ2hhaW5O
b2RlPigqZXhlYy0+aGVhcCgpKSkgU2NvcGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIGdsb2JhbFRoaXMpOwotICAgICAgICAgICAgbm9kZS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogY3JlYXRlKFNj
b3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBTY29wZUNoYWluTm9kZSogbm9kZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFNjb3BlQ2hhaW5Ob2RlPihnbG9iYWxEYXRhLT5oZWFwKSkgU2Nv
cGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bFRoaXMpOwotICAgICAgICAgICAgbm9kZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxTY29wZUNoYWluTm9kZT4gbmV4dDsKLSAgICBwcml2YXRlOgotICAgICAgICBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+IG9iamVjdDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdyaXRlQmFycmllcjxK
U0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0OwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IGdsb2JhbFRoaXM7Ci0KLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHB1c2goSlNPYmplY3Qq
KTsKLSAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHBvcCgpOwotCi0gICAgICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBiZWdpbigpOwotICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kKCk7Ci0KLSAg
ICAgICAgaW50IGxvY2FsRGVwdGgoKTsKLQotI2lmbmRlZiBOREVCVUcgICAgICAgIAotICAgICAg
ICB2b2lkIHByaW50KCk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENvbXBvdW5kVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQotICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgICAgICBmcmllbmQgY2xhc3Mg
U2NvcGVDaGFpbkl0ZXJhdG9yOwotICAgICAgICBmcmllbmQgY2xhc3MgSlNTY29wZTsKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgICAgIGZyaWVuZCBjbGFz
cyBKSVQ7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuOwotICAgIH07Ci0KLSAgICBpbmxpbmUgU2Nv
cGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwdXNoKEpTT2JqZWN0KiBvKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG8pOwotICAgICAgICByZXR1cm4gU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZSh0
aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QuZ2V0KCksIGdsb2JhbFRoaXMuZ2V0KCkp
OwotICAgIH0KLQotICAgIGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFpbk5vZGU6OnBv
cCgpCi0gICAgewotICAgICAgICBBU1NFUlQobmV4dCk7Ci0gICAgICAgIHJldHVybiBuZXh0Lmdl
dCgpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgSlNHbG9iYWxEYXRhJiBFeGVjU3RhdGU6
Omdsb2JhbERhdGEoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHNjb3BlQ2hhaW4oKS0+
Z2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiAqc2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhOwot
ICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgSlNHbG9iYWxPYmplY3QqIEV4ZWNTdGF0ZTo6bGV4
aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2NvcGVDaGFp
bigpLT5nbG9iYWxPYmplY3QuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJTkUg
SlNPYmplY3QqIEV4ZWNTdGF0ZTo6Z2xvYmFsVGhpc1ZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzY29wZUNoYWluKCktPmdsb2JhbFRoaXMuZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIEFMV0FZU19JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIFJlZ2lzdGVyOjpzY29wZUNoYWluKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZUNoYWluTm9kZSo+
KGpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJTkUgUmVn
aXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCi0g
ICAgewotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc2NvcGVDaGFpbik7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gU2NvcGVD
aGFpbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluTWFy
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hh
aW5NYXJrLmgJKHJldmlzaW9uIDEyNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlQ2hhaW5NYXJrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTY29wZUNoYWluTWFya19o
Ci0jZGVmaW5lIFNjb3BlQ2hhaW5NYXJrX2gKLQotI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gU2NvcGVD
aGFpbk1hcmtfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZh
bEFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI3MDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMywxMyBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihT
dHJpY3RFdmFsCiBjb25zdCBDbGFzc0luZm8gU3RyaWN0RXZhbEFjdGl2YXRpb246OnNfaW5mbyA9
IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU3Ry
aWN0RXZhbEFjdGl2YXRpb24pIH07CiAKIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpTdHJpY3RFdmFs
QWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlLmdldCgp
KQorICAgIDogQmFzZSgKKyAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCksCisgICAg
ICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwKKyAgICAgICAgZXhlYy0+Z2xvYmFsVGhp
c1ZhbHVlKCksCisgICAgICAgIGV4ZWMtPnNjb3BlKCkKKyAgICApCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEyNzE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA4LTMwICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIG9uZSBvYmplY3QgaW5zdGVhZCBvZiB0
d28gZm9yIGNsb3N1cmVzLCBlbGltaW5hdGluZyBTY29wZUNoYWluTm9kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU1MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZXMgdG8g
dXBkYXRlIGZvciBKU0MgaW50ZXJmYWNlIGNoYW5nZXMuCisKIDIwMTItMDgtMzAgIFByYXRpayBT
b2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAgIG9iamNfbXNnU2VuZCBhbmQg
SU1QIHNob3VsZCBiZSBjYXN0IGFwcHJvcHJpYXRlbHkgYmVmb3JlIHVzaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTI3MDA3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEzMzMsNyArMTMzMyw2IEBAIF9fWk5LN1dlYkNv
cmU2RWRpdG9yN2NhbkNvcHlFdgogX19aTks3V2ViQ29yZTZFZGl0b3I3Y2FuRWRpdEV2CiBfX1pO
SzdXZWJDb3JlNkVkaXRvcjhjYW5QYXN0ZUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjljYW5EZWxl
dGVFdgotX19aTks3V2ViQ29yZTZKU05vZGUyMXB1c2hFdmVudEhhbmRsZXJTY29wZUVQTjNKU0M5
RXhlY1N0YXRlRVBOUzFfMTRTY29wZUNoYWluTm9kZUUKIF9fWk5LN1dlYkNvcmU2TGVuZ3RoMjJk
ZWNyZW1lbnRDYWxjdWxhdGVkUmVmRXYKIF9fWk5LN1dlYkNvcmU2UmVnaW9uNXJlY3RzRXYKIF9f
Wk5LN1dlYkNvcmU2V2lkZ2V0MTRwbGF0Zm9ybVdpZGdldEV2CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1dpdGhTY29wZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9K
U1dpdGhTY29wZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29y
ZV9GV0RfSlNXaXRoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU1dpdGhTY29wZV9oCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNXaXRoU2NvcGUuaD4KKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9TY29wZUNoYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9TY29wZUNo
YWluLmgJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvU2NvcGVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAot
I2lmbmRlZiBXZWJDb3JlX0ZXRF9TY29wZUNoYWluX2gKLSNkZWZpbmUgV2ViQ29yZV9GV0RfU2Nv
cGVDaGFpbl9oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2NvcGVDaGFpbi5oPgotI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CisjaW5jbHVkZSA8cnVudGltZS9KU1dpdGhTY29wZS5oPgogCiAjaWYgRU5BQkxFKE1JQ1JPREFU
QSkKICNpbmNsdWRlICJKU01pY3JvRGF0YUl0ZW1WYWx1ZS5oIgpAQCAtMzcsMTkgKzM4LDE5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotU2NvcGVDaGFp
bk5vZGUqIEpTSFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZSkgY29uc3QKK0pTU2NvcGUqIEpTSFRNTEVsZW1lbnQ6
OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKSBj
b25zdAogewogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaW1wbCgpOwogCiAgICAgLy8gVGhl
IGRvY3VtZW50IGlzIHB1dCBvbiBmaXJzdCwgZmFsbCBiYWNrIHRvIHNlYXJjaGluZyBpdCBvbmx5
IGFmdGVyIHRoZSBlbGVtZW50IGFuZCBmb3JtLgotICAgIHNjb3BlID0gc2NvcGUtPnB1c2goYXNP
YmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZWxlbWVudC0+b3duZXJEb2N1bWVudCgp
KSkpOworICAgIHNjb3BlID0gSlNXaXRoU2NvcGU6OmNyZWF0ZShleGVjLCBhc09iamVjdCh0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpKSwgc2NvcGUp
OwogCiAgICAgLy8gVGhlIGZvcm0gaXMgbmV4dCwgc2VhcmNoZWQgYmVmb3JlIHRoZSBkb2N1bWVu
dCwgYnV0IGFmdGVyIHRoZSBlbGVtZW50IGl0c2VsZi4KICAgICBpZiAoSFRNTEZvcm1FbGVtZW50
KiBmb3JtID0gZWxlbWVudC0+Zm9ybSgpKQotICAgICAgICBzY29wZSA9IHNjb3BlLT5wdXNoKGFz
T2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGZvcm0pKSk7CisgICAgICAgIHNjb3Bl
ID0gSlNXaXRoU2NvcGU6OmNyZWF0ZShleGVjLCBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBmb3JtKSksIHNjb3BlKTsKIAogICAgIC8vIFRoZSBlbGVtZW50IGlzIG9uIHRvcCwg
c2VhcmNoZWQgZmlyc3QuCi0gICAgcmV0dXJuIHNjb3BlLT5wdXNoKGFzT2JqZWN0KHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGVsZW1lbnQpKSk7CisgICAgcmV0dXJuIEpTV2l0aFNjb3BlOjpj
cmVhdGUoZXhlYywgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZWxlbWVudCkp
LCBzY29wZSk7CiB9CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMTI3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIFNjcmlw
dE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWEKICAgICBKU1ZhbHVlIGdsb2JhbFRo
aXNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAogICAgIEpTVmFsdWUg
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25SZXR1cm5WYWx1ZSA9
IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFs
dWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25SZXR1cm5WYWx1ZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoc2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGds
b2JhbFRoaXNWYWx1ZSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpCiAg
ICAgaWYgKCFpbXBsKCktPnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBpbXBsKCktPnNjb3BlQ2hhaW4oKTsK
KyAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLT5zY29wZUNoYWluKCk7CiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwogICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKIApAQCAtMTAyLDcgKzEwMiw3IEBA
IEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgaW50IGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQz
MigpOwogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBpbXBsKCktPnNjb3BlQ2hh
aW4oKTsKKyAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLT5zY29wZUNoYWluKCk7CiAg
ICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwogCiAgICAgYm9v
bCBmb3VuZExvY2FsU2NvcGUgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCShyZXZpc2lvbiAxMjcwMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbihjb250ZXh0LCByZXNvdXJj
ZU5hbWUsIGxpbmVOdW1iZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZh
bHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5vZGUqIGNoYWluLCBj
b25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlND
OjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAg
ICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKICAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUo
ZXhlYywgY2hhaW4sIHNvdXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICByZXR1
cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKICAg
ICB9OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBA
QCBKU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCi1TY29wZUNoYWluTm9kZSogSlNOb2RlOjpwdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogbm9kZSkgY29uc3QKK0pTU2NvcGUq
IEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
bm9kZSkgY29uc3QKIHsKICAgICBpZiAoaW5oZXJpdHMoJkpTSFRNTEVsZW1lbnQ6OnNfaW5mbykp
CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8Y29uc3QgSlNIVE1MRWxlbWVudCo+KHRoaXMpLT5wdXNo
RXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTI3MDA3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMiBAQCBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lCiAgICAgcmV0dXJuIG1fY2FsbGVyLmdldCgpOwogfQogCi1KU0M6
OlNjb3BlQ2hhaW5Ob2RlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QK
K0pTQzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbigpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNjb3BlQ2hhaW4oKTsKKyAg
ICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5zY29wZSgpOwogfQogCiBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZy
YW1lLmgJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0ph
dmFTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7CiAgICAgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgSlNDOjpTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbigpIGNvbnN0OworICAgIEpTQzo6SlNTY29wZSogc2NvcGVDaGFpbigpIGNvbnN0
OwogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdDsK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTI3MDA3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9s
bGVyOjpldmFsdWF0ZUluCiAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwogCiAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSBy
ZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIGpzU291cmNlQ29kZSwg
c2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxs
LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRD
aGVja2VyLnN0b3AoKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVh
dGVTY3JpcHQoY29va2llKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjk1LDcgKzI5NSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxTdGFjaygK
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0
ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgQVNTRVJUKG1fcGF1c2VkKTsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmds
b2JhbE9iamVjdC5nZXQoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9j
dXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpOwogICAgIFNjcmlw
dFN0YXRlKiBzdGF0ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEpTVmFsdWUg
anNDYWxsRnJhbWU7CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyNzAwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpldmFsdWF0ZShjbwogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEo
KS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogCiAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0
aW9uOwotICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2Vy
Q29udGV4dFdyYXBwZXIuZ2V0KCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OmV2
YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyQ29udGV4dFdy
YXBwZXIuZ2V0KCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIG1fd29ya2VyQ29udGV4
dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZp
c2lvbiAxMjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw3IEBAIC0gKGlkKWV2YWx1YXRl
V2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlw
dCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0
KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgaWQgcmVz
dWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmV0dXJu
VmFsdWUgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVj
dDpbc2VsZiBfcm9vdE9iamVjdF1dOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDEyNzAwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC04NDEsNyArODQxLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogCiAgICAgIyBDdXN0b20gcHVzaEV2ZW50SGFu
ZGxlclNjb3BlIGZ1bmN0aW9uCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OlNj
b3BlQ2hhaW5Ob2RlKiBwdXNoRXZlbnRIYW5kbGVyU2NvcGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlNjb3BlQ2hhaW5Ob2RlKikgY29uc3Q7XG5cbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIn07CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBKU0M6OkpTU2NvcGUqIHB1c2hFdmVudEhhbmRsZXJTY29wZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNTY29wZSopIGNvbnN0O1xuXG4iKSBpZiAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSJ9OwogCiAg
ICAgIyBDdXN0b20gY2FsbCBmdW5jdGlvbnMKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxs
RGF0YSYpO1xuXG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21D
YWxsIn07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9u
IDEyNzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQIGluc3Rh
bmNlLCBOUE9iamVjCiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBT
dHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1Zh
bHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNjcmlwdFN0
cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkocmV2aXNpb24gMTI3
MDA3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJjX2luc3RhbmNlLmgiCiAjaW5jbHVkZSAi
Y19ydW50aW1lLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxydW50
aW1lL1Njb3BlQ2hhaW4uaD4KICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09iamVj
dC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCShyZXZpc2lvbiAx
MjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgogI2luY2x1
ZGUgImNfdXRpbGl0eS5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3
IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXAKICAgICBKU0xvY2tI
b2xkZXIgbG9jayhyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAg
ICAKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRD
aGVja2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQp
LmltcGwoKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2Ny
aXB0KS5pbXBsKCkpKTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pP
YmplY3QocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFN
ZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lvbiAxMjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL1Njb3BlQ2hhaW4uaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShyZXZpc2lvbiAx
MjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlICJKYXZhSW5zdGFuY2VK
U0MuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9T
Y29wZUNoYWluLmg+Ci0KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCShyZXZpc2lvbiAxMjcwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogI2lmIFVTRShKU0MpCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MjcxOTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMiBAQAorMjAxMi0wOC0zMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgorCisgICAgICAgIFVzZSBvbmUgb2JqZWN0IGluc3RlYWQgb2YgdHdvIGZvciBjbG9zdXJlcywg
ZWxpbWluYXRpbmcgU2NvcGVDaGFpbk5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk1NTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2VzIHRvIHVwZGF0ZSBmb3IgSlNDIGlu
dGVyZmFjZSBjaGFuZ2UuCisKIDIwMTItMDgtMzAgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lA
YXBwbGUuY29tPgogCiAgICAgICAgIG9iamNfbXNnU2VuZCBhbmQgSU1QIHNob3VsZCBiZSBjYXN0
IGFwcHJvcHJpYXRlbHkgYmVmb3JlIHVzaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5j
cHAJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKICNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCiAKICNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSAiTlBS
ZW1vdGVPYmplY3RNYXAuaCIKICNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKICNpbmNs
dWRlICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMjcwMDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpl
dmFsdWF0ZShOUE9iamUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmpl
Y3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0VmFs
dWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBtYWtlU291cmNlKFVTdHJpbmcoc2NyaXB0U3RyaW5nLmltcGwoKSkpLCB0aGlzVmFsdWUpOwor
ICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2Uo
VVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgpKSksIHRoaXNWYWx1ZSk7CiAgICAgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgY29udmVydEpT
VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWYWx1ZSwgKnJlc3VsdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbi5jcHAJKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0tVUkwuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEyNzE5NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDEyLTA4LTMwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVXNlIG9uZSBvYmplY3QgaW5zdGVhZCBvZiB0d28gZm9yIGNsb3N1
cmVzLCBlbGltaW5hdGluZyBTY29wZUNoYWluTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU1MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZSB0byB1cGRhdGUgZm9yIEpT
QyBpbnRlcmZhY2UgY2hhbmdlLgorCiAyMDEyLTA4LTMwICBQcmF0aWsgU29sYW5raSAgPHBzb2xh
bmtpQGFwcGxlLmNvbT4KIAogICAgICAgICBvYmpjX21zZ1NlbmQgYW5kIElNUCBzaG91bGQgYmUg
Y2FzdCBhcHByb3ByaWF0ZWx5IGJlZm9yZSB1c2luZwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQkocmV2aXNpb24gMTI3MDA3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04NzUsNyArODc1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1
YQogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVw
cyA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGV4
ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNj
cmlwdCkpOwogICAgIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVj
a2VyLnN0b3AoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDEyNzAwNykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTc1LDE4ICsxNzUsMTggQEAgLSAoTlNBcnJheSAqKXNjb3BlQ2hhaW4KICAgICAg
ICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKIAogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhzY29wZUNoYWluLT5nbG9iYWxEYXRhKTsKLSAgICBpZiAoIXNjb3Bl
Q2hhaW4tPm5leHQpICAvLyBnbG9iYWwgZnJhbWUKKyAgICBKU1Njb3BlKiBzY29wZSA9IF9wcml2
YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBpZiAoIXNjb3BlLT5uZXh0KCkpICAvLyBnbG9iYWwg
ZnJhbWUKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpfcHJpdmF0ZS0+
Z2xvYmFsT2JqZWN0XTsKIAogICAgIE5TTXV0YWJsZUFycmF5ICpzY29wZXMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKIAotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29w
ZUNoYWluLT5lbmQoKTsKLSAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlQ2hh
aW4tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBl
bmQgPSBzY29wZS0+ZW5kKCk7CisgICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3IgaXQgPSBzY29w
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBpdC5nZXQoKTsKICAgICAgICAgaWYgKG9iamVjdC0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpCi0g
ICAgICAgICAgICBvYmplY3QgPSBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSgqc2NvcGVDaGFp
bi0+Z2xvYmFsRGF0YSwgb2JqZWN0KTsKKyAgICAgICAgICAgIG9iamVjdCA9IERlYnVnZ2VyQWN0
aXZhdGlvbjo6Y3JlYXRlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBvYmplY3QpOwogICAgICAgICBb
c2NvcGVzIGFkZE9iamVjdDpbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6b2JqZWN0XV07
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MTk0KQorKysgU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
Mi0wOC0zMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFVz
ZSBvbmUgb2JqZWN0IGluc3RlYWQgb2YgdHdvIGZvciBjbG9zdXJlcywgZWxpbWluYXRpbmcgU2Nv
cGVDaGFpbk5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1NTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWVjaGFuaWNhbCBjaGFuZ2UgdG8gdXBkYXRlIGZvciBKU0MgaW50ZXJmYWNlIGNoYW5nZS4K
KworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6
ZXZhbHVhdGVKYXZhU2NyaXB0KToKKwogMjAxMi0wOC0zMCAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIEpTQzo6VVN0cmluZyBieSBXVEY6
OlN0cmluZwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24g
MTI3MDA3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTAsMTEgKzc1MCwxMCBAQCBRVmFyaWFudCBRV2ViRWxlbWVudDo6ZXZhbHVh
dGVKYXZhU2NyaXB0CiAKICAgICBpZiAoIXNldHVwU2NyaXB0Q29udGV4dChtX2VsZW1lbnQsIHRo
aXNWYWx1ZSwgc3RhdGUsIHNjcmlwdENvbnRyb2xsZXIpKQogICAgICAgICByZXR1cm4gUVZhcmlh
bnQoKTsKLSAgICBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gc3RhdGUtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpOwogICAgIEpTQzo6VVN0cmluZyBz
Y3JpcHQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIqPihzY3JpcHRTb3VyY2UuZGF0
YSgpKSwgc2NyaXB0U291cmNlLmxlbmd0aCgpKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0aW9uUmVzdWx0ID0gSlNDOjpl
dmFsdWF0ZShzdGF0ZSwgc2NvcGVDaGFpbiwgSlNDOjptYWtlU291cmNlKHNjcmlwdCksIHRoaXNW
YWx1ZSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0aW9u
UmVzdWx0ID0gSlNDOjpldmFsdWF0ZShzdGF0ZSwgSlNDOjptYWtlU291cmNlKHNjcmlwdCksIHRo
aXNWYWx1ZSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAo=
</data>
<flag name="review"
          id="172416"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>