<?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>22266</bug_id>
          
          <creation_ts>2008-11-14 10:29:44 -0800</creation_ts>
          <short_desc>Stop using MessagePort for communication with workers</short_desc>
          <delta_ts>2008-11-16 01:12:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>aa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98796</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-14 10:29:44 -0800</bug_when>
    <thetext>The existing MessagePort specification does not work with multiple threads or processes well, and doesn&apos;t appear to be easily fixable. Besides, Mozilla is about to ship an entirely different and much simpler API for workers.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98805</commentid>
    <comment_count>1</comment_count>
      <attachid>25173</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-14 11:07:58 -0800</bug_when>
    <thetext>Created attachment 25173
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98906</commentid>
    <comment_count>2</comment_count>
      <attachid>25173</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-11-15 16:38:38 -0800</bug_when>
    <thetext>Comment on attachment 25173
proposed patch

r=me

I hope this reaches the point of testability soon so that we can document behavior changes like this with test case changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98917</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-16 01:12:27 -0800</bug_when>
    <thetext>Committed revision 38443.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25173</attachid>
            <date>2008-11-14 11:07:58 -0800</date>
            <delta_ts>2008-11-15 16:38:38 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>MozillaWorker.txt</filename>
            <type>text/plain</type>
            <size>113200</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDgtMTEtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI2NgorICAgICAgICBT
dG9wIHVzaW5nIE1lc3NhZ2VQb3J0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggd29ya2VycworCisg
ICAgICAgIFRoZSBjdXJyZW50IE1lc3NhZ2VQb3J0IHNwZWNpZmljYXRpb24gaXMgbm90IHdlbGwg
c3VpdGVkIGZvciBiZWluZyBpbXBsZW1lbnRlZCBpbiBhCisgICAgICAgIG11bHRpLXRocmVhZGVk
IG9yIG11bHRpLXByb2Nlc3MgZW52aXJvbm1lbnQsIGFuZCB0aGlzIGRvZXNuJ3QgYXBwZWFyIHRv
IGJlIGVhc2lseSBmaXhhYmxlLgorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBzaW1w
bGVyIE1vemlsbGEgQVBJIGZvciB3b3JrZXJzIGluc3RlYWQuCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFr
ZToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOiAoanNET01XaW5k
b3dCYXNlV29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNv
bnN0cnVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RlZGljYXRl
ZFdvcmtlckNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNE
ZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV29ya2VyQ29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuY3BwLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV29ya2VyQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNh
dGVkV29ya2VyQ3VzdG9tLmNwcC4KKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogZG9tL0RlZGljYXRlZFdvcmtlci5pZGw6IFJlbW92ZWQuCisgICAgICAgIFJlbmFtZWQg
RGVkaWNhdGVkV29ya2VyIHRvIFdvcmtlciB0byBtYXRjaCBNb3ppbGxhIGFuZCBjdXJyZW50IFdI
QVRXRyBjcGVjLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDog
KFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
IENsZWFyIHdvcmtlciBleGNlcHRpb25zIHRvIGF2b2lkIGhpdHRpbmcgYW4gYXNzZXJ0aW9uLgor
CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDogKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Ojp0
b1dvcmtlcik6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldC5jcHA6IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgV29ya2Vy
Q29udGV4dCBpcyBub3cgYW4gRXZlbnRUYXJnZXQsIHRvby4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dC5jcHA6IFJlbW92ZWQgb25jb25uZWN0LCBjb25zdHJ1Y3RvcnMg
Zm9yIE1lc3NhZ2VDaGFubmVsIGFuZAorICAgICAgICBNZXNzYWdlUG9ydC4gQWRkZWQgcG9zdE1l
c3NhZ2UoKSBhbmQgb25tZXNzYWdlLgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwOiAoV2ViQ29yZTo6cGVyZm9ybVRhc2spOiBEbyBub3QgcmVmZXJlbmNlIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQKKyAgICAgICAgd2hlbiBwb3N0aW5nIGEgdGFzayAtIHRoaXMgb3Bl
cmF0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS4gSXQgaXMgYWxzbyBub3QgbmVjZXNzYXJ5IGFueSBt
b3JlLAorICAgICAgICBhcyB0aGUgY29udGV4dCBpcyBrZXB0IGFsaXZlIGJ5IFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgorCisgICAgICAgICogZG9tL1dvcmtlci5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvZG9tL0RlZGljYXRlZFdvcmtlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Oldv
cmtlcik6IFN0YXJ0IGxvYWRpbmcgdGhlIHNjcmlwdCByaWdodCBhd2F5IC0gdGhlcmUgaXMgbm8g
cmVhc29uIHRvIGRvCisgICAgICAgIHRoYXQgb24gYSB0aW1lci4KKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlcjo6fldvcmtlcik6IE5vdGlmeSBtZXNzYWdpbmcgcHJveHkuCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXI6OnBvc3RNZXNzYWdlKTogSnVzdCBhc2sgdGhlIHByb3h5IHRvIHBvc3QgdGhl
IG1lc3NhZ2UuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKTogTm90
aWZ5IG1lc3NhZ2luZyBwcm94eSB3aGVuIGEgdGhyZWFkIG9iamVjdCBiZWNvbWVzCisgICAgICAg
IGF2YWlsYWJsZS4gQWxzbywgaXQgaXMgbm93IHNhZmUgdG8gdW5zZXRQZW5kaW5nQWN0aXZpdHko
KSwgbWFraW5nIHRoZSBvYmplY3QgY29sbGVjdGFibGUuCisgICAgICAgIEknbSBub3Qgc3VyZSBp
ZiB0aGlzIGlzIHRoZSByaWdodCBsaWZldGltZSBmb3Igd29ya2VycywgYXMgdW5yZWFjaGFibGUg
d29ya2VycyB3aXRoIGV2ZW50CisgICAgICAgIGxpc3RlbmVycyBzaG91bGQgcHJvYmFibHkgYmUg
a2VwdCBhbGl2ZSwgYnV0IGl0IGF0IGxlYXN0IGxldHMgdGhlIG9iamVjdCBiZSBjb2xsZWN0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIpOiBBZGRlZCBhbiBF
dmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcik6IEFkZGVkIGFuIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpkaXNwYXRjaEV2ZW50KTogQWRkZWQgYW4gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBkb20vV29ya2VyLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5oLgorICAgICAgICAqIGRvbS9Xb3JrZXIu
aWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuaWRsLgorICAgICAg
ICBSZW1vdmVkIG9uY2xvc2UsIG1hZGUgYW4gRXZlbnRMaXN0ZW5lci4gQWN0dWFsIG1lc3NhZ2lu
ZyBpcyBub3cgaGFuZGxlZCBieSBXb3JrZXJNZXNzYWdpbmdQcm94eS4KKworICAgICAgICAqIGRv
bS9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6On5X
b3JrZXJDb250ZXh0KTogTm90aWZ5IG1lc3NhZ2luZyBwcm94eSB0aGF0IHRoZSBjb250ZXh0IHdh
cyBzaHV0CisgICAgICAgIGRvd24gc3VjY2Vzc2Z1bGx5LgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4gUG9zdCB0aGUgbWVzc2FnZSB2aWEgbWVz
c2FnaW5nIHByb3h5LgorCisgICAgICAgICogZG9tL1dvcmtlckNvbnRleHQuaDogQWRkZWQgcG9z
dE1lc3NhZ2UgYW5kIG9ubWVzc2FnZSwgcmVtb3ZlZCBvbmNvbm5lY3QuCisKKyAgICAgICAgKiBk
b20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBkb20vV29ya2Vy
TWVzc2FnaW5nUHJveHkuaDogQWRkZWQuCisgICAgICAgIFRoaXMgbmV3IGNsYXNzIGltcGxlbWVu
dHMgYWN0dWFsIG1lc3NhZ2luZy4gSXQgaXMgbm90aWZpZWQgd2hlbiBhIFdvcmtlciBpcyBnYXJi
YWdlIGNvbGxlY3RlZCwKKyAgICAgICAgYW5kIGFza3MgdGhlIHRocmVhZCB0byBzaHV0IGRvd24u
IEl0IGFsc28gb3ducyB0aGUgdGhyZWFkIG9iamVjdCwgYW5kIHJlZmVyZW5jZXMgc2NyaXB0Cisg
ICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0LCBtYWtpbmcgaXQgc2FmZSB0byBwb3N0IG1lc3NhZ2Vz
IHRvIGl0IHJlbW90ZWx5LgorCisgICAgICAgICogZG9tL1dvcmtlclRocmVhZC5jcHA6CisgICAg
ICAgICogZG9tL1dvcmtlclRocmVhZC5oOgorICAgICAgICBLZWVwIGEgcmVmZXJlbmNlIHRvIG1l
c3NhZ2luZyBwcm94eSwgbm90IHRvIFdvcmtlciBpdHNlbGYuIEFsc28sIHRoZSB0aHJlYWQgb2Jq
ZWN0IG5vIGxvbmdlcgorICAgICAgICBrZWVwcyBpdHNlbGYgYWxpdmUgLSBpdCBpcyBub3cgdGhl
IGpvYiBvZiBtZXNzYWdpbmcgcHJveHkuCisKIDIwMDgtMTEtMTQgIENhbWVyb24gWndhcmljaCAg
PHp3YXJpY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMzgzODcpCisrKyBXZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgRE9NX0NMQVNTRVMg
PSBcCiAgICAgRE9NUGFyc2VyIFwKICAgICBET01TZWxlY3Rpb24gXAogICAgIERPTVdpbmRvdyBc
Ci0gICAgRGVkaWNhdGVkV29ya2VyIFwKICAgICBEYXRhYmFzZSBcCiAgICAgRG9jdW1lbnQgXAog
ICAgIERvY3VtZW50RnJhZ21lbnQgXApAQCAtMzU5LDYgKzM1OCw3IEBAIERPTV9DTEFTU0VTID0g
XAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZl
bnQgXAogICAgIFdoZWVsRXZlbnQgXAorICAgIFdvcmtlciBcCiAgICAgV29ya2VyTG9jYXRpb24g
XAogICAgIFhNTEh0dHBSZXF1ZXN0IFwKICAgICBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbiBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MzgzODcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDE1MCw2ICs0MTUwLDggQEAKIAkJRTExQzlEQjAwRUIzNjk5NTAwRTQw
OURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTExQzlEQUYwRUIzNjk5NTAwRTQwOURCIC8qIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwICovOyB9OwogCQlFMTJFREI3QjBCMzA4QTc4MDAyNzA0QjYg
LyogRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxMkVEQjdBMEIzMDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMkVEQkVBMEIzMDhF
MEIwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJn
ZXQuY3BwICovOyB9OworCQlFMTQ3OTlBNzBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2Fn
aW5nUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNDc5OUE2MEVDREUzQTQwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oICovOyB9
OworCQlFMTQ3OTlCNDBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0Nzk5QjMw
RUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCAqLzsgfTsKIAkJRTE3
QTRBMUIwRDk3OTkxRDAwRkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5oIGluIENvcHkg
R2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVB
QTZCQUMwRDk3NEEwMDAwMDU0MUFFIC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5oICovOyB9Owog
CQlFMTdBNEExQzBEOTc5OTFEMDBGQzEwQzYgLyogRE9NU1ZHQWx0R2x5cGhFbGVtZW50SW50ZXJu
YWwuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1QUE2QkFFMEQ5NzRBMDAwMDA1NDFBRSAvKiBET01TVkdBbHRHbHlwaEVsZW1l
bnRJbnRlcm5hbC5oICovOyB9OwogCQlFMUEzMDJCQzBERTgzNzAzMDBDNTJGMkMgLyogU3RyaW5n
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFBMzAyQkIwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCAqLzsgfTsKQEAgLTQx
ODQsMTMgKzQxODYsMTMgQEAKIAkJRTFDMzZEMzUwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2Vy
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5oICovOyB9OwogCQlF
MUM0REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUM0REU2ODBFQTc1QzFFMDAyM0ND
RDYgLyogQWN0aXZlRE9NT2JqZWN0LmggKi87IH07CiAJCUUxQzRERTZFMEVBNzVDNjUwMDIzQ0NE
NiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVj
dC5jcHAgKi87IH07Ci0JCUUxQzhCRTVEMEU4QkQxNUEwMDY0Q0I3RCAvKiBKU0RlZGljYXRlZFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNEZWRpY2F0ZWRXb3JrZXIuY3BwICovOyB9Owot
CQlFMUNBNUNBMDBFOENENzNCMDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUM5RjBFOENENzNCMDBF
OEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmggKi87IH07Ci0JCUUxQ0E1Q0E1MEU4Q0Q3ODUwMEU4
RUY5MCAvKiBEZWRpY2F0ZWRXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFDQTVDQTQwRThDRDc4NTAwRThFRjkwIC8qIERlZGljYXRlZFdv
cmtlci5jcHAgKi87IH07Ci0JCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU0RlZGljYXRl
ZFdvcmtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUNBNUNCQjBFOENEQ0FGMDBFOEVGOTAgLyogSlNEZWRpY2F0ZWRXb3JrZXJDdXN0
b20uY3BwICovOyB9OwotCQlFMUNBNUNEMzBFOENERTgwMDBFOEVGOTAgLyogSlNEZWRpY2F0ZWRX
b3JrZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFDQTVDRDIwRThDREU4MDAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29u
c3RydWN0b3IuaCAqLzsgfTsKLQkJRTFDQTVDRDYwRThDREVFOTAwRThFRjkwIC8qIEpTRGVkaWNh
dGVkV29ya2VyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDQTVDRDUwRThDREVFOTAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29y
a2VyQ29uc3RydWN0b3IuY3BwICovOyB9OwotCQlFMUNBQTVDNjBFOEJEMjM2MDBBNzNFQ0EgLyog
SlNEZWRpY2F0ZWRXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU0RlZGljYXRlZFdvcmtlci5o
ICovOyB9OworCQlFMUM4QkU1RDBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDOEJFNUMwRThCRDE1
QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNwcCAqLzsgfTsKKwkJRTFDQTVDQTAwRThDRDczQjAwRThF
RjkwIC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFDQTVDOUYwRThDRDczQjAwRThFRjkwIC8qIFdvcmtlci5oICovOyB9OworCQlFMUNB
NUNBNTBFOENENzg1MDBFOEVGOTAgLyogV29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0E0MEU4Q0Q3ODUwMEU4RUY5MCAvKiBXb3Jr
ZXIuY3BwICovOyB9OworCQlFMUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
QTVDQkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJRTFD
QTVDRDMwRThDREU4MDAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0QyMEU4Q0RFODAwMEU4
RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmggKi87IH07CisJCUUxQ0E1Q0Q2MEU4Q0RFRTkw
MEU4RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0Q1MEU4Q0RFRTkwMEU4RUY5MCAvKiBKU1dv
cmtlckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJRTFDQUE1QzYwRThCRDIzNjAwQTczRUNBIC8q
IEpTV29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUNBQTVDNTBFOEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCAqLzsgfTsKIAkJRTFFNkVF
QTQwQjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFNkVFQTMwQjYyOERBODAwNUYy
RjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQlFMUU2RUVBODBCNjI4REIz
MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFNkVFQTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsKIAkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUyIC8qIENT
U0NoYXJzZXRSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxRUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgKi87
IH07CkBAIC04Nzc5LDYgKzg3ODEsOCBAQAogCQlFMTFDOURBRjBFQjM2OTk1MDBFNDA5REIgLyog
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTEyRURCN0EwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50VGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxMkVEQkU5MEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFRhcmdldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNDc5OUE2MEVDREUzQTQwMDI5MkJGMyAv
KiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXb3JrZXJNZXNzYWdpbmdQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTQ3OTlCMzBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUEzMDJCQjBERTgzNzAzMDBDNTJGMkMg
LyogU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJp
bmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMwMkMwMERFODM3
NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUE1Rjk5QTBFN0VBQTI1MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVs
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4MTMsMTQgKzg4MTcs
MTQgQEAKIAkJRTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckNvbnRleHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2
ZURPTU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmVET01P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERFNkQwRUE3NUM2NTAw
MjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY3RpdmVET01PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlFMUM4QkU0NDBFOEJDQ0JCMDA2NENCN0QgLyogRGVkaWNhdGVkV29ya2VyLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBEZWRpY2F0ZWRXb3JrZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNEZWRpY2F0ZWRXb3Jr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZWRpY2F0ZWRX
b3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUNBNUM5RjBFOENENzNC
MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlZGljYXRlZFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
MUNBNUNBNDBFOENENzg1MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZGljYXRlZFdvcmtlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU0RlZGlj
YXRlZFdvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUUxQ0E1Q0QyMEU4Q0RFODAwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVkaWNhdGVkV29ya2Vy
Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDQTVDRDUwRThD
REVFOTAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQ0FBNUM1MEU4QkQyMzYwMEE3
M0VDQSAvKiBKU0RlZGljYXRlZFdvcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0RlZGljYXRlZFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MUM4QkU0NDBFOEJDQ0JCMDA2NENCN0QgLyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXb3JrZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUM4QkU1QzBF
OEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MUNBNUM5RjBFOENENzNCMDBFOEVGOTAgLyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUNB
NUNBNDBFOENENzg1MDBFOEVGOTAgLyogV29ya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdvcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQ0E1Q0QyMEU4Q0RFODAwMEU4RUY5MCAvKiBKU1dvcmtl
ckNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2Vy
Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDQTVDRDUwRThD
REVFOTAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMUU2RUVBMzBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2Vs
ZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hU
TUxTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVF
QTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxRUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDaGFyc2V0
UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAxMSw5ICsxMzAxNSw2
IEBACiAJCQkJMUEzNDE3QzgwQ0VDRkYyNTAwNDlDQkRFIC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNr
LmNwcCAqLywKIAkJCQkxQTM0MTdDNzBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2Fs
bGJhY2suaCAqLywKIAkJCQkxQUU4MzA0MjBDQUIwRUQxMDAyMjM3QUUgLyogSlNEYXRhYmFzZUN1
c3RvbS5jcHAgKi8sCi0JCQkJRTFDQTVDRDIwRThDREU4MDAwRThFRjkwIC8qIEpTRGVkaWNhdGVk
V29ya2VyQ29uc3RydWN0b3IuaCAqLywKLQkJCQlFMUNBNUNENTBFOENERUU5MDBFOEVGOTAgLyog
SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCi0JCQkJRTFDQTVDQkIwRThDRENB
RjAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQk5MjkyNjQ3
NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkMxREVB
NEUwRTI2OEVCNjAwODNBNzNGIC8qIEpTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAgKi8sCiAJ
CQkJMUFDMjI2MTYwREI2OUY3NDAwODlCNjY5IC8qIEpTRE9NQXBwbGljYXRpb25DYWNoZUN1c3Rv
bS5jcHAgKi8sCkBAIC0xMzA2Niw2ICsxMzA2Nyw5IEBACiAJCQkJQjJEM0ZDODkwQzIyMTJDQjAw
Q0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJMUEyQzQwQUEw
REVCNTVBQTAwNUFGMTlFIC8qIEpTVGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJNTE2QkI3OTIwQ0U5
MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8sCisJCQkJRTFDQTVDRDIw
RThDREU4MDAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3IuaCAqLywKKwkJCQlFMUNBNUNE
NTBFOENERUU5MDBFOEVGOTAgLyogSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJRTFD
QTVDQkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzM0
OEJCRDBEQjdGNTMxMDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgKi8sCiAJ
CQkJQkNERkQ0OTEwRTMwNTZCRDAwOUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0
b20uY3BwICovLAogCQkJCUJDRUZFMUU0MERDQTVGMzMwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNz
b3JDdXN0b20uY3BwICovLApAQCAtMTMzOTIsOCArMTMzOTYsOCBAQAogCQlFMUM4QkU0QjBFOEJE
MEQxMDA2NENCN0QgLyogVGhyZWFkcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJRTFDOEJFNUMwRThCRDE1QTAwNjRDQjdEIC8qIEpTRGVkaWNhdGVkV29y
a2VyLmNwcCAqLywKLQkJCQlFMUNBQTVDNTBFOEJEMjM2MDBBNzNFQ0EgLyogSlNEZWRpY2F0ZWRX
b3JrZXIuaCAqLywKKwkJCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3Bw
ICovLAorCQkJCUUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovLAogCQkJ
CUUxQzM2MkVFMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCAqLywKIAkJ
CQlFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oICovLAogCQkJ
KTsKQEAgLTEzODk3LDkgKzEzOTAxLDYgQEAKIAkJCQlBODE4NzIxMTA5NzdEM0MwMDA1ODI2RDkg
LyogQ29udGFpbmVyTm9kZS5oICovLAogCQkJCUE4QzRBN0Y4MDlENTYzMjcwMDAzQUM4RCAvKiBD
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5jcHAgKi8sCiAJCQkJQThDNEE3RjcwOUQ1NjMy
NzAwMDNBQzhEIC8qIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmggKi8sCi0JCQkJRTFD
QTVDQTQwRThDRDc4NTAwRThFRjkwIC8qIERlZGljYXRlZFdvcmtlci5jcHAgKi8sCi0JCQkJRTFD
QTVDOUYwRThDRDczQjAwRThFRjkwIC8qIERlZGljYXRlZFdvcmtlci5oICovLAotCQkJCUUxQzhC
RTQ0MEU4QkNDQkIwMDY0Q0I3RCAvKiBEZWRpY2F0ZWRXb3JrZXIuaWRsICovLAogCQkJCTkzRUVD
MUU3MDlDMjg3NzcwMEM1MTVEMSAvKiBEb2NQdHIuaCAqLywKIAkJCQlBODE4NUYzNDA5NzY1NzY1
MDA1ODI2RDkgLyogRG9jdW1lbnQuY3BwICovLAogCQkJCUE4MTg1RjM4MDk3NjU3NjUwMDU4MjZE
OSAvKiBEb2N1bWVudC5oICovLApAQCAtMTQwNjIsMTEgKzE0MDYzLDE2IEBACiAJCQkJODUwMzFC
M0EwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjNCMEE0
NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2ZW50LmggKi8sCiAJCQkJOTNFRUMxRjcwOUMyODc3NzAw
QzUxNUQxIC8qIFdoZWVsRXZlbnQuaWRsICovLAorCQkJCUUxQ0E1Q0E0MEU4Q0Q3ODUwMEU4RUY5
MCAvKiBXb3JrZXIuY3BwICovLAorCQkJCUUxQ0E1QzlGMEU4Q0Q3M0IwMEU4RUY5MCAvKiBXb3Jr
ZXIuaCAqLywKKwkJCQlFMUM4QkU0NDBFOEJDQ0JCMDA2NENCN0QgLyogV29ya2VyLmlkbCAqLywK
IAkJCQlFMUMyQzQ0MTBFQUQwMTdCMDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5jcHAgKi8sCiAJ
CQkJRTFDMkM0M0QwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuaCAqLywKIAkJCQlF
MUMzNjMwNTBFQUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uY3BwICovLAogCQkJCUUx
QzM2MzAwMEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oICovLAogCQkJCUUxQzM2
MkJCMEVBRjI5RkIwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5pZGwgKi8sCisJCQkJRTE0Nzk5
QjMwRUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCAqLywKKwkJCQlF
MTQ3OTlBNjBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCAqLywKIAkJ
CQlFMTA4MjI0RTBFQzMxNTY3MDBFOTM5NTMgLyogV29ya2VyVGFzay5jcHAgKi8sCiAJCQkJRTEw
ODIyNEEwRUMzMTUzQTAwRTkzOTUzIC8qIFdvcmtlclRhc2suaCAqLywKIAkJCQlFMUMyQzQyODBF
QUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCAqLywKQEAgLTE2MTY0LDExICsxNjE3
MCwxMSBAQAogCQkJCTA4OTU4MjU2MEU4NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwQjNCRTIwRTg4NDkyMTAwOTc3MEM1IC8qIEpTQ2FudmFz
UGl4ZWxBcnJheUN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTFDQUE1QzYwRThCRDIzNjAw
QTczRUNBIC8qIEpTRGVkaWNhdGVkV29ya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUNBQTVD
NjBFOEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjkz
N0U3MEU4QjJFOTUwMDVDN0FCNyAvKiBKU0RPTVdpbmRvd0Jhc2UubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk2M0Y1RDRGNzBFOEM0QjcxMDBDMEJEMDQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFMUNBNUNBMDBFOENENzNCMDBFOEVGOTAgLyogRGVkaWNhdGVkV29y
a2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMUNBNUNEMzBFOENERTgwMDBFOEVGOTAgLyogSlNE
ZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDQTVDQTAw
RThDRDczQjAwRThFRjkwIC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDQTVDRDMw
RThDREU4MDAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDM0I3QUY0MEU5MTlDQTkwMEQ1NDA2NSAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2MDkwMUYwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0JDMjlDMEU5MUFCMEYwMDgzNTU4OCAvKiBIb3N0V2lu
ZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjIwLDYgKzE2MjI2LDcgQEAKIAkJCQlFMUE2NDNG
MjBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTEwODIyNEIwRUMzMTUzQTAwRTkzOTUzIC8qIFdvcmtlclRhc2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUxNDc5OUE3MEVDREUzQTQwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdp
bmdQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODA4NiwxMCArMTgwOTMsMTAgQEAKIAkJCQk5
MzUwRTcwRDBFODc1MDBCMDAxODlGRkYgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0M0Mzg3ODBFODg2Q0M3MDA1MzNERDUgLyogSlNIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjQ0MUM0MEU4QjY1RDAwMDU1MzIw
RiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzhCRTVEMEU4QkQxNUEw
MDY0Q0I3RCAvKiBKU0RlZGljYXRlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUNB
NUNBNTBFOENENzg1MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUNBNUNENjBFOENERUU5MDBFOEVGOTAgLyogSlNE
ZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUM4QkU1
RDBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFD
QTVDQTUwRThDRDc4NTAwRThFRjkwIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTFDQTVDRDYwRThDREVFOTAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQjdBRjMwRTkxOUNBOTAwRDU0MDY1IC8qIEpTRXZl
bnRUYXJnZXROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0I3QjIxMEU5MUFBRjQwMEQ1
NDA2NSAvKiBKU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzYwOTAyMDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTE4MTMwLDYgKzE4MTM3LDcgQEAKIAkJCQlFMUE2NDNGRDBFQzA5N0EwMDA3Nzk2Njgg
LyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTA4MjI0
RjBFQzMxNTY3MDBFOTM5NTMgLyogV29ya2VyVGFzay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ3MjM4MzBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUUxNDc5OUI0MEVDREU5RDgwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHJldmlzaW9uIDM4Mzg3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpT
QXVkaW9Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTRXZlbnQu
aCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKQEAgLTQ3LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU05vZGUuaCIK
ICNpbmNsdWRlICJKU09wdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXb3JrZXJDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgpAQCAtNDU2LDcgKzQ1Niw3IEBAIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVj
U3RhdGUKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4
ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcj4oZXhlYyk7CisgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTV29ya2VyQ29uc3RydWN0b3I+KGV4ZWMpOwogI2Vsc2UKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAz
ODM4NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiSlNEZWRpY2F0
ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIgotCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVk
ZSAiSlNET01XaW5kb3dDdXN0b20uaCIKLSNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlci5oIgot
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IENs
YXNzSW5mbyBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJEZWRpY2F0
ZWRXb3JrZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKLQotSlNEZWRpY2F0ZWRXb3JrZXJDb25z
dHJ1Y3Rvcjo6SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCi0g
ICAgOiBET01PYmplY3QoSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCi17
Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4
ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKLX0KLQotc3RhdGljIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3REZWRpY2F0ZWRXb3JrZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgp
ID09IDApCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKTsKLQotICAgIFVTdHJpbmcgc2NyaXB0VVJMID0gYXJncy5hdChl
eGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7Ci0KLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNE
T01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpOwotICAgIAotICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtl
ciA9IERlZGljYXRlZFdvcmtlcjo6Y3JlYXRlKHNjcmlwdFVSTCwgd2luZG93LT5kb2N1bWVudCgp
LCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAgIHJldHVybiBhc09i
amVjdCh0b0pTKGV4ZWMsIHdvcmtlci5yZWxlYXNlKCkpKTsKLX0KLQotQ29uc3RydWN0VHlwZSBK
U0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERh
dGEmIGNvbnN0cnVjdERhdGEpCi17Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24g
PSBjb25zdHJ1Y3REZWRpY2F0ZWRXb3JrZXI7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3JfaAotI2Rl
ZmluZSBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yX2gKLQotI2lmIEVOQUJMRShXT1JLRVJT
KQotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ICAgIGNsYXNzIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKLQotICAgICAgICB2aXJ0dWFs
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZv
OyB9Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCi0KLSNlbmRpZiAvLyBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yX2gKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3Bw
CShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3Jr
ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlci5oIgot
Ci0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgot
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi12b2lk
IEpTRGVkaWNhdGVkV29ya2VyOjptYXJrKCkKLXsKLSAgICBET01PYmplY3Q6Om1hcmsoKTsKLQot
ICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25tZXNzYWdlKCkpKQotICAg
ICAgICBsaXN0ZW5lci0+bWFyaygpOwotCi0gICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4o
bV9pbXBsLT5vbmNsb3NlKCkpKQotICAgICAgICBsaXN0ZW5lci0+bWFyaygpOwotCi0gICAgaWYg
KEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vbmVycm9yKCkpKQotICAgICAgICBsaXN0
ZW5lci0+bWFyaygpOwotfQotCi1KU1ZhbHVlKiBKU0RlZGljYXRlZFdvcmtlcjo6Y29ubmVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgRE9NV2luZG93KiB3
aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwo
KTsKLSAgICBjb25zdCBVU3RyaW5nJiBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyk7Ci0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPmNvbm5lY3Qod2luZG93
LT5kb2N1bWVudCgpLCBtZXNzYWdlKS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMzgzODcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsMTAg
QEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAgICBnbG9i
YWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChzYXZlZEV2ZW50KTsKIAogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0
aW9ucyBpbiBub24tRG9jdW1lbnQgY29udGV4dHMuCiAgICAgICAgICAgICBpZiAoZnJhbWUpCiAg
ICAgICAgICAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPnJlcG9ydEN1cnJl
bnRFeGNlcHRpb24oZXhlYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsgLy8gRklYTUU6IFJlcG9ydCBleGNlcHRpb25zIGluIG5vbi1E
b2N1bWVudCBjb250ZXh0cy4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghcmV0
dmFsLT5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygp
KQogICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdChyZXR2YWwtPnRvU3RyaW5nKGV4
ZWMpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24g
MzgzODcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIkpTRXZlbnRUYXJnZXROb2RlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5o
IgorI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgog
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAogI2lmIEVOQUJMRShTVkcpCkBAIC03NCw2ICs3
Niw5IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudFRhcmcKICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgbWVzc2FnZVBvcnQpOwogCiAjaWYgRU5BQkxFKFdPUktFUlMpCisg
ICAgaWYgKFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpKQorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCB3b3JrZXIpOworCiAgICAgaWYgKFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSB0YXJnZXQtPnRvV29ya2VyQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gdG9KU0RP
TUdsb2JhbE9iamVjdCh3b3JrZXJDb250ZXh0KTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzODM4NykJKGZyb20g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcDozODM4
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJDb25z
dHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01XaW5k
b3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlci5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0Rl
ZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJEZWRpY2F0ZWRXb3JrZXJDb25z
dHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6SlNE
ZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBET01PYmpl
Y3QoSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCit7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFk
T25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1
Y3REZWRpY2F0ZWRXb3JrZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3Is
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKTsKKworICAgIFVTdHJpbmcgc2NyaXB0VVJMID0gYXJncy5hdChleGVjLCAwKS0+dG9T
dHJpbmcoZXhlYyk7CisKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpOworICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFJlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlciA9IERlZGljYXRl
ZFdvcmtlcjo6Y3JlYXRlKHNjcmlwdFVSTCwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4
ZWMsIHdvcmtlci5yZWxlYXNlKCkpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU0RlZGljYXRlZFdv
cmtlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVj
dERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RE
ZWRpY2F0ZWRXb3JrZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzgz
ODcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyNyArMjcsMjcgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCi0j
aW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTV29y
a2VyQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXIuaCIKKyNpbmNs
dWRlICJKU1dvcmtlci5oIgorI2luY2x1ZGUgIldvcmtlci5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IENsYXNzSW5mbyBKU0RlZGljYXRl
ZFdvcmtlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rv
ciIsIDAsIDAsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBKU1dvcmtlckNvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJXb3JrZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKIAotSlNEZWRpY2F0ZWRXb3Jr
ZXJDb25zdHJ1Y3Rvcjo6SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCi0gICAgOiBET01PYmplY3QoSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUo
KSkpCitKU1dvcmtlckNvbnN0cnVjdG9yOjpKU1dvcmtlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKKyAgICA6IERPTU9iamVjdChKU1dvcmtlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmVJRChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKIHsK
ICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhl
YywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCi1zdGF0aWMgSlNPYmpl
Y3QqIGNvbnN0cnVjdERlZGljYXRlZFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBj
b25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU09iamVjdCogY29uc3Ry
dWN0V29ya2VyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA9PSAwKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7
CkBAIC01NywxNSArNTcsMTUgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3REZWRpY2F0ZWRX
b3JrZQogICAgIERPTVdpbmRvdyogd2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPERlZGljYXRlZFdvcmtlcj4gd29ya2VyID0gRGVkaWNhdGVkV29ya2VyOjpj
cmVhdGUoc2NyaXB0VVJMLCB3aW5kb3ctPmRvY3VtZW50KCksIGVjKTsKKyAgICBSZWZQdHI8V29y
a2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZShzY3JpcHRVUkwsIHdpbmRvdy0+ZG9jdW1lbnQo
KSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCB3b3JrZXIucmVsZWFzZSgpKSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUg
SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQorQ29uc3RydWN0VHlwZSBKU1dvcmtlckNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gICAgY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3REZWRpY2F0ZWRXb3JrZXI7Cisg
ICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXb3JrZXI7CiAgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzgzODcpCShmcm9tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oOjM4Mzg3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rv
cl9oCisjZGVmaW5lIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3JfaAorCisjaWYgRU5BQkxF
KFdPUktFUlMpCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01PYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworCisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3Ry
dWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworCisgICAgICAg
IHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZzX2luZm87IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0
b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDM4Mzg3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTRGVk
aWNhdGVkV29ya2VyQ29uc3RydWN0b3JfaAorI2lmbmRlZiBKU1dvcmtlckNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgSlNXb3JrZXJDb25zdHJ1Y3Rvcl9oCiAKICNpZiBFTkFCTEUoV09SS0VSUykKIApA
QCAtMzIsOSArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBKU0Rl
ZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CisgICAgY2xhc3Mg
SlNXb3JrZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAg
ICAgICBKU1dvcmtlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtNDgsNCArNDgsNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAotI2VuZGlmIC8v
IEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3JfaAorI2VuZGlmIC8vIEpTV29ya2VyQ29uc3Ry
dWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcAkocmV2
aXNpb24gMzgzODcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDE4ICs0NCwxNSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRQ
cm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRQcm90
b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dFBy
b3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSoganNXb3JrZXJDb250
ZXh0UHJvdG90eXBlRnVuY3Rpb25EaXNwYXRjaEV2ZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dExvY2F0
aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
LUpTVmFsdWUqIGpzV29ya2VyQ29udGV4dE9uY29ubmVjdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci12b2lkIHNldEpTV29ya2VyQ29udGV4dE9u
Y29ubmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKLUpTVmFsdWUqIGpzV29y
a2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKLXZvaWQgc2V0SlNXb3JrZXJDb250ZXh0TWVzc2FnZUNoYW5u
ZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1KU1ZhbHVlKiBqc1dvcmtlckNv
bnRleHRNZXNzYWdlUG9ydChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRPbm1lc3NhZ2UoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwordm9pZCBzZXRKU1dv
cmtlckNvbnRleHRPbm1lc3NhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7CiB2
b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VFdmVudChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqKTsKIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VFdmVudChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci12b2lkIHNldEpT
V29ya2VyQ29udGV4dE1lc3NhZ2VQb3J0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSop
OwogSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24oRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogdm9pZCBzZXRKU1dvcmtlckNv
bnRleHRXb3JrZXJMb2NhdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKIApA
QCAtNjUsMjUgKzYyLDE3IEBAIHZvaWQgc2V0SlNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24o
RXgKIEBiZWdpbiBKU1dvcmtlckNvbnRleHRQcm90b3R5cGVUYWJsZQogICBhZGRFdmVudExpc3Rl
bmVyICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVu
dExpc3RlbmVyICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMKICAgcmVtb3ZlRXZl
bnRMaXN0ZW5lciAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uUmVt
b3ZlRXZlbnRMaXN0ZW5lciAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAzCi0gIGRpc3Bh
dGNoRXZlbnQgICAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlv
bkRpc3BhdGNoRXZlbnQgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAyCi0jICBj
bG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVu
Y3Rpb25DbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAK
LSMgIE1lc3NhZ2VQb3J0IG1ldGhvZHM/CisgIGRpc3BhdGNoRXZlbnQgICAgICAgICAgICAgICAg
ICBqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQgICAgICAgICAg
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgorICBwb3N0TWVzc2FnZSAgICAgICAgICAgICAg
ICAgICAganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSAgICAgICAg
ICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgogQGVuZAogKi8KIAogLyoKIEBiZWdpbiBK
U1dvcmtlckNvbnRleHRUYWJsZQogICBsb2NhdGlvbiAgICAgICAgICAgICAgICAgICAgICBqc1dv
cmtlckNvbnRleHRMb2NhdGlvbiAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSMgIG9u
Y2xvc2UgICAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dE9uY2xvc2UgICAgICAg
ICAgICAgRG9udERlbGV0ZQotICBvbmNvbm5lY3QgICAgICAgICAgICAgICAgICAgICBqc1dvcmtl
ckNvbnRleHRPbmNvbm5lY3QgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0jICBvbm1l
c3NhZ2UgYW5kIG90aGVyIE1lc3NhZ2VQb3J0IGF0dHJpYnV0ZXM/Ci0jICBuYXZpZ2F0b3ItbGlr
ZSBvYmplY3QgZm9yIGJyb3dzZXIgc25pZmZpbmc/Ci0gIE1lc3NhZ2VDaGFubmVsICAgICAgICAg
ICAgICAgIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsICAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKKyAgb25tZXNzYWdlICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0T25t
ZXNzYWdlICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBNZXNzYWdlRXZlbnQgICAg
ICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRNZXNzYWdlRXZlbnQgICAgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi0gIE1lc3NhZ2VQb3J0ICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29u
dGV4dE1lc3NhZ2VQb3J0ICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKICAgV29ya2VyTG9j
YXRpb24gICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24gICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotIyAgWE1MSHR0cFJlcXVlc3QgICAgICAgICAgICAgICAganNX
b3JrZXJDb250ZXh0WE1MSHR0cFJlcXVlc3QgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotIyAg
RGF0YWJhc2UKIEBlbmQKICovCiAKQEAgLTEyNSw3ICsxMTQsNyBAQCB2b2lkIEpTV29ya2VyQ29u
dGV4dDo6bWFyaygpCiAKICAgICBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKmdsb2JhbERh
dGEoKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIGlmIChKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcio+KG1faW1wbC0+b25jb25uZWN0KCkpKQorICAgIGlmIChKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcio+KG1faW1wbC0+b25tZXNzYWdlKCkpKQogICAgICAgICBsaXN0ZW5lci0+bWFyaygpOwog
CiAgICAgdHlwZWRlZiBXb3JrZXJDb250ZXh0OjpFdmVudExpc3RlbmVyc01hcCBFdmVudExpc3Rl
bmVyc01hcDsKQEAgLTE2MSw2ICsxNTAsMTcgQEAgYm9vbCBKU1dvcmtlckNvbnRleHQ6OmdldE93
blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNXb3JrZXJDb250
ZXh0LCBCYXNlPihleGVjLCBnZXRKU1dvcmtlckNvbnRleHRUYWJsZShleGVjKSwgdGhpcywgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAorSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0UHJvdG90eXBl
RnVuY3Rpb25Qb3N0TWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc1ZhbHVlLT5p
c09iamVjdCgmSlNXb3JrZXJDb250ZXh0OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IHN0YXRpY19jYXN0PEpTV29ya2VyQ29udGV4dCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwor
ICAgIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhl
eGVjKTsKKworICAgIHdvcmtlckNvbnRleHQtPmltcGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4
dFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLT5pc09iamVjdCgmSlNXb3JrZXJDb250ZXh0OjpzX2luZm8pKQpAQCAtMjA1
LDI4ICsyMDUsMjMgQEAgSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0TG9jYXRpb24oSlNDOjpFeAog
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcC0+bG9jYXRpb24oKSk7CiB9CiAKLUpTVmFsdWUqIGpz
V29ya2VyQ29udGV4dE9uY29ubmVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIGpzV29ya2VyQ29udGV4
dE9ubWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBXb3JrZXJDb250ZXh0KiBpbXAgPSBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4oc3RhdGljX2Nhc3Q8SlNXb3JrZXJDb250ZXh0Kj4oYXNPYmpl
Y3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSk7Ci0gICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyKj4oaW1wLT5vbmNvbm5lY3QoKSkpIHsKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIq
PihpbXAtPm9ubWVzc2FnZSgpKSkgewogICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2Jq
ID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCiAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJP
Ymo7CiAgICAgfQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotdm9pZCBzZXRKU1dvcmtlckNv
bnRleHRPbmNvbm5lY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNW
YWx1ZSogdmFsdWUpCit2b2lkIHNldEpTV29ya2VyQ29udGV4dE9ubWVzc2FnZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBXb3Jr
ZXJDb250ZXh0KiBpbXAgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc3RhdGljX2Nhc3Q8
SlNXb3JrZXJDb250ZXh0Kj4odGhpc09iamVjdCktPmltcGwoKSk7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47
Ci0gICAgaW1wLT5zZXRPbmNvbm5lY3QoZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVhdGVKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOwotfQotCi1KU1ZhbHVlKiBq
c1dvcmtlckNvbnRleHRNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8
SlNXb3JrZXJDb250ZXh0Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOworICAgIGltcC0+
c2V0T25tZXNzYWdlKGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRydWUpKTsKIH0KIAogSlNWYWx1ZSoganNXb3JrZXJDb250
ZXh0TWVzc2FnZUV2ZW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTIzNCwxMSArMjI5LDYgQEAgSlNWYWx1ZSoganNXb3Jr
ZXJDb250ZXh0TWVzc2FnZUV2ZW50KEV4ZQogICAgIHJldHVybiBKU01lc3NhZ2VFdmVudDo6Z2V0
Q29uc3RydWN0b3IoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VQ
b3J0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpCi17Ci0gICAgcmV0dXJuIEpTTWVzc2FnZVBvcnQ6OmdldENvbnN0cnVjdG9yKGV4ZWMpOwot
fQotCiBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRXb3JrZXJMb2NhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVy
biBKU1dvcmtlckxvY2F0aW9uOjpnZXRDb25zdHJ1Y3RvcihleGVjKTsKQEAgLTI2MSwxOSArMjUx
LDkgQEAgYm9vbCBKU1dvcmtlckNvbnRleHRQcm90b3R5cGU6OmdldE93blBybwogICAgIHJldHVy
biBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIGdldEpTV29ya2VyQ29udGV4
dFByb3RvdHlwZVRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12
b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSopCi17Ci0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gb3ZlcnJpZGUgcHV0
IGZvciBnbG9iYWwgY29uc3RydWN0b3JzLCBsaWtlIEpTRE9NV2luZG93QmFzZSBkb2VzPwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3Nh
Z2VFdmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKQogewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VQb3J0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopCi17CisgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gb3ZlcnJpZGUgcHV0IGZvciBnbG9iYWwgY29uc3RydWN0b3JzLCBsaWtlIEpTRE9NV2lu
ZG93QmFzZSBkb2VzPwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzgzODcpCShmcm9tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3BwOjM4Mzg3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1
ZGUgIkpTRGVkaWNhdGVkV29ya2VyLmgiCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisj
aW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgSlNEZWRpY2F0ZWRXb3JrZXI6Om1hcmsoKQorewor
ICAgIERPTU9iamVjdDo6bWFyaygpOworCisgICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4o
bV9pbXBsLT5vbm1lc3NhZ2UoKSkpCisgICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7CisKKyAgICBp
ZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uY2xvc2UoKSkpCisgICAgICAgIGxp
c3RlbmVyLT5tYXJrKCk7CisKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwt
Pm9uZXJyb3IoKSkpCisgICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7Cit9CisKK0pTVmFsdWUqIEpT
RGVkaWNhdGVkV29ya2VyOjpjb25uZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpOworICAgIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2Ug
PSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKKworICAgIHJldHVybiB0b0pTKGV4
ZWMsIGltcGwoKS0+Y29ubmVjdCh3aW5kb3ctPmRvY3VtZW50KCksIG1lc3NhZ2UpLmdldCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzgz
ODcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMzkgKzI3LDU5IEBACiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotI2luY2x1
ZGUgIkpTRGVkaWNhdGVkV29ya2VyLmgiCisjaW5jbHVkZSAiSlNXb3JrZXIuaCIKIAotI2luY2x1
ZGUgIkRlZGljYXRlZFdvcmtlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
SlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKLSNp
bmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi12b2lkIEpTRGVkaWNhdGVk
V29ya2VyOjptYXJrKCkKK3ZvaWQgSlNXb3JrZXI6Om1hcmsoKQogewogICAgIERPTU9iamVjdDo6
bWFyaygpOwogCiAgICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vbm1lc3Nh
Z2UoKSkpCiAgICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7CiAKLSAgICBpZiAoSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIqPihtX2ltcGwtPm9uY2xvc2UoKSkpCi0gICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7
Ci0KICAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uZXJyb3IoKSkpCiAg
ICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7CisKKyAgICB0eXBlZGVmIFdvcmtlcjo6RXZlbnRMaXN0
ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBXb3JrZXI6Okxpc3RlbmVy
VmVjdG9yIExpc3RlbmVyVmVjdG9yOworICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3Rl
bmVycyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBmb3IgKEV2ZW50TGlzdGVuZXJz
TWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRlciAh
PSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CisgICAgICAgIGZvciAoTGlzdGVu
ZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsgdmVj
SXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikgeworICAgICAgICAgICAg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqPih2ZWNJdGVyLT5nZXQoKSk7CisgICAgICAgICAgICBsaXN0
ZW5lci0+bWFyaygpOworICAgICAgICB9CisgICAgfQogfQogCi1KU1ZhbHVlKiBKU0RlZGljYXRl
ZFdvcmtlcjo6Y29ubmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKLSAgICBjb25zdCBVU3RyaW5n
JiBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CisgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKKyAgICBpZiAoIWxpc3RlbmVy
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVhc2Uo
KSwgYXJncy5hdChleGVjLCAyKS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKK30KIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+Y29ubmVjdCh3aW5k
b3ctPmRvY3VtZW50KCksIG1lc3NhZ2UpLmdldCgpKTsKK0pTVmFsdWUqIEpTV29ya2VyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sK
KyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVj
dChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmpl
Y3QpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkpOworICAgIGlmICghbGlzdGVuZXIpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0
ZW5lcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQo
ZXhlYywgMiktPnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RlZGljYXRlZFdv
cmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmNwcAko
cmV2aXNpb24gMzgzODcpCisrKyBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2Vy
LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIK
LSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRl
ICJXb3JrZXJUYXNrLmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXb3JrZXJUaHJl
YWRTY3JpcHRMb2FkVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBXb3Jr
ZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtl
cikKLSAgICAgICAgOiBtX3dvcmtlcih3b3JrZXIpCi0gICAgewotICAgICAgICBBU1NFUlQobV93
b3JrZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQotICAg
IHsKLSAgICAgICAgbV93b3JrZXItPnN0YXJ0TG9hZCgpOwotICAgICAgICBkZWxldGUgdGhpczsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyPiBtX3dvcmtlcjsKLX07Ci0KLWNs
YXNzIFdvcmtlckNvbm5lY3RUYXNrIDogcHVibGljIFdvcmtlclRhc2sgewotcHVibGljOgotICAg
IFdvcmtlckNvbm5lY3RUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNz
YWdlUG9ydD4gcG9ydCkKLSAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAg
ICAgICwgbV9wb3J0KHBvcnQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzayhXb3JrZXJDb250ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgbV9wb3J0LT5h
dHRhY2hUb0NvbnRleHQoY29udGV4dCk7Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBN
ZXNzYWdlRXZlbnQ6OmNyZWF0ZShtX21lc3NhZ2UsICIiLCAiIiwgMCwgbV9wb3J0KTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+b25jb25uZWN0KCkpIHsKLSAgICAgICAgICAgIGV2dC0+c2V0VGFy
Z2V0KGNvbnRleHQpOwotICAgICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGNvbnRleHQp
OwotICAgICAgICAgICAgY29udGV4dC0+b25jb25uZWN0KCktPmhhbmRsZUV2ZW50KGV2dC5nZXQo
KSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgICAgIGNvbnRleHQtPmRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOwotICAgICAg
ICBBU1NFUlQoIWVjKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbWVzc2FnZTsK
LSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fcG9ydDsKLX07Ci0KLURlZGljYXRlZFdvcmtlcjo6
RGVkaWNhdGVkV29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQot
ICAgICwgbV90aHJlYWQoMCkKLXsKLSAgICBtX3NjcmlwdFVSTCA9IGRvY3VtZW50LT5jb21wbGV0
ZVVSTCh1cmwpOwotICAgIGlmICghbV9zY3JpcHRVUkwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1f
c2NyaXB0VVJMKS5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIqIHRpbWVy
ID0gbmV3IFdvcmtlclRocmVhZFNjcmlwdExvYWRUaW1lcih0aGlzKTsKLSAgICB0aW1lci0+c3Rh
cnRPbmVTaG90KDApOwotfQotCi1EZWRpY2F0ZWRXb3JrZXI6On5EZWRpY2F0ZWRXb3JrZXIoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci19Ci0KLURvY3VtZW50KiBEZWRpY2F0ZWRX
b3JrZXI6OmRvY3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0RvY3VtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+
IERlZGljYXRlZFdvcmtlcjo6Y29ubmVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG90aGVyUG9ydCA9IE1lc3NhZ2VQb3J0Ojpj
cmVhdGUoMCk7Ci0gICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlKHBvcnQuZ2V0KCksIG90aGVyUG9y
dC5nZXQoKSk7Ci0gICAgaWYgKG1fdGhyZWFkKQotICAgICAgICBtX3RocmVhZC0+bWVzc2FnZVF1
ZXVlKCkuYXBwZW5kKG5ldyBXb3JrZXJDb25uZWN0VGFzayhtZXNzYWdlLCBvdGhlclBvcnQpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcXVldWVkRWFybHlUYXNrcy5hcHBlbmQobmV3IFdvcmtlckNv
bm5lY3RUYXNrKG1lc3NhZ2UsIG90aGVyUG9ydCkpOwotCi0gICAgcmV0dXJuIHBvcnQ7Ci19Ci0K
LXZvaWQgRGVkaWNhdGVkV29ya2VyOjpjbG9zZSgpCi17Ci0gICAgLy8gTm90IGltcGxlbWVudGVk
LgotfQotCi12b2lkIERlZGljYXRlZFdvcmtlcjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiAv
Km1lc3NhZ2UqLywgTWVzc2FnZVBvcnQqIC8qcG9ydCovKQotewotICAgIC8vIE5vdCBpbXBsZW1l
bnRlZC4KLX0KLQotdm9pZCBEZWRpY2F0ZWRXb3JrZXI6OnN0YXJ0TG9hZCgpCi17Ci0gICAgLy8g
VGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGFscmVhZHkuCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBleHBsaWNpdGx5IGNoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGhhcyBi
ZWVuIGRldGFjaGVkLCBhbmQgY2FuY2VsIGxvYWRpbmcgaW4gdGhhdCBjYXNlPwotICAgIGlmICgh
ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1
bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVSTCwgZG9jdW1lbnQo
KS0+Y2hhcnNldCgpKTsKLQotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7ICAvLyBUaGUgd29ya2VyIGNvbnRleHQgZG9lcyBub3QgZXhp
c3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVjaCBlbnN1cmUgdGhhdCB0aGUgd29ya2VyIG9iamVj
dCBpcyBub3QgY29sbGVjdGVkLCBhcyB3ZWxsIGFzIGl0cyBldmVudCBsaXN0ZW5lcnMuCi0gICAg
ICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKLX0KLQotdm9pZCBEZWRpY2F0ZWRXb3Jr
ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBBU1NF
UlQocmVzb3VyY2UgPT0gbV9jYWNoZWRTY3JpcHQuZ2V0KCkpOwotICAgIGlmIChtX2NhY2hlZFNj
cmlwdC0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwot
ICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKLSAgICB9IGVsc2UgIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdoZW4gY2FuIHdlIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCk/IEN1cnJlbnRs
eSwgd29ya2VyIG9iamVjdHMgYXJlIG5ldmVyIGNvbGxlY3RlZCwgYW5kIHRocmVhZHMgbmV2ZXIg
ZXhpdC4KLQotICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJl
YWQ6OmNyZWF0ZShtX3NjcmlwdFVSTCwgbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLCB0aGlzKTsK
LSAgICAgICAgbV90aHJlYWQgPSB0aHJlYWQuZ2V0KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgdGFz
a0NvdW50ID0gbV9xdWV1ZWRFYXJseVRhc2tzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRhc2tDb3VudDsgKytpKQotICAgICAgICAgICAgbV90aHJlYWQtPm1lc3Nh
Z2VRdWV1ZSgpLmFwcGVuZChtX3F1ZXVlZEVhcmx5VGFza3NbaV0pOwotCi0gICAgICAgIG1fdGhy
ZWFkLT5zdGFydCgpOwotICAgIH0KLQotICAgIG1fcXVldWVkRWFybHlUYXNrcy5jbGVhcigpOwot
Ci0gICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2NhY2hlZFNj
cmlwdCA9IDA7Ci19Ci0KLXZvaWQgRGVkaWNhdGVkV29ya2VyOjpkaXNwYXRjaEVycm9yRXZlbnQo
KQotewotICAgIGlmIChtX29uRXJyb3JMaXN0ZW5lcikgewotICAgICAgICBSZWZQdHI8RXZlbnQ+
IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVl
KTsKLSAgICAgICAgLy8gRGVkaWNhdGVkV29ya2VyIGlzIG5vdCBhbiBFdmVudFRhcmdldCwgc28g
dGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0IHJlbWFpbiBudWxsLgotICAgICAgICBtX29uRXJyb3JM
aXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0LnJlbGVhc2UoKS5nZXQoKSwgdHJ1ZSk7Ci0gICAgfQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
SW5kZXg6IFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RlZGljYXRlZFdvcmtlci5oCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9t
L0RlZGljYXRlZFdvcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
Ci0gKi8KLQotI2lmbmRlZiBEZWRpY2F0ZWRXb3JrZXJfaAotI2RlZmluZSBEZWRpY2F0ZWRXb3Jr
ZXJfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJl
c291cmNlOwotICAgIGNsYXNzIENhY2hlZFNjcmlwdDsKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAg
ICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIGNsYXNzIE1lc3NhZ2VQb3J0Owot
ICAgIGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBXb3JrZXJUYXNrOwotICAgIGNsYXNzIFdvcmtl
clRocmVhZDsKLQotICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICBjbGFzcyBE
ZWRpY2F0ZWRXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEZWRpY2F0ZWRXb3JrZXI+LCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlcj4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGVkaWNhdGVkV29ya2VyKHVybCwgZG9jdW1lbnQsIGVj
KSk7IH0KLSAgICAgICAgfkRlZGljYXRlZFdvcmtlcigpOwotCi0gICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0OwotCi0gICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IGNvbm5l
Y3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAg
ICAgIHZvaWQgY2xvc2UoKTsKLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0ID0gMCk7Ci0KLSAgICAgICAgdm9pZCBzZXRPbm1l
c3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNz
YWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
bWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KLQot
ICAgICAgICB2b2lkIHNldE9uY2xvc2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKSB7IG1fb25DbG9zZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBF
dmVudExpc3RlbmVyKiBvbmNsb3NlKCkgY29uc3QgeyByZXR1cm4gbV9vbkNsb3NlTGlzdGVuZXIu
Z2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsg
fQotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVy
cm9yTGlzdGVuZXIuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFz
cyBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXI7Ci0KLSAgICAgICAgRGVkaWNhdGVkV29ya2Vy
KGNvbnN0IFN0cmluZyYsIERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgICAgIHZv
aWQgc3RhcnRMb2FkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSopOwotCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0KLSAg
ICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKLQotICAgICAgICBXb3JrZXJUaHJlYWQqIG1fdGhy
ZWFkOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxpc3RlbmVy
OwotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkNsb3NlTGlzdGVuZXI7Ci0gICAg
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5lcjsKLQotICAgICAgICBW
ZWN0b3I8UmVmUHRyPFdvcmtlclRhc2s+ID4gbV9xdWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBh
cmUgcXVldWVkIGhlcmUgdW50aWwgdGhlcmUncyBhIHRocmVhZCBvYmplY3QgY3JlYXRlZC4KLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKLQotI2VuZGlmIC8vIERlZGljYXRlZFdvcmtlcl9oCkluZGV4OiBXZWJDb3JlL2RvbS9EZWRp
Y2F0ZWRXb3JrZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtl
ci5pZGwJKHJldmlzaW9uIDM4Mzg3KQorKysgV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLW1vZHVsZSB0
aHJlYWRzIHsKLQotICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uLCBDb25kaXRpb25h
bD1XT1JLRVJTXSBEZWRpY2F0ZWRXb3JrZXIgewotCi0gICAgICAgIC8vIFRoZXNlIGFsc28gdXNl
ZCBmb3Igc2hhcmVkIHdvcmtlcnMuCi0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
Y2xvc2U7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0KLSAgICAg
ICAgLy8gVGhlc2UgYXJlIG9ubHkgZm9yIGRlZGljYXRlZCB3b3JrZXJzLgotICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7Ci0gICAgICAgIFtDdXN0b21dIE1lc3NhZ2VQ
b3J0IGNvbm5lY3QoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOwotICAgICAgICB2b2lkIGNsb3NlKCk7
Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRp
b25hbF0gTWVzc2FnZVBvcnQgcG9ydCk7Ci0KLSAgICB9OwotCi19CkluZGV4OiBXZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgTWVzc2FnZVBvcnQqIEV2ZW50VGFyZ2V0Ojp0
b01lc3NhZ2VQb3J0KAogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCitXb3JrZXIqIEV2ZW50VGFy
Z2V0Ojp0b1dvcmtlcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIFdvcmtlckNvbnRleHQqIEV2
ZW50VGFyZ2V0Ojp0b1dvcmtlckNvbnRleHQoKQogewogICAgIHJldHVybiAwOwpJbmRleDogV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5oCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOworICAgIGNsYXNzIFdvcmtlcjsK
ICAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogICAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0OwogICAg
IGNsYXNzIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOwpAQCAtNjcsNiArNjgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudEluc3RhbmNlKiB0b1NWR0VsZW1l
bnRJbnN0YW5jZSgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgICAgIHZpcnR1
YWwgV29ya2VyKiB0b1dvcmtlcigpOwogICAgICAgICB2aXJ0dWFsIFdvcmtlckNvbnRleHQqIHRv
V29ya2VyQ29udGV4dCgpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBzdHJ1
Y3QgUGVyZm9ybVRhc2tDb250ZXh0IHsKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgLy8gVGhlIGNvbnRleHQgc2hv
dWxkIGV4aXN0IHVudGlsIHRhc2sgZXhlY3V0aW9uLgogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrOwogfTsKIAogc3RhdGljIHZvaWQgcGVyZm9ybVRhc2sodm9p
ZCogY3R4KQogewogICAgIFBlcmZvcm1UYXNrQ29udGV4dCogcHRjdHggPSByZWludGVycHJldF9j
YXN0PFBlcmZvcm1UYXNrQ29udGV4dCo+KGN0eCk7Ci0gICAgcHRjdHgtPnRhc2stPnBlcmZvcm1U
YXNrKHB0Y3R4LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKKyAgICBwdGN0eC0+dGFz
ay0+cGVyZm9ybVRhc2socHRjdHgtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGRlbGV0
ZSBwdGN0eDsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vV29ya2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Xb3JrZXIuY3BwCShyZXZpc2lvbiAzODM4NykJKGZyb20gV2ViQ29yZS9k
b20vRGVkaWNhdGVkV29ya2VyLmNwcDozODM4NykKKysrIFdlYkNvcmUvZG9tL1dvcmtlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRX
b3JrZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2
ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldvcmtlclRhc2suaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdvcmtl
clRocmVhZFNjcmlwdExvYWRUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAg
IFdvcmtlclRocmVhZFNjcmlwdExvYWRUaW1lcihQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlcj4g
d29ya2VyKQorICAgICAgICA6IG1fd29ya2VyKHdvcmtlcikKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3dvcmtlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgp
CisgICAgeworICAgICAgICBtX3dvcmtlci0+c3RhcnRMb2FkKCk7CisgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgIH0KKworICAgIFJlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IG1fd29ya2VyOworfTsK
KworY2xhc3MgV29ya2VyQ29ubmVjdFRhc2sgOiBwdWJsaWMgV29ya2VyVGFzayB7CitwdWJsaWM6
CisgICAgV29ya2VyQ29ubmVjdFRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkK
KyAgICAgICAgLCBtX3BvcnQocG9ydCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKFdvcmtlckNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBtX3Bv
cnQtPmF0dGFjaFRvQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2
dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1fbWVzc2FnZSwgIiIsICIiLCAwLCBtX3BvcnQpOwor
CisgICAgICAgIGlmIChjb250ZXh0LT5vbmNvbm5lY3QoKSkgeworICAgICAgICAgICAgZXZ0LT5z
ZXRUYXJnZXQoY29udGV4dCk7CisgICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoY29u
dGV4dCk7CisgICAgICAgICAgICBjb250ZXh0LT5vbmNvbm5lY3QoKS0+aGFuZGxlRXZlbnQoZXZ0
LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgY29udGV4dC0+ZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7Cisg
ICAgICAgIEFTU0VSVCghZWMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tZXNz
YWdlOworICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9wb3J0OworfTsKKworRGVkaWNhdGVkV29y
a2VyOjpEZWRpY2F0ZWRXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIERvY3VtZW50KiBkb2N1bWVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRo
aXMpCisgICAgLCBtX3RocmVhZCgwKQoreworICAgIG1fc2NyaXB0VVJMID0gZG9jdW1lbnQtPmNv
bXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFtX3NjcmlwdFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUobV9zY3JpcHRVUkwpLmdldCgpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdvcmtlclRocmVhZFNjcmlwdExvYWRUaW1lciog
dGltZXIgPSBuZXcgV29ya2VyVGhyZWFkU2NyaXB0TG9hZFRpbWVyKHRoaXMpOworICAgIHRpbWVy
LT5zdGFydE9uZVNob3QoMCk7Cit9CisKK0RlZGljYXRlZFdvcmtlcjo6fkRlZGljYXRlZFdvcmtl
cigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworRG9jdW1lbnQqIERlZGlj
YXRlZFdvcmtlcjo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKK30KKworUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gRGVkaWNhdGVkV29ya2VyOjpjb25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBSZWZQ
dHI8TWVzc2FnZVBvcnQ+IHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOworICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gb3RoZXJQb3J0ID0gTWVzc2FnZVBv
cnQ6OmNyZWF0ZSgwKTsKKyAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUocG9ydC5nZXQoKSwgb3Ro
ZXJQb3J0LmdldCgpKTsKKyAgICBpZiAobV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkLT5tZXNz
YWdlUXVldWUoKS5hcHBlbmQobmV3IFdvcmtlckNvbm5lY3RUYXNrKG1lc3NhZ2UsIG90aGVyUG9y
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChuZXcgV29y
a2VyQ29ubmVjdFRhc2sobWVzc2FnZSwgb3RoZXJQb3J0KSk7CisKKyAgICByZXR1cm4gcG9ydDsK
K30KKwordm9pZCBEZWRpY2F0ZWRXb3JrZXI6OmNsb3NlKCkKK3sKKyAgICAvLyBOb3QgaW1wbGVt
ZW50ZWQuCit9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyOjpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIC8qbWVzc2FnZSovLCBNZXNzYWdlUG9ydCogLypwb3J0Ki8pCit7CisgICAgLy8gTm90IGlt
cGxlbWVudGVkLgorfQorCit2b2lkIERlZGljYXRlZFdvcmtlcjo6c3RhcnRMb2FkKCkKK3sKKyAg
ICAvLyBUaGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeS4KKyAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGV4cGxpY2l0bHkgY2hlY2sgd2hldGhlciB0aGUgZG9jdW1lbnQg
aGFzIGJlZW4gZGV0YWNoZWQsIGFuZCBjYW5jZWwgbG9hZGluZyBpbiB0aGF0IGNhc2U/CisgICAg
aWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhY2hlZFNjcmlwdCA9
IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBkb2N1
bWVudCgpLT5jaGFyc2V0KCkpOworCisgICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7CisgICAgICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5v
dCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdWNoIGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIg
b2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4K
KyAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOworfQorCit2b2lkIERlZGljYXRl
ZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAg
IEFTU0VSVChyZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdC5nZXQoKSk7CisgICAgaWYgKG1fY2Fj
aGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50
KCk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIH0gZWxzZSAgewor
ICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gd2UgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKT8gQ3Vy
cmVudGx5LCB3b3JrZXIgb2JqZWN0cyBhcmUgbmV2ZXIgY29sbGVjdGVkLCBhbmQgdGhyZWFkcyBu
ZXZlciBleGl0LgorCisgICAgICAgIFJlZlB0cjxXb3JrZXJUaHJlYWQ+IHRocmVhZCA9IFdvcmtl
clRocmVhZDo6Y3JlYXRlKG1fc2NyaXB0VVJMLCBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCksIHRo
aXMpOworICAgICAgICBtX3RocmVhZCA9IHRocmVhZC5nZXQoKTsKKworICAgICAgICB1bnNpZ25l
ZCB0YXNrQ291bnQgPSBtX3F1ZXVlZEVhcmx5VGFza3Muc2l6ZSgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGFza0NvdW50OyArK2kpCisgICAgICAgICAgICBtX3RocmVhZC0+
bWVzc2FnZVF1ZXVlKCkuYXBwZW5kKG1fcXVldWVkRWFybHlUYXNrc1tpXSk7CisKKyAgICAgICAg
bV90aHJlYWQtPnN0YXJ0KCk7CisgICAgfQorCisgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmNsZWFy
KCk7CisKKyAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fY2Fj
aGVkU2NyaXB0ID0gMDsKK30KKwordm9pZCBEZWRpY2F0ZWRXb3JrZXI6OmRpc3BhdGNoRXJyb3JF
dmVudCgpCit7CisgICAgaWYgKG1fb25FcnJvckxpc3RlbmVyKSB7CisgICAgICAgIFJlZlB0cjxF
dmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2Us
IHRydWUpOworICAgICAgICAvLyBEZWRpY2F0ZWRXb3JrZXIgaXMgbm90IGFuIEV2ZW50VGFyZ2V0
LCBzbyB0YXJnZXQgYW5kIGN1cnJlbnRUYXJnZXQgcmVtYWluIG51bGwuCisgICAgICAgIG1fb25F
cnJvckxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQucmVsZWFzZSgpLmdldCgpLCB0cnVlKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Xb3JrZXIuY3BwCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9tL1dvcmtlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4MCArMjgsMTUwIEBACiAKICNpZiBFTkFCTEUoV09S
S0VSUykKIAotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlci5oIgorI2luY2x1ZGUgIldvcmtlci5o
IgogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIK
LSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAi
V29ya2VyTWVzc2FnaW5nUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJUYXNrLmgiCiAjaW5jbHVk
ZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIgOiBwdWJs
aWMgVGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIo
UGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlcikKLSAgICAgICAgOiBtX3dvcmtlcih3
b3JrZXIpCi0gICAgewotICAgICAgICBBU1NFUlQobV93b3JrZXIpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQotICAgIHsKLSAgICAgICAgbV93b3JrZXItPnN0
YXJ0TG9hZCgpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICBSZWZQdHI8RGVk
aWNhdGVkV29ya2VyPiBtX3dvcmtlcjsKLX07Ci0KLWNsYXNzIFdvcmtlckNvbm5lY3RUYXNrIDog
cHVibGljIFdvcmtlclRhc2sgewotcHVibGljOgotICAgIFdvcmtlckNvbm5lY3RUYXNrKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLSAgICAgICAg
OiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAgICAgICwgbV9wb3J0KHBvcnQpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhXb3JrZXJDb250ZXh0KiBj
b250ZXh0KQotICAgIHsKLSAgICAgICAgbV9wb3J0LT5hdHRhY2hUb0NvbnRleHQoY29udGV4dCk7
Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtX21l
c3NhZ2UsICIiLCAiIiwgMCwgbV9wb3J0KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+b25jb25u
ZWN0KCkpIHsKLSAgICAgICAgICAgIGV2dC0+c2V0VGFyZ2V0KGNvbnRleHQpOwotICAgICAgICAg
ICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGNvbnRleHQpOwotICAgICAgICAgICAgY29udGV4dC0+
b25jb25uZWN0KCktPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGNvbnRleHQtPmRpc3BhdGNo
RXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOwotICAgICAgICBBU1NFUlQoIWVjKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbWVzc2FnZTsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+
IG1fcG9ydDsKLX07Ci0KLURlZGljYXRlZFdvcmtlcjo6RGVkaWNhdGVkV29ya2VyKGNvbnN0IFN0
cmluZyYgdXJsLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIDog
QWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQotICAgICwgbV90aHJlYWQoMCkKK1dvcmtl
cjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVudCogZG9jLCBFeGNlcHRpb25Db2Rl
JiBlYykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChkb2MsIHRoaXMpCisgICAgLCBtX21lc3NhZ2lu
Z1Byb3h5KG5ldyBXb3JrZXJNZXNzYWdpbmdQcm94eShkb2MsIHRoaXMpKQogewotICAgIG1fc2Ny
aXB0VVJMID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybCk7CisgICAgbV9zY3JpcHRVUkwgPSBk
b2MtPmNvbXBsZXRlVVJMKHVybCk7CiAgICAgaWYgKCFtX3NjcmlwdFVSTC5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUobV9zY3JpcHRVUkwpLmdldCgpKSkgeworICAgIGlmICghZG9jLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5BY2Nlc3MoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3NjcmlwdFVSTCkuZ2V0
KCkpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgV29ya2VyVGhyZWFkU2NyaXB0TG9hZFRpbWVyKiB0aW1lciA9IG5ldyBXb3JrZXJU
aHJlYWRTY3JpcHRMb2FkVGltZXIodGhpcyk7Ci0gICAgdGltZXItPnN0YXJ0T25lU2hvdCgwKTsK
KyAgICBtX2NhY2hlZFNjcmlwdCA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9z
Y3JpcHRVUkwsIGRvY3VtZW50KCktPmNoYXJzZXQoKSk7CisgICAgaWYgKCFtX2NhY2hlZFNjcmlw
dCkgeworICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4
dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdWNoIGVuc3VyZSB0aGF0IHRo
ZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxp
c3RlbmVycy4KKyAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogfQogCi1EZWRp
Y2F0ZWRXb3JrZXI6On5EZWRpY2F0ZWRXb3JrZXIoKQorV29ya2VyOjp+V29ya2VyKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOyAvLyBUaGUgY29udGV4dCBpcyBwcm90ZWN0ZWQgYnkgbWVzc2FnaW5nIHByb3h5LCBz
byBpdCBjYW5ub3QgYmUgZGVzdHJveWVkIHdoaWxlIGEgV29ya2VyIGV4aXN0cy4KKyAgICBtX21l
c3NhZ2luZ1Byb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotRG9jdW1lbnQqIERl
ZGljYXRlZFdvcmtlcjo6ZG9jdW1lbnQoKSBjb25zdAorRG9jdW1lbnQqIFdvcmtlcjo6ZG9jdW1l
bnQoKSBjb25zdAogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9j
dW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gRGVkaWNhdGVkV29y
a2VyOjpjb25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyOjpwb3N0TWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0ID0gTWVz
c2FnZVBvcnQ6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBSZWZQdHI8TWVz
c2FnZVBvcnQ+IG90aGVyUG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoMCk7Ci0gICAgTWVzc2Fn
ZVBvcnQ6OmVudGFuZ2xlKHBvcnQuZ2V0KCksIG90aGVyUG9ydC5nZXQoKSk7Ci0gICAgaWYgKG1f
dGhyZWFkKQotICAgICAgICBtX3RocmVhZC0+bWVzc2FnZVF1ZXVlKCkuYXBwZW5kKG5ldyBXb3Jr
ZXJDb25uZWN0VGFzayhtZXNzYWdlLCBvdGhlclBvcnQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
cXVldWVkRWFybHlUYXNrcy5hcHBlbmQobmV3IFdvcmtlckNvbm5lY3RUYXNrKG1lc3NhZ2UsIG90
aGVyUG9ydCkpOwotCi0gICAgcmV0dXJuIHBvcnQ7CisgICAgbV9tZXNzYWdpbmdQcm94eS0+cG9z
dE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2FnZSk7CiB9CiAKLXZvaWQgRGVkaWNhdGVkV29y
a2VyOjpjbG9zZSgpCit2b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlKQogewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KKyAgICBBU1NFUlQocmVz
b3VyY2UgPT0gbV9jYWNoZWRTY3JpcHQuZ2V0KCkpOworICAgIGlmIChtX2NhY2hlZFNjcmlwdC0+
ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgUmVmUHRyPFdvcmtlclRocmVhZD4gdGhyZWFkID0gV29ya2VyVGhyZWFkOjpj
cmVhdGUobV9zY3JpcHRVUkwsIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSwgbV9tZXNzYWdpbmdQ
cm94eSk7CisgICAgICAgIG1fbWVzc2FnaW5nUHJveHktPndvcmtlclRocmVhZENyZWF0ZWQodGhy
ZWFkKTsKKyAgICAgICAgdGhyZWFkLT5zdGFydCgpOworICAgIH0KIAotdm9pZCBEZWRpY2F0ZWRX
b3JrZXI6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgLyptZXNzYWdlKi8sIE1lc3NhZ2VQb3J0
KiAvKnBvcnQqLykKLXsKLSAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgbV9jYWNoZWRTY3Jp
cHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CisKKyAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKIH0KIAotdm9pZCBEZWRpY2F0ZWRXb3JrZXI6OnN0
YXJ0TG9hZCgpCit2b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKIHsKLSAgICAvLyBU
aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeS4KLSAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGV4cGxpY2l0bHkgY2hlY2sgd2hldGhlciB0aGUgZG9jdW1lbnQgaGFzIGJl
ZW4gZGV0YWNoZWQsIGFuZCBjYW5jZWwgbG9hZGluZyBpbiB0aGF0IGNhc2U/Ci0gICAgaWYgKCFk
b2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3Vt
ZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBkb2N1bWVudCgp
LT5jaGFyc2V0KCkpOwotCi0gICAgaWYgKG1fY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlz
dCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdWNoIGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0
IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KLSAgICAg
ICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKLSAgICAgICAgcmV0dXJuOworICAg
IFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCwgZmFsc2UsIHRydWUpOworICAgIGlmIChtX29uRXJyb3JMaXN0ZW5lcikgeworICAgICAgICBl
dnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMp
OworICAgICAgICBtX29uRXJyb3JMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0LnJlbGVhc2UoKS5n
ZXQoKSwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7
CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgV29ya2VyOjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXRlciA9PSBt
X2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVy
czsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAgICAgbV9l
dmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
IGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5i
ZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikg
eworICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxpc3RlbmVy
cy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2
ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9ICAgIAogfQogCi12b2lkIERlZGljYXRlZFdvcmtl
cjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBXb3JrZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBBU1NFUlQo
cmVzb3VyY2UgPT0gbV9jYWNoZWRTY3JpcHQuZ2V0KCkpOwotICAgIGlmIChtX2NhY2hlZFNjcmlw
dC0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAg
ICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKLSAgICB9IGVsc2UgIHsKLSAgICAgICAg
Ly8gRklYTUU6IFdoZW4gY2FuIHdlIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCk/IEN1cnJlbnRseSwg
d29ya2VyIG9iamVjdHMgYXJlIG5ldmVyIGNvbGxlY3RlZCwgYW5kIHRocmVhZHMgbmV2ZXIgZXhp
dC4KLQotICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJlYWQ6
OmNyZWF0ZShtX3NjcmlwdFVSTCwgbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLCB0aGlzKTsKLSAg
ICAgICAgbV90aHJlYWQgPSB0aHJlYWQuZ2V0KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgdGFza0Nv
dW50ID0gbV9xdWV1ZWRFYXJseVRhc2tzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhc2tDb3VudDsgKytpKQotICAgICAgICAgICAgbV90aHJlYWQtPm1lc3NhZ2VR
dWV1ZSgpLmFwcGVuZChtX3F1ZXVlZEVhcmx5VGFza3NbaV0pOwotCi0gICAgICAgIG1fdGhyZWFk
LT5zdGFydCgpOworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVu
dExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3Rl
bmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExpc3RlbmVyVmVjdG9yJiBs
aXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAh
PSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGlmICgqbGlzdGVu
ZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUo
bGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgfQotCi0gICAgbV9xdWV1ZWRFYXJseVRhc2tzLmNsZWFyKCk7Ci0KLSAg
ICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0
ID0gMDsKIH0KIAotdm9pZCBEZWRpY2F0ZWRXb3JrZXI6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiti
b29sIFdvcmtlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fb25FcnJvckxpc3RlbmVyKSB7Ci0gICAgICAgIFJl
ZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
ZmFsc2UsIHRydWUpOwotICAgICAgICAvLyBEZWRpY2F0ZWRXb3JrZXIgaXMgbm90IGFuIEV2ZW50
VGFyZ2V0LCBzbyB0YXJnZXQgYW5kIGN1cnJlbnRUYXJnZXQgcmVtYWluIG51bGwuCi0gICAgICAg
IG1fb25FcnJvckxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQucmVsZWFzZSgpLmdldCgpLCB0cnVl
KTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBFdmVu
dEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KKworICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50
TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3Rl
bmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdl
dCh0aGlzKTsKKyAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQu
Z2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1dv
cmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlci5oCShyZXZpc2lvbiAzODM4
NykJKGZyb20gV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmg6MzgzODcpCisrKyBXZWJDb3Jl
L2RvbS9Xb3JrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICov
CisKKyNpZm5kZWYgRGVkaWNhdGVkV29ya2VyX2gKKyNkZWZpbmUgRGVkaWNhdGVkV29ya2VyX2gK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKKyAgICBjbGFzcyBDYWNoZWRTY3JpcHQ7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKKyAgICBj
bGFzcyBTdHJpbmc7CisgICAgY2xhc3MgV29ya2VyVGFzazsKKyAgICBjbGFzcyBXb3JrZXJUaHJl
YWQ7CisKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisgICAgY2xhc3MgRGVkaWNh
dGVkV29ya2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RGVkaWNhdGVkV29ya2VyPiwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIHVybCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IERlZGljYXRlZFdvcmtlcih1cmwsIGRvY3VtZW50LCBlYykpOyB9
CisgICAgICAgIH5EZWRpY2F0ZWRXb3JrZXIoKTsKKworICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQoKSBjb25zdDsKKworICAgICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjb25uZWN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2
b2lkIGNsb3NlKCk7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBNZXNzYWdlUG9ydCogcG9ydCA9IDApOworCisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdl
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTWVzc2FnZUxp
c3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3Nh
Z2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CisKKyAgICAg
ICAgdm9pZCBzZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikgeyBtX29uQ2xvc2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRM
aXN0ZW5lciogb25jbG9zZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25DbG9zZUxpc3RlbmVyLmdldCgp
OyB9CisKKyAgICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAg
ICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxp
c3RlbmVyLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgV29y
a2VyVGhyZWFkU2NyaXB0TG9hZFRpbWVyOworCisgICAgICAgIERlZGljYXRlZFdvcmtlcihjb25z
dCBTdHJpbmcmLCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICB2b2lkIHN0
YXJ0TG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqKTsKKworICAgICAgICB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOworCisgICAgICAg
IEtVUkwgbV9zY3JpcHRVUkw7CisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4gbV9jYWNoZWRTY3JpcHQ7CisKKyAgICAgICAgV29ya2VyVGhyZWFkKiBtX3RocmVhZDsK
KworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKKyAg
ICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DbG9zZUxpc3RlbmVyOworICAgICAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7CisKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxXb3JrZXJUYXNrPiA+IG1fcXVldWVkRWFybHlUYXNrczsgLy8gVGFza3MgYXJlIHF1
ZXVlZCBoZXJlIHVudGlsIHRoZXJlJ3MgYSB0aHJlYWQgb2JqZWN0IGNyZWF0ZWQuCisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisK
KyNlbmRpZiAvLyBEZWRpY2F0ZWRXb3JrZXJfaApJbmRleDogV2ViQ29yZS9kb20vV29ya2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2VyLmgJKHJldmlzaW9uIDM4Mzg3KQorKysg
V2ViQ29yZS9kb20vV29ya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE1ICsyNCwxNyBAQAog
ICoKICAqLwogCi0jaWZuZGVmIERlZGljYXRlZFdvcmtlcl9oCi0jZGVmaW5lIERlZGljYXRlZFdv
cmtlcl9oCisjaWZuZGVmIFdvcmtlcl9oCisjZGVmaW5lIFdvcmtlcl9oCiAKICNpZiBFTkFCTEUo
V09SS0VSUykKIAorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQz
LDU3ICs0NSw2MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2FjaGVkU2NyaXB0
OwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci0gICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFdv
cmtlck1lc3NhZ2luZ1Byb3h5OwogICAgIGNsYXNzIFdvcmtlclRhc2s7Ci0gICAgY2xhc3MgV29y
a2VyVGhyZWFkOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNz
IERlZGljYXRlZFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPERlZGljYXRlZFdvcmtlcj4sIHB1
YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAg
IGNsYXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdl
dCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3Jr
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IERlZGljYXRlZFdvcmtlcih1cmwsIGRv
Y3VtZW50LCBlYykpOyB9Ci0gICAgICAgIH5EZWRpY2F0ZWRXb3JrZXIoKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIERvY3VtZW50
KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3Jr
ZXIodXJsLCBkb2N1bWVudCwgZWMpKTsgfQorICAgICAgICB+V29ya2VyKCk7CiAKKyAgICAgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
IH0KICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAKLSAgICAgICAgUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gY29ubmVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCBjbG9zZSgpOwotICAgICAgICB2b2lkIHBv
c3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQgPSAwKTsK
KyAgICAgICAgdmlydHVhbCBXb3JrZXIqIHRvV29ya2VyKCkgeyByZXR1cm4gdGhpczsgfQorCisg
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3Rl
bmVyVmVjdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5l
clZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBl
dmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKworICAgICAgICB1
c2luZyBSZWZDb3VudGVkPFdvcmtlcj46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxX
b3JrZXI+OjpkZXJlZjsKIAogICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50
TGlzdGVuZXI7IH0KICAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbk1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0T25j
bG9zZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkNsb3Nl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xv
c2UoKSBjb25zdCB7IHJldHVybiBtX29uQ2xvc2VMaXN0ZW5lci5nZXQoKTsgfQotCiAgICAgICAg
IHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlz
dGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFdvcmtlclRocmVhZFNjcmlw
dExvYWRUaW1lcjsKLQotICAgICAgICBEZWRpY2F0ZWRXb3JrZXIoY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICB2b2lkIHN0YXJ0TG9hZCgpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKIAog
ICAgICAgICB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogCisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVm
RXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKwogICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOwog
ICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0
OwogCi0gICAgICAgIFdvcmtlclRocmVhZCogbV90aHJlYWQ7CisgICAgICAgIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdv
cmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIAogICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25DbG9zZUxpc3RlbmVyOwogICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9v
bkVycm9yTGlzdGVuZXI7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrZXJUYXNrPiA+IG1f
cXVldWVkRWFybHlUYXNrczsgLy8gVGFza3MgYXJlIHF1ZXVlZCBoZXJlIHVudGlsIHRoZXJlJ3Mg
YSB0aHJlYWQgb2JqZWN0IGNyZWF0ZWQuCisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZl
bnRMaXN0ZW5lcnM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCiAKLSNlbmRpZiAvLyBEZWRpY2F0ZWRXb3JrZXJfaAorI2VuZGlm
IC8vIFdvcmtlcl9oCkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1dvcmtlci5pZGwJKHJldmlzaW9uIDM4Mzg3KQkoZnJvbSBXZWJDb3JlL2Rv
bS9EZWRpY2F0ZWRXb3JrZXIuaWRsOjM4Mzg3KQorKysgV2ViQ29yZS9kb20vV29ya2VyLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKK21vZHVsZSB0aHJl
YWRzIHsKKworICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1X
T1JLRVJTXSBEZWRpY2F0ZWRXb3JrZXIgeworCisgICAgICAgIC8vIFRoZXNlIGFsc28gdXNlZCBm
b3Igc2hhcmVkIHdvcmtlcnMuCisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xv
c2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CisKKyAgICAgICAg
Ly8gVGhlc2UgYXJlIG9ubHkgZm9yIGRlZGljYXRlZCB3b3JrZXJzLgorICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIFtDdXN0b21dIE1lc3NhZ2VQb3J0
IGNvbm5lY3QoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOworICAgICAgICB2b2lkIGNsb3NlKCk7Cisg
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25h
bF0gTWVzc2FnZVBvcnQgcG9ydCk7CisKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2RvbS9X
b3JrZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlci5pZGwJKHJldmlzaW9u
IDM4Mzg3KQorKysgV2ViQ29yZS9kb20vV29ya2VyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTggKzI2LDIxIEBACiAKIG1vZHVsZSB0aHJlYWRzIHsKIAotICAgIGludGVyZmFjZSBbQ3VzdG9t
TWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1XT1JLRVJTXSBEZWRpY2F0ZWRXb3JrZXIgeworICAg
IGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1XT1JLRVJTXSBXb3Jr
ZXIgewogCi0gICAgICAgIC8vIFRoZXNlIGFsc28gdXNlZCBmb3Igc2hhcmVkIHdvcmtlcnMuCi0g
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xvc2U7CiAgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0KLSAgICAgICAgLy8gVGhlc2UgYXJlIG9ubHkgZm9y
IGRlZGljYXRlZCB3b3JrZXJzLgogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1l
c3NhZ2U7Ci0gICAgICAgIFtDdXN0b21dIE1lc3NhZ2VQb3J0IGNvbm5lY3QoaW4gRE9NU3RyaW5n
IG1lc3NhZ2UpOwotICAgICAgICB2b2lkIGNsb3NlKCk7Ci0gICAgICAgIHZvaWQgcG9zdE1lc3Nh
Z2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgcG9ydCk7
CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOwogCisgICAg
ICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2
ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAg
ICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4g
RXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICAgICB9Owog
CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gMzgzODcpCisrKyBXZWJDb3Jl
L2RvbS9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDEzIEBA
CiAKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgotI2luY2x1
ZGUgIldvcmtlclRhc2suaCIKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgorI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDYg
KzUxLDkgQEAgV29ya2VyQ29udGV4dDo6V29ya2VyQ29udGV4dChjb25zdCBLVVJMJgogCiBXb3Jr
ZXJDb250ZXh0Ojp+V29ya2VyQ29udGV4dCgpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX3RocmVhZC0+dGhyZWFkSUQoKSk7CisKKyAgICBtX3RocmVhZC0+bWVzc2FnaW5nUHJv
eHkoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBXb3JrZXJDb250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTcy
LDYgKzc3LDExIEBAIEtVUkwgV29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwoY29uc3QgU3QKICAg
ICByZXR1cm4gS1VSTChtX2xvY2F0aW9uLT51cmwoKSwgdXJsKTsKIH0KIAordm9pZCBXb3JrZXJD
b250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV90aHJl
YWQtPm1lc3NhZ2luZ1Byb3h5KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSk7
Cit9CisKIHZvaWQgV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
LCBib29sKQogewogICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVu
dExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oCShyZXZpc2lv
biAzODM4NykKKysrIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksMTIgKzY5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IFdvcmtlckNvbnRleHQqIHRvV29ya2VyQ29udGV4dCgpIHsgcmV0dXJuIHRoaXM7IH0KIAorICAg
ICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKICAgICAgICAg
dmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICAgICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsK
IAotICAgICAgICB2b2lkIHNldE9uY29ubmVjdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIpIHsgbV9vbmNvbm5lY3RMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAg
ICAgICAgRXZlbnRMaXN0ZW5lciogb25jb25uZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vbmNvbm5l
Y3RMaXN0ZW5lci5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3NhZ2VMaXN0ZW5lciA9IGV2
ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQogCiAgICAgICAgIHR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVjdG9yOwogICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5l
cnNNYXA7CkBAIC0xMDAsNyArMTAyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
b3JrZXJTY3JpcHRDb250cm9sbGVyIG1fc2NyaXB0OwogICAgICAgICBXb3JrZXJUaHJlYWQqIG1f
dGhyZWFkOwogCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uY29ubmVjdExpc3Rl
bmVyOworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2VMaXN0ZW5lcjsK
ICAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5LmgiCisKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VF
dmVudC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIK
KyNpbmNsdWRlICJXb3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVi
bGljIFdvcmtlclRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKG1lc3Nh
Z2UpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhXb3JrZXJDb250
ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdl
RXZlbnQ6OmNyZWF0ZShtX21lc3NhZ2UsICIiLCAiIiwgMCwgMCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQtPm9ubWVzc2FnZSgpKSB7CisgICAgICAgICAgICBldnQtPnNldFRhcmdldChjb250ZXh0
KTsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChjb250ZXh0KTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPm9ubWVzc2FnZSgpLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBjb250
ZXh0LT5kaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFl
Yyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX21lc3NhZ2U7Cit9OworCitjbGFz
cyBNZXNzYWdlV29ya2VyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2Vy
VGFzayhtZXNzYWdlLCBtZXNzYWdpbmdQcm94eSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBN
ZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdvcmtlck1lc3NhZ2luZ1By
b3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkp
CisgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCisgICAgeworICAgICAgICBXb3JrZXIqIHdvcmtlck9iamVjdCA9IG1fbWVzc2Fn
aW5nUHJveHktPndvcmtlck9iamVjdCgpOworICAgICAgICBpZiAoIXdvcmtlck9iamVjdCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VF
dmVudDo6Y3JlYXRlKG1fbWVzc2FnZSwgIiIsICIiLCAwLCAwKTsKKworICAgICAgICBpZiAod29y
a2VyT2JqZWN0LT5vbm1lc3NhZ2UoKSkgeworICAgICAgICAgICAgZXZ0LT5zZXRUYXJnZXQod29y
a2VyT2JqZWN0KTsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh3b3JrZXJPYmpl
Y3QpOworICAgICAgICAgICAgd29ya2VyT2JqZWN0LT5vbm1lc3NhZ2UoKS0+aGFuZGxlRXZlbnQo
ZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCks
IGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmlu
ZyBtX21lc3NhZ2U7CisgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7
Cit9OworCitjbGFzcyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBt
ZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2Vy
Q29udGV4dERlc3Ryb3llZFRhc2sobWVzc2FnaW5nUHJveHkpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1l
c3NhZ2luZ1Byb3h5KQorICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9tZXNzYWdpbmdQcm94eS0+
d29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworfTsKKworCitXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6V29ya2VyTWVzc2FnaW5nUHJveHkoUGFzc1JlZlB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0PiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXb3JrZXIqIHdvcmtlck9iamVj
dCkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KQorICAgICwgbV93b3JrZXJPYmplY3Qod29ya2VyT2JqZWN0KQoreworICAgIEFTU0VSVChtX3dv
cmtlck9iamVjdCk7CisgICAgQVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9j
dW1lbnQoKSAmJiBpc01haW5UaHJlYWQoKSkKKyAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19j
YXN0PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpLT50aHJl
YWQoKS0+dGhyZWFkSUQoKSkpOworfQorCitXb3JrZXJNZXNzYWdpbmdQcm94eTo6fldvcmtlck1l
c3NhZ2luZ1Byb3h5KCkKK3sKKyAgICBBU1NFUlQoIW1fd29ya2VyT2JqZWN0KTsKKyAgICBBU1NF
UlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFpblRocmVh
ZCgpKQorICAgICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRl
eHQoKSAmJiBjdXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSktPnRocmVhZCgpLT50aHJlYWRJRCgpKSk7Cit9
CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soTWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZShtZXNzYWdlLCB0aGlzKSk7Cit9CisK
K3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV93b3JrZXJUaHJlYWQpCisgICAgICAg
IG1fd29ya2VyVGhyZWFkLT5tZXNzYWdlUXVldWUoKS5hcHBlbmQoTWVzc2FnZVdvcmtlckNvbnRl
eHRUYXNrOjpjcmVhdGUobWVzc2FnZSkpOworICAgIGVsc2UKKyAgICAgICAgbV9xdWV1ZWRFYXJs
eVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlKSk7
Cit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlclRocmVhZENyZWF0ZWQoUGFz
c1JlZlB0cjxXb3JrZXJUaHJlYWQ+IHdvcmtlclRocmVhZCkKK3sKKyAgICBtX3dvcmtlclRocmVh
ZCA9IHdvcmtlclRocmVhZDsKKworICAgIHVuc2lnbmVkIHRhc2tDb3VudCA9IG1fcXVldWVkRWFy
bHlUYXNrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhc2tDb3VudDsg
KytpKQorICAgICAgICBtX3dvcmtlclRocmVhZC0+bWVzc2FnZVF1ZXVlKCkuYXBwZW5kKG1fcXVl
dWVkRWFybHlUYXNrc1tpXSk7CisgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmNsZWFyKCk7Cit9CisK
K3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCit7Cisg
ICAgbV93b3JrZXJPYmplY3QgPSAwOworICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAgICAg
bV93b3JrZXJUaHJlYWQtPm1lc3NhZ2VRdWV1ZSgpLmtpbGwoKTsKKyAgICBlbHNlCisgICAgICAg
IHdvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpOyAvLyBJdCBuZXZlciBleGlzdGVkLCBq
dXN0IGRvIG91dCBjbGVhbnVwLgorfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3Jr
ZXJDb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBv
c3RUYXNrKFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOjpjcmVhdGUodGhpcykpOworICAgIC8v
IFdpbGwgZXhlY3V0ZSB3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKSBvbiBjb250ZXh0
J3MgdGhyZWFkLgorfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0
RGVzdHJveWVkSW50ZXJuYWwoKQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2lu
Z1Byb3h5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYg
V29ya2VyTWVzc2FnaW5nUHJveHlfaAorI2RlZmluZSBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCisK
KyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgV29ya2Vy
OworICAgIGNsYXNzIFdvcmtlclRhc2s7CisgICAgY2xhc3MgV29ya2VyVGhyZWFkOworCisgICAg
Y2xhc3MgV29ya2VyTWVzc2FnaW5nUHJveHkgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eShQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ+LCBXb3JrZXIqKTsKKworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZVRvV29y
a2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgICAgIHZvaWQgd29ya2Vy
VGhyZWFkQ3JlYXRlZChQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4pOworICAgICAgICB2b2lkIHdv
cmtlck9iamVjdERlc3Ryb3llZCgpOworICAgICAgICB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95
ZWQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBNZXNzYWdlV29ya2Vy
VGFzazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOwor
CisgICAgICAgIH5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpOworCisgICAgICAgIHZvaWQgd29ya2Vy
Q29udGV4dERlc3Ryb3llZEludGVybmFsKCk7CisgICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3Q7IH0KKworICAgICAgICBSZWZQdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgICAgICBX
b3JrZXIqIG1fd29ya2VyT2JqZWN0OworICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiBtX3dv
cmtlclRocmVhZDsKKworICAgICAgICBWZWN0b3I8UmVmUHRyPFdvcmtlclRhc2s+ID4gbV9xdWV1
ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhlcmUncyBhIHRo
cmVhZCBvYmplY3QgY3JlYXRlZC4KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlck1lc3NhZ2luZ1By
b3h5X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1By
b3h5LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
V2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9X
b3JrZXJUaHJlYWQuY3BwCShyZXZpc2lvbiAzODM4NykKKysrIFdlYkNvcmUvZG9tL1dvcmtlclRo
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgogCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyLmgiCiAjaW5jbHVkZSAi
SlNXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlclRhc2suaCIKIApAQCAtMzksMTYgKzM5LDIwIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlcj4g
d29ya2VyT2JqZWN0KQorUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3Jl
YXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCBzb3VyY2VDb2RlLCB3b3JrZXJPYmplY3QpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkwsIHNvdXJjZUNv
ZGUsIG1lc3NhZ2luZ1Byb3h5KSk7CiB9CiAKLVdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNv
bnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBQYXNzUmVmUHRy
PERlZGljYXRlZFdvcmtlcj4gd29ya2VyT2JqZWN0KQorV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJl
YWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKICAgICA6IG1fdGhyZWFkSUQoMCkKICAg
ICAsIG1fc2NyaXB0VVJMKHNjcmlwdFVSTC5zdHJpbmcoKS5jb3B5KCkpCiAgICAgLCBtX3NvdXJj
ZUNvZGUoc291cmNlQ29kZS5jb3B5KCkpCi0gICAgLCBtX3dvcmtlck9iamVjdCh3b3JrZXJPYmpl
Y3QpCisgICAgLCBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQoreworfQorCitXb3Jr
ZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogewogfQogCkBAIC01Nyw3ICs2MSw2IEBAIGJvb2wg
V29ya2VyVGhyZWFkOjpzdGFydCgpCiAgICAgaWYgKG1fdGhyZWFkSUQpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgcmVmKCk7CiAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTo6V29ya2VyIik7CiAK
ICAgICByZXR1cm4gbV90aHJlYWRJRDsKQEAgLTgzLDEwICs4Niw5IEBAIHZvaWQqIFdvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2sod29ya2VyQ29u
dGV4dC5nZXQoKSk7CiAgICAgfQogCi0gICAgd29ya2VyQ29udGV4dCA9IDA7CisgICAgd29ya2Vy
Q29udGV4dCA9IDA7IC8vIERlc3Ryb3lpbmcgdGhlIGNvbnRleHQgd2lsbCBub3RpZnkgbWVzc2Fn
aW5nIHByb3h5LgogICAgIG1fdGhyZWFkSUQgPSAwOwogCi0gICAgZGVyZWYoKTsKICAgICByZXR1
cm4gMDsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmgJKHJldmlzaW9uIDM4Mzg3KQorKysgV2ViQ29y
ZS9kb20vV29ya2VyVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI2ICszMCwyOSBAQAog
I2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJXb3JrZXJUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IERlZGljYXRlZFdvcmtlcjsKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5OworICAgIGNsYXNzIFdvcmtlclRhc2s7CiAKLSAgICBjbGFzcyBXb3JrZXJUaHJl
YWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxXb3JrZXJUaHJlYWQ+IHsKKyAgICBjbGFzcyBX
b3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gY3JlYXRlKGNvbnN0
IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBQYXNzUmVmUHRyPERl
ZGljYXRlZFdvcmtlcj4pOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+
IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwg
V29ya2VyTWVzc2FnaW5nUHJveHkqKTsKKyAgICAgICAgfldvcmtlclRocmVhZCgpOwogCiAgICAg
ICAgIGJvb2wgc3RhcnQoKTsKIAogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkg
Y29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQogICAgICAgICBNZXNzYWdlUXVldWU8UmVmUHRy
PFdvcmtlclRhc2s+ID4mIG1lc3NhZ2VRdWV1ZSgpIHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlOyB9
CiAKKyAgICAgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9tZXNzYWdpbmdQcm94eTsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV29y
a2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFBhc3NSZWZQ
dHI8RGVkaWNhdGVkV29ya2VyPik7CisgICAgICAgIFdvcmtlclRocmVhZChjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSopOwogCiAgICAg
ICAgIHN0YXRpYyB2b2lkKiB3b3JrZXJUaHJlYWRTdGFydCh2b2lkKik7CiAgICAgICAgIHZvaWQq
IHdvcmtlclRocmVhZCgpOwpAQCAtNTgsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgU3RyaW5nIG1fc2NyaXB0VVJMOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VDb2Rl
OwotICAgICAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyPiBtX3dvcmtlck9iamVjdDsKKyAgICAg
ICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7CiAKICAgICAgICAgTWVz
c2FnZVF1ZXVlPFJlZlB0cjxXb3JrZXJUYXNrPiA+IG1fbWVzc2FnZVF1ZXVlOwogICAgIH07Cg==
</data>
<flag name="review"
          id="11612"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>