WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling i

To: "Santos, Jose Renato G (Jose Renato Santos)" <joserenato.santos@xxxxxx>
Subject: Re: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling in Xen
From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Date: Mon, 11 Apr 2005 16:24:20 +0100
Cc: Xen-devel@xxxxxxxxxxxxxxxxxxx, "Turner, Yoshio" <yoshio_turner@xxxxxx>, Andrew Theurer <habanero@xxxxxxxxxx>, Aravind Menon <aravind.menon@xxxxxxx>, Bin Ren <bin.ren@xxxxxxxxx>, G John Janakiraman <john@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 11 Apr 2005 15:27:58 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: Your message of "Fri, 08 Apr 2005 20:15:15 PDT." <6C21311CEE34E049B74CC0EF339464B902FB3C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Is the nmi_sanity_check() needed? We shouldn't lose NMIs: even if we
take one while doing NMI processing, we sholuld retake the NMI as soon
as the first one IRETs.

There used to be a problem whereby the Xen NMI handler would bail if
it detected it had interrupted Xen at an unfortunate time. I guess the
code in xenoprof was probably added to deal with this situation. If
so then it is no longer needed -- I fix up in a more generic way now
(reschedule the NMI automatically). 

Apart from that I guess this is mostly just oprofile source files
pulled out of Linux? Is there much/any other Xen-specific code in the
patch? 

 -- Keir

> 
>   Here is part 1 of the patches for Xenoprof
> 
> >>   1) xenoprof-1.0-xen-2.0.5.patch:
> >>       - Patch for Xen
> 
>   Jose Renato Santos
>   HP Labs
>    xenoprof-1.0-xen-2.0.5.patch
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
 -=- MIME -=- 
This is a multi-part message in MIME format.

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: text/plain;
        charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


  Here is part 1 of the patches for Xenoprof

>>   1) xenoprof-1.0-xen-2.0.5.patch:
>>       - Patch for Xen

  Jose Renato Santos
  HP Labs

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: application/octet-stream;
        name="xenoprof-1.0-xen-2.0.5.patch"
Content-Transfer-Encoding: base64
Content-Description: xenoprof-1.0-xen-2.0.5.patch
Content-Disposition: attachment;
        filename="xenoprof-1.0-xen-2.0.5.patch"

ZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMgeGVuLTIuMC41LXByb2Yv
eGVuL2FyY2gveDg2L2FwaWMuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMJMjAw
NS0wMy0xMCAxMTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9h
cmNoL3g4Ni9hcGljLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTcy
NCw2ICs3MjQsOSBAQAogCiB1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzIFtOUl9DUFVTXTsK
IAorZXh0ZXJuIGludCBubWlfcHJvZmlsaW5nX3N0YXJ0ZWQ7CitleHRlcm4gaW50IG5taV9zYW5p
dHlfY2hlY2soc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisKIHZvaWQgc21wX2Fw
aWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCB4ZW5fcmVncyAqIHJlZ3MpCiB7CiAgICAgYWNrX0FQ
SUNfaXJxKCk7CkBAIC03MzEsNiArNzM0LDEyIEBACiAgICAgYXBpY190aW1lcl9pcnFzW3NtcF9w
cm9jZXNzb3JfaWQoKV0rKzsKICAgICBwZXJmY19pbmNyYyhhcGljX3RpbWVyKTsKIAorICAgIC8q
ICB3ZSBtYXkgbG9zZSBOTUkgc2FtcGxlcyBmb3Igc2V2ZXJhbCByZWFzb25zLgorCUhlcmUsIHdl
IHByb3RlY3QgYWdhaW5zdCB0aGF0IGJ5IGRvaW5nIGFuIG5taSBzYW5pdHkKKwljaGVjayBldmVy
eSB0aW1lciBpbnRlcnJ1cHQgb24gZXZlcnkgcHJvY2Vzc29yICovCisgICAgaWYgKG5taV9wcm9m
aWxpbmdfc3RhcnRlZCkKKwlubWlfc2FuaXR5X2NoZWNrKHJlZ3MsIHNtcF9wcm9jZXNzb3JfaWQo
KSk7CisKICAgICByYWlzZV9zb2Z0aXJxKEFDX1RJTUVSX1NPRlRJUlEpOwogfQogCmRpZmYgLVBO
YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L01ha2VmaWxlCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L01ha2VmaWxlCTIwMDUt
MDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj
aC94ODYvTWFrZWZpbGUJMjAwNS0wNC0wNyAwOTowNDoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTEy
LDcgKzEyLDEwIEBACiAKIE9CSlMgOj0gJChzdWJzdCAkKFRBUkdFVF9TVUJBUkNIKS9hc20tb2Zm
c2V0cy5vLCwkKE9CSlMpKQogCitPQkpTICs9IG9wcm9maWxlL29wcm9maWxlLm8KKwogZGVmYXVs
dDogJChUQVJHRVQpCisJbWFrZSAtQyBvcHJvZmlsZQogCiAkKFRBUkdFVCk6ICQoVEFSR0VUKS1z
eW1zIGJvb3QvbWtlbGYzMgogCS4vYm9vdC9ta2VsZjMyICQoVEFSR0VUKS1zeW1zICQoVEFSR0VU
KSAweDEwMDAwMApAQCAtMzAsMTEgKzMzLDE1IEBACiBib290L21rZWxmMzI6IGJvb3QvbWtlbGYz
Mi5jCiAJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgLW8gJEAgJDwKIAorb3Byb2ZpbGUvb3Byb2Zp
bGUubzoKKwkkKE1BS0UpIC1DIG9wcm9maWxlCisKIGNsZWFuOgogCXJtIC1mICoubyAqLnMgKn4g
Y29yZSBib290LyoubyBib290Lyp+IGJvb3QvY29yZSBib290L21rZWxmMzIKIAlybSAtZiB4ODZf
MzIvKi5vIHg4Nl8zMi8qfiB4ODZfMzIvY29yZQogCXJtIC1mIHg4Nl82NC8qLm8geDg2XzY0Lyp+
IHg4Nl82NC9jb3JlCiAJcm0gLWYgbXRyci8qLm8gbXRyci8qfiBtdHJyL2NvcmUKKwlybSAtZiBv
cHJvZmlsZS8qLm8KIAogZGVsZXRlLXVuZnJlc2gtZmlsZXM6CiAJIyBub3RoaW5nCmRpZmYgLVBO
YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMgeGVuLTIuMC41LXByb2YveGVu
L2FyY2gveDg2L21pY3JvY29kZS5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L21pY3JvY29k
ZS5jCTIwMDUtMDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJv
Zi94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAg
LTA3MDAKQEAgLTg3LDEzICs4Nyw2IEBACiAjZGVmaW5lIHZtYWxsb2MoX3MpIHhtYWxsb2MoX3Mp
CiAjZGVmaW5lIHZmcmVlKF9wKSB4ZnJlZShfcCkKICNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkg
c21wX251bV9jcHVzCi1zdGF0aWMgaW5saW5lIGludCBvbl9lYWNoX2NwdSgKLSAgICB2b2lkICgq
ZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQotewot
ICAgIGludCByZXQgPSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7
Ci0gICAgZnVuYyhpbmZvKTsKLSAgICByZXR1cm4gcmV0OwotfQogCiAjaWYgMAogTU9EVUxFX0RF
U0NSSVBUSU9OKCJJbnRlbCBDUFUgKElBLTMyKSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwpk
aWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L25taS5jIHhlbi0yLjAuNS1wcm9mL3hl
bi9hcmNoL3g4Ni9ubWkuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9ubWkuYwkyMDA1LTAz
LTEwIDExOjUyOjEzLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gv
eDg2L25taS5jCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC01LDYgKzUs
MTAgQEAKICAqCiAgKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4K
ICAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl
CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds
ZXR0LVBhY2thcmQgQ28uCisgKgogICogIEZpeGVzOgogICogIE1pa2FlbCBQZXR0ZXJzc29uCTog
QU1EIEs3IHN1cHBvcnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgogICogIE1pa2FlbCBQ
ZXR0ZXJzc29uCTogUG93ZXIgTWFuYWdlbWVudCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cu
CkBAIC0zNCw2ICszOCwyOCBAQAogCiBleHRlcm4gaW50IGxvZ2ljYWxfcHJvY19pZFtdOwogCisv
KgorICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBO
TUkgaGFyZHdhcmU6CisgKiAtIGl0IG1heSBiZSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRyaXZl
ciwgb3Igbm90CisgKiAtIHdoZW4gbm90IHJlc2VydmVkIGJ5IHNvbWUgb3RoZXIgZHJpdmVyLCBp
dCBtYXkgYmUgdXNlZCBmb3IKKyAqICAgdGhlIE5NSSB3YXRjaGRvZywgb3Igbm90CisgKgorICog
VGhpcyBpcyBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBubWlfYWN0aXZlIGJlY2F1c2UgdGhl
IE5NSQorICogd2F0Y2hkb2cgbWF5IGFsc28gYmUgZHJpdmVuIGZyb20gdGhlIEkvTyBBUElDIHRp
bWVyLgorICovCitzdGF0aWMgc3BpbmxvY2tfdCBsYXBpY19ubWlfb3duZXJfbG9jayA9IFNQSU5f
TE9DS19VTkxPQ0tFRDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfbm1pX293bmVyOworI2Rl
ZmluZSBMQVBJQ19OTUlfV0FUQ0hET0cgICAgICAoMTw8MCkKKyNkZWZpbmUgTEFQSUNfTk1JX1JF
U0VSVkVEICAgICAgKDE8PDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisvKiBubWlfYWN0aXZlOgorICogKzE6IHRoZSBsYXBpYyBOTUkgd2F0
Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCisgKiAgMDogdGhlIGxhcGljIE5N
SSB3YXRjaGRvZyBoYXMgbm90IGJlZW4gc2V0IHVwLCBhbmQgY2Fubm90CisgKiAgICAgYmUgZW5h
YmxlZAorICogLTE6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQsIGJ1dCBjYW4g
YmUgZW5hYmxlZAorICovCitpbnQgbm1pX2FjdGl2ZTsKKwogI2RlZmluZSBLN19FVk5UU0VMX0VO
QUJMRQkoMSA8PCAyMikKICNkZWZpbmUgSzdfRVZOVFNFTF9JTlQJCSgxIDw8IDIwKQogI2RlZmlu
ZSBLN19FVk5UU0VMX09TCQkoMSA8PCAxNykKQEAgLTczLDkgKzk5LDkgQEAKICAqLwogI2RlZmlu
ZSBNU1JfUDRfSVFfQ09VTlRFUjAJMHgzMEMKICNkZWZpbmUgTVNSX1A0X0lRX0NPVU5URVIxCTB4
MzBECi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMAkJMHgzNkMKLSNkZWZpbmUgTVNSX1A0X0lRX0ND
Q1IxCQkweDM2RAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwCTB4M0I4IC8qIEVTQ1Igbm8uIDQg
Ki8KKy8vI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAJCTB4MzZDCisvLyNkZWZpbmUgTVNSX1A0X0lR
X0NDQ1IxCQkweDM2RAorLy8jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAJMHgzQjggLyogRVNDUiBu
by4gNCAqLwogI2RlZmluZSBQNF9OTUlfQ1JVX0VTQ1IwIFwKICAgICAoUDRfRVNDUl9FVkVOVF9T
RUxFQ1QoMHgzRil8UDRfRVNDUl9PUzB8UDRfRVNDUl9VU1IwfCBcCiAgICAgIFA0X0VTQ1JfT1Mx
fFA0X0VTQ1JfVVNSMSkKQEAgLTEzMSw2ICsxNTcsNjkgQEAKICAqIE9yaWdpbmFsIGNvZGUgd3Jp
dHRlbiBieSBLZWl0aCBPd2Vucy4KICAqLwogCitzdGF0aWMgdm9pZCBkaXNhYmxlX2xhcGljX25t
aV93YXRjaGRvZyh2b2lkKQoreworICAgICAgICBpZiAobm1pX2FjdGl2ZSA8PSAwKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5k
b3IpIHsKKyAgICAgICAgY2FzZSBYODZfVkVORE9SX0FNRDoKKyAgICAgICAgICAgICAgICB3cm1z
cihNU1JfSzdfRVZOVFNFTDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChib290X2Nw
dV9kYXRhLng4NikgeworICAgICAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdybXNyKE1TUl9QNl9FVk5UU0VMMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE1OgorCQkJaWYgKGxvZ2ljYWxfcHJv
Y19pZFtzbXBfcHJvY2Vzc29yX2lkKCldID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgICAg
ICAgICAJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCAwLCAwKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB3cm1zcihNU1JfUDRfQ1JVX0VTQ1IwLCAwLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJd3Jt
c3IoTVNSX1A0X0lRX0NDQ1IxLCAwLCAwKTsJCisJCQl9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbm1pX2FjdGl2ZSA9IC0xOworICAgICAgICAvKiB0ZWxsIGRvX25taSgp
IGFuZCBvdGhlcnMgdGhhdCB3ZSdyZSBub3QgYWN0aXZlIGFueSBtb3JlICovCisgICAgICAgIG5t
aV93YXRjaGRvZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hk
b2codm9pZCkKK3sKKyAgICAgICAgaWYgKG5taV9hY3RpdmUgPCAwKSB7CisgICAgICAgICAgICAg
ICAgbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisgICAgICAgICAgICAgICAgc2V0dXBf
YXBpY19ubWlfd2F0Y2hkb2coKTsKKyAgICAgICAgfQorfQorCitpbnQgcmVzZXJ2ZV9sYXBpY19u
bWkodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IG9sZF9vd25lcjsKKyAgICAgICAgc3Bp
bl9sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIG9sZF9vd25lciA9IGxhcGlj
X25taV9vd25lcjsKKyAgICAgICAgbGFwaWNfbm1pX293bmVyIHw9IExBUElDX05NSV9SRVNFUlZF
RDsKKyAgICAgICAgc3Bpbl91bmxvY2soJmxhcGljX25taV9vd25lcl9sb2NrKTsKKyAgICAgICAg
aWYgKG9sZF9vd25lciAmIExBUElDX05NSV9SRVNFUlZFRCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gLUVCVVNZOworICAgICAgICBpZiAob2xkX293bmVyICYgTEFQSUNfTk1JX1dBVENIRE9HKQor
ICAgICAgICAgICAgICAgIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisgICAgICAgIHJl
dHVybiAwOworfQorCit2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZvaWQpCit7CisgICAgICAgIHVu
c2lnbmVkIGludCBuZXdfb3duZXI7CisgICAgICAgIHNwaW5fbG9jaygmbGFwaWNfbm1pX293bmVy
X2xvY2spOworICAgICAgICBuZXdfb3duZXIgPSBsYXBpY19ubWlfb3duZXIgJiB+TEFQSUNfTk1J
X1JFU0VSVkVEOworICAgICAgICBsYXBpY19ubWlfb3duZXIgPSBuZXdfb3duZXI7CisgICAgICAg
IHNwaW5fdW5sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIGlmIChuZXdfb3du
ZXIgJiBMQVBJQ19OTUlfV0FUQ0hET0cpCisgICAgICAgICAgICAgICAgZW5hYmxlX2xhcGljX25t
aV93YXRjaGRvZygpOworfQorCiBzdGF0aWMgdm9pZCBfX3BtaW5pdCBjbGVhcl9tc3JfcmFuZ2Uo
dW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBuKQogewogICAgIHVuc2lnbmVkIGludCBp
OwpAQCAtMjU1LDYgKzM0NCw4IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBsYXBpY19ubWlfb3duZXIgPSBMQVBJQ19OTUlfV0FUQ0hET0c7CisgICAgbm1pX2Fj
dGl2ZSA9IDE7CiAgICAgbm1pX3BtX2luaXQoKTsKIH0KIApAQCAtMzE5LDMgKzQxMCw3IEBACiAg
ICAgICAgIH0KICAgICB9CiB9CisKK0VYUE9SVF9TWU1CT0wocmVzZXJ2ZV9sYXBpY19ubWkpOwor
RVhQT1JUX1NZTUJPTChyZWxlYXNlX2xhcGljX25taSk7CisKZGlmZiAtUE5hdXIgeGVuLTIuMC41
L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZSB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvTWFrZWZpbGUKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUv
TWFrZWZpbGUJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu
NS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZQkyMDA1LTA0LTA2IDA5OjI3OjEz
LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9S
dWxlcy5taworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisjIEZMQUdT
IGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0IGZvciAtV2Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21t
b24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdTICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAt
V2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNFRElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1h
cml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVxICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9
IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxzZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFH
UyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBQcmV2
ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBmcm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxB
R1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lm
ZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikKK0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2
CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1pMzg2CitlbmRpZgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdT
ICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMgLWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1Mg
ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQo
T0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAtbyBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUu
bzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKENDKSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRp
ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIyB4ZW4t
Mi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIwotLS0geGVuLTIuMC41
L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS8jTWFrZWZpbGUjCTE5NjktMTItMzEgMTY6MDA6MDAuMDAw
MDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01h
a2VmaWxlIwkyMDA1LTA0LTA2IDA5OjUzOjUzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0
IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9SdWxlcy5taworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorCisjIEZMQUdTIGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0
IGZvciAtV2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0
ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21tb24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdT
ICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAtV2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNF
RElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1hcml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVx
ICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxz
ZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFHUyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorIyBQcmV2ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBm
cm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxBR1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikK
K0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1p
Mzg2CitlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFS
R0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdTICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMg
LWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1MgICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10
YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQoT0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAt
byBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUubzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKEND
KSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvbm1pX2ludC5jIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmls
ZS9ubWlfaW50LmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5j
CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94
ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCTIwMDUtMDQtMDcgMTY6NDA6MjAuMDAwMDAw
MDAwIC0wNzAwCkBAIC0wLDAgKzEsNDMxIEBACisvKioKKyAqIEBmaWxlIG5taV9pbnQuYworICoK
KyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBS
ZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1v
dmVtZW50YXJpYW4ub3JnPgorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhl
bgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3
bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl
IDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vaW5p
dC5oPgorI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5j
bHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisgCisjaW5jbHVkZSAib3Bf
Y291bnRlci5oIgorI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorIAorc3RhdGljIHN0cnVjdCBv
cF94ODZfbW9kZWxfc3BlYyBjb25zdCAqIG1vZGVsOworc3RhdGljIHN0cnVjdCBvcF9tc3JzIGNw
dV9tc3JzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfbHZ0cGNbTlJfQ1BV
U107CisKKyNkZWZpbmUgVklSUV9CSVRNQVNLX1NJWkUJKE1BWF9PUFJPRl9ET01BSU5TLzMyICsg
MSkKKworZXh0ZXJuIGludCBhY3RpdmVfZG9tYWluc1tNQVhfT1BST0ZfRE9NQUlOU107CitleHRl
cm4gdW5zaWduZWQgaW50IGFkb21haW5zOworCitleHRlcm4gc3RydWN0IGRvbWFpbiAqIHByaW1h
cnlfcHJvZmlsZXI7CitleHRlcm4gc3RydWN0IGRvbWFpbiAqIGFkb21haW5fcHRyc1tNQVhfT1BS
T0ZfRE9NQUlOU107CitleHRlcm4gdW5zaWduZWQgbG9uZyB2aXJxX292Zl9wZW5kaW5nW1ZJUlFf
QklUTUFTS19TSVpFXTsKKworZXh0ZXJuIGludCBpc19hY3RpdmUoc3RydWN0IGRvbWFpbiAqZCk7
CitleHRlcm4gaW50IGFjdGl2ZV9pZChzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNf
cGFzc2l2ZShzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNfcHJvZmlsZWQoc3RydWN0
IGRvbWFpbiAqZCk7CisKKworaW50IG5taV9wcm9maWxpbmdfc3RhcnRlZCA9IDA7CisKK2ludCBh
Y3RpdmVfdmlycV9jb3VudCA9IDA7CitpbnQgcGFzc2l2ZV92aXJxX2NvdW50ID0gMDsKK2ludCBv
dGhlcl92aXJxX2NvdW50ID0gMDsKK2ludCBvdGhlcl9pZCA9IC0xOworaW50IHhlbl9jb3VudCA9
IDA7CitpbnQgZG9tX2NvdW50ID0gMDsgCitpbnQgb3ZmID0gMDsKKworaW50IG5taV9jYWxsYmFj
ayhzdHJ1Y3QgeGVuX3JlZ3MgKiByZWdzLCBpbnQgY3B1KQoreworCWludCB4ZW5fbW9kZSA9IDA7
CisKKwlvdmYgPSBtb2RlbC0+Y2hlY2tfY3RycyhjcHUsICZjcHVfbXNyc1tjcHVdLCByZWdzKTsK
Kwl4ZW5fbW9kZSA9IFJJTkdfMChyZWdzKTsKKwlpZiAob3ZmKSB7CisJCWlmICh4ZW5fbW9kZSkK
KwkJCXhlbl9jb3VudCsrOworCQllbHNlCisJCQlkb21fY291bnQrKzsKKworCQlpZiAoaXNfYWN0
aXZlKGN1cnJlbnQpKSB7CisJCS8qIFRoaXMgaXMgbGlnaHRseSBpbmNvcnJlY3QuIElmIHdlIGRv
IG5vdCBkZWxpdmVyIAorCQkJT1ZGIHZpcnR1YWwgaW50ZXJydXB0cyBpbiBhIHN5bmNocm9ub3Vz
IAorCQkJbWFubmVyLCBhIHByb2Nlc3Mgc3dpdGNoIG1heSBoYXBwZW4gaW4gdGhlIGRvbWFpbiAK
KwkJCWJldHdlZW4gdGhlIHBvaW50IHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCBhbmQgCisJCQl0
aGUgcG9pbnQgYXQgd2hpY2ggYSBWSVJRIHdhcyBkZWxpdmVyZWQuIEhvd2V2ZXIsIAorCQkJaXQg
aXMgbm90IHNhZmUgdG8gY2FsbCBzZW5kX2d1ZXN0X3ZpcnEgZnJvbSB0aGlzIAorCQkJTk1JIGNv
bnRleHQsIGl0IG1heSBsZWFkIHRvIGEgZGVhZGxvY2sgc2luY2UgTk1JcyBhcmUgCisJCQl1bm1h
c2thYmxlLiBPbmUgb3B0aW1pemF0aW9uIHRoYXQgd2UgY2FuIGRvIGlzIAorCQkJdGhhdCBpZiB0
aGUgc2FtcGxlIG9jY3VycyB3aGlsZSBkb21haW4gY29kZSBpcyAKKwkJCXJ1bm5uZywgd2Uga25v
dyB0aGF0IGl0IGlzIHNhZmUgdG8gY2FsbCAKKwkJCXNlbmRfZ3Vlc3RfdmlycSwgc2luY2Ugd2Ug
a25vdyBubyBYZW4gY29kZSAKKwkJCWlzIHJ1bm5pbmcgYXQgdGhhdCB0aW1lLgorCQkJSG93ZXZl
ciwgdGhpcyBtYXkgZGlzdG9ydCB0aGUgc2FtcGxlIGRpc3RyaWJ1dGlvbiwKKwkJCWJlY2F1c2Ug
d2UgbWF5IGxvc2UgbW9yZSBYZW4gbW9kZSBzYW1wbGVzLiovCisJCQlhY3RpdmVfdmlycV9jb3Vu
dCsrOworCQkJaWYgKCF4ZW5fbW9kZSkgeworCQkJCXNlbmRfZ3Vlc3RfdmlycShjdXJyZW50LCBW
SVJRX1BNQ19PVkYpOworCQkJCWNsZWFyX2JpdChhY3RpdmVfaWQoY3VycmVudCksICZ2aXJxX292
Zl9wZW5kaW5nWzBdKTsKKwkJCX0gZWxzZSAKKwkJCQlzZXRfYml0KGFjdGl2ZV9pZChjdXJyZW50
KSwgJnZpcnFfb3ZmX3BlbmRpbmdbMF0pOworCQkJcHJpbWFyeV9wcm9maWxlci0+c2hhcmVkX2lu
Zm8tPmFjdGl2ZV9zYW1wbGVzKys7CisJCX0KKwkJZWxzZSBpZiAoaXNfcGFzc2l2ZShjdXJyZW50
KSkgeworCQkJc2V0X2JpdChhY3RpdmVfaWQocHJpbWFyeV9wcm9maWxlciksICZ2aXJxX292Zl9w
ZW5kaW5nWzBdKTsKKwkJCXBhc3NpdmVfdmlycV9jb3VudCsrOworCQkJcHJpbWFyeV9wcm9maWxl
ci0+c2hhcmVkX2luZm8tPnBhc3NpdmVfc2FtcGxlcysrOworCQl9CisJCWVsc2UgeworCQkJb3Ro
ZXJfdmlycV9jb3VudCsrOworCQkJb3RoZXJfaWQgPSBjdXJyZW50LT5pZDsKKwkJCXByaW1hcnlf
cHJvZmlsZXItPnNoYXJlZF9pbmZvLT5vdGhlcl9zYW1wbGVzKys7CisJCX0KKwl9CisJcmV0dXJu
IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbXNycyh2b2lkKQoreworCWludCBpOworCWZvciAo
aSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpIHsKKwkJeGZyZWUoY3B1X21zcnNbaV0uY291bnRlcnMp
OworCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IE5VTEw7CisJCXhmcmVlKGNwdV9tc3JzW2ldLmNv
bnRyb2xzKTsKKwkJY3B1X21zcnNbaV0uY29udHJvbHMgPSBOVUxMOworCX0KK30KKyAKK3N0YXRp
YyBpbnQgYWxsb2NhdGVfbXNycyh2b2lkKQoreworCWludCBzdWNjZXNzID0gMTsKKwlzaXplX3Qg
Y29udHJvbHNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJv
bHM7CisJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2Rl
bC0+bnVtX2NvdW50ZXJzOworCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsr
aSkgeworCQkvL2lmICghY3B1X29ubGluZShpKSkKKwkJaWYgKCF0ZXN0X2JpdChpLCAmY3B1X29u
bGluZV9tYXApKQorCQkJY29udGludWU7CisKKwkJY3B1X21zcnNbaV0uY291bnRlcnMgPSB4bWFs
bG9jKGNvdW50ZXJzX3NpemUpOworCQlpZiAoIWNwdV9tc3JzW2ldLmNvdW50ZXJzKSB7CisJCQlz
dWNjZXNzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9tc3JzW2ldLmNvbnRyb2xzID0geG1h
bGxvYyhjb250cm9sc19zaXplKTsKKwkJaWYgKCFjcHVfbXNyc1tpXS5jb250cm9scykgeworCQkJ
c3VjY2VzcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIXN1Y2Nlc3MpCisJCWZyZWVf
bXNycygpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc2F2
ZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGludCBjb25z
dCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29uc3QgbnJf
Y3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291bnRlcnMg
PSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3JzLT5jb250
cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJzOyArK2kp
IHsKKwkJcmRtc3IoY291bnRlcnNbaV0uYWRkciwKKwkJCWNvdW50ZXJzW2ldLnNhdmVkLmxvdywK
KwkJCWNvdW50ZXJzW2ldLnNhdmVkLmhpZ2gpOworCX0KKyAKKwlmb3IgKGkgPSAwOyBpIDwgbnJf
Y3RybHM7ICsraSkgeworCQlyZG1zcihjb250cm9sc1tpXS5hZGRyLAorCQkJY29udHJvbHNbaV0u
c2F2ZWQubG93LAorCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorCitzdGF0aWMg
dm9pZCBubWlfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCWludCBjcHUgPSBzbXBf
cHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07
CisJbW9kZWwtPmZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOworCW5taV9jcHVfc2F2ZV9yZWdpc3Rl
cnMobXNycyk7Cit9CisKK2ludCBubWlfcmVzZXJ2ZV9jb3VudGVycyh2b2lkKQoreworCWlmICgh
YWxsb2NhdGVfbXNycygpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFdlIHdhbGsgYSB0aGlu
IGxpbmUgYmV0d2VlbiBsYXcgYW5kIHJhcGUgaGVyZS4KKwkgKiBXZSBuZWVkIHRvIGJlIGNhcmVm
dWwgdG8gaW5zdGFsbCBvdXIgTk1JIGhhbmRsZXIKKwkgKiB3aXRob3V0IGFjdHVhbGx5IHRyaWdn
ZXJpbmcgYW55IE5NSXMgYXMgdGhpcyB3aWxsCisJICogYnJlYWsgdGhlIGNvcmUgY29kZSBob3Jy
aWZpY2FsbHkuCisJICovCisJLyogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0aGlzIG9uIGFsbCBDUFVz
PyovCisJaWYgKHJlc2VydmVfbGFwaWNfbm1pKCkgPCAwKSB7CisJCWZyZWVfbXNycygpOworCQly
ZXR1cm4gLUVCVVNZOworCX0KKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBzYXZlIGFuZCBzZXR1
cCBmb3IgSFQgYmVjYXVzZSB0aGUgc3Vic2V0CisJICogb2YgbXNycyBhcmUgZGlzdGluY3QgZm9y
IHNhdmUgYW5kIHNldHVwIG9wZXJhdGlvbnMKKwkgKi8KKwlvbl9lYWNoX2NwdShubWlfc2F2ZV9y
ZWdpc3RlcnMsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlf
Y3B1X3NldHVwKHZvaWQgKiBkdW1teSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp
OworCXN0cnVjdCBvcF9tc3JzICogbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCW1vZGVsLT5zZXR1
cF9jdHJzKG1zcnMpOworfQorCitpbnQgbm1pX3NldHVwX2V2ZW50cyh2b2lkKQoreworCW9uX2Vh
Y2hfY3B1KG5taV9jcHVfc2V0dXAsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitpbnQg
bm1pX2VuYWJsZV92aXJxKCkKK3sKKwlzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFjayk7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc3RhcnQodm9pZCAqIGR1bW15KQor
eworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgY29uc3Qg
KiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJc2F2ZWRfbHZ0cGNbY3B1XSA9IGFwaWNfcmVhZChB
UElDX0xWVFBDKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwltb2Rl
bC0+c3RhcnQobXNycyk7Cit9CisKK2ludCBubWlfc3RhcnQodm9pZCkKK3sKKwlvbl9lYWNoX2Nw
dShubWlfY3B1X3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwlubWlfcHJvZmlsaW5nX3N0YXJ0ZWQgPSAx
OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3N0b3Aodm9pZCAqIGR1bW15
KQoreworCXVuc2lnbmVkIGludCB2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJ
c3RydWN0IG9wX21zcnMgY29uc3QgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJbW9kZWwtPnN0
b3AobXNycyk7CisKKwkvKiByZXN0b3JpbmcgQVBJQ19MVlRQQyBjYW4gdHJpZ2dlciBhbiBhcGlj
IGVycm9yIGJlY2F1c2UgdGhlIGRlbGl2ZXJ5CisJICogbW9kZSBhbmQgdmVjdG9yIG5yIGNvbWJp
bmF0aW9uIGNhbiBiZSBpbGxlZ2FsLiBUaGF0J3MgYnkgZGVzaWduOiBvbgorCSAqIHBvd2VyIG9u
IGFwaWMgbHZ0IGNvbnRhaW4gYSB6ZXJvIHZlY3RvciBuciB3aGljaCBhcmUgbGVnYWwgb25seSBm
b3IKKwkgKiBOTUkgZGVsaXZlcnkgbW9kZS4gU28gaW5oaWJpdCBhcGljIGVyciBiZWZvcmUgcmVz
dG9yaW5nIGx2dHBjCisJICovCisJaWYgKCEoYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgQVBJQ19E
TV9OTUkpCisJCXx8IChhcGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpKSB7
CisJCXByaW50aygibm1pX3N0b3A6IEFQSUMgbm90IGdvb2QgJXBcbiIsIGFwaWNfcmVhZChBUElD
X0xWVFBDKSk7CisJCW1kZWxheSg1MDAwKTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVS
Uik7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBp
Y193cml0ZShBUElDX0xWVFBDLCBzYXZlZF9sdnRwY1tjcHVdKTsKKwlhcGljX3dyaXRlKEFQSUNf
TFZURVJSLCB2KTsKK30KKyAKK3ZvaWQgbm1pX3N0b3Aodm9pZCkKK3sKKwlubWlfcHJvZmlsaW5n
X3N0YXJ0ZWQgPSAwOworCW9uX2VhY2hfY3B1KG5taV9jcHVfc3RvcCwgTlVMTCwgMCwgMSk7CisJ
YWN0aXZlX3ZpcnFfY291bnQgPSAwOworCXBhc3NpdmVfdmlycV9jb3VudCA9IDA7CisJb3RoZXJf
dmlycV9jb3VudCA9IDA7CisJeGVuX2NvdW50ID0gMDsKKwlkb21fY291bnQgPSAwOworfQorCitl
eHRlcm4gdW5zaWduZWQgaW50IHJlYWRfY3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3Qg
bXNycywgaW50IGN0cik7CisKK3ZvaWQgbm1pX3Nhbml0eV9jaGVjayhzdHJ1Y3QgeGVuX3JlZ3Mg
KnJlZ3MsIGludCBjcHUpCit7CisJaW50IGk7CisJaW50IG1hc2tlZCA9IDA7CisKKwkvKiBXZSBt
YXkgaGF2ZSBtaXNzZWQgc29tZSBOTUkgaW50ZXJydXB0cyBpZiB3ZSB3ZXJlIGFscmVhZHkgCisJ
CWluIGFuIE5NSSBjb250ZXh0IGF0IHRoYXQgdGltZS4gSWYgdGhpcyBoYXBwZW5zLCB0aGVuIAor
CQl0aGUgY291bnRlcnMgYXJlIG5vdCByZXNldCBhbmQgaW4gdGhlIGNhc2Ugb2YgUDQsIHRoZSAK
KwkJQVBJQyBMVlQgZGlzYWJsZSBtYXNrIGlzIHNldC4gSW4gYm90aCBjYXNlcyB3ZSBlbmQgdXAg
CisJCWxvc2luZyBzYW1wbGVzLiBPbiBQNCwgdGhpcyBjb25kaXRpb24gY2FuIGJlIGRldGVjdGVk
IAorCQlieSBjaGVja2luZyB0aGUgQVBJQyBMVlQgbWFzay4gQnV0IGluIFA2LCB3ZSBuZWVkIHRv
IAorCQlleGFtaW5lIHRoZSBjb3VudGVycyBmb3Igb3ZlcmZsb3cuIFNvLCBldmVyeSB0aW1lciAK
KwkJaW50ZXJydXB0LCB3ZSBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KKworCWlmIChh
cGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpCisJCW1hc2tlZCA9IDE7CisK
KwlubWlfY2FsbGJhY2socmVncywgY3B1KTsKKworCWlmIChvdmYgJiYgbWFza2VkKSB7CisJCWlm
IChpc19hY3RpdmUoY3VycmVudCkpCisJCQljdXJyZW50LT5zaGFyZWRfaW5mby0+bm1pX3Jlc3Rh
cnRzKys7CisJCWVsc2UgaWYgKGlzX3Bhc3NpdmUoY3VycmVudCkpCisJCQlwcmltYXJ5X3Byb2Zp
bGVyLT5zaGFyZWRfaW5mby0+bm1pX3Jlc3RhcnRzKys7CisJfQorCisJLyppZiAoamlmZmllcyAl
MTAwMCA9PSAwKSB7CQorCQlwcmludGsoImNwdSAlZDogc2FtcGxlIGNvdW50ICVkICVkICVkIGF0
ICV1XG4iLCBjcHUsIGFjdGl2ZV92aXJxX2NvdW50LCBwYXNzaXZlX3ZpcnFfY291bnQsIG90aGVy
X3ZpcnFfY291bnQsIGppZmZpZXMpOworCQlwcmludGsoIm90aGVyIHRhc2sgaWQgJWRcbiIsIG90
aGVyX2lkKTsKKwkJcHJpbnRrKCIlZCBpbiB4ZW4sICVkIGluIGRvbWFpblxuIiwgeGVuX2NvdW50
LCBkb21fY291bnQpOworCQlwcmludGsoImNvdW50ZXJzICVwICVwXG4iLCByZWFkX2N0cigmY3B1
X21zcnNbY3B1XSwgMCksIHJlYWRfY3RyKCZjcHVfbXNyc1tjcHVdLCAxKSk7CisJfSovCisJCisK
Kwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2Jp
dChpLCAmdmlycV9vdmZfcGVuZGluZ1swXSkpIHsKKwkJCXNlbmRfZ3Vlc3RfdmlycShhZG9tYWlu
X3B0cnNbaV0sIFZJUlFfUE1DX09WRik7CisJCX0KK30KKwordm9pZCBubWlfZGlzYWJsZV92aXJx
KHZvaWQpCit7CisJdW5zZXRfbm1pX2NhbGxiYWNrKCk7Cit9IAorCitzdGF0aWMgdm9pZCBubWlf
cmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGlu
dCBjb25zdCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29u
c3QgbnJfY3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291
bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3Jz
LT5jb250cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJs
czsgKytpKSB7CisJCXdybXNyKGNvbnRyb2xzW2ldLmFkZHIsCisJCQljb250cm9sc1tpXS5zYXZl
ZC5sb3csCisJCQljb250cm9sc1tpXS5zYXZlZC5oaWdoKTsKKwl9CisgCisJZm9yIChpID0gMDsg
aSA8IG5yX2N0cnM7ICsraSkgeworCQl3cm1zcihjb3VudGVyc1tpXS5hZGRyLAorCQkJY291bnRl
cnNbaV0uc2F2ZWQubG93LAorCQkJY291bnRlcnNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorIAor
c3RhdGljIHZvaWQgbm1pX2NwdV9zaHV0ZG93bih2b2lkICogZHVtbXkpCit7CisJaW50IGNwdSA9
IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgb3BfbXNycyAqIG1zcnMgPSAmY3B1X21zcnNb
Y3B1XTsKKwlubWlfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7Cit9CisgCit2b2lkIG5taV9yZWxl
YXNlX2NvdW50ZXJzKHZvaWQpCit7CisJb25fZWFjaF9jcHUobm1pX2NwdV9zaHV0ZG93biwgTlVM
TCwgMCwgMSk7CisJcmVsZWFzZV9sYXBpY19ubWkoKTsKKwlmcmVlX21zcnMoKTsKK30KKworc3Ry
dWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW09QX01BWF9DT1VOVEVSXTsKKwor
c3RhdGljIGludCBfX2luaXQgcDRfaW5pdCh2b2lkKQoreworCV9fdTggY3B1X21vZGVsID0gY3Vy
cmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisKKwlpZiAoY3B1X21vZGVsID4gMykKKwkJcmV0dXJu
IDA7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCW1vZGVsID0gJm9wX3A0X3NwZWM7CisJcmV0dXJu
IDE7CisjZWxzZQorCS8vc3dpdGNoIChzbXBfbnVtX3NpYmxpbmdzKSB7CisJaWYgKGNwdV9oYXNf
aHQpIAorCXsKKwkgIG1vZGVsID0gJm9wX3A0X2h0Ml9zcGVjOworCSAgcmV0dXJuIDE7CisJfQor
CWVsc2UKKwl7CisJICBtb2RlbCA9ICZvcF9wNF9zcGVjOworCSAgcmV0dXJuIDE7CisJfQorI2Vu
ZGlmCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgcHByb19pbml0KHZvaWQp
Cit7CisJX191OCBjcHVfbW9kZWwgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbDsKKworCWlm
IChjcHVfbW9kZWwgPiAweGQpCisJCXJldHVybiAwOworCisJbW9kZWwgPSAmb3BfcHByb19zcGVj
OworCXJldHVybiAxOworfQorCitpbnQgbm1pX2luaXQoaW50ICpudW1fZXZlbnRzLCBpbnQgKmlz
X3ByaW1hcnkpCit7CisJX191OCB2ZW5kb3IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl92ZW5kb3I7
CisJX191OCBmYW1pbHkgPSBjdXJyZW50X2NwdV9kYXRhLng4NjsKKwlpbnQgcHJpbSA9IDA7Cisg
CisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHByaW1hcnlf
cHJvZmlsZXIgPT0gTlVMTCkgeworCQlwcmltYXJ5X3Byb2ZpbGVyID0gY3VycmVudDsKKwkJcHJp
bSA9IDE7CisJfQorCisJaWYgKHByaW1hcnlfcHJvZmlsZXIgIT0gY3VycmVudCkKKwkJZ290byBv
dXQ7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlz
d2l0Y2ggKGZhbWlseSkgeworCQkJCS8qIFBlbnRpdW0gSVYgKi8KKwkJCQljYXNlIDB4ZjoKKwkJ
CQkJaWYgKCFwNF9pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJ
CQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KKwkJCQljYXNlIDY6CisJCQkJCWlmICghcHBy
b19pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVs
dDoKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CXJldHVybiAtRU5PREVWOworCX0KK291dDoKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopbnVt
X2V2ZW50cywgKHZvaWQgKikmbW9kZWwtPm51bV9jb3VudGVycywgc2l6ZW9mKGludCkpKQorCQly
ZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopaXNfcHJpbWFyeSwgKHZv
aWQgKikmcHJpbSwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAw
OworfQorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291
bnRlci5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgK
LS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTE5NjktMTIt
MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94
ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0w
NzAwCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorICogQGZpbGUgb3BfY291bnRlci5oCisgKgorICog
QHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQg
dGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICoKKyAqIE1vZGlm
aWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisgCisjaWZu
ZGVmIE9QX0NPVU5URVJfSAorI2RlZmluZSBPUF9DT1VOVEVSX0gKKyAKKyNkZWZpbmUgT1BfTUFY
X0NPVU5URVIgOAorIAorLyogUGVyLXBlcmZjdHIgY29uZmlndXJhdGlvbiBhcyBzZXQgdmlhCisg
KiBvcHJvZmlsZWZzLgorICovCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgeworICAgICAgICB1
bnNpZ25lZCBsb25nIGNvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nIGVuYWJsZWQ7CisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga2VybmVsOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdW5pdF9t
YXNrOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyBjb3VudGVyX2NvbmZp
Z1tdOworCisjZW5kaWYgLyogT1BfQ09VTlRFUl9IICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94
ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj
aC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9v
cHJvZmlsZS9vcF9tb2RlbF9wNC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw
CisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwky
MDA1LTA0LTA3IDA5OjA4OjIwLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDc0NCBAQAorLyoq
CisgKiBAZmlsZSBvcF9tb2RlbF9wNC5jCisgKiBQNCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0
aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICog
QHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9h
cmUKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1v
ZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBD
by4KKyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgor
I2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNt
L3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorCisjaW5jbHVkZSAib3BfeDg2
X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorCisjZGVmaW5lIE5VTV9FVkVOVFMg
MzkKKworI2RlZmluZSBOVU1fQ09VTlRFUlNfTk9OX0hUIDgKKyNkZWZpbmUgTlVNX0VTQ1JTX05P
Tl9IVCA0NQorI2RlZmluZSBOVU1fQ0NDUlNfTk9OX0hUIDE4CisjZGVmaW5lIE5VTV9DT05UUk9M
U19OT05fSFQgKE5VTV9FU0NSU19OT05fSFQgKyBOVU1fQ0NDUlNfTk9OX0hUKQorCisjZGVmaW5l
IE5VTV9DT1VOVEVSU19IVDIgNAorI2RlZmluZSBOVU1fRVNDUlNfSFQyIDIzCisjZGVmaW5lIE5V
TV9DQ0NSU19IVDIgOQorI2RlZmluZSBOVU1fQ09OVFJPTFNfSFQyIChOVU1fRVNDUlNfSFQyICsg
TlVNX0NDQ1JTX0hUMikKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMgPSBOVU1f
Q09VTlRFUlNfTk9OX0hUOworCisKKy8qIHRoaXMgaGFzIHRvIGJlIGNoZWNrZWQgZHluYW1pY2Fs
bHkgc2luY2UgdGhlCisgICBoeXBlci10aHJlYWRlZG5lc3Mgb2YgYSBjaGlwIGlzIGRpc2NvdmVy
ZWQgYXQKKyAgIGtlcm5lbCBib290LXRpbWUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBf
bnVtX2NvdW50ZXJzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHVfaGFzX2h0
KQorCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyOworI2VuZGlmCit9CisKK3N0YXRp
YyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAor
CXJldHVybiBjcHVfaGFzX2h0ID8gMiA6IDE7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9
CisKKworLyogdGFibGVzIHRvIHNpbXVsYXRlIHNpbXBsaWZpZWQgaGFyZHdhcmUgdmlldyBvZiBw
NCByZWdpc3RlcnMgKi8KK3N0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgeworCWludCB2aXJ0X2Nv
dW50ZXI7CisJaW50IGNvdW50ZXJfYWRkcmVzczsKKwlpbnQgY2Njcl9hZGRyZXNzOworfTsKKwor
c3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgeworCWludCBlc2NyX3NlbGVjdDsgIC8qIHZhbHVlIHRv
IHB1dCBpbiBDQ0NSICovCisJaW50IGV2ZW50X3NlbGVjdDsgLyogdmFsdWUgdG8gcHV0IGluIEVT
Q1IgKi8KKwlzdHJ1Y3QgeworCQlpbnQgdmlydF9jb3VudGVyOyAvKiBmb3IgdGhpcyBjb3VudGVy
Li4uICovCisJCWludCBlc2NyX2FkZHJlc3M7IC8qIHVzZSB0aGlzIEVTQ1IgICAgICAgKi8KKwl9
IGJpbmRpbmdzWzJdOworfTsKKworLyogbmI6IHRoZXNlIENUUl8qIGRlZmluZXMgYXJlIGEgZHVw
bGljYXRlIG9mIGRlZmluZXMgaW4KKyAgIGV2ZW50L2kzODYucDQqZXZlbnRzLiAqLworCisKKyNk
ZWZpbmUgQ1RSX0JQVV8wICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ1RSX01TXzAgICAgICAgKDEg
PDwgMSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ1RSX0lRXzQg
ICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ1RSX0JQVV8yICAgICAgKDEgPDwgNCkKKyNkZWZpbmUg
Q1RSX01TXzIgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzIgICAgKDEgPDwgNikK
KyNkZWZpbmUgQ1RSX0lRXzUgICAgICAgKDEgPDwgNykKKworc3RhdGljIHN0cnVjdCBwNF9jb3Vu
dGVyX2JpbmRpbmcgcDRfY291bnRlcnMgW05VTV9DT1VOVEVSU19OT05fSFRdID0geworCXsgQ1RS
X0JQVV8wLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjAsICAgTVNSX1A0X0JQVV9DQ0NSMCB9LAorCXsg
Q1RSX01TXzAsICAgIE1TUl9QNF9NU19QRVJGQ1RSMCwgICAgTVNSX1A0X01TX0NDQ1IwIH0sCisJ
eyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwLCBNU1JfUDRfRkxBTUVfQ0NDUjAg
fSwKKwl7IENUUl9JUV80LCAgICBNU1JfUDRfSVFfUEVSRkNUUjQsICAgIE1TUl9QNF9JUV9DQ0NS
NCB9LAorCXsgQ1RSX0JQVV8yLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjIsICAgTVNSX1A0X0JQVV9D
Q0NSMiB9LAorCXsgQ1RSX01TXzIsICAgIE1TUl9QNF9NU19QRVJGQ1RSMiwgICAgTVNSX1A0X01T
X0NDQ1IyIH0sCisJeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyLCBNU1JfUDRf
RkxBTUVfQ0NDUjIgfSwKKwl7IENUUl9JUV81LCAgICBNU1JfUDRfSVFfUEVSRkNUUjUsICAgIE1T
Ul9QNF9JUV9DQ0NSNSB9Cit9OworCisjZGVmaW5lIE5VTV9VTlVTRURfQ0NDUlMJTlVNX0NDQ1JT
X05PTl9IVCAtIE5VTV9DT1VOVEVSU19OT05fSFQKKworLyogQWxsIGNjY3Igd2UgZG9uJ3QgdXNl
LiAqLworc3RhdGljIGludCBwNF91bnVzZWRfY2NjcltOVU1fVU5VU0VEX0NDQ1JTXSA9IHsKKwlN
U1JfUDRfQlBVX0NDQ1IxLAlNU1JfUDRfQlBVX0NDQ1IzLAorCU1TUl9QNF9NU19DQ0NSMSwJTVNS
X1A0X01TX0NDQ1IzLAorCU1TUl9QNF9GTEFNRV9DQ0NSMSwJTVNSX1A0X0ZMQU1FX0NDQ1IzLAor
CU1TUl9QNF9JUV9DQ0NSMCwJTVNSX1A0X0lRX0NDQ1IxLAorCU1TUl9QNF9JUV9DQ0NSMiwJTVNS
X1A0X0lRX0NDQ1IzCit9OworCisvKiBwNCBldmVudCBjb2RlcyBpbiBsaWJvcC9vcF9ldmVudC5o
IGFyZSBpbmRpY2VzIGludG8gdGhpcyB0YWJsZS4gKi8KKworc3RhdGljIHN0cnVjdCBwNF9ldmVu
dF9iaW5kaW5nIHA0X2V2ZW50c1tOVU1fRVZFTlRTXSA9IHsKKwkKKwl7IC8qIEJSQU5DSF9SRVRJ
UkVEICovCisJCTB4MDUsIDB4MDYsIAorCQl7IHtDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0s
CisJCSAge0NUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKwkKKwl7IC8qIE1JU1BS
RURfQlJBTkNIX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMywgCisJCXsgeyBDVFJfSVFfNCwgTVNS
X1A0X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0s
CisJCisJeyAvKiBUQ19ERUxJVkVSX01PREUgKi8KKwkJMHgwMSwgMHgwMSwKKwkJeyB7IENUUl9N
U18wLCBNU1JfUDRfVENfRVNDUjB9LCAgCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RDX0VTQ1Ix
fSB9CisJfSwKKwkKKwl7IC8qIEJQVV9GRVRDSF9SRVFVRVNUICovCisJCTB4MDAsIDB4MDMsIAor
CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlBVX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS
X1A0X0JQVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIElUTEJfUkVGRVJFTkNFICovCisJCTB4MDMs
IDB4MTgsCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9JVExCX0VTQ1IwfSwKKwkJICB7IENUUl9C
UFVfMiwgTVNSX1A0X0lUTEJfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNRU1PUllfQ0FOQ0VMICov
CisJCTB4MDUsIDB4MDIsCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0RBQ19FU0NSMH0sCisJ
CSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0RBQ19FU0NSMX0gfQorCX0sCisKKwl7IC8qIE1FTU9S
WV9DT01QTEVURSAqLworCQkweDAyLCAweDA4LAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9T
QUFUX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQorCX0s
CisKKwl7IC8qIExPQURfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwgMHgwNCwgCisJCXsgeyBDVFJf
RkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9T
QUFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogU1RPUkVfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwg
MHgwNSwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCisJCSAgeyBDVFJf
RkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNT0JfTE9BRF9SRVBM
QVkgKi8KKwkJMHgwMiwgMHgwMywKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X01PQl9FU0NSMH0s
CisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9NT0JfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBQQUdF
X1dBTEtfVFlQRSAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfUE1I
X0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X1BNSF9FU0NSMX0gfQorCX0sCisKKwl7
IC8qIEJTUV9DQUNIRV9SRUZFUkVOQ0UgKi8KKwkJMHgwNywgMHgwYywgCisJCXsgeyBDVFJfQlBV
XzAsIE1TUl9QNF9CU1VfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfQlNVX0VTQ1Ix
fSB9CisJfSwKKworCXsgLyogSU9RX0FMTE9DQVRJT04gKi8KKwkJMHgwNiwgMHgwMywgCisJCXsg
eyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJ
eyAvKiBJT1FfQUNUSVZFX0VOVFJJRVMgKi8KKwkJMHgwNiwgMHgxYSwgCisJCXsgeyBDVFJfQlBV
XzIsIE1TUl9QNF9GU0JfRVNDUjF9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBGU0Jf
REFUQV9BQ1RJVklUWSAqLworCQkweDA2LCAweDE3LCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0
X0ZTQl9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9IH0KKwl9LAor
CisJeyAvKiBCU1FfQUxMT0NBVElPTiAqLworCQkweDA3LCAweDA1LCAKKwkJeyB7IENUUl9CUFVf
MCwgTVNSX1A0X0JTVV9FU0NSMH0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIEJTUV9B
Q1RJVkVfRU5UUklFUyAqLworCQkweDA3LCAweDA2LAorCQl7IHsgQ1RSX0JQVV8yLCBNU1JfUDRf
QlNVX0VTQ1IxIC8qIGd1ZXNzICovfSwgIAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBY
ODdfQVNTSVNUICovCisJCTB4MDUsIDB4MDMsIAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVf
RVNDUjJ9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAv
KiBTU0VfSU5QVVRfQVNTSVNUICovCisJCTB4MDEsIDB4MzQsCisJCXsgeyBDVFJfRkxBTUVfMCwg
TVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1Ix
fSB9CisJfSwKKyAgCisJeyAvKiBQQUNLRURfU1BfVU9QICovCisJCTB4MDEsIDB4MDgsIAorCQl7
IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN
U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogUEFDS0VEX0RQX1VPUCAqLworCQkw
eDAxLCAweDBjLCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAg
eyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorCisJeyAvKiBTQ0FMQVJf
U1BfVU9QICovCisJCTB4MDEsIDB4MGEsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJN
X0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisK
Kwl7IC8qIFNDQUxBUl9EUF9VT1AgKi8KKwkJMHgwMSwgMHgwZSwKKwkJeyB7IENUUl9GTEFNRV8w
LCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVND
UjF9IH0KKwl9LAorCisJeyAvKiA2NEJJVF9NTVhfVU9QICovCisJCTB4MDEsIDB4MDIsIAorCQl7
IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN
U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogMTI4QklUX01NWF9VT1AgKi8KKwkJ
MHgwMSwgMHgxYSwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkg
IHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKworCXsgLyogWDg3X0ZQ
X1VPUCAqLworCQkweDAxLCAweDA0LCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9F
U0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorICAK
Kwl7IC8qIFg4N19TSU1EX01PVkVTX1VPUCAqLworCQkweDAxLCAweDJlLCAKKwkJeyB7IENUUl9G
TEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJ
Uk1fRVNDUjF9IH0KKwl9LAorICAKKwl7IC8qIE1BQ0hJTkVfQ0xFQVIgKi8KKwkJMHgwNSwgMHgw
MiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwg
TVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIEdMT0JBTF9QT1dFUl9FVkVOVFMgKi8K
KwkJMHgwNiwgMHgxMyAvKiBvbGRlciBtYW51YWwgc2F5cyAweDA1LCBuZXdlciAweDEzICovLAor
CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS
X1A0X0ZTQl9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogVENfTVNfWEZFUiAqLworCQkweDAwLCAw
eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RSX01TXzIs
IE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIFVPUF9RVUVVRV9XUklURVMgKi8KKwkJ
MHgwMCwgMHgwOSwKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RS
X01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIEZST05UX0VORF9FVkVOVCAq
LworCQkweDA1LCAweDA4LAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkg
IHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAvKiBFWEVDVVRJT05f
RVZFTlQgKi8KKwkJMHgwNSwgMHgwYywKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1Iy
fSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogUkVQ
TEFZX0VWRU5UICovCisJCTB4MDUsIDB4MDksCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9F
U0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8q
IElOU1RSX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0
X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0sCisK
Kwl7IC8qIFVPUFNfUkVUSVJFRCAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0lRXzQsIE1T
Ul9QNF9DUlVfRVNDUjB9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KKwl9
LAorCisJeyAvKiBVT1BfVFlQRSAqLyAgICAKKwkJMHgwMiwgMHgwMiwgCisJCXsgeyBDVFJfSVFf
NCwgTVNSX1A0X1JBVF9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X1JBVF9FU0NSMX0g
fQorCX0sCisKKwl7IC8qIFJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSAqLworCQkweDAyLCAw
eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCisJCSAgeyBDVFJfTVNf
MiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBSRVRJUkVEX0JSQU5DSF9UWVBF
ICovCisJCTB4MDIsIDB4MDQsCisJCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RCUFVfRVNDUjB9LAor
CQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQlBVX0VTQ1IxfSB9CisJfQorfTsKKworCisjZGVmaW5l
IE1JU0NfUE1DX0VOQUJMRURfUCh4KSAoKHgpICYgMSA8PCA3KQorCisjZGVmaW5lIEVTQ1JfUkVT
RVJWRURfQklUUyAweDgwMDAwMDAzCisjZGVmaW5lIEVTQ1JfQ0xFQVIoZXNjcikgKChlc2NyKSAm
PSBFU0NSX1JFU0VSVkVEX0JJVFMpCisjZGVmaW5lIEVTQ1JfU0VUX1VTUl8wKGVzY3IsIHVzcikg
KChlc2NyKSB8PSAoKCh1c3IpICYgMSkgPDwgMikpCisjZGVmaW5lIEVTQ1JfU0VUX09TXzAoZXNj
ciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMykpCisjZGVmaW5lIEVTQ1JfU0VUX1VT
Ul8xKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkpKQorI2RlZmluZSBFU0NSX1NF
VF9PU18xKGVzY3IsIG9zKSAoKGVzY3IpIHw9ICgoKG9zKSAmIDEpIDw8IDEpKQorI2RlZmluZSBF
U0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgc2VsKSAoKGVzY3IpIHw9ICgoKHNlbCkgJiAweDNm
KSA8PCAyNSkpCisjZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX01BU0soZXNjciwgbWFzaykgKChlc2Ny
KSB8PSAoKChtYXNrKSAmIDB4ZmZmZikgPDwgOSkpCisjZGVmaW5lIEVTQ1JfUkVBRChlc2NyLGhp
Z2gsZXYsaSkgZG8ge3JkbXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3Ip
LCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIEVTQ1JfV1JJVEUoZXNjcixoaWdoLGV2LGkp
IGRvIHt3cm1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gp
KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCisj
ZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCisj
ZGVmaW5lIENDQ1JfU0VUX1JFUVVJUkVEX0JJVFMoY2NjcikgKChjY2NyKSB8PSAweDAwMDMwMDAw
KQorI2RlZmluZSBDQ0NSX1NFVF9FU0NSX1NFTEVDVChjY2NyLCBzZWwpICgoY2NjcikgfD0gKCgo
c2VsKSAmIDB4MDcpIDw8IDEzKSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpICgo
Y2NjcikgfD0gKDE8PDI2KSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpICgoY2Nj
cikgfD0gKDE8PDI3KSkKKyNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0g
KDE8PDEyKSkKKyNkZWZpbmUgQ0NDUl9TRVRfRElTQUJMRShjY2NyKSAoKGNjY3IpICY9IH4oMTw8
MTIpKQorI2RlZmluZSBDQ0NSX1JFQUQobG93LCBoaWdoLCBpKSBkbyB7cmRtc3IocDRfY291bnRl
cnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5l
IENDQ1JfV1JJVEUobG93LCBoaWdoLCBpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jY2Ny
X2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENDQ1JfT1ZGX1Ao
Y2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQorI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAo
KGNjY3IpICY9ICh+KDFVPDwzMSkpKQorCisjZGVmaW5lIENUUl9SRUFEKGwsaCxpKSBkbyB7cmRt
c3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTt9IHdoaWxlICgw
KQorI2RlZmluZSBDVFJfV1JJVEUobCxpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jb3Vu
dGVyX2FkZHJlc3MsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVS
RkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKKworCisvKiB0aGlzIGFzc2lnbnMg
YSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQK
KyAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8g
c2VsZWN0IHRoZSAiZXZlbiIKKyAgIG9yICJvZGQiIHBhcnQgb2YgYWxsIHRoZSBkaXZpZGVkIHJl
c291cmNlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N0YWdnZXIodm9pZCkKK3sKKyNp
ZmRlZiBDT05GSUdfU01QCisJLyppbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVy
biAoY3B1ICE9IGZpcnN0X2NwdShjcHVfc2libGluZ19tYXBbY3B1XSkpOyovCisJLyogV2Ugd2Fu
dCB0aGUgdHdvIGxvZ2ljYWwgY3B1cyBvZiBhIHBoeXNpY2FsIGNwdSB0byB1c2UKKwlkaXNqb2lu
dCBzZXQgb2YgY291bnRlcnMuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cm9uZy4gKi8KKwlyZXR1
cm4gMDsKKyNlbmRpZgkKKwlyZXR1cm4gMDsKK30KKworCisvKiBmaW5hbGx5LCBtZWRpYXRlIGFj
Y2VzcyB0byBhIHJlYWwgaGFyZHdhcmUgY291bnRlcgorICAgYnkgcGFzc2luZyBhICJ2aXJ0dWFs
IiBjb3VudGVyIG51bWVyIHRvIHRoaXMgbWFjcm8sCisgICBhbG9uZyB3aXRoIHlvdXIgc3RhZ2dl
ciBzZXR0aW5nLiAqLworI2RlZmluZSBWSVJUX0NUUihzdGFnZ2VyLCBpKSAoKGkpICsgKChudW1f
Y291bnRlcnMpICogKHN0YWdnZXIpKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFs
dWVbTlVNX0NPVU5URVJTX05PTl9IVF07CisKKworc3RhdGljIHZvaWQgcDRfZmlsbF9pbl9hZGRy
ZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBpOyAK
Kwl1bnNpZ25lZCBpbnQgYWRkciwgc3RhZzsKKworCXNldHVwX251bV9jb3VudGVycygpOworCXN0
YWcgPSBnZXRfc3RhZ2dlcigpOworCisJLyogdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIHdlIHBheSBh
dHRlbnRpb24gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJ
bXNycy0+Y291bnRlcnNbaV0uYWRkciA9IAorCQkJcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywg
aSldLmNvdW50ZXJfYWRkcmVzczsKKwl9CisKKwkvKiBGSVhNRTogYmFkIGZlZWxpbmcsIHdlIGRv
bid0IHNhdmUgdGhlIDEwIGNvdW50ZXJzIHdlIGRvbid0IHVzZS4gKi8KKworCS8qIDE4IENDQ1Ig
cmVnaXN0ZXJzICovCisJZm9yIChpID0gMCwgYWRkciA9IE1TUl9QNF9CUFVfQ0NDUjAgKyBzdGFn
OworCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfQ0NDUjU7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl
bWVudCgpKSB7CisJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKwkKKwkvKiA0
MyBFU0NSIHJlZ2lzdGVycyBpbiB0aHJlZSBvciBmb3VyIGRpc2NvbnRpZ3VvdXMgZ3JvdXAgKi8K
Kwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPCBNU1Jf
UDRfSVFfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCW1zcnMtPmNv
bnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKworCS8qIG5vIElRX0VTQ1IwLzEgb24gc29tZSBt
b2RlbHMsIHdlIHNhdmUgYSBzZWNvbmRlIHRpbWUgQlNVX0VTQ1IwLzEKKwkgKiB0byBhdm9pZCBz
cGVjaWFsIGNhc2UgaW4gbm1pX3tzYXZlfHJlc3RvcmV9X3JlZ2lzdGVycygpICovCisJaWYgKGJv
b3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4MykgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNV
X0VTQ1IwICsgc3RhZzsKKwkJICAgICBhZGRyIDw9IE1TUl9QNF9CU1VfRVNDUjE7ICsraSwgYWRk
ciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRk
cjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYWRkciA9IE1TUl9QNF9JUV9FU0NSMCArIHN0YWc7
CisJCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfRVNDUjE7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl
bWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwkJfQorCX0KKwor
CWZvciAoYWRkciA9IE1TUl9QNF9SQVRfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1Jf
UDRfU1NVX0VTQ1IwOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQltc3JzLT5j
b250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VT
Q1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyArK2ksIGFkZHIgKz0g
YWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IGFkZHI7CisJ
fQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9JWF9FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9
IE1TUl9QNF9DUlVfRVNDUjM7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAorCQlt
c3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisKKwkvKiB0aGVyZSBhcmUgMiByZW1h
aW5pbmcgbm9uLWNvbnRpZ3VvdXNseSBsb2NhdGVkIEVTQ1JzICovCisKKwlpZiAobnVtX2NvdW50
ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsJCQorCQkvKiBzdGFuZGFyZCBub24tSFQgQ1BV
cyBoYW5kbGUgYm90aCByZW1haW5pbmcgRVNDUnMqLworCQltc3JzLT5jb250cm9sc1tpKytdLmFk
ZHIgPSBNU1JfUDRfQ1JVX0VTQ1I1OworCQltc3JzLT5jb250cm9sc1tpKytdLmFkZHIgPSBNU1Jf
UDRfQ1JVX0VTQ1I0OworCisJfSBlbHNlIGlmIChzdGFnID09IDApIHsKKwkJLyogSFQgQ1BVcyBn
aXZlIHRoZSBmaXJzdCByZW1haW5kZXIgdG8gdGhlIGV2ZW4gdGhyZWFkLCBhcworCQkgICB0aGUg
MzJuZCBjb250cm9sIHJlZ2lzdGVyICovCisJCW1zcnMtPmNvbnRyb2xzW2krK10uYWRkciA9IE1T
Ul9QNF9DUlVfRVNDUjQ7CisKKwl9IGVsc2UgeworCQkvKiBhbmQgdHdvIGNvcGllcyBvZiB0aGUg
c2Vjb25kIHRvIHRoZSBvZGQgdGhyZWFkLAorCQkgICBmb3IgdGhlIDIyc3QgYW5kIDIzbmQgY29u
dHJvbCByZWdpc3RlcnMgKi8KKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NS
VV9FU0NSNTsKKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NSVV9FU0NSNTsK
Kwl9Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKHVuc2lnbmVk
IGludCBjdHIpCit7CisJaW50IGk7CisJaW50IGNvbnN0IG1heGJpbmQgPSAyOworCXVuc2lnbmVk
IGludCBjY2NyID0gMDsKKwl1bnNpZ25lZCBpbnQgZXNjciA9IDA7CisJdW5zaWduZWQgaW50IGhp
Z2ggPSAwOworCXVuc2lnbmVkIGludCBjb3VudGVyX2JpdDsKKwlzdHJ1Y3QgcDRfZXZlbnRfYmlu
ZGluZyAqZXYgPSBOVUxMOworCXVuc2lnbmVkIGludCBzdGFnOworCisJc3RhZyA9IGdldF9zdGFn
Z2VyKCk7CisJCisJLyogY29udmVydCBmcm9tIGNvdW50ZXIgKm51bWJlciogdG8gY291bnRlciAq
Yml0KiAqLworCWNvdW50ZXJfYml0ID0gMSA8PCBWSVJUX0NUUihzdGFnLCBjdHIpOworCQorCS8q
IGZpbmQgb3VyIGV2ZW50IGJpbmRpbmcgc3RydWN0dXJlLiAqLworCWlmIChjb3VudGVyX2NvbmZp
Z1tjdHJdLmV2ZW50IDw9IDAgfHwgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCA+IE5VTV9FVkVO
VFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBj
b2RlIDB4JWx4IG91dCBvZiByYW5nZVxuIiwgCisJCSAgICAgICBjb3VudGVyX2NvbmZpZ1tjdHJd
LmV2ZW50KTsKKwkJcmV0dXJuOworCX0KKwkKKwlldiA9ICYocDRfZXZlbnRzW2NvdW50ZXJfY29u
ZmlnW2N0cl0uZXZlbnQgLSAxXSk7CisJCisJZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykg
eworCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CisK
KwkJCS8qIG1vZGlmeSBFU0NSICovCisJCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOwor
CQkJRVNDUl9DTEVBUihlc2NyKTsKKwkJCWlmIChzdGFnID09IDApIHsKKwkJCQlFU0NSX1NFVF9V
U1JfMChlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VUX09TXzAo
ZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfSBlbHNlIHsKKwkJCQlFU0NS
X1NFVF9VU1JfMShlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VU
X09TXzEoZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfQorCQkJRVNDUl9T
RVRfRVZFTlRfU0VMRUNUKGVzY3IsIGV2LT5ldmVudF9zZWxlY3QpOworCQkJRVNDUl9TRVRfRVZF
TlRfTUFTSyhlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVuaXRfbWFzayk7CQkJCisJCQlFU0NS
X1dSSVRFKGVzY3IsIGhpZ2gsIGV2LCBpKTsKKwkJICAgICAgIAorCQkJLyogbW9kaWZ5IENDQ1Ig
Ki8KKwkJCUNDQ1JfUkVBRChjY2NyLCBoaWdoLCBWSVJUX0NUUihzdGFnLCBjdHIpKTsKKwkJCUND
Q1JfQ0xFQVIoY2Njcik7CisJCQlDQ0NSX1NFVF9SRVFVSVJFRF9CSVRTKGNjY3IpOworCQkJQ0ND
Ul9TRVRfRVNDUl9TRUxFQ1QoY2NjciwgZXYtPmVzY3Jfc2VsZWN0KTsKKwkJCWlmIChzdGFnID09
IDApIHsKKwkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzAoY2Njcik7CisJCQl9IGVsc2UgeworCQkJCUND
Q1JfU0VUX1BNSV9PVkZfMShjY2NyKTsKKwkJCX0KKwkJCUNDQ1JfV1JJVEUoY2NjciwgaGlnaCwg
VklSVF9DVFIoc3RhZywgY3RyKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlwcmludGsoS0VS
Tl9FUlIgCisJICAgICAgICJvcHJvZmlsZTogUDQgZXZlbnQgY29kZSAweCVseCBubyBiaW5kaW5n
LCBzdGFnICVkIGN0ciAlZFxuIiwKKwkgICAgICAgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCwg
c3RhZywgY3RyKTsKK30KKworCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9t
c3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBp
bnQgbG93LCBoaWdoOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBzdGFnOwor
CisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwg
bG93LCBoaWdoKTsKKwlpZiAoISBNSVNDX1BNQ19FTkFCTEVEX1AobG93KSkgeworCQlwcmludGso
S0VSTl9FUlIgIm9wcm9maWxlOiBQNCBQTUMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsK
Kwl9CisKKwkvKiBjbGVhciB0aGUgY2NjcnMgd2Ugd2lsbCB1c2UgKi8KKwlmb3IgKGkgPSAwIDsg
aSA8IG51bV9jb3VudGVycyA7IGkrKykgeworCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihz
dGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJ
CUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfY291bnRlcnNbVklSVF9D
VFIoc3RhZywgaSldLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKKwl9CisKKwkvKiBjbGVhciBj
Y2NycyBvdXRzaWRlIG91ciBjb25jZXJuICovCisJZm9yIChpID0gc3RhZyA7IGkgPCBOVU1fVU5V
U0VEX0NDQ1JTIDsgaSArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCXJkbXNyKHA0X3VudXNlZF9j
Y2NyW2ldLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJCUNDQ1JfU0VUX1JFUVVJ
UkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7CisJ
fQorCisJLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29u
Y2VybikgKi8KKwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFk
ZHIgPCAgTVNSX1A0X0lRX0VTQ1IwOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJd3Jt
c3IoYWRkciwgMCwgMCk7CisJfQorCisJLyogT24gb2xkZXIgbW9kZWxzIGNsZWFyIGFsc28gTVNS
X1A0X0lRX0VTQ1IwLzEgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMpIHsK
KwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1IwLCAwLCAwKTsKKwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1Ix
LCAwLCAwKTsKKwl9CisKKwlmb3IgKGFkZHIgPSBNU1JfUDRfUkFUX0VTQ1IwICsgc3RhZzsKKwkg
ICAgIGFkZHIgPD0gTVNSX1A0X1NTVV9FU0NSMDsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50
KCkpIHsKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJfQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9N
U19FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9IE1TUl9QNF9UQ19FU0NSMTsgYWRkciArPSBh
ZGRyX2luY3JlbWVudCgpKXsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKwkKKwlmb3IgKGFk
ZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VT
Q1IzOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpeyAKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJ
fQorCisJaWYgKG51bV9jb3VudGVycyA9PSBOVU1fQ09VTlRFUlNfTk9OX0hUKSB7CQkKKwkJd3Jt
c3IoTVNSX1A0X0NSVV9FU0NSNCwgMCwgMCk7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAs
IDApOworCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjQs
IDAsIDApOworCX0gZWxzZSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAsIDApOworCX0J
CQorCQorCS8qIHNldHVwIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2Nv
dW50ZXJzIDsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CisJCQly
ZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OworCQkJcG1jX3NldHVwX29u
ZV9wNF9jb3VudGVyKGkpOworCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBW
SVJUX0NUUihzdGFnLCBpKSk7CisJCX0gZWxzZSB7CisJCQlyZXNldF92YWx1ZVtpXSA9IDA7CisJ
CX0KKwl9Cit9CisKKworZXh0ZXJuIHZvaWQgcG1jX2xvZ19ldmVudChzdHJ1Y3QgZG9tYWluICpk
LCB1bnNpZ25lZCBpbnQgZWlwLCBpbnQgbW9kZSwgaW50IGV2ZW50KTsKK2V4dGVybiBpbnQgaXNf
cHJvZmlsZWQoc3RydWN0IGRvbWFpbiAqIGQpOworZXh0ZXJuIHN0cnVjdCBkb21haW4gKiBwcmlt
YXJ5X3Byb2ZpbGVyOworCitzdGF0aWMgaW50IHA0X2NoZWNrX2N0cnModW5zaWduZWQgaW50IGNv
bnN0IGNwdSwgCisJCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywKKwkJCSAg
c3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGN0ciwgbG93
LCBoaWdoLCBzdGFnLCByZWFsOworCWludCBpLCBvdmYgPSAwOworCXVuc2lnbmVkIGxvbmcgZWlw
ID0gcmVncy0+ZWlwOworCWludCBtb2RlID0gMDsKKworCWlmIChSSU5HXzEocmVncykpCisJCW1v
ZGUgPSAxOworCWVsc2UgaWYgKFJJTkdfMChyZWdzKSkKKwkJbW9kZSA9IDI7CisKKwlzdGFnID0g
Z2V0X3N0YWdnZXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewor
CQlpZiAoIXJlc2V0X3ZhbHVlW2ldKSAKKwkJCWNvbnRpbnVlOworCisJCS8qIAorCQkgKiB0aGVy
ZSBpcyBzb21lIGVjY2VudHJpY2l0eSBpbiB0aGUgaGFyZHdhcmUgd2hpY2gKKwkJICogcmVxdWly
ZXMgdGhhdCB3ZSBwZXJmb3JtIDIgZXh0cmEgY29ycmVjdGlvbnM6CisJCSAqCisJCSAqIC0gY2hl
Y2sgYm90aCB0aGUgQ0NDUjpPVkYgZmxhZyBmb3Igb3ZlcmZsb3cgYW5kIHRoZQorCQkgKiAgIGNv
dW50ZXIgaGlnaCBiaXQgZm9yIHVuLWZsYWdnZWQgb3ZlcmZsb3dzLgorCQkgKgorCQkgKiAtIHdy
aXRlIHRoZSBjb3VudGVyIGJhY2sgdHdpY2UgdG8gZW5zdXJlIGl0IGdldHMKKwkJICogICB1cGRh
dGVkIHByb3Blcmx5LgorCQkgKiAKKwkJICogdGhlIGZvcm1lciBzZWVtcyB0byBiZSByZWxhdGVk
IHRvIGV4dHJhIE5NSXMgaGFwcGVuaW5nCisJCSAqIGR1cmluZyB0aGUgY3VycmVudCBOTUk7IHRo
ZSBsYXR0ZXIgaXMgcmVwb3J0ZWQgYXMgZXJyYXRhCisJCSAqIE4xNSBpbiBpbnRlbCBkb2MgMjQ5
MTk5LTAyOSwgcGVudGl1bSA0IHNwZWNpZmljYXRpb24KKwkJICogdXBkYXRlLCB0aG91Z2ggdGhl
aXIgc3VnZ2VzdGVkIHdvcmstYXJvdW5kIGRvZXMgbm90CisJCSAqIGFwcGVhciB0byBzb2x2ZSB0
aGUgcHJvYmxlbS4KKwkJICovCisJCQorCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CisKKwkJ
Q0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7CisgCQlDVFJfUkVBRChjdHIsIGhpZ2gsIHJlYWwp
OworCQlpZiAoQ0NDUl9PVkZfUChsb3cpIHx8IENUUl9PVkVSRkxPV19QKGN0cikpIHsKKwkJCXBt
Y19sb2dfZXZlbnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRf
dmFsdWVbaV0sIHJlYWwpOworCQkJQ0NDUl9DTEVBUl9PVkYobG93KTsKKwkJCUNDQ1JfV1JJVEUo
bG93LCBoaWdoLCByZWFsKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIHJlYWwpOwor
CQkJb3ZmID0gMTsKKwkJfQorCX0KKworCS8qIFA0IHF1aXJrOiB5b3UgaGF2ZSB0byByZS11bm1h
c2sgdGhlIGFwaWMgdmVjdG9yICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQo
QVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFNlZSBvcF9tb2RlbF9wcHJv
LmMgKi8KKwlyZXR1cm4gb3ZmOworfQorCisKK3N0YXRpYyB2b2lkIHA0X3N0YXJ0KHN0cnVjdCBv
cF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBz
dGFnOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwkJCWNvbnRp
bnVlOworCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCUNDQ1Jf
U0VUX0VOQUJMRShsb3cpOworCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywg
aSkpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0
ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOworCWludCBp
OworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50
ZXJzOyArK2kpIHsKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwor
CQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7CisJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NU
UihzdGFnLCBpKSk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfU01QCitzdHJ1Y3Qgb3BfeDg2
X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfaHQyX3NwZWMgPSB7CisJLm51bV9jb3VudGVycyA9IE5V
TV9DT1VOVEVSU19IVDIsCisJLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19IVDIsCisJLmZp
bGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzID0g
JnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKKwkuc3RhcnQg
PSAmcDRfc3RhcnQsCisJLnN0b3AgPSAmcDRfc3RvcAorfTsKKyNlbmRpZgorCitzdHJ1Y3Qgb3Bf
eDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVN
X0NPVU5URVJTX05PTl9IVCwKKwkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX05PTl9IVCwK
KwkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0
cnMgPSAmcDRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAorCS5z
dGFydCA9ICZwNF9zdGFydCwKKwkuc3RvcCA9ICZwNF9zdG9wCit9OwpkaWZmIC1QTmF1ciB4ZW4t
Mi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyB4ZW4tMi4wLjUtcHJv
Zi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCi0tLSB4ZW4tMi4wLjUveGVu
L2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAw
MDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL29w
X21vZGVsX3Bwcm8uYwkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCww
ICsxLDE2NiBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKKyAqIHBlbnRpdW0gcHJv
IC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHly
aWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZ
SU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUK
KyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVu
b24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4K
KyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNt
L2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVk
Lmg+CisgCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5o
IgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyAyCisjZGVmaW5lIE5VTV9DT05UUk9MUyAyCisKKyNk
ZWZpbmUgQ1RSX1JFQUQobCxoLG1zcnMsYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0u
YWRkciwgKGwpLCAoaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9XUklURShsLG1zcnMsYykg
ZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1MzIpKGwpLCAtMSk7fSB3aGls
ZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQorCisj
ZGVmaW5lIENUUkxfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzWyhj
KV0uYWRkciksIChsKSwgKGgpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJMX1dSSVRFKGwsaCxt
c3JzLGMpIGRvIHt3cm1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpO30g
d2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQorI2Rl
ZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKKyNkZWZpbmUgQ1RSTF9D
TEVBUih4KSAoeCAmPSAoMTw8MjEpKQorI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFs
IHw9IDE8PDIwKQorI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLHUpICh2YWwgfD0gKCh1ICYgMSkg
PDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCxrKSAodmFsIHw9ICgoayAmIDEpIDw8
IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQorI2Rl
ZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKworc3RhdGljIHVuc2lnbmVk
IGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKKyAKK3N0YXRpYyB2b2lkIHBwcm9fZmls
bF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCW1zcnMtPmNv
dW50ZXJzWzBdLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnNbMV0uYWRk
ciA9IE1TUl9QNl9QRVJGQ1RSMTsKKwkKKwltc3JzLT5jb250cm9sc1swXS5hZGRyID0gTVNSX1A2
X0VWTlRTRUwwOworCW1zcnMtPmNvbnRyb2xzWzFdLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDE7Cit9
CisKKworc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICog
Y29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyog
Y2xlYXIgYWxsIGNvdW50ZXJzICovCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsr
aSkgeworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUihsb3cp
OworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCQorCS8qIGF2b2lkIGEg
ZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KKwlmb3Ig
KGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkp
OworCX0KKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg
TlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpIHsK
KwkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CisKKwkJCUNUUl9X
UklURShjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCwgbXNycywgaSk7CisKKwkJCUNUUkxfUkVBRChs
b3csIGhpZ2gsIG1zcnMsIGkpOworCQkJQ1RSTF9DTEVBUihsb3cpOworCQkJQ1RSTF9TRVRfRU5B
QkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsK
KwkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQkJQ1RS
TF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRf
RVZFTlQobG93LCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCQlDVFJMX1dSSVRFKGxvdywg
aGlnaCwgbXNycywgaSk7CisJCX0KKwl9Cit9CisKK2V4dGVybiB2b2lkIHBtY19sb2dfZXZlbnQo
c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGVpcCwgaW50IG1vZGUsIGludCBldmVudCk7
CitleHRlcm4gaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKiBkKTsKK2V4dGVybiBzdHJ1
Y3QgZG9tYWluICogcHJpbWFyeV9wcm9maWxlcjsKKworc3RhdGljIGludCBwcHJvX2NoZWNrX2N0
cnModW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3Qg
KiBjb25zdCBtc3JzLAorCQkJICAgIHN0cnVjdCB4ZW5fcmVncyAqIGNvbnN0IHJlZ3MpCit7CisJ
dW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaSwgb3ZmID0gMDsKKwl1bnNpZ25lZCBsb25n
IGVpcCA9IHJlZ3MtPmVpcDsKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAoUklOR18xKHJlZ3MpKSAK
KwkJbW9kZSA9IDE7CisJZWxzZSBpZiAoUklOR18wKHJlZ3MpKQorCQltb2RlID0gMjsKKworCWZv
ciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1JFQUQobG93LCBoaWdo
LCBtc3JzLCBpKTsKKwkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKKwkJCXBtY19sb2dfZXZl
bnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKwkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwg
bXNycywgaSk7CisJCQlvdmYgPSAxOworCQl9CisJfQorCisJLyogT25seSBQNiBiYXNlZCBQZW50
aXVtIE0gbmVlZCB0byByZS11bm1hc2sgdGhlIGFwaWMgdmVjdG9yIGJ1dCBpdAorCSAqIGRvZXNu
J3QgaHVydCBvdGhlciBQNiB2YXJpYW50ICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGlj
X3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFdlIGNhbid0IHdv
cmsgb3V0IGlmIHdlIHJlYWxseSBoYW5kbGVkIGFuIGludGVycnVwdC4gV2UKKwkgKiBtaWdodCBo
YXZlIGNhdWdodCBhICpzZWNvbmQqIGNvdW50ZXIganVzdCBhZnRlciBvdmVyZmxvd2luZworCSAq
IHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlciB0aGVuIGFycml2ZXMKKwkgKiBhbmQgd2Ug
ZG9uJ3QgZmluZCBhIGNvdW50ZXIgdGhhdCdzIG92ZXJmbG93ZWQsIHNvIHdlCisJICogd291bGQg
cmV0dXJuIDAgYW5kIGdldCBkYXplZCArIGNvbmZ1c2VkLiBJbnN0ZWFkIHdlIGFsd2F5cworCSAq
IGFzc3VtZSB3ZSBmb3VuZCBhbiBvdmVyZmxvdy4gVGhpcyBzdWNrcy4KKwkgKi8KKwlyZXR1cm4g
b3ZmOworfQorCisgCitzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0
ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJQ1RSTF9SRUFEKGxv
dywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7CisJQ1RSTF9XUklURShs
b3csIGhpZ2gsIG1zcnMsIDApOworfQorCitzdGF0aWMgdm9pZCBwcHJvX3N0b3Aoc3RydWN0IG9w
X21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csaGlnaDsKKwlD
VFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCAwKTsKKwlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwor
CUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCAwKTsKK30KKwordW5zaWduZWQgaW50IHJlYWRf
Y3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywgaW50IGkpCit7CisJdW5zaWdu
ZWQgaW50IGxvdywgaGlnaDsKKwlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCXJldHVy
biBsb3c7Cit9CisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMg
PSB7CisJLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKKwkubnVtX2NvbnRyb2xzID0gTlVN
X0NPTlRST0xTLAorCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2Vz
LAorCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwcHJv
X2NoZWNrX2N0cnMsCisJLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCisJLnN0b3AgPSAmcHByb19zdG9w
Cit9OwpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9t
b2RlbC5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwu
aAotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAkxOTY5
LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAw
MDAwIC0wNzAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qKgorICogQGZpbGUgb3BfeDg2X21vZGVsLmgK
KyAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisg
KiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVh
ZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKgorICog
TW9kaWZpZWQgYnkgQXJhdmluZCBNZW5vbiBmb3IgWGVuCisgKiBUaGVzZSBtb2RpZmljYXRpb25z
IGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKi8KKwor
I2lmbmRlZiBPUF9YODZfTU9ERUxfSAorI2RlZmluZSBPUF9YODZfTU9ERUxfSAorCitzdHJ1Y3Qg
b3Bfc2F2ZWRfbXNyIHsKKwl1bnNpZ25lZCBpbnQgaGlnaDsKKwl1bnNpZ25lZCBpbnQgbG93Owor
fTsKKworc3RydWN0IG9wX21zciB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBvcF9z
YXZlZF9tc3Igc2F2ZWQ7Cit9OworCitzdHJ1Y3Qgb3BfbXNycyB7CisJc3RydWN0IG9wX21zciAq
IGNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3IgKiBjb250cm9sczsKK307CisKK3N0cnVjdCBwdF9y
ZWdzOworCisvKiBUaGUgbW9kZWwgdnRhYmxlIGFic3RyYWN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0
d2VlbgorICogdmFyaW91cyB4ODYgQ1BVIG1vZGVsJ3MgcGVyZmN0ciBzdXBwb3J0LgorICovCitz
dHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgeworCXVuc2lnbmVkIGludCBjb25zdCBudW1fY291bnRl
cnM7CisJdW5zaWduZWQgaW50IGNvbnN0IG51bV9jb250cm9sczsKKwl2b2lkICgqZmlsbF9pbl9h
ZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZCAoKnNldHVwX2N0
cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJaW50ICgqY2hlY2tfY3Ry
cykodW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29u
c3QgbXNycywKKwkJc3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncyk7CisJdm9pZCAoKnN0YXJ0
KShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQgKCpzdG9wKShzdHJ1
Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF94
ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9t
b2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9z
cGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3Bl
YyBjb25zdCBvcF9hdGhsb25fc3BlYzsKKworI2VuZGlmIC8qIE9QX1g4Nl9NT0RFTF9IICovCmRp
ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMgeGVuLTIuMC41
LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL3BtYy5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gv
eDg2L29wcm9maWxlL3BtYy5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisr
KyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMJMjAwNS0wNC0wNiAw
OToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICogd3JpdHRlbiBieSBBcmF2aW5kIE1l
bm9uLCBlbWFpbDogeGVub3Byb2ZAZ3JvdXBzLmhwLmNvbQorICovCisKKyNpbmNsdWRlIDx4ZW4v
c2NoZWQuaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKworaW50IGFjdGl2ZV9kb21haW5z
W01BWF9PUFJPRl9ET01BSU5TXTsKK2ludCBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJ
TlNdOwordW5zaWduZWQgaW50IGFkb21haW5zID0gMDsKK3Vuc2lnbmVkIGludCBwZG9tYWlucyA9
IDA7Cit1bnNpZ25lZCBpbnQgYWN0aXZhdGVkID0gMDsKKworI2RlZmluZSBWSVJRX0JJVE1BU0tf
U0laRQkoTUFYX09QUk9GX0RPTUFJTlMvMzIgKyAxKQorCitzdHJ1Y3QgZG9tYWluICogcHJpbWFy
eV9wcm9maWxlciA9IE5VTEw7CitzdHJ1Y3QgZG9tYWluICogYWRvbWFpbl9wdHJzW01BWF9PUFJP
Rl9ET01BSU5TXTsKK3Vuc2lnbmVkIGludCB2aXJxX292Zl9wZW5kaW5nW1ZJUlFfQklUTUFTS19T
SVpFXTsKKworaW50IGlzX2FjdGl2ZShzdHJ1Y3QgZG9tYWluICpkKSAKK3sKKwlpbnQgaTsKKwlm
b3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKGQtPmlkID09IGFjdGl2ZV9kb21h
aW5zW2ldKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3RpdmVfaWQoc3Ry
dWN0IGRvbWFpbiAqZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkr
KykKKwkJaWYgKGQgPT0gYWRvbWFpbl9wdHJzW2ldKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0x
OworfQorCit2b2lkIGZyZWVfYWRvbWFpbl9wdHJzKCkgCit7CisJaW50IGk7CisJaW50IG51bSA9
IGFkb21haW5zOworCisJYWRvbWFpbnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWSVJRX0JJVE1B
U0tfU0laRTsgaSsrKQorCQl2aXJxX292Zl9wZW5kaW5nW2ldID0gMDsKKworCWZvciAoaSA9IDA7
IGkgPCBudW07IGkrKykgeworCQlwdXRfZG9tYWluKGFkb21haW5fcHRyc1tpXSk7CisJCWFkb21h
aW5fcHRyc1tpXSA9IE5VTEw7CisJfQorfQorCitpbnQgc2V0X2Fkb21haW5fcHRycyhpbnQgbnVt
KQoreworCWludCBpOworCXN0cnVjdCBkb21haW4gKmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklS
UV9CSVRNQVNLX1NJWkU7IGkrKykKKwkJdmlycV9vdmZfcGVuZGluZ1tpXSA9IDA7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJZCA9IGZpbmRfZG9tYWluX2J5X2lkKGFjdGl2ZV9k
b21haW5zW2ldKTsKKwkJaWYgKCFkKSB7CisJCQlmcmVlX2Fkb21haW5fcHRycygpOworCQkJcmV0
dXJuIC1FRkFVTFQ7CisJCX0KKwkJYWRvbWFpbl9wdHJzW2ldID0gZDsKKwkJYWRvbWFpbnMrKzsK
Kwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXRfYWN0aXZlKHN0cnVjdCBkb21haW4gKmQpCit7
CisJaWYgKGlzX2FjdGl2ZShkKSkKKwkJcmV0dXJuIDA7CisJLyogaGFjayBpZiB3ZSBydW4gb3V0
IG9mIHNwYWNlICovCisJaWYgKGFkb21haW5zID49IE1BWF9PUFJPRl9ET01BSU5TKSB7CisJCWFk
b21haW5zLS07CisJCXB1dF9kb21haW4oYWRvbWFpbl9wdHJzW2Fkb21haW5zXSk7CisJfQorCWFj
dGl2ZV9kb21haW5zW2Fkb21haW5zXSA9IGQtPmlkOworCWlmIChnZXRfZG9tYWluKGQpKQorCQlh
ZG9tYWluX3B0cnNbYWRvbWFpbnMrK10gPSBkOworCWVsc2UgeworCQlmcmVlX2Fkb21haW5fcHRy
cygpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYXNz
aXZlKHN0cnVjdCBkb21haW4gKmQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBkb21h
aW5zOyBpKyspCisJCWlmIChkLT5pZCA9PSBwYXNzaXZlX2RvbWFpbnNbaV0pCisJCQlyZXR1cm4g
MTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKmQpCit7
CisJaWYgKGlzX2FjdGl2ZShkKSB8fCBpc19wYXNzaXZlKGQpKQorCQlyZXR1cm4gMTsKKwlyZXR1
cm4gMDsKK30KKwordm9pZCBwbWNfbG9nX2V2ZW50KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk
IGludCBlaXAsIGludCBtb2RlLCBpbnQgZXZlbnQpIAoreworCXNoYXJlZF9pbmZvX3QgKnMgPSBO
VUxMOworCXN0cnVjdCBkb21haW4gKmRlc3QgPSBkOworCWludCBoZWFkID0gMDsKKworCWlmICgh
aXNfcHJvZmlsZWQoZCkpCisJCXJldHVybjsKKworCWlmIChpc19wYXNzaXZlKGQpKSB7CisJCWRl
c3QgPSBwcmltYXJ5X3Byb2ZpbGVyOworCQlnb3RvIGxvZ19wYXNzaXZlOworCX0KKwkJCitsb2df
YWN0aXZlOgorCXMgPSBkZXN0LT5zaGFyZWRfaW5mbzsKKworCWhlYWQgPSBzLT5ldmVudF9oZWFk
OworCWlmIChoZWFkID49IE1BWF9PUFJPRl9FVkVOVFMpCisJCWhlYWQgPSAwOworCisJaWYgKHMt
Pmxvc2luZ19zYW1wbGVzKQorCQlzLT5zYW1wbGVzX2xvc3QrKzsKKwlpZiAoaGVhZCA9PSBzLT5l
dmVudF90YWlsIC0gMSB8fCAoaGVhZCA9PSBNQVhfT1BST0ZfRVZFTlRTIC0gMSAmJiBzLT5ldmVu
dF90YWlsID09IDApKQorCQlzLT5sb3Npbmdfc2FtcGxlcyA9IDE7CisKKwlzLT5ldmVudF9sb2db
aGVhZF0uZWlwID0gZWlwOworCXMtPmV2ZW50X2xvZ1toZWFkXS5tb2RlID0gbW9kZTsKKwlzLT5l
dmVudF9sb2dbaGVhZF0uZXZlbnQgPSBldmVudDsKKwloZWFkKys7CisJcy0+ZXZlbnRfaGVhZCA9
IGhlYWQ7CisJcmV0dXJuOworCitsb2dfcGFzc2l2ZToKKwkvKiBXZSB1c2UgdGhlIGZvbGxvd2lu
ZyBpbmVmZmljaWVudCBmb3JtYXQgZm9yIGxvZ2dpbmcgZXZlbnRzIGZyb20gb3RoZXIKKwkJZG9t
YWlucy4gV2UgcHV0IGEgc3BlY2lhbCByZWNvcmQgaW5kaWNhdGluZyB0aGF0IHRoZSBuZXh0IHJl
Y29yZCBpcworCQlmb3IgYW5vdGhlciBkb21haW4uIFRoaXMgaXMgZG9uZSBmb3IgZWFjaCBzYW1w
bGUgZnJvbSBhbm90aGVyCisJCWRvbWFpbiAqLyAKKwlzID0gZGVzdC0+c2hhcmVkX2luZm87CisK
KwloZWFkID0gcy0+ZXZlbnRfaGVhZDsKKwlpZiAoaGVhZCA+PSBNQVhfT1BST0ZfRVZFTlRTKQor
CQloZWFkID0gMDsKKworCWlmIChzLT5sb3Npbmdfc2FtcGxlcykKKwkJcy0+c2FtcGxlc19sb3N0
Kys7CisJaWYgKGhlYWQgPT0gcy0+ZXZlbnRfdGFpbCAtIDEgfHwgKGhlYWQgPT0gTUFYX09QUk9G
X0VWRU5UUyAtIDEgJiYgcy0+ZXZlbnRfdGFpbCA9PSAwKSkKKwkJcy0+bG9zaW5nX3NhbXBsZXMg
PSAxOworCisJcy0+ZXZlbnRfbG9nW2hlYWRdLmVpcCA9IH4xVUw7CisJcy0+ZXZlbnRfbG9nW2hl
YWRdLm1vZGUgPSB+MDsKKwlzLT5ldmVudF9sb2dbaGVhZF0uZXZlbnQgPSBkLT5pZDsKKwloZWFk
Kys7CisJcy0+ZXZlbnRfaGVhZCA9IGhlYWQ7CisJZ290byBsb2dfYWN0aXZlOworfQorCitzdGF0
aWMgdm9pZCBwbWNfZXZlbnRfaW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXNoYXJlZF9pbmZv
X3QgKnMgPSBkLT5zaGFyZWRfaW5mbzsKKwlzLT5ldmVudF9oZWFkID0gMDsKKwlzLT5ldmVudF90
YWlsID0gMDsKKwlzLT5sb3Npbmdfc2FtcGxlcyA9IDA7CisJcy0+c2FtcGxlc19sb3N0ID0gMDsK
KwlzLT5ubWlfcmVzdGFydHMgPSAwOworCXMtPmFjdGl2ZV9zYW1wbGVzID0gMDsKKwlzLT5wYXNz
aXZlX3NhbXBsZXMgPSAwOworCXMtPm90aGVyX3NhbXBsZXMgPSAwOworfQorCitleHRlcm4gaW50
IG5taV9pbml0KGludCAqbnVtX2V2ZW50cywgaW50ICppc19wcmltYXJ5KTsKK2V4dGVybiBpbnQg
bm1pX3Jlc2VydmVfY291bnRlcnModm9pZCk7CitleHRlcm4gaW50IG5taV9zZXR1cF9ldmVudHMo
dm9pZCk7CitleHRlcm4gaW50IG5taV9lbmFibGVfdmlycSh2b2lkKTsKK2V4dGVybiBpbnQgbm1p
X3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBu
bWlfZGlzYWJsZV92aXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3JlbGVhc2VfY291bnRlcnMo
dm9pZCk7CisKKyNkZWZpbmUgUFJJVl9PUChvcCkJKChvcCA9PSBQTUNfU0VUX0FDVElWRSkgfHwg
KG9wID09IFBNQ19TRVRfUEFTU0lWRSkgfHwgKG9wID09IFBNQ19SRVNFUlZFX0NPVU5URVJTKSBc
CisJCQl8fCAob3AgPT0gUE1DX1NFVFVQX0VWRU5UUykgfHwgKG9wID09IFBNQ19TVEFSVCkgfHwg
KG9wID09IFBNQ19TVE9QKSBcCisJCQl8fCAob3AgPT0gUE1DX1JFTEVBU0VfQ09VTlRFUlMpIHx8
IChvcCA9PSBQTUNfU0hVVERPV04pKQorCitpbnQgZG9fcG1jX29wKGludCBvcCwgdW5zaWduZWQg
aW50IGFyZzEsIHVuc2lnbmVkIGludCBhcmcyKQoreworCWludCByZXQgPSAwOworCisJaWYgKFBS
SVZfT1Aob3ApICYmIGN1cnJlbnQgIT0gcHJpbWFyeV9wcm9maWxlcikKKwkJcmV0dXJuIC1FUEVS
TTsKKworCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBQTUNfSU5JVDoKKwkJCXJldCA9IG5taV9pbml0
KChpbnQgKilhcmcxLCAoaW50ICopYXJnMik7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19TRVRf
QUNUSVZFOgorCQkJaWYgKGFkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCWlm
IChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZhY3RpdmVfZG9tYWlucywKKwkJCQkodm9pZCAqKWFy
ZzEsIGFyZzIqc2l6ZW9mKGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHNldF9h
ZG9tYWluX3B0cnMoYXJnMikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoc2V0X2FjdGl2
ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D
X1NFVF9QQVNTSVZFOgorCQkJaWYgKHBkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsK
KwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZwYXNzaXZlX2RvbWFpbnMsCisJCQkJKHZv
aWQgKilhcmcxLCBhcmcyKnNpemVvZihpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXBk
b21haW5zID0gYXJnMjsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1DX1JFU0VSVkVfQ09VTlRFUlM6
CisJCQlyZXQgPSBubWlfcmVzZXJ2ZV9jb3VudGVycygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQ
TUNfU0VUVVBfRVZFTlRTOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmNvdW50ZXJf
Y29uZmlnLCAKKwkJCQkodm9pZCAqKWFyZzEsIGFyZzIqc2l6ZW9mKHN0cnVjdCBvcF9jb3VudGVy
X2NvbmZpZykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0ID0gbm1pX3NldHVwX2V2ZW50
cygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfRU5BQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj
dGl2ZShjdXJyZW50KSkgeworCQkJCWlmIChjdXJyZW50ICE9IHByaW1hcnlfcHJvZmlsZXIpCisJ
CQkJCXJldHVybiAtRVBFUk07CisJCQkJZWxzZQorCQkJCQlzZXRfYWN0aXZlKGN1cnJlbnQpOwor
CQkJfQorCQkJcmV0ID0gbm1pX2VuYWJsZV92aXJxKCk7CisJCQlwbWNfZXZlbnRfaW5pdChjdXJy
ZW50KTsKKwkJCWFjdGl2YXRlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RBUlQ6CisJ
CQlpZiAoYWN0aXZhdGVkIDwgYWRvbWFpbnMpCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9
IG5taV9zdGFydCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RPUDoKKwkJCW5taV9zdG9w
KCk7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19ESVNBQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj
dGl2ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJbm1pX2Rpc2FibGVfdmlycSgp
OworCQkJYWN0aXZhdGVkLS07CisJCQlicmVhazsKKworCQljYXNlIFBNQ19SRUxFQVNFX0NPVU5U
RVJTOgorCQkJbm1pX3JlbGVhc2VfY291bnRlcnMoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D
X1NIVVRET1dOOgorCQkJZnJlZV9hZG9tYWluX3B0cnMoKTsKKwkJCXBkb21haW5zID0gMDsKKwkJ
CWFjdGl2YXRlZCA9IDA7CisJCQlwcmltYXJ5X3Byb2ZpbGVyID0gTlVMTDsKKwkJCWJyZWFrOwor
CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZm
IC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3RyYXBzLmMgeGVuLTIuMC41LXByb2YveGVu
L2FyY2gveDg2L3RyYXBzLmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvdHJhcHMuYwkyMDA1
LTAzLTEwIDExOjUyOjE1LjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy
Y2gveDg2L3RyYXBzLmMJMjAwNS0wNC0wNiAxMDoyOTowNC4wMDAwMDAwMDAgLTA3MDAKQEAgLTIs
NiArMiwxMCBAQAogICogYXJjaC9pMzg2L3RyYXBzLmMKICAqIAogICogTW9kaWZpY2F0aW9ucyB0
byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIK
KyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl
CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds
ZXR0LVBhY2thcmQgQ28uCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAt
NTEsNiArNTUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2kz
ODcuaD4KICNpbmNsdWRlIDxhc20vZGVidWdnZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAK
IC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9yZScsICdkb20wJywgb3IgJ2ZhdGFsJy4KQEAg
LTU5OCw3ICs2MDMsNyBAQAogICAgIHByaW50aygiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2Vy
IHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGRvX25taShz
dHJ1Y3QgeGVuX3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcmVhc29uKQorc3RhdGljIHZvaWQg
ZGVmYXVsdF9kb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyByZWFz
b24pCiB7CiAgICAgKytubWlfY291bnQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtNjEwLDYg
KzYxNSwzNSBAQAogICAgICAgICB1bmtub3duX25taV9lcnJvcigodW5zaWduZWQgY2hhcikocmVh
c29uJjB4ZmYpKTsKIH0KIAorc3RhdGljIGludCBkdW1teV9ubWlfY2FsbGJhY2soc3RydWN0IHhl
bl9yZWdzICogcmVncywgaW50IGNwdSkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBubWlfY2FsbGJhY2tfdCBubWlfY2FsbGJhY2sgPSBkdW1teV9ubWlfY2FsbGJhY2s7CisKK2Fz
bWxpbmthZ2Ugdm9pZCBkb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9u
ZyByZWFzb24pCit7CisJaW50IGNwdTsKKyAgICAgICAgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp
OworCisgICAgICAgIGlmICghbm1pX2NhbGxiYWNrKHJlZ3MsIGNwdSkpIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHRfZG9fbm1pKHJlZ3MsIHJlYXNvbik7Cit9CisKK3ZvaWQgc2V0X25taV9jYWxs
YmFjayhubWlfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3sKKyAgICAgICAgbm1pX2NhbGxiYWNrID0g
Y2FsbGJhY2s7Cit9CisKK3ZvaWQgdW5zZXRfbm1pX2NhbGxiYWNrKHZvaWQpCit7CisgICAgICAg
IG5taV9jYWxsYmFjayA9IGR1bW15X25taV9jYWxsYmFjazsKK30KKworRVhQT1JUX1NZTUJPTChz
ZXRfbm1pX2NhbGxiYWNrKTsKK0VYUE9SVF9TWU1CT0wodW5zZXRfbm1pX2NhbGxiYWNrKTsKKwog
dW5zaWduZWQgbG9uZyBubWlfc29mdGlycV9yZWFzb247CiBzdGF0aWMgdm9pZCBubWlfc29mdGly
cSh2b2lkKQogewpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRy
eS5TIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwotLS0geGVuLTIu
MC41L3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwkyMDA1LTAzLTEwIDExOjUyOjE2LjAwMDAw
MDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRyeS5T
CTIwMDUtMDQtMDYgMTA6MjM6NDYuMDAwMDAwMDAwIC0wNzAwCkBAIC0zLDYgKzMsMTAgQEAKICAq
CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgSyBBIEZyYXNlcgogICogQ29weXJpZ2h0IChj
KSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCisgKgorICogTW9kaWZpZWQgYnkgQXJhdmluZCBN
ZW5vbiBmb3Igc3VwcG9ydGluZyBvcHJvZmlsZQorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgogICogCiAgKiBDYWxs
aW5nIGJhY2sgdG8gYSBndWVzdCBPUzoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PQpA
QCAtNDk4LDEwICs1MDIsMTAgQEAKICAgICAgICAgam56ICAgZG9fd2F0Y2hkb2dfdGljawogICAg
ICAgICBtb3ZsICAlZHMsJWVheAogICAgICAgICBjbXB3ICAkKF9fSFlQRVJWSVNPUl9EUyksJWF4
Ci0gICAgICAgIGpuZSAgIGRlZmVyX25taQorICAgICAgICBqbmUgICBmb3JjZV9ubWkKICAgICAg
ICAgbW92bCAgJWVzLCVlYXgKICAgICAgICAgY21wdyAgJChfX0hZUEVSVklTT1JfRFMpLCVheAot
ICAgICAgICBqbmUgICBkZWZlcl9ubWkKKyAgICAgICAgam5lICAgZm9yY2Vfbm1pCiAKIGRvX3dh
dGNoZG9nX3RpY2s6CiAgICAgICAgIG1vdmwgICQoX19IWVBFUlZJU09SX0RTKSwlZWR4CkBAIC01
MTIsMTIgKzUxNiw0NCBAQAogCXB1c2hsICVlZHggICAjIHJlZ3MKICAgICAgICAgY2FsbCAgU1lN
Qk9MX05BTUUoZG9fbm1pKQogCWFkZGwgICQ4LCVlc3AKKworCS8qIHhlbm9wcm9mOiBXZSBuZWVk
IHRvIGNoZWNrIGlmIHZpcnR1YWwgaW50ZXJydXB0IG11c3QgYmUgZ2VuZXJhdGVkICovCisJam1w
IHJldF9mcm9tX2ludHIKKworCS8qCiAgICAgICAgIG1vdmwgIFhSRUdTX2VmbGFncyglZXNwKSwl
ZWF4CiAgICAgICAgIG1vdmIgIFhSRUdTX2NzKCVlc3ApLCVhbAogICAgICAgICB0ZXN0bCAkKDN8
WDg2X0VGTEFHU19WTSksJWVheAogCWp6ICAgIHJlc3RvcmVfYWxsX3hlbgogICAgICAgICBHRVRf
Q1VSUkVOVCglZWJ4KQogICAgICAgICBqbXAgICByZXN0b3JlX2FsbF9ndWVzdAorCSovCisKK2Zv
cmNlX25taToKKwltb3ZsICVkcywtNCglZXNwKQorCW1vdmwgJWVzLC04KCVlc3ApCisJbW92bCAl
ZnMsLTEyKCVlc3ApCisJbW92bCAlZ3MsLTE2KCVlc3ApCisJc3VibCAkMTYsJWVzcAorCisJbW92
bCAkKF9fSFlQRVJWSVNPUl9EUyksJWVkeAorCW1vdmwgJWVkeCwlZHMKKwltb3ZsICVlZHgsJWVz
CisJCisJbW92bCAlZXNwLCVlZHgKKwlhZGRsICQxNiwlZWR4CisJcHVzaGwgJWVieAorCXB1c2hs
ICVlZHgKKwljYWxsIFNZTUJPTF9OQU1FKGRvX25taSkKKwlhZGRsICQ4LCVlc3AKKworCWFkZGwg
JDE2LCVlc3AKKwltb3ZsIC00KCVlc3ApLCVkcworCW1vdmwgLTgoJWVzcCksJWVzCisJbW92bCAt
MTIoJWVzcCksJWZzCisJbW92bCAtMTYoJWVzcCksJWdzCisKKwlqbXAgcmVzdG9yZV9hbGxfeGVu
CiAKIGRlZmVyX25taToKICAgICAgICAgbW92bCAgJEZJWE1BUF9hcGljX2Jhc2UsJWVheApAQCAt
Njc0LDYgKzcxMCw3IEBACiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3ZtX2Fzc2lzdCkK
ICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21h
aW4pCiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3N3aXRjaF92bTg2KQorICAgICAgICAu
bG9uZyBTWU1CT0xfTkFNRShkb19wbWNfb3ApCiAgICAgICAgIC5yZXB0IE5SX2h5cGVyY2FsbHMt
KCguLWh5cGVyY2FsbF90YWJsZSkvNCkKICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fbmlf
aHlwZXJjYWxsKQogICAgICAgICAuZW5kcgpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2luY2x1
ZGUvYXNtLXg4Ni9hcGljLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGlj
LmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L2FwaWMuaAkyMDA1LTAzLTEwIDEx
OjUyOjEyLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNt
LXg4Ni9hcGljLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTc3LDYg
Kzc3LDggQEAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCB4
ZW5fcmVncyAqIHJlZ3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfQVBJQ19jbG9ja3MgKHZvaWQpOwog
ZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIGludCBy
ZXNlcnZlX2xhcGljX25taSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZv
aWQpOwogZXh0ZXJuIHZvaWQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCB4ZW5fcmVncyAqIHJl
Z3MpOwogZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBB
UElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lkKTsKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9p
bmNsdWRlL2FzbS14ODYvbXNyLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9t
c3IuaAotLS0geGVuLTIuMC41L3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmgJMjAwNS0wMy0xMCAx
MTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2Fz
bS14ODYvbXNyLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTgsMzgg
KzgsMzggQEAKICAqLwogCiAjZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpIFwKLSAgICAgX19h
c21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNy
IiBcCiAJCQkgIDogIj1hIiAodmFsMSksICI9ZCIgKHZhbDIpIFwKIAkJCSAgOiAiYyIgKG1zcikp
CiAKLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyBc
Ci0gICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCi0JCQkgICAgOiAiPWEiIChh
X18pLCAiPWQiIChiX18pIFwKLQkJCSAgICA6ICJjIiAobXNyKSk7IFwKLSAgICAgICB2YWwgPSBh
X18gfCAoYl9fPDwzMik7IFwKLX0gd2hpbGUoMCk7IAotCiAjZGVmaW5lIHdybXNyKG1zcix2YWwx
LHZhbDIpIFwKLSAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiBcCisJX19hc21fXyBf
X3ZvbGF0aWxlX18oIndybXNyIiBcCiAJCQkgIDogLyogbm8gb3V0cHV0cyAqLyBcCiAJCQkgIDog
ImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQogCisjZGVmaW5lIHJkbXNybChtc3Is
dmFsKSBkbyB7IFwKKwl1bnNpZ25lZCBsb25nIGxfXyxoX187IFwKKwlyZG1zciAobXNyLCBsX18s
IGhfXyk7ICBcCisJdmFsID0gbF9fOyAgXAorCXZhbCB8PSAoKHU2NCloX188PDMyKTsgIFwKK30g
d2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHdybXNybCAodW5zaWduZWQgbG9uZyBtc3Is
IHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CisJbG8g
PSAodW5zaWduZWQgbG9uZykgdmFsOworCWhpID0gdmFsID4+IDMyOworCXdybXNyIChtc3IsIGxv
LCBoaSk7Cit9CisKICNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIFwKICAgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKQogCiAjZGVmaW5lIHJk
dHNjbChsb3cpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxv
dykgOiA6ICJlZHgiKQogCi0jaWYgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgcmR0c2NsbCh2
YWwpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHZhbCkpCi0j
ZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7IFwKLSAg
ICAgdW5zaWduZWQgaW50IGEsZDsgXAotICAgICBhc20gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIg
KGEpLCAiPWQiIChkKSk7IFwKLSAgICAgKHZhbCkgPSAoKHVuc2lnbmVkIGxvbmcpYSkgfCAoKCh1
bnNpZ25lZCBsb25nKWQpPDwzMik7IFwKLX0gd2hpbGUoMCkKLSNlbmRpZgogCiAjZGVmaW5lIHdy
aXRlX3RzYyh2YWwxLHZhbDIpIHdybXNyKDB4MTAsIHZhbDEsIHZhbDIpCiAKQEAgLTU1LDY2ICs1
NSw2IEBACiAjZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDE3CiAjZGVmaW5lIE1TUl9J
QTMyX0VCTF9DUl9QT1dFUk9OCQkweDJhCiAKLS8qIEFNRC9LOCBzcGVjaWZpYyBNU1JzICovIAot
I2RlZmluZSBNU1JfRUZFUiAweGMwMDAwMDgwCQkvKiBleHRlbmRlZCBmZWF0dXJlIHJlZ2lzdGVy
ICovCi0jZGVmaW5lIE1TUl9TVEFSIDB4YzAwMDAwODEJCS8qIGxlZ2FjeSBtb2RlIFNZU0NBTEwg
dGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9MU1RBUiAweGMwMDAwMDgyIAkJLyogbG9uZyBtb2RlIFNZ
U0NBTEwgdGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9DU1RBUiAweGMwMDAwMDgzCQkvKiBjb21wYXRp
YmlsaXR5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSyAw
eGMwMDAwMDg0CS8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCi0jZGVmaW5lIE1TUl9GU19C
QVNFIDB4YzAwMDAxMDAJCS8qIDY0Yml0IEdTIGJhc2UgKi8KLSNkZWZpbmUgTVNSX0dTX0JBU0Ug
MHhjMDAwMDEwMQkJLyogNjRiaXQgRlMgYmFzZSAqLwotI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JB
U0UgIDB4YzAwMDAxMDIJLyogU3dhcEdTIEdTIHNoYWRvdyAob3IgVVNFUl9HUyBmcm9tIGtlcm5l
bCkgKi8gCi0vKiBFRkVSIGJpdHM6ICovIAotI2RlZmluZSBfRUZFUl9TQ0UgMCAgLyogU1lTQ0FM
TC9TWVNSRVQgKi8KLSNkZWZpbmUgX0VGRVJfTE1FIDggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8K
LSNkZWZpbmUgX0VGRVJfTE1BIDEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8K
LSNkZWZpbmUgX0VGRVJfTlggMTEgIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCi0KLSNkZWZpbmUg
RUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKLSNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkK
LSNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKLSNkZWZpbmUgRUZFUl9OWCAoMTw8X0VG
RVJfTlgpCi0KLS8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BV
cyAqLwotI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkweDE3Ci0KLSNkZWZpbmUgTVNSX0lB
MzJfUEVSRkNUUjAgICAgICAweGMxCi0jZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxICAgICAgMHhj
MgotCi0jZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQotI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1Jf
Q1RMICAgICAgICAweDExOQotCi0jZGVmaW5lIE1TUl9JQTMyX01DR19DQVAgICAgICAgMHgxNzkK
LSNkZWZpbmUgTVNSX0lBMzJfTUNHX1NUQVRVUyAgICAgICAgMHgxN2EKLSNkZWZpbmUgTVNSX0lB
MzJfTUNHX0NUTCAgICAgICAweDE3YgotCi0jZGVmaW5lIE1TUl9JQTMyX0VWTlRTRUwwICAgICAg
MHgxODYKLSNkZWZpbmUgTVNSX0lBMzJfRVZOVFNFTDEgICAgICAweDE4NwotCi0jZGVmaW5lIE1T
Ul9JQTMyX0RFQlVHQ1RMTVNSICAgICAgIDB4MWQ5Ci0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFO
Q0hGUk9NSVAgIDB4MWRiCi0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQICAgICAgICAw
eDFkYwotI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQICAgICAweDFkZAotI2RlZmluZSBN
U1JfSUEzMl9MQVNUSU5UVE9JUCAgICAgICAweDFkZQotCi0jZGVmaW5lIE1TUl9NVFJSZml4NjRL
XzAwMDAwCTB4MjUwCi0jZGVmaW5lIE1TUl9NVFJSZml4MTZLXzgwMDAwCTB4MjU4Ci0jZGVmaW5l
IE1TUl9NVFJSZml4MTZLX0EwMDAwCTB4MjU5Ci0jZGVmaW5lIE1TUl9NVFJSZml4NEtfQzAwMDAJ
MHgyNjgKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19DODAwMAkweDI2OQotI2RlZmluZSBNU1JfTVRS
UmZpeDRLX0QwMDAwCTB4MjZhCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAJMHgyNmIKLSNk
ZWZpbmUgTVNSX01UUlJmaXg0S19FMDAwMAkweDI2YwotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4
MDAwCTB4MjZkCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRjAwMDAJMHgyNmUKLSNkZWZpbmUgTVNS
X01UUlJmaXg0S19GODAwMAkweDI2ZgotI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCTB4MmZmCi0K
LSNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTCAgICAgICAweDQwMAotI2RlZmluZSBNU1JfSUEzMl9N
QzBfU1RBVFVTICAgICAgICAweDQwMQotI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUiAgICAgIDB4
NDAyCi0jZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDICAgICAgMHg0MDMKLQogI2RlZmluZSBNU1Jf
SUEzMl9BUElDQkFTRQkJMHgxYgogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AJCSgxPDw4
KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUJKDE8PDExKQpAQCAtMTIzLDEyICs2
MywzOCBAQAogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHg3OQogI2RlZmluZSBNU1Jf
SUEzMl9VQ09ERV9SRVYJCTB4OGIKIAorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCTB4YzEKKyNk
ZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkweGMyCisKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NU
TAkJMHgxMTkKIAorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgxNzQKKyNkZWZpbmUg
TVNSX0lBMzJfU1lTRU5URVJfRVNQCQkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9F
SVAJCTB4MTc2CisKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgxNzkKICNkZWZpbmUgTVNS
X0lBMzJfTUNHX1NUQVRVUwkJMHgxN2EKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgxN2IK
IAorLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgx
ODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNH
X0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNS
X0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNk
ZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJ
MHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lB
MzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQor
CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VM
MQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5l
IE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRS
T0wJCTB4MTlhCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgogI2RlZmlu
ZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCkBAIC0xNDUsMjkgKzExMSw5MSBAQAogI2Rl
ZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKICNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJ
CTB4NDAzCiAKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHhjMQotI2RlZmluZSBNU1JfUDZf
UEVSRkNUUjEJCQkweGMyCi0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2Ci0jZGVmaW5l
IE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisvKiBQZW50aXVtIElWIHBlcmZvcm1hbmNlIGNvdW50
ZXIgTVNScyAqLworI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIAkJMHgzMDAKKyNkZWZpbmUg
TVNSX1A0X0JQVV9QRVJGQ1RSMSAJCTB4MzAxCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIg
CQkweDMwMgorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIAkJMHgzMDMKKyNkZWZpbmUgTVNS
X1A0X01TX1BFUkZDVFIwIAkJMHgzMDQKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIAkJMHgz
MDUKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIAkJMHgzMDYKKyNkZWZpbmUgTVNSX1A0X01T
X1BFUkZDVFIzIAkJMHgzMDcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIAkJMHgzMDgK
KyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIAkJMHgzMDkKKyNkZWZpbmUgTVNSX1A0X0ZM
QU1FX1BFUkZDVFIyIAkJMHgzMGEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIAkJMHgz
MGIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIAkJMHgzMGMKKyNkZWZpbmUgTVNSX1A0X0lR
X1BFUkZDVFIxIAkJMHgzMGQKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIAkJMHgzMGUKKyNk
ZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIAkJMHgzMGYKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZD
VFI0IAkJMHgzMTAKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IAkJMHgzMTEKKyNkZWZpbmUg
TVNSX1A0X0JQVV9DQ0NSMCAJCTB4MzYwCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjEgCQkweDM2
MQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIAkJMHgzNjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9D
Q0NSMyAJCTB4MzYzCisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAJCTB4MzY0CisjZGVmaW5lIE1T
Ul9QNF9NU19DQ0NSMSAJCTB4MzY1CisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAJCTB4MzY2Cisj
ZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAJCTB4MzY3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NS
MCAJCTB4MzY4CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAJCTB4MzY5CisjZGVmaW5lIE1T
Ul9QNF9GTEFNRV9DQ0NSMiAJCTB4MzZhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMyAJCTB4
MzZiCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAJCTB4MzZjCisjZGVmaW5lIE1TUl9QNF9JUV9D
Q0NSMSAJCTB4MzZkCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMiAJCTB4MzZlCisjZGVmaW5lIE1T
Ul9QNF9JUV9DQ0NSMyAJCTB4MzZmCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAJCTB4MzcwCisj
ZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNSAJCTB4MzcxCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAg
CQkweDNjYQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIAkJMHgzY2IKKyNkZWZpbmUgTVNSX1A0
X0JQVV9FU0NSMCAJCTB4M2IyCisjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgCQkweDNiMworI2Rl
ZmluZSBNU1JfUDRfQlNVX0VTQ1IwIAkJMHgzYTAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAJ
CTB4M2ExCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgCQkweDNiOAorI2RlZmluZSBNU1JfUDRf
Q1JVX0VTQ1IxIAkJMHgzYjkKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAJCTB4M2NjCisjZGVm
aW5lIE1TUl9QNF9DUlVfRVNDUjMgCQkweDNjZAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IAkJ
MHgzZTAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAJCTB4M2UxCisjZGVmaW5lIE1TUl9QNF9E
QUNfRVNDUjAgCQkweDNhOAorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIAkJMHgzYTkKKyNkZWZp
bmUgTVNSX1A0X0ZJUk1fRVNDUjAgCQkweDNhNAorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAJ
CTB4M2E1CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMCAJCTB4M2E2CisjZGVmaW5lIE1TUl9Q
NF9GTEFNRV9FU0NSMSAJCTB4M2E3CisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgCQkweDNhMgor
I2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIAkJMHgzYTMKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1Iw
IAkJMHgzYmEKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIAkJMHgzYmIKKyNkZWZpbmUgTVNSX1A0
X0lTX0VTQ1IwIAkJMHgzYjQKKyNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxIAkJMHgzYjUKKyNkZWZp
bmUgTVNSX1A0X0lUTEJfRVNDUjAgCQkweDNiNgorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAJ
CTB4M2I3CisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAJCTB4M2M4CisjZGVmaW5lIE1TUl9QNF9J
WF9FU0NSMSAJCTB4M2M5CisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgCQkweDNhYQorI2RlZmlu
ZSBNU1JfUDRfTU9CX0VTQ1IxIAkJMHgzYWIKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIAkJMHgz
YzAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIAkJMHgzYzEKKyNkZWZpbmUgTVNSX1A0X1BNSF9F
U0NSMCAJCTB4M2FjCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEgCQkweDNhZAorI2RlZmluZSBN
U1JfUDRfUkFUX0VTQ1IwIAkJMHgzYmMKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAJCTB4M2Jk
CisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIAkJMHgzYWUKKyNkZWZpbmUgTVNSX1A0X1NBQVRf
RVNDUjEgCQkweDNhZgorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwIAkJMHgzYmUKKyNkZWZpbmUg
TVNSX1A0X1NTVV9FU0NSMSAJCTB4M2JmICAgIC8qIGd1ZXNzOiBub3QgZGVmaW5lZCBpbiBtYW51
YWwgKi8KKyNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgCQkweDNjMgorI2RlZmluZSBNU1JfUDRf
VEJQVV9FU0NSMSAJCTB4M2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAJCTB4M2M0CisjZGVm
aW5lIE1TUl9QNF9UQ19FU0NSMSAJCTB4M2M1CisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgCQkw
eDNiMAorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIAkJMHgzYjEKIAotLyogSzcvSzggTVNScy4g
Tm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZSBjb21w
bGV0ZSBsaXN0LiAqLwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgICAgICAgICAgICAweEMwMDEw
MDAwCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMCAgICAgICAgICAgIDB4QzAwMTAwMDQKLSNkZWZp
bmUgTVNSX0s3X0VWTlRTRUwxICAgICAgICAgICAgMHhDMDAxMDAwMQotI2RlZmluZSBNU1JfSzdf
UEVSRkNUUjEgICAgICAgICAgICAweEMwMDEwMDA1Ci0jZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAg
ICAgICAgICAgIDB4QzAwMTAwMDIKLSNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyICAgICAgICAgICAg
MHhDMDAxMDAwNgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgICAgICAgICAgICAweEMwMDEwMDAz
Ci0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAgICAgICAgICAgIDB4QzAwMTAwMDcKLSNkZWZpbmUg
TVNSX0s4X1RPUF9NRU0xCQkgICAweEMwMDEwMDFBCi0jZGVmaW5lIE1TUl9LOF9UT1BfTUVNMgkJ
ICAgMHhDMDAxMDAxRAotI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkgICAweEMwMDAwMDEwCQotI2Rl
ZmluZSBNU1JfSzdfSFdDUgkJCTB4QzAwMTAwMTUKLSNkZWZpbmUgTVNSX0s3X0NMS19DVEwJCQkw
eEMwMDEwMDFiCi0jZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhDMDAxMDA0MQotI2RlZmlu
ZSBNU1JfSzdfVklEX1NUQVRVUwkJMHhDMDAxMDA0MgotCi0vKiBLNiBNU1JzICovCisvKiBBTUQg
RGVmaW5lZCBNU1JzICovCiAjZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhDMDAwMDA4MAogI2RlZmlu
ZSBNU1JfSzZfU1RBUgkJCTB4QzAwMDAwODEKICNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweEMwMDAw
MDgyCkBAIC0xNzYsNiArMjA0LDI4IEBACiAjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4
NwogI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKIAorI2RlZmluZSBNU1JfSzdfRVZO
VFNFTDAJCQkweEMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMQkJCTB4QzAwMTAwMDEK
KyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhDMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfRVZO
VFNFTDMJCQkweEMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4QzAwMTAwMDQK
KyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxCQkJMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfUEVS
RkNUUjIJCQkweEMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4QzAwMTAwMDcK
KyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweEMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RM
CQkJMHhDMDAxMDAxYgorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4QzAwMTAwNDEKKyNk
ZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweEMwMDEwMDQyCisKKy8qIGV4dGVuZGVkIGZl
YXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNSX0VGRVIgCQkJMHhjMDAwMDA4MAorCisvKiBF
RkVSIGJpdHM6ICovCisKKy8qIEV4ZWN1dGUgRGlzYWJsZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VG
RVJfTlgJCQkxMQorI2RlZmluZSBFRkVSX05YCQkJCSgxPDxfRUZFUl9OWCkKKwogLyogQ2VudGF1
ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEw
NwogI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOApAQCAtMTk1LDYgKzI0NSw3IEBACiAvKiBW
SUEgQ3lyaXggZGVmaW5lZCBNU1JzKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IJCQkweDExMDcKICNk
ZWZpbmUgTVNSX1ZJQV9MT05HSEFVTAkJMHgxMTBhCisjZGVmaW5lIE1TUl9WSUFfUk5HCQkJMHgx
MTBiCiAjZGVmaW5lIE1TUl9WSUFfQkNSMgkJCTB4MTE0NwogCiAvKiBUcmFuc21ldGEgZGVmaW5l
ZCBNU1JzICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L25taS5o
IHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2FzbS14ODYvbm1pLmgKLS0tIHhlbi0yLjAuNS94
ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0w
ODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTIwMDUtMDQt
MDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgbGlu
dXgvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAorICovCisjaWZuZGVmIEFTTV9OTUlfSAorI2RlZmlu
ZSBBU01fTk1JX0gKKworc3RydWN0IHhlbl9yZWdzOworIAordHlwZWRlZiBpbnQgKCpubWlfY2Fs
bGJhY2tfdCkoc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisgCisvKiogCisgKiBz
ZXRfbm1pX2NhbGxiYWNrCisgKgorICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9u
ZSBoYW5kbGVyIG1heSBiZQorICogc2V0LiBSZXR1cm4gMSBpZiB0aGUgTk1JIHdhcyBoYW5kbGVk
LgorICovCit2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spOwor
IAorLyoqIAorICogdW5zZXRfbm1pX2NhbGxiYWNrCisgKgorICogUmVtb3ZlIHRoZSBoYW5kbGVy
IHByZXZpb3VzbHkgc2V0LgorICovCit2b2lkIHVuc2V0X25taV9jYWxsYmFjayh2b2lkKTsKKyAK
KyNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRl
L3B1YmxpYy94ZW4uaCB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgKLS0t
IHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgJMjAwNS0wMy0xMCAxMTo1MjoxMy4w
MDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL3B1YmxpYy94ZW4u
aAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtNCw2ICs0LDEwIEBACiAg
KiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8gWGVuLgogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQs
IEsgQSBGcmFzZXIKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0
aW5nIG9wcm9maWxlCisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAogI2lmbmRlZiBfX1hFTl9QVUJMSUNf
WEVOX0hfXwpAQCAtNDgsNiArNTIsNyBAQAogI2RlZmluZSBfX0hZUEVSVklTT1Jfdm1fYXNzaXN0
ICAgICAgICAgICAgMjEKICNkZWZpbmUgX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290
aGVyZG9tYWluIDIyCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9zd2l0Y2hfdm04NiAgICAgICAgICAy
MworI2RlZmluZSBfX0hZUEVSVklTT1JfcG1jX29wICAgICAgICAgICAgICAgMjQKIAogLyoKICAq
IE1VTFRJQ0FMTFMKQEAgLTcxLDcgKzc2LDggQEAKICNkZWZpbmUgVklSUV9ET01fRVhDICAgIDQg
IC8qIChET00wKSBFeGNlcHRpb25hbCBldmVudCBmb3Igc29tZSBkb21haW4uICAgKi8KICNkZWZp
bmUgVklSUV9QQVJJVFlfRVJSIDUgIC8qIChET00wKSBOTUkgcGFyaXR5IGVycm9yLiAgICAgICAg
ICAgICAgICAgICAgKi8KICNkZWZpbmUgVklSUV9JT19FUlIgICAgIDYgIC8qIChET00wKSBOTUkg
SS9PIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTlJfVklSUVMgICAg
ICAgIDcKKyNkZWZpbmUgVklSUV9QTUNfT1ZGCTcgIC8qIFBNQyBPdmVyZmxvdyAqLworI2RlZmlu
ZSBOUl9WSVJRUyAgICAgICAgOAogCiAvKgogICogTU1VLVVQREFURSBSRVFVRVNUUwpAQCAtMTk4
LDYgKzIwNCwyMSBAQAogI2RlZmluZSBWTUFTU1RfVFlQRV93cml0YWJsZV9wYWdldGFibGVzICAy
CiAjZGVmaW5lIE1BWF9WTUFTU1RfVFlQRSAyCiAKKy8qCisgKiBDb21tYW5kcyB0byBIWVBFUlZJ
U09SX3BtY19vcCgpLgorICovCisjZGVmaW5lIFBNQ19JTklUCQkwCisjZGVmaW5lIFBNQ19TRVRf
QUNUSVZFCQkxCisjZGVmaW5lIFBNQ19TRVRfUEFTU0lWRQkJMgorI2RlZmluZSBQTUNfUkVTRVJW
RV9DT1VOVEVSUwkzCisjZGVmaW5lIFBNQ19TRVRVUF9FVkVOVFMJNAorI2RlZmluZSBQTUNfRU5B
QkxFX1ZJUlEJCTUKKyNkZWZpbmUgUE1DX1NUQVJUCQk2CisjZGVmaW5lIFBNQ19TVE9QCQk3Cisj
ZGVmaW5lIFBNQ19ESVNBQkxFX1ZJUlEJOAorI2RlZmluZSBQTUNfUkVMRUFTRV9DT1VOVEVSUwk5
CisjZGVmaW5lIFBNQ19TSFVURE9XTgkJMTAKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlw
ZWRlZiB1MTYgZG9taWRfdDsKQEAgLTI1Myw2ICsyNzQsOCBAQAogLyogTm8gc3VwcG9ydCBmb3Ig
bXVsdGktcHJvY2Vzc29yIGd1ZXN0cy4gKi8KICNkZWZpbmUgTUFYX1ZJUlRfQ1BVUyAxCiAKKyNk
ZWZpbmUgTUFYX09QUk9GX0VWRU5UUwkzMgorI2RlZmluZSBNQVhfT1BST0ZfRE9NQUlOUwkyNQkK
IC8qCiAgKiBYZW4vZ3Vlc3RvcyBzaGFyZWQgZGF0YSAtLSBwb2ludGVyIHByb3ZpZGVkIGluIHN0
YXJ0X2luZm8uCiAgKiBOQi4gV2UgZXhwZWN0IHRoYXQgdGhpcyBzdHJ1Y3QgaXMgc21hbGxlciB0
aGFuIGEgcGFnZS4KQEAgLTM2MCw2ICszODMsMjAgQEAKIAogICAgIGFyY2hfc2hhcmVkX2luZm9f
dCBhcmNoOwogCisgICAgLyogT3Byb2ZpbGUgc3RydWN0dXJlcyAqLworICAgIHU4IGV2ZW50X2hl
YWQ7CisgICAgdTggZXZlbnRfdGFpbDsKKyAgICBzdHJ1Y3QgeworCXUzMiBlaXA7CisJdTggbW9k
ZTsKKwl1OCBldmVudDsKKyAgICB9IFBBQ0tFRCBldmVudF9sb2dbTUFYX09QUk9GX0VWRU5UU107
CisgICAgdTggbG9zaW5nX3NhbXBsZXM7CisgICAgdTY0IHNhbXBsZXNfbG9zdDsKKyAgICB1MzIg
bm1pX3Jlc3RhcnRzOworICAgIHU2NCBhY3RpdmVfc2FtcGxlczsKKyAgICB1NjQgcGFzc2l2ZV9z
YW1wbGVzOworICAgIHU2NCBvdGhlcl9zYW1wbGVzOwogfSBQQUNLRUQgc2hhcmVkX2luZm9fdDsK
IAogLyoKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRlL3hlbi9zbXAuaCB4ZW4tMi4w
LjUtcHJvZi94ZW4vaW5jbHVkZS94ZW4vc21wLmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS94
ZW4vc21wLmgJMjAwNS0wMy0xMCAxMTo1MjoxNi4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu
NS1wcm9mL3hlbi9pbmNsdWRlL3hlbi9zbXAuaAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAw
MCAtMDcwMApAQCAtNDcsNiArNDcsMTggQEAKIAkJCSAgICAgIGludCByZXRyeSwgaW50IHdhaXQp
OwogCiAvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKi8KK3N0YXRp
YyBpbmxpbmUgaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQg
KmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksIGludCB3YWl0
KQoreworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgcmV0ID0gc21wX2NhbGxfZnVuY3Rp
b24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworICAgICAgICBmdW5jKGluZm8pOworICAgICAg
ICByZXR1cm4gcmV0OworfQorCisvKgogICogVHJ1ZSBvbmNlIHRoZSBwZXIgcHJvY2VzcyBpZGxl
IGlzIGZvcmtlZAogICovCiBleHRlcm4gaW50IHNtcF90aHJlYWRzX3JlYWR5OwpAQCAtODUsNiAr
OTcsNyBAQAogI2RlZmluZSBjcHVfbG9naWNhbF9tYXAoY3B1KQkJCTAKICNkZWZpbmUgY3B1X251
bWJlcl9tYXAoY3B1KQkJCTAKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJl
dHJ5LHdhaXQpCSh7IDA7IH0pCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3
YWl0KSAgICAgICAoeyBmdW5jKGluZm8pOyAwOyB9KQogI2RlZmluZSBjcHVfb25saW5lX21hcAkJ
CQkxCiAKICNlbmRpZgo=

------_=_NextPart_001_01C53CB2.59CE8456
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

------_=_NextPart_001_01C53CB2.59CE8456--




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>