From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igal.Liberman Subject: [PATCH 08/12] fsl/fman: Add Frame Manager support Date: Wed, 10 Jun 2015 11:03:14 +0300 Message-ID: <1433923394-22514-1-git-send-email-igal.liberman@freescale.com> Reply-To: igal.liberman@freescale.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: scottwood@freescale.com, Igal Liberman , linuxppc-dev@lists.ozlabs.org, madalin.bucur@freescale.com To: Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKQWRkIEZy YW1lIE1hbmdlciBEcml2ZXIgc3VwcG9ydC4KVGhpcyBwYXRjaCBhZGRzIFRoZSBGTWFuIGNvbmZp Z3VyYXRpb24sIGluaXRpYWxpemF0aW9uIGFuZApydW50aW1lIGNvbnRyb2wgcm91dGluZXMuCgpT aWduZWQtb2ZmLWJ5OiBJZ2FsIExpYmVybWFuIDxJZ2FsLkxpYmVybWFuQGZyZWVzY2FsZS5jb20+ Ci0tLQogZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZyAgICAgICAg fCAgIDM3ICsKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlICAg ICAgIHwgICAgMiArLQogZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0uYyAg ICAgICAgICAgfCAxNDc4ICsrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9mbS5oICAgICAgICAgICB8ICA0MDQgKysrKysrCiBkcml2ZXJzL25l dC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaCAgICB8ICAzNjcgKysrKysKIGRy aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5jICAgICAgIHwgIDgyNyAr KysrKysrKysrKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fZHJ2Lmgg ICAgICAgfCAgMTIzICsrCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMv ZW5ldF9leHQuaCB8ICAxOTkgKysrCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1h bi9pbmMvZm1fZXh0LmggICB8ICA0NTMgKysrKysrCiAuLi4vbmV0L2V0aGVybmV0L2ZyZWVzY2Fs ZS9mbWFuL2luYy9mc2xfZm1hbl9kcnYuaCB8ICAgOTQgKysKIGRyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2luYy9uZXRfZXh0LmggIHwgIDUzNCArKysrKysrCiBkcml2ZXJzL25l dC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvc2VydmljZS5oICB8ICAgOTAgKysKIDEyIGZp bGVzIGNoYW5nZWQsIDQ2MDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1f Y29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2Nh bGUvZm1hbi9mbV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2VuZXRfZXh0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvZm1fZXh0LmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvZnNs X2ZtYW5fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9pbmMvbmV0X2V4dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL3NlcnZpY2UuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnCmluZGV4IDgyNWEwZDUuLmQ3ZGUzNWYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcKKysrIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZwpAQCAtNywzICs3LDQw IEBAIGNvbmZpZyBGU0xfRk1BTgogCQlGcmVlc2NhbGUgRGF0YS1QYXRoIEFjY2VsZXJhdGlvbiBB cmNoaXRlY3R1cmUgRnJhbWUgTWFuYWdlcgogCQkoRk1hbikgc3VwcG9ydAogCitpZiBGU0xfRk1B TgorCitjb25maWcgRlNMX0ZNX01BWF9GUkFNRV9TSVpFCisJaW50ICJNYXhpbXVtIEwyIGZyYW1l IHNpemUiCisJZGVwZW5kcyBvbiBGU0xfRk1BTgorCXJhbmdlIDY0IDk2MDAKKwlkZWZhdWx0ICIx NTIyIgorCWhlbHAKKwkJQ29uZmlndXJlIHRoaXMgaW4gcmVsYXRpb24gdG8gdGhlIG1heGltdW0g cG9zc2libGUgTVRVIG9mIHlvdXIKKwkJbmV0d29yayBjb25maWd1cmF0aW9uLiBJbiBwYXJ0aWN1 bGFyLCBvbmUgd291bGQgbmVlZCB0bworCQlpbmNyZWFzZSB0aGlzIHZhbHVlIGluIG9yZGVyIHRv IHVzZSBqdW1ibyBmcmFtZXMuCisJCUZTTF9GTV9NQVhfRlJBTUVfU0laRSBtdXN0IGFjY29tbW9k YXRlIHRoZSBFdGhlcm5ldCBGQ1MKKwkJKDQgYnl0ZXMpIGFuZCBvbmUgRVRIK1ZMQU4gaGVhZGVy ICgxOCBieXRlcyksIHRvIGEgdG90YWwgb2YKKwkJMjIgYnl0ZXMgaW4gZXhjZXNzIG9mIHRoZSBk ZXNpcmVkIEwzIE1UVS4KKworCQlOb3RlIHRoYXQgaGF2aW5nIHRvbyBsYXJnZSBhIEZTTF9GTV9N QVhfRlJBTUVfU0laRSAobXVjaCBsYXJnZXIKKwkJdGhhbiB0aGUgYWN0dWFsIE1UVSkgbWF5IGxl YWQgdG8gYnVmZmVyIGV4aGF1c3Rpb24sIGVzcGVjaWFsbHkKKwkJaW4gdGhlIGNhc2Ugb2YgYmFk bHkgZnJhZ21lbnRlZCBkYXRhZ3JhbXMgb24gdGhlIFJ4IHBhdGguCisJCUNvbnZlcnNlbHksIGhh dmluZyBhIEZTTF9GTV9NQVhfRlJBTUVfU0laRSBzbWFsbGVyIHRoYW4gdGhlCisJCWFjdHVhbCBN VFUgd2lsbCBsZWFkIHRvIGZyYW1lcyBiZWluZyBkcm9wcGVkLgorCitjb25maWcgRlNMX0ZNX1JY X0VYVFJBX0hFQURST09NCisJaW50ICJBZGQgZXh0cmEgaGVhZHJvb20gYXQgYmVnaW5uaW5nIG9m IGRhdGEgYnVmZmVycyIKKwlkZXBlbmRzIG9uIEZTTF9GTUFOCisJcmFuZ2UgMTYgMzg0CisJZGVm YXVsdCAiNjQiCisJaGVscAorCQlDb25maWd1cmUgdGhpcyB0byB0ZWxsIHRoZSBGcmFtZSBNYW5h Z2VyIHRvIHJlc2VydmUgc29tZSBleHRyYQorCQlzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEg ZGF0YSBidWZmZXIgb24gdGhlIHJlY2VpdmUgcGF0aCwKKwkJYmVmb3JlIEludGVybmFsIENvbnRl eHQgZmllbGRzIGFyZSBjb3BpZWQuIFRoaXMgaXMgaW4gYWRkaXRpb24KKwkJdG8gdGhlIHByaXZh dGUgZGF0YSBhcmVhIGFscmVhZHkgcmVzZXJ2ZWQgZm9yIGRyaXZlciBpbnRlcm5hbAorCQl1c2Uu IFRoZSBwcm92aWRlZCB2YWx1ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuCisKKwkJVGhpcyBv cHRpb24gZG9lcyBub3QgYWZmZWN0IGluIGFueSB3YXkgdGhlIGxheW91dCBvZgorCQl0cmFuc21p dHRlZCBidWZmZXJzLgorCitlbmRpZgkjIEZTTF9GTUFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCmluZGV4IDU1YzkxYmQuLmY2MWQzYTYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCkBAIC00LDcgKzQsNyBA QCBzdWJkaXItY2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9mbGliIFwKIAogb2JqLXkJCSs9IGZzbF9mbWFuLm8KIAotZnNsX2ZtYW4t b2Jqcwk6PSBmbWFuLm8gZm1fbXVyYW0ubworZnNsX2ZtYW4tb2Jqcwk6PSBmbWFuLm8gZm1fbXVy YW0ubyBmbS5vIGZtX2Rydi5vCiAKIG9iai15CSs9IHBvcnQvCiBvYmoteQkrPSBtYWMvCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbS5jIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi41YmViMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0uYwpAQCAtMCwwICsxLDE0NzggQEAKKy8qCisgKiBDb3B5 cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl ICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFu eQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM TCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworCisvKiBGTSBkcml2ZXIgcm91dGluZXMgaW1wbGVtZW50YXRpb24uICovCisKKyNkZWZpbmUg cHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgInNlcnZpY2Uu aCIKKworI2luY2x1ZGUgImZtX2NvbW1vbi5oIgorI2luY2x1ZGUgImZtLmgiCisjaW5jbHVkZSAi Zm1fbXVyYW1fZXh0LmgiCisjaW5jbHVkZSA8YXNtL21wYzg1eHguaD4KKyNpbmNsdWRlICJmc2xf Zm1hbi5oIgorCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorCisvKiBzdGF0aWMgZnVuY3Rpb25zICovCisKK3N0YXRpYyBzdHJ1Y3QgZm1faW50Z190 ICpmaWxsX2ludGdfcGFyYW1zKHVpbnQ4X3QgbWFqb3IsIHVpbnQ4X3QgbWlub3IsCisJCQkJCSAg c3RydWN0IGZtX3BhcmFtc190ICpwX2ZtX3BhcmFtKQoreworCXN0cnVjdCBmbV9pbnRnX3QgKmlu dGc7CisKKwlpbnRnID0ga3phbGxvYyhzaXplb2YoKmludGcpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWludGcpCisJCXJldHVybiBOVUxMOworCisJLyogUDEwMjMgLSBNYWpvciA0CisJICogUDQwODAg LSBNYWpvciAyCisJICogUDIwNDEvUDMwNDEvUDUwMjAvUDUwNDAgLSBNYWpvciAzCisJICogVHgv QnggLSBNYWpvciA2CisJICovCisKKwlzd2l0Y2ggKG1ham9yKSB7CisJY2FzZSBGTV9JUF9CTE9D S19QMl9QM19QNToKKwkJaW50Zy0+Zm1fbXVyYW1fc2l6ZQkJPSAxNjAgKiAxMDI0OworCQlpbnRn LT5mbV9pcmFtX3NpemUJCT0gNjQgKiAxMDI0OworCQlpbnRnLT5mbV9udW1fb2ZfY3RybAkJPSAy OworCisJCWludGctPmRtYV90aHJlc2hfbWF4X2NvbW1xCT0gMzE7CisJCWludGctPmRtYV90aHJl c2hfbWF4X2J1Zgk9IDEyNzsKKworCQlpbnRnLT5xbWlfbWF4X251bV9vZl90bnVtcwk9IDY0Owor CQlpbnRnLT5xbWlfZGVmX3RudW1zX3RocmVzaAk9IDQ4OworCisJCWludGctPmJtaV9tYXhfbnVt X29mX3Rhc2tzCT0gMTI4OworCQlpbnRnLT5ibWlfbWF4X251bV9vZl9kbWFzCT0gMzI7CisJCWlu dGctPnBvcnRfbWF4X3dlaWdodAkJPSAxNjsKKworCQlpbnRnLT5mbV9wb3J0X251bV9vZl9jZwkJ PSAyNTY7CisKKwkJaW50Zy0+bnVtX29mX3J4X3BvcnRzCQk9IDY7CisJCWJyZWFrOworCisJY2Fz ZSBGTV9JUF9CTE9DS19QNDoKKworCQlpbnRnLT5mbV9tdXJhbV9zaXplCQk9IDE2MCAqIDEwMjQ7 CisJCWludGctPmZtX2lyYW1fc2l6ZQkJPSA2NCAqIDEwMjQ7CisJCWludGctPmZtX251bV9vZl9j dHJsCQk9IDI7CisKKwkJaW50Zy0+ZG1hX3RocmVzaF9tYXhfY29tbXEJPSAzMTsKKwkJaW50Zy0+ ZG1hX3RocmVzaF9tYXhfYnVmCT0gMTI3OworCisJCWludGctPnFtaV9tYXhfbnVtX29mX3RudW1z CT0gNjQ7CisJCWludGctPnFtaV9kZWZfdG51bXNfdGhyZXNoCT0gNDg7CisKKwkJaW50Zy0+Ym1p X21heF9udW1fb2ZfdGFza3MJPSAxMjg7CisJCWludGctPmJtaV9tYXhfbnVtX29mX2RtYXMJPSAz MjsKKwkJaW50Zy0+cG9ydF9tYXhfd2VpZ2h0CQk9IDE2OworCisJCWludGctPmZtX3BvcnRfbnVt X29mX2NnCQk9IDI1NjsKKworCQlpbnRnLT5udW1fb2ZfcnhfcG9ydHMJCT0gNTsKKwkJYnJlYWs7 CisKKwljYXNlIEZNX0lQX0JMT0NLX1AxOgorCisJCWludGctPmZtX211cmFtX3NpemUJCT0gNjQg KiAxMDI0OworCQlpbnRnLT5mbV9pcmFtX3NpemUJCT0gMzIgKiAxMDI0OworCQlpbnRnLT5mbV9u dW1fb2ZfY3RybAkJPSAyOworCisJCWludGctPmRtYV90aHJlc2hfbWF4X2NvbW1xCT0gMTU7CisJ CWludGctPmRtYV90aHJlc2hfbWF4X2J1Zgk9IDc7CisKKwkJaW50Zy0+cW1pX21heF9udW1fb2Zf dG51bXMJPSAxNTsKKworCQlpbnRnLT5ibWlfbWF4X251bV9vZl90YXNrcwk9IDY0OworCQlpbnRn LT5ibWlfbWF4X251bV9vZl9kbWFzCT0gMTY7CisJCWludGctPnBvcnRfbWF4X3dlaWdodAkJPSA0 OworCisJCWludGctPmZtX3BvcnRfbnVtX29mX2NnCQk9IDMyOworCisJCWludGctPm51bV9vZl9y eF9wb3J0cwkJPSAyOworCQlicmVhazsKKworCWNhc2UgRk1fSVBfQkxPQ0tfQl9UOgorCQlpbnRn LT5kbWFfdGhyZXNoX21heF9jb21tcQk9IDgzOworCQlpbnRnLT5kbWFfdGhyZXNoX21heF9idWYJ PSAxMjc7CisKKwkJaW50Zy0+cW1pX21heF9udW1fb2ZfdG51bXMJPSA2NDsKKwkJaW50Zy0+cW1p X2RlZl90bnVtc190aHJlc2gJPSAzMjsKKworCQlpbnRnLT5wb3J0X21heF93ZWlnaHQJCT0gMTY7 CisJCWludGctPmZtX3BvcnRfbnVtX29mX2NnCQk9IDI1NjsKKworCQkvKiBGTWFuVjNMICovCisJ CWlmIChtaW5vciA9PSAxIHx8IG1pbm9yID09IDQpIHsKKwkJCWludGctPmZtX211cmFtX3NpemUJ CT0gMTkyICogMTAyNDsKKwkJCWludGctPmZtX251bV9vZl9jdHJsCQk9IDI7CisKKwkJCWludGct PmJtaV9tYXhfbnVtX29mX3Rhc2tzCT0gNjQ7CisJCQlpbnRnLT5ibWlfbWF4X251bV9vZl9kbWFz CT0gMzI7CisKKwkJCWludGctPm51bV9vZl9yeF9wb3J0cwkJPSA1OworCQkJCisJCQlpZiAobWlu b3IgPT0gMSkKKwkJCQlpbnRnLT5mbV9pcmFtX3NpemUJPSAzMiAqIDEwMjQ7CisJCQllbHNlCisJ CQkJaW50Zy0+Zm1faXJhbV9zaXplCT0gNjQgKiAxMDI0OworCQl9CisJCS8qIEZNYW5WM0ggKi8K KwkJZWxzZSBpZiAobWlub3IgPT0gMCB8fCBtaW5vciA9PSAyIHx8IG1pbm9yID09IDMpIHsKKwkJ CWludGctPmZtX211cmFtX3NpemUJCT0gMzg0ICogMTAyNDsKKwkJCWludGctPmZtX2lyYW1fc2l6 ZQkJPSA2NCAqIDEwMjQ7CisJCQlpbnRnLT5mbV9udW1fb2ZfY3RybAkJPSA0OworCisJCQlpbnRn LT5ibWlfbWF4X251bV9vZl90YXNrcwk9IDEyODsKKwkJCWludGctPmJtaV9tYXhfbnVtX29mX2Rt YXMJPSA4NDsKKworCQkJaW50Zy0+bnVtX29mX3J4X3BvcnRzCQk9IDg7CisJCX0gZWxzZSB7CisJ CQlwcl9lcnIoIlVuc3VwcG9ydGVkIEZNYW52MyB2ZXJzaW9uXG4iKTsKKwkJCWtmcmVlKGludGcp OworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIo IlVuc3VwcG9ydGVkIEZNYW4gdmVyc2lvblxuIik7CisJCWtmcmVlKGludGcpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlpbnRnLT5ibWlfbWF4X2ZpZm9fc2l6ZSA9IGludGctPmZtX211cmFtX3Np emU7CisKKwlyZXR1cm4gaW50ZzsKK30KKworLyogQ2hlY2tzIGlmIHBfZm0gZHJpdmVyIHBhcmFt ZXRlcnMgd2VyZSBpbml0aWFsaXplZAorICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MgZWxzZSByZXR1 cm5zIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBpc19pbml0X2RvbmUoc3RydWN0IGZtYW5f Y2ZnICpwX2ZtX2Rydl9wYXJhbWV0ZXJzKQoreworCWlmICghcF9mbV9kcnZfcGFyYW1ldGVycykK KwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaW5p dF9yZXNvdXJjZXMoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJaWYgKHBfZm0tPmNhbV9vZmZzZXQp CisJCWZtX211cmFtX2ZyZWVfbWVtKHBfZm0tPnBfbXVyYW0sIHBfZm0tPmNhbV9vZmZzZXQsCisJ CQkJICBwX2ZtLT5jYW1fc2l6ZSk7CisJaWYgKHBfZm0tPmZpZm9fb2Zmc2V0KQorCQlmbV9tdXJh bV9mcmVlX21lbShwX2ZtLT5wX211cmFtLCBwX2ZtLT5maWZvX29mZnNldCwKKwkJCQkgIHBfZm0t PmZpZm9fc2l6ZSk7Cit9CisKK3N0YXRpYyBib29sIGlzX2ZtYW5fY3RybF9jb2RlX2xvYWRlZChz dHJ1Y3QgZm1fdCAqcF9mbSkKK3sKKwlzdHJ1Y3QgZm1faXJhbV9yZWdzX3QgX19pb21lbSAqcF9p cmFtOworCisJcF9pcmFtID0gKHN0cnVjdCBmbV9pcmFtX3JlZ3NfdCBfX2lvbWVtICopVUlOVF9U T19QVFIocF9mbS0+YmFzZV9hZGRyICsKKwkJCQkJCSAgICAgICBGTV9NTV9JTUVNKTsKKworCXJl dHVybiAoYm9vbCkhIShHRVRfVUlOVDMyKHBfaXJhbS0+aXJlYWR5KSAmIElSQU1fUkVBRFkpOwor fQorCitzdGF0aWMgaW50IGNoZWNrX2ZtX3BhcmFtZXRlcnMoc3RydWN0IGZtX3QgKnBfZm0pCit7 CisJaWYgKGlzX2ZtYW5fY3RybF9jb2RlX2xvYWRlZChwX2ZtKSAmJiAhcF9mbS0+cmVzZXRfb25f aW5pdCkgeworCQlwcl9lcnIoIk9sZCBGTWFuIENUUkwgY29kZSBpcyBsb2FkZWQ7IEZNIG11c3Qg YmUgcmVzZXQhXG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKwlpZiAocF9mbS0+cF9mbV9zdGF0 ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiA8IDYpIHsKKwkJaWYgKCFwX2ZtLT5wX2ZtX2Ry dl9wYXJhbS0+ZG1hX2F4aV9kYmdfbnVtX29mX2JlYXRzIHx8CisJCSAgICAocF9mbS0+cF9mbV9k cnZfcGFyYW0tPmRtYV9heGlfZGJnX251bV9vZl9iZWF0cyA+CisJCQlETUFfTU9ERV9NQVhfQVhJ X0RCR19OVU1fT0ZfQkVBVFMpKSB7CisJCQlwcl9lcnIoImF4aURiZ051bU9mQmVhdHMgaGFzIHRv IGJlIGluIHRoZSByYW5nZSAxIC0gJWRcbiIsCisJCQkgICAgICAgRE1BX01PREVfTUFYX0FYSV9E QkdfTlVNX09GX0JFQVRTKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCX0KKwlpZiAocF9mbS0+ cF9mbV9kcnZfcGFyYW0tPmRtYV9jYW1fbnVtX29mX2VudHJpZXMgJQorCSAgICBETUFfQ0FNX1VO SVRTKSB7CisJCXByX2VycigiZG1hX2NhbV9udW1fb2ZfZW50cmllcyBoYXMgdG8gYmUgZGl2aXNi bGUgYnkgJWRcbiIsCisJCSAgICAgICBETUFfQ0FNX1VOSVRTKTsKKwkJcmV0dXJuIC1FRE9NOwor CX0KKwlpZiAocF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9jb21tX3F0c2hfYXNydF9lbWVyID4K KwkgICAgcF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfY29tbXEpIHsKKwkJcHJfZXJyKCJkbWFf Y29tbV9xdHNoX2FzcnRfZW1lciBjYW4gbm90IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkgICAg ICAgcF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfY29tbXEpOworCQlyZXR1cm4gLUVET007CisJ fQorCWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NvbW1fcXRzaF9jbHJfZW1lciA+CisJ ICAgIHBfZm0tPmludGctPmRtYV90aHJlc2hfbWF4X2NvbW1xKSB7CisJCXByX2VycigiZG1hX2Nv bW1fcXRzaF9jbHJfZW1lciBjYW4gbm90IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkgICAgICAg cF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfY29tbXEpOworCQlyZXR1cm4gLUVET007CisJfQor CWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NvbW1fcXRzaF9jbHJfZW1lciA+PQorCSAg ICBwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NvbW1fcXRzaF9hc3J0X2VtZXIpIHsKKwkJcHJf ZXJyKCJkbWFfY29tbV9xdHNoX2Nscl9lbWVyIG11c3QgYmUgc21hbGxlciB0aGFuIGRtYV9jb21t X3F0c2hfYXNydF9lbWVyXG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKwlpZiAocF9mbS0+cF9m bV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiA8IDYpIHsKKwkJaWYgKHBfZm0tPnBf Zm1fZHJ2X3BhcmFtLT5kbWFfcmVhZF9idWZfdHNoX2FzcnRfZW1lciA+CisJCSAgICBwX2ZtLT5p bnRnLT5kbWFfdGhyZXNoX21heF9idWYpIHsKKwkJCXByX2VycigiZG1hX3JlYWRfYnVmX3RzaF9h c3J0X2VtZXIgY2FuIG5vdCBiZSBsYXJnZXIgdGhhbiAlZFxuIiwKKwkJCSAgICAgICBwX2ZtLT5p bnRnLT5kbWFfdGhyZXNoX21heF9idWYpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisJCWlmIChw X2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX3JlYWRfYnVmX3RzaF9jbHJfZW1lciA+CisJCSAgICAg IHBfZm0tPmludGctPmRtYV90aHJlc2hfbWF4X2J1ZikgeworCQkJcHJfZXJyKCJkbWFfcmVhZF9i dWZfdHNoX2Nscl9lbWVyIGNhbiBub3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCQkgICAgICAg cF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfYnVmKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQor CQlpZiAocF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9yZWFkX2J1Zl90c2hfY2xyX2VtZXIgPj0K KwkJICAgICAgcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9yZWFkX2J1Zl90c2hfYXNydF9lbWVy KSB7CisJCQlwcl9lcnIoImRtYV9yZWFkX2J1Zl90c2hfY2xyX2VtZXIgbXVzdCBiZSA8IGRtYV9y ZWFkX2J1Zl90c2hfYXNydF9lbWVyXG4iKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCQlpZiAo cF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV93cml0ZV9idWZfdHNoX2FzcnRfZW1lciA+CisJCSAg ICAgIHBfZm0tPmludGctPmRtYV90aHJlc2hfbWF4X2J1ZikgeworCQkJcHJfZXJyKCJkbWFfd3Jp dGVfYnVmX3RzaF9hc3J0X2VtZXIgY2FuIG5vdCBiZSBsYXJnZXIgdGhhbiAlZFxuIiwKKwkJCSAg ICAgICBwX2ZtLT5pbnRnLT5kbWFfdGhyZXNoX21heF9idWYpOworCQkJcmV0dXJuIC1FRE9NOwor CQl9CisJCWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2Vt ZXIgPgorCQkgICAgICBwX2ZtLT5pbnRnLT5kbWFfdGhyZXNoX21heF9idWYpIHsKKwkJCXByX2Vy cigiZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2VtZXIgY2FuIG5vdCBiZSBsYXJnZXIgdGhhbiAlZFxu IiwKKwkJCSAgICAgICBwX2ZtLT5pbnRnLT5kbWFfdGhyZXNoX21heF9idWYpOworCQkJcmV0dXJu IC1FRE9NOworCQl9CisJCWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX3dyaXRlX2J1Zl90 c2hfY2xyX2VtZXIgPj0KKwkJICAgICAgcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV93cml0ZV9i dWZfdHNoX2FzcnRfZW1lcikgeworCQkJcHJfZXJyKCJkbWFfd3JpdGVfYnVmX3RzaF9jbHJfZW1l ciBoYXMgdG8gYmUgbGVzcyB0aGFuIGRtYV93cml0ZV9idWZfdHNoX2FzcnRfZW1lclxuIik7CisJ CQlyZXR1cm4gLUVET007CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHBfZm0tPnBfZm1fZHJ2X3Bh cmFtLT5kbWFfZGJnX2NudF9tb2RlID09CisJCQkJRV9GTUFOX0RNQV9EQkdfQ05UX0lOVF9SRUFE X0VNKSB8fAorCQkJKHBfZm0tPnBfZm1fZHJ2X3BhcmFtLT5kbWFfZGJnX2NudF9tb2RlID09CisJ CQkJRV9GTUFOX0RNQV9EQkdfQ05UX0lOVF9XUklURV9FTSkgfHwKKwkJCShwX2ZtLT5wX2ZtX2Ry dl9wYXJhbS0+ZG1hX2RiZ19jbnRfbW9kZSA9PQorCQkJCUVfRk1BTl9ETUFfREJHX0NOVF9SQVdf V0FSX1BST1QpKSB7CisJCQlwcl9lcnIoImRtYV9kYmdfY250X21vZGUgdmFsdWUgbm90IHN1cHBv cnRlZCBieSB0aGlzIGludGVncmF0aW9uLlxuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKwkJ aWYgKChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2VtZXJnZW5jeV9idXNfc2VsZWN0ID09CisJ CSAgICAgICBGTV9ETUFfTVVSQU1fUkVBRF9FTUVSR0VOQ1kpIHx8CisJCSAgICAgIChwX2ZtLT5w X2ZtX2Rydl9wYXJhbS0+ZG1hX2VtZXJnZW5jeV9idXNfc2VsZWN0ID09CisJCSAgICAgICBGTV9E TUFfTVVSQU1fV1JJVEVfRU1FUkdFTkNZKSkgeworCQkJcHJfZXJyKCJlbWVyZ2VuY3lCdXNTZWxl Y3QgdmFsdWUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGludGVncmF0aW9uLlxuIik7CisJCQlyZXR1 cm4gLUVET007CisJCX0KKwkJaWYgKHBfZm0tPnBfZm1fZHJ2X3BhcmFtLT5kbWFfc3RvcF9vbl9i dXNfZXJyb3IpIHsKKwkJCXByX2VycigiZG1hX3N0b3Bfb25fYnVzX2Vycm9yIG5vdCBzdXBwb3J0 ZWQgYnkgdGhpcyBpbnRlZ3JhdGlvbi5cbiIpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisjaWZk ZWYgRk1fQUlEX01PREVfTk9fVE5VTV9TVzAwNQorCQlpZiAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1 Y3QtPnJldl9pbmZvLm1ham9yX3JldiA+PSA2ICYmCisJCSAgICBwX2ZtLT5wX2ZtX2Rydl9wYXJh bS0+ZG1hX2FpZF9tb2RlICE9CisJCSAgICBFX0ZNQU5fRE1BX0FJRF9PVVRfUE9SVF9JRCkgewor CQkJcHJfZXJyKCJkbWFfYWlkX21vZGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGludGVncmF0aW9u LlxuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKyNlbmRpZiAvKiBGTV9BSURfTU9ERV9OT19U TlVNX1NXMDA1ICovCisJCWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2F4aV9kYmdfbnVt X29mX2JlYXRzKSB7CisJCQlwcl9lcnIoImRtYV9heGlfZGJnX251bV9vZl9iZWF0cyBub3Qgc3Vw cG9ydGVkIGJ5IHRoaXMgaW50ZWdyYXRpb24uXG4iKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQor CX0KKworCWlmICghcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmZtX2Nsa19mcmVxKSB7CisJCXBy X2VycigiZm1fY2xrX2ZyZXEgbXVzdCBiZSBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0K KwlpZiAoVVNFQ19UT19DTEsKKwkgICAgKHBfZm0tPnBfZm1fZHJ2X3BhcmFtLT5kbWFfd2F0Y2hk b2csCisJICAgICBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+Zm1fY2xrX2ZyZXEpID4gRE1BX01B WF9XQVRDSERPRykgeworCQlwcl9lcnIoImRtYV93YXRjaGRvZyBkZXBlbmRzIG9uIEZNIGNsb2Nr LiBkbWFfd2F0Y2hkb2coaW4gbWljcm9zZWNvbmRzKSpjbGsgKGluIE1oeiksIG1heSBub3QgZXhj ZWVkIDB4MDgleFxuIiwKKwkJICAgICAgIERNQV9NQVhfV0FUQ0hET0cpOworCQlyZXR1cm4gLUVE T007CisJfQorCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+dG90YWxfZmlmb19zaXplICUg Qk1JX0ZJRk9fVU5JVFMpIHsKKwkJcHJfZXJyKCJ0b3RhbF9maWZvX3NpemUgbnVtYmVyIGhhcyB0 byBiZSBkaXZpc2libGUgYnkgJWRcbiIsCisJCSAgICAgICBCTUlfRklGT19VTklUUyk7CisJfQor CWlmICghcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZSB8fAorCSAgICAo cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZSA+CisJICAgICAgIHBfZm0t PmludGctPmJtaV9tYXhfZmlmb19zaXplKSkgeworCQlwcl9lcnIoInRvdGFsX2ZpZm9fc2l6ZSAo Y3VyciAtICVkKSBoYXMgdG8gYmUgaW4gdGhlIHJhbmdlIDI1NiAtICVkXG4iLAorCQkgICAgICAg cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZSwKKwkJICAgICAgIHBfZm0t PmludGctPmJtaV9tYXhfZmlmb19zaXplKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKwlpZiAoIXBf Zm0tPnBfZm1fc3RhdGVfc3RydWN0LT50b3RhbF9udW1fb2ZfdGFza3MgfHwKKwkgICAgKHBfZm0t PnBfZm1fc3RhdGVfc3RydWN0LT50b3RhbF9udW1fb2ZfdGFza3MgPgorCSAgICAgICBwX2ZtLT5p bnRnLT5ibWlfbWF4X251bV9vZl90YXNrcykpIHsKKwkJcHJfZXJyKCJ0b3RhbF9udW1fb2ZfdGFz a3MgbnVtYmVyIGhhcyB0byBiZSBpbiB0aGUgcmFuZ2UgMSAtICVkXG4iLAorCQkgICAgICAgcF9m bS0+aW50Zy0+Ym1pX21heF9udW1fb2ZfdGFza3MpOworCQlyZXR1cm4gLUVET007CisJfQorCisj aWZkZWYgRk1fSEFTX1RPVEFMX0RNQVMKKwlpZiAoKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5y ZXZfaW5mby5tYWpvcl9yZXYgPCA2KSAmJgorCSAgICAoIXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0 LT5tYXhfbnVtX29mX29wZW5fZG1hcyB8fAorCSAgICAgKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0 LT5tYXhfbnVtX29mX29wZW5fZG1hcyA+CisJCXBfZm0tPmludGctPmJtaV9tYXhfbnVtX29mX2Rt YXMpKSkgeworCQlwcl9lcnIoIm1heF9udW1fb2Zfb3Blbl9kbWFzIG51bWJlciBoYXMgdG8gYmUg aW4gdGhlIHJhbmdlIDEgLSAlZFxuIiwKKwkJICAgICAgIHBfZm0tPmludGctPmJtaV9tYXhfbnVt X29mX2RtYXMpOworCQlyZXR1cm4gLUVET007CisJfQorI2VuZGlmIC8qIEZNX0hBU19UT1RBTF9E TUFTICovCisKKwlpZiAocF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRpc3BfbGltaXRfdHNoID4gRlBN X01BWF9ESVNQX0xJTUlUKSB7CisJCXByX2VycigiZGlzcF9saW1pdF90c2ggY2FuJ3QgYmUgZ3Jl YXRlciB0aGFuICVkXG4iLAorCQkgICAgICAgRlBNX01BWF9ESVNQX0xJTUlUKTsKKwkJcmV0dXJu IC1FRE9NOworCX0KKwlpZiAoIXBfZm0tPmZfZXhjZXB0aW9uKSB7CisJCXByX2VycigiRXhjZXB0 aW9ucyBjYWxsYmFjayBub3QgcHJvdmlkZWRcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorCWlm ICghcF9mbS0+Zl9idXNfZXJyb3IpIHsKKwkJcHJfZXJyKCJFeGNlcHRpb25zIGNhbGxiYWNrIG5v dCBwcm92aWRlZFxuIik7CisJCXJldHVybiAtRURPTTsKKwl9CisjaWZkZWYgRk1fTk9fV0FUQ0hE T0cKKwlpZiAoKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5tYWpvcl9yZXYgPT0g MikgJiYKKwkgICAgKHBfZm0tPnBfZm1fZHJ2X3BhcmFtLT5kbWFfd2F0Y2hkb2cpKSB7CisJCXBy X2Vycigid2F0Y2hkb2chXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmIC8qIEZN X05PX1dBVENIRE9HICovCisKKyNpZmRlZiBGTV9FQ0NfSEFMVF9OT19TWU5DX0VSUkFUQV8xMEdN QUNfQTAwOAorCWlmICgocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3Jl diA8IDYpICYmCisJICAgIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3Jf cmV2ICE9IDQpICYmCisJICAgIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+aGFsdF9vbl91bnJlY292 X2VjY19lcnIpKSB7CisJCXByX2VycigiSGFsdE9uRWNjRXJyb3IhXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorI2VuZGlmIC8qIEZNX0VDQ19IQUxUX05PX1NZTkNfRVJSQVRBXzEwR01BQ19B MDA4ICovCisKKyNpZmRlZiBGTV9OT19UTlVNX0FHSU5HCisJaWYgKChwX2ZtLT5wX2ZtX3N0YXRl X3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ICE9IDQpICYmCisJICAgIChwX2ZtLT5wX2ZtX3N0 YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2IDwgNikpCisJCWlmIChwX2ZtLT5wX2ZtX2Ry dl9wYXJhbS0+dG51bV9hZ2luZ19wZXJpb2QpIHsKKwkJCXByX2VycigiVG51bSBhZ2luZyFcbiIp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyNlbmRpZiAvKiBGTV9OT19UTlVNX0FHSU5HICov CisKKwkvKiBjaGVjayB0aGF0IHVzZXIgZGlkIG5vdCBzZXQgcmV2aXNpb24tZGVwZW5kZW50IGV4 Y2VwdGlvbnMgKi8KKyNpZmRlZiBGTV9OT19ESVNQQVRDSF9SQU1fRUNDCisJaWYgKChwX2ZtLT5w X2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ICE9IDQpICYmCisJICAgIChwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2IDwgNikpCisJCWlmIChwX2Zt LT51c2VyX3NldF9leGNlcHRpb25zICYgRk1fRVhfQk1JX0RJU1BBVENIX1JBTV9FQ0MpIHsKKwkJ CXByX2VycigiZXhjZXB0aW9uIEZNX0VYX0JNSV9ESVNQQVRDSF9SQU1fRUNDIVxuIik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmIC8qIEZNX05PX0RJU1BBVENIX1JBTV9FQ0MgKi8K KworI2lmZGVmIEZNX1FNSV9OT19FQ0NfRVhDRVBUSU9OUworCWlmIChwX2ZtLT5wX2ZtX3N0YXRl X3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ID09IDQpCisJCWlmIChwX2ZtLT51c2VyX3NldF9l eGNlcHRpb25zICYKKwkJICAgIChGTV9FWF9RTUlfU0lOR0xFX0VDQyB8IEZNX0VYX1FNSV9ET1VC TEVfRUNDKSkgeworCQkJcHJfZXJyKCJleGNlcHRpb24gRk1fRVhfUU1JX1NJTkdMRV9FQ0MvRk1f RVhfUU1JX0RPVUJMRV9FQ0MhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisjZW5kaWYg LyogRk1fUU1JX05PX0VDQ19FWENFUFRJT05TICovCisKKyNpZmRlZiBGTV9RTUlfTk9fU0lOR0xF X0VDQ19FWENFUFRJT04KKwlpZiAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1h am9yX3JldiA+PSA2KQorCQlpZiAocF9mbS0+dXNlcl9zZXRfZXhjZXB0aW9ucyAmIEZNX0VYX1FN SV9TSU5HTEVfRUNDKSB7CisJCQlwcl9lcnIoImV4Y2VwdGlvbiBGTV9FWF9RTUlfU0lOR0xFX0VD QyFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyNlbmRpZiAvKiBGTV9RTUlfTk9fU0lO R0xFX0VDQ19FWENFUFRJT04gKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibWlf ZXJyX2V2ZW50KHN0cnVjdCBmbV90ICpwX2ZtKQoreworCXVpbnQzMl90IGV2ZW50OworCXN0cnVj dCBmbWFuX2JtaV9yZWdzIF9faW9tZW0gKmJtaV9yZyA9IHBfZm0tPnBfZm1fYm1pX3JlZ3M7CisK KwlldmVudCA9IGZtYW5fZ2V0X2JtaV9lcnJfZXZlbnQoYm1pX3JnKTsKKworCWlmIChldmVudCAm IEJNSV9FUlJfSU5UUl9FTl9TVE9SQUdFX1BST0ZJTEVfRUNDKQorCQlwX2ZtLT5mX2V4Y2VwdGlv bihwX2ZtLT5oX2FwcCwgRk1fRVhfQk1JX1NUT1JBR0VfUFJPRklMRV9FQ0MpOworCWlmIChldmVu dCAmIEJNSV9FUlJfSU5UUl9FTl9MSVNUX1JBTV9FQ0MpCisJCXBfZm0tPmZfZXhjZXB0aW9uKHBf Zm0tPmhfYXBwLCBGTV9FWF9CTUlfTElTVF9SQU1fRUNDKTsKKwlpZiAoZXZlbnQgJiBCTUlfRVJS X0lOVFJfRU5fU1RBVElTVElDU19SQU1fRUNDKQorCQlwX2ZtLT5mX2V4Y2VwdGlvbihwX2ZtLT5o X2FwcCwgRk1fRVhfQk1JX1NUQVRJU1RJQ1NfUkFNX0VDQyk7CisJaWYgKGV2ZW50ICYgQk1JX0VS Ul9JTlRSX0VOX0RJU1BBVENIX1JBTV9FQ0MpCisJCXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhf YXBwLCBGTV9FWF9CTUlfRElTUEFUQ0hfUkFNX0VDQyk7Cit9CisKK3N0YXRpYyB2b2lkIHFtaV9l cnJfZXZlbnQoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJdWludDMyX3QgZXZlbnQ7CisJc3RydWN0 IGZtYW5fcW1pX3JlZ3MgX19pb21lbSAqcW1pX3JnID0gcF9mbS0+cF9mbV9xbWlfcmVnczsKKwor CWV2ZW50ID0gZm1hbl9nZXRfcW1pX2Vycl9ldmVudChxbWlfcmcpOworCisJaWYgKGV2ZW50ICYg UU1JX0VSUl9JTlRSX0VOX0RPVUJMRV9FQ0MpCisJCXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhf YXBwLCBGTV9FWF9RTUlfRE9VQkxFX0VDQyk7CisJaWYgKGV2ZW50ICYgUU1JX0VSUl9JTlRSX0VO X0RFUV9GUk9NX0RFRikKKwkJcF9mbS0+Zl9leGNlcHRpb24ocF9mbS0+aF9hcHAsCisJCQkJICBG TV9FWF9RTUlfREVRX0ZST01fVU5LTk9XTl9QT1JUSUQpOworfQorCitzdGF0aWMgdm9pZCBkbWFf ZXJyX2V2ZW50KHN0cnVjdCBmbV90ICpwX2ZtKQoreworCXVpbnQzMl90IHN0YXR1czsKKwlzdHJ1 Y3QgZm1hbl9kbWFfcmVncyBfX2lvbWVtICpkbWFfcmcgPSBwX2ZtLT5wX2ZtX2RtYV9yZWdzOwor CisJc3RhdHVzID0gZm1hbl9nZXRfZG1hX2Vycl9ldmVudChkbWFfcmcpOworCisJaWYgKHN0YXR1 cyAmIERNQV9TVEFUVVNfRk1fU1BEQVRfRUNDKQorCQlwX2ZtLT5mX2V4Y2VwdGlvbihwX2ZtLT5o X2FwcCwgRk1fRVhfRE1BX1NJTkdMRV9QT1JUX0VDQyk7CisJaWYgKHN0YXR1cyAmIERNQV9TVEFU VVNfUkVBRF9FQ0MpCisJCXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhfYXBwLCBGTV9FWF9ETUFf UkVBRF9FQ0MpOworCWlmIChzdGF0dXMgJiBETUFfU1RBVFVTX1NZU1RFTV9XUklURV9FQ0MpCisJ CXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhfYXBwLCBGTV9FWF9ETUFfU1lTVEVNX1dSSVRFX0VD Qyk7CisJaWYgKHN0YXR1cyAmIERNQV9TVEFUVVNfRk1fV1JJVEVfRUNDKQorCQlwX2ZtLT5mX2V4 Y2VwdGlvbihwX2ZtLT5oX2FwcCwgRk1fRVhfRE1BX0ZNX1dSSVRFX0VDQyk7Cit9CisKK3N0YXRp YyB2b2lkIGZwbV9lcnJfZXZlbnQoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJdWludDMyX3QgZXZl bnQ7CisJc3RydWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAqZnBtX3JnID0gcF9mbS0+cF9mbV9m cG1fcmVnczsKKworCWV2ZW50ID0gZm1hbl9nZXRfZnBtX2Vycl9ldmVudChmcG1fcmcpOworCisJ aWYgKChldmVudCAmIEZQTV9FVl9NQVNLX0RPVUJMRV9FQ0MpICYmCisJICAgIChldmVudCAmIEZQ TV9FVl9NQVNLX0RPVUJMRV9FQ0NfRU4pKQorCQlwX2ZtLT5mX2V4Y2VwdGlvbihwX2ZtLT5oX2Fw cCwgRk1fRVhfRlBNX0RPVUJMRV9FQ0MpOworCWlmICgoZXZlbnQgJiBGUE1fRVZfTUFTS19TVEFM TCkgJiYgKGV2ZW50ICYgRlBNX0VWX01BU0tfU1RBTExfRU4pKQorCQlwX2ZtLT5mX2V4Y2VwdGlv bihwX2ZtLT5oX2FwcCwgRk1fRVhfRlBNX1NUQUxMX09OX1RBU0tTKTsKKwlpZiAoKGV2ZW50ICYg RlBNX0VWX01BU0tfU0lOR0xFX0VDQykgJiYKKwkgICAgKGV2ZW50ICYgRlBNX0VWX01BU0tfU0lO R0xFX0VDQ19FTikpCisJCXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhfYXBwLCBGTV9FWF9GUE1f U0lOR0xFX0VDQyk7Cit9CisKK3N0YXRpYyB2b2lkIG11cmFtX2Vycl9pbnRyKHN0cnVjdCBmbV90 ICpwX2ZtKQoreworCXVpbnQzMl90IGV2ZW50OworCXN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9t ZW0gKmZwbV9yZyA9IHBfZm0tPnBfZm1fZnBtX3JlZ3M7CisKKwlldmVudCA9IGZtYW5fZ2V0X211 cmFtX2Vycl9ldmVudChmcG1fcmcpOworCisJaWYgKGV2ZW50ICYgRlBNX1JBTV9NVVJBTV9FQ0Mp CisJCXBfZm0tPmZfZXhjZXB0aW9uKHBfZm0tPmhfYXBwLCBGTV9FWF9NVVJBTV9FQ0MpOworfQor CitzdGF0aWMgdm9pZCBpcmFtX2Vycl9pbnRyKHN0cnVjdCBmbV90ICpwX2ZtKQoreworCXVpbnQz Ml90IGV2ZW50OworCXN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZwbV9yZyA9IHBfZm0t PnBfZm1fZnBtX3JlZ3M7CisKKwlldmVudCA9IGZtYW5fZ2V0X2lyYW1fZXJyX2V2ZW50KGZwbV9y Zyk7CisKKwlpZiAoZXZlbnQgJiBGUE1fUkFNX0lSQU1fRUNDKQorCQlwX2ZtLT5mX2V4Y2VwdGlv bihwX2ZtLT5oX2FwcCwgRk1fRVhfSVJBTV9FQ0MpOworfQorCitzdGF0aWMgdm9pZCBxbWlfZXZl bnQoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJdWludDMyX3QgZXZlbnQ7CisJc3RydWN0IGZtYW5f cW1pX3JlZ3MgX19pb21lbSAqcW1pX3JnID0gcF9mbS0+cF9mbV9xbWlfcmVnczsKKworCWV2ZW50 ID0gZm1hbl9nZXRfcW1pX2V2ZW50KHFtaV9yZyk7CisKKwlpZiAoZXZlbnQgJiBRTUlfSU5UUl9F Tl9TSU5HTEVfRUNDKQorCQlwX2ZtLT5mX2V4Y2VwdGlvbihwX2ZtLT5oX2FwcCwgRk1fRVhfUU1J X1NJTkdMRV9FQ0MpOworfQorCitzdGF0aWMgdm9pZCB1bmltcGxlbWVudGVkX2lzcih2b2lkIF9f bWF5YmVfdW51c2VkICpoX3NyY19hcmcpCit7CisJcHJfZXJyKCJVbmltcGxlbWVudGVkIElTUiFc biIpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfdGltZV9zdGFtcChzdHJ1Y3QgZm1fdCAqcF9m bSkKK3sKKwlzdHJ1Y3QgZm1hbl9mcG1fcmVncyBfX2lvbWVtICpmcG1fcmcgPSBwX2ZtLT5wX2Zt X2ZwbV9yZWdzOworCisJQVNTRVJUKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0KTsKKwlBU1NFUlQo cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmNvdW50MV9taWNyb19iaXQpOworCisJZm1hbl9lbmFi bGVfdGltZV9zdGFtcChmcG1fcmcsCisJCQkgICAgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3Qt PmNvdW50MV9taWNyb19iaXQsCisJCQkgICAgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmZt X2Nsa19mcmVxKTsKKworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5lbmFibGVkX3RpbWVfc3Rh bXAgPSB0cnVlOworfQorCitzdGF0aWMgaW50IGNsZWFyX2lyYW0oc3RydWN0IGZtX3QgKnBfZm0p Cit7CisJc3RydWN0IGZtX2lyYW1fcmVnc190IF9faW9tZW0gKnBfaXJhbTsKKwlpbnQgaTsKKwor CXBfaXJhbSA9IChzdHJ1Y3QgZm1faXJhbV9yZWdzX3QgX19pb21lbSAqKVVJTlRfVE9fUFRSKHBf Zm0tPmJhc2VfYWRkciArCisJCQkJCQkgICAgICAgRk1fTU1fSU1FTSk7CisKKwkvKiBFbmFibGUg dGhlIGF1dG8taW5jcmVtZW50ICovCisJV1JJVEVfVUlOVDMyKHBfaXJhbS0+aWFkZCwgSVJBTV9J QUREX0FJRSk7CisJd2hpbGUgKEdFVF9VSU5UMzIocF9pcmFtLT5pYWRkKSAhPSBJUkFNX0lBRERf QUlFKQorCQk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHBfZm0tPmludGctPmZtX2lyYW1fc2l6ZSAv IDQpOyBpKyspCisJCVdSSVRFX1VJTlQzMihwX2lyYW0tPmlkYXRhLCAweGZmZmZmZmZmKTsKKwor CVdSSVRFX1VJTlQzMihwX2lyYW0tPmlhZGQsIHBfZm0tPmludGctPmZtX2lyYW1fc2l6ZSAtIDQp OworCS8qIE1lbW9yeSBiYXJyaWVyICovCisJbWIoKTsKKwl3aGlsZSAoR0VUX1VJTlQzMihwX2ly YW0tPmlkYXRhKSAhPSAweGZmZmZmZmZmKQorCQk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBsb2FkX2ZtYW5fY3RybF9jb2RlKHN0cnVjdCBmbV90ICpwX2ZtKQoreworCXN0cnVjdCBm bV9pcmFtX3JlZ3NfdCBfX2lvbWVtICpwX2lyYW07CisJaW50IGk7CisJdWludDMyX3QgdG1wOwor CXVpbnQ4X3QgY29tcF90b18xNjsKKworCXBfaXJhbSA9IChzdHJ1Y3QgZm1faXJhbV9yZWdzX3Qg X19pb21lbSAqKVVJTlRfVE9fUFRSKHBfZm0tPmJhc2VfYWRkciArCisJCQkJCQkgICAgICAgRk1f TU1fSU1FTSk7CisKKwkvKiBFbmFibGUgdGhlIGF1dG8taW5jcmVtZW50ICovCisJV1JJVEVfVUlO VDMyKHBfaXJhbS0+aWFkZCwgSVJBTV9JQUREX0FJRSk7CisJd2hpbGUgKEdFVF9VSU5UMzIocF9p cmFtLT5pYWRkKSAhPSBJUkFNX0lBRERfQUlFKQorCQk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHBf Zm0tPmZpcm13YXJlLnNpemUgLyA0KTsgaSsrKQorCQlXUklURV9VSU5UMzIocF9pcmFtLT5pZGF0 YSwgcF9mbS0+ZmlybXdhcmUucF9jb2RlW2ldKTsKKworCWNvbXBfdG9fMTYgPSAodWludDhfdCko cF9mbS0+ZmlybXdhcmUuc2l6ZSAlIDE2KTsKKwlpZiAoY29tcF90b18xNikKKwkJZm9yIChpID0g MDsgaSA8ICgoMTYgLSBjb21wX3RvXzE2KSAvIDQpOyBpKyspCisJCQlXUklURV9VSU5UMzIocF9p cmFtLT5pZGF0YSwgMHhmZmZmZmZmZik7CisKKwlXUklURV9VSU5UMzIocF9pcmFtLT5pYWRkLCBw X2ZtLT5maXJtd2FyZS5zaXplIC0gNCk7CisJd2hpbGUgKEdFVF9VSU5UMzIocF9pcmFtLT5pYWRk KSAhPSAocF9mbS0+ZmlybXdhcmUuc2l6ZSAtIDQpKQorCQk7CisKKwkvKiB2ZXJpZnkgdGhhdCB3 cml0aW5nIGhhcyBjb21wbGV0ZWQgKi8KKwl3aGlsZSAoR0VUX1VJTlQzMihwX2lyYW0tPmlkYXRh KSAhPQorCSAgICAgICBwX2ZtLT5maXJtd2FyZS5wX2NvZGVbKHBfZm0tPmZpcm13YXJlLnNpemUg LyA0KSAtIDFdKQorCQk7CisKKwlpZiAocF9mbS0+ZndfdmVyaWZ5KSB7CisJCVdSSVRFX1VJTlQz MihwX2lyYW0tPmlhZGQsIElSQU1fSUFERF9BSUUpOworCQl3aGlsZSAoR0VUX1VJTlQzMihwX2ly YW0tPmlhZGQpICE9IElSQU1fSUFERF9BSUUpCisJCQk7CisJCWZvciAoaSA9IDA7IGkgPCAocF9m bS0+ZmlybXdhcmUuc2l6ZSAvIDQpOyBpKyspIHsKKwkJCXRtcCA9IEdFVF9VSU5UMzIocF9pcmFt LT5pZGF0YSk7CisJCQlpZiAodG1wICE9IHBfZm0tPmZpcm13YXJlLnBfY29kZVtpXSkgeworCQkJ CXByX2VycigiVUNvZGUgd3JpdGUgZXJyb3IgOiB3cml0ZSAweCV4LCByZWFkIDB4JXhcbiIsCisJ CQkJICAgICAgIHBfZm0tPmZpcm13YXJlLnBfY29kZVtpXSwgdG1wKTsKKwkJCQlyZXR1cm4gLUVJ TzsKKwkJCX0KKwkJfQorCQlXUklURV9VSU5UMzIocF9pcmFtLT5pYWRkLCAweDApOworCX0KKwor CS8qIEVuYWJsZSBwYXRjaCBmcm9tIElSQU0gKi8KKwlXUklURV9VSU5UMzIocF9pcmFtLT5pcmVh ZHksIElSQU1fUkVBRFkpOworCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDAxKTsKKworCXByX2RlYnVn KCJGTWFuLUNvbnRyb2xsZXIgY29kZSAodmVyICVkLiVkLiVkKSBsb2FkZWQgdG8gSVJBTS5cbiIs CisJCSAoKHVpbnQxNl90ICopcF9mbS0+ZmlybXdhcmUucF9jb2RlKVsyXSwKKwkJICgodWludDhf dCAqKXBfZm0tPmZpcm13YXJlLnBfY29kZSlbNl0sCisJCSAoKHVpbnQ4X3QgKilwX2ZtLT5maXJt d2FyZS5wX2NvZGUpWzddKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgRk1fVUNPREVfTk9U X1JFU0VUX0VSUkFUQV9CVUdaSUxMQTYxNzMKK3N0YXRpYyBpbnQgZndfbm90X3Jlc2V0X2VycmF0 dW1fYnVnemlsbGE2MTczd2Eoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJc3RydWN0IGZtX2lyYW1f cmVnc190IF9faW9tZW0gKnBfaXJhbSA9CisJICAgIChzdHJ1Y3QgZm1faXJhbV9yZWdzX3QgX19p b21lbSAqKVVJTlRfVE9fUFRSKHBfZm0tPmJhc2VfYWRkciArCisJCQkJCQkJIEZNX01NX0lNRU0p OworCXVpbnQzMl90IHRtcF9yZWc7CisJdWludDMyX3Qgc2F2ZWRfc3BsaW9kbls2M107CisKKwkv KiB3cml0ZSB0byBJUkFNIGZpcnN0IGxvY2F0aW9uIHRoZSBkZWJ1ZyBpbnN0cnVjdGlvbiAqLwor CVdSSVRFX1VJTlQzMihwX2lyYW0tPmlhZGQsIDApOworCXdoaWxlIChHRVRfVUlOVDMyKHBfaXJh bS0+aWFkZCkgIT0gMCkKKwkJOworCisJV1JJVEVfVUlOVDMyKHBfaXJhbS0+aWRhdGEsIEZNX0ZX X0RFQlVHX0lOU1RSVUNUSU9OKTsKKworCVdSSVRFX1VJTlQzMihwX2lyYW0tPmlhZGQsIDApOwor CXdoaWxlIChHRVRfVUlOVDMyKHBfaXJhbS0+aWFkZCkgIT0gMCkKKwkJOworCXdoaWxlIChHRVRf VUlOVDMyKHBfaXJhbS0+aWRhdGEpICE9IEZNX0ZXX0RFQlVHX0lOU1RSVUNUSU9OKQorCQk7CisK KwkvKiBFbmFibGUgcGF0Y2ggZnJvbSBJUkFNICovCisJV1JJVEVfVUlOVDMyKHBfaXJhbS0+aXJl YWR5LCBJUkFNX1JFQURZKTsKKwkvKiBNZW1vcnkgYmFycmllciAqLworCW1iKCk7CisJdXNsZWVw X3JhbmdlKDEwMCwgMTAxKTsKKworCW1lbWNweV9mcm9taW8oKHZvaWQgKilzYXZlZF9zcGxpb2Ru LAorCQkgICAgICAodm9pZCBfX2lvbWVtICopcF9mbS0+cF9mbV9ibWlfcmVncy0+Zm1ibV9zcGxp b2RuLAorCQkgICAgICA2MyAqIHNpemVvZih1aW50MzJfdCkpOworCisJLyogcmVzZXQgRk1BTiAq LworCVdSSVRFX1VJTlQzMihwX2ZtLT5wX2ZtX2ZwbV9yZWdzLT5mbV9yc3RjLCBGUE1fUlNUQ19G TV9SRVNFVCk7CisJLyogTWVtb3J5IGJhcnJpZXIgKi8KKwltYigpOworCXVzbGVlcF9yYW5nZSgx MDAsIDEwMSk7CisKKwkvKiB2ZXJpZnkgYnJlYWtwb2ludCBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIg Ki8KKwl0bXBfcmVnID0KKwkgICAgR0VUX1VJTlQzMigqKHVpbnQzMl90IF9faW9tZW0gKikKKwkJ ICAgICAgIFVJTlRfVE9fUFRSKHBfZm0tPmJhc2VfYWRkciArCisJCQkJICAgRk1fREVCVUdfU1RB VFVTX1JFR0lTVEVSX09GRlNFVCkpOworCWlmICghdG1wX3JlZykgeworCQlwcl9lcnIoIkludmFs aWQgZGVidWcgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlIGlzICcwJ1xuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCS8qIExvYWQgRk1hbi1Db250cm9sbGVyIGNvZGUgdG8gSVJBTSAqLworCisJ aWYgKGNsZWFyX2lyYW0ocF9mbSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBfZm0t PmZpcm13YXJlLnBfY29kZSAmJiAobG9hZF9mbWFuX2N0cmxfY29kZShwX2ZtKSAhPSAwKSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTAxKTsKKworCS8qIHJlc2V0IEZN QU4gYWdhaW4gdG8gc3RhcnQgdGhlIG1pY3JvY29kZSAqLworCVdSSVRFX1VJTlQzMihwX2ZtLT5w X2ZtX2ZwbV9yZWdzLT5mbV9yc3RjLCBGUE1fUlNUQ19GTV9SRVNFVCk7CisJLyogTWVtb3J5IGJh cnJpZXIgKi8KKwltYigpOworCXVzbGVlcF9yYW5nZSgxMDAsIDEwMSk7CisJbWVtY3B5X3RvaW8o KHZvaWQgX19pb21lbSAqKXBfZm0tPnBfZm1fYm1pX3JlZ3MtPmZtYm1fc3BsaW9kbiwKKwkJICAg ICh2b2lkICopc2F2ZWRfc3BsaW9kbiwgNjMgKiBzaXplb2YodWludDMyX3QpKTsKKworCWlmIChm bWFuX2lzX3FtaV9oYWx0X25vdF9idXN5X3N0YXRlKHBfZm0tPnBfZm1fcW1pX3JlZ3MpKSB7CisJ CWZtYW5fcmVzdW1lKHBfZm0tPnBfZm1fZnBtX3JlZ3MpOworCQkvKiBNZW1vcnkgYmFycmllciAq LworCQltYigpOworCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDEpOworCX0KKworCXJldHVybiAwOwor fQorI2VuZGlmIC8qIEZNX1VDT0RFX05PVF9SRVNFVF9FUlJBVEFfQlVHWklMTEE2MTczICovCisK Ky8qICAgICAgIEludGVyLU1vZHVsZSBmdW5jdGlvbnMgICAgICAgICAqLworCit2b2lkIGZtX3Jl Z2lzdGVyX2ludHIoc3RydWN0IGZtX3QgKnBfZm0sIGVudW0gZm1fZXZlbnRfbW9kdWxlcyBtb2R1 bGUsCisJCSAgICAgIHVpbnQ4X3QgbW9kX2lkLCBlbnVtIGZtX2ludHJfdHlwZSBpbnRyX3R5cGUs CisJCSAgICAgIHZvaWQgKCpmX2lzcikodm9pZCAqaF9zcmNfYXJnKSwgdm9pZCAqaF9zcmNfYXJn KQoreworCWludCBldmVudCA9IDA7CisKKwlHRVRfRk1fTU9EVUxFX0VWRU5UKHBfZm0sIG1vZHVs ZSwgbW9kX2lkLCBpbnRyX3R5cGUsIGV2ZW50KTsKKwlBU1NFUlQoZXZlbnQgPCBGTV9FVl9EVU1N WV9MQVNUKTsKKworCS8qIHJlZ2lzdGVyIGluIGxvY2FsIEZNIHN0cnVjdHVyZSAqLworCXBfZm0t PmludHJfbW5nW2V2ZW50XS5mX2lzciA9IGZfaXNyOworCXBfZm0tPmludHJfbW5nW2V2ZW50XS5o X3NyY19oYW5kbGUgPSBoX3NyY19hcmc7Cit9CisKK3ZvaWQgZm1fdW5yZWdpc3Rlcl9pbnRyKHN0 cnVjdCBmbV90ICpwX2ZtLCBlbnVtIGZtX2V2ZW50X21vZHVsZXMgbW9kdWxlLAorCQkJdWludDhf dCBtb2RfaWQsIGVudW0gZm1faW50cl90eXBlIGludHJfdHlwZSkKK3sKKwlpbnQgZXZlbnQgPSAw OworCisJR0VUX0ZNX01PRFVMRV9FVkVOVChwX2ZtLCBtb2R1bGUsIG1vZF9pZCwgaW50cl90eXBl LCBldmVudCk7CisJQVNTRVJUKGV2ZW50IDwgRk1fRVZfRFVNTVlfTEFTVCk7CisKKwlwX2ZtLT5p bnRyX21uZ1tldmVudF0uZl9pc3IgPSB1bmltcGxlbWVudGVkX2lzcjsKKwlwX2ZtLT5pbnRyX21u Z1tldmVudF0uaF9zcmNfaGFuZGxlID0gTlVMTDsKK30KKwordWludDhfdCBmbV9nZXRfaWQoc3Ry dWN0IGZtX3QgKnBfZm0pCit7CisJcmV0dXJuIHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5mbV9p ZDsKK30KKwordWludDE2X3QgZm1fZ2V0X2Nsb2NrX2ZyZXEoc3RydWN0IGZtX3QgKnBfZm0pCit7 CisJLyogZm9yIG11bHRpY29yZSBlbnZpcm9ubWVudDogdGhpcyBkZXBlbmRzIG9uIHRoZQorCSAq IGZhY3QgdGhhdCBmbV9jbGtfZnJlcSB3YXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgImluaXQi LgorCSAqLworCXJldHVybiBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+Zm1fY2xrX2ZyZXE7Cit9 CisKK3VpbnQzMl90IGZtX2dldF9ibWlfbWF4X2ZpZm9fc2l6ZShzdHJ1Y3QgZm1fdCAqcF9mbSkK K3sKKwlyZXR1cm4gcF9mbS0+aW50Zy0+Ym1pX21heF9maWZvX3NpemU7Cit9CisKK3N0YXRpYyBp bnQgaW5pdF9mbV9kbWEoc3RydWN0IGZtX3QgKnBfZm0pCit7CisJaW50IGVycjsKKworCWVyciA9 IChpbnQpZm1hbl9kbWFfaW5pdChwX2ZtLT5wX2ZtX2RtYV9yZWdzLAorCQkJCSAgICAgcF9mbS0+ cF9mbV9kcnZfcGFyYW0pOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEFs bG9jYXRlIE1VUkFNIGZvciBDQU0gKi8KKwlwX2ZtLT5jYW1fc2l6ZSA9ICh1aW50MzJfdCkocF9m bS0+cF9mbV9kcnZfcGFyYW0tPgorCQkJCQlkbWFfY2FtX251bV9vZl9lbnRyaWVzICoKKwkJCQkJ RE1BX0NBTV9TSVpFT0ZfRU5UUlkpOworCXBfZm0tPmNhbV9vZmZzZXQgPSBmbV9tdXJhbV9hbGxv YyhwX2ZtLT5wX211cmFtLCBwX2ZtLT5jYW1fc2l6ZSk7CisJaWYgKElTX0VSUl9WQUxVRShwX2Zt LT5jYW1fb2Zmc2V0KSkgeworCQlwcl9lcnIoIk1VUkFNIGFsbG9jIGZvciBETUEgQ0FNIGZhaWxl ZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0 cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ID09IDIpIHsKKwkJdWludHB0cl90IGNhbV9iYXNlX2Fk ZHI7CisKKwkJZm1fbXVyYW1fZnJlZV9tZW0ocF9mbS0+cF9tdXJhbSwgcF9mbS0+Y2FtX29mZnNl dCwKKwkJCQkgIHBfZm0tPmNhbV9zaXplKTsKKworCQlwX2ZtLT5jYW1fc2l6ZSA9CisJCQlwX2Zt LT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NhbV9udW1fb2ZfZW50cmllcyAqIDcyICsgMTI4OworCQlw X2ZtLT5jYW1fb2Zmc2V0ID0gZm1fbXVyYW1fYWxsb2MocF9mbS0+cF9tdXJhbSwgKHVpbnQzMl90 KQorCQkJCQkJICAgICBwX2ZtLT5jYW1fc2l6ZSk7CisJCWlmIChJU19FUlJfVkFMVUUocF9mbS0+ Y2FtX29mZnNldCkpIHsKKwkJCXByX2VycigiTVVSQU0gYWxsb2MgZm9yIERNQSBDQU0gZmFpbGVk XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY2FtX2Jhc2VfYWRkciA9IGZtX211 cmFtX29mZnNldF90b192YmFzZShwX2ZtLT5wX211cmFtLAorCQkJCQkJCSBwX2ZtLT5jYW1fb2Zm c2V0KTsKKwkJc3dpdGNoIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NhbV9udW1fb2ZfZW50 cmllcykgeworCQljYXNlICg4KToKKwkJCVdSSVRFX1VJTlQzMigqKHVpbnQzMl90IF9faW9tZW0g KiljYW1fYmFzZV9hZGRyLAorCQkJCSAgICAgMHhmZjAwMDAwMCk7CisJCQlicmVhazsKKwkJY2Fz ZSAoMTYpOgorCQkJV1JJVEVfVUlOVDMyKCoodWludDMyX3QgX19pb21lbSAqKWNhbV9iYXNlX2Fk ZHIsCisJCQkJICAgICAweGZmZmYwMDAwKTsKKwkJCWJyZWFrOworCQljYXNlICgyNCk6CisJCQlX UklURV9VSU5UMzIoKih1aW50MzJfdCBfX2lvbWVtICopY2FtX2Jhc2VfYWRkciwKKwkJCQkgICAg IDB4ZmZmZmZmMDApOworCQkJYnJlYWs7CisJCWNhc2UgKDMyKToKKwkJCVdSSVRFX1VJTlQzMigq KHVpbnQzMl90IF9faW9tZW0gKiljYW1fYmFzZV9hZGRyLAorCQkJCSAgICAgMHhmZmZmZmZmZik7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2Vycigid3JvbmcgZG1hX2NhbV9udW1fb2Zf ZW50cmllc1xuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKwl9CisKKwlwX2ZtLT5wX2ZtX2Ry dl9wYXJhbS0+Y2FtX2Jhc2VfYWRkciA9IHBfZm0tPmNhbV9vZmZzZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpbml0X2ZtX2ZwbShzdHJ1Y3QgZm1fdCAqcF9mbSkKK3sKKwlyZXR1 cm4gKGludClmbWFuX2ZwbV9pbml0KHBfZm0tPnBfZm1fZnBtX3JlZ3MsCisJCQkJICBwX2ZtLT5w X2ZtX2Rydl9wYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9mbV9ibWkoc3RydWN0IGZtX3Qg KnBfZm0pCit7CisJcmV0dXJuIChpbnQpZm1hbl9ibWlfaW5pdChwX2ZtLT5wX2ZtX2JtaV9yZWdz LAorCQkJCSAgcF9mbS0+cF9mbV9kcnZfcGFyYW0pOworfQorCitzdGF0aWMgaW50IGluaXRfZm1f cW1pKHN0cnVjdCBmbV90ICpwX2ZtKQoreworCXJldHVybiAoaW50KWZtYW5fcW1pX2luaXQocF9m bS0+cF9mbV9xbWlfcmVncywKKwkJCQkgIHBfZm0tPnBfZm1fZHJ2X3BhcmFtKTsKK30KKworLyog ICAgICAgICAgICAgICAgICAgICAgQVBJIEluaXQgdW5pdCBmdW5jdGlvbnMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworCit2b2lkICpmbV9jb25maWcoc3RydWN0IGZtX3BhcmFtc190 ICpwX2ZtX3BhcmFtKQoreworCXN0cnVjdCBmbV90ICpwX2ZtOworCXVpbnRwdHJfdCBiYXNlX2Fk ZHI7CisKKwlpZiAoISgocF9mbV9wYXJhbS0+ZmlybXdhcmUucF9jb2RlICYmIHBfZm1fcGFyYW0t PmZpcm13YXJlLnNpemUpIHx8CisJICAgICAgKCFwX2ZtX3BhcmFtLT5maXJtd2FyZS5wX2NvZGUg JiYgIXBfZm1fcGFyYW0tPmZpcm13YXJlLnNpemUpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXNl X2FkZHIgPSBwX2ZtX3BhcmFtLT5iYXNlX2FkZHI7CisKKwkvKiBBbGxvY2F0ZSBGTSBzdHJ1Y3R1 cmUgKi8KKwlwX2ZtID0ga3phbGxvYyhzaXplb2YoKnBfZm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXBfZm0pCisJCXJldHVybiBOVUxMOworCisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QgPSBremFs bG9jKHNpemVvZigqcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpLAorCQkJCQkJIEdGUF9LRVJORUwp OworCWlmICghcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpIHsKKwkJa2ZyZWUocF9mbSk7CisJCXBy X2VycigiRk0gU3RhdHVzIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8q IEluaXRpYWxpemUgRk0gcGFyYW1ldGVycyB3aGljaCB3aWxsIGJlIGtlcHQgYnkgdGhlIGRyaXZl ciAqLworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5mbV9pZCA9IHBfZm1fcGFyYW0tPmZtX2lk OworCisJLyogQWxsb2NhdGUgdGhlIEZNIGRyaXZlcidzIHBhcmFtZXRlcnMgc3RydWN0dXJlICov CisJcF9mbS0+cF9mbV9kcnZfcGFyYW0gPSBremFsbG9jKHNpemVvZigqcF9mbS0+cF9mbV9kcnZf cGFyYW0pLAorCQkJCQkJIEdGUF9LRVJORUwpOworCWlmICghcF9mbS0+cF9mbV9kcnZfcGFyYW0p IHsKKwkJa2ZyZWUocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpOworCQlrZnJlZShwX2ZtKTsKKwkJ cHJfZXJyKCJGTSBkcml2ZXIgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKwor CS8qIEluaXRpYWxpemUgRk0gcGFyYW1ldGVycyB3aGljaCB3aWxsIGJlIGtlcHQgYnkgdGhlIGRy aXZlciAqLworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5mbV9pZCA9IHBfZm1fcGFyYW0tPmZt X2lkOworCXBfZm0tPnBfbXVyYW0gPSBwX2ZtX3BhcmFtLT5wX211cmFtOworCXBfZm0tPmhfYXBw ID0gcF9mbV9wYXJhbS0+aF9hcHA7CisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmZtX2Nsa19m cmVxID0gcF9mbV9wYXJhbS0+Zm1fY2xrX2ZyZXE7CisJcF9mbS0+Zl9leGNlcHRpb24gPSBwX2Zt X3BhcmFtLT5mX2V4Y2VwdGlvbjsKKwlwX2ZtLT5mX2J1c19lcnJvciA9IHBfZm1fcGFyYW0tPmZf YnVzX2Vycm9yOworCXBfZm0tPnBfZm1fZnBtX3JlZ3MgPQorCSAgICAoc3RydWN0IGZtYW5fZnBt X3JlZ3MgX19pb21lbSAqKVVJTlRfVE9fUFRSKGJhc2VfYWRkciArIEZNX01NX0ZQTSk7CisJcF9m bS0+cF9mbV9ibWlfcmVncyA9CisJICAgIChzdHJ1Y3QgZm1hbl9ibWlfcmVncyBfX2lvbWVtICop VUlOVF9UT19QVFIoYmFzZV9hZGRyICsgRk1fTU1fQk1JKTsKKwlwX2ZtLT5wX2ZtX3FtaV9yZWdz ID0KKwkgICAgKHN0cnVjdCBmbWFuX3FtaV9yZWdzIF9faW9tZW0gKilVSU5UX1RPX1BUUihiYXNl X2FkZHIgKyBGTV9NTV9RTUkpOworCXBfZm0tPnBfZm1fZG1hX3JlZ3MgPQorCSAgICAoc3RydWN0 IGZtYW5fZG1hX3JlZ3MgX19pb21lbSAqKVVJTlRfVE9fUFRSKGJhc2VfYWRkciArIEZNX01NX0RN QSk7CisJcF9mbS0+cF9mbV9yZWdzID0gKHN0cnVjdCBmbWFuX3JlZ3MgX19pb21lbSAqKQorCQkJ ICAgVUlOVF9UT19QVFIoYmFzZV9hZGRyICsgRk1fTU1fQk1JKTsKKwlwX2ZtLT5iYXNlX2FkZHIg PSBiYXNlX2FkZHI7CisKKwlwX2ZtLT5zcGlubG9jayA9IGttYWxsb2Moc2l6ZW9mKHNwaW5sb2Nr X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfZm0tPnNwaW5sb2NrKSB7CisJCWtmcmVlKHBfZm0t PnBfZm1fZHJ2X3BhcmFtKTsKKwkJa2ZyZWUocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpOworCQlr ZnJlZShwX2ZtKTsKKwkJcHJfZXJyKCJjYW4ndCBhbGxvY2F0ZSBzcGlubG9jayFcbiIpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlzcGluX2xvY2tfaW5pdChwX2ZtLT5zcGlubG9jayk7CisJZm1h bl9kZWZjb25maWcocF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCisvKiBvdmVyaWRlIG1hY3JvcyBk ZXBlbmRlbnQgcGFyYW1ldGVycyAqLworI2lmZGVmIEZNX1BFREFOVElDX0RNQQorCWlmIChwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ID09IDQpIHsKKwkJcF9mbS0+ cF9mbV9kcnZfcGFyYW0tPnBlZGFudGljX2RtYSA9IHRydWU7CisJCXBfZm0tPnBfZm1fZHJ2X3Bh cmFtLT5kbWFfYWlkX292ZXJyaWRlID0gdHJ1ZTsKKwl9CisjZW5kaWYgLyogRk1fUEVEQU5USUNf RE1BICovCisjaWZkZWYgRk1fUU1JX05PX0RFUV9PUFRJT05TX1NVUFBPUlQKKwlpZiAocF9mbS0+ cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiAhPSA0KQorCQlwX2ZtLT5wX2Zt X2Rydl9wYXJhbS0+cW1pX2RlcV9vcHRpb25fc3VwcG9ydCA9IHRydWU7CisjZW5kaWYgLyogIUZN X1FNSV9OT19ERVFfT1BUSU9OU19TVVBQT1JUICovCisKKwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVj dC0+cmFtc19lY2NfZW5hYmxlID0gZmFsc2U7CisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4 dHJhX2ZpZm9fcG9vbF9zaXplID0gMDsKKwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXhjZXB0 aW9ucyA9IERGTFRfRVhDRVBUSU9OUzsKKwlwX2ZtLT5yZXNldF9vbl9pbml0ID0gREZMVF9SRVNF VF9PTl9JTklUOworCXBfZm0tPmZ3X3ZlcmlmeSA9IERGTFRfVkVSSUZZX1VDT0RFOworCXBfZm0t PmZpcm13YXJlLnNpemUgPSBwX2ZtX3BhcmFtLT5maXJtd2FyZS5zaXplOworCWlmIChwX2ZtLT5m aXJtd2FyZS5zaXplKSB7CisJCXBfZm0tPmZpcm13YXJlLnBfY29kZSA9IGttYWxsb2MocF9mbS0+ ZmlybXdhcmUuc2l6ZSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXBfZm0tPmZpcm13YXJl LnBfY29kZSkgeworCQkJa2ZyZWUocF9mbS0+c3BpbmxvY2spOworCQkJa2ZyZWUocF9mbS0+cF9m bV9zdGF0ZV9zdHJ1Y3QpOworCQkJa2ZyZWUocF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCQkJa2Zy ZWUocF9mbSk7CisJCQlwcl9lcnIoIkZNIGZpcm13YXJlIGNvZGVcbiIpOworCQkJcmV0dXJuIE5V TEw7CisJCX0KKwkJbWVtY3B5KHBfZm0tPmZpcm13YXJlLnBfY29kZSwKKwkJICAgICAgIHBfZm1f cGFyYW0tPmZpcm13YXJlLnBfY29kZSwgcF9mbS0+ZmlybXdhcmUuc2l6ZSk7CisJfQorCS8qIHJl YWQgcmV2aXNpb24gKi8KKwkvKiBDaGlwIGRlcGVuZGVudCwgd2lsbCBiZSBjb25maWd1cmVkIGlu IEluaXQgKi8KKwlmbWFuX2dldF9yZXZpc2lvbihwX2ZtLT5wX2ZtX2ZwbV9yZWdzLAorCQkJICAm cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiwKKwkJCSAgJnBfZm0t PnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5taW5vcl9yZXYpOworCisJcF9mbS0+aW50ZyA9 CisJCWZpbGxfaW50Z19wYXJhbXMocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1h am9yX3JldiwKKwkJCQkgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1pbm9yX3Jl diwKKwkJCQkgcF9mbV9wYXJhbSk7CisJaWYgKCFwX2ZtLT5pbnRnKSB7CisJCQlrZnJlZShwX2Zt LT5maXJtd2FyZS5wX2NvZGUpOworCQkJa2ZyZWUocF9mbS0+c3BpbmxvY2spOworCQkJa2ZyZWUo cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpOworCQkJa2ZyZWUocF9mbS0+cF9mbV9kcnZfcGFyYW0p OworCQkJa2ZyZWUocF9mbSk7CisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKyNpZmRlZiBGTV9BSURf TU9ERV9OT19UTlVNX1NXMDA1CisJaWYgKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5m by5tYWpvcl9yZXYgPj0gNikKKwkJcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9haWRfbW9kZSA9 IEZNX0RNQV9BSURfT1VUX1BPUlRfSUQ7CisjZW5kaWYgLyogRk1fQUlEX01PREVfTk9fVE5VTV9T VzAwNSAqLworI2lmZGVmIEZNX1FNSV9OT19ERVFfT1BUSU9OU19TVVBQT1JUCisJaWYgKHBfZm0t PnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5tYWpvcl9yZXYgIT0gNCkKKwkJcF9mbS0+cF9m bV9kcnZfcGFyYW0tPnFtaV9kZWZfdG51bXNfdGhyZXNoID0KKwkJICAgIHBfZm0tPmludGctPnFt aV9kZWZfdG51bXNfdGhyZXNoOworI2VuZGlmIC8qIEZNX1FNSV9OT19ERVFfT1BUSU9OU19TVVBQ T1JUICovCisKKwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+dG90YWxfZmlmb19zaXplID0gMDsK KwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+dG90YWxfbnVtX29mX3Rhc2tzID0KKwkodTgpREZM VF9UT1RBTF9OVU1fT0ZfVEFTS1MoCisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5m by5tYWpvcl9yZXYsCisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5taW5vcl9y ZXYsCisJCXBfZm0tPmludGctPmJtaV9tYXhfbnVtX29mX3Rhc2tzKTsKKyNpZmRlZiBGTV9IQVNf VE9UQUxfRE1BUworCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3Jf cmV2IDwgNikKKwkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPm1heF9udW1fb2Zfb3Blbl9kbWFz ID0KKwkJcF9mbS0+aW50Zy0+Ym1pX21heF9udW1fb2ZfZG1hczsKKyNlbmRpZiAvKiBGTV9IQVNf VE9UQUxfRE1BUyAqLworCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFq b3JfcmV2IDwgNikgeworCQlwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2NvbW1fcXRzaF9jbHJf ZW1lciA9CisJCSh1OClERkxUX0RNQV9DT01NX1FfTE9XKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0 LT5yZXZfaW5mby4KKwkJCQkgICAgbWFqb3JfcmV2LAorCQkJCSAgICBwX2ZtLT5pbnRnLT5kbWFf dGhyZXNoX21heF9jb21tcSk7CisKKwkJcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9jb21tX3F0 c2hfYXNydF9lbWVyID0KKwkJKHU4KURGTFRfRE1BX0NPTU1fUV9ISUdIKHBfZm0tPnBfZm1fc3Rh dGVfc3RydWN0LT5yZXZfaW5mby4KKwkJCQkgICAgIG1ham9yX3JldiwKKwkJCQkgICAgIHBfZm0t PmludGctPmRtYV90aHJlc2hfbWF4X2NvbW1xKTsKKworCQlwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ ZG1hX2NhbV9udW1fb2ZfZW50cmllcyA9CisJCURGTFRfRE1BX0NBTV9OVU1fT0ZfRU5UUklFUyhw X2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+CisJCQkJCSAgICByZXZfaW5mby5tYWpvcl9yZXYpOwor CQlwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX3JlYWRfYnVmX3RzaF9jbHJfZW1lciA9CisJCSh1 OClERkxUX0RNQV9SRUFEX0lOVF9CVUZfTE9XKHBfZm0tPmludGctPmRtYV90aHJlc2hfbWF4X2J1 Zik7CisKKwkJcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV9yZWFkX2J1Zl90c2hfYXNydF9lbWVy ID0KKwkJKHU4KURGTFRfRE1BX1JFQURfSU5UX0JVRl9ISUdIKHBfZm0tPmludGctPmRtYV90aHJl c2hfbWF4X2J1Zik7CisKKwkJcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV93cml0ZV9idWZfdHNo X2Nscl9lbWVyID0KKwkJKHU4KURGTFRfRE1BX1dSSVRFX0lOVF9CVUZfTE9XKHBfZm0tPmludGct PmRtYV90aHJlc2hfbWF4X2J1Zik7CisKKwkJcF9mbS0+cF9mbV9kcnZfcGFyYW0tPmRtYV93cml0 ZV9idWZfdHNoX2FzcnRfZW1lciA9CisJCSh1OClERkxUX0RNQV9XUklURV9JTlRfQlVGX0hJR0go cF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfYnVmKTsKKworCQlwX2ZtLT5wX2ZtX2Rydl9wYXJh bS0+ZG1hX2F4aV9kYmdfbnVtX29mX2JlYXRzID0KKwkJREZMVF9BWElfREJHX05VTV9PRl9CRUFU UzsKKwkJfQorCisjaWZkZWYgRk1fTk9fVE5VTV9BR0lORworCXBfZm0tPnBfZm1fZHJ2X3BhcmFt LT50bnVtX2FnaW5nX3BlcmlvZCA9IDA7CisjZW5kaWYgLyogRk1fTk9fVE5VTV9BR0lORyAqLwor CXBfZm0tPnRudW1fYWdpbmdfcGVyaW9kID0gcF9mbS0+cF9mbV9kcnZfcGFyYW0tPnRudW1fYWdp bmdfcGVyaW9kOworCisJcmV0dXJuIHBfZm07Cit9CisKKy8qICAgICBmbV9pbml0CisgKgorICog IEluaXRpYWxpemVzIHRoZSBGTSBtb2R1bGUKKyAqCisgKiBAUGFyYW1baW5dICAgICBwX2ZtIC0g Rk0gbW9kdWxlIGRlc2NyaXB0b3IKKyAqCisgKiBAUmV0dXJuICAgICAgICAwIG9uIHN1Y2Nlc3M7 IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZm1faW5pdChzdHJ1Y3QgZm1fdCAqcF9m bSkKK3sKKwlzdHJ1Y3QgZm1hbl9jZmcgKnBfZm1fZHJ2X3BhcmFtID0gTlVMTDsKKwlpbnQgZXJy ID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgZm1fcmV2aXNpb25faW5mb190IHJldl9pbmZvOworCXN0 cnVjdCBmbWFuX3JnIGZtYW5fcmc7CisJaW50IHJldCwgcmV0X2VycjsKKworCXJldCA9IGlzX2lu aXRfZG9uZShwX2ZtLT5wX2ZtX2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRUlO VkFMOworCisJZm1hbl9yZy5ibWlfcmcgPSBwX2ZtLT5wX2ZtX2JtaV9yZWdzOworCWZtYW5fcmcu cW1pX3JnID0gcF9mbS0+cF9mbV9xbWlfcmVnczsKKwlmbWFuX3JnLmZwbV9yZyA9IHBfZm0tPnBf Zm1fZnBtX3JlZ3M7CisJZm1hbl9yZy5kbWFfcmcgPSBwX2ZtLT5wX2ZtX2RtYV9yZWdzOworCisJ cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmNvdW50MV9taWNyb19iaXQgPSBGTV9USU1FU1RBTVBf MV9VU0VDX0JJVDsKKwlwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+bnVtX29mX2ZtYW5fY3RybF9ldm50 X3JlZ3MgPQorCSAgICBGTV9OVU1fT0ZfRk1BTl9DVFJMX0VWRU5UX1JFR1M7CisKKwkvKiBpZiB1 c2VyIGRpZG4ndCBjb25maWd1cmVkIHRvdGFsX2ZpZm9fc2l6ZSAtCisJICogKHRvdGFsX2ZpZm9f c2l6ZT0wKSB3ZSBjb25maWd1cmUgZGVmYXVsdAorCSAqIGFjY29yZGluZyB0byBjaGlwLiBvdGhl cndpc2UsIHdlIHVzZSB1c2VyJ3MgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlpZiAocF9mbS0+cF9m bV9zdGF0ZV9zdHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZSA9PSAwKQorCQlwX2ZtLT5wX2ZtX3N0YXRl X3N0cnVjdC0+dG90YWxfZmlmb19zaXplID0KKwkJREZMVF9UT1RBTF9GSUZPX1NJWkUoCisJCQkJ cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiwKKwkJCQlwX2ZtLT5w X2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWlub3JfcmV2KTsKKworCXJldF9lcnIgPSBjaGVj a19mbV9wYXJhbWV0ZXJzKHBfZm0pOworCWlmIChyZXRfZXJyKQorCQlyZXR1cm4gcmV0X2VycjsK KworCXBfZm1fZHJ2X3BhcmFtID0gcF9mbS0+cF9mbV9kcnZfcGFyYW07CisKKwlmbV9nZXRfcmV2 aXNpb24ocF9mbSwgJnJldl9pbmZvKTsKKworCS8qIGNsZWFyIHJldmlzaW9uLWRlcGVuZGVudCBu b24gZXhpc3RpbmcgZXhjZXB0aW9uICovCisjaWZkZWYgRk1fTk9fRElTUEFUQ0hfUkFNX0VDQwor CWlmICgocmV2X2luZm8ubWFqb3JfcmV2ICE9IDQpICYmIChyZXZfaW5mby5tYWpvcl9yZXYgPCA2 KSkKKwkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4Y2VwdGlvbnMgJj0KKwkJICAgIH5GTV9F WF9CTUlfRElTUEFUQ0hfUkFNX0VDQzsKKyNlbmRpZiAvKiBGTV9OT19ESVNQQVRDSF9SQU1fRUND ICovCisKKyNpZmRlZiBGTV9RTUlfTk9fRUNDX0VYQ0VQVElPTlMKKwlpZiAocmV2X2luZm8ubWFq b3JfcmV2ID09IDQpCisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5leGNlcHRpb25zICY9CisJ CSAgICB+KEZNX0VYX1FNSV9TSU5HTEVfRUNDIHwgRk1fRVhfUU1JX0RPVUJMRV9FQ0MpOworI2Vu ZGlmIC8qIEZNX1FNSV9OT19FQ0NfRVhDRVBUSU9OUyAqLworCisjaWZkZWYgRk1fUU1JX05PX1NJ TkdMRV9FQ0NfRVhDRVBUSU9OCisJaWYgKHJldl9pbmZvLm1ham9yX3JldiA+PSA2KQorCQlwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXhjZXB0aW9ucyAmPSB+Rk1fRVhfUU1JX1NJTkdMRV9FQ0M7 CisjZW5kaWYgLyogRk1fUU1JX05PX1NJTkdMRV9FQ0NfRVhDRVBUSU9OICovCisKKwkvKiBjbGVh ciBDUEcgKi8KKwltZW1zZXRfaW8oVUlOVF9UT19QVFIocF9mbS0+YmFzZV9hZGRyICsgRk1fTU1f Q0dQKSwgMCwKKwkJICBwX2ZtLT5pbnRnLT5mbV9wb3J0X251bV9vZl9jZyk7CisKKwkvKiBhZGQg dG8gdGhlIGRlZmF1bHQgZXhjZXB0aW9ucyB0aGUgdXNlcidzIGRlZmluaXRpb25zICovCisJcF9m bS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4Y2VwdGlvbnMgfD0gcF9mbS0+dXNlcl9zZXRfZXhjZXB0 aW9uczsKKworI2lmZGVmIEZNX1VDT0RFX05PVF9SRVNFVF9FUlJBVEFfQlVHWklMTEE2MTczCisJ aWYgKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5tYWpvcl9yZXYgPCA2ICYmCisJ ICAgIHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5tYWpvcl9yZXYgIT0gNCAmJgor CSAgICBwX2ZtLT5yZXNldF9vbl9pbml0KSB7CisJCWVyciA9IGZ3X25vdF9yZXNldF9lcnJhdHVt X2J1Z3ppbGxhNjE3M3dhKHBfZm0pOworCQlpZiAoZXJyICE9IDApCisJCQlyZXR1cm4gZXJyOwor CX0gZWxzZSB7CisjZW5kaWYgLyogRk1fVUNPREVfTk9UX1JFU0VUX0VSUkFUQV9CVUdaSUxMQTYx NzMgKi8KKworCQkvKiBSZXNldCB0aGUgRk0gaWYgcmVxdWlyZWQuICovCisJCWlmIChwX2ZtLT5y ZXNldF9vbl9pbml0KSB7CisJCQl1MzIgc3ZyID0gbWZzcHIoU1BSTl9TVlIpOworCisJCQlpZiAo KChTVlJfU09DX1ZFUihzdnIpID09IFNWUl9UNDI0MCAmJgorCQkJICAgICAgU1ZSX1JFVihzdnIp ID4gMHgxMCkpIHx8CisJCQkJKChTVlJfU09DX1ZFUihzdnIpID09IFNWUl9UNDE2MCAmJgorCQkJ CSAgU1ZSX1JFVihzdnIpID4gMHgxMCkpIHx8CisJCQkJKChTVlJfU09DX1ZFUihzdnIpID09IFNW Ul9UNDA4MCAmJgorCQkJCSAgU1ZSX1JFVihzdnIpID4gMHgxMCkpIHx8CisJCQkJKFNWUl9TT0Nf VkVSKHN2cikgPT0gU1ZSX1QyMDgwKSB8fAorCQkJCShTVlJfU09DX1ZFUihzdnIpID09IFNWUl9U MjA4MSkpIHsKKwkJCQlwcl9kZWJ1ZygiSGFjazogTm8gRk0gcmVzZXQhXG4iKTsKKwkJCX0gZWxz ZSB7CisJCQkJV1JJVEVfVUlOVDMyKHBfZm0tPnBfZm1fZnBtX3JlZ3MtPmZtX3JzdGMsCisJCQkJ CSAgICAgRlBNX1JTVENfRk1fUkVTRVQpOworCQkJCS8qIE1lbW9yeSBiYXJyaWVyICovCisJCQkJ bWIoKTsKKwkJCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDEpOworCQkJfQorCisJCQlpZiAoZm1hbl9p c19xbWlfaGFsdF9ub3RfYnVzeV9zdGF0ZSgKKwkJCQlwX2ZtLT5wX2ZtX3FtaV9yZWdzKSkgewor CQkJCWZtYW5fcmVzdW1lKHBfZm0tPnBfZm1fZnBtX3JlZ3MpOworCQkJCXVzbGVlcF9yYW5nZSgx MDAsIDEwMSk7CisJCQl9CisJCX0KKworCQkvKiBMb2FkIEZNYW4tQ29udHJvbGxlciBjb2RlIHRv IElSQU0gKi8KKworCQlpZiAoY2xlYXJfaXJhbShwX2ZtKSAhPSAwKQorCQkJcmV0dXJuIC1FSU5W QUw7CisJCWlmIChwX2ZtLT5maXJtd2FyZS5wX2NvZGUgJiYgKGxvYWRfZm1hbl9jdHJsX2NvZGUo cF9mbSkgIT0gMCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKyNpZmRlZiBGTV9VQ09ERV9OT1RfUkVT RVRfRVJSQVRBX0JVR1pJTExBNjE3MworCX0KKyNlbmRpZiAvKiBGTV9VQ09ERV9OT1RfUkVTRVRf RVJSQVRBX0JVR1pJTExBNjE3MyAqLworCisJLyogR2VuZXJhbCBGTSBkcml2ZXIgaW5pdGlhbGl6 YXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgRk1fRVZfRFVNTVlfTEFTVDsgaSsrKQorCQlwX2Zt LT5pbnRyX21uZ1tpXS5mX2lzciA9IHVuaW1wbGVtZW50ZWRfaXNyOworCisJcF9mbV9kcnZfcGFy YW0tPmV4Y2VwdGlvbnMgPSBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXhjZXB0aW9uczsKKwor CS8qIEluaXQgRE1BIFJlZ2lzdGVycyAqLworCisJZXJyID0gaW5pdF9mbV9kbWEocF9mbSk7CisJ aWYgKGVyciAhPSAwKSB7CisJCWZyZWVfaW5pdF9yZXNvdXJjZXMocF9mbSk7CisJCXJldHVybiBl cnI7CisJfQorCisJLyogSW5pdCBGUE0gUmVnaXN0ZXJzICovCisKKwllcnIgPSBpbml0X2ZtX2Zw bShwX2ZtKTsKKwlpZiAoZXJyICE9IDApIHsKKwkJZnJlZV9pbml0X3Jlc291cmNlcyhwX2ZtKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBkZWZpbmUgY29tbW9uIHJlc291cmNlcyAqLworCS8q IGFsbG9jYXRlIE1VUkFNIGZvciBGSUZPIGFjY29yZGluZyB0byB0b3RhbCBzaXplICovCisJcF9m bS0+Zmlmb19vZmZzZXQgPSBmbV9tdXJhbV9hbGxvYyhwX2ZtLT5wX211cmFtLAorCQkJCQkgICBw X2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+CisJCQkJCSAgIHRvdGFsX2ZpZm9fc2l6ZSk7CisJaWYg KElTX0VSUl9WQUxVRShwX2ZtLT5jYW1fb2Zmc2V0KSkgeworCQlmcmVlX2luaXRfcmVzb3VyY2Vz KHBfZm0pOworCQlwcl9lcnIoIk1VUkFNIGFsbG9jIGZvciBCTUkgRklGTyBmYWlsZWRcbiIpOwor CQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwX2ZtX2Rydl9wYXJhbS0+Zmlmb19iYXNlX2FkZHIg PSBwX2ZtLT5maWZvX29mZnNldDsKKwlwX2ZtX2Rydl9wYXJhbS0+dG90YWxfZmlmb19zaXplID0K KwkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZTsKKwlwX2ZtX2Rydl9w YXJhbS0+dG90YWxfbnVtX29mX3Rhc2tzID0KKwkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnRv dGFsX251bV9vZl90YXNrczsKKwlwX2ZtX2Rydl9wYXJhbS0+Y2xrX2ZyZXEgPSBwX2ZtLT5wX2Zt X3N0YXRlX3N0cnVjdC0+Zm1fY2xrX2ZyZXE7CisKKwkvKiBJbml0IEJNSSBSZWdpc3RlcnMgKi8K KworCWVyciA9IGluaXRfZm1fYm1pKHBfZm0pOworCWlmIChlcnIgIT0gMCkgeworCQlmcmVlX2lu aXRfcmVzb3VyY2VzKHBfZm0pOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEluaXQgUU1JIFJl Z2lzdGVycyAqLworCisJZXJyID0gaW5pdF9mbV9xbWkocF9mbSk7CisJaWYgKGVyciAhPSAwKSB7 CisJCWZyZWVfaW5pdF9yZXNvdXJjZXMocF9mbSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJy ID0gKGludClmbWFuX2VuYWJsZSgmZm1hbl9yZywgcF9mbV9kcnZfcGFyYW0pOworCWlmIChlcnIg IT0gMCkKKwkJcmV0dXJuIGVycjsJLyogRklYTUUgKi8KKworCWVuYWJsZV90aW1lX3N0YW1wKHBf Zm0pOworCisJa2ZyZWUocF9mbS0+ZmlybXdhcmUucF9jb2RlKTsKKwlwX2ZtLT5maXJtd2FyZS5w X2NvZGUgPSBOVUxMOworCisJa2ZyZWUocF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCXBfZm0tPnBf Zm1fZHJ2X3BhcmFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisvKiBmbV9mcmVlCisgKiBG cmVlcyBhbGwgcmVzb3VyY2VzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byBGTSBtb2R1bGUuCisgKiBD YWxsaW5nIHRoaXMgcm91dGluZSBpbnZhbGlkYXRlcyB0aGUgZGVzY3JpcHRvci4KKyAqIHBfZm0g LSBGTSBtb2R1bGUgZGVzY3JpcHRvcgorICpSZXR1cm4gICAgICAgIDAgb24gc3VjY2VzczsgRXJy b3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBmbV9mcmVlKHN0cnVjdCBmbV90ICpwX2ZtKQor eworCXN0cnVjdCBmbWFuX3JnIGZtYW5fcmc7CisKKwlmbWFuX3JnLmJtaV9yZyA9IHBfZm0tPnBf Zm1fYm1pX3JlZ3M7CisJZm1hbl9yZy5xbWlfcmcgPSBwX2ZtLT5wX2ZtX3FtaV9yZWdzOworCWZt YW5fcmcuZnBtX3JnID0gcF9mbS0+cF9mbV9mcG1fcmVnczsKKwlmbWFuX3JnLmRtYV9yZyA9IHBf Zm0tPnBfZm1fZG1hX3JlZ3M7CisKKwlmbWFuX2ZyZWVfcmVzb3VyY2VzKCZmbWFuX3JnKTsKKwor CWtmcmVlKHBfZm0tPnNwaW5sb2NrKTsKKworCWlmIChwX2ZtLT5wX2ZtX2Rydl9wYXJhbSkgewor CQlrZnJlZShwX2ZtLT5maXJtd2FyZS5wX2NvZGUpOworCQlrZnJlZShwX2ZtLT5wX2ZtX2Rydl9w YXJhbSk7CisJCXBfZm0tPnBfZm1fZHJ2X3BhcmFtID0gTlVMTDsKKwl9CisKKwlmcmVlX2luaXRf cmVzb3VyY2VzKHBfZm0pOworCisJa2ZyZWUocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QpOworCisJ a2ZyZWUocF9mbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogICAgICAgQVBJIEFkdmFuY2VkIElu aXQgdW5pdCBmdW5jdGlvbnMgICAgICAgICovCisKK2ludCBmbV9jZmdfcmVzZXRfb25faW5pdChz dHJ1Y3QgZm1fdCAqcF9mbSwgYm9vbCBlbmFibGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGlz X2luaXRfZG9uZShwX2ZtLT5wX2ZtX2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAt RUlOVkFMOworCisJcF9mbS0+cmVzZXRfb25faW5pdCA9IGVuYWJsZTsKKworCXJldHVybiAwOwor fQorCitpbnQgZm1fY2ZnX3RvdGFsX2ZpZm9fc2l6ZShzdHJ1Y3QgZm1fdCAqcF9mbSwgdWludDMy X3QgdG90YWxfZmlmb19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUo cF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT50b3RhbF9maWZvX3NpemUgPSB0b3RhbF9maWZvX3Np emU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtX2NmZ19kbWFfYWlkX292ZXJyaWRlKHN0cnVj dCBmbV90ICpwX2ZtLCBib29sIGFpZF9vdmVycmlkZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g aXNfaW5pdF9kb25lKHBfZm0tPnBfZm1fZHJ2X3BhcmFtKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlwX2ZtLT5wX2ZtX2Rydl9wYXJhbS0+ZG1hX2FpZF9vdmVycmlkZSA9IGFp ZF9vdmVycmlkZTsKKworCXJldHVybiAwOworfQorCisvKiAgICAgICBBUEkgUnVuLXRpbWUgQ29u dHJvbCB1aW50IGZ1bmN0aW9ucyAgICAgICAgKi8KKwordm9pZCBmbV9ldmVudF9pc3Ioc3RydWN0 IGZtX3QgKnBfZm0pCit7CisjZGVmaW5lIEZNX01fQ0FMTF9NQUNfSVNSKF9pZCkgICAgXAorCShw X2ZtLT5pbnRyX21uZ1soZW51bSBmbV9pbnRlcl9tb2R1bGVfZXZlbnQpKEZNX0VWX01BQzAgKyBf aWQpXS4gXAorCWZfaXNyKHBfZm0tPmludHJfbW5nWyhlbnVtIGZtX2ludGVyX21vZHVsZV9ldmVu dCkoRk1fRVZfTUFDMCArIF9pZCldIFwKKwkuaF9zcmNfaGFuZGxlKSkKKwl1aW50MzJfdCBwZW5k aW5nOworCWludCByZXQ7CisJc3RydWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAqZnBtX3JnOwor CisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm0tPnBfZm1fZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQor CQlyZXR1cm47CisKKwlmcG1fcmcgPSBwX2ZtLT5wX2ZtX2ZwbV9yZWdzOworCisJLyogbm9ybWFs IGludGVycnVwdHMgKi8KKwlwZW5kaW5nID0gZm1hbl9nZXRfbm9ybWFsX3BlbmRpbmcoZnBtX3Jn KTsKKwlpZiAoIXBlbmRpbmcpCisJCXJldHVybjsKKworCWlmIChwZW5kaW5nICYgSU5UUl9FTl9R TUkpCisJCXFtaV9ldmVudChwX2ZtKTsKKwlpZiAocGVuZGluZyAmIElOVFJfRU5fUFJTKQorCQlw X2ZtLT5pbnRyX21uZ1tGTV9FVl9QUlNdLmZfaXNyKHBfZm0tPmludHJfbW5nW0ZNX0VWX1BSU10u CisJCQkJCQkgaF9zcmNfaGFuZGxlKTsKKwlpZiAocGVuZGluZyAmIElOVFJfRU5fVE1SKQorCQlw X2ZtLT5pbnRyX21uZ1tGTV9FVl9UTVJdLmZfaXNyKHBfZm0tPmludHJfbW5nW0ZNX0VWX1RNUl0u CisJCQkJCQkgaF9zcmNfaGFuZGxlKTsKKworCS8qIE1BQyBldmVudHMgbWF5IGJlbG9uZyB0byBk aWZmZXJlbnQgcGFydGl0aW9ucyAqLworCWlmIChwZW5kaW5nICYgSU5UUl9FTl9NQUMwKQorCQlG TV9NX0NBTExfTUFDX0lTUigwKTsKKwlpZiAocGVuZGluZyAmIElOVFJfRU5fTUFDMSkKKwkJRk1f TV9DQUxMX01BQ19JU1IoMSk7CisJaWYgKHBlbmRpbmcgJiBJTlRSX0VOX01BQzIpCisJCUZNX01f Q0FMTF9NQUNfSVNSKDIpOworCWlmIChwZW5kaW5nICYgSU5UUl9FTl9NQUMzKQorCQlGTV9NX0NB TExfTUFDX0lTUigzKTsKKwlpZiAocGVuZGluZyAmIElOVFJfRU5fTUFDNCkKKwkJRk1fTV9DQUxM X01BQ19JU1IoNCk7CisJaWYgKHBlbmRpbmcgJiBJTlRSX0VOX01BQzUpCisJCUZNX01fQ0FMTF9N QUNfSVNSKDUpOworCWlmIChwZW5kaW5nICYgSU5UUl9FTl9NQUM2KQorCQlGTV9NX0NBTExfTUFD X0lTUig2KTsKKwlpZiAocGVuZGluZyAmIElOVFJfRU5fTUFDNykKKwkJRk1fTV9DQUxMX01BQ19J U1IoNyk7CisJaWYgKHBlbmRpbmcgJiBJTlRSX0VOX01BQzgpCisJCUZNX01fQ0FMTF9NQUNfSVNS KDgpOworCWlmIChwZW5kaW5nICYgSU5UUl9FTl9NQUM5KQorCQlGTV9NX0NBTExfTUFDX0lTUig5 KTsKK30KKworaW50IGZtX2Vycm9yX2lzcihzdHJ1Y3QgZm1fdCAqcF9mbSkKK3sKKyNkZWZpbmUg Rk1fTV9DQUxMX01BQ19FUlJfSVNSKF9pZCkgXAorCShwX2ZtLT5pbnRyX21uZ1soZW51bSBmbV9p bnRlcl9tb2R1bGVfZXZlbnQpKEZNX0VWX0VSUl9NQUMwICsgX2lkKV0uIFwKKwlmX2lzcihwX2Zt LT5pbnRyX21uZ1soZW51bSBmbV9pbnRlcl9tb2R1bGVfZXZlbnQpXAorCShGTV9FVl9FUlJfTUFD MCArIF9pZCldLmhfc3JjX2hhbmRsZSkpCisJdWludDMyX3QgcGVuZGluZzsKKwlzdHJ1Y3QgZm1h bl9mcG1fcmVncyBfX2lvbWVtICpmcG1fcmc7CisJaW50IHJldDsKKworCXJldCA9IGlzX2luaXRf ZG9uZShwX2ZtLT5wX2ZtX2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWZwbV9yZyA9IHBfZm0tPnBfZm1fZnBtX3JlZ3M7CisKKwkvKiBlcnJvciBpbnRlcnJ1cHRzICov CisJcGVuZGluZyA9IGZtYW5fZ2V0X2ZwbV9lcnJvcl9pbnRlcnJ1cHRzKGZwbV9yZyk7CisJaWYg KCFwZW5kaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwZW5kaW5nICYgRVJSX0lOVFJf RU5fQk1JKQorCQlibWlfZXJyX2V2ZW50KHBfZm0pOworCWlmIChwZW5kaW5nICYgRVJSX0lOVFJf RU5fUU1JKQorCQlxbWlfZXJyX2V2ZW50KHBfZm0pOworCWlmIChwZW5kaW5nICYgRVJSX0lOVFJf RU5fRlBNKQorCQlmcG1fZXJyX2V2ZW50KHBfZm0pOworCWlmIChwZW5kaW5nICYgRVJSX0lOVFJf RU5fRE1BKQorCQlkbWFfZXJyX2V2ZW50KHBfZm0pOworCWlmIChwZW5kaW5nICYgRVJSX0lOVFJf RU5fSVJBTSkKKwkJaXJhbV9lcnJfaW50cihwX2ZtKTsKKwlpZiAocGVuZGluZyAmIEVSUl9JTlRS X0VOX01VUkFNKQorCQltdXJhbV9lcnJfaW50cihwX2ZtKTsKKwlpZiAocGVuZGluZyAmIEVSUl9J TlRSX0VOX1BSUykKKwkJcF9mbS0+aW50cl9tbmdbRk1fRVZfRVJSX1BSU10uZl9pc3IocF9mbS0+ CisJCQkJCQkgICAgIGludHJfbW5nW0ZNX0VWX0VSUl9QUlNdLgorCQkJCQkJICAgICBoX3NyY19o YW5kbGUpOworCisJLyogTUFDIGV2ZW50cyBtYXkgYmVsb25nIHRvIGRpZmZlcmVudCBwYXJ0aXRp b25zICovCisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUMwKQorCQlGTV9NX0NBTExfTUFD X0VSUl9JU1IoMCk7CisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUMxKQorCQlGTV9NX0NB TExfTUFDX0VSUl9JU1IoMSk7CisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUMyKQorCQlG TV9NX0NBTExfTUFDX0VSUl9JU1IoMik7CisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUMz KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1IoMyk7CisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9F Tl9NQUM0KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1IoNCk7CisJaWYgKHBlbmRpbmcgJiBFUlJf SU5UUl9FTl9NQUM1KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1IoNSk7CisJaWYgKHBlbmRpbmcg JiBFUlJfSU5UUl9FTl9NQUM2KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1IoNik7CisJaWYgKHBl bmRpbmcgJiBFUlJfSU5UUl9FTl9NQUM3KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1IoNyk7CisJ aWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUM4KQorCQlGTV9NX0NBTExfTUFDX0VSUl9JU1Io OCk7CisJaWYgKHBlbmRpbmcgJiBFUlJfSU5UUl9FTl9NQUM5KQorCQlGTV9NX0NBTExfTUFDX0VS Ul9JU1IoOSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtX2Rpc2FibGVfcmFtc19lY2Moc3Ry dWN0IGZtX3QgKnBfZm0pCit7CisJYm9vbCBleHBsaWNpdF9kaXNhYmxlID0gZmFsc2U7CisJc3Ry dWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAqZnBtX3JnOworCWludCByZXQ7CisKKwlyZXQgPSBp c19pbml0X2RvbmUocF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlmcG1fcmcgPSBwX2ZtLT5wX2ZtX2ZwbV9yZWdzOworCisJaWYgKCFwX2ZtLT5wX2Zt X3N0YXRlX3N0cnVjdC0+aW50ZXJuYWxfY2FsbCkKKwkJZXhwbGljaXRfZGlzYWJsZSA9IHRydWU7 CisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmludGVybmFsX2NhbGwgPSBmYWxzZTsKKworCS8q IGlmIHJhbXMgYXJlIGFscmVhZHkgZGlzYWJsZWQsIG9yIGlmIHJhbXMgd2VyZSBleHBsaWNpdGx5 IGVuYWJsZWQgYW5kCisJICogIGFyZSBjdXJyZW50bHkgY2FsbGVkIGluZGlyZWN0bHkgKG5vdCBl eHBsaWNpdGx5KSwgaWdub3JlIHRoaXMgY2FsbC4KKwkgKi8KKwlpZiAoIXBfZm0tPnBfZm1fc3Rh dGVfc3RydWN0LT5yYW1zX2VjY19lbmFibGUgfHwKKwkgICAgKHBfZm0tPnBfZm1fc3RhdGVfc3Ry dWN0LT5leHBsaWNpdF9lbmFibGUgJiYgIWV4cGxpY2l0X2Rpc2FibGUpKQorCQlyZXR1cm4gMDsK KwlpZiAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4cGxpY2l0X2VuYWJsZSkKKwkJLyogVGhp cyBpcyB0aGUgY2FzZSB3ZXJlIGJvdGggZXhwbGljaXQgYXJlIHRydWUuCisJCSAqIFR1cm4gb2Zm IHRoaXMgZmxhZyBmb3IgY2FzZXMgd2VyZSBmb2xsb3dpbmcKKwkJICogcmFtc0VuYWJsZSByb3V0 aW5lcyBhcmUgY2FsbGVkCisJCSAqLworCQlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXhwbGlj aXRfZW5hYmxlID0gZmFsc2U7CisKKwlmbWFuX2VuYWJsZV9yYW1zX2VjYyhmcG1fcmcpOworCXBf Zm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yYW1zX2VjY19lbmFibGUgPSBmYWxzZTsKKworCXJldHVy biAwOworfQorCitpbnQgZm1fc2V0X2V4Y2VwdGlvbihzdHJ1Y3QgZm1fdCAqcF9mbSwgZW51bSBm bV9leGNlcHRpb25zIGV4Y2VwdGlvbiwKKwkJICAgICBib29sIGVuYWJsZSkKK3sKKwl1aW50MzJf dCBiaXRfbWFzayA9IDA7CisJZW51bSBmbWFuX2V4Y2VwdGlvbnMgZnNsX2V4Y2VwdGlvbjsKKwlz dHJ1Y3QgZm1hbl9yZyBmbWFuX3JnOworCWludCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUo cF9mbS0+cF9mbV9kcnZfcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmbWFu X3JnLmJtaV9yZyA9IHBfZm0tPnBfZm1fYm1pX3JlZ3M7CisJZm1hbl9yZy5xbWlfcmcgPSBwX2Zt LT5wX2ZtX3FtaV9yZWdzOworCWZtYW5fcmcuZnBtX3JnID0gcF9mbS0+cF9mbV9mcG1fcmVnczsK KwlmbWFuX3JnLmRtYV9yZyA9IHBfZm0tPnBfZm1fZG1hX3JlZ3M7CisKKwlHRVRfRVhDRVBUSU9O X0ZMQUcoYml0X21hc2ssIGV4Y2VwdGlvbik7CisJaWYgKGJpdF9tYXNrKSB7CisJCWlmIChlbmFi bGUpCisJCQlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXhjZXB0aW9ucyB8PSBiaXRfbWFzazsK KwkJZWxzZQorCQkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4Y2VwdGlvbnMgJj0gfmJpdF9t YXNrOworCisJCUZNQU5fRVhDRVBUSU9OX1RSQU5TKGZzbF9leGNlcHRpb24sIGV4Y2VwdGlvbik7 CisKKwkJcmV0dXJuIChpbnQpZm1hbl9zZXRfZXhjZXB0aW9uKCZmbWFuX3JnLAorCQkJCQkgICAg ICAgZnNsX2V4Y2VwdGlvbiwgZW5hYmxlKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoIlVuZGVmaW5l ZCBleGNlcHRpb25pXG4iKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKworCXJldHVybiAwOworfQor CitpbnQgZm1fZ2V0X3JldmlzaW9uKHN0cnVjdCBmbV90ICpwX2ZtLCBzdHJ1Y3QgZm1fcmV2aXNp b25faW5mb190CisJCQkqcF9mbV9yZXZpc2lvbl9pbmZvKQoreworCXBfZm1fcmV2aXNpb25faW5m by0+bWFqb3JfcmV2ID0gcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJCQlyZXZfaW5mby5t YWpvcl9yZXY7CisJcF9mbV9yZXZpc2lvbl9pbmZvLT5taW5vcl9yZXYgPSBwX2ZtLT5wX2ZtX3N0 YXRlX3N0cnVjdC0+CisJCQkJCXJldl9pbmZvLm1pbm9yX3JldjsKKworCXJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0uaCBiL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZjdmNTZlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmgKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24p IGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KyAqLworCisvKiBGTSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucy4gKi8KKyNp Zm5kZWYgX19GTV9ICisjZGVmaW5lIF9fRk1fSAorCisjaW5jbHVkZSAic2VydmljZS5oIgorI2lu Y2x1ZGUgImZtX2V4dC5oIgorCisjaW5jbHVkZSAiZnNsX2ZtYW4uaCIKKworLyogUHJldmVudHMg dGhlIHVzZSBvZiBUWCBwb3J0IDEgd2l0aCBPUCBwb3J0IDAgZm9yIEZNIE1ham9yIFJldiA0IChQ MTAyMykgKi8KKyNkZWZpbmUgRk1fTE9XX0VORF9SRVNUUklDVElPTgorCisvKiBIYXJkd2FyZSBk ZWZpbmVzICovCisjZGVmaW5lIEZNX01BWF9OVU1fT0ZfSFdfUE9SVF9JRFMgICAgICAgICAgIDY0 CisjZGVmaW5lIEZNX01BWF9OVU1fT0ZfTUFDUwkxMAorCisjZGVmaW5lIEZNX05VTV9PRl9GTUFO X0NUUkxfRVZFTlRfUkVHUwkJNAorCisjZGVmaW5lIEdFVF9FWENFUFRJT05fRkxBRyhiaXRfbWFz aywgZXhjZXB0aW9uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3dpdGNoICgoaW50KWV4Y2VwdGlv bikgewkJCQkJXAorCWNhc2UgRk1fRVhfRE1BX0JVU19FUlJPUjoJCQkJCVwKKwkJYml0X21hc2sg PSBGTV9FWF9ETUFfQlVTX0VSUk9SOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIEZNX0VY X0RNQV9TSU5HTEVfUE9SVF9FQ0M6CQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9ETUFfU0lOR0xF X1BPUlRfRUNDOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIEZNX0VYX0RNQV9SRUFEX0VD QzoJCQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9ETUFfUkVBRF9FQ0M7CQkJCVwKKwkJYnJlYWs7 CQkJCQkJCVwKKwljYXNlIEZNX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDOgkJCQlcCisJCWJpdF9t YXNrID0gRk1fRVhfRE1BX1NZU1RFTV9XUklURV9FQ0M7CQkJXAorCQlicmVhazsJCQkJCQkJXAor CWNhc2UgRk1fRVhfRE1BX0ZNX1dSSVRFX0VDQzoJCQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9E TUFfRk1fV1JJVEVfRUNDOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIEZNX0VYX0ZQTV9T VEFMTF9PTl9UQVNLUzoJCQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9GUE1fU1RBTExfT05fVEFT S1M7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgRk1fRVhfRlBNX1NJTkdMRV9FQ0M6CQkJ CQlcCisJCWJpdF9tYXNrID0gRk1fRVhfRlBNX1NJTkdMRV9FQ0M7CQkJXAorCQlicmVhazsJCQkJ CQkJXAorCWNhc2UgRk1fRVhfRlBNX0RPVUJMRV9FQ0M6CQkJCQlcCisJCWJpdF9tYXNrID0gRk1f RVhfRlBNX0RPVUJMRV9FQ0M7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgRk1fRVhfUU1J X1NJTkdMRV9FQ0M6CQkJCQlcCisJCWJpdF9tYXNrID0gRk1fRVhfUU1JX1NJTkdMRV9FQ0M7CQkJ XAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgRk1fRVhfUU1JX0RPVUJMRV9FQ0M6CQkJCQlcCisJ CWJpdF9tYXNrID0gRk1fRVhfUU1JX0RPVUJMRV9FQ0M7CQkJXAorCQlicmVhazsJCQkJCQkJXAor CWNhc2UgRk1fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9SVElEOgkJCVwKKwkJYml0X21hc2sg PSBGTV9FWF9RTUlfREVRX0ZST01fVU5LTk9XTl9QT1JUSUQ7CQlcCisJCWJyZWFrOwkJCQkJCQlc CisJY2FzZSBGTV9FWF9CTUlfTElTVF9SQU1fRUNDOgkJCQkJXAorCQliaXRfbWFzayA9IEZNX0VY X0JNSV9MSVNUX1JBTV9FQ0M7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgRk1fRVhfQk1J X1NUT1JBR0VfUFJPRklMRV9FQ0M6CQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9CTUlfU1RPUkFH RV9QUk9GSUxFX0VDQzsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIEZNX0VYX0JNSV9TVEFU SVNUSUNTX1JBTV9FQ0M6CQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9CTUlfU1RBVElTVElDU19S QU1fRUNDOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgRk1fRVhfQk1JX0RJU1BBVENIX1JB TV9FQ0M6CQkJCVwKKwkJYml0X21hc2sgPSBGTV9FWF9CTUlfRElTUEFUQ0hfUkFNX0VDQzsJCQlc CisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSBGTV9FWF9JUkFNX0VDQzoJCQkJCQlcCisJCWJpdF9t YXNrID0gRk1fRVhfSVJBTV9FQ0M7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIEZNX0VY X01VUkFNX0VDQzoJCQkJCQlcCisJCWJpdF9tYXNrID0gRk1fRVhfTVVSQU1fRUNDOwkJCQlcCisJ CWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQliaXRfbWFzayA9IDA7CQkJCQkJ XAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUg R0VUX0ZNX01PRFVMRV9FVkVOVChfcF9mbSwgX21vZCwgX2lkLCBfaW50cl90eXBlLCBfZXZlbnQp CVwKK2RvIHsJCQkJCQkJCQlcCisJc3dpdGNoIChfbW9kKSB7CQkJCQkJCVwKKwljYXNlIChGTV9N T0RfUFJTKToJCQkJCQlcCisJCWlmIChfaWQpCQkJCQkJXAorCQkJX2V2ZW50ID0gRk1fRVZfRFVN TVlfTEFTVDsJCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJZXZlbnQgPSAoX2ludHJfdHlwZSA9PSBG TV9JTlRSX1RZUEVfRVJSKSA/CVwKKwkJCUZNX0VWX0VSUl9QUlMgOiBGTV9FVl9QUlM7CQkJXAor CQlicmVhazsJCQkJCQkJXAorCWNhc2UgKEZNX01PRF9UTVIpOgkJCQkJCVwKKwkJaWYgKF9pZCkJ CQkJCQlcCisJCQlfZXZlbnQgPSBGTV9FVl9EVU1NWV9MQVNUOwkJCVwKKwkJZWxzZQkJCQkJCQlc CisJCQlfZXZlbnQgPSAoX2ludHJfdHlwZSA9PSBGTV9JTlRSX1RZUEVfRVJSKSA/CVwKKwkJCUZN X0VWX0RVTU1ZX0xBU1QgOiBGTV9FVl9UTVI7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2Ug KEZNX01PRF9NQUMpOgkJCQkJCVwKKwkJCV9ldmVudCA9IChfaW50cl90eXBlID09IEZNX0lOVFJf VFlQRV9FUlIpID8JXAorCQkJKEZNX0VWX0VSUl9NQUMwICsgX2lkKSA6CQkJXAorCQkJKEZNX0VW X01BQzAgKyBfaWQpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAoRk1fTU9EX0ZNQU5f Q1RSTCk6CQkJCQlcCisJCWlmIChfaW50cl90eXBlID09IEZNX0lOVFJfVFlQRV9FUlIpCQkJXAor CQkJX2V2ZW50ID0gRk1fRVZfRFVNTVlfTEFTVDsJCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX2V2 ZW50ID0gKEZNX0VWX0ZNQU5fQ1RSTF8wICsgX2lkKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlk ZWZhdWx0OgkJCQkJCQlcCisJCV9ldmVudCA9IEZNX0VWX0RVTU1ZX0xBU1Q7CQkJCVwKKwkJYnJl YWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEZNQU5fRVhD RVBUSU9OX1RSQU5TKGZzbF9leGNlcHRpb24sIF9leGNlcHRpb24pIGRvIHtcCitzd2l0Y2ggKChp bnQpX2V4Y2VwdGlvbikge1wKK2Nhc2UgIEZNX0VYX0RNQV9CVVNfRVJST1I6ICAgICAgICAgICAg ICAgICAgICBcCisJZnNsX2V4Y2VwdGlvbiA9ICBFX0ZNQU5fRVhfRE1BX0JVU19FUlJPUjtcCisJ YnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0RNQV9SRUFEX0VDQzogICAgICAgICAgICAgICAgICAg IFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9ETUFfUkVBRF9FQ0M7XAorCWJyZWFrOyAg ICAgICAgXAorY2FzZSAgRk1fRVhfRE1BX1NZU1RFTV9XUklURV9FQ0M6ICAgICAgICAgICAgICAg IFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9ETUFfU1lTVEVNX1dSSVRFX0VDQztcCisJ YnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0RNQV9GTV9XUklURV9FQ0M6ICAgICAgICAgICAgICAg ICAgICBcCisJZnNsX2V4Y2VwdGlvbiA9ICBFX0ZNQU5fRVhfRE1BX0ZNX1dSSVRFX0VDQztcCisJ YnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0ZQTV9TVEFMTF9PTl9UQVNLUzogICAgICAgICAgICAg ICAgXAorCWZzbF9leGNlcHRpb24gPSAgRV9GTUFOX0VYX0ZQTV9TVEFMTF9PTl9UQVNLUztcCisJ YnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0ZQTV9TSU5HTEVfRUNDOiAgICAgICAgICAgICAgICAg ICAgXAorCWZzbF9leGNlcHRpb24gPSAgRV9GTUFOX0VYX0ZQTV9TSU5HTEVfRUNDO1wKKwlicmVh azsgICAgXAorY2FzZSAgRk1fRVhfRlBNX0RPVUJMRV9FQ0M6ICAgICAgICAgICAgICAgICAgICBc CisJZnNsX2V4Y2VwdGlvbiA9ICBFX0ZNQU5fRVhfRlBNX0RPVUJMRV9FQ0M7XAorCWJyZWFrOyAg ICBcCitjYXNlICBGTV9FWF9RTUlfU0lOR0xFX0VDQzogICAgICAgICAgICAgICAgICAgIFwKKwlm c2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9RTUlfU0lOR0xFX0VDQztcCisJYnJlYWs7ICAgIFwK K2Nhc2UgIEZNX0VYX1FNSV9ET1VCTEVfRUNDOiAgICAgICAgICAgICAgICAgICAgXAorCWZzbF9l eGNlcHRpb24gPSAgRV9GTUFOX0VYX1FNSV9ET1VCTEVfRUNDO1wKKwlicmVhazsgICAgXAorY2Fz ZSAgRk1fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9SVElEOiAgICAgICAgICAgIFwKKwlmc2xf ZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9RTUlfREVRX0ZST01fVU5LTk9XTl9QT1JUSUQ7XAorCWJy ZWFrOyBcCitjYXNlICBGTV9FWF9CTUlfTElTVF9SQU1fRUNDOiAgICAgICAgICAgICAgICAgICAg XAorCWZzbF9leGNlcHRpb24gPSAgRV9GTUFOX0VYX0JNSV9MSVNUX1JBTV9FQ0M7XAorCWJyZWFr OyAgICBcCitjYXNlICBGTV9FWF9CTUlfU1RPUkFHRV9QUk9GSUxFX0VDQzogICAgICAgICAgICAg ICAgICAgIFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9CTUlfU1RPUkFHRV9QUk9GSUxF X0VDQztcCisJYnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0JNSV9TVEFUSVNUSUNTX1JBTV9FQ0M6 ICAgICAgICAgICAgICAgIFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9CTUlfU1RBVElT VElDU19SQU1fRUNDO1wKKwlicmVhazsgXAorY2FzZSAgRk1fRVhfQk1JX0RJU1BBVENIX1JBTV9F Q0M6ICAgICAgICAgICAgICAgIFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9CTUlfRElT UEFUQ0hfUkFNX0VDQztcCisJYnJlYWs7ICAgIFwKK2Nhc2UgIEZNX0VYX0lSQU1fRUNDOiAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9JUkFNX0VD QztcCisJYnJlYWs7ICAgICAgICBcCitjYXNlICBGTV9FWF9NVVJBTV9FQ0M6ICAgICAgICAgICAg ICAgICAgICBcCisJZnNsX2V4Y2VwdGlvbiA9ICBFX0ZNQU5fRVhfTVVSQU1fRUNDO1wKKwlicmVh azsgICAgICAgIFwKK2RlZmF1bHQ6IFwKKwlmc2xfZXhjZXB0aW9uID0gIEVfRk1BTl9FWF9ETUFf QlVTX0VSUk9SOyBicmVhazsgICAgXAorfSBcCit9IHdoaWxlICgwKQorCisvKiBkZWZhdWx0cyAq LworI2RlZmluZSBERkxUX0VYQ0VQVElPTlMJXAorCSgoRk1fRVhfRE1BX0JVU19FUlJPUikgICAg ICAgICAgICB8IFwKKwkoRk1fRVhfRE1BX1JFQURfRUNDKSAgICAgICAgICAgICAgfCBcCisJKEZN X0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDKSAgICAgIHwgXAorCShGTV9FWF9ETUFfRk1fV1JJVEVf RUNDKSAgICAgICAgICB8IFwKKwkoRk1fRVhfRlBNX1NUQUxMX09OX1RBU0tTKSAgICAgICAgfCBc CisJKEZNX0VYX0ZQTV9TSU5HTEVfRUNDKSAgICAgICAgICAgIHwgXAorCShGTV9FWF9GUE1fRE9V QkxFX0VDQykgICAgICAgICAgICB8IFwKKwkoRk1fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9S VElEKSB8IFwKKwkoRk1fRVhfQk1JX0xJU1RfUkFNX0VDQykgICAgICAgICAgfCBcCisJKEZNX0VY X0JNSV9TVE9SQUdFX1BST0ZJTEVfRUNDKSAgIHwgXAorCShGTV9FWF9CTUlfU1RBVElTVElDU19S QU1fRUNDKSAgICB8IFwKKwkoRk1fRVhfSVJBTV9FQ0MpICAgICAgICAgICAgICAgICAgfCBcCisJ KEZNX0VYX01VUkFNX0VDQykgICAgICAgICAgICAgICAgIHwgXAorCShGTV9FWF9CTUlfRElTUEFU Q0hfUkFNX0VDQykgICAgICB8IFwKKwkoRk1fRVhfUU1JX0RPVUJMRV9FQ0MpICAgICAgICAgICAg fCBcCisJKEZNX0VYX1FNSV9TSU5HTEVfRUNDKSkKKworI2RlZmluZSBERkxUX0FYSV9EQkdfTlVN X09GX0JFQVRTICAgICAgICAgICAgMQorI2RlZmluZSBERkxUX1JFU0VUX09OX0lOSVQgICAgICAg ICAgICAgICAgIGZhbHNlCisvKiBkbyBub3QgY2hhbmdlISBpZiBjaGFuZ2VkLCBtdXN0IGJlIGRp c2FibGVkIGZvciByZXYxICEgKi8KKyNkZWZpbmUgREZMVF9WRVJJRllfVUNPREUgICAgICAgICAg ICAgICAgIGZhbHNlCisKKyNkZWZpbmUgREZMVF9ETUFfUkVBRF9JTlRfQlVGX0xPVyhkbWFfdGhy ZXNoX21heF9idWYpCVwKKwkoKGRtYV90aHJlc2hfbWF4X2J1ZiArIDEpIC8gMikKKyNkZWZpbmUg REZMVF9ETUFfUkVBRF9JTlRfQlVGX0hJR0goZG1hX3RocmVzaF9tYXhfYnVmKQlcCisJKChkbWFf dGhyZXNoX21heF9idWYgKyAxKSAqIDMgLyA0KQorI2RlZmluZSBERkxUX0RNQV9XUklURV9JTlRf QlVGX0xPVyhkbWFfdGhyZXNoX21heF9idWYpCVwKKwkoKGRtYV90aHJlc2hfbWF4X2J1ZiArIDEp IC8gMikKKyNkZWZpbmUgREZMVF9ETUFfV1JJVEVfSU5UX0JVRl9ISUdIKGRtYV90aHJlc2hfbWF4 X2J1ZilcCisJKChkbWFfdGhyZXNoX21heF9idWYgKyAxKSAqIDMgLyA0KQorI2RlZmluZSBERkxU X0RNQV9DT01NX1FfTE9XKG1ham9yLCBkbWFfdGhyZXNoX21heF9jb21tcSkJXAorCSgobWFqb3Ig PT0gNikgPyAweDJBIDogKChkbWFfdGhyZXNoX21heF9jb21tcSArIDEpIC8gMikpCisjZGVmaW5l IERGTFRfRE1BX0NPTU1fUV9ISUdIKG1ham9yLCBkbWFfdGhyZXNoX21heF9jb21tcSkJXAorCSgo bWFqb3IgPT0gNikgPyAweDNmIDogKChkbWFfdGhyZXNoX21heF9jb21tcSArIDEpICogMyAvIDQp KQorI2RlZmluZSBERkxUX1RPVEFMX05VTV9PRl9UQVNLUyhtYWpvciwgbWlub3IsIGJtaV9tYXhf bnVtX29mX3Rhc2tzKQlcCisJKChtYWpvciA9PSA2KSA/ICgobWlub3IgPT0gMSB8fCBtaW5vciA9 PSA0KSA/IDU5IDogMTI0KSA6CVwKKwlibWlfbWF4X251bV9vZl90YXNrcykKKworI2RlZmluZSBE RkxUX0RNQV9DQU1fTlVNX09GX0VOVFJJRVMobWFqb3IpCShtYWpvciA9PSA2ID8gNjQgOiAzMikK KworI2RlZmluZSBERkxUX1RPVEFMX0ZJRk9fU0laRShtYWpvciwgbWlub3IpCQkJXAorCSgobWFq b3IgPT0gNikgPwkJCQkJCVwKKwkoKG1pbm9yID09IDEgfHwgbWlub3IgPT0gNCkgPyAoMTU2ICog MTAyNCkgOiAoMjk1ICogMTAyNCkpIDoJXAorCSgoKG1ham9yID09IDIpIHx8IChtYWpvciA9PSA1 KSkgPwkJCVwKKwkoMTAwICogMTAyNCkgOiAoKG1ham9yID09IDQpID8JCQlcCisJKDQ2ICogMTAy NCkgOiAoMTIyICogMTAyNCkpKSkKKworI2RlZmluZSBGTV9USU1FU1RBTVBfMV9VU0VDX0JJVCAg ICAgICAgICAgICA4CisKKy8qIERlZmluZXMgdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIEZN IGludGVycnVwdHMgKi8KKyNkZWZpbmUgRVJSX0lOVFJfRU5fRE1BICAgICAgICAgMHgwMDAxMDAw MAorI2RlZmluZSBFUlJfSU5UUl9FTl9GUE0gICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEVS Ul9JTlRSX0VOX0JNSSAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRVJSX0lOVFJfRU5fUU1J ICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBFUlJfSU5UUl9FTl9QUlMgICAgICAgICAweDAw MjAwMDAwCisjZGVmaW5lIEVSUl9JTlRSX0VOX01VUkFNICAgICAgIDB4MDAwNDAwMDAKKyNkZWZp bmUgRVJSX0lOVFJfRU5fSVJBTSAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBFUlJfSU5UUl9F Tl9NQUM4ICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEVSUl9JTlRSX0VOX01BQzkgICAgICAg IDB4MDAwMDAwNDAKKyNkZWZpbmUgRVJSX0lOVFJfRU5fTUFDMCAgICAgICAgMHgwMDAwNDAwMAor I2RlZmluZSBFUlJfSU5UUl9FTl9NQUMxICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEVSUl9J TlRSX0VOX01BQzIgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRVJSX0lOVFJfRU5fTUFDMyAg ICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBFUlJfSU5UUl9FTl9NQUM0ICAgICAgICAweDAwMDAw NDAwCisjZGVmaW5lIEVSUl9JTlRSX0VOX01BQzUgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUg RVJSX0lOVFJfRU5fTUFDNiAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBFUlJfSU5UUl9FTl9N QUM3ICAgICAgICAweDAwMDAwMDgwCisKKyNkZWZpbmUgSU5UUl9FTl9RTUkgICAgICAgICAgICAg MHg0MDAwMDAwMAorI2RlZmluZSBJTlRSX0VOX1BSUyAgICAgICAgICAgICAweDIwMDAwMDAwCisj ZGVmaW5lIElOVFJfRU5fTUFDMCAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSU5UUl9F Tl9NQUMxICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJTlRSX0VOX01BQzIgICAgICAg ICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElOVFJfRU5fTUFDMyAgICAgICAgICAgIDB4MDAwMTAw MDAKKyNkZWZpbmUgSU5UUl9FTl9NQUM0ICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJ TlRSX0VOX01BQzUgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElOVFJfRU5fTUFDNiAg ICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU5UUl9FTl9NQUM3ICAgICAgICAgICAgMHgw MDAwMDAwMgorI2RlZmluZSBJTlRSX0VOX01BQzggICAgICAgICAgICAweDAwMjAwMDAwCisjZGVm aW5lIElOVFJfRU5fTUFDOSAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgSU5UUl9FTl9S RVYwICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJTlRSX0VOX1JFVjEgICAgICAgICAg ICAweDAwMDA0MDAwCisjZGVmaW5lIElOVFJfRU5fUkVWMiAgICAgICAgICAgIDB4MDAwMDIwMDAK KyNkZWZpbmUgSU5UUl9FTl9SRVYzICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJTlRS X0VOX0JSSyAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIElOVFJfRU5fVE1SICAgICAg ICAgICAgIDB4MDEwMDAwMDAKKworLyogTW9kdWxlcyByZWdpc3RlcnMgb2Zmc2V0cyAqLworI2Rl ZmluZSBGTV9NTV9NVVJBTSAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEZNX01NX0JN SSAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRk1fTU1fUU1JICAgICAgICAgICAg ICAgMHgwMDA4MDQwMAorI2RlZmluZSBGTV9NTV9QUlMgICAgICAgICAgICAgICAweDAwMGM3MDAw CisjZGVmaW5lIEZNX01NX0RNQSAgICAgICAgICAgICAgIDB4MDAwQzIwMDAKKyNkZWZpbmUgRk1f TU1fRlBNICAgICAgICAgICAgICAgMHgwMDBDMzAwMAorI2RlZmluZSBGTV9NTV9JTUVNICAgICAg ICAgICAgICAweDAwMEM0MDAwCisjZGVmaW5lIEZNX01NX0NHUCAgICAgICAgICAgICAgIDB4MDAw REIwMDAKKyNkZWZpbmUgRk1fTU1fVFJCKGkpICAgICAgICAgICAgKDB4MDAwRDAyMDAgKyAweDQw MCAqIChpKSkKKyNkZWZpbmUgRk1fTU1fU1AgICAgICAgICAgICAgICAgMHgwMDBkYzAwMAorCisv KiBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVycyAqLworCitzdHJ1Y3QgZm1faXJhbV9yZWdzX3Qgewor CXVpbnQzMl90IGlhZGQ7CS8qIEZNIElSQU0gaW5zdHJ1Y3Rpb24gYWRkcmVzcyByZWdpc3RlciAq LworCXVpbnQzMl90IGlkYXRhOy8qIEZNIElSQU0gaW5zdHJ1Y3Rpb24gZGF0YSByZWdpc3RlciAq LworCXVpbnQzMl90IGl0Y2ZnOy8qIEZNIElSQU0gdGltaW5nIGNvbmZpZyByZWdpc3RlciAqLwor CXVpbnQzMl90IGlyZWFkeTsvKiBGTSBJUkFNIHJlYWR5IHJlZ2lzdGVyICovCisJdWludDhfdCBy ZXNbMHg4MDAwMCAtIDB4MTBdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8q IEdlbmVyYWwgZGVmaW5lcyAqLworI2RlZmluZSBGTV9GV19ERUJVR19JTlNUUlVDVElPTiAgICAg ICAgICAgICAweDZmZmZmODA1VUwKKworc3RydWN0IGZtX3N0YXRlX3N0cnVjdF90IHsKKwl1aW50 OF90IGZtX2lkOworCXVpbnQxNl90IGZtX2Nsa19mcmVxOworCXN0cnVjdCBmbV9yZXZpc2lvbl9p bmZvX3QgcmV2X2luZm87CisJYm9vbCBlbmFibGVkX3RpbWVfc3RhbXA7CisJdWludDhfdCBjb3Vu dDFfbWljcm9fYml0OworCXVpbnQ4X3QgdG90YWxfbnVtX29mX3Rhc2tzOworCXVpbnQzMl90IHRv dGFsX2ZpZm9fc2l6ZTsKKwl1aW50OF90IG1heF9udW1fb2Zfb3Blbl9kbWFzOworCXVpbnQ4X3Qg YWNjdW11bGF0ZWRfbnVtX29mX3Rhc2tzOworCXVpbnQzMl90IGFjY3VtdWxhdGVkX2ZpZm9fc2l6 ZTsKKwl1aW50OF90IGFjY3VtdWxhdGVkX251bV9vZl9vcGVuX2RtYXM7CisJdWludDhfdCBhY2N1 bXVsYXRlZF9udW1fb2ZfZGVxX3RudW1zOworI2lmZGVmIEZNX0xPV19FTkRfUkVTVFJJQ1RJT04K Kwlib29sIGxvd19lbmRfcmVzdHJpY3Rpb247CisjZW5kaWYgLyogRk1fTE9XX0VORF9SRVNUUklD VElPTiAqLworCXVpbnQzMl90IGV4Y2VwdGlvbnM7CisJYm9vbCByYW1zX2VjY19lbmFibGU7CisJ Ym9vbCBleHBsaWNpdF9lbmFibGU7CisJYm9vbCBpbnRlcm5hbF9jYWxsOworCXVpbnQzMl90IGV4 dHJhX2ZpZm9fcG9vbF9zaXplOworCXVpbnQ4X3QgZXh0cmFfdGFza3NfcG9vbF9zaXplOworCXVp bnQ4X3QgZXh0cmFfb3Blbl9kbWFzX3Bvb2xfc2l6ZTsKK307CisKK3N0cnVjdCBmbV9pbnRnX3Qg eworCS8qIFJhbSBkZWZpbmVzICovCisJdWludDMyX3QgZm1fbXVyYW1fc2l6ZTsKKwl1aW50MzJf dCBmbV9pcmFtX3NpemU7CisJdWludDMyX3QgZm1fbnVtX29mX2N0cmw7CisKKwkvKiBETUEgZGVm aW5lcyAqLworCXVpbnQzMl90IGRtYV90aHJlc2hfbWF4X2NvbW1xOworCXVpbnQzMl90IGRtYV90 aHJlc2hfbWF4X2J1ZjsKKworCS8qIFFNSSBkZWZpbmVzICovCisJdWludDMyX3QgcW1pX21heF9u dW1fb2ZfdG51bXM7CisJdWludDMyX3QgcW1pX2RlZl90bnVtc190aHJlc2g7CisKKwkvKiBCTUkg ZGVmaW5lcyAqLworCXVpbnQzMl90IGJtaV9tYXhfbnVtX29mX3Rhc2tzOworCXVpbnQzMl90IGJt aV9tYXhfbnVtX29mX2RtYXM7CisJdWludDMyX3QgYm1pX21heF9maWZvX3NpemU7CisJdWludDMy X3QgcG9ydF9tYXhfd2VpZ2h0OworCisJdWludDMyX3QgZm1fcG9ydF9udW1fb2ZfY2c7CisJdWlu dDMyX3QgbnVtX29mX3J4X3BvcnRzOworfTsKKworc3RydWN0IGZtX3QgeworLyogbG9jYWxzIGZv ciByZWNvdmVyeSAqLworCXVpbnRwdHJfdCBiYXNlX2FkZHI7CisKKy8qIHVuLW5lZWRlZCBmb3Ig cmVjb3ZlcnkgKi8KKwljaGFyIGZtX21vZHVsZV9uYW1lW01PRFVMRV9OQU1FX1NJWkVdOworCS8q IEZNIGV4Y2VwdGlvbnMgdXNlciBjYWxsYmFjayAqLworCXN0cnVjdCBmbV9pbnRyX3NyY190IGlu dHJfbW5nW0ZNX0VWX0RVTU1ZX0xBU1RdOworCisvKiBNYXN0ZXIgT25seSBwYXJhbWV0ZXJzICov CisKKy8qIGxvY2FscyBmb3IgcmVjb3ZlcnkgKi8KKwlzdHJ1Y3QgZm1hbl9mcG1fcmVncyBfX2lv bWVtICpwX2ZtX2ZwbV9yZWdzOworCXN0cnVjdCBmbWFuX2JtaV9yZWdzIF9faW9tZW0gKnBfZm1f Ym1pX3JlZ3M7CisJc3RydWN0IGZtYW5fcW1pX3JlZ3MgX19pb21lbSAqcF9mbV9xbWlfcmVnczsK KwlzdHJ1Y3QgZm1hbl9kbWFfcmVncyBfX2lvbWVtICpwX2ZtX2RtYV9yZWdzOworCXN0cnVjdCBm bWFuX3JlZ3MgX19pb21lbSAqcF9mbV9yZWdzOworCWZtX2V4Y2VwdGlvbnNfY2IgKmZfZXhjZXB0 aW9uOworCWZtX2J1c19lcnJvcl9jYiAqZl9idXNfZXJyb3I7CisJdm9pZCAqaF9hcHA7CQkvKiBB cHBsaWNhdGlvbiBoYW5kbGUgKi8KKwlzcGlubG9ja190ICpzcGlubG9jazsKKwlzdHJ1Y3QgZm1f c3RhdGVfc3RydWN0X3QgKnBfZm1fc3RhdGVfc3RydWN0OworCXVpbnQxNl90IHRudW1fYWdpbmdf cGVyaW9kOworCisJc3RydWN0IGZtYW5fY2ZnICpwX2ZtX2Rydl9wYXJhbTsKKwlzdHJ1Y3QgbXVy YW1faW5mbyAqcF9tdXJhbTsKKwkvKiBjYW0gc2VjdGlvbiBpbiBtdXJhbSAqLworCWludCBjYW1f b2Zmc2V0OworCXVpbnQzMl90IGNhbV9zaXplOworCXVpbnRwdHJfdCByZXNfYWRkcjsKKwkvKiBG aWZvIGluIE1VUkFNICovCisJaW50IGZpZm9fb2Zmc2V0OworCXVpbnQzMl90IGZpZm9fc2l6ZTsK KwlzdHJ1Y3QgZm1fZmlybXdhcmVfcGFyYW1zX3QgZmlybXdhcmU7CisJYm9vbCBmd192ZXJpZnk7 CisJYm9vbCByZXNldF9vbl9pbml0OworCXVpbnQzMl90IHVzZXJfc2V0X2V4Y2VwdGlvbnM7CisK KwlzdHJ1Y3QgZm1faW50Z190ICppbnRnOworfTsKKworI2VuZGlmIC8qIF9fRk1fSCAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fY29tbW9uLmgg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjVjMDU3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fY29tbW9uLmgKQEAgLTAsMCAr MSwzNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAg ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv ZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMg Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwor ICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29m dHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBv ciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBB TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUg Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGaWxlICAgICAgICAgIGZtX2NvbW1vbi5oCisg KiBEZXNjcmlwdGlvbiAgIEZNIGludGVybmFsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLgor ICovCisjaWZuZGVmIF9fRk1fQ09NTU9OX0gKKyNkZWZpbmUgX19GTV9DT01NT05fSAorCisjaW5j bHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgImZtX2V4dC5oIgorCisvKiBVbmlxZSBkZWZpbmVz ICovCisjZGVmaW5lIEZNX1FNSV9OT19FQ0NfRVhDRVBUSU9OUwkJLyogUDEgKi8KKyNkZWZpbmUg Rk1fQ1NJX0NGRURfTElNSVQJCQkvKiBQMSAqLworI2RlZmluZSBGTV9QRURBTlRJQ19ETUEJCQkJ LyogUDEgKi8KKyNkZWZpbmUgRk1fUU1JX05PX0RFUV9PUFRJT05TX1NVUFBPUlQJCS8qIFAxICov CisjZGVmaW5lIEZNX0hBU19UT1RBTF9ETUFTCQkJLyogUDEtUDUgKi8KKyNkZWZpbmUgRk1fREVR X1BJUEVMSU5FX1BBUkFNU19GT1JfT1AJCS8qIFAxLCBUL0IgKi8KKyNkZWZpbmUgRk1fTk9fRElT UEFUQ0hfUkFNX0VDQwkJCS8qIFAyLVA1ICovCisjZGVmaW5lIEZNX05PX1dBVENIRE9HCQkJCS8q IFA0ICovCisjZGVmaW5lIEZNX05PX1ROVU1fQUdJTkcJCQkvKiBQMi1QNSAqLworI2RlZmluZSBG TV9OT19CQUNLVVBfUE9PTFMJCQkvKiBQMi1QNSAqLworI2RlZmluZSBGTV9OT19PUF9PQlNFUlZF RF9QT09MUwkJLyogUDItUDUsIFQvQiAqLworI2RlZmluZSBGTV9OT19BRFZBTkNFRF9SQVRFX0xJ TUlURVIJCS8qIFAyLVA1ICovCisjZGVmaW5lIEZNX09QX09QRU5fRE1BX01JTl9MSU1JVAkJLyog VC9CICovCisjZGVmaW5lIEZNX05PX1JFU1RSSUNUX09OX0FDQ0VTU19SU1JDCQkvKiBUL0IgKi8K KyNkZWZpbmUgRk1fRlJBTUVfRU5EX1BBUkFNU19GT1JfT1AJCS8qIFQvQiAqLworI2RlZmluZSBG TV9RTUlfTk9fU0lOR0xFX0VDQ19FWENFUFRJT04JCS8qIFQvQiAqLworCisvKiBGTWFuIEVycmF0 YSAqLworI2RlZmluZSBGTV9SWF9QUkVBTV80X0VSUkFUQV9EVFNFQ19BMDAxCQkJLyogRHRzZWMg Ki8KKyNkZWZpbmUgRk1fR1RTX0FGVEVSX0RST1BQRURfRlJBTUVfRVJSQVRBX0RUU0VDX0EwMDQ4 MzkJLyogRHRzZWMgKi8KKyNkZWZpbmUgRk1fVFhfRklGT19DT1JSVVBUSU9OX0VSUkFUQV8xMEdN QUNfQTAwNwkJLyogVGdlYyAqLworI2RlZmluZSBGTV9FQ0NfSEFMVF9OT19TWU5DX0VSUkFUQV8x MEdNQUNfQTAwOAkJCS8qIFAyLVA1ICovCisjZGVmaW5lIEZNX0dSU19FUlJBVEFfRFRTRUNfQTAw MgkJCQkvKiBQNDA4MCAqLworI2RlZmluZSBGTV9CQURfVFhfVFNfSU5fQl8yX0JfRVJSQVRBX0RU U0VDX0EwMDMJCS8qIFA0MDgwICovCisjZGVmaW5lIEZNX0dUU19FUlJBVEFfRFRTRUNfQTAwNAkJ CQkvKiBQNDA4MCAqLworI2RlZmluZSBGTV9HVFNfQUZURVJfTUFDX0FCT1JURURfRlJBTUVfRVJS QVRBX0RUU0VDX0EwMDEyCS8qIFA0MDgwICovCisjZGVmaW5lIEZNX0dUU19VTkRFUlJVTl9FUlJB VEFfRFRTRUNfQTAwMTQJCQkvKiBQMi1QNSAqLworI2RlZmluZSBGTV9UWF9MT0NLVVBfRVJSQVRB X0RUU0VDNgkJCQkvKiBQNDA4MCAqLworI2RlZmluZSBGTV9VQ09ERV9OT1RfUkVTRVRfRVJSQVRB X0JVR1pJTExBNjE3MwkJCS8qIFAyLVA1ICovCisjZGVmaW5lIEZNXzEwR19SRU1fTl9MQ0xfRkxU X0VYXzEwR01BQ19FUlJBVEFfU1cwMDUJCS8qIFA0MDgwICovCisjZGVmaW5lIEZNX1RYX0VDQ19G Uk1TX0VSUkFUQV8xMEdNQUNfQTAwNAkJCS8qIFAyLVA1ICovCisjZGVmaW5lIEZNX0xFTl9DSEVD S19FUlJBVEFfRk1BTl9TVzAwMgkJCQkvKiBQMi1QNSwgVC9CICovCisjZGVmaW5lIEZNX1dST05H X1JFU0VUX1ZBTFVFU19FUlJBVEFfRk1BTl9BMDA1MTI3CQkvKiBUL0IgKi8KKyNkZWZpbmUgRk1f UlhfRklGT19DT1JSVVBUX0VSUkFUQV8xMEdNQUNfQTAwNjMyMAkJLyogbUVNQUMgKi8KKyNkZWZp bmUgRk1fSEVBVllfVFJBRkZJQ19TRVFVRU5DRVJfSEFOR19FUlJBVEFfRk1BTl9BMDA2OTgxICAg LyogVDQvQjQgcmV2MSAqLworI2RlZmluZSBGTV9BSURfTU9ERV9OT19UTlVNX1NXMDA1CisvKiBy ZWZlciB0byBwZG0gVEtUMDY4Nzk0IC0gb25seSBzdXBwb3J0IG9mIHBvcnRfaWQgb24gYWlkIC0g VC9CICovCisjZGVmaW5lIEZNX0VSUk9SX1ZTUF9OT19NQVRDSF9TVzAwNgorLyogcmVmZXIgdG8g cGRtIFRLVDE3NDMwNCAtIG5vIG1hdGNoIGJldHdlZW4gZXJyb3JRIGFuZCBWU1AgLSBUL0IgKi8K KworI2RlZmluZSBDTFNfUExBTl9OVU1fUEVSX0dSUCAgICAgICAgICAgICAgICAgICAgICAgIDgK KworLyogbGlzdF9vYmplY3QKKyAqIE1hY3JvIHRvIGdldCB0aGUgc3RydWN0IChvYmplY3QpIGZv ciB0aGlzIGVudHJ5LgorICogdHlwZSAgIC0gVGhlIHR5cGUgb2YgdGhlIHN0cnVjdCAob2JqZWN0 KSB0aGlzIGxpc3QKKyAqIGlzIGVtYmVkZGVkIGluLgorICogbWVtYmVyIC0gVGhlIG5hbWUgb2Yg dGhlIHN0cnVjdCBsaXN0X2hlYWQgb2JqZWN0CisgKiB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqIFJl dHVybiAgICAgICAgVGhlIHN0cnVjdHVyZSBwb2ludGVyIGZvciB0aGlzIGVudHJ5LgorICovCisj ZGVmaW5lIG1lbWJlcl9vZmZzZXQodHlwZSwgbWVtYmVyKSAoUFRSX1RPX1VJTlQoJigodHlwZSAq KTApLT5tZW1iZXIpKQorI2RlZmluZSBsaXN0X29iamVjdChwX2xpc3QsIHR5cGUsIG1lbWJlcikg XAorKCh0eXBlICopKChjaGFyICopKHBfbGlzdCkgLSBtZW1iZXJfb2Zmc2V0KHR5cGUsIG1lbWJl cikpKQorCisvKiBFbnVtIGZvciBpbnRlci1tb2R1bGUgaW50ZXJydXB0cyByZWdpc3RyYXRpb24g Ki8KK2VudW0gZm1fZXZlbnRfbW9kdWxlcyB7CisJRk1fTU9EX1BSUyA9IDAsCQkvKiBQYXJzZXIg ZXZlbnQgKi8KKwlGTV9NT0RfTUFDLAkJLyogTUFDIGV2ZW50ICovCisJRk1fTU9EX1RNUiwJCS8q IFRpbWVyIGV2ZW50ICovCisJRk1fTU9EX0ZNQU5fQ1RSTCwJLyogRk1BTiBDb250cm9sbGVyICBU aW1lciBldmVudCAqLworCUZNX01PRF9EVU1NWV9MQVNUCit9OworCisvKiBFbnVtIGZvciBpbnRl cnJ1cHRzIHR5cGVzICovCitlbnVtIGZtX2ludHJfdHlwZSB7CisJRk1fSU5UUl9UWVBFX0VSUiwK KwlGTV9JTlRSX1RZUEVfTk9STUFMCit9OworCisvKiBFbnVtIGZvciBpbnRlci1tb2R1bGUgaW50 ZXJydXB0cyByZWdpc3RyYXRpb24gKi8KK2VudW0gZm1faW50ZXJfbW9kdWxlX2V2ZW50IHsKKwlG TV9FVl9QUlMgPSAwLAkJLyogUGFyc2VyIGV2ZW50ICovCisJRk1fRVZfRVJSX1BSUywJCS8qIFBh cnNlciBlcnJvciBldmVudCAqLworCUZNX0VWX0VSUl9NQUM4LAkJLyogTUFDIDggZXJyb3IgZXZl bnQgKi8KKwlGTV9FVl9FUlJfTUFDOSwJCS8qIE1BQyA5IGVycm9yIGV2ZW50ICovCisJRk1fRVZf RVJSX01BQzAsCQkvKiBNQUMgMCBlcnJvciBldmVudCAqLworCUZNX0VWX0VSUl9NQUMxLAkJLyog TUFDIDEgZXJyb3IgZXZlbnQgKi8KKwlGTV9FVl9FUlJfTUFDMiwJCS8qIE1BQyAyIGVycm9yIGV2 ZW50ICovCisJRk1fRVZfRVJSX01BQzMsCQkvKiBNQUMgMyBlcnJvciBldmVudCAqLworCUZNX0VW X0VSUl9NQUM0LAkJLyogTUFDIDQgZXJyb3IgZXZlbnQgKi8KKwlGTV9FVl9FUlJfTUFDNSwJCS8q IE1BQyA1IGVycm9yIGV2ZW50ICovCisJRk1fRVZfRVJSX01BQzYsCQkvKiBNQUMgNiBlcnJvciBl dmVudCAqLworCUZNX0VWX0VSUl9NQUM3LAkJLyogTUFDIDcgZXJyb3IgZXZlbnQgKi8KKwlGTV9F Vl9UTVIsCQkvKiBUaW1lciBldmVudCAqLworCUZNX0VWX01BQzgsCQkvKiBNQUMgOCBldmVudCAo TWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX01BQzksCQkvKiBNQUMgOSBldmVudCAo TWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX01BQzAsCQkvKiBNQUMgMCBldmVudCAo TWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX01BQzEsCQkvKiBNQUMgMSBldmVudCAo TWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX01BQzIsCQkvKiBNQUMgMiAoTWFnaWMg cGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX01BQzMsCQkvKiBNQUMgMyAoTWFnaWMgcGFja2V0 IGRldGVjdGlvbikqLworCUZNX0VWX01BQzQsCQkvKiBNQUMgNCAoTWFnaWMgcGFja2V0IGRldGVj dGlvbikqLworCUZNX0VWX01BQzUsCQkvKiBNQUMgNSAoTWFnaWMgcGFja2V0IGRldGVjdGlvbikq LworCUZNX0VWX01BQzYsCQkvKiBNQUMgNiAoTWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZN X0VWX01BQzcsCQkvKiBNQUMgNyAoTWFnaWMgcGFja2V0IGRldGVjdGlvbikqLworCUZNX0VWX0ZN QU5fQ1RSTF8wLAkvKiBGbWFuIGNvbnRyb2xsZXIgZXZlbnQgMCAqLworCUZNX0VWX0ZNQU5fQ1RS TF8xLAkvKiBGbWFuIGNvbnRyb2xsZXIgZXZlbnQgMSAqLworCUZNX0VWX0ZNQU5fQ1RSTF8yLAkv KiBGbWFuIGNvbnRyb2xsZXIgZXZlbnQgMiAqLworCUZNX0VWX0ZNQU5fQ1RSTF8zLAkvKiBGbWFu IGNvbnRyb2xsZXIgZXZlbnQgMyAqLworCUZNX0VWX0RVTU1ZX0xBU1QKK307CisKKy8qIEZNIElQ IEJMT0NLIHZlcnNpb25zICovCisjZGVmaW5lIEZNX0lQX0JMT0NLX1AxCQkJNAorI2RlZmluZSBG TV9JUF9CTE9DS19QMl9QM19QNQkJMworI2RlZmluZSBGTV9JUF9CTE9DS19QNAkJCTIKKyNkZWZp bmUgRk1fSVBfQkxPQ0tfQl9UCQkJNgorCisvKmZvciBVTkRFUl9DT05TVFJVQ1RJT05fRk1fUk1V X1VTRV9TRUMgaXRzIGRlZmluZWQgaW4gZm1fZXh0LmgqLwordHlwZWRlZiB1aW50MzJfdCBmbV9m bWFuX2N0cmxfdDsKKworI2RlZmluZSBGUE1fUE9SVF9GTV9DVEwxICAgICAgICAgICAgICAgIDB4 MDAwMDAwMDEKKyNkZWZpbmUgRlBNX1BPUlRfRk1fQ1RMMiAgICAgICAgICAgICAgICAweDAwMDAw MDAyCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBUUllfTE9DSyhzcGlubG9ja190ICpzcGlubG9jaywg dm9sYXRpbGUgYm9vbCAqcF9mbGFnKQoreworCXVuc2lnbmVkIGxvbmcgaW50X2ZsYWdzOworCisJ aWYgKHNwaW5sb2NrKQorCQlzcGluX2xvY2tfaXJxc2F2ZShzcGlubG9jaywgaW50X2ZsYWdzKTsK KwllbHNlCisJCWxvY2FsX2lycV9zYXZlKGludF9mbGFncyk7CisKKwlpZiAoKnBfZmxhZykgewor CQlpZiAoc3BpbmxvY2spCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNwaW5sb2NrLCBpbnRf ZmxhZ3MpOworCQllbHNlCisJCQlsb2NhbF9pcnFfcmVzdG9yZShpbnRfZmxhZ3MpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCSpwX2ZsYWcgPSB0cnVlOworCisJaWYgKHNwaW5sb2NrKQorCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKHNwaW5sb2NrLCBpbnRfZmxhZ3MpOworCWVsc2UKKwkJbG9jYWxf aXJxX3Jlc3RvcmUoaW50X2ZsYWdzKTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFJF TEVBU0VfTE9DSyhfZmxhZykgKF9mbGFnID0gZmFsc2UpCisKKy8qIERlZmluZXMgdXNlZCBmb3Ig bWFuaXB1bGF0aW9uIENDIGFuZCBCTUkgKi8KKyNkZWZpbmUgSU5URVJOQUxfQ09OVEVYVF9PRkZT RVQgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgT0ZGU0VUX09GX1BSICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgTlVNX09GX1RBU0tTICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgT0ZGU0VUX09GX0RB VEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSFdfUE9SVF9J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgRk1fUkVW ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR0VU X05JQV9GUE5FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUg R0VUX05JQV9QTkROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZp bmUgTlVNX09GX0VYVFJBX1RBU0tTICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNk ZWZpbmUgRElTQ0FSRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAK KworI2RlZmluZSBVUERBVEVfTklBX1BORU4gICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAw MDAwMAorI2RlZmluZSBVUERBVEVfUFNPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0 MDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX1BORE4gICAgICAgICAgICAgICAgICAgICAgICAg MHgyMDAwMDAwMAorI2RlZmluZSBVUERBVEVfRk1GUF9QUkNfV0lUSF9PTkVfUklTQ19PTkxZICAg ICAgMHgxMDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0ZFTkUgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0NNTkUgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0ZQTkUgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMTAwMDAwMAorCisvKiBEZWZpbmVzIHVzZWQgZm9yIG1hbmlwdWxhdGlv biBDQyBhbmQgQ0MgKi8KKyNkZWZpbmUgVVBEQVRFX05JQV9FTlFfV0lUSE9VVF9ETUEgICAgICAg ICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBNT0RVTEVfTkFNRV9TSVpFICAgICAgICAzMAor I2RlZmluZSBEVU1NWV9QT1JUX0lEICAgICAgICAgICAwCisKKyNkZWZpbmUgRk1fTElPRE5fT0ZG U0VUX01BU0sgICAgMHgzRkYKKworLyogRGVzY3JpcHRpb24gICAgICAgIENUUkwgUGFyYW1ldGVy cyBQYWdlIGRlZmluZXMgKi8KKyNkZWZpbmUgRk1fQ1RMX1BBUkFNU19QQUdFX09QX0ZJWF9FTiAg ICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRk1fQ1RMX1BBUkFNU19QQUdFX0FMV0FZU19P TiAgICAgICAgICAgIDB4MDAwMDAxMDAKKworI2RlZmluZSBGTV9DVExfUEFSQU1TX1BBR0VfRVJS T1JfVlNQX01BU0sgICAgICAgMHgwMDAwMDAzZgorCisjZGVmaW5lIEJNSV9NQVhfRklGT19TSVpF ICAgICAgICAgICAgICAgICAgIChGTV9NVVJBTV9TSVpFKQorI2RlZmluZSBCTUlfRklGT19VTklU UyAgICAgICAgICAgICAgICAgICAgICAweDEwMAorCitzdHJ1Y3QgZm1faW50cl9zcmNfdCB7CisJ dm9pZCAoKmZfaXNyKSh2b2lkICpoX3NyY19hcmcpOworCXZvaWQgKmhfc3JjX2hhbmRsZTsKK307 CisKKyNkZWZpbmUgSUxMRUdBTF9IRFJfTlVNICAgICAgICAgICAgICAgICAgICAgMHhGRgorI2Rl ZmluZSBOT19IRFJfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICBGTV9QQ0RfUFJTX05VTV9P Rl9IRFJTCisKKyNkZWZpbmUgSVNfUFJJVkFURV9IRUFERVIoaGRyKQkoKChoZHIpID09IEhFQURF Ul9UWVBFX1VTRVJfREVGSU5FRF9TSElNMSkgfHwgXAorCQkJCSAoKGhkcikgPT0gSEVBREVSX1RZ UEVfVVNFUl9ERUZJTkVEX1NISU0yKSkKKworI2RlZmluZSBHRVRfUFJTX0hEUl9OVU0obnVtLCBo ZHIpIGRvIHtcCitzd2l0Y2ggKGhkcikgeyBcCitjYXNlIChIRUFERVJfVFlQRV9FVEgpOlwKKwlu dW0gPSAwOyAgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfTExDX1NOQVApOlwKKwludW0g PSAxOyAgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfVkxBTik6XAorCW51bSA9IDI7ICBi cmVhazsgICBcCitjYXNlIChIRUFERVJfVFlQRV9QUFBPRSk6XAorCW51bSA9IDM7ICBicmVhazsg ICBcCitjYXNlIChIRUFERVJfVFlQRV9QUFApOlwKKwludW0gPSAzOyAgYnJlYWs7ICAgXAorY2Fz ZSAoSEVBREVSX1RZUEVfTVBMUyk6XAorCW51bSA9IDQ7ICBicmVhazsgICBcCitjYXNlIChIRUFE RVJfVFlQRV9JUFY0KTpcCisJbnVtID0gNTsgIGJyZWFrOyAgIFwKK2Nhc2UgKEhFQURFUl9UWVBF X0lQVjYpOlwKKwludW0gPSA2OyAgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfR1JFKTpc CisJbnVtID0gNzsgIGJyZWFrOyAgIFwKK2Nhc2UgKEhFQURFUl9UWVBFX01JTkVOQ0FQKTpcCisJ bnVtID0gODsgIGJyZWFrOyAgIFwKK2Nhc2UgKEhFQURFUl9UWVBFX1VTRVJfREVGSU5FRF9MMyk6 XAorCW51bSA9IDk7ICBicmVhazsgICBcCitjYXNlIChIRUFERVJfVFlQRV9UQ1ApOlwKKwludW0g PSAxMDsgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfVURQKTpcCisJbnVtID0gMTE7IGJy ZWFrOyAgIFwKK2Nhc2UgKEhFQURFUl9UWVBFX0lQU0VDX0FIKTogXAorY2FzZSAoSEVBREVSX1RZ UEVfSVBTRUNfRVNQKTpcCisJbnVtID0gMTI7IGJyZWFrOyAgIFwKK2Nhc2UgKEhFQURFUl9UWVBF X1NDVFApOlwKKwludW0gPSAxMzsgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfRENDUCk6 XAorCW51bSA9IDE0OyBicmVhazsgICBcCitjYXNlIChIRUFERVJfVFlQRV9VU0VSX0RFRklORURf TDQpOlwKKwludW0gPSAxNTsgYnJlYWs7ICAgXAorY2FzZSAoSEVBREVSX1RZUEVfVVNFUl9ERUZJ TkVEX1NISU0xKTogICAgICAgICAgICAgICAgICBcCitjYXNlIChIRUFERVJfVFlQRV9VU0VSX0RF RklORURfU0hJTTIpOiAgICAgICAgICAgICAgICAgIFwKKwludW0gPSBOT19IRFJfTlVNOyBicmVh azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZGVmYXVsdDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJfZXJyKCJVbnN1cHBvcnRlZCBo ZWFkZXIgZm9yIHBhcnNlclxuIik7XAorCW51bSA9IElMTEVHQUxfSERSX05VTTsgYnJlYWs7ICAg ICAgICAgICAgICAgICAgICAgICBcCit9IFwKK30gd2hpbGUgKDApCisKKy8qIEZ1bmN0aW9uICAg ICAgZm1fcmVnaXN0ZXJfaW50cgorICogRGVzY3JpcHRpb24gICBVc2VkIHRvIHJlZ2lzdGVyCisg KiBhbiBpbnRlci1tb2R1bGUgZXZlbnQgaGFuZGxlciB0byBiZSBwcm9jZXNzZWQgYnkgRk0KKyAq IFBhcmFtW2luXSAgICAgaF9mbSAgICAgICAgICAgIEEgaGFuZGxlIHRvIGFuIEZNIE1vZHVsZS4K KyAqIFBhcmFtW2luXSAgICAgbW9kICAgICAgICAgICAgIFRoZSBtb2R1bGUgdGhhdCBjYXVzZXMg dGhlIGV2ZW50CisgKiBQYXJhbVtpbl0gICAgIG1vZF9pZCAgICAgICAgICAgTW9kdWxlIGlkIC0g aWYgbW9yZSB0aGFuIDEgaW5zdGFuY2Ugb2YgdGhpcworICoJCQkJbW9kZSBleGlzdHMsMCBvdGhl cndpc2UuCisgKiBQYXJhbVtpbl0gICAgIGludHJfdHlwZSAgICAgICAgSW50ZXJydXB0IHR5cGUg KGVycm9yL25vcm1hbCkgc2VsZWN0aW9uLgorICogUGFyYW1baW5dICAgICBmX2lzciAgICAgICAg ICAgVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBQYXJhbVtpbl0gICAgIGhfc3Jj X2FyZyAgICAgICAgICAgQXJndW1lbnQgdG8gYmUgcGFzc2VkIHRvIGZfaXNyLgorICogUmV0dXJu ICAgICAgICBOb25lLgorICovCit2b2lkIGZtX3JlZ2lzdGVyX2ludHIoc3RydWN0IGZtX3QgKnBf Zm0sCisJCSAgICAgIGVudW0gZm1fZXZlbnRfbW9kdWxlcyBtb2QsCisJCSAgICAgIHVpbnQ4X3Qg bW9kX2lkLAorCQkgICAgICBlbnVtIGZtX2ludHJfdHlwZSBpbnRyX3R5cGUsCisJCSAgICAgIHZv aWQgKCpmX2lzcikodm9pZCAqaF9zcmNfYXJnKSwgdm9pZCAqaF9zcmNfYXJnKTsKKworLyogRnVu Y3Rpb24gICAgICBmbV91bnJlZ2lzdGVyX2ludHIKKyAqIERlc2NyaXB0aW9uICAgVXNlZCB0byB1 bi1yZWdpc3RlciBhbgorICogaW50ZXItbW9kdWxlIGV2ZW50IGhhbmRsZXIgdGhhdCB3YXMgcHJv Y2Vzc2VkIGJ5IEZNCisgKiBQYXJhbVtpbl0gICAgIGhfZm0gICAgICAgICAgICBBIGhhbmRsZSB0 byBhbiBGTSBNb2R1bGUuCisgKiBQYXJhbVtpbl0gICAgIG1vZCAgICAgICAgICAgICBUaGUgbW9k dWxlIHRoYXQgY2F1c2VzIHRoZSBldmVudAorICogUGFyYW1baW5dICAgICBtb2RfaWQgICAgICAg ICAgIE1vZHVsZSBpZCAtIGlmIG1vcmUgdGhhbiAxIGluc3RhbmNlIG9mIHRoaXMKKyAqCQkJCW1v ZGUgZXhpc3RzLDAgb3RoZXJ3aXNlLgorICogUGFyYW1baW5dICAgICBpbnRyX3R5cGUgICAgICAg IEludGVycnVwdCB0eXBlIChlcnJvci9ub3JtYWwpIHNlbGVjdGlvbi4KKyAqIFJldHVybiAgICAg ICAgTm9uZS4KKyAqLwordm9pZCBmbV91bnJlZ2lzdGVyX2ludHIoc3RydWN0IGZtX3QgKnBfZm0s CisJCQllbnVtIGZtX2V2ZW50X21vZHVsZXMgbW9kLAorCQkJdWludDhfdCBtb2RfaWQsIGVudW0g Zm1faW50cl90eXBlIGludHJfdHlwZSk7CisKKy8qIERlc2NyaXB0aW9uICAgZW51bSBmb3IgZGVm aW5pbmcgTUFDIHR5cGVzICovCitlbnVtIGZtX21hY190eXBlIHsKKwlGTV9NQUNfMTBHID0gMCwJ ICAgIC8qIDEwRyBNQUMgKi8KKwlGTV9NQUNfMUcJICAgIC8qIDFHIE1BQyAqLworfTsKKworLyog RnVuY3Rpb24gICAgICBmbV9nZXRfbXVyYW1fcG9pbnRlcgorICogRGVzY3JpcHRpb24gICBHZXQg dGhlIHBvaW50ZXIgb2YgdGhlIE1VUkFNIGZyb20gdGhlIEZNIG1vZHVsZQorICogUGFyYW1baW5d ICAgICBoX2ZtICAgICAgICAgICAgQSBoYW5kbGUgdG8gYW4gRk0gTW9kdWxlLgorICogUmV0dXJu ICAgICAgICBNVVJBTSBtb2R1bGUgcG9pbnRlci4KKyAqLworc3RydWN0IG11cmFtX2luZm8gKmZt X2dldF9tdXJhbV9wb2ludGVyKHN0cnVjdCBmbV90ICpwX2ZtKTsKKworLyogRnVuY3Rpb24gICAg ICBmbV9nZXRfcGh5c2ljYWxfbXVyYW1fYmFzZQorICogRGVzY3JpcHRpb24gICBHZXQgdGhlIHBo eXNpY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgTVVSQU0gZnJvbSB0aGUgRk0gbW9kdWxlCisgKiBQ YXJhbVtpbl0gICAgIGhfZm0gICAgICAgICAgICBBIGhhbmRsZSB0byBhbiBGTSBNb2R1bGUuCisg KiBQYXJhbVtpbl0gICAgIGZtX3BoeXNfYWRkciAgICAgIFBoeXNpY2FsIE1VUkFNIGJhc2UKKyAq IFJldHVybiAgICAgICAgUGh5c2ljYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIGZtX2dldF9w aHlzaWNhbF9tdXJhbV9iYXNlKHN0cnVjdCBmbV90ICpwX2ZtLAorCQkJCXN0cnVjdCBmbV9waHlz X2FkZHJfdCAqZm1fcGh5c19hZGRyKTsKKworLyogRnVuY3Rpb24gICAgICBmbV9nZXRfY2xvY2tf ZnJlcQorICogRGVzY3JpcHRpb24gICBVc2VkIGJ5IE1BQyBkcml2ZXIgdG8gZ2V0IHRoZSBGTSBj bG9jayBmcmVxdWVuY3kKKyAqIFBhcmFtW2luXSAgICAgaF9mbSAgICAgICAgICAgIEEgaGFuZGxl IHRvIGFuIEZNIE1vZHVsZS4KKyAqIFJldHVybiAgICAgICAgY2xvY2stZnJlcSBvbiBzdWNjZXNz OyAwIG90aGVyd2lzZS4KKyAqIENhdXRpb25zICAgICAgQWxsb3dlZCBvbmx5IGZvbGxvd2luZyBm bV9pbml0KCkuCisgKi8KK3VpbnQxNl90IGZtX2dldF9jbG9ja19mcmVxKHN0cnVjdCBmbV90ICpw X2ZtKTsKKworLypGdW5jdGlvbiAgICAgIGZtX2dldF9pZAorICogRGVzY3JpcHRpb24gICBVc2Vk IGJ5IFBDRCBkcml2ZXIgdG8gcmVhZCByaGUgRk0gaWQKKyAqIFBhcmFtW2luXSAgICAgaF9mbSAg ICAgICAgICAgIEEgaGFuZGxlIHRvIGFuIEZNIE1vZHVsZS4KKyAqIFJldHVybiAgICAgICAgMCBv biBzdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqIENhdXRpb25zICAgICAgQWxsb3dl ZCBvbmx5IGZvbGxvd2luZyBmbV9pbml0KCkuCisgKi8KK3VpbnQ4X3QgZm1fZ2V0X2lkKHN0cnVj dCBmbV90ICpwX2ZtKTsKKworaW50IGZtX3NldF9udW1fb2Zfb3Blbl9kbWFzKHN0cnVjdCBmbV90 ICpwX2ZtLAorCQkJICAgIHVpbnQ4X3QgcG9ydF9pZCwKKwkJCSAgICB1aW50OF90ICpwX251bV9v Zl9vcGVuX2RtYXMsCisJCQkgICAgdWludDhfdCAqcF9udW1fb2ZfZXh0cmFfb3Blbl9kbWFzLAor CQkJICAgIGJvb2wgaW5pdGlhbF9jb25maWcpOworaW50IGZtX3NldF9udW1fb2ZfdGFza3Moc3Ry dWN0IGZtX3QgKnBfZm0sCisJCQl1aW50OF90IHBvcnRfaWQsCisJCQl1aW50OF90ICpwX251bV9v Zl90YXNrcywKKwkJCXVpbnQ4X3QgKnBfbnVtX29mX2V4dHJhX3Rhc2tzLAorCQkJYm9vbCBpbml0 aWFsX2NvbmZpZyk7CitpbnQgZm1fc2V0X3NpemVfb2ZfZmlmbyhzdHJ1Y3QgZm1fdCAqcF9mbSwK KwkJCXVpbnQ4X3QgcG9ydF9pZCwKKwkJCXVpbnQzMl90ICpwX3NpemVfb2ZfZmlmbywKKwkJCXVp bnQzMl90ICpwX2V4dHJhX3NpemVfb2ZfZmlmbywKKwkJCWJvb2wgaW5pdGlhbF9jb25maWcpOwor Cit1aW50MzJfdCBmbV9nZXRfYm1pX21heF9maWZvX3NpemUoc3RydWN0IGZtX3QgKnBfZm0pOwor c3RydWN0IG51bV9vZl9wb3J0c19pbmZvX3QgKmZtX2dldF9udW1fb2ZfcG9ydHMoc3RydWN0IGZt X3QgKnBfZm0pOworCisjZW5kaWYgLyogX19GTV9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fZHJ2LmMgYi9kcml2ZXJzL25ldC9l dGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yYzc4ODI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvZnJlZXNjYWxlL2ZtYW4vZm1fZHJ2LmMKQEAgLTAsMCArMSw4MjcgQEAKKy8qCisgKiBDb3B5 cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl ICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFu eQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM TCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9y dC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf YWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcWUuaD4J CS8qIEZvciBzdHJ1Y3QgcWVfZmlybXdhcmUgKi8KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5o PgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4JCS8qIEZvciBmaWxlIGFjY2VzcyBtYXNrICovCisj aW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKy8qIEludGVybmFsIHNlcnZpY2VzICovCisjaW5j bHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgImZtX2V4dC5oIgorI2luY2x1ZGUgImZtX2Rydi5o IgorI2luY2x1ZGUgImZtX211cmFtX2V4dC5oIgorCisvKiBCb290YXJnIHVzZWQgdG8gb3ZlcnJp ZGUgdGhlIEtjb25maWcgRlNMX0ZNX01BWF9GUkFNRV9TSVpFIHZhbHVlICovCisjZGVmaW5lIEZT TF9GTV9NQVhfRlJNX0JPT1RBUkcgICAgICJmc2xfZm1fbWF4X2ZybSIKKworLyogQm9vdGFyZyB1 c2VkIHRvIG92ZXJyaWRlIEZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTSBLY29uZmlnIHZhbHVlICov CisjZGVmaW5lIEZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTV9CT09UQVJHICAiZnNsX2ZtX3J4X2V4 dHJhX2hlYWRyb29tIgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlIGZvciB0aGUgZnNs X2ZtX3J4X2V4dHJhX2hlYWRyb29tIGJvb3RhcmcgKi8KKyNkZWZpbmUgRlNMX0ZNX1JYX0VYVFJB X0hFQURST09NX01JTiAxNgorI2RlZmluZSBGU0xfRk1fUlhfRVhUUkFfSEVBRFJPT01fTUFYIDM4 NAorCisvKiBNYXggZnJhbWUgc2l6ZSwgYWNyb3NzIGFsbCBpbnRlcmZhY2VzLgorICogQ29uZmln dXJhYmxlIGZyb20gS2NvbmZpZyBvciBib290YXJncywgdG8gYXZvaWQgYWxsb2NhdGluZyBvdmVy c2l6ZWQKKyAqIChzb2NrZXQpIGJ1ZmZlcnMgd2hlbiBub3QgdXNpbmcganVtYm8gZnJhbWVzLgor ICogTXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIG5ldHdvcmsgTVRVLCBi dXQgc21hbGwgZW5vdWdoCisgKiB0byBhdm9pZCB3YXN0aW5nIHNrYiBtZW1vcnkuCisgKgorICog Q291bGQgYmUgb3ZlcnJpZGRlbiBvbmNlLCBhdCBib290LXRpbWUsIHZpYSB0aGUKKyAqIGZtX3Nl dF9tYXhfZnJtKCkgY2FsbGJhY2suCisgKi8KK2ludCBmc2xfZm1fbWF4X2ZybSA9IENPTkZJR19G U0xfRk1fTUFYX0ZSQU1FX1NJWkU7CisKKy8qIEV4dHJhIGhlYWRyb29tIGZvciBSeCBidWZmZXJz LgorICogRk1hbiBpcyBpbnN0cnVjdGVkIHRvIGFsbG9jYXRlLCBvbiB0aGUgUnggcGF0aCwgdGhp cyBhbW91bnQgb2YKKyAqIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBkYXRhIGJ1ZmZlciwg YmVzaWRlIHRoZSBEUEEgcHJpdmF0ZQorICogZGF0YSBhcmVhIGFuZCB0aGUgSUMgZmllbGRzLgor ICogRG9lcyBub3QgaW1wYWN0IFR4IGJ1ZmZlciBsYXlvdXQuCisgKiBDb25maWd1cmFibGUgZnJv bSBLY29uZmlnIG9yIGJvb3RhcmdzLiBaZXJvIGJ5IGRlZmF1bHQsIGl0J3MgbmVlZGVkIG9uCisg KiBwYXJ0aWN1bGFyIGZvcndhcmRpbmcgc2NlbmFyaW9zIHRoYXQgYWRkIGV4dHJhIGhlYWRlcnMg dG8gdGhlCisgKiBmb3J3YXJkZWQgZnJhbWUuCisgKi8KK2ludCBmc2xfZm1fcnhfZXh0cmFfaGVh ZHJvb20gPSBDT05GSUdfRlNMX0ZNX1JYX0VYVFJBX0hFQURST09NOworCitzdGF0aWMgc3RydWN0 IGZtX2RydnNfdCBmbV9kcnZzOworCit1MTYgZm1fZ2V0X21heF9mcm0odm9pZCkKK3sKKwlyZXR1 cm4gZnNsX2ZtX21heF9mcm07Cit9CitFWFBPUlRfU1lNQk9MKGZtX2dldF9tYXhfZnJtKTsKKwor aW50IGZtX2dldF9yeF9leHRyYV9oZWFkcm9vbSh2b2lkKQoreworCXJldHVybiBBTElHTihmc2xf Zm1fcnhfZXh0cmFfaGVhZHJvb20sIDE2KTsKK30KK0VYUE9SVF9TWU1CT0woZm1fZ2V0X3J4X2V4 dHJhX2hlYWRyb29tKTsKKworc3RhdGljIGludCBfX2luaXQgZm1fc2V0X21heF9mcm0oY2hhciAq c3RyKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gZ2V0X29wdGlvbigmc3RyLCAmZnNsX2Zt X21heF9mcm0pOworCWlmIChyZXQgIT0gMSkgeworCQkvKiBUaGlzIHdpbGwgb25seSB3b3JrIGlm IENPTkZJR19FQVJMWV9QUklOVEsgaXMgY29tcGlsZWQgaW4sCisJCSAqIGFuZCBzb21ldGhpbmcg bGlrZSAiZWFybHlwcmludGs9c2VyaWFsLHVhcnQwLDExNTIwMCIgaXMKKwkJICogc3BlY2lmaWVk IGluIHRoZSBib290YXJncy4KKwkJICovCisJCXByX2VycigiTm8gc3VpdGFibGUgJXM9PGludD4g cHJvcCBpbiBib290YXJnczsgd2lsbCB1c2UgdGhlIGRlZmF1bHQgRlNMX0ZNX01BWF9GUkFNRV9T SVpFICglZCkgZnJvbSBLY29uZmlnLlxuIiwKKwkJICAgICAgIEZTTF9GTV9NQVhfRlJNX0JPT1RB UkcsCisJCSAgICAgICBDT05GSUdfRlNMX0ZNX01BWF9GUkFNRV9TSVpFKTsKKworCQlmc2xfZm1f bWF4X2ZybSA9IENPTkZJR19GU0xfRk1fTUFYX0ZSQU1FX1NJWkU7CisJCXJldHVybiAxOworCX0K KworCS8qIERvbid0IGFsbG93IGludmFsaWQgYm9vdGFyZ3M7IGZhbGxiYWNrIHRvIHRoZSBLY29u ZmlnIHZhbHVlICovCisJaWYgKGZzbF9mbV9tYXhfZnJtIDwgNjQgfHwgZnNsX2ZtX21heF9mcm0g PiA5NjAwKSB7CisJCXByX2VycigiSW52YWxpZCAlcz0lZCBpbiBib290YXJncywgdmFsaWQgcmFu Z2UgaXMgNjQtOTYwMC4gRmFsbGluZyBiYWNrIHRvIHRoZSBGU0xfRk1fTUFYX0ZSQU1FX1NJWkUg KCVkKSBmcm9tIEtjb25maWcuXG4iLAorCQkgICAgICAgRlNMX0ZNX01BWF9GUk1fQk9PVEFSRywg ZnNsX2ZtX21heF9mcm0sCisJCSAgICAgICBDT05GSUdfRlNMX0ZNX01BWF9GUkFNRV9TSVpFKTsK KworCQlmc2xfZm1fbWF4X2ZybSA9IENPTkZJR19GU0xfRk1fTUFYX0ZSQU1FX1NJWkU7CisJCXJl dHVybiAxOworCX0KKworCXByX2luZm8oIlVzaW5nIGZzbF9mbV9tYXhfZnJtPSVkIGZyb20gYm9v dGFyZ3NcbiIsIGZzbF9mbV9tYXhfZnJtKTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0o RlNMX0ZNX01BWF9GUk1fQk9PVEFSRywgZm1fc2V0X21heF9mcm0pOworCitzdGF0aWMgaW50IF9f aW5pdCBmbV9zZXRfcnhfZXh0cmFfaGVhZHJvb20oY2hhciAqc3RyKQoreworCWludCByZXQ7CisK KwlyZXQgPSBnZXRfb3B0aW9uKCZzdHIsICZmc2xfZm1fcnhfZXh0cmFfaGVhZHJvb20pOworCisJ aWYgKHJldCAhPSAxKSB7CisJCXByX2VycigiTm8gc3VpdGFibGUgJXM9PGludD4gcHJvcCBpbiBi b290YXJnczsgd2lsbCB1c2UgdGhlIGRlZmF1bHQgRlNMX0ZNX1JYX0VYVFJBX0hFQURST09NICgl ZCkgZnJvbSBLY29uZmlnLlxuIiwKKwkJICAgICAgIEZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTV9C T09UQVJHLAorCQkgICAgICAgQ09ORklHX0ZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTSk7CisJCWZz bF9mbV9yeF9leHRyYV9oZWFkcm9vbSA9IENPTkZJR19GU0xfRk1fUlhfRVhUUkFfSEVBRFJPT007 CisKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZzbF9mbV9yeF9leHRyYV9oZWFkcm9vbSA8IEZT TF9GTV9SWF9FWFRSQV9IRUFEUk9PTV9NSU4gfHwKKwkgICAgZnNsX2ZtX3J4X2V4dHJhX2hlYWRy b29tID4gRlNMX0ZNX1JYX0VYVFJBX0hFQURST09NX01BWCkgeworCQlwcl9lcnIoIkludmFsaWQg dmFsdWUgZm9yICVzPSVkIHByb3AgaW4gYm9vdGFyZ3M7IHdpbGwgdXNlIHRoZSBkZWZhdWx0IEZT TF9GTV9SWF9FWFRSQV9IRUFEUk9PTSAoJWQpIGZyb20gS2NvbmZpZy5cbiIsCisJCSAgICAgICBG U0xfRk1fUlhfRVhUUkFfSEVBRFJPT01fQk9PVEFSRywKKwkJICAgICAgIGZzbF9mbV9yeF9leHRy YV9oZWFkcm9vbSwKKwkJICAgICAgIENPTkZJR19GU0xfRk1fUlhfRVhUUkFfSEVBRFJPT00pOwor CQlmc2xfZm1fcnhfZXh0cmFfaGVhZHJvb20gPSBDT05GSUdfRlNMX0ZNX1JYX0VYVFJBX0hFQURS T09NOworCX0KKworCXByX2luZm8oIlVzaW5nIGZzbF9mbV9yeF9leHRyYV9oZWFkcm9vbT0lZCBm cm9tIGJvb3RhcmdzXG4iLAorCQlmc2xfZm1fcnhfZXh0cmFfaGVhZHJvb20pOworCisJcmV0dXJu IDA7Cit9CisKK2Vhcmx5X3BhcmFtKEZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTV9CT09UQVJHLCBm bV9zZXRfcnhfZXh0cmFfaGVhZHJvb20pOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZm1faXJxKGlu dCBpcnEsIHZvaWQgKl9kZXYpCit7CisJc3RydWN0IGZtX2Rydl90ICpwX2ZtX2RydiA9IChzdHJ1 Y3QgZm1fZHJ2X3QgKilfZGV2OworCisJaWYgKCFwX2ZtX2RydiB8fCAhcF9mbV9kcnYtPmhfZGV2 KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmbV9ldmVudF9pc3IocF9mbV9kcnYtPmhfZGV2KTsK KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGZtX2Vycl9p cnEoaW50IGlycSwgdm9pZCAqX2RldikKK3sKKwlzdHJ1Y3QgZm1fZHJ2X3QgKnBfZm1fZHJ2ID0g KHN0cnVjdCBmbV9kcnZfdCAqKV9kZXY7CisKKwlpZiAoIXBfZm1fZHJ2IHx8ICFwX2ZtX2Rydi0+ aF9kZXYpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChmbV9lcnJvcl9pc3IocF9mbV9kcnYt PmhfZGV2KSA9PSAwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlyZXR1cm4gSVJRX05PTkU7 Cit9CisKKy8qIHVzZWQgdG8gcHJvdGVjdCBGTUQgZnJvbSBjb25jdXJyZW50IGNhbGxzIGluIGZ1 bmN0aW9ucworICogZm1fbXV0ZXhfbG9jayAvIGZtX211dGV4X3VubG9jaworICovCitzdGF0aWMg c3RydWN0IG11dGV4IGZtX2Rydl9tdXRleDsKKworc3RhdGljIHN0cnVjdCBmbV9kcnZfdCAqY3Jl YXRlX2ZtX2Rldih1aW50OF90IGlkKQoreworCXN0cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnY7CisK KwlwX2ZtX2RydiA9IGt6YWxsb2Moc2l6ZW9mKCpwX2ZtX2RydiksIEdGUF9LRVJORUwpOworCWlm ICghcF9mbV9kcnYpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBfZm1fZHJ2OworfQorCitz dGF0aWMgdm9pZCBkZXN0cm95X2ZtX2RldihzdHJ1Y3QgZm1fZHJ2X3QgKnBfZm1fZHJ2KQorewor CWtmcmVlKHBfZm1fZHJ2KTsKK30KKworLyoqCisqZmluZF9mbWFuX21pY3JvY29kZSAtIGZpbmQg dGhlIEZtYW4gbWljcm9jb2RlCisgKgorKlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIg dG8gdGhlIFFFIEZpcm13YXJlIGJsb2IgdGhhdCBob2xkcworKnRoZSBGbWFuIG1pY3JvY29kZS4g IFdlIHVzZSB0aGUgUUUgRmlybXdhcmUgc3RydWN0dXJlIGJlY2F1c2UgRm1hbiBtaWNyb2NvZGUK KyppcyBzaW1pbGFyIHRvIFFFIG1pY3JvY29kZSwgc28gdGhlcmUncyBubyBwb2ludCBpbiBkZWZp bmluZyBhIG5ldyBsYXlvdXQuCisgKgorKkN1cnJlbnQgdmVyc2lvbnMgb2YgVS1Cb290IGVtYmVk IHRoZSBGbWFuIGZpcm13YXJlIGludG8gdGhlIGRldmljZSB0cmVlLAorKnNvIHdlIGNoZWNrIGZv ciB0aGF0IGZpcnN0LiAgRWFjaCBGbWFuIG5vZGUgaW4gdGhlIGRldmljZSB0cmVlIGNvbnRhaW5z IGEKKypub2RlIG9yIGEgcG9pbnRlciB0byBub2RlIHRoYXQgaG9sZHMgdGhlIGZpcm13YXJlLiAg VGVjaG5pY2FsbHksIHdlIHNob3VsZAorKmJlIGZldGNoaW5nIHRoZSBmaXJtd2FyZSBub2RlIGZv ciB0aGUgY3VycmVudCBGbWFuLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0CisqaW5mb3JtYXRpb24g YW55IG1vcmUsIHNvIHdlIGFzc3VtZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpcm13YXJlIG5v ZGUgaW4KKyp0aGUgZGV2aWNlIHRyZWUsIGFuZCB0aGF0IGFsbCBGbWVuIHVzZSB0aGUgc2FtZSBm aXJtd2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBxZV9maXJtd2FyZSAqZmluZF9mbWFu X21pY3JvY29kZSh2b2lkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcWVfZmlybXdhcmUgKnA0 MDgwX3VjX3BhdGNoOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlpZiAocDQwODBfdWNf cGF0Y2gpCisJCXJldHVybiBwNDA4MF91Y19wYXRjaDsKKworCS8qIFRoZSBmaXJtd2FyZSBzaG91 bGQgYmUgaW5zaWRlIHRoZSBkZXZpY2UgdHJlZS4gKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJs ZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsZm1hbi1maXJtd2FyZSIpOworCWlmIChucCkgeworCQlw NDA4MF91Y19wYXRjaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZzbCxmaXJtd2FyZSIsIE5VTEwp OworCQlvZl9ub2RlX3B1dChucCk7CisJCWlmIChwNDA4MF91Y19wYXRjaCkKKwkJCXJldHVybiBw NDA4MF91Y19wYXRjaDsKKworCQlwcl9pbmZvKCJmaXJtd2FyZSBub2RlIGlzIGluY29tcGxldGVc biIpOworCX0KKworCS8qIFJldHVybmluZyBOVUxMIGhlcmUgZm9yY2VzIHRoZSByZXVzZSBvZiB0 aGUgSVJBTSBjb250ZW50ICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9x bWFuX2NoYW5uaGVsc19pbmZvKHN0cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnYpCit7CisJcF9mbV9k cnYtPnFtYW5fY2hhbm5lbHMgPSBrY2FsbG9jKHBfZm1fZHJ2LT5udW1fb2ZfcW1hbl9jaGFubmVs cywKKwkJCQkJICBzaXplb2YodWludDMyX3QpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICgh cF9mbV9kcnYtPnFtYW5fY2hhbm5lbHMpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBfZm1f ZHJ2LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPj0gNikgeworCQlwX2ZtX2Rydi0+cW1hbl9jaGFu bmVsc1swXSA9IDB4MzA7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzFdID0gMHgzMTsKKwkJ cF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbMl0gPSAweDI4OworCQlwX2ZtX2Rydi0+cW1hbl9jaGFu bmVsc1szXSA9IDB4Mjk7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzRdID0gMHgyYTsKKwkJ cF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbNV0gPSAweDJiOworCQlwX2ZtX2Rydi0+cW1hbl9jaGFu bmVsc1s2XSA9IDB4MmM7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzddID0gMHgyZDsKKwkJ cF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbOF0gPSAweDI7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5u ZWxzWzldID0gMHgzOworCQlwX2ZtX2Rydi0+cW1hbl9jaGFubmVsc1sxMF0gPSAweDQ7CisJCXBf Zm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzExXSA9IDB4NTsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5l bHNbMTJdID0gMHg2OworCQlwX2ZtX2Rydi0+cW1hbl9jaGFubmVsc1sxM10gPSAweDc7CisJfSBl bHNlIHsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbMF0gPSAweDMwOworCQlwX2ZtX2Rydi0+ cW1hbl9jaGFubmVsc1sxXSA9IDB4Mjg7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzJdID0g MHgyOTsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbM10gPSAweDJhOworCQlwX2ZtX2Rydi0+ cW1hbl9jaGFubmVsc1s0XSA9IDB4MmI7CisJCXBfZm1fZHJ2LT5xbWFuX2NoYW5uZWxzWzVdID0g MHgyYzsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbNl0gPSAweDE7CisJCXBfZm1fZHJ2LT5x bWFuX2NoYW5uZWxzWzddID0gMHgyOworCQlwX2ZtX2Rydi0+cW1hbl9jaGFubmVsc1s4XSA9IDB4 MzsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbOV0gPSAweDQ7CisJCXBfZm1fZHJ2LT5xbWFu X2NoYW5uZWxzWzEwXSA9IDB4NTsKKwkJcF9mbV9kcnYtPnFtYW5fY2hhbm5lbHNbMTFdID0gMHg2 OworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNWUl9TRUNVUklUWV9NQVNLICAgIDB4 MDAwODAwMDAKKyNkZWZpbmUgU1ZSX1BFUlNPTkFMSVRZX01BU0sgMHgwMDAwRkYwMAorI2RlZmlu ZSBTVlJfVkVSX0lHTk9SRV9NQVNLIChTVlJfU0VDVVJJVFlfTUFTSyB8IFNWUl9QRVJTT05BTElU WV9NQVNLKQorI2RlZmluZSBTVlJfQjQ4NjBfUkVWMV9WQUxVRSAweDg2ODAwMDEwCisjZGVmaW5l IFNWUl9CNDg2MF9SRVYyX1ZBTFVFIDB4ODY4MDAwMjAKKworc3RhdGljIHN0cnVjdCBmbV9kcnZf dCAqcmVhZF9mbV9kZXZfdHJlZV9ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UKKwkJCQkJCQkq b2ZfZGV2KQoreworCXN0cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnY7CisJc3RydWN0IGRldmljZV9u b2RlICpmbV9ub2RlLCAqZGV2X25vZGU7CisJc3RydWN0IG9mX2RldmljZV9pZCBuYW1lOyAvKiB1 c2VkIHRlbXBvcmFyaWx5ICovCisJc3RydWN0IHJlc291cmNlIHJlczsKKwljb25zdCB1aW50MzJf dCAqdWludDMyX3Byb3A7CisJaW50IGxlbnAsIGVycjsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdTMy IGNsa19yYXRlOworCXU4IGNlbGxfaW5kZXg7CisKKwlmbV9ub2RlID0gb2Zfbm9kZV9nZXQob2Zf ZGV2LT5kZXYub2Zfbm9kZSk7CisKKwl1aW50MzJfcHJvcCA9CisJICAgICh1aW50MzJfdCAqKW9m X2dldF9wcm9wZXJ0eShmbV9ub2RlLCAiY2VsbC1pbmRleCIsICZsZW5wKTsKKwlpZiAodW5saWtl bHkoIXVpbnQzMl9wcm9wKSkgeworCQlwcl9lcnIoIm9mX2dldF9wcm9wZXJ0eSglcywgY2VsbC1p bmRleCkgZmFpbGVkXG4iLAorCQkgICAgICAgZm1fbm9kZS0+ZnVsbF9uYW1lKTsKKwkJZ290byBf cmV0dXJuX251bGw7CisJfQorCWlmIChXQVJOX09OKGxlbnAgIT0gc2l6ZW9mKHVpbnQzMl90KSkp CisJCXJldHVybiBOVUxMOworCisJY2VsbF9pbmRleCA9ICh1OCkqdWludDMyX3Byb3A7CisJcF9m bV9kcnYgPSBjcmVhdGVfZm1fZGV2KGNlbGxfaW5kZXgpOworCWlmICghcF9mbV9kcnYpCisJCWdv dG8gX3JldHVybl9udWxsOworCXBfZm1fZHJ2LT5kZXYgPSAmb2ZfZGV2LT5kZXY7CisJcF9mbV9k cnYtPmlkID0gY2VsbF9pbmRleDsKKworCS8qIEdldCB0aGUgRk0gaW50ZXJydXB0ICovCisJcF9m bV9kcnYtPmlycSA9IG9mX2lycV90b19yZXNvdXJjZShmbV9ub2RlLCAwLCBOVUxMKTsKKwlpZiAo dW5saWtlbHkocF9mbV9kcnYtPmlycSA9PSAvKk5PX0lSUSAqLyAwKSkgeworCQlwcl9lcnIoIm9m X2lycV90b19yZXNvdXJjZSgpID0gJWRcbiIsIE5PX0lSUSk7CisJCWdvdG8gX3JldHVybl9udWxs OworCX0KKworCS8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovCisJcF9mbV9kcnYtPmVy cl9pcnEgPSBvZl9pcnFfdG9fcmVzb3VyY2UoZm1fbm9kZSwgMSwgTlVMTCk7CisKKwkvKiBHZXQg dGhlIEZNIGFkZHJlc3MgKi8KKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGZtX25vZGUs IDAsICZyZXMpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlwcl9lcnIoIm9mX2FkZHJl c3NfdG9fcmVzb3VyY2UoKSA9ICVkXG4iLCBlcnIpOworCQlnb3RvIF9yZXR1cm5fbnVsbDsKKwl9 CisKKwlwX2ZtX2Rydi0+Zm1fYmFzZV9hZGRyID0gMDsKKwlwX2ZtX2Rydi0+Zm1fcGh5c19iYXNl X2FkZHIgPSByZXMuc3RhcnQ7CisJcF9mbV9kcnYtPmZtX21lbV9zaXplID0gcmVzLmVuZCArIDEg LSByZXMuc3RhcnQ7CisKKwljbGsgPSBjbGtfZ2V0KHBfZm1fZHJ2LT5kZXYsIHBfZm1fZHJ2LT5p ZCA9PSAwID8gImZtMGNsayIgOiAiZm0xY2xrIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXBy X2VycigiRmFpbGVkIHRvIGdldCBGTSVkIGNsb2NrIHN0cnVjdHVyZVxuIiwgcF9mbV9kcnYtPmlk KTsKKwkJZ290byBfcmV0dXJuX251bGw7CisJfQorCisJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUo Y2xrKTsKKwlpZiAoIWNsa19yYXRlKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGRldGVybWluZSBG TSVkIGNsb2NrIHJhdGVcbiIsIHBfZm1fZHJ2LT5pZCk7CisJCWdvdG8gX3JldHVybl9udWxsOwor CX0KKwkvKiBSb3VuZGluZyB0byBNSHogKi8KKwljbGtfcmF0ZSA9IChjbGtfcmF0ZSArIDUwMDAw MCkgLyAxMDAwMDAwOworCXBfZm1fZHJ2LT5wYXJhbXMuZm1fY2xrX2ZyZXEgPSAodTE2KWNsa19y YXRlOworCisJdWludDMyX3Byb3AgPQorCSAgICAodWludDMyX3QgKilvZl9nZXRfcHJvcGVydHko Zm1fbm9kZSwKKwkJCQkJImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2UiLAorCQkJCQkmbGVucCk7CisJ aWYgKHVubGlrZWx5KCF1aW50MzJfcHJvcCkpIHsKKwkJcHJfZXJyKCJvZl9nZXRfcHJvcGVydHko JXMsIGZzbCxxbWFuLWNoYW5uZWwtcmFuZ2UpIGZhaWxlZFxuIiwKKwkJICAgICAgIGZtX25vZGUt PmZ1bGxfbmFtZSk7CisJCWdvdG8gX3JldHVybl9udWxsOworCX0KKwlpZiAoV0FSTl9PTihsZW5w ICE9IHNpemVvZih1aW50MzJfdCkgKiAyKSkKKwkJZ290byBfcmV0dXJuX251bGw7CisJcF9mbV9k cnYtPnFtYW5fY2hhbm5lbF9iYXNlID0gdWludDMyX3Byb3BbMF07CisJcF9mbV9kcnYtPm51bV9v Zl9xbWFuX2NoYW5uZWxzID0gdWludDMyX3Byb3BbMV07CisKKwkvKiBHZXQgdGhlIE1VUkFNIGJh c2UgYWRkcmVzcyBhbmQgc2l6ZSAqLworCW1lbXNldCgmbmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsK KwlpZiAoV0FSTl9PTihzdHJsZW4oIm11cmFtIikgPj0gc2l6ZW9mKG5hbWUubmFtZSkpKQorCQln b3RvIF9yZXR1cm5fbnVsbDsKKwlzdHJjcHkobmFtZS5uYW1lLCAibXVyYW0iKTsKKwlpZiAoV0FS Tl9PTihzdHJsZW4oImZzbCxmbWFuLW11cmFtIikgPj0gc2l6ZW9mKG5hbWUuY29tcGF0aWJsZSkp KQorCQlnb3RvIF9yZXR1cm5fbnVsbDsKKwlzdHJjcHkobmFtZS5jb21wYXRpYmxlLCAiZnNsLGZt YW4tbXVyYW0iKTsKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGZtX25vZGUsIGRldl9ub2RlKSB7 CisJCWlmIChsaWtlbHkob2ZfbWF0Y2hfbm9kZSgmbmFtZSwgZGV2X25vZGUpKSkgeworCQkJZXJy ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXZfbm9kZSwgMCwgJnJlcyk7CisJCQlpZiAodW5s aWtlbHkoZXJyIDwgMCkpIHsKKwkJCQlwcl9lcnIoIm9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9 ICVkXG4iLAorCQkJCSAgICAgICBlcnIpOworCQkJCWdvdG8gX3JldHVybl9udWxsOworCQkJfQor CisJCQlwX2ZtX2Rydi0+Zm1fbXVyYW1fYmFzZV9hZGRyID0gMDsKKwkJCXBfZm1fZHJ2LT5mbV9t dXJhbV9waHlzX2Jhc2VfYWRkciA9IHJlcy5zdGFydDsKKwkJCXBfZm1fZHJ2LT5mbV9tdXJhbV9t ZW1fc2l6ZSA9IHJlcy5lbmQgKyAxIC0gcmVzLnN0YXJ0OworCQkJeworCQkJCS8qIEluIEI0IHJl diAyLjAgKGFuZCBhYm92ZSkgdGhlIE1VUkFNIHNpemUgaXMKKwkJCQkgKiA1MTJLQi4KKwkJCQkg KiBDaGVjayB0aGUgU1ZSIGFuZCB1cGRhdGUgTVVSQU0gc2l6ZSBpZgorCQkJCSAqIHJlcXVpcmVk LgorCQkJCSAqLworCQkJCXVpbnQzMl90IHN2cjsKKworCQkJCXN2ciA9IG1mc3ByKFNQUk5fU1ZS KTsKKworCQkJCWlmICgoc3ZyICYgflNWUl9WRVJfSUdOT1JFX01BU0spID49CisJCQkJICAgIFNW Ul9CNDg2MF9SRVYyX1ZBTFVFKQorCQkJCQlwX2ZtX2Rydi0+Zm1fbXVyYW1fbWVtX3NpemUgPSAw eDgwMDAwOworCQkJfQorCQl9CisJfQorCisJb2Zfbm9kZV9wdXQoZm1fbm9kZSk7CisKKwlwX2Zt X2Rydi0+YWN0aXZlID0gdHJ1ZTsKKworCWdvdG8gX3JldHVybjsKKworX3JldHVybl9udWxsOgor CW9mX25vZGVfcHV0KGZtX25vZGUpOworCXJldHVybiBOVUxMOworX3JldHVybjoKKwlyZXR1cm4g cF9mbV9kcnY7Cit9CisKK3N0YXRpYyB2b2lkIGZtX2Rydl9leGNlcHRpb25zX2NiKHZvaWQgKmhf YXBwLAorCQkJCSBlbnVtIGZtX2V4Y2VwdGlvbnMgX19tYXliZV91bnVzZWQgZXhjZXB0aW9uKQor eworCXN0cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnYgPSAoc3RydWN0IGZtX2Rydl90ICopaF9hcHA7 CisKKwlBU1NFUlQocF9mbV9kcnYpOworCisJcHJfZGVidWcoImdvdCBmbSBleGNlcHRpb24gJWRc biIsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGZtX2Rydl9idXNfZXJyb3JfY2Iodm9p ZCAqaF9hcHAsCisJCQkJZW51bSBmbV9wb3J0X3R5cGUgX19tYXliZV91bnVzZWQgcG9ydF90eXBl LAorCQkJCXVpbnQ4X3QgX19tYXliZV91bnVzZWQgcG9ydF9pZCwKKwkJCQl1aW50NjRfdCBfX21h eWJlX3VudXNlZCBhZGRyLAorCQkJCXVpbnQ4X3QgX19tYXliZV91bnVzZWQgdG51bSwKKwkJCQl1 aW50MTZfdCBfX21heWJlX3VudXNlZCBsaW9kbikKK3sKKwlzdHJ1Y3QgZm1fZHJ2X3QgKnBfZm1f ZHJ2ID0gKHN0cnVjdCBmbV9kcnZfdCAqKWhfYXBwOworCisJQVNTRVJUKHBfZm1fZHJ2KTsKK30K KwordWludDMyX3QgZ2V0X3FtYW5fY2hhbm5lbF9pZChzdHJ1Y3QgZm1fZHJ2X3QgKnBfZm1fZHJ2 LAorCQkJICAgICB1aW50MzJfdCBwb3J0X2lkLAorCQkJICAgICBlbnVtIGZtX3BvcnRfdHlwZSBw b3J0X3R5cGUsCisJCQkgICAgIGVudW0gZm1fcG9ydF9zcGVlZCBwb3J0X3NwZWVkKQoreworCXVp bnQzMl90IHFtYW5fY2hhbm5lbCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcF9m bV9kcnYtPm51bV9vZl9xbWFuX2NoYW5uZWxzOyBpKyspIHsKKwkJaWYgKHBfZm1fZHJ2LT5xbWFu X2NoYW5uZWxzW2ldID09IHBvcnRfaWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBwX2Zt X2Rydi0+bnVtX29mX3FtYW5fY2hhbm5lbHMpCisJCXJldHVybiAwOworCisJcW1hbl9jaGFubmVs ID0gcF9mbV9kcnYtPnFtYW5fY2hhbm5lbF9iYXNlICsgaTsKKworCXJldHVybiBxbWFuX2NoYW5u ZWw7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2ZtX2RldihzdHJ1Y3QgZm1fZHJ2X3QgKnBf Zm1fZHJ2KQoreworCWludCBlcnI7CisKKwlpZiAoIXBfZm1fZHJ2LT5hY3RpdmUpIHsKKwkJcHJf ZXJyKCJGTSBub3QgY29uZmlndXJlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKyNp Zm5kZWYgTU9EVUxFCisJZXJyID0gY2FuX3JlcXVlc3RfaXJxKHBfZm1fZHJ2LT5pcnEsIDApOwor CWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlwcl9lcnIoImNhbl9yZXF1ZXN0X2lycSgpID0g JWRcbiIsIGVycik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKyNlbmRpZgorCWVyciA9IGRldm1f cmVxdWVzdF9pcnEocF9mbV9kcnYtPmRldiwgcF9mbV9kcnYtPmlycSwgZm1faXJxLAorCQkJICAg ICAgIElSUUZfTk9fU1VTUEVORCwgImZtYW4iLCBwX2ZtX2Rydik7CisJaWYgKHVubGlrZWx5KGVy ciA8IDApKSB7CisJCXByX2VycigicmVxdWVzdF9pcnEoJWQpID0gJWRcbiIsIHBfZm1fZHJ2LT5p cnEsCisJCSAgICAgICBlcnIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocF9mbV9k cnYtPmVycl9pcnEgIT0gMCkgeworI2lmbmRlZiBNT0RVTEUKKwkJZXJyID0gY2FuX3JlcXVlc3Rf aXJxKHBfZm1fZHJ2LT5lcnJfaXJxLCAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJ CQlwcl9lcnIoImNhbl9yZXF1ZXN0X2lycSgpID0gJWRcbiIsIGVycik7CisJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJfQorI2VuZGlmCisJCWVyciA9IGRldm1fcmVxdWVzdF9pcnEocF9mbV9kcnYtPmRl diwgcF9mbV9kcnYtPmVycl9pcnEsCisJCQkJICAgICAgIGZtX2Vycl9pcnEsCisJCQkJICAgICAg IElSUUZfU0hBUkVEIHwgSVJRRl9OT19TVVNQRU5ELAorCQkJCSAgICAgICAiZm1hbi1lcnIiLCBw X2ZtX2Rydik7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQkJcHJfZXJyKCJyZXF1ZXN0 X2lycSglZCkgPSAlZFxuIiwKKwkJCSAgICAgICBwX2ZtX2Rydi0+ZXJyX2lycSwgZXJyKTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcF9mbV9kcnYtPnJlcyA9IGRldm1fcmVxdWVz dF9tZW1fcmVnaW9uKHBfZm1fZHJ2LT5kZXYsCisJCQkJCQlwX2ZtX2Rydi0+Zm1fcGh5c19iYXNl X2FkZHIsCisJCQkJCQlwX2ZtX2Rydi0+Zm1fbWVtX3NpemUsICJmbWFuIik7CisJaWYgKHVubGlr ZWx5KCFwX2ZtX2Rydi0+cmVzKSkgeworCQlwcl9lcnIoInJlcXVlc3RfbWVtX3JlZ2lvbigpIGZh aWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBfZm1fZHJ2LT5mbV9iYXNlX2Fk ZHIgPQorCQlQVFJfVE9fVUlOVChkZXZtX2lvcmVtYXAocF9mbV9kcnYtPmRldiwKKwkJCQkJIHBf Zm1fZHJ2LT5mbV9waHlzX2Jhc2VfYWRkciwKKwkJCQkJIHBfZm1fZHJ2LT5mbV9tZW1fc2l6ZSkp OworCWlmICh1bmxpa2VseShwX2ZtX2Rydi0+Zm1fYmFzZV9hZGRyID09IDApKSB7CisJCXByX2Vy cigiZGV2bV9pb3JlbWFwKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ cF9mbV9kcnYtPnBhcmFtcy5iYXNlX2FkZHIgPSBwX2ZtX2Rydi0+Zm1fYmFzZV9hZGRyOworCXBf Zm1fZHJ2LT5wYXJhbXMuZm1faWQgPSBwX2ZtX2Rydi0+aWQ7CisJcF9mbV9kcnYtPnBhcmFtcy5m X2V4Y2VwdGlvbiA9IGZtX2Rydl9leGNlcHRpb25zX2NiOworCXBfZm1fZHJ2LT5wYXJhbXMuZl9i dXNfZXJyb3IgPSBmbV9kcnZfYnVzX2Vycm9yX2NiOworCXBfZm1fZHJ2LT5wYXJhbXMuaF9hcHAg PSBwX2ZtX2RydjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfZm1fZGV2KHN0 cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnYpCit7CisJY29uc3Qgc3RydWN0IHFlX2Zpcm13YXJlICpm dzsKKworCWlmICghcF9mbV9kcnYtPmFjdGl2ZSkgeworCQlwcl9lcnIoIkZNIG5vdCBjb25maWd1 cmVkISEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcF9mbV9kcnYtPnBfbXVyYW0g PQorCQlmbV9tdXJhbV9pbml0KHBfZm1fZHJ2LT5mbV9tdXJhbV9waHlzX2Jhc2VfYWRkciwKKwkJ CSAgICAgIHBfZm1fZHJ2LT5mbV9tdXJhbV9tZW1fc2l6ZSk7CisJaWYgKCFwX2ZtX2Rydi0+cF9t dXJhbSkgeworCQlwcl9lcnIoIkZNLU1VUkFNIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWZ3ID0gZmluZF9mbWFuX21pY3JvY29kZSgpOworCisJaWYgKCFmdykgeworCQkvKiB0aGlz IGZvcmNlcyB0aGUgcmV1c2Ugb2YgdGhlIGN1cnJlbnQgSVJBTSBjb250ZW50ICovCisJCXBfZm1f ZHJ2LT5wYXJhbXMuZmlybXdhcmUuc2l6ZSA9IDA7CisJCXBfZm1fZHJ2LT5wYXJhbXMuZmlybXdh cmUucF9jb2RlID0gTlVMTDsKKwl9IGVsc2UgeworCQlwX2ZtX2Rydi0+cGFyYW1zLmZpcm13YXJl LnBfY29kZSA9CisJCQkodm9pZCAqKWZ3ICsgZnctPm1pY3JvY29kZVswXS5jb2RlX29mZnNldDsK KwkJcF9mbV9kcnYtPnBhcmFtcy5maXJtd2FyZS5zaXplID0KKwkJCXNpemVvZih1MzIpICogZnct Pm1pY3JvY29kZVswXS5jb3VudDsKKwkJcHJfZGVidWcoIkxvYWRpbmcgZm1hbi1jb250cm9sbGVy IGNvZGUgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCSBmdy0+bWljcm9jb2RlWzBdLm1ham9yLCBm dy0+bWljcm9jb2RlWzBdLm1pbm9yLAorCQkJIGZ3LT5taWNyb2NvZGVbMF0ucmV2aXNpb24pOwor CX0KKworCXBfZm1fZHJ2LT5wYXJhbXMucF9tdXJhbSA9IHBfZm1fZHJ2LT5wX211cmFtOworCisJ cF9mbV9kcnYtPmhfZGV2ID0gZm1fY29uZmlnKCZwX2ZtX2Rydi0+cGFyYW1zKTsKKwlpZiAoIXBf Zm1fZHJ2LT5oX2RldikgeworCQlwcl9lcnIoIkZNXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJaWYgKGZtX2dldF9yZXZpc2lvbihwX2ZtX2Rydi0+aF9kZXYsICZwX2ZtX2Rydi0+Zm1f cmV2X2luZm8pICE9IDApIHsKKwkJcHJfZXJyKCJGTVxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmIChmbV9jZmdfcmVzZXRfb25faW5pdChwX2ZtX2Rydi0+aF9kZXYsIHRydWUpICE9 IDApIHsKKwkJcHJfZXJyKCJGTVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDb25m aWcgZm1fY2ZnX2RtYV9haWRfb3ZlcnJpZGUgZm9yIFAxMDIzICovCisJaWYgKHBfZm1fZHJ2LT5m bV9yZXZfaW5mby5tYWpvcl9yZXYgPT0gNCkKKwkJaWYgKGZtX2NmZ19kbWFfYWlkX292ZXJyaWRl KHBfZm1fZHJ2LT5oX2RldiwgdHJ1ZSkgIT0gMCkgeworCQkJcHJfZXJyKCJGTVxuIik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorCS8qIENvbmZpZyB0b3RhbCBmaWZvIHNpemUgZm9yIEZNYW5W M0ggKi8KKwlpZiAoKHBfZm1fZHJ2LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPj0gNikgJiYKKwkg ICAgKHBfZm1fZHJ2LT5mbV9yZXZfaW5mby5taW5vcl9yZXYgIT0gMSAmJgorCSAgICAgcF9mbV9k cnYtPmZtX3Jldl9pbmZvLm1pbm9yX3JldiAhPSA0KSkKKwkJCWZtX2NmZ190b3RhbF9maWZvX3Np emUocF9mbV9kcnYtPmhfZGV2LCAyOTUgKiAxMDI0KTsKKworCWlmIChmbV9pbml0KHBfZm1fZHJ2 LT5oX2RldikgIT0gMCkgeworCQlwcl9lcnIoIkZNXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJLyogVE9ETzogV2h5IHdlIG1hc2sgdGhlc2UgaW50ZXJydXB0cz8gKi8KKwlpZiAocF9m bV9kcnYtPmVycl9pcnEgPT0gMCkgeworCQlmbV9zZXRfZXhjZXB0aW9uKHBfZm1fZHJ2LT5oX2Rl diwKKwkJCQkgRk1fRVhfRE1BX0JVU19FUlJPUiwgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9u KHBfZm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhfRE1BX1JFQURfRUNDLCBmYWxzZSk7CisJCWZt X3NldF9leGNlcHRpb24ocF9mbV9kcnYtPmhfZGV2LAorCQkJCSBGTV9FWF9ETUFfU1lTVEVNX1dS SVRFX0VDQywgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9uKHBfZm1fZHJ2LT5oX2RldiwKKwkJ CQkgRk1fRVhfRE1BX0ZNX1dSSVRFX0VDQywgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9uKHBf Zm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhfRE1BX1NJTkdMRV9QT1JUX0VDQywgZmFsc2UpOwor CQlmbV9zZXRfZXhjZXB0aW9uKHBfZm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhfRlBNX1NUQUxM X09OX1RBU0tTLCBmYWxzZSk7CisJCWZtX3NldF9leGNlcHRpb24ocF9mbV9kcnYtPmhfZGV2LAor CQkJCSBGTV9FWF9GUE1fU0lOR0xFX0VDQywgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9uKHBf Zm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhfRlBNX0RPVUJMRV9FQ0MsIGZhbHNlKTsKKwkJZm1f c2V0X2V4Y2VwdGlvbihwX2ZtX2Rydi0+aF9kZXYsCisJCQkJIEZNX0VYX1FNSV9TSU5HTEVfRUND LCBmYWxzZSk7CisJCWZtX3NldF9leGNlcHRpb24ocF9mbV9kcnYtPmhfZGV2LAorCQkJCSBGTV9F WF9RTUlfRE9VQkxFX0VDQywgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9uKHBfZm1fZHJ2LT5o X2RldiwKKwkJCQkgRk1fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9SVElELCBmYWxzZSk7CisJ CWZtX3NldF9leGNlcHRpb24ocF9mbV9kcnYtPmhfZGV2LAorCQkJCSBGTV9FWF9CTUlfTElTVF9S QU1fRUNDLCBmYWxzZSk7CisJCWZtX3NldF9leGNlcHRpb24ocF9mbV9kcnYtPmhfZGV2LAorCQkJ CSBGTV9FWF9CTUlfU1RPUkFHRV9QUk9GSUxFX0VDQywgZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0 aW9uKHBfZm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhfQk1JX1NUQVRJU1RJQ1NfUkFNX0VDQywg ZmFsc2UpOworCQlmbV9zZXRfZXhjZXB0aW9uKHBfZm1fZHJ2LT5oX2RldiwKKwkJCQkgRk1fRVhf Qk1JX0RJU1BBVENIX1JBTV9FQ0MsIGZhbHNlKTsKKwkJZm1fc2V0X2V4Y2VwdGlvbihwX2ZtX2Ry di0+aF9kZXYsIEZNX0VYX0lSQU1fRUNDLAorCQkJCSBmYWxzZSk7CisJCS8qIFRPRE86IF9mbV9k aXNhYmxlX3JhbXNfZWNjIGFzc2VydCBmb3IgcmFtc19lY2Nfb3duZXJzLgorCQkgKiBmbV9zZXRf ZXhjZXB0aW9uKHBfZm1fZHJ2LT5oX2RldixGTV9FWF9NVVJBTV9FQ0MsCisJCSAqCQkgICAgZmFs c2UpOworCQkgKi8KKwl9CisKKwlpZiAodW5saWtlbHkoZmlsbF9xbWFuX2NoYW5uaGVsc19pbmZv KHBfZm1fZHJ2KSA8IDApKSB7CisJCXByX2VycigiY2FuJ3QgZmlsbCBxbWFuIGNoYW5uZWwgaW5m b1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBmcmVlX2ZtX2RldihzdHJ1Y3QgZm1fZHJ2X3QgKnBfZm1fZHJ2KQoreworCWlmICghcF9m bV9kcnYtPmFjdGl2ZSkKKwkJcmV0dXJuOworCisJaWYgKHBfZm1fZHJ2LT5oX2RldikKKwkJZm1f ZnJlZShwX2ZtX2Rydi0+aF9kZXYpOworCisJaWYgKHBfZm1fZHJ2LT5wX211cmFtKQorCQlmbV9t dXJhbV9mcmVlKHBfZm1fZHJ2LT5wX211cmFtKTsKKworCWRldm1faW91bm1hcChwX2ZtX2Rydi0+ ZGV2LAorCQkgICAgIFVJTlRfVE9fUFRSKHBfZm1fZHJ2LT5mbV9iYXNlX2FkZHIpKTsKKwlkZXZt X3JlbGVhc2VfbWVtX3JlZ2lvbihwX2ZtX2Rydi0+ZGV2LAorCQkJCXBfZm1fZHJ2LT5mbV9waHlz X2Jhc2VfYWRkciwKKwkJCQlwX2ZtX2Rydi0+Zm1fbWVtX3NpemUpOworCisJaWYgKHBfZm1fZHJ2 LT5lcnJfaXJxICE9IDApCisJCWRldm1fZnJlZV9pcnEocF9mbV9kcnYtPmRldiwgcF9mbV9kcnYt PmVycl9pcnEsIHBfZm1fZHJ2KTsKKworCWRldm1fZnJlZV9pcnEocF9mbV9kcnYtPmRldiwgcF9m bV9kcnYtPmlycSwgcF9mbV9kcnYpOworfQorCisvKiBGTWFuIGNoYXJhY3RlciBkZXZpY2UgZmls ZSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmbV9m b3BzOworCitzdGF0aWMgaW50IC8qX19kZXZpbml0Ki8gZm1fcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBmbV9kcnZfdCAqcF9mbV9kcnY7CisKKwlwX2Zt X2RydiA9IHJlYWRfZm1fZGV2X3RyZWVfbm9kZShvZl9kZXYpOworCWlmICghcF9mbV9kcnYpCisJ CXJldHVybiAtRUlPOworCWlmIChjb25maWd1cmVfZm1fZGV2KHBfZm1fZHJ2KSAhPSAwKQorCQly ZXR1cm4gLUVJTzsKKwlpZiAoaW5pdF9mbV9kZXYocF9mbV9kcnYpICE9IDApCisJCXJldHVybiAt RUlPOworCisJZGV2X3NldF9kcnZkYXRhKHBfZm1fZHJ2LT5kZXYsIHBfZm1fZHJ2KTsKKworCXBy X2RlYnVnKCJGTSVkIHByb2JlZFxuIiwgcF9mbV9kcnYtPmlkKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGZtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCit7 CisJc3RydWN0IGZtX2Rydl90ICpwX2ZtX2RydjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlk ZXYgPSAmb2ZfZGV2LT5kZXY7CisJcF9mbV9kcnYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwor CWZyZWVfZm1fZGV2KHBfZm1fZHJ2KTsKKworCWRlc3Ryb3lfZm1fZGV2KHBfZm1fZHJ2KTsKKwor CWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtX21hdGNoW10gPSB7CisJeworCSAuY29tcGF0aWJs ZSA9ICJmc2wsZm1hbiJ9LAorCXt9Cit9OworCisjaWZuZGVmIE1PRFVMRQorTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgZm1fbWF0Y2gpOworI2VuZGlmIC8qICFNT0RVTEUgKi8KKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5u YW1lID0gImZzbC1mbWFuIiwKKwkJICAgLm9mX21hdGNoX3RhYmxlID0gZm1fbWF0Y2gsCisJCSAg IH0sCisJLnByb2JlID0gZm1fcHJvYmUsCisJLnJlbW92ZSA9IGZtX3JlbW92ZQorfTsKKwordm9p ZCAqZm1fZHJ2X2luaXQodm9pZCkKK3sKKwltZW1zZXQoJmZtX2RydnMsIDAsIHNpemVvZihmbV9k cnZzKSk7CisJbXV0ZXhfaW5pdCgmZm1fZHJ2X211dGV4KTsKKworCS8qIFJlZ2lzdGVyIHRvIHRo ZSBEVEIgZm9yIGJhc2ljIEZNIEFQSSAqLworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZm1f ZHJpdmVyKTsKKworCXJldHVybiAmZm1fZHJ2czsKK30KKworaW50IGZtX2Rydl9mcmVlKHZvaWQg KnBfZm1fZHJ2KQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmbV9kcml2ZXIpOwor CW11dGV4X2Rlc3Ryb3koJmZtX2Rydl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0 IGZtICpmbV9iaW5kKHN0cnVjdCBkZXZpY2UgKmZtX2RldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBm bSAqKShkZXZfZ2V0X2RydmRhdGEoZ2V0X2RldmljZShmbV9kZXYpKSk7Cit9CitFWFBPUlRfU1lN Qk9MKGZtX2JpbmQpOworCit2b2lkIGZtX3VuYmluZChzdHJ1Y3QgZm0gKmZtKQoreworCXN0cnVj dCBmbV9kcnZfdCAqcF9mbV9kcnYgPSAoc3RydWN0IGZtX2Rydl90ICopZm07CisKKwlwdXRfZGV2 aWNlKHBfZm1fZHJ2LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTChmbV91bmJpbmQpOworCitzdHJ1 Y3QgcmVzb3VyY2UgKmZtX2dldF9tZW1fcmVnaW9uKHN0cnVjdCBmbSAqZm0pCit7CisJc3RydWN0 IGZtX2Rydl90ICpwX2ZtX2RydiA9IChzdHJ1Y3QgZm1fZHJ2X3QgKilmbTsKKworCXJldHVybiBw X2ZtX2Rydi0+cmVzOworfQorRVhQT1JUX1NZTUJPTChmbV9nZXRfbWVtX3JlZ2lvbik7CisKK3Zv aWQgKmZtX2dldF9oYW5kbGUoc3RydWN0IGZtICpmbSkKK3sKKwlzdHJ1Y3QgZm1fZHJ2X3QgKnBf Zm1fZHJ2ID0gKHN0cnVjdCBmbV9kcnZfdCAqKWZtOworCisJcmV0dXJuICh2b2lkICopcF9mbV9k cnYtPmhfZGV2OworfQorRVhQT1JUX1NZTUJPTChmbV9nZXRfaGFuZGxlKTsKKworCit2b2lkIGZt X211dGV4X2xvY2sodm9pZCkKK3sKKwltdXRleF9sb2NrKCZmbV9kcnZfbXV0ZXgpOworfQorRVhQ T1JUX1NZTUJPTChmbV9tdXRleF9sb2NrKTsKKwordm9pZCBmbV9tdXRleF91bmxvY2sodm9pZCkK K3sKKwltdXRleF91bmxvY2soJmZtX2Rydl9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGZtX211 dGV4X3VubG9jayk7CisKK3N0YXRpYyB2b2lkICpwX2ZtX2RydjsKKworc3RhdGljIGludCBfX2lu aXQgX19jb2xkIGZtX2xvYWQodm9pZCkKK3sKKwlwX2ZtX2RydiA9IGZtX2Rydl9pbml0KCk7CisJ aWYgKCFwX2ZtX2RydikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBpbml0IEZNIHdyYXBwZXIhXG4i KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJfaW5mbygiRnJlZXNjYWxlIEZNIG1vZHVs ZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBfX2NvbGQgZm1fdW5s b2FkKHZvaWQpCit7CisJaWYgKHBfZm1fZHJ2KQorCQlmbV9kcnZfZnJlZShwX2ZtX2Rydik7Cit9 CisKK21vZHVsZV9pbml0KGZtX2xvYWQpOworbW9kdWxlX2V4aXQoZm1fdW5sb2FkKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjZDc3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oCkBAIC0wLDAgKzEsMTIzIEBACisv KgorICogQ29weXJpZ2h0IDIwMDgtMjAxNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog ICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxl IFNlbWljb25kdWN0b3Igbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBi ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICog Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICog RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g RVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAq IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisgKi8KKworI2lmbmRlZiBfX0ZNX0RSVl9IX18KKyNkZWZpbmUgX19GTV9EUlZfSF9f CisKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiZnNsX2ZtYW5fZHJ2LmgiCisKKy8q IEZNYW4gRHJpdmVyIEVycmF0YSAqLworI2RlZmluZSBGTV9CQ0JfRVJSQVRBX0JNSV9TVzAwMQkJ CQkvKiBUL0IgKi8KKyNkZWZpbmUgRk1fVFhfSU5WQUxJRF9FQ0NfRVJSQVRBXzEwR01BQ19BMDA5 CQkJLyogUDItUDUgKi8KKworI2lmbmRlZiBDT05GSUdfRlNMX0ZNX01BWF9GUkFNRV9TSVpFCisj ZGVmaW5lIENPTkZJR19GU0xfRk1fTUFYX0ZSQU1FX1NJWkUgMAorI2VuZGlmCisKKyNpZm5kZWYg Q09ORklHX0ZTTF9GTV9SWF9FWFRSQV9IRUFEUk9PTQorI2RlZmluZSBDT05GSUdfRlNMX0ZNX1JY X0VYVFJBX0hFQURST09NICAgICAgIDE2CisjZW5kaWYKKworLyogU29DIGluZm8gKi8KKyNkZWZp bmUgU09DX1ZFUlNJT04oc3ZyKSAgICAgICAgKCgoc3ZyKSAmIDB4RkZGN0ZGMDApID4+IDgpCisj ZGVmaW5lIFNPQ19NQUpPUl9SRVYoc3ZyKSAgICAgICgoKHN2cikgJiAweDAwMDAwMEYwKSA+PiA0 KQorI2RlZmluZSBTT0NfTUlOT1JfUkVWKHN2cikgICAgICAoKHN2cikgJiAweDAwMDAwMDBGKQor CisvKiBQb3J0IGRlZmluZXMgKi8KKyNkZWZpbmUgTlVNX09GX0ZNX1BPUlRTCQkJNjMKKyNkZWZp bmUgRklSU1RfT1BfUE9SVChtYWpvcikJCShtYWpvciA+PSA2ID8gMHgwMiA6IDB4MDEpCisjZGVm aW5lIEZJUlNUX1JYX1BPUlQJCQkweDA4CisjZGVmaW5lIEZJUlNUX1RYX1BPUlQJCQkweDI4Cisj ZGVmaW5lIExBU1RfT1BfUE9SVAkJCTB4MDcKKyNkZWZpbmUgTEFTVF9SWF9QT1JUCQkJMHgxMQor I2RlZmluZSBMQVNUX1RYX1BPUlQJCQkweDMxCisKKyNkZWZpbmUgVFhfMTBHX1BPUlRfQkFTRQkJ MHgzMAorI2RlZmluZSBSWF8xMEdfUE9SVF9CQVNFCQkweDEwCisKKyNkZWZpbmUgTlVNX09GX0ZN UwkJCTIKK3N0cnVjdCBmbV9wb3J0X3Q7CisKK3N0cnVjdCBmbV9wb3J0X2Rydl90IHsKKwl1aW50 OF90IGlkOworCWNoYXIgbmFtZVsyMF07CisJYm9vbCBhY3RpdmU7CisJdWludDY0X3QgcGh5c19i YXNlX2FkZHI7CisJdWludDY0X3QgYmFzZV9hZGRyOwkvKiBQb3J0J3MgKnZpcnR1YWwqIGFkZHJl c3MgKi8KKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisJc3RydWN0IGZtX2J1ZmZlcl9wcmVm aXhfY29udGVudF90IGJ1ZmZfcHJlZml4X2NvbnRlbnQ7CisJc3RydWN0IGZtX3BvcnRfdCAqaF9k ZXY7CisJc3RydWN0IGZtX2Rydl90ICpwX2ZtOworCXVpbnQxNl90IHR4X2NoOworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZm1fcmV2aXNpb25faW5mb190IGZtX3Jldl9pbmZvOworfTsK Kworc3RydWN0IGZtX2Rydl90IHsKKwl1aW50OF90IGlkOworCWNoYXIgbmFtZVsxMF07CisJYm9v bCBhY3RpdmU7CisJdWludDY0X3QgZm1fcGh5c19iYXNlX2FkZHI7CisJdWludDY0X3QgZm1fYmFz ZV9hZGRyOworCXJlc291cmNlX3NpemVfdCBmbV9tZW1fc2l6ZTsKKwlwaHlzX2FkZHJfdCBmbV9t dXJhbV9waHlzX2Jhc2VfYWRkcjsKKwl1aW50NjRfdCBmbV9tdXJhbV9iYXNlX2FkZHI7CisJcmVz b3VyY2Vfc2l6ZV90IGZtX211cmFtX21lbV9zaXplOworCWludCBpcnE7CisJaW50IGVycl9pcnE7 CisJc3RydWN0IGZtX3BhcmFtc190IHBhcmFtczsKKwl2b2lkICpoX2RldjsKKwlzdHJ1Y3QgbXVy YW1faW5mbyAqcF9tdXJhbTsKKworCXN0cnVjdCBmbV9wb3J0X2Rydl90IHBvcnRzW05VTV9PRl9G TV9QT1JUU107CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisKKwlzdHJ1Y3QgZm1fcmV2aXNpb25faW5mb190IGZtX3Jldl9pbmZvOworCXVpbnQzMl90IHFt YW5fY2hhbm5lbF9iYXNlOworCXVpbnQzMl90IG51bV9vZl9xbWFuX2NoYW5uZWxzOworCXVpbnQz Ml90ICpxbWFuX2NoYW5uZWxzOworCit9OworCitzdHJ1Y3QgZm1fZHJ2c190IHsKKwlzdHJ1Y3Qg Zm1fZHJ2X3QgKnBfZm1fZGV2c1tOVU1fT0ZfRk1TXTsKK307CisKK3VpbnQzMl90IGdldF9xbWFu X2NoYW5uZWxfaWQoc3RydWN0IGZtX2Rydl90ICpwX2ZtX2RyLAorCQkJICAgICB1aW50MzJfdCBw b3J0X2lkLAorCQkJICAgICBlbnVtIGZtX3BvcnRfdHlwZSBwb3J0X3R5cGUsCisJCQkgICAgIGVu dW0gZm1fcG9ydF9zcGVlZCBwb3J0X3NwZWVkKTsKKworI2VuZGlmIC8qIF9fRk1fRFJWX0hfXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2Vu ZXRfZXh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvZW5ldF9l eHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFkZTg0Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2VuZXRf ZXh0LmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVz Y2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh cmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp dGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAg ICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFU SVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBFdGhlcm5ldCBnZW5l cmljIGRlZmluaXRpb25zIGFuZCBlbnVtcy4gKi8KKworI2lmbmRlZiBfX0VORVRfRVhUX0gKKyNk ZWZpbmUgX19FTkVUX0VYVF9ICisKKyNpbmNsdWRlICJmc2xfZW5ldC5oIgorCisvKiBOdW1iZXIg b2Ygb2N0ZXRzICg4LWJpdCBieXRlcykgaW4gYW4gZXRoZXJuZXQgYWRkcmVzcyAqLworI2RlZmlu ZSBFTkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1MgNgorLyogR3JvdXAgYWRkcmVzcyBtYXNrIGZv ciBldGhlcm5ldCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRU5FVF9HUk9VUF9BRERSCSAgICAweDAx CisKKy8qIEV0aGVybmV0IEFkZHJlc3MgKi8KK3R5cGVkZWYgdWludDhfdCBlbmV0X2FkZHJfdFtF TkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1NdOworCisvKiBFdGhlcm5ldCBNQUMtUEhZIEludGVy ZmFjZSAqLworZW51bSBldGhlcm5ldF9pbnRlcmZhY2UgeworCUVORVRfSUZfTUlJID0gRV9FTkVU X0lGX01JSSwJIC8qIE1JSSBpbnRlcmZhY2UgKi8KKwlFTkVUX0lGX1JNSUkgPSBFX0VORVRfSUZf Uk1JSSwgLyogUk1JSSBpbnRlcmZhY2UgKi8KKwlFTkVUX0lGX1NNSUkgPSBFX0VORVRfSUZfU01J SSwgLyogU01JSSBpbnRlcmZhY2UgKi8KKwlFTkVUX0lGX0dNSUkgPSBFX0VORVRfSUZfR01JSSwg LyogR01JSSBpbnRlcmZhY2UgKi8KKwlFTkVUX0lGX1JHTUlJID0gRV9FTkVUX0lGX1JHTUlJLAor CQkJCQkgLyogUkdNSUkgaW50ZXJmYWNlICovCisJRU5FVF9JRl9UQkkgPSBFX0VORVRfSUZfVEJJ LAkgLyogVEJJIGludGVyZmFjZSAqLworCUVORVRfSUZfUlRCSSA9IEVfRU5FVF9JRl9SVEJJLCAv KiBSVEJJIGludGVyZmFjZSAqLworCUVORVRfSUZfU0dNSUkgPSBFX0VORVRfSUZfU0dNSUksCisJ CQkJCSAvKiBTR01JSSBpbnRlcmZhY2UgKi8KKwlFTkVUX0lGX1hHTUlJID0gRV9FTkVUX0lGX1hH TUlJLAorCQkJCQkgLyogWEdNSUkgaW50ZXJmYWNlICovCisJRU5FVF9JRl9RU0dNSUkgPSBFX0VO RVRfSUZfUVNHTUlJLAorCQkJCQkgLyogUVNHTUlJIGludGVyZmFjZSAqLworCUVORVRfSUZfWEZJ ID0gRV9FTkVUX0lGX1hGSQkgLyogWEZJIGludGVyZmFjZSAqLworfTsKKworLyogU0dNSUkvUVNH SUkgaW50ZXJmYWNlIHdpdGggMTAwMEJhc2VYIGF1dG8tbmVnb3RpYXRpb24gYmV0d2VlbiBNQUMg YW5kIHBoeQorICogb3IgYmFja3BsYW5lOyBOb3RlOiAxMDAwQmFzZVggYXV0by1uZWdvdGlhdGlv biByZWxhdGVzIG9ubHkgdG8gaW50ZXJmYWNlCisgKiBiZXR3ZWVuIE1BQyBhbmQgcGh5L2JhY2tw bGFuZSwgU0dNSUkgcGh5IGNhbiBzdGlsbCBzeW5jaHJvbml6ZSB3aXRoIGZhci1lbmQKKyAqIHBo eSBhdCAxME1icHMsIDEwME1icHMgb3IgMTAwME1icHMKKyAqLworI2RlZmluZSBFTkVUX0lGX1NH TUlJX0JBU0VYICAgICAgIDB4ODAwMDAwMDAKKworLyogRXRoZXJuZXQgU3BlZWQgKG5vbWluYWwg ZGF0YSByYXRlKSAqLworZW51bSBldGhlcm5ldF9zcGVlZCB7CisJRU5FVF9TUEVFRF8xMCA9IEVf RU5FVF9TUEVFRF8xMCwJIC8qIDEwIE1icHMgKi8KKwlFTkVUX1NQRUVEXzEwMCA9IEVfRU5FVF9T UEVFRF8xMDAsCSAvKiAxMDAgTWJwcyAqLworCUVORVRfU1BFRURfMTAwMCA9IEVfRU5FVF9TUEVF RF8xMDAwLAkgLyogMTAwMCBNYnBzID0gMSBHYnBzICovCisJRU5FVF9TUEVFRF8xMDAwMCA9IEVf RU5FVF9TUEVFRF8xMDAwMAkgLyogMTAwMDAgTWJwcyA9IDEwIEdicHMgKi8KK307CisKKy8qIEV0 aGVybmV0IG1vZGUgKGNvbWJpbmF0aW9uIG9mIE1BQy1QSFkgaW50ZXJmYWNlIGFuZCBzcGVlZCkg Ki8KK2VudW0gZV9lbmV0X21vZGUgeworCUVORVRfTU9ERV9JTlZBTElEID0gMCwJLyogSW52YWxp ZCBFdGhlcm5ldCBtb2RlICovCisJLyogICAgMTAgTWJwcyBNSUkgICAqLworCUVORVRfTU9ERV9N SUlfMTAgPSAoRU5FVF9JRl9NSUkgfCBFTkVUX1NQRUVEXzEwKSwKKwkvKiAgIDEwMCBNYnBzIE1J SSAgICovCisJRU5FVF9NT0RFX01JSV8xMDAgPSAoRU5FVF9JRl9NSUkgfCBFTkVUX1NQRUVEXzEw MCksCisJLyogICAgMTAgTWJwcyBSTUlJICAqLworCUVORVRfTU9ERV9STUlJXzEwID0gKEVORVRf SUZfUk1JSSB8IEVORVRfU1BFRURfMTApLAorCS8qICAgMTAwIE1icHMgUk1JSSAgKi8KKwlFTkVU X01PREVfUk1JSV8xMDAgPSAoRU5FVF9JRl9STUlJIHwgRU5FVF9TUEVFRF8xMDApLAorCS8qICAg IDEwIE1icHMgU01JSSAgKi8KKwlFTkVUX01PREVfU01JSV8xMCA9IChFTkVUX0lGX1NNSUkgfCBF TkVUX1NQRUVEXzEwKSwKKwkvKiAgIDEwMCBNYnBzIFNNSUkgICovCisJRU5FVF9NT0RFX1NNSUlf MTAwID0gKEVORVRfSUZfU01JSSB8IEVORVRfU1BFRURfMTAwKSwKKwkvKiAgMTAwMCBNYnBzIEdN SUkgICovCisJRU5FVF9NT0RFX0dNSUlfMTAwMCA9IChFTkVUX0lGX0dNSUkgfCBFTkVUX1NQRUVE XzEwMDApLAorCS8qICAgIDEwIE1icHMgUkdNSUkgKi8KKwlFTkVUX01PREVfUkdNSUlfMTAgPSAo RU5FVF9JRl9SR01JSSB8IEVORVRfU1BFRURfMTApLAorCS8qICAgMTAwIE1icHMgUkdNSUkgKi8K KwlFTkVUX01PREVfUkdNSUlfMTAwID0gKEVORVRfSUZfUkdNSUkgfCBFTkVUX1NQRUVEXzEwMCks CisJLyogIDEwMDAgTWJwcyBSR01JSSAqLworCUVORVRfTU9ERV9SR01JSV8xMDAwID0gKEVORVRf SUZfUkdNSUkgfCBFTkVUX1NQRUVEXzEwMDApLAorCS8qICAxMDAwIE1icHMgVEJJICAgKi8KKwlF TkVUX01PREVfVEJJXzEwMDAgPSAoRU5FVF9JRl9UQkkgfCBFTkVUX1NQRUVEXzEwMDApLAorCS8q ICAxMDAwIE1icHMgUlRCSSAgKi8KKwlFTkVUX01PREVfUlRCSV8xMDAwID0gKEVORVRfSUZfUlRC SSB8IEVORVRfU1BFRURfMTAwMCksCisJLyogMTAgTWJwcyBTR01JSSB3aXRoIGF1dG8tbmVnb3Rp YXRpb24gYmV0d2VlbiBNQUMgYW5kCisJICogU0dNSUkgcGh5IGFjY29yZGluZyB0byBDaXNjbyBT R01JSSBzcGVjaWZpY2F0aW9uCisJICovCisJRU5FVF9NT0RFX1NHTUlJXzEwID0gKEVORVRfSUZf U0dNSUkgfCBFTkVUX1NQRUVEXzEwKSwKKwkvKiAxMDAgTWJwcyBTR01JSSB3aXRoIGF1dG8tbmVn b3RpYXRpb24gYmV0d2VlbiBNQUMgYW5kCisJICogU0dNSUkgcGh5IGFjY29yZGluZyB0byBDaXNj byBTR01JSSBzcGVjaWZpY2F0aW9uCisJICovCisJRU5FVF9NT0RFX1NHTUlJXzEwMCA9IChFTkVU X0lGX1NHTUlJIHwgRU5FVF9TUEVFRF8xMDApLAorCS8qIDEwMDAgTWJwcyBTR01JSSB3aXRoIGF1 dG8tbmVnb3RpYXRpb24gYmV0d2VlbiBNQUMgYW5kCisJICogU0dNSUkgcGh5IGFjY29yZGluZyB0 byBDaXNjbyBTR01JSSBzcGVjaWZpY2F0aW9uCisJICovCisJRU5FVF9NT0RFX1NHTUlJXzEwMDAg PSAoRU5FVF9JRl9TR01JSSB8IEVORVRfU1BFRURfMTAwMCksCisJLyogMTAgTWJwcyBTR01JSSB3 aXRoIDEwMDBCYXNlWCBhdXRvLW5lZ290aWF0aW9uIGJldHdlZW4KKwkgKiBNQUMgYW5kIFNHTUlJ IHBoeSBvciBiYWNrcGxhbmUKKwkgKi8KKwlFTkVUX01PREVfU0dNSUlfQkFTRVhfMTAgPQorCSAg ICAoRU5FVF9JRl9TR01JSV9CQVNFWCB8IEVORVRfSUZfU0dNSUkgfCBFTkVUX1NQRUVEXzEwKSwK KwkvKiAxMDAgTWJwcyBTR01JSSB3aXRoIDEwMDBCYXNlWCBhdXRvLW5lZ290aWF0aW9uIGJldHdl ZW4KKwkgKiBNQUMgYW5kIFNHTUlJIHBoeSBvciBiYWNrcGxhbmUKKwkgKi8KKwlFTkVUX01PREVf U0dNSUlfQkFTRVhfMTAwID0KKwkgICAgKEVORVRfSUZfU0dNSUlfQkFTRVggfCBFTkVUX0lGX1NH TUlJIHwgRU5FVF9TUEVFRF8xMDApLAorCS8qIDEwMDAgTWJwcyBTR01JSSB3aXRoIDEwMDBCYXNl WCBhdXRvLW5lZ290aWF0aW9uIGJldHdlZW4KKwkgKiBNQUMgYW5kIFNHTUlJIHBoeSBvciBiYWNr cGxhbmUKKwkgKi8KKwlFTkVUX01PREVfU0dNSUlfQkFTRVhfMTAwMCA9CisJICAgIChFTkVUX0lG X1NHTUlJX0JBU0VYIHwgRU5FVF9JRl9TR01JSSB8IEVORVRfU1BFRURfMTAwMCksCisJLyogMTAw MCBNYnBzIFFTR01JSSB3aXRoIGF1dG8tbmVnb3RpYXRpb24gYmV0d2VlbiBNQUMgYW5kCisJICog UVNHTUlJIHBoeSBhY2NvcmRpbmcgdG8gQ2lzY28gUVNHTUlJIHNwZWNpZmljYXRpb24KKwkgKi8K KwlFTkVUX01PREVfUVNHTUlJXzEwMDAgPSAoRU5FVF9JRl9RU0dNSUkgfCBFTkVUX1NQRUVEXzEw MDApLAorCS8qIDEwMDAgTWJwcyBRU0dNSUkgd2l0aCAxMDAwQmFzZVggYXV0by1uZWdvdGlhdGlv biBiZXR3ZWVuCisJICogTUFDIGFuZCBRU0dNSUkgcGh5IG9yIGJhY2twbGFuZQorCSAqLworCUVO RVRfTU9ERV9RU0dNSUlfQkFTRVhfMTAwMCA9CisJICAgIChFTkVUX0lGX1NHTUlJX0JBU0VYIHwg RU5FVF9JRl9RU0dNSUkgfCBFTkVUX1NQRUVEXzEwMDApLAorCS8qIDEwMDAwIE1icHMgWEdNSUkg Ki8KKwlFTkVUX01PREVfWEdNSUlfMTAwMDAgPSAoRU5FVF9JRl9YR01JSSB8IEVORVRfU1BFRURf MTAwMDApLAorCS8qIDEwMDAwIE1icHMgWEZJICovCisJRU5FVF9NT0RFX1hGSV8xMDAwMCA9IChF TkVUX0lGX1hGSSB8IEVORVRfU1BFRURfMTAwMDApCit9OworCisjZGVmaW5lIElTX0VORVRfTU9E RV9WQUxJRChtb2RlKQkJCVwKKwkoKChtb2RlKSA9PSBFTkVUX01PREVfTUlJXzEwKSB8fAkJXAor CSgobW9kZSkgPT0gRU5FVF9NT0RFX01JSV8xMDApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01P REVfUk1JSV8xMCkgfHwJCVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9STUlJXzEwMCkgfHwJCVwK KwkoKG1vZGUpID09IEVORVRfTU9ERV9TTUlJXzEwKSB8fAkJXAorCSgobW9kZSkgPT0gRU5FVF9N T0RFX1NNSUlfMTAwKSB8fAkJXAorCSgobW9kZSkgPT0gRU5FVF9NT0RFX0dNSUlfMTAwMCkgfHwJ CVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9SR01JSV8xMCkgfHwJCVwKKwkoKG1vZGUpID09IEVO RVRfTU9ERV9SR01JSV8xMDApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01PREVfUkdNSUlfMTAw MCkgfHwJCVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9UQklfMTAwMCkgfHwJCVwKKwkoKG1vZGUp ID09IEVORVRfTU9ERV9SVEJJXzEwMDApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01PREVfU0dN SUlfMTApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01PREVfU0dNSUlfMTAwKSB8fAkJXAorCSgo bW9kZSkgPT0gRU5FVF9NT0RFX1NHTUlJXzEwMDApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01P REVfU0dNSUlfQkFTRVhfMTApIHx8CVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9TR01JSV9CQVNF WF8xMDApIHx8CVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9TR01JSV9CQVNFWF8xMDAwKSB8fAlc CisJKChtb2RlKSA9PSBFTkVUX01PREVfWEdNSUlfMTAwMDApIHx8CQlcCisJKChtb2RlKSA9PSBF TkVUX01PREVfUVNHTUlJXzEwMDApIHx8CQlcCisJKChtb2RlKSA9PSBFTkVUX01PREVfUVNHTUlJ X0JBU0VYXzEwMDApIHx8CVwKKwkoKG1vZGUpID09IEVORVRfTU9ERV9YRklfMTAwMDApKQorCisj ZGVmaW5lIE1BS0VfRU5FVF9NT0RFKF9pbnRlcmZhY2UsIF9zcGVlZCkgXAorCQkgICAgICAoZW51 bSBlX2VuZXRfbW9kZSkoKF9pbnRlcmZhY2UpIHwgKF9zcGVlZCkpCisKKyNkZWZpbmUgRU5FVF9J TlRFUkZBQ0VfRlJPTV9NT0RFKG1vZGUpIFwKKwkJCQkoZW51bSBldGhlcm5ldF9pbnRlcmZhY2Up KChtb2RlKSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIEVORVRfU1BFRURfRlJPTV9NT0RFKG1vZGUp IFwKKwkJCSAgICAoZW51bSBldGhlcm5ldF9zcGVlZCkoKG1vZGUpICYgMHgwMDAwRkZGRikKKwor I2RlZmluZSBFTkVUX0FERFJfVE9fVUlOVDY0KF9lbmV0X2FkZHIpCQkgIFwKKwkodWludDY0X3Qp KCgodWludDY0X3QpKF9lbmV0X2FkZHIpWzBdIDw8IDQwKSB8ICAgXAorCQkgICAoKHVpbnQ2NF90 KShfZW5ldF9hZGRyKVsxXSA8PCAzMikgfCAgIFwKKwkJICAgKCh1aW50NjRfdCkoX2VuZXRfYWRk cilbMl0gPDwgMjQpIHwgICBcCisJCSAgICgodWludDY0X3QpKF9lbmV0X2FkZHIpWzNdIDw8IDE2 KSB8ICAgXAorCQkgICAoKHVpbnQ2NF90KShfZW5ldF9hZGRyKVs0XSA8PCA4KSB8ICAgIFwKKwkJ ICAgKCh1aW50NjRfdCkoX2VuZXRfYWRkcilbNV0pKQorCisjZGVmaW5lIE1BS0VfRU5FVF9BRERS X0ZST01fVUlOVDY0KF9hZGRyNjQsIF9lbmV0X2FkZHIpIFwKKwlkbyB7IFwKKwkJaW50IGk7IFwK KwkJZm9yIChpID0gMDsgaSA8IEVORVRfTlVNX09DVEVUU19QRVJfQUREUkVTUzsgaSsrKSBcCisJ CQkoX2VuZXRfYWRkcilbaV0gPSBcCisJCQkodWludDhfdCkoKF9hZGRyNjQpID4+ICgoNSAtIGkp ICogOCkpOyBcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fRU5FVF9FWFRfSCAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2ZtX2V4dC5o IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2ZtX2V4dC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNWQ5NjQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvZm1fZXh0LmgKQEAgLTAs MCArMSw0NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29u ZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICog ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt ZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBp dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMg c29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5z ZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMn JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFC TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGTSBBcHBsaWNhdGlvbiBQcm9ncmFtbWlu ZyBJbnRlcmZhY2UuICovCisjaWZuZGVmIF9fRk1fRVhUCisjZGVmaW5lIF9fRk1fRVhUCisKKyNp bmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiZnNsX2ZtYW5fc3AuaCIKKworLyogRW51bSBm b3IgZGVmaW5pbmcgcG9ydCB0eXBlcyAqLworZW51bSBmbV9wb3J0X3R5cGUgeworCUZNX1BPUlRf VFlQRV9PUCA9IDAsCS8qIE9QIFBvcnQgKi8KKwlGTV9QT1JUX1RZUEVfVFgsCS8qIFRYIFBvcnQg Ki8KKwlGTV9QT1JUX1RZUEVfUlgsCS8qIFJYIFBvcnQgKi8KKwlGTV9QT1JUX1RZUEVfRFVNTVkK K307CisKKy8qIEVudW0gZm9yIGRlZmluaW5nIHBvcnQgc3BlZWQgKi8KK2VudW0gZm1fcG9ydF9z cGVlZCB7CisJRk1fUE9SVF9TUEVFRF8xRyA9IDAsCQkvKiAxRyBwb3J0ICovCisJRk1fUE9SVF9T UEVFRF8xMEcsCQkvKiAxMEcgcG9ydCAqLworCUZNX1BPUlRfU1BFRURfT1AKK307CisKKy8qIEJN YW4gZGVmaW5lcyAqLworI2RlZmluZSBCTV9NQVhfTlVNX09GX1BPT0xTCQk2NCAvKiBCdWZmZXJz IHBvb2xzICovCisjZGVmaW5lIEZNX1BPUlRfTUFYX05VTV9PRl9FWFRfUE9PTFMJOCAgLyogRXh0 ZXJuYWwgQk0gcG9vbHMgcGVyIFJ4IHBvcnQgKi8KKworLyogR2VuZXJhbCBGTSBkZWZpbmVzICov CisjZGVmaW5lIEZNX01BWF9OVU1fT0ZfUEFSVElUSU9OUyAgICA2NAkgLyogTWF4aW11bSBudW1i ZXIgb2YgcGFydGl0aW9ucyAqLworCisvKiBGTSBGcmFtZSBkZXNjcmlwdG9yIG1hY3JvcyAgKi8K Ky8qIEZyYW1lIHF1ZXVlIENvbnRleHQgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgRk1fRkRfQ01EX0ZD TyAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEZNX0ZEX0NNRF9SUEQgICAg ICAgICAgICAgICAgICAgMHg0MDAwMDAwMCAgLyogUmVhZCBQcmVwZW5kZWQgRGF0YSAqLworI2Rl ZmluZSBGTV9GRF9DTURfRFRDICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAgIC8qIERvIEw0 IENoZWNrc3VtICovCisKKy8qIE5vdCBmb3IgUngtUG9ydCEgVW5zdXBwb3J0ZWQgRm9ybWF0ICov CisjZGVmaW5lIEZNX0ZEX0VSUl9VTlNVUFBPUlRFRF9GT1JNQVQgICAgMHgwNDAwMDAwMAorLyog Tm90IGZvciBSeC1Qb3J0ISBMZW5ndGggRXJyb3IgKi8KKyNkZWZpbmUgRk1fRkRfRVJSX0xFTkdU SCAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEZNX0ZEX0VSUl9ETUEgICAgICAg ICAgICAgICAgICAgMHgwMTAwMDAwMCAgLyogRE1BIERhdGEgZXJyb3IgKi8KKworLyogSVBSIGZy YW1lIChub3QgZXJyb3IpICovCisjZGVmaW5lIEZNX0ZEX0lQUiAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDAwMDAwMQorLyogSVBSIG5vbi1jb25zaXN0ZW50LXNwICovCisjZGVmaW5lIEZNX0ZE X0VSUl9JUFJfTkNTUCAgICAgICAgICAgICAgKDB4MDAxMDAwMDAgfCBGTV9GRF9JUFIpCisvKiBJ UFIgZXJyb3IgKi8KKyNkZWZpbmUgRk1fRkRfRVJSX0lQUiAgICAgICAgICAgICAgICAgICAoMHgw MDIwMDAwMCB8IEZNX0ZEX0lQUikKKy8qIElQUiB0aW1lb3V0ICovCisjZGVmaW5lIEZNX0ZEX0VS Ul9JUFJfVE8gICAgICAgICAgICAgICAgKDB4MDAzMDAwMDAgfCBGTV9GRF9JUFIpCisKKy8qIFJ4 IEZJRk8gb3ZlcmZsb3csIEZDUyBlcnJvciwgY29kZSBlcnJvciwgcnVubmluZyBkaXNwYXJpdHkg ZXJyb3IKKyAqIChTR01JSSBhbmQgVEJJIG1vZGVzKSwgRklGTyBwYXJpdHkgZXJyb3IuIFBIWSBT ZXF1ZW5jZSBlcnJvciwKKyAqIFBIWSBlcnJvciBjb250cm9sIGNoYXJhY3RlciBkZXRlY3RlZC4K KyAqLworI2RlZmluZSBGTV9GRF9FUlJfUEhZU0lDQUwgICAgICAgICAgICAgIDB4MDAwODAwMDAK Ky8qIEZyYW1lIHRvbyBsb25nIE9SIEZyYW1lIHNpemUgZXhjZWVkcyBtYXhfbGVuZ3RoX2ZyYW1l ICAqLworI2RlZmluZSBGTV9GRF9FUlJfU0laRSAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAK Ky8qIGNsYXNzaWZpY2F0aW9uIGRpc2NhcmQgKi8KKyNkZWZpbmUgRk1fRkRfRVJSX0NMU19ESVND QVJEICAgICAgICAgICAweDAwMDIwMDAwCisvKiBFeHRyYWN0IE91dCBvZiBGcmFtZSAqLworI2Rl ZmluZSBGTV9GRF9FUlJfRVhUUkFDVElPTiAgICAgICAgICAgIDB4MDAwMDgwMDAKKy8qIE5vIFNj aGVtZSBTZWxlY3RlZCAqLworI2RlZmluZSBGTV9GRF9FUlJfTk9fU0NIRU1FICAgICAgICAgICAg IDB4MDAwMDQwMDAKKy8qIEtleXNpemUgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgRk1fRkRfRVJSX0tF WVNJWkVfT1ZFUkZMT1cgICAgICAweDAwMDAyMDAwCisvKiBGcmFtZSBjb2xvciBpcyByZWQgKi8K KyNkZWZpbmUgRk1fRkRfRVJSX0NPTE9SX1JFRCAgICAgICAgICAgICAweDAwMDAwODAwCisvKiBG cmFtZSBjb2xvciBpcyB5ZWxsb3cgKi8KKyNkZWZpbmUgRk1fRkRfRVJSX0NPTE9SX1lFTExPVyAg ICAgICAgICAweDAwMDAwNDAwCisvKiBQYXJzZXIgVGltZSBvdXQgRXhjZWVkICovCisjZGVmaW5l IEZNX0ZEX0VSUl9QUlNfVElNRU9VVCAgICAgICAgICAgMHgwMDAwMDA4MAorLyogSW52YWxpZCBT b2Z0IFBhcnNlciBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBGTV9GRF9FUlJfUFJTX0lMTF9JTlNU UlVDVCAgICAgIDB4MDAwMDAwNDAKKy8qIEhlYWRlciBlcnJvciB3YXMgaWRlbnRpZmllZCBkdXJp bmcgcGFyc2luZyAqLworI2RlZmluZSBGTV9GRF9FUlJfUFJTX0hEUl9FUlIgICAgICAgICAgIDB4 MDAwMDAwMjAKKy8qIEZyYW1lIHBhcnNlZCBiZXlpbmQgMjU2IGZpcnN0IGJ5dGVzICovCisjZGVm aW5lIEZNX0ZEX0VSUl9CTE9DS19MSU1JVF9FWENFRURFRCAgMHgwMDAwMDAwOAorCisvKiBub24g RnJhbWUtTWFuYWdlciBlcnJvciAqLworI2RlZmluZSBGTV9GRF9SWF9TVEFUVVNfRVJSX05PTl9G TSAgICAgIDB4MDA0MDAwMDAKKworLyogRk0gcGh5c2ljYWwgQWRkcmVzcyAqLworc3RydWN0IGZt X3BoeXNfYWRkcl90IHsKKwl1aW50OF90IGhpZ2g7CSAgICAgIC8qIEhpZ2ggcGFydCBvZiB0aGUg cGh5c2ljYWwgYWRkcmVzcyAqLworCXVpbnQzMl90IGxvdzsJICAgICAgLyogTG93IHBhcnQgb2Yg dGhlIHBoeXNpY2FsIGFkZHJlc3MgKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwor CisvKiBQYXJzZSByZXN1bHRzIG1lbW9yeSBsYXlvdXQgKi8KK3N0cnVjdCBmbV9wcnNfcmVzdWx0 X3QgeworCSB1aW50OF90IGxwaWQ7CQkgICAgIC8qIExvZ2ljYWwgcG9ydCBpZCAqLworCSB1aW50 OF90IHNoaW1yOwkJICAgICAvKiBTaGltIGhlYWRlciByZXN1bHQgICovCisJIHVpbnQxNl90IGwy cjsJCSAgICAgLyogTGF5ZXIgMiByZXN1bHQgKi8KKwkgdWludDE2X3QgbDNyOwkJICAgICAvKiBM YXllciAzIHJlc3VsdCAqLworCSB1aW50OF90IGw0cjsJCSAgICAgLyogTGF5ZXIgNCByZXN1bHQg Ki8KKwkgdWludDhfdCBjcGxhbjsJCSAgICAgLyogQ2xhc3NpZmljYXRpb24gcGxhbiBpZCAqLwor CSB1aW50MTZfdCBueHRoZHI7CSAgICAgLyogTmV4dCBIZWFkZXIgICovCisJIHVpbnQxNl90IGNr c3VtOwkgICAgIC8qIFJ1bm5pbmctc3VtICovCisJLyogRmxhZ3MmZnJhZ21lbnQtb2Zmc2V0IGZp ZWxkIG9mIHRoZSBsYXN0IElQLWhlYWRlciAqLworCSB1aW50MTZfdCBmbGFnc19mcmFnX29mZjsK KwkvKiBSb3V0aW5nIHR5cGUgZmllbGQgb2YgYSBJUFY2IHJvdXRpbmcgZXh0ZW5zaW9uIGhlYWRl ciAqLworCSB1aW50OF90IHJvdXRlX3R5cGU7CisJLyogUm91dGluZyBFeHRlbnNpb24gSGVhZGVy IFByZXNlbnQ7IGxhc3QgYml0IGlzIElQIHZhbGlkICovCisJIHVpbnQ4X3QgcmhwX2lwX3ZhbGlk OworCSB1aW50OF90IHNoaW1fb2ZmWzJdOwkgICAgIC8qIFNoaW0gb2Zmc2V0ICovCisJLyogSVAg UElEIChsYXN0IElQLXByb3RvKSBvZmZzZXQgKi8KKwkgdWludDhfdCBpcF9waWRfb2ZmOworCSB1 aW50OF90IGV0aF9vZmY7CSAgICAgLyogRVRIIG9mZnNldCAqLworCSB1aW50OF90IGxsY19zbmFw X29mZjsJICAgICAvKiBMTENfU05BUCBvZmZzZXQgKi8KKwkgdWludDhfdCB2bGFuX29mZlsyXTsJ ICAgICAvKiBWTEFOIG9mZnNldCAqLworCSB1aW50OF90IGV0eXBlX29mZjsJICAgICAvKiBFVFlQ RSBvZmZzZXQgKi8KKwkgdWludDhfdCBwcHBvZV9vZmY7CSAgICAgLyogUFBQIG9mZnNldCAqLwor CSB1aW50OF90IG1wbHNfb2ZmWzJdOwkgICAgIC8qIE1QTFMgb2Zmc2V0ICovCisJIHVpbnQ4X3Qg aXBfb2ZmWzJdOwkgICAgIC8qIElQIG9mZnNldCAqLworCSB1aW50OF90IGdyZV9vZmY7CSAgICAg LyogR1JFIG9mZnNldCAqLworCSB1aW50OF90IGw0X29mZjsJICAgICAvKiBMYXllciA0IG9mZnNl dCAqLworCSB1aW50OF90IG54dGhkcl9vZmY7CSAgICAgLyogUGFyc2VyIGVuZCBwb2ludCAqLwor fSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qIEB9ICovCisKKy8qIEZNIEV4Y2Vw dGlvbnMgKi8KK2VudW0gZm1fZXhjZXB0aW9ucyB7CisJRk1fRVhfRE1BX0JVU19FUlJPUiA9IDAs CS8qIERNQSBidXMgZXJyb3IuICovCisJLyogUmVhZCBCdWZmZXIgRUNDIGVycm9yIChWYWxpZCBm b3IgRk0gcmV2IDwgNikqLworCUZNX0VYX0RNQV9SRUFEX0VDQywKKwkvKiBXcml0ZSBCdWZmZXIg RUNDIGVycm9yIG9uIHN5c3RlbSBzaWRlIChWYWxpZCBmb3IgRk0gcmV2IDwgNikqLworCUZNX0VY X0RNQV9TWVNURU1fV1JJVEVfRUNDLAorCS8qIFdyaXRlIEJ1ZmZlciBFQ0MgZXJyb3Igb24gRk0g c2lkZSAoVmFsaWQgZm9yIEZNIHJldiA8IDYpKi8KKwlGTV9FWF9ETUFfRk1fV1JJVEVfRUNDLAor CS8qIFNpbmdsZSBQb3J0IEVDQyBlcnJvciBvbiBGTSBzaWRlIChWYWxpZCBmb3IgRk0gcmV2ID4g NikqLworCUZNX0VYX0RNQV9TSU5HTEVfUE9SVF9FQ0MsCisJRk1fRVhfRlBNX1NUQUxMX09OX1RB U0tTLAkvKiBTdGFsbCBvZiB0YXNrcyBvbiBGUE0gKi8KKwlGTV9FWF9GUE1fU0lOR0xFX0VDQywJ CS8qIFNpbmdsZSBFQ0Mgb24gRlBNLiAqLworCS8qIERvdWJsZSBFQ0MgZXJyb3Igb24gRlBNIHJh bSBhY2Nlc3MgKi8KKwlGTV9FWF9GUE1fRE9VQkxFX0VDQywKKwlGTV9FWF9RTUlfU0lOR0xFX0VD QywJCS8qIFNpbmdsZSBFQ0Mgb24gUU1JLiAqLworCUZNX0VYX1FNSV9ET1VCTEVfRUNDLAkJLyog RG91YmxlIGJpdCBFQ0Mgb2NjdXJyZWQgb24gUU1JICovCisJRk1fRVhfUU1JX0RFUV9GUk9NX1VO S05PV05fUE9SVElELAorCQkJCQkvKiBEZXF1ZXVlIGZyb20gdW5rbm93biBwb3J0IGlkICovCisJ Rk1fRVhfQk1JX0xJU1RfUkFNX0VDQywJLyogTGlua2VkIExpc3QgUkFNIEVDQyBlcnJvciAqLwor CUZNX0VYX0JNSV9TVE9SQUdFX1BST0ZJTEVfRUNDLC8qIFN0b3JhZ2UgUHJvZmlsZSBFQ0MgRXJy b3IgKi8KKwkvKiBTdGF0aXN0aWNzIENvdW50IFJBTSBFQ0MgRXJyb3IgRW5hYmxlICovCisJRk1f RVhfQk1JX1NUQVRJU1RJQ1NfUkFNX0VDQywKKwlGTV9FWF9CTUlfRElTUEFUQ0hfUkFNX0VDQywJ LyogRGlzcGF0Y2ggUkFNIEVDQyBFcnJvciBFbmFibGUgKi8KKwlGTV9FWF9JUkFNX0VDQywJCS8q IERvdWJsZSBiaXQgRUNDIG9jY3VycmVkIG9uIElSQU0qLworCUZNX0VYX01VUkFNX0VDQwkJLyog RG91YmxlIGJpdCBFQ0Mgb2NjdXJyZWQgb24gTVVSQU0qLworfTsKKworLyogIGZtX2V4Y2VwdGlv bnNfY2IKKyAqICAgRXhjZXB0aW9ucyB1c2VyIGNhbGxiYWNrIHJvdXRpbmUsIHdpbGwgYmUgY2Fs bGVkIHVwb24gYW4KKyAqCQlleGNlcHRpb24gcGFzc2luZyB0aGUgZXhjZXB0aW9uIGlkZW50aWZp Y2F0aW9uLgorICogICBoX2FwcCAgICAgIC0gVXNlcidzIGFwcGxpY2F0aW9uIGRlc2NyaXB0b3Iu CisgKiAgIGV4Y2VwdGlvbiAgLSBUaGUgZXhjZXB0aW9uLgorICovCit0eXBlZGVmIHZvaWQgKGZt X2V4Y2VwdGlvbnNfY2IpICh2b2lkICpoX2FwcCwKKwkJCQkgZW51bSBmbV9leGNlcHRpb25zIGV4 Y2VwdGlvbik7CisKKy8qICBmbV9idXNfZXJyb3JfY2IKKyAqICAgQnVzIGVycm9yIHVzZXIgY2Fs bGJhY2sgcm91dGluZSwgd2lsbCBiZSBjYWxsZWQgdXBvbiBhCisgKgkJYnVzIGVycm9yLCBwYXNz aW5nIHBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZAorICoJCXRoZSBvd25lci4K KyAqICAgaF9hcHAgICAgICAgLSBVc2VyJ3MgYXBwbGljYXRpb24gZGVzY3JpcHRvci4KKyAqICAg cG9ydF90eXBlICAgIC0gUG9ydCB0eXBlIChlbnVtIGZtX3BvcnRfdHlwZSkKKyAqICAgcG9ydF9p ZCAgICAgIC0gUG9ydCBpZCAtIHJlbGF0aXZlIHRvIHR5cGUuCisgKiAgIGFkZHIgICAgICAgIC0g QWRkcmVzcyB0aGF0IGNhdXNlZCB0aGUgZXJyb3IKKyAqICAgdG51bSAgICAgICAgLSBPd25lciBv ZiBlcnJvcgorICogICBsaW9kbiAgICAgICAtIExvZ2ljYWwgSU8gZGV2aWNlIG51bWJlcgorICov Cit0eXBlZGVmIHZvaWQgKGZtX2J1c19lcnJvcl9jYikgKHZvaWQgKmhfYXBwLAorCQkJCWVudW0g Zm1fcG9ydF90eXBlIHBvcnRfdHlwZSwKKwkJCQl1aW50OF90IHBvcnRfaWQsCisJCQkJdWludDY0 X3QgYWRkciwKKwkJCQl1aW50OF90IHRudW0sIHVpbnQxNl90IGxpb2RuKTsKKworLyogQSBzdHJ1 Y3R1cmUgZm9yIGRlZmluaW5nIGJ1ZmZlciBwcmVmaXggYXJlYSBjb250ZW50LiAqLworc3RydWN0 IGZtX2J1ZmZlcl9wcmVmaXhfY29udGVudF90IHsKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUg bGVmdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBleHRlcm5hbAorCSAqIGJ1ZmZlcjsgTm90ZSB0 aGF0IHRoZSBwcml2YXRlLWFyZWEgd2lsbCBzdGFydCBmcm9tIHRoZSBiYXNlCisJICogb2YgdGhl IGJ1ZmZlciBhZGRyZXNzLgorCSAqLworCXVpbnQxNl90IHByaXZfZGF0YV9zaXplOworCS8qIHRy dWUgdG8gcGFzcyB0aGUgcGFyc2UgcmVzdWx0IHRvL2Zyb20gdGhlIEZNOworCSAqIFVzZXIgbWF5 IHVzZSBGTV9QT1JUX0dldEJ1ZmZlclByc1Jlc3VsdCgpIGluCisJICogb3JkZXIgdG8gZ2V0IHRo ZSBwYXJzZXItcmVzdWx0IGZyb20gYSBidWZmZXIuCisJICovCisJYm9vbCBwYXNzX3Byc19yZXN1 bHQ7CisJLyogdHJ1ZSB0byBwYXNzIHRoZSB0aW1lU3RhbXAgdG8vZnJvbSB0aGUgRk0gVXNlciBt YXkgdXNlCisJICogZm1fcG9ydF9nZXRfYnVmZmVyX3RpbWVfc3RhbXAoKSBpbiBvcmRlciB0byBn ZXQgdGhlCisJICogcGFyc2VyLXJlc3VsdCBmcm9tIGEgYnVmZmVyLgorCSAqLworCWJvb2wgcGFz c190aW1lX3N0YW1wOworCS8qIHRydWUgdG8gcGFzcyB0aGUgS0cgaGFzaCByZXN1bHQgdG8vZnJv bSB0aGUgRk0gVXNlciBtYXkKKwkgKiB1c2UgRk1fUE9SVF9HZXRCdWZmZXJIYXNoUmVzdWx0KCkg aW4gb3JkZXIgdG8gZ2V0IHRoZQorCSAqIHBhcnNlci1yZXN1bHQgZnJvbSBhIGJ1ZmZlci4KKwkg Ki8KKwlib29sIHBhc3NfaGFzaF9yZXN1bHQ7CisJLyogQWRkIGFsbCBvdGhlciBJbnRlcm5hbC1D b250ZXh0IGluZm9ybWF0aW9uOiBBRCwKKwkgKiBoYXNoLXJlc3VsdCwga2V5LCBldGMuCisJICov CisJdWludDE2X3QgZGF0YV9hbGlnbjsKK307CisKKy8qIEEgc3RydWN0dXJlIG9mIGluZm9ybWF0 aW9uIGFib3V0IGVhY2ggb2YgdGhlIGV4dGVybmFsCisgKiBidWZmZXIgcG9vbHMgdXNlZCBieSBh IHBvcnQgb3Igc3RvcmFnZS1wcm9maWxlLgorICovCitzdHJ1Y3QgZm1fZXh0X3Bvb2xfcGFyYW1z X3QgeworCXVpbnQ4X3QgaWQ7CQkgICAgLyogRXh0ZXJuYWwgYnVmZmVyIHBvb2wgaWQgKi8KKwl1 aW50MTZfdCBzaXplOwkJICAgIC8qIEV4dGVybmFsIGJ1ZmZlciBwb29sIGJ1ZmZlciBzaXplICov Cit9OworCisvKiBBIHN0cnVjdHVyZSBmb3IgaW5mb3JtaW5nIHRoZSBkcml2ZXIgYWJvdXQgdGhl IGV4dGVybmFsCisgKiBidWZmZXIgcG9vbHMgYWxsb2NhdGVkIGluIHRoZSBCTSBhbmQgdXNlZCBi eSBhIHBvcnQgb3IgYQorICogc3RvcmFnZS1wcm9maWxlLgorICovCitzdHJ1Y3QgZm1fZXh0X3Bv b2xzX3QgeworCXVpbnQ4X3QgbnVtX29mX3Bvb2xzX3VzZWQ7IC8qIE51bWJlciBvZiBwb29scyB1 c2UgYnkgdGhpcyBwb3J0ICovCisJc3RydWN0IGZtX2V4dF9wb29sX3BhcmFtc190IGV4dF9idWZf cG9vbFtGTV9QT1JUX01BWF9OVU1fT0ZfRVhUX1BPT0xTXTsKKwkJCQkJLyogUGFyYW1ldGVycyBm b3IgZWFjaCBwb3J0ICovCit9OworCisvKiBBIHN0cnVjdHVyZSBmb3IgZGVmaW5pbmcgYmFja3Vw IEJNIFBvb2xzLiAqLworc3RydWN0IGZtX2JhY2t1cF9ibV9wb29sc190IHsKKwkvKiBOdW1iZXIg b2YgQk0gYmFja3VwIHBvb2xzIC0gIG11c3QgYmUgc21hbGxlcgorCSAqIHRoYW4gdGhlIHRvdGFs IG51bWJlciBvZiBwb29scyBkZWZpbmVkIGZvciB0aGUgc3BlY2lmaWVkIHBvcnQuCisJICovCisJ dWludDhfdCBudW1fb2ZfYmFja3VwX3Bvb2xzOworCS8qIG51bV9vZl9iYWNrdXBfcG9vbHMgcG9v bCBpZCdzLCBzcGVjaWZ5aW5nIHdoaWNoIHBvb2xzIHNob3VsZAorCSAqIGJlIHVzZWQgb25seSBh cyBiYWNrdXAuIFBvb2wgaWQncyBzcGVjaWZpZWQgaGVyZSBtdXN0IGJlIGEKKwkgKiBzdWJzZXQg b2YgdGhlIHBvb2xzIHVzZWQgYnkgdGhlIHNwZWNpZmllZCBwb3J0LgorCSAqLworCXVpbnQ4X3Qg cG9vbF9pZHNbRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09MU107Cit9OworCisvKiBBIHN0cnVj dHVyZSBmb3IgZGVmaW5pbmcgQk0gcG9vbCBkZXBsZXRpb24gY3JpdGVyaWEgKi8KK3N0cnVjdCBm bV9idWZfcG9vbF9kZXBsZXRpb25fdCB7CisJLyogc2VsZWN0IG1vZGUgaW4gd2hpY2ggcGF1c2Ug ZnJhbWVzIHdpbGwgYmUgc2VudCBhZnRlciBhCisJICogbnVtYmVyIG9mIHBvb2xzIChhbGwgdG9n ZXRoZXIhKSBhcmUgZGVwbGV0ZWQKKwkgKi8KKwlib29sIHBvb2xzX2dycF9tb2RlX2VuYWJsZTsK KwkvKiB0aGUgbnVtYmVyIG9mIGRlcGxldGVkIHBvb2xzIHRoYXQgd2lsbCBpbnZva2UgcGF1c2UK KwkgKiBmcmFtZXMgdHJhbnNtaXNzaW9uLgorCSAqLworCXVpbnQ4X3QgbnVtX29mX3Bvb2xzOwor CS8qIEZvciBlYWNoIHBvb2wsIHRydWUgaWYgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yCisJ ICogZGVwbGV0aW9uIChOb3RlIC0gdGhpcyBwb29sIG11c3QgYmUgdXNlZCBieSB0aGlzIHBvcnQh KS4KKwkgKi8KKwlib29sIHBvb2xzX3RvX2NvbnNpZGVyW0JNX01BWF9OVU1fT0ZfUE9PTFNdOwor CS8qIHNlbGVjdCBtb2RlIGluIHdoaWNoIHBhdXNlIGZyYW1lcyB3aWxsIGJlIHNlbnQKKwkgKiBh ZnRlciBhIHNpbmdsZS1wb29sIGlzIGRlcGxldGVkOworCSAqLworCWJvb2wgc2luZ2xlX3Bvb2xf bW9kZV9lbmFibGU7CisJLyogRm9yIGVhY2ggcG9vbCwgdHJ1ZSBpZiBpdCBzaG91bGQgYmUgY29u c2lkZXJlZAorCSAqIGZvciBkZXBsZXRpb24gKE5vdGUgLSB0aGlzIHBvb2wgbXVzdCBiZSB1c2Vk IGJ5IHRoaXMgcG9ydCEpCisJICovCisJYm9vbCBwb29sc190b19jb25zaWRlcl9mb3Jfc2luZ2xl X21vZGVbQk1fTUFYX05VTV9PRl9QT09MU107Cit9OworCisvKiBBIFN0cnVjdHVyZSBmb3IgZGVm aW5pbmcgVWNvZGUgcGF0Y2ggZm9yIGxvYWRpbmcuICovCitzdHJ1Y3QgZm1fZmlybXdhcmVfcGFy YW1zX3QgeworCXVpbnQzMl90IHNpemU7CQkJLyogU2l6ZSBvZiB1Q29kZSAqLworCXVpbnQzMl90 ICpwX2NvZGU7CQkvKiBBIHBvaW50ZXIgdG8gdGhlIHVDb2RlICovCit9OworCisvKiBBIFN0cnVj dHVyZSBmb3IgZGVmaW5pbmcgRk0gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyAqLworc3RydWN0 IGZtX3BhcmFtc190IHsKKwl1aW50OF90IGZtX2lkOworCS8qIEluZGV4IG9mIHRoZSBGTSAqLwor CXVpbnRwdHJfdCBiYXNlX2FkZHI7CisJLyogQSBwb2ludGVyIHRvIGJhc2Ugb2YgbWVtb3J5IG1h cHBlZCBGTSByZWdpc3RlcnMgKHZpcnR1YWwpOworCSAqIE5PVEUgdGhhdCB0aGlzIHNob3VsZCBp bmNsdWRlIEFMTCBjb21tb24gcmVnaXN0ZXJzIG9mIHRoZSBGTQorCSAqIGluY2x1ZGluZyB0aGUg UENEIHJlZ2lzdGVycyBhcmVhLgorCSAqLworCXN0cnVjdCBtdXJhbV9pbmZvICpwX211cmFtOwor CS8qIEEgcG9pbnRlciB0byBhbiBpbml0aWFsaXplZCBNVVJBTSBvYmplY3QsIHRvIGJlIHVzZWQg YnkgdGhlIEZNLiAqLworCXVpbnQxNl90IGZtX2Nsa19mcmVxOworCS8qIEluIE1oejsgKi8KKwlm bV9leGNlcHRpb25zX2NiICpmX2V4Y2VwdGlvbjsKKwkvKiBBbiBhcHBsaWNhdGlvbiBjYWxsYmFj ayByb3V0aW5lIHRvIGhhbmRsZSBleGNlcHRpb25zOyAqLworCWZtX2J1c19lcnJvcl9jYiAqZl9i dXNfZXJyb3I7CisJLyogQW4gYXBwbGljYXRpb24gY2FsbGJhY2sgcm91dGluZSB0byBoYW5kbGUg ZXhjZXB0aW9uczsgKi8KKwl2b2lkICpoX2FwcDsKKwkvKiBBIGhhbmRsZSB0byBhbiBhcHBsaWNh dGlvbiBsYXllciBvYmplY3Q7IFRoaXMgaGFuZGxlIHdpbGwgYmUKKwkgKiBwYXNzZWQgYnkgdGhl IGRyaXZlciB1cG9uIGNhbGxpbmcgdGhlIGFib3ZlIGNhbGxiYWNrczsKKwkgKi8KKwlzdHJ1Y3Qg Zm1fZmlybXdhcmVfcGFyYW1zX3QgZmlybXdhcmU7CisJLyogVGhlIGZpcm13YXJlIHBhcmFtZXRl cnMgc3RydWN0dXJlOyAqLworfTsKKworc3RydWN0IGZtX3Q7IC8qIEZNYW4gZGF0YSAqLworCisv KiBmbV9jb25maWcKKyAqIENyZWF0ZXMgdGhlIEZNIG1vZHVsZSBhbmQgcmV0dXJucyBpdHMgaGFu ZGxlIChkZXNjcmlwdG9yKS4KKyAqIFRoaXMgZGVzY3JpcHRvciBtdXN0IGJlIHBhc3NlZCBhcyBm aXJzdCBwYXJhbWV0ZXIgdG8gYWxsIG90aGVyCisgKiBGTSBmdW5jdGlvbiBjYWxscy4KKyAqIE5v IGFjdHVhbCBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIG9mIEZNIGhhcmR3YXJlIGlz CisgKiBkb25lIGJ5IHRoaXMgcm91dGluZS4gQWxsIEZNIHBhcmFtZXRlcnMgZ2V0IGRlZmF1bHQg dmFsdWVzIHRoYXQKKyAqIG1heSBiZSBjaGFuZ2VkIGJ5IGNhbGxpbmcgb25lIG9yIG1vcmUgb2Yg dGhlIGFkdmFuY2UgY29uZmlnCisgKiByb3V0aW5lcy4KKyAqIHBfZm1fcGFyYW1zCQlBIHBvaW50 ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSBvZiBtYW5kYXRvcnkgRk0KKyAqCQkJcGFyYW1ldGVycwor ICogUmV0dXJuCQlBIGhhbmRsZSB0byB0aGUgRk0gb2JqZWN0LCBvciBOVUxMIGZvciBGYWlsdXJl LgorICovCit2b2lkICpmbV9jb25maWcoc3RydWN0IGZtX3BhcmFtc190ICpwX2ZtX3BhcmFtcyk7 CisKKy8qIGZtX2luaXQKKyAqIEluaXRpYWxpemVzIHRoZSBGTSBtb2R1bGUgYnkgZGVmaW5pbmcg dGhlIHNvZnR3YXJlIHN0cnVjdHVyZQorICogYW5kIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBy ZWdpc3RlcnMuCisgKiBwX2ZtCQlQb2ludGVyIHRvIHRoZSBGTWFuIG1vZHVsZQorICogUmV0dXJu CTAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBmbV9pbml0KHN0 cnVjdCBmbV90ICpwX2ZtKTsKKworLyogZm1fZnJlZQorICogRnJlZXMgYWxsIHJlc291cmNlcyB0 aGF0IHdlcmUgYXNzaWduZWQgdG8gRk0gbW9kdWxlLgorICogQ2FsbGluZyB0aGlzIHJvdXRpbmUg aW52YWxpZGF0ZXMgdGhlIGRlc2NyaXB0b3IuCisgKiBwX2ZtCQlQb2ludGVyIHRvIHRoZSBGTWFu IG1vZHVsZQorICogUmV0dXJuCTAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisg Ki8KK2ludCBmbV9mcmVlKHN0cnVjdCBmbV90ICpwX2ZtKTsKKworLyogRW51bSBmb3IgY2hvb3Np bmcgdGhlIGZpZWxkIHRoYXQgd2lsbCBiZSBvdXRwdXQgb24gQUlEICovCitlbnVtIGZtX2RtYV9h aWRfbW9kZSB7CisJRk1fRE1BX0FJRF9PVVRfUE9SVF9JRCA9IDAsCSAgICAvKiA0IExTQiBvZiBQ T1JUX0lEICovCisJRk1fRE1BX0FJRF9PVVRfVE5VTQkJICAgIC8qIDQgTFNCIG9mIFROVU0gKi8K K307CisKKy8qIEVudW0gZm9yIHNlbGVjdGluZyBETUEgRW1lcmdlbmN5IG9wdGlvbnMgKi8KKy8q IEVuYWJsZSBlbWVyZ2VuY3kgZm9yIE1VUkFNMSAqLworI2RlZmluZSAgRk1fRE1BX01VUkFNX1JF QURfRU1FUkdFTkNZICAgICAgICAweDAwODAwMDAwCisvKiBFbmFibGUgZW1lcmdlbmN5IGZvciBN VVJBTTIgKi8KKyNkZWZpbmUgIEZNX0RNQV9NVVJBTV9XUklURV9FTUVSR0VOQ1kgICAgICAgMHgw MDQwMDAwMAorLyogRW5hYmxlIGVtZXJnZW5jeSBmb3IgZXh0ZXJuYWwgYnVzICovCisjZGVmaW5l ICBGTV9ETUFfRVhUX0JVU19FTUVSR0VOQ1kgICAgICAgICAgIDB4MDAxMDAwMDAKKworLyogZm1f Y2ZnX3Jlc2V0X29uX2luaXQKKyAqIERlZmluZSB3aGV0aGVyIHRvIHJlc2V0IHRoZSBGTSBiZWZv cmUgaW5pdGlhbGl6YXRpb24uCisgKiBDaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBb REVGQVVMVF9SRVNFVF9PTl9JTklUXS4KKyAqIHBfZm0JCVBvaW50ZXIgdG8gdGhlIEZNYW4gbW9k dWxlCisgKiBlbmFibGUJV2hlbiB0cnVlLCBGTSB3aWxsIGJlIHJlc2V0IGJlZm9yZSBhbnkKKyAq IFJldHVybgkwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICogQWxsb3dlZCBv bmx5IGZvbGxvd2luZyBmbV9jb25maWcoKSBhbmQgYmVmb3JlIGZtX2luaXQoKS4KKyAqLworaW50 IGZtX2NmZ19yZXNldF9vbl9pbml0KHN0cnVjdCBmbV90ICpwX2ZtLCBib29sIGVuYWJsZSk7CisK Ky8qIGZtX2NmZ190b3RhbF9maWZvX3NpemUKKyAqIERlZmluZSBUb3RhbCBGSUZPIHNpemUgZm9y IHRoZSB3aG9sZSBGTS4KKyAqIENhbGxpbmcgdGhpcyByb3V0aW5lIGNoYW5nZXMgdGhlIHRvdGFs IEZpZm8gc2l6ZSBpbiB0aGUgaW50ZXJuYWwgZHJpdmVyCisgKiBkYXRhIGJhc2UgZnJvbSBpdHMg ZGVmYXVsdCBjb25maWd1cmF0aW9uIFtERUZBVUxUX3RvdGFsX2ZpZm9fc2l6ZV0KKyAqIHBfZm0J CQlQb2ludGVyIHRvIHRoZSBGTWFuIG1vZHVsZQorICogdG90YWxfZmlmb19zaXplCVRoZSBzZWxl Y3RlZCBuZXcgdmFsdWUuCisgKiBSZXR1cm4JIDAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhl cndpc2UuCisgKiBBbGxvd2VkIG9ubHkgZm9sbG93aW5nIGZtX2NvbmZpZygpIGFuZCBiZWZvcmUg Zm1faW5pdCgpLgorICovCitpbnQgZm1fY2ZnX3RvdGFsX2ZpZm9fc2l6ZShzdHJ1Y3QgZm1fdCAq cF9mbSwgdWludDMyX3QgdG90YWxfZmlmb19zaXplKTsKKworLyogZm1fY2ZnX2RtYV9haWRfb3Zl cnJpZGUKKyAqIERlZmluZSBETUEgQUlEIE9WRVJSSURFX01PREUuCisgKiBDYWxsaW5nIHRoaXMg cm91dGluZSBjaGFuZ2VzIHRoZSBBSUQgb3ZlcnJpZGUgbW9kZSBpbiB0aGUgaW50ZXJuYWwgZHJp dmVyCisgKiBkYXRhIGJhc2UgZnJvbSBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uICBbREVGQVVM VF9haWRfb3ZlcnJpZGVdCisgKiBwX2ZtCQkJUG9pbnRlciB0byB0aGUgRk1hbiBtb2R1bGUKKyAq IGFpZF9vdmVycmlkZQkJVGhlIHNlbGVjdGVkIG5ldyB2YWx1ZS4KKyAqIFJldHVybgkwIG9uIHN1 Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICogQWxsb3dlZCBvbmx5IGZvbGxvd2luZyBm bV9jb25maWcoKSBhbmQgYmVmb3JlIGZtX2luaXQoKS4KKyAqLworaW50IGZtX2NmZ19kbWFfYWlk X292ZXJyaWRlKHN0cnVjdCBmbV90ICpwX2ZtLCBib29sIGFpZF9vdmVycmlkZSk7CisKKy8qIEEg U3RydWN0dXJlIGZvciByZXR1cm5pbmcgRk0gcmV2aXNpb24gaW5mb3JtYXRpb24gKi8KK3N0cnVj dCBmbV9yZXZpc2lvbl9pbmZvX3QgeworCXVpbnQ4X3QgbWFqb3JfcmV2OwkJICAgIC8qIE1ham9y IHJldmlzaW9uICovCisJdWludDhfdCBtaW5vcl9yZXY7CQkgICAgLyogTWlub3IgcmV2aXNpb24g Ki8KK307CisKKy8qIGZtX3NldF9leGNlcHRpb24KKyAqIENhbGxpbmcgdGhpcyByb3V0aW5lIGVu YWJsZXMvZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBleGNlcHRpb24uCisgKiBwX2ZtCQlQb2ludGVy IHRvIHRoZSBGTWFuIG1vZHVsZQorICogZXhjZXB0aW9uCVRoZSBleGNlcHRpb24gdG8gYmUgc2Vs ZWN0ZWQuCisgKiBlbmFibGUJVHJ1ZSB0byBlbmFibGUgaW50ZXJydXB0LCBmYWxzZSB0byBtYXNr IGl0LgorICogUmV0dXJuCTAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKiBB bGxvd2VkIG9ubHkgZm9sbG93aW5nIGZtX2luaXQoKS4KKyAqLworaW50IGZtX3NldF9leGNlcHRp b24oc3RydWN0IGZtX3QgKnBfZm0sIGVudW0gZm1fZXhjZXB0aW9ucyBleGNlcHRpb24sCisJCSAg ICAgYm9vbCBlbmFibGUpOworCisvKiBmbV9kaXNhYmxlX3JhbXNfZWNjCisgKiBEaXNhYmxlcyBF Q0MgbWVjaGFuaXNtIGZvciBhbGwgdGhlIGRpZmZlcmVudCBGTSBSQU0nczsgRS5nLiBJUkFNLAor ICogTVVSQU0sIGV0Yy4gTm90ZToKKyAqCUluIG9wcG9zZWQgdG8gZm1fZW5hYmxlX3JhbXNfZWNj LCB0aGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQKKyAqCWV4cGxpY2l0bHkgdG8gZGlzYWJsZSBh bGwgUmFtcyBFQ0MuCisgKiBwX2ZtCQlQb2ludGVyIHRvIHRoZSBGTWFuIG1vZHVsZQorICogUmV0 dXJuCTAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKiBBbGxvd2VkIG9ubHkg Zm9sbG93aW5nIGZtX2NvbmZpZygpIGFuZCBiZWZvcmUgZm1faW5pdCgpLgorICovCitpbnQgZm1f ZGlzYWJsZV9yYW1zX2VjYyhzdHJ1Y3QgZm1fdCAqcF9mbSk7CisKKy8qIGZtX2dldF9yZXZpc2lv bgorICogUmV0dXJucyB0aGUgRk0gcmV2aXNpb24KKyAqIHBfZm0JCQktIFBvaW50ZXIgdG8gdGhl IEZNYW4gbW9kdWxlCisgKiBwX2ZtX3JldmlzaW9uX2luZm8JLSBBIHN0cnVjdHVyZSBvZiByZXZp c2lvbiBpbmZvcm1hdGlvbiBwYXJhbWV0ZXJzLgorICogUmV0dXJuCTAgb24gc3VjY2VzczsgRXJy b3IgY29kZSBvdGhlcndpc2UuCisgKiBBbGxvd2VkIG9ubHkgZm9sbG93aW5nIGZtX2luaXQoKS4K KyAqLworaW50IGZtX2dldF9yZXZpc2lvbihzdHJ1Y3QgZm1fdCAqcF9mbSwKKwkJICAgIHN0cnVj dCBmbV9yZXZpc2lvbl9pbmZvX3QgKnBfZm1fcmV2aXNpb25faW5mbyk7CisKKy8qIGZtX2Vycm9y X2lzcgorICogRk0gaW50ZXJydXB0LXNlcnZpY2Utcm91dGluZSBmb3IgZXJyb3JzLgorICogcF9m bQkJUG9pbnRlciB0byB0aGUgRk1hbiBtb2R1bGUKKyAqIFJldHVybgkwIG9uIHN1Y2Nlc3M7IEVN UFRZIGlmIG5vIGVycm9ycyBmb3VuZCBpbiByZWdpc3Rlciwgb3RoZXIKKyAqCQllcnJvciBjb2Rl IG90aGVyd2lzZS4KKyAqIEFsbG93ZWQgb25seSBmb2xsb3dpbmcgZm1faW5pdCgpLgorICovCitp bnQgZm1fZXJyb3JfaXNyKHN0cnVjdCBmbV90ICpwX2ZtKTsKKworLyogZm1fZXZlbnRfaXNyCisg KiBGTSBpbnRlcnJ1cHQtc2VydmljZS1yb3V0aW5lIGZvciBub3JtYWwgZXZlbnRzLgorICogcF9m bQkJUG9pbnRlciB0byB0aGUgRk1hbiBtb2R1bGUKKyAqIEFsbG93ZWQgb25seSBmb2xsb3dpbmcg Zm1faW5pdCgpLgorICovCit2b2lkIGZtX2V2ZW50X2lzcihzdHJ1Y3QgZm1fdCAqcF9mbSk7CisK KyNlbmRpZiAvKiBfX0ZNX0VYVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQv ZnJlZXNjYWxlL2ZtYW4vaW5jL2ZzbF9mbWFuX2Rydi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQv ZnJlZXNjYWxlL2ZtYW4vaW5jL2ZzbF9mbWFuX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmNmYmY0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMvZnNsX2ZtYW5fZHJ2LmgKQEAgLTAsMCArMSw5NCBAQAor LyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgor ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2Fs ZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRv cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkg YmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBBUyBJUycnIEFORCBBTlkKKyAq IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P IEVWRU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJFIExJQUJMRSBGT1IgQU5ZCisg KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorICovCisKKy8qIExpbnV4IGludGVybmFsIGtlcm5lbCBBUEkgKi8KKworI2lmbmRl ZiBfX0ZTTF9GTUFOX0RSVl9ICisjZGVmaW5lIF9fRlNMX0ZNQU5fRFJWX0gKKworI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CS8qIHN0cnVjdCBkZXZp Y2UgKi8KKworLyogRk0gZGV2aWNlIG9wYXF1ZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHlwZSBjaGVj a2luZyAqLworc3RydWN0IGZtOworCisvKiBmbV9iaW5kCisgKglCaW5kIHRvIGEgc3BlY2lmaWMg Rk0gZGV2aWNlLgorICoKKyAqIGZtX2RldgktIHRoZSBPRiBoYW5kbGUgb2YgdGhlIEZNIGRldmlj ZS4KKyAqICBSZXR1cm4JQSBoYW5kbGUgb2YgdGhlIEZNIGRldmljZS4KKyAqICBBbGxvd2VkIG9u bHkgYWZ0ZXIgdGhlIHBvcnQgd2FzIGNyZWF0ZWQuCisgKi8KK3N0cnVjdCBmbSAqZm1fYmluZChz dHJ1Y3QgZGV2aWNlICpmbV9kZXYpOworCisvKiBmbV91bmJpbmQKKyAqIFVuLWJpbmQgZnJvbSBh IHNwZWNpZmljIEZNIGRldmljZS4KKyAqICBmbQktIEEgaGFuZGxlIG9mIHRoZSBGTSBkZXZpY2Uu CisgKiAgQWxsb3dlZCBvbmx5IGFmdGVyIHRoZSBwb3J0IHdhcyBjcmVhdGVkLgorICovCit2b2lk IGZtX3VuYmluZChzdHJ1Y3QgZm0gKmZtKTsKKwordm9pZCAqZm1fZ2V0X2hhbmRsZShzdHJ1Y3Qg Zm0gKmZtKTsKK3N0cnVjdCByZXNvdXJjZSAqZm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGZtICpm bSk7CisKKy8qCWZtX211dGV4X2xvY2sKKyAqCisgKiAgIExvY2sgZnVuY3Rpb24gcmVxdWlyZWQg YmVmb3JlIGFueSBGTUQvTExEIGNhbGwuCisgKi8KK3ZvaWQgZm1fbXV0ZXhfbG9jayh2b2lkKTsK KworLyoJZm1fbXV0ZXhfdW5sb2NrCisgKgorICogICBVbmxvY2sgZnVuY3Rpb24gcmVxdWlyZWQg YWZ0ZXIgYW55IEZNRC9MTEQgY2FsbC4KKyAqLwordm9pZCBmbV9tdXRleF91bmxvY2sodm9pZCk7 CisKKy8qCWZtX2dldF9tYXhfZnJtCisgKgorICogICBHZXQgdGhlIG1heGltdW0gZnJhbWUgc2l6 ZQorICovCit1MTYgZm1fZ2V0X21heF9mcm0odm9pZCk7CisKKy8qCWZtX2dldF9yeF9leHRyYV9o ZWFkcm9vbQorICoKKyAqICAgR2V0IHRoZSBleHRyYSBoZWFkcm9vbSBzaXplCisgKi8KK2ludCBm bV9nZXRfcnhfZXh0cmFfaGVhZHJvb20odm9pZCk7CisKKy8qIGRlZmF1bHQgdmFsdWVzIGZvciBp bml0aWFsaXppbmcgUFRQIDE1ODggdGltZXIgY2xvY2sgKi8KKy8qIHBvd2VyIG9mIDIgZm9yIGJl dHRlciBwZXJmb3JtYW5jZSAqLworI2RlZmluZSBEUEFfUFRQX05PTUlOQUxfRlJFUV9QRVJJT0Rf U0hJRlQgMgorLyogNG5zLDI1ME1IeiAqLworI2RlZmluZSBEUEFfUFRQX05PTUlOQUxfRlJFUV9Q RVJJT0RfTlMgXAorKDEgPDwgRFBBX1BUUF9OT01JTkFMX0ZSRVFfUEVSSU9EX1NISUZUKQorCisj ZW5kaWYgLyogX19GU0xfRk1BTl9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL25ldF9leHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2luYy9uZXRfZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYTA1YWNlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2luYy9uZXRfZXh0LmgKQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24p IGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KyAqLworCisvKiBuZXRfZXh0LmgKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gYW5kIGdl bmVyYWwgaGVhZGVycyBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBfX05FVF9FWFRfSAorI2Rl ZmluZSBfX05FVF9FWFRfSAorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQX1BJRCAgICAg ICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1BQUF9DT01Q UkVTU0VEIFwKKyhORVRfSEVBREVSX0ZJRUxEX1BQUF9QSUQgPDwgMSkKKyNkZWZpbmUgTkVUX0hF QURFUl9GSUVMRF9QUFBfQUxMX0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfUFBQX1BJRCA8 PCAyKSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QUFBPRV9WRVIgICAgICAgICAg ICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQT0VfVFlQRSBcCiso TkVUX0hFQURFUl9GSUVMRF9QUFBPRV9WRVIgPDwgMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVM RF9QUFBPRV9DT0RFIFwKKyhORVRfSEVBREVSX0ZJRUxEX1BQUE9FX1ZFUiA8PCAyKQorI2RlZmlu ZSBORVRfSEVBREVSX0ZJRUxEX1BQUE9FX1NJRCBcCisoTkVUX0hFQURFUl9GSUVMRF9QUFBPRV9W RVIgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QUFBPRV9MRU4gXAorKE5FVF9IRUFE RVJfRklFTERfUFBQT0VfVkVSIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQT0Vf U0VTU0lPTiBcCisoTkVUX0hFQURFUl9GSUVMRF9QUFBPRV9WRVIgPDwgNSkKKyNkZWZpbmUgTkVU X0hFQURFUl9GSUVMRF9QUFBPRV9QSUQgXAorKE5FVF9IRUFERVJfRklFTERfUFBQT0VfVkVSIDw8 IDYpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQT0VfQUxMX0ZJRUxEUyBcCisoKE5FVF9I RUFERVJfRklFTERfUFBQT0VfVkVSIDw8IDcpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJ RUxEX1BQUE1VWF9QSUQgICAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9QUFBNVVhfQ0tTVU0gXAorKE5FVF9IRUFERVJfRklFTERfUFBQTVVYX1BJRCA8PCAx KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1BQUE1VWF9DT01QUkVTU0VEIFwKKyhORVRfSEVB REVSX0ZJRUxEX1BQUE1VWF9QSUQgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QUFBN VVhfQUxMX0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfUFBQTVVYX1BJRCA8PCAzKSAtIDEp CisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QUFBNVVhfU1VCRlJBTUVfUEZGICAgICAgICAg ICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQTVVYX1NVQkZSQU1FX0xYVCBcCiso TkVUX0hFQURFUl9GSUVMRF9QUFBNVVhfU1VCRlJBTUVfUEZGIDw8IDEpCisjZGVmaW5lIE5FVF9I RUFERVJfRklFTERfUFBQTVVYX1NVQkZSQU1FX0xFTiBcCisoTkVUX0hFQURFUl9GSUVMRF9QUFBN VVhfU1VCRlJBTUVfUEZGIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQTVVYX1NV QkZSQU1FX1BJRCBcCisoTkVUX0hFQURFUl9GSUVMRF9QUFBNVVhfU1VCRlJBTUVfUEZGIDw8IDMp CisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUFBQTVVYX1NVQkZSQU1FX1VTRV9QSUQgXAorKE5F VF9IRUFERVJfRklFTERfUFBQTVVYX1NVQkZSQU1FX1BGRiA8PCA0KQorI2RlZmluZSBORVRfSEVB REVSX0ZJRUxEX1BQUE1VWF9TVUJGUkFNRV9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVM RF9QUFBNVVhfU1VCRlJBTUVfUEZGIDw8IDUpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJ RUxEX0VUSF9EQSAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9FVEhfU0EgXAorKE5FVF9IRUFERVJfRklFTERfRVRIX0RBIDw8IDEpCisjZGVmaW5l IE5FVF9IRUFERVJfRklFTERfRVRIX0xFTkdUSCBcCisoTkVUX0hFQURFUl9GSUVMRF9FVEhfREEg PDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9FVEhfVFlQRSBcCisoTkVUX0hFQURFUl9G SUVMRF9FVEhfREEgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9FVEhfRklOQUxfQ0tT VU0gXAorKE5FVF9IRUFERVJfRklFTERfRVRIX0RBIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJf RklFTERfRVRIX1BBRERJTkcgXAorKE5FVF9IRUFERVJfRklFTERfRVRIX0RBIDw8IDUpCisjZGVm aW5lIE5FVF9IRUFERVJfRklFTERfRVRIX0FMTF9GSUVMRFMgXAorKChORVRfSEVBREVSX0ZJRUxE X0VUSF9EQSA8PCA2KSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9FVEhfQUREUl9T SVpFICAgICAgICAgICAgICAgICA2CisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUF9WRVIg ICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBf RFNDUCBcCisoTkVUX0hFQURFUl9GSUVMRF9JUF9WRVIgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9JUF9FQ04gXAorKE5FVF9IRUFERVJfRklFTERfSVBfVkVSIDw8IDMpCisjZGVmaW5l IE5FVF9IRUFERVJfRklFTERfSVBfUFJPVE8gXAorKE5FVF9IRUFERVJfRklFTERfSVBfVkVSIDw8 IDQpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUF9QUk9UT19TSVpFICAgICAgICAgICAg ICAgICAgMQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNF9WRVIgICAgICAgICAgICAg ICAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQVjRfSERSX0xFTiBcCiso TkVUX0hFQURFUl9GSUVMRF9JUFY0X1ZFUiA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxE X0lQVjRfVE9TIFwKKyhORVRfSEVBREVSX0ZJRUxEX0lQVjRfVkVSIDw8IDIpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfSVBWNF9UT1RBTF9MRU4gXAorKE5FVF9IRUFERVJfRklFTERfSVBWNF9W RVIgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY0X0lEIFwKKyhORVRfSEVBREVS X0ZJRUxEX0lQVjRfVkVSIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNF9GTEFH X0QgXAorKE5FVF9IRUFERVJfRklFTERfSVBWNF9WRVIgPDwgNSkKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9JUFY0X0ZMQUdfTSBcCisoTkVUX0hFQURFUl9GSUVMRF9JUFY0X1ZFUiA8PCA2KQor I2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQVjRfT0ZGU0VUIFwKKyhORVRfSEVBREVSX0ZJRUxE X0lQVjRfVkVSIDw8IDcpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNF9UVEwgXAorKE5F VF9IRUFERVJfRklFTERfSVBWNF9WRVIgPDwgOCkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9J UFY0X1BST1RPIFwKKyhORVRfSEVBREVSX0ZJRUxEX0lQVjRfVkVSIDw8IDkpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfSVBWNF9DS1NVTSBcCisoTkVUX0hFQURFUl9GSUVMRF9JUFY0X1ZFUiA8 PCAxMCkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY0X1NSQ19JUCBcCisoTkVUX0hFQURF Ul9GSUVMRF9JUFY0X1ZFUiA8PCAxMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY0X0RT VF9JUCBcCisoTkVUX0hFQURFUl9GSUVMRF9JUFY0X1ZFUiA8PCAxMikKKyNkZWZpbmUgTkVUX0hF QURFUl9GSUVMRF9JUFY0X09QVFMgXAorKE5FVF9IRUFERVJfRklFTERfSVBWNF9WRVIgPDwgMTMp CisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNF9PUFRTX0NPVU5UIFwKKyhORVRfSEVBREVS X0ZJRUxEX0lQVjRfVkVSIDw8IDE0KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQVjRfQUxM X0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfSVBWNF9WRVIgPDwgMTUpIC0gMSkKKworI2Rl ZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQVjRfQUREUl9TSVpFICAgICAgICAgICAgICAgICA0Cisj ZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNF9QUk9UT19TSVpFICAgICAgICAgICAgICAgIDEK KworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQVjZfVkVSICAgICAgICAgICAgICAgICAgICAg ICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY2X1RDIFwKKyhORVRfSEVBREVSX0ZJ RUxEX0lQVjZfVkVSIDw8IDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNl9TUkNfSVAg IFwKKyhORVRfSEVBREVSX0ZJRUxEX0lQVjZfVkVSIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJf RklFTERfSVBWNl9EU1RfSVAgXAorKE5FVF9IRUFERVJfRklFTERfSVBWNl9WRVIgPDwgMykKKyNk ZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY2X05FWFRfSERSIFwKKyhORVRfSEVBREVSX0ZJRUxE X0lQVjZfVkVSIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBWNl9GTCBcCisoTkVU X0hFQURFUl9GSUVMRF9JUFY2X1ZFUiA8PCA1KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQ VjZfSE9QX0xJTUlUIFwKKyhORVRfSEVBREVSX0ZJRUxEX0lQVjZfVkVSIDw8IDYpCisjZGVmaW5l IE5FVF9IRUFERVJfRklFTERfSVBWNl9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9J UFY2X1ZFUiA8PCA3KSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY2X0FERFJf U0laRSAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFY2X05F WFRfSERSX1NJWkUgICAgICAgICAgICAgMQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSUNN UF9UWVBFICAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxE X0lDTVBfQ09ERSAgXAorKE5FVF9IRUFERVJfRklFTERfSUNNUF9UWVBFIDw8IDEpCisjZGVmaW5l IE5FVF9IRUFERVJfRklFTERfSUNNUF9DS1NVTSAgXAorKE5FVF9IRUFERVJfRklFTERfSUNNUF9U WVBFIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSUNNUF9JRCAgXAorKE5FVF9IRUFE RVJfRklFTERfSUNNUF9UWVBFIDw8IDMpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSUNNUF9T UV9OVU0gIFwKKyhORVRfSEVBREVSX0ZJRUxEX0lDTVBfVFlQRSA8PCA0KQorI2RlZmluZSBORVRf SEVBREVSX0ZJRUxEX0lDTVBfQUxMX0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfSUNNUF9U WVBFIDw8IDUpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lDTVBfQ09ERV9TSVpF ICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSUNNUF9UWVBFX1NJ WkUgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lHTVBfVkVS U0lPTiAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JR01Q X1RZUEUgXAorKE5FVF9IRUFERVJfRklFTERfSUdNUF9WRVJTSU9OIDw8IDEpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfSUdNUF9DS1NVTSBcCisoTkVUX0hFQURFUl9GSUVMRF9JR01QX1ZFUlNJ T04gPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JR01QX0RBVEEgXAorKE5FVF9IRUFE RVJfRklFTERfSUdNUF9WRVJTSU9OIDw8IDMpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSUdN UF9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9JR01QX1ZFUlNJT04gPDwgNCkgLSAx KQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVENQX1BPUlRfU1JDICAgICAgICAgICAgICAg ICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1RDUF9QT1JUX0RTVCBcCisoTkVUX0hF QURFUl9GSUVMRF9UQ1BfUE9SVF9TUkMgPDwgMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9U Q1BfU0VRIFwKKyhORVRfSEVBREVSX0ZJRUxEX1RDUF9QT1JUX1NSQyA8PCAyKQorI2RlZmluZSBO RVRfSEVBREVSX0ZJRUxEX1RDUF9BQ0sgXAorKE5FVF9IRUFERVJfRklFTERfVENQX1BPUlRfU1JD IDw8IDMpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVENQX09GRlNFVCBcCisoTkVUX0hFQURF Ul9GSUVMRF9UQ1BfUE9SVF9TUkMgPDwgNCkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9UQ1Bf RkxBR1MgXAorKE5FVF9IRUFERVJfRklFTERfVENQX1BPUlRfU1JDIDw8IDUpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfVENQX1dJTkRPVyBcCisoTkVUX0hFQURFUl9GSUVMRF9UQ1BfUE9SVF9T UkMgPDwgNikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9UQ1BfQ0tTVU0gXAorKE5FVF9IRUFE RVJfRklFTERfVENQX1BPUlRfU1JDIDw8IDcpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVENQ X1VSR1BUUiBcCisoTkVUX0hFQURFUl9GSUVMRF9UQ1BfUE9SVF9TUkMgPDwgOCkKKyNkZWZpbmUg TkVUX0hFQURFUl9GSUVMRF9UQ1BfT1BUUyAgXAorKE5FVF9IRUFERVJfRklFTERfVENQX1BPUlRf U1JDIDw8IDkpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVENQX09QVFNfQ09VTlQgXAorKE5F VF9IRUFERVJfRklFTERfVENQX1BPUlRfU1JDIDw8IDEwKQorI2RlZmluZSBORVRfSEVBREVSX0ZJ RUxEX1RDUF9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9UQ1BfUE9SVF9TUkMgPDwg MTEpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1RDUF9QT1JUX1NJWkUgICAgICAg ICAgICAgICAgICAyCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9TQ1RQX1BPUlRfU1JDICAg ICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfU0NUUF9QT1JUX0RT VCBcCisoTkVUX0hFQURFUl9GSUVMRF9TQ1RQX1BPUlRfU1JDIDw8IDEpCisjZGVmaW5lIE5FVF9I RUFERVJfRklFTERfU0NUUF9WRVJfVEFHIFwKKyhORVRfSEVBREVSX0ZJRUxEX1NDVFBfUE9SVF9T UkMgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NLU1VNIFwKKyhORVRfSEVB REVSX0ZJRUxEX1NDVFBfUE9SVF9TUkMgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9T Q1RQX0FMTF9GSUVMRFMgXAorKChORVRfSEVBREVSX0ZJRUxEX1NDVFBfUE9SVF9TUkMgPDwgNCkg LSAxKQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfU0NUUF9QT1JUX1NJWkUgICAgICAgICAg ICAgICAgIDIKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0RDQ1BfUE9SVF9TUkMgICAgICAg ICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9EQ0NQX1BPUlRfRFNUIFwK KyhORVRfSEVBREVSX0ZJRUxEX0RDQ1BfUE9SVF9TUkMgPDwgMSkKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9EQ0NQX0FMTF9GSUVMRFMgXAorKChORVRfSEVBREVSX0ZJRUxEX0RDQ1BfUE9SVF9T UkMgPDwgMikgLSAxKQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfRENDUF9QT1JUX1NJWkUg ICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9QT1JUX1NS QyAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VRFBfUE9S VF9EU1QgXAorKE5FVF9IRUFERVJfRklFTERfVURQX1BPUlRfU1JDIDw8IDEpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfVURQX0xFTiAgXAorKE5FVF9IRUFERVJfRklFTERfVURQX1BPUlRfU1JD IDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVURQX0NLU1VNIFwKKyhORVRfSEVBREVS X0ZJRUxEX1VEUF9QT1JUX1NSQyA8PCAzKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9B TExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9VRFBfUE9SVF9TUkMgPDwgNCkgLSAxKQor CisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVURQX1BPUlRfU0laRSAgICAgICAgICAgICAgICAg IDIKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9MSVRFX1BPUlRfU1JDICAgICAgICAg ICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VRFBfTElURV9QT1JUX0RTVCAgXAor KE5FVF9IRUFERVJfRklFTERfVURQX0xJVEVfUE9SVF9TUkMgPDwgMSkKKyNkZWZpbmUgTkVUX0hF QURFUl9GSUVMRF9VRFBfTElURV9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9VRFBf TElURV9QT1JUX1NSQyA8PCAyKSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VRFBf TElURV9QT1JUX1NJWkUgICAgICAgICAgICAgMgorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERf VURQX0VOQ0FQX0VTUF9QT1JUX1NSQyAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJ RUxEX1VEUF9FTkNBUF9FU1BfUE9SVF9EU1QgXAorKE5FVF9IRUFERVJfRklFTERfVURQX0VOQ0FQ X0VTUF9QT1JUX1NSQyA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9FTkNBUF9F U1BfTEVOIFwKKyhORVRfSEVBREVSX0ZJRUxEX1VEUF9FTkNBUF9FU1BfUE9SVF9TUkMgPDwgMikK KyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VRFBfRU5DQVBfRVNQX0NLU1VNIFwKKyhORVRfSEVB REVSX0ZJRUxEX1VEUF9FTkNBUF9FU1BfUE9SVF9TUkMgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9VRFBfRU5DQVBfRVNQX1NQSSBcCisoTkVUX0hFQURFUl9GSUVMRF9VRFBfRU5DQVBf RVNQX1BPUlRfU1JDIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfVURQX0VOQ0FQX0VT UF9TRVFVRU5DRV9OVU0gXAorKE5FVF9IRUFERVJfRklFTERfVURQX0VOQ0FQX0VTUF9QT1JUX1NS QyA8PCA1KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9FTkNBUF9FU1BfQUxMX0ZJRUxE UyBcCisoKE5FVF9IRUFERVJfRklFTERfVURQX0VOQ0FQX0VTUF9QT1JUX1NSQyA8PCA2KSAtIDEp CisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VRFBfRU5DQVBfRVNQX1BPUlRfU0laRSAgICAg ICAgMgorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VEUF9FTkNBUF9FU1BfU1BJX1NJWkUgICAg ICAgICA0CisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUEhDX0NJRCAgICAgICAgICAgICAg ICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBIQ19DSURfVFlQRSBcCiso TkVUX0hFQURFUl9GSUVMRF9JUEhDX0NJRCA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxE X0lQSENfSENJTkRFWCBcCisoTkVUX0hFQURFUl9GSUVMRF9JUEhDX0NJRCA8PCAyKQorI2RlZmlu ZSBORVRfSEVBREVSX0ZJRUxEX0lQSENfR0VOIFwKKyhORVRfSEVBREVSX0ZJRUxEX0lQSENfQ0lE IDw8IDMpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBIQ19EX0JJVCBcCisoTkVUX0hFQURF Ul9GSUVMRF9JUEhDX0NJRCA8PCA0KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQSENfQUxM X0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfSVBIQ19DSUQgPDwgNSkgLSAxKQorCisjZGVm aW5lIE5FVF9IRUFERVJfRklFTERfU0NUUF9DSFVOS19EQVRBX1RZUEUgICAgICAgICAgICgxKQor I2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1NDVFBfQ0hVTktfREFUQV9GTEFHUyBcCisoTkVUX0hF QURFUl9GSUVMRF9TQ1RQX0NIVU5LX0RBVEFfVFlQRSA8PCAxKQorI2RlZmluZSBORVRfSEVBREVS X0ZJRUxEX1NDVFBfQ0hVTktfREFUQV9MRU5HVEggXAorKE5FVF9IRUFERVJfRklFTERfU0NUUF9D SFVOS19EQVRBX1RZUEUgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NIVU5L X0RBVEFfVFNOIFwKKyhORVRfSEVBREVSX0ZJRUxEX1NDVFBfQ0hVTktfREFUQV9UWVBFIDw8IDMp CisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfU0NUUF9DSFVOS19EQVRBX1NUUkVBTV9JRCBcCiso TkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NIVU5LX0RBVEFfVFlQRSA8PCA0KQorI2RlZmluZSBORVRf SEVBREVSX0ZJRUxEX1NDVFBfQ0hVTktfREFUQV9TVFJFQU1fU1FOIFwKKyhORVRfSEVBREVSX0ZJ RUxEX1NDVFBfQ0hVTktfREFUQV9UWVBFIDw8IDUpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERf U0NUUF9DSFVOS19EQVRBX1BBWUxPQURfUElEIFwKKyhORVRfSEVBREVSX0ZJRUxEX1NDVFBfQ0hV TktfREFUQV9UWVBFIDw8IDYpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfU0NUUF9DSFVOS19E QVRBX1VOT1JERVJFRCBcCisoTkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NIVU5LX0RBVEFfVFlQRSA8 PCA3KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1NDVFBfQ0hVTktfREFUQV9CRUdHSU5JTkcg XAorKE5FVF9IRUFERVJfRklFTERfU0NUUF9DSFVOS19EQVRBX1RZUEUgPDwgOCkKKyNkZWZpbmUg TkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NIVU5LX0RBVEFfRU5EICBcCisoTkVUX0hFQURFUl9GSUVM RF9TQ1RQX0NIVU5LX0RBVEFfVFlQRSA8PCA5KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1ND VFBfQ0hVTktfREFUQV9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9TQ1RQX0NIVU5L X0RBVEFfVFlQRSA8PCAxMCkgLSAxKQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYy X1RZUEVfQklUICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wy VFBWMl9MRU5HVEhfQklUIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9UWVBFX0JJVCA8PCAx KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9TRVFVRU5DRV9CSVQgXAorKE5FVF9I RUFERVJfRklFTERfTDJUUFYyX1RZUEVfQklUIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJfRklF TERfTDJUUFYyX09GRlNFVF9CSVQgIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9UWVBFX0JJ VCA8PCAzKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9QUklPUklUWV9CSVQgXAor KE5FVF9IRUFERVJfRklFTERfTDJUUFYyX1RZUEVfQklUIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFE RVJfRklFTERfTDJUUFYyX1ZFUlNJT04gXAorKE5FVF9IRUFERVJfRklFTERfTDJUUFYyX1RZUEVf QklUIDw8IDUpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYyX0xFTiBcCisoTkVUX0hF QURFUl9GSUVMRF9MMlRQVjJfVFlQRV9CSVQgPDwgNikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVM RF9MMlRQVjJfVFVOTkVMX0lEIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9UWVBFX0JJVCA8 PCA3KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9TRVNTSU9OX0lEIFwKKyhORVRf SEVBREVSX0ZJRUxEX0wyVFBWMl9UWVBFX0JJVCA8PCA4KQorI2RlZmluZSBORVRfSEVBREVSX0ZJ RUxEX0wyVFBWMl9OUyBcCisoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjJfVFlQRV9CSVQgPDwgOSkK KyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9MMlRQVjJfTlIgXAorKE5FVF9IRUFERVJfRklFTERf TDJUUFYyX1RZUEVfQklUIDw8IDEwKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWMl9P RkZTRVRfU0laRSBcCisoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjJfVFlQRV9CSVQgPDwgMTEpCisj ZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYyX0ZJUlNUX0JZVEUgXAorKE5FVF9IRUFERVJf RklFTERfTDJUUFYyX1RZUEVfQklUIDw8IDEyKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wy VFBWMl9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjJfVFlQRV9CSVQgPDwg MTMpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX1RZUEVfQklU ICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfQ1RSTF9MRU5H VEhfQklUIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX1RZUEVfQklUIDw8IDEpCisj ZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYzX0NUUkxfU0VRVUVOQ0VfQklUIFwKKyhORVRf SEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX1RZUEVfQklUIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFE RVJfRklFTERfTDJUUFYzX0NUUkxfVkVSU0lPTiBcCisoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNf Q1RSTF9UWVBFX0JJVCA8PCAzKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJM X0xFTkdUSCBcCisoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfQ1RSTF9UWVBFX0JJVCA8PCA0KQor I2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX0NPTlRST0wgXAorKE5FVF9IRUFE RVJfRklFTERfTDJUUFYzX0NUUkxfVFlQRV9CSVQgPDwgNSkKKyNkZWZpbmUgTkVUX0hFQURFUl9G SUVMRF9MMlRQVjNfQ1RSTF9TRU5UIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX1RZ UEVfQklUIDw8IDYpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYzX0NUUkxfUkVDViBc CisoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfQ1RSTF9UWVBFX0JJVCA8PCA3KQorI2RlZmluZSBO RVRfSEVBREVSX0ZJRUxEX0wyVFBWM19DVFJMX0ZJUlNUX0JZVEUgXAorKE5FVF9IRUFERVJfRklF TERfTDJUUFYzX0NUUkxfVFlQRV9CSVQgPDwgOCkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9M MlRQVjNfQ1RSTF9BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfQ1RSTF9U WVBFX0JJVCA8PCA5KSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfU0VT U19UWVBFX0JJVCAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYz X1NFU1NfVkVSU0lPTiAgXAorKE5FVF9IRUFERVJfRklFTERfTDJUUFYzX1NFU1NfVFlQRV9CSVQg PDwgMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9MMlRQVjNfU0VTU19JRCAgXAorKE5FVF9I RUFERVJfRklFTERfTDJUUFYzX1NFU1NfVFlQRV9CSVQgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURF Ul9GSUVMRF9MMlRQVjNfU0VTU19DT09LSUUgIFwKKyhORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19T RVNTX1RZUEVfQklUIDw8IDMpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTDJUUFYzX1NFU1Nf QUxMX0ZJRUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxEX0wyVFBWM19TRVNTX1RZUEVfQklUIDw8 IDQpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1ZMQU5fVlBSSSAgICAgICAgICAg ICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9WTEFOX0NGSSAgXAorKE5F VF9IRUFERVJfRklFTERfVkxBTl9WUFJJIDw8IDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERf VkxBTl9WSUQgIFwKKyhORVRfSEVBREVSX0ZJRUxEX1ZMQU5fVlBSSSA8PCAyKQorI2RlZmluZSBO RVRfSEVBREVSX0ZJRUxEX1ZMQU5fTEVOR1RIICBcCisoTkVUX0hFQURFUl9GSUVMRF9WTEFOX1ZQ UkkgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9WTEFOX1RZUEUgIFwKKyhORVRfSEVB REVSX0ZJRUxEX1ZMQU5fVlBSSSA8PCA0KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1ZMQU5f QUxMX0ZJRUxEUyBcCisoKE5FVF9IRUFERVJfRklFTERfVkxBTl9WUFJJIDw8IDUpIC0gMSkKKwor I2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1ZMQU5fVENJIFwKKyhORVRfSEVBREVSX0ZJRUxEX1ZM QU5fVlBSSSB8IFwKK05FVF9IRUFERVJfRklFTERfVkxBTl9DRkkgfCBcCitORVRfSEVBREVSX0ZJ RUxEX1ZMQU5fVklEKQorCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTExDX0RTQVAgICAgICAg ICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0xMQ19TU0FQIFwK KyhORVRfSEVBREVSX0ZJRUxEX0xMQ19EU0FQIDw8IDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklF TERfTExDX0NUUkwgXAorKE5FVF9IRUFERVJfRklFTERfTExDX0RTQVAgPDwgMikKKyNkZWZpbmUg TkVUX0hFQURFUl9GSUVMRF9MTENfQUxMX0ZJRUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxEX0xM Q19EU0FQIDw8IDMpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX05MUElEX05MUElE ICAgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9OTFBJRF9B TExfRklFTERTICBcCisoKE5FVF9IRUFERVJfRklFTERfTkxQSURfTkxQSUQgPDwgMSkgLSAxKQor CisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfU05BUF9PVUkgICAgICAgICAgICAgICAgICAgICAg ICgxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1NOQVBfUElEICBcCisoTkVUX0hFQURFUl9G SUVMRF9TTkFQX09VSSA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1NOQVBfQUxMX0ZJ RUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxEX1NOQVBfT1VJIDw8IDIpIC0gMSkKKworI2RlZmlu ZSBORVRfSEVBREVSX0ZJRUxEX0xMQ19TTkFQX1RZUEUgICAgICAgICAgICAgICAgICAoMSkKKyNk ZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9MTENfU05BUF9BTExfRklFTERTICBcCisoKE5FVF9IRUFE RVJfRklFTERfTExDX1NOQVBfVFlQRSA8PCAxKSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9G SUVMRF9BUlBfSFRZUEUgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFE RVJfRklFTERfQVJQX1BUWVBFICBcCisoTkVUX0hFQURFUl9GSUVMRF9BUlBfSFRZUEUgPDwgMSkK KyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9BUlBfSExFTiAgXAorKE5FVF9IRUFERVJfRklFTERf QVJQX0hUWVBFIDw8IDIpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfQVJQX1BMRU4gIFwKKyhO RVRfSEVBREVSX0ZJRUxEX0FSUF9IVFlQRSA8PCAzKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxE X0FSUF9PUEVSICBcCisoTkVUX0hFQURFUl9GSUVMRF9BUlBfSFRZUEUgPDwgNCkKKyNkZWZpbmUg TkVUX0hFQURFUl9GSUVMRF9BUlBfU0hBICBcCisoTkVUX0hFQURFUl9GSUVMRF9BUlBfSFRZUEUg PDwgNSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9BUlBfU1BBICBcCisoTkVUX0hFQURFUl9G SUVMRF9BUlBfSFRZUEUgPDwgNikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9BUlBfVEhBICBc CisoTkVUX0hFQURFUl9GSUVMRF9BUlBfSFRZUEUgPDwgNykKKyNkZWZpbmUgTkVUX0hFQURFUl9G SUVMRF9BUlBfVFBBICBcCisoTkVUX0hFQURFUl9GSUVMRF9BUlBfSFRZUEUgPDwgOCkKKyNkZWZp bmUgTkVUX0hFQURFUl9GSUVMRF9BUlBfQUxMX0ZJRUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxE X0FSUF9IVFlQRSA8PCA5KSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9SRkMyNjg0 X0xMQyAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUkZD MjY4NF9OTFBJRCAgXAorKE5FVF9IRUFERVJfRklFTERfUkZDMjY4NF9MTEMgPDwgMSkKKyNkZWZp bmUgTkVUX0hFQURFUl9GSUVMRF9SRkMyNjg0X09VSSAgXAorKE5FVF9IRUFERVJfRklFTERfUkZD MjY4NF9MTEMgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9SRkMyNjg0X1BJRCAgXAor KE5FVF9IRUFERVJfRklFTERfUkZDMjY4NF9MTEMgPDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9G SUVMRF9SRkMyNjg0X1ZQTl9PVUkgIFwKKyhORVRfSEVBREVSX0ZJRUxEX1JGQzI2ODRfTExDIDw8 IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfUkZDMjY4NF9WUE5fSURYICBcCisoTkVUX0hF QURFUl9GSUVMRF9SRkMyNjg0X0xMQyA8PCA1KQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1JG QzI2ODRfQUxMX0ZJRUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxEX1JGQzI2ODRfTExDIDw8IDYp IC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX1VTRVJfREVGSU5FRF9TUkNQT1JUICAg ICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9VU0VSX0RFRklORURfUENESUQg IFwKKyhORVRfSEVBREVSX0ZJRUxEX1VTRVJfREVGSU5FRF9TUkNQT1JUIDw8IDEpCisjZGVmaW5l IE5FVF9IRUFERVJfRklFTERfVVNFUl9ERUZJTkVEX0FMTF9GSUVMRFMgIFwKKygoTkVUX0hFQURF Ul9GSUVMRF9VU0VSX0RFRklORURfU1JDUE9SVCA8PCAyKSAtIDEpCisKKyNkZWZpbmUgTkVUX0hF QURFUl9GSUVMRF9QQVlMT0FEX0JVRkZFUiAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5F VF9IRUFERVJfRklFTERfUEFZTE9BRF9TSVpFICBcCisoTkVUX0hFQURFUl9GSUVMRF9QQVlMT0FE X0JVRkZFUiA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX01BWF9GUk1fU0laRSBcCiso TkVUX0hFQURFUl9GSUVMRF9QQVlMT0FEX0JVRkZFUiA8PCAyKQorI2RlZmluZSBORVRfSEVBREVS X0ZJRUxEX01JTl9GUk1fU0laRSAgXAorKE5FVF9IRUFERVJfRklFTERfUEFZTE9BRF9CVUZGRVIg PDwgMykKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QQVlMT0FEX1RZUEUgIFwKKyhORVRfSEVB REVSX0ZJRUxEX1BBWUxPQURfQlVGRkVSIDw8IDQpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERf RlJBTUVfU0laRSAgXAorKE5FVF9IRUFERVJfRklFTERfUEFZTE9BRF9CVUZGRVIgPDwgNSkKKyNk ZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9QQVlMT0FEX0FMTF9GSUVMRFMgIFwKKygoTkVUX0hFQURF Ul9GSUVMRF9QQVlMT0FEX0JVRkZFUiA8PCA2KSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9G SUVMRF9HUkVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFE RVJfRklFTERfR1JFX0FMTF9GSUVMRFMgIFwKKygoTkVUX0hFQURFUl9GSUVMRF9HUkVfVFlQRSA8 PCAxKSAtIDEpCisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9NSU5FTkNBUF9TUkNfSVAgICAg ICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERfTUlORU5DQVBfRFNUX0lQ ICBcCisoTkVUX0hFQURFUl9GSUVMRF9NSU5FTkNBUF9TUkNfSVAgPDwgMSkKKyNkZWZpbmUgTkVU X0hFQURFUl9GSUVMRF9NSU5FTkNBUF9UWVBFICBcCisoTkVUX0hFQURFUl9GSUVMRF9NSU5FTkNB UF9TUkNfSVAgPDwgMikKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9NSU5FTkNBUF9BTExfRklF TERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9NSU5FTkNBUF9TUkNfSVAgPDwgMykgLSAxKQorCisj ZGVmaW5lIE5FVF9IRUFERVJfRklFTERfSVBTRUNfQUhfTkggIFwKKyhORVRfSEVBREVSX0ZJRUxE X0lQU0VDX0FIX1NQSSA8PCAxKQorI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQU0VDX0FIX0FM TF9GSUVMRFMgICBcCisoKE5FVF9IRUFERVJfRklFTERfSVBTRUNfQUhfU1BJIDw8IDIpIC0gMSkK KworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQU0VDX0VTUF9TUEkgICAgICAgICAgICAgICAg ICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9JUFNFQ19FU1BfU0VRVUVOQ0VfTlVNICBc CisoTkVUX0hFQURFUl9GSUVMRF9JUFNFQ19FU1BfU1BJIDw8IDEpCisjZGVmaW5lIE5FVF9IRUFE RVJfRklFTERfSVBTRUNfRVNQX0FMTF9GSUVMRFMgIFwKKygoTkVUX0hFQURFUl9GSUVMRF9JUFNF Q19FU1BfU1BJIDw8IDIpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX0lQU0VDX0VT UF9TUElfU0laRSAgICAgICAgICAgICA0CisKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9NUExT X0xBQkVMX1NUQUNLICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIE5FVF9IRUFERVJfRklFTERf TVBMU19MQUJFTF9TVEFDS19BTExfRklFTERTIFwKKygoTkVUX0hFQURFUl9GSUVMRF9NUExTX0xB QkVMX1NUQUNLIDw8IDEpIC0gMSkKKworI2RlZmluZSBORVRfSEVBREVSX0ZJRUxEX01BQ1NFQ19T RUNUQUcgICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTkVUX0hFQURFUl9GSUVMRF9NQUNT RUNfQUxMX0ZJRUxEUyAgXAorKChORVRfSEVBREVSX0ZJRUxEX01BQ1NFQ19TRUNUQUcgPDwgMSkg LSAxKQorCitlbnVtIG5ldF9oZWFkZXJfdHlwZSB7CisJSEVBREVSX1RZUEVfTk9ORSA9IDAsCisJ SEVBREVSX1RZUEVfUEFZTE9BRCwKKwlIRUFERVJfVFlQRV9FVEgsCisJSEVBREVSX1RZUEVfVkxB TiwKKwlIRUFERVJfVFlQRV9JUFY0LAorCUhFQURFUl9UWVBFX0lQVjYsCisJSEVBREVSX1RZUEVf SVAsCisJSEVBREVSX1RZUEVfVENQLAorCUhFQURFUl9UWVBFX1VEUCwKKwlIRUFERVJfVFlQRV9V RFBfTElURSwKKwlIRUFERVJfVFlQRV9JUEhDLAorCUhFQURFUl9UWVBFX1NDVFAsCisJSEVBREVS X1RZUEVfU0NUUF9DSFVOS19EQVRBLAorCUhFQURFUl9UWVBFX1BQUE9FLAorCUhFQURFUl9UWVBF X1BQUCwKKwlIRUFERVJfVFlQRV9QUFBNVVgsCisJSEVBREVSX1RZUEVfUFBQTVVYX1NVQkZSQU1F LAorCUhFQURFUl9UWVBFX0wyVFBWMiwKKwlIRUFERVJfVFlQRV9MMlRQVjNfQ1RSTCwKKwlIRUFE RVJfVFlQRV9MMlRQVjNfU0VTUywKKwlIRUFERVJfVFlQRV9MTEMsCisJSEVBREVSX1RZUEVfTExD X1NOQVAsCisJSEVBREVSX1RZUEVfTkxQSUQsCisJSEVBREVSX1RZUEVfU05BUCwKKwlIRUFERVJf VFlQRV9NUExTLAorCUhFQURFUl9UWVBFX0lQU0VDX0FILAorCUhFQURFUl9UWVBFX0lQU0VDX0VT UCwKKwlIRUFERVJfVFlQRV9VRFBfRU5DQVBfRVNQLAkvKiBSRkMgMzk0OCAqLworCUhFQURFUl9U WVBFX01BQ1NFQywKKwlIRUFERVJfVFlQRV9HUkUsCisJSEVBREVSX1RZUEVfTUlORU5DQVAsCisJ SEVBREVSX1RZUEVfRENDUCwKKwlIRUFERVJfVFlQRV9JQ01QLAorCUhFQURFUl9UWVBFX0lHTVAs CisJSEVBREVSX1RZUEVfQVJQLAorCUhFQURFUl9UWVBFX0NBUFdBUCwKKwlIRUFERVJfVFlQRV9D QVBXQVBfRFRMUywKKwlIRUFERVJfVFlQRV9SRkMyNjg0LAorCUhFQURFUl9UWVBFX1VTRVJfREVG SU5FRF9MMiwKKwlIRUFERVJfVFlQRV9VU0VSX0RFRklORURfTDMsCisJSEVBREVSX1RZUEVfVVNF Ul9ERUZJTkVEX0w0LAorCUhFQURFUl9UWVBFX1VTRVJfREVGSU5FRF9TSElNMSwKKwlIRUFERVJf VFlQRV9VU0VSX0RFRklORURfU0hJTTIsCisJTUFYX0hFQURFUl9UWVBFX0NPVU5UCit9OworCisj ZW5kaWYgLyogX19ORVRfRVhUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2ZyZWVzY2FsZS9mbWFuL2luYy9zZXJ2aWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9pbmMvc2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjczMTFkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9pbmMvc2VydmljZS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmln aHQgMjAwOC0yMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rv ciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg KgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgi R1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQor ICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZy ZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBG cmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor CisjaWZuZGVmIF9fU0VSVklDRV9oCisjZGVmaW5lIF9fU0VSVklDRV9oCisKKyNpbmNsdWRlIDxs aW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qIERlZmluZSBBU1NFUlQg Y29uZGl0aW9uICovCisjdW5kZWYgQVNTRVJUCisjZGVmaW5lIEFTU0VSVCh4KSAgICAgICBXQVJO X09OKCEoeCkpCisKKy8qIEluIHJhbmdlIG1hY3JvICovCisjZGVmaW5lIElOX1JBTkdFKG1pbiwg dmFsLCBtYXgpICgobWluKSA8PSAodmFsKSAmJiAodmFsKSA8PSAobWF4KSkKKworLyogQ2VpbGlu ZyBkaXZpc2lvbiAtIG5vdCB0aGUgZmFzdGVzdCB3YXksIGJ1dCBzYWZlciBpbiB0ZXJtcyBvZiBv dmVyZmxvdyAqLworI2RlZmluZSBESVZfQ0VJTCh4LCB5KSBcCisJKChkaXY2NF91NjQoeCwgeSkp ICsgKCgoKChkaXY2NF91NjQoeCwgeSkpKSAqICh5KSkgPT0gKHgpKSA/IDAgOiAxKSkKKworLyog Um91bmQgdXAgYSBudW1iZXIgdG8gYmUgYSBtdWx0aXBsZSBvZiBhIHNlY29uZCBudW1iZXIgKi8K KyNkZWZpbmUgUk9VTkRfVVAoeCwgeSkgICAoKCgoeCkgKyAoeSkgLSAxKSAvICh5KSkgKiAoeSkp CisKKyNkZWZpbmUgUFRSX1RPX1VJTlQoX3B0cikgICAgICAgICAgICgodWludHB0cl90KShfcHRy KSkKKyNkZWZpbmUgVUlOVF9UT19QVFIoX3ZhbCkgICAgICAgICAgICgodm9pZCBfX2lvbWVtICop KHVpbnRwdHJfdCkoX3ZhbCkpCisjZGVmaW5lIFBUUl9NT1ZFKF9wdHIsIF9vZmZzZXQpICAgICAo dm9pZCAqKSgodWludDhfdCAqKShfcHRyKSArIChfb2Zmc2V0KSkKKworLyogbWVtb3J5IGFjY2Vz cyBtYWNyb3MgKi8KKyNkZWZpbmUgR0VUX1VJTlQ4KGFyZykJCWluX2JlOCgmKGFyZykpCisjZGVm aW5lIEdFVF9VSU5UMTYoYXJnKQkJaW5fYmUxNigmKGFyZykpCisjZGVmaW5lIEdFVF9VSU5UMzIo YXJnKQkJaW5fYmUzMigmKGFyZykpCisjZGVmaW5lIEdFVF9VSU5UNjQoYXJnKQkJKCooX19pb21l bSB1aW50NjRfdCAqKSgmKGFyZykpKQorCisjZGVmaW5lIFdSSVRFX1VJTlQ4KGFyZywgZGF0YSkJ CW91dF9iZTgoJihhcmcpLCBkYXRhKQorI2RlZmluZSBXUklURV9VSU5UMTYoYXJnLCBkYXRhKQlv dXRfYmUxNigmKGFyZyksIGRhdGEpCisjZGVmaW5lIFdSSVRFX1VJTlQzMihhcmcsIGRhdGEpCW91 dF9iZTMyKCYoYXJnKSwgZGF0YSkKKyNkZWZpbmUgV1JJVEVfVUlOVDY0KGFyZywgZGF0YSkJKCoo X19pb21lbSB1aW50NjRfdCAqKSgmKGFyZykpID0gKGRhdGEpKQorCisvKiBUaW1pbmcgbWFjcm8g Zm9yIGNvbnZlcnRpbmcgdXNlYyB1bml0cyB0byBudW1iZXIgb2YgdGlja3MKKyAqIChudW1iZXIg b2YgdXNlYyogY2xvY2tfSHopIC8gMSwwMDAsMDAwKSAtIHNpbmNlIGNsayBpcyBpbiBNSHogdW5p dHMsCisgKiBubyBkaXZpc2lvbiBuZWVkZWQuCisgKi8KKyNkZWZpbmUgVVNFQ19UT19DTEsodXNl YywgY2xrKSAgICAgICAoKHVzZWMpICogKGNsaykpCisjZGVmaW5lIENZQ0xFU19UT19VU0VDKGN5 Y2xlcywgY2xrKSAgKChjeWNsZXMpIC8gKGNsaykpCisKKyNkZWZpbmUgSUxMRUdBTF9CQVNFICAg ICh+MCkKKworLyogRW51bWVyYXRpb24gKGJpdCBmbGFncykgb2YgY29tbXVuaWNhdGlvbiBtb2Rl cyAoVHJhbnNtaXQsCisgKiByZWNlaXZlIG9yIGJvdGgpLgorICovCitlbnVtIGNvbW1fbW9kZSB7 CisJQ09NTV9NT0RFX05PTkUgPSAwLAkgICAgLyogTm8gdHJhbnNtaXQvcmVjZWl2ZSBjb21tdW5p Y2F0aW9uICovCisJQ09NTV9NT0RFX1JYID0gMSwJICAgIC8qIE9ubHkgcmVjZWl2ZSBjb21tdW5p Y2F0aW9uICovCisJQ09NTV9NT0RFX1RYID0gMiwJICAgIC8qIE9ubHkgdHJhbnNtaXQgY29tbXVu aWNhdGlvbiAqLworCUNPTU1fTU9ERV9SWF9BTkRfVFggPSAzICAgLypCb3RoIHRyYW5zbWl0IGFu ZCByZWNlaXZlIGNvbW11bmljYXRpb24qLworfTsKKworI2VuZGlmIC8qIFNFUlZJQ0UgKi8KLS0g CjEuNy45LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkxpbnV4cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcK aHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xpbnV4cHBjLWRldg==