From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandre Courbot Subject: [PATCH v3 08/15] secboot: reorganize into more files Date: Wed, 2 Nov 2016 15:02:49 +0900 Message-ID: <20161102060256.14341-9-acourbot@nvidia.com> References: <20161102060256.14341-1-acourbot@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161102060256.14341-1-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Ben Skeggs Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org U3BsaXQgdGhlIGFjdCBvZiBidWlsZGluZyB0aGUgQUNSIGJsb2IgZnJvbSBmaXJtd2FyZSBmaWxl cyBmcm9tIHRoZSByZXN0Cm9mIHRoZSAoY2hpcC1kZXBlbmRlbnQpIHNlY3VyZSBib290IGxvZ2lj LiBBQ1IgbG9naWMgaXMgbW92ZWQgaW50bwphY3Jfcnh4eC5jIGZpbGVzLCB3aGVyZSByeHh4IGNv cnJlc3BvbmRzIHRvIHRoZSBjb21wYXRpYmxlIHJlbGVhc2Ugb2YKdGhlIE5WSURJQSBkcml2ZXIu IEF0IHRoZSBtb21lbnQgcjM1MiBhbmQgcjM2MSBhcmUgc3VwcG9ydGVkIHNpbmNlCmZpcm13YXJl cyBoYXZlIGJlZW4gcmVsZWFzZWQgZm9yIHRoZXNlIHZlcnNpb25zLiBTb21lIGFic3RyYWN0aW9u cyBhcmUKYWRkZWQgb24gdG9wIG9mIHIzNTIgc28gcjM2MSBjYW4gZWFzaWx5IGJlIGltcGxlbWVu dGVkIG9uIHRvcCBvZiBpdCBieQpqdXN0IG92ZXJyaWRpbmcgYSBmZXcgaG9va3MuCgpUaGlzIHNw bGl0IG1ha2VzIGl0IHBvc3NpYmxlIGFuZCBlYXN5IHRvIHJldXNlIHRoZSBzYW1lIEFDUiB2ZXJz aW9uIG9uCmRpZmZlcmVudCBjaGlwcy4gSXQgYWxzbyBob3BlZnVsbHkgbWFrZXMgdGhlIGNvZGUg bXVjaCBtb3JlIHJlYWRhYmxlIGFzCnRoZSBkaWZmZXJlbnQgc2VjdXJlIGJvb3QgbG9naWNzIGFy ZSBzZXBhcmF0ZWQuIEFzIG1vcmUgY2hpcHMgYW5kCmZpcm13YXJlIHZlcnNpb25zIHdpbGwgYmUg c3VwcG9ydGVkLCB0aGlzIGlzIGEgbmVjZXNzaXR5IHRvIG5vdCBnZXQgbG9zdAppbiBjb2RlIHRo YXQgaXMgYWxyZWFkeSBxdWl0ZSBjb21wbGV4LgoKVGhpcyBpcyBhIGJpZyBjb21taXQsIGJ1dCBp dCBlc3NlbnRpYWxseSBtb3ZlcyB0aGluZ3MgYXJvdW5kIChhbmQgc3BsaXQKdGhlIG52a21fc2Vj Ym9vdCBzdHJ1Y3R1cmUgaW50byB0d28sIG52a21fc2VjYm9vdCBhbmQgbnZrbV9hY3IpLiBDb2Rl CnNlbWFudGljcyBzaG91bGQgbm90IGJlIGFmZmVjdGVkLgoKU2lnbmVkLW9mZi1ieTogQWxleGFu ZHJlIENvdXJib3QgPGFjb3VyYm90QG52aWRpYS5jb20+Ci0tLQogZHJtL25vdXZlYXUvaW5jbHVk ZS9udmttL3N1YmRldi9zZWNib290LmggICAgIHwgICAxMyArLQogZHJtL25vdXZlYXUvbnZrbS9z dWJkZXYvc2VjYm9vdC9LYnVpbGQgICAgICAgIHwgICAgNCArCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjci5jICAgICAgICAgfCAgIDU0ICsrCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjci5oICAgICAgICAgfCAgIDY4ICsrCiBkcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl9yMzUyLmMgICAgfCAgOTExICsrKysrKysrKysrKysrKysrKysKIGRy bS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaCAgICB8ICAxMjUgKysrCiBk cm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl9yMzYxLmMgICAgfCAgMTMyICsrKwog ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9iYXNlLmMgICAgICAgIHwgICA5NSArLQog ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jICAgICAgIHwgMTIwMSArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2dt MjAwLmggICAgICAgfCAgIDQzICsKIGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20y MGIuYyAgICAgICB8ICAxMjYgKy0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2xz X3Vjb2RlLmggICAgfCAgMjQ1ICsrKysrCiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2xzX3Vjb2RlX2dyLmMgfCAgMTY1ICsrKysKIGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvcHJpdi5oICAgICAgICB8ICAzMjcgKy0tLS0tLQogMTQgZmlsZXMgY2hhbmdlZCwgMTg5OCBp bnNlcnRpb25zKCspLCAxNjExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcm0v bm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM1Mi5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfcjM2MS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9sc191Y29k ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9s c191Y29kZV9nci5jCgpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvaW5jbHVkZS9udmttL3N1YmRl di9zZWNib290LmggYi9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L3NlY2Jvb3QuaApp bmRleCBmZmMyMjA0ZDJhNTAuLjI0ZDk4ODc4YmI5MyAxMDA2NDQKLS0tIGEvZHJtL25vdXZlYXUv aW5jbHVkZS9udmttL3N1YmRldi9zZWNib290LmgKKysrIGIvZHJtL25vdXZlYXUvaW5jbHVkZS9u dmttL3N1YmRldi9zZWNib290LmgKQEAgLTI3LDE2ICsyNywyMyBAQAogI2luY2x1ZGUgPGNvcmUv ZmFsY29uLmg+CiAKIC8qKgotICogQGJhc2U6CQliYXNlIElPIGFkZHJlc3Mgb2YgdGhlIGZhbGNv biBwZXJmb3JtaW5nIHNlY3VyZSBib290Ci0gKiBAaXJxX21hc2s6CQlJUlEgbWFzayBvZiB0aGUg ZmFsY29uIHBlcmZvcm1pbmcgc2VjdXJlIGJvb3QKLSAqIEBlbmFibGVfbWFzazoJZW5hYmxlIG1h c2sgb2YgdGhlIGZhbGNvbiBwZXJmb3JtaW5nIHNlY3VyZSBib290CisgKiBAYmFzZTogYmFzZSBJ TyBhZGRyZXNzIG9mIHRoZSBmYWxjb24gcGVyZm9ybWluZyBzZWN1cmUgYm9vdAorICogQG1hbmFn ZWRfZmFsY29uczogYml0ZmllbGQgb2YgZmFsY29ucyBtYW5hZ2VkIGJ5IHRoaXMgQUNSCisgKiBA ZGVidWdfbW9kZTogd2hldGhlciB0aGUgZGVidWcgb3IgcHJvZHVjdGlvbiBzaWduYXR1cmVzIHNo b3VsZCBiZSB1c2VkCiAqLwogc3RydWN0IG52a21fc2VjYm9vdCB7CiAJY29uc3Qgc3RydWN0IG52 a21fc2VjYm9vdF9mdW5jICpmdW5jOworCXN0cnVjdCBudmttX2FjciAqYWNyOwogCXN0cnVjdCBu dmttX3N1YmRldiBzdWJkZXY7CiAKKwl1bnNpZ25lZCBsb25nIG1hbmFnZWRfZmFsY29uczsKIAll bnVtIG52a21fZGV2aWR4IGRldmlkeDsKIAl1MzIgYmFzZTsKKworCXU2NCB3cHJfYWRkcjsKKwl1 MzIgd3ByX3NpemU7CisKKwlib29sIGRlYnVnX21vZGU7CiB9OwogI2RlZmluZSBudmttX3NlY2Jv b3QocCkgY29udGFpbmVyX29mKChwKSwgc3RydWN0IG52a21fc2VjYm9vdCwgc3ViZGV2KQogCmRp ZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0tidWlsZCBiL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvS2J1aWxkCmluZGV4IGIwMmI4NjhhNjU4OS4uNTA3 NmQxNTAwZjQ3IDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0ti dWlsZAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L0tidWlsZApAQCAtMSwz ICsxLDcgQEAKIG52a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Jhc2UubworbnZrbS15ICs9 IG52a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGVfZ3IubworbnZrbS15ICs9IG52a20vc3ViZGV2 L3NlY2Jvb3QvYWNyLm8KK252a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Fjcl9yMzUyLm8K K252a20teSArPSBudmttL3N1YmRldi9zZWNib290L2Fjcl9yMzYxLm8KIG52a20teSArPSBudmtt L3N1YmRldi9zZWNib290L2dtMjAwLm8KIG52a20teSArPSBudmttL3N1YmRldi9zZWNib290L2dt MjBiLm8KZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyLmMg Yi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzVkYzA2NTU3ODc3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3IuYwpAQCAtMCwwICsxLDU0IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBOVklESUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYWNyLmgiCisKKyNpbmNsdWRl IDxjb3JlL2Zpcm13YXJlLmg+CisKKy8qKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZHVw bGljYXRlIGEgZmlybXdhcmUgZmlsZSBpbiBtZW1vcnkgYW5kIGNoZWNrIHRoYXQKKyAqIGl0IGhh cyB0aGUgcmVxdWlyZWQgbWluaW11bSBzaXplLgorICovCit2b2lkICoKK252a21fYWNyX2xvYWRf ZmlybXdhcmUoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsIGNvbnN0IGNoYXIgKm5h bWUsCisJCSAgICAgICBzaXplX3QgbWluX3NpemUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJl ICpmdzsKKwl2b2lkICpibG9iOworCWludCByZXQ7CisKKwlyZXQgPSBudmttX2Zpcm13YXJlX2dl dChzdWJkZXYtPmRldmljZSwgbmFtZSwgJmZ3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCWlmIChmdy0+c2l6ZSA8IG1pbl9zaXplKSB7CisJCW52a21fZXJyb3Ioc3ViZGV2 LCAiJXMgaXMgc21hbGxlciB0aGFuIGV4cGVjdGVkIHNpemUgJXp1XG4iLAorCQkJICAgbmFtZSwg bWluX3NpemUpOworCQludmttX2Zpcm13YXJlX3B1dChmdyk7CisJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOworCX0KKwlibG9iID0ga21lbWR1cChmdy0+ZGF0YSwgZnctPnNpemUsIEdGUF9LRVJO RUwpOworCW52a21fZmlybXdhcmVfcHV0KGZ3KTsKKwlpZiAoIWJsb2IpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJcmV0dXJuIGJsb2I7Cit9CmRpZmYgLS1naXQgYS9kcm0vbm91dmVh dS9udmttL3N1YmRldi9zZWNib290L2Fjci5oIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9hY3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUxNzI3 ZmQ4YTYyNQotLS0gL2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvYWNyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgTlZJ RElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNp Zm5kZWYgX19OVktNX1NFQ0JPT1RfQUNSX0hfXworI2RlZmluZSBfX05WS01fU0VDQk9PVF9BQ1Jf SF9fCisKKyNpbmNsdWRlICJwcml2LmgiCisKK3N0cnVjdCBudmttX2FjcjsKKworLyoqCisgKiBz dHJ1Y3QgbnZrbV9hY3JfZnVuYyAtIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyBzcGVjaWZpYyB0 byBhbiBBQ1IKKyAqCisgKiBAYm9vdF9mYWxjb246IElEIG9mIHRoZSBmYWxjb24gdGhhdCB3aWxs IHBlcmZvcm0gc2VjdXJlIGJvb3QKKyAqIEBsb2FkOiBtYWtlIHRoZSBBQ1IgcmVhZHkgdG8gcnVu IG9uIHRoZSBnaXZlbiBzZWNib290IGRldmljZQorICogQHJlc2V0OiByZXNldCB0aGUgc3BlY2lm aWVkIGZhbGNvbgorICogQHN0YXJ0OiBzdGFydCB0aGUgc3BlY2lmaWVkIGZhbGNvbiAoYXNzdW1l ZCB0byBoYXZlIGJlZW4gcmVzZXQpCisgKi8KK3N0cnVjdCBudmttX2Fjcl9mdW5jIHsKKwllbnVt IG52a21fZmFsY29uaWR4IGJvb3RfZmFsY29uOworCisJdm9pZCAoKmR0b3IpKHN0cnVjdCBudmtt X2FjciAqKTsKKwlpbnQgKCpvbmVpbml0KShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0IG52a21f c2VjYm9vdCAqKTsKKwlpbnQgKCpmaW5pKShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0IG52a21f c2VjYm9vdCAqLCBib29sKTsKKwlpbnQgKCpsb2FkKShzdHJ1Y3QgbnZrbV9hY3IgKiwgc3RydWN0 IG52a21fc2VjYm9vdCAqLAorCQkgICAgc3RydWN0IG52a21fZ3B1b2JqICosIHU2NCk7CisJaW50 ICgqcmVzZXQpKHN0cnVjdCBudmttX2FjciAqLCBzdHJ1Y3QgbnZrbV9zZWNib290ICosCisJCSAg ICAgZW51bSBudmttX2ZhbGNvbmlkeCk7CisJaW50ICgqc3RhcnQpKHN0cnVjdCBudmttX2FjciAq LCBzdHJ1Y3QgbnZrbV9zZWNib290ICosCisJCSAgICAgZW51bSBudmttX2ZhbGNvbmlkeCk7Cit9 OworCisvKioKKyAqIHN0cnVjdCBudmttX2FjciAtIGluc3RhbmNlIG9mIGFuIEFDUgorICoKKyAq IEBzdGFydF9hZGRyZXNzOiB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIEhTIGJvb3Rsb2Fk ZXIKKyAqLworc3RydWN0IG52a21fYWNyIHsKKwljb25zdCBzdHJ1Y3QgbnZrbV9hY3JfZnVuYyAq ZnVuYzsKKwljb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldjsKKworCXUzMiBzdGFydF9h ZGRyZXNzOworfTsKKwordm9pZCAqbnZrbV9hY3JfbG9hZF9maXJtd2FyZShjb25zdCBzdHJ1Y3Qg bnZrbV9zdWJkZXYgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworCitzdHJ1Y3QgbnZrbV9hY3Ig KmFjcl9yMzUyX25ldyh2b2lkKTsKK3N0cnVjdCBudmttX2FjciAqYWNyX3IzNjFfbmV3KHZvaWQp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv YWNyX3IzNTIuYyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdhZjc4NjZhYjFlYwotLS0g L2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIu YwpAQCAtMCwwICsxLDkxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgTlZJRElBIENP UlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1 ZGUgImFjcl9yMzUyLmgiCisjaW5jbHVkZSAibHNfdWNvZGUuaCIKKworI2luY2x1ZGUgPGNvcmUv Z3B1b2JqLmg+CisjaW5jbHVkZSA8Y29yZS9maXJtd2FyZS5oPgorCisvKioKKyAqIHN0cnVjdCBo c2ZfZndfaGVhZGVyIC0gSFMgZmlybXdhcmUgZGVzY3JpcHRvcgorICogQHNpZ19kYmdfb2Zmc2V0 OglvZmZzZXQgb2YgdGhlIGRlYnVnIHNpZ25hdHVyZQorICogQHNpZ19kYmdfc2l6ZToJc2l6ZSBv ZiB0aGUgZGVidWcgc2lnbmF0dXJlCisgKiBAc2lnX3Byb2Rfb2Zmc2V0OglvZmZzZXQgb2YgdGhl IHByb2R1Y3Rpb24gc2lnbmF0dXJlCisgKiBAc2lnX3Byb2Rfc2l6ZToJc2l6ZSBvZiB0aGUgcHJv ZHVjdGlvbiBzaWduYXR1cmUKKyAqIEBwYXRjaF9sb2M6CQlvZmZzZXQgb2YgdGhlIG9mZnNldCAo c2ljKSBvZiB3aGVyZSB0aGUgc2lnbmF0dXJlIGlzCisgKiBAcGF0Y2hfc2lnOgkJb2Zmc2V0IG9m IHRoZSBvZmZzZXQgKHNpYykgdG8gYWRkIHRvIHNpZ18qX29mZnNldAorICogQGhkcl9vZmZzZXQ6 CQlvZmZzZXQgb2YgdGhlIGxvYWQgaGVhZGVyIChzZWUgc3RydWN0IGhzX2xvYWRfaGVhZGVyKQor ICogQGhkcl9zaXplOgkJc2l6ZSBvZiBhYm92ZSBoZWFkZXIKKyAqCisgKiBUaGlzIHN0cnVjdHVy ZSBpcyBlbWJlZGRlZCBpbiB0aGUgSFMgZmlybXdhcmUgaW1hZ2UgYXQKKyAqIGhzX2Jpbl9oZHIu aGVhZGVyX29mZnNldC4KKyAqLworc3RydWN0IGhzZl9md19oZWFkZXIgeworCXUzMiBzaWdfZGJn X29mZnNldDsKKwl1MzIgc2lnX2RiZ19zaXplOworCXUzMiBzaWdfcHJvZF9vZmZzZXQ7CisJdTMy IHNpZ19wcm9kX3NpemU7CisJdTMyIHBhdGNoX2xvYzsKKwl1MzIgcGF0Y2hfc2lnOworCXUzMiBo ZHJfb2Zmc2V0OworCXUzMiBoZHJfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IGFjcl9yMzUy X2ZsY25fYmxfZGVzYyAtIERNRU0gYm9vdGxvYWRlciBkZXNjcmlwdG9yCisgKiBAc2lnbmF0dXJl OgkJMTZCIHNpZ25hdHVyZSBmb3Igc2VjdXJlIGNvZGUuIDBzIGlmIG5vIHNlY3VyZSBjb2RlCisg KiBAY3R4X2RtYToJCURNQSBjb250ZXh0IHRvIGJlIHVzZWQgYnkgQkwgd2hpbGUgbG9hZGluZyBj b2RlL2RhdGEKKyAqIEBjb2RlX2RtYV9iYXNlOgkyNTZCLWFsaWduZWQgUGh5c2ljYWwgRkIgQWRk cmVzcyB3aGVyZSBjb2RlIGlzIGxvY2F0ZWQKKyAqCQkJKGZhbGNvbidzICR4Y2Jhc2UgcmVnaXN0 ZXIpCisgKiBAbm9uX3NlY19jb2RlX29mZjoJb2Zmc2V0IGZyb20gY29kZV9kbWFfYmFzZSB3aGVy ZSB0aGUgbm9uLXNlY3VyZSBjb2RlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVk LiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgorICogQG5v bl9zZWNfY29kZV9zaXplOgl0aGUgc2l6ZSBvZiB0aGUgbm9uU2VjdXJlIGNvZGUgcGFydC4KKyAq IEBzZWNfY29kZV9vZmY6CW9mZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNlY3Vy ZSBjb2RlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11 c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgorICogQHNlY19jb2RlX3NpemU6CW9m ZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNlY3VyZSBjb2RlIGlzCisgKiAgICAg ICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2Yg MjU2IHRvIGhlbHAgcGVyZgorICogQGNvZGVfZW50cnlfcG9pbnQ6CWNvZGUgZW50cnkgcG9pbnQg d2hpY2ggd2lsbCBiZSBpbnZva2VkIGJ5IEJMIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAg ICBjb2RlIGlzIGxvYWRlZC4KKyAqIEBkYXRhX2RtYV9iYXNlOgkyNTZCIGFsaWduZWQgUGh5c2lj YWwgRkIgQWRkcmVzcyB3aGVyZSBkYXRhIGlzIGxvY2F0ZWQuCisgKgkJCShmYWxjb24ncyAkeGRi YXNlIHJlZ2lzdGVyKQorICogQGRhdGFfc2l6ZToJCXNpemUgb2YgZGF0YSBibG9jay4gU2hvdWxk IGJlIG11bHRpcGxlIG9mIDI1NkIKKyAqCisgKiBTdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYm9vdGxv YWRlciB0byBsb2FkIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBUaGlzIGhhcworICogdG8gYmUgZmls bGVkIGJ5IGhvc3QgYW5kIGNvcGllZCBpbnRvIERNRU0gYXQgb2Zmc2V0IHByb3ZpZGVkIGluIHRo ZQorICogaHNmbGNuX2JsX2Rlc2MuYmxfZGVzY19kbWVtX2xvYWRfb2ZmLgorICovCitzdHJ1Y3Qg YWNyX3IzNTJfZmxjbl9ibF9kZXNjIHsKKwl1MzIgcmVzZXJ2ZWRbNF07CisJdTMyIHNpZ25hdHVy ZVs0XTsKKwl1MzIgY3R4X2RtYTsKKwl1MzIgY29kZV9kbWFfYmFzZTsKKwl1MzIgbm9uX3NlY19j b2RlX29mZjsKKwl1MzIgbm9uX3NlY19jb2RlX3NpemU7CisJdTMyIHNlY19jb2RlX29mZjsKKwl1 MzIgc2VjX2NvZGVfc2l6ZTsKKwl1MzIgY29kZV9lbnRyeV9wb2ludDsKKwl1MzIgZGF0YV9kbWFf YmFzZTsKKwl1MzIgZGF0YV9zaXplOworfTsKKworLyoqCisgKiBhY3JfcjM1Ml9nZW5lcmF0ZV9m bGNuX2JsX2Rlc2MgLSBnZW5lcmF0ZSBnZW5lcmljIEJMIGRlc2NyaXB0b3IgZm9yIExTIGltYWdl CisgKi8KK3N0YXRpYyB2b2lkCithY3JfcjM1Ml9nZW5lcmF0ZV9mbGNuX2JsX2Rlc2MoY29uc3Qg c3RydWN0IG52a21fYWNyICphY3IsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2lt ZyAqaW1nLCB1NjQgd3ByX2FkZHIsCisJCQkgICAgICAgdm9pZCAqX2Rlc2MpCit7CisJc3RydWN0 IGFjcl9yMzUyX2ZsY25fYmxfZGVzYyAqZGVzYyA9IF9kZXNjOworCWNvbnN0IHN0cnVjdCBsc191 Y29kZV9pbWdfZGVzYyAqcGRlc2MgPSAmaW1nLT51Y29kZV9kZXNjOworCXU2NCBiYXNlLCBhZGRy X2NvZGUsIGFkZHJfZGF0YTsKKworCWJhc2UgPSB3cHJfYWRkciArIGltZy0+bHNiX2hlYWRlci51 Y29kZV9vZmYgKyBwZGVzYy0+YXBwX3N0YXJ0X29mZnNldDsKKwlhZGRyX2NvZGUgPSAoYmFzZSAr IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQpID4+IDg7CisJYWRkcl9kYXRhID0gKGJh c2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0KSA+PiA4OworCisJbWVtc2V0KGRl c2MsIDAsIHNpemVvZigqZGVzYykpOworCWRlc2MtPmN0eF9kbWEgPSBGQUxDT05fRE1BSURYX1VD T0RFOworCWRlc2MtPmNvZGVfZG1hX2Jhc2UgPSBsb3dlcl8zMl9iaXRzKGFkZHJfY29kZSk7CisJ ZGVzYy0+bm9uX3NlY19jb2RlX29mZiA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ7 CisJZGVzYy0+bm9uX3NlY19jb2RlX3NpemUgPSBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfc2l6 ZTsKKwlkZXNjLT5jb2RlX2VudHJ5X3BvaW50ID0gcGRlc2MtPmFwcF9pbWVtX2VudHJ5OworCWRl c2MtPmRhdGFfZG1hX2Jhc2UgPSBsb3dlcl8zMl9iaXRzKGFkZHJfZGF0YSk7CisJZGVzYy0+ZGF0 YV9zaXplID0gcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX3NpemU7Cit9CisKKworLyoqCisgKiBz dHJ1Y3QgaHNmbGNuX2Fjcl9kZXNjIC0gZGF0YSBzZWN0aW9uIG9mIHRoZSBIUyBmaXJtd2FyZQor ICoKKyAqIFRoaXMgaGVhZGVyIGlzIHRvIGJlIGNvcGllZCBhdCB0aGUgYmVnaW5uaW5nIG9mIERN RU0gYnkgdGhlIEhTIGJvb3Rsb2FkZXIuCisgKgorICogQHNpZ25hdHVyZToJCXNpZ25hdHVyZSBv ZiBBQ1IgdWNvZGUKKyAqIEB3cHJfcmVnaW9uX2lkOglyZWdpb24gSUQgaG9sZGluZyB0aGUgV1BS IGhlYWRlciBhbmQgaXRzIGRldGFpbHMKKyAqIEB3cHJfb2Zmc2V0OgkJb2Zmc2V0IGZyb20gdGhl IFdQUiByZWdpb24gaG9sZGluZyB0aGUgd3ByIGhlYWRlcgorICogQHJlZ2lvbnM6CQlyZWdpb24g ZGVzY3JpcHRvcnMKKyAqIEBub253cHJfdWNvZGVfYmxvYl9zaXplOglzaXplIG9mIExTIGJsb2IK KyAqIEBub253cHJfdWNvZGVfYmxvYl9zdGFydDoJRkIgbG9jYXRpb24gb2YgTFMgYmxvYiBpcwor ICovCitzdHJ1Y3QgaHNmbGNuX2Fjcl9kZXNjIHsKKwl1bmlvbiB7CisJCXU4IHJlc2VydmVkX2Rt ZW1bMHgyMDBdOworCQl1MzIgc2lnbmF0dXJlc1s0XTsKKwl9IHVjb2RlX3Jlc2VydmVkX3NwYWNl OworCXUzMiB3cHJfcmVnaW9uX2lkOworCXUzMiB3cHJfb2Zmc2V0OworCXUzMiBtbXVfbWVtX3Jh bmdlOworI2RlZmluZSBGTENOX0FDUl9NQVhfUkVHSU9OUyAyCisJc3RydWN0IHsKKwkJdTMyIG5v X3JlZ2lvbnM7CisJCXN0cnVjdCB7CisJCQl1MzIgc3RhcnRfYWRkcjsKKwkJCXUzMiBlbmRfYWRk cjsKKwkJCXUzMiByZWdpb25faWQ7CisJCQl1MzIgcmVhZF9tYXNrOworCQkJdTMyIHdyaXRlX21h c2s7CisJCQl1MzIgY2xpZW50X21hc2s7CisJCX0gcmVnaW9uX3Byb3BzW0ZMQ05fQUNSX01BWF9S RUdJT05TXTsKKwl9IHJlZ2lvbnM7CisJdTMyIHVjb2RlX2Jsb2Jfc2l6ZTsKKwl1NjQgdWNvZGVf YmxvYl9iYXNlIF9fYWxpZ25lZCg4KTsKKwlzdHJ1Y3QgeworCQl1MzIgdnByX2VuYWJsZWQ7CisJ CXUzMiB2cHJfc3RhcnQ7CisJCXUzMiB2cHJfZW5kOworCQl1MzIgaGRjcF9wb2xpY2llczsKKwl9 IHZwcl9kZXNjOworfTsKKworCisvKgorICogTG93LXNlY3VyZSBibG9iIGNyZWF0aW9uCisgKi8K KwordHlwZWRlZiBpbnQgKCpsc2ZfbG9hZF9mdW5jKShjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYg Kiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKKworLyoqCisgKiBsc191Y29kZV9pbWdfbG9hZCgp IC0gY3JlYXRlIGEgbHNmX3Vjb2RlX2ltZyBhbmQgbG9hZCBpdAorICovCitzdGF0aWMgc3RydWN0 IGxzX3Vjb2RlX2ltZyAqCitsc191Y29kZV9pbWdfbG9hZChjb25zdCBzdHJ1Y3QgbnZrbV9zdWJk ZXYgKnN1YmRldiwgbHNmX2xvYWRfZnVuYyBsb2FkX2Z1bmMpCit7CisJc3RydWN0IGxzX3Vjb2Rl X2ltZyAqaW1nOworCWludCByZXQ7CisKKwlpbWcgPSBremFsbG9jKHNpemVvZigqaW1nKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFpbWcpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0 ID0gbG9hZF9mdW5jKHN1YmRldiwgaW1nKTsKKworCWlmIChyZXQpIHsKKwkJa2ZyZWUoaW1nKTsK KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gaW1nOworfQorCisjZGVmaW5l IExTRl9MU0JfSEVBREVSX0FMSUdOIDI1NgorI2RlZmluZSBMU0ZfQkxfREFUQV9BTElHTiAyNTYK KyNkZWZpbmUgTFNGX0JMX0RBVEFfU0laRV9BTElHTiAyNTYKKyNkZWZpbmUgTFNGX0JMX0NPREVf U0laRV9BTElHTiAyNTYKKyNkZWZpbmUgTFNGX1VDT0RFX0RBVEFfQUxJR04gNDA5NgorCisvKioK KyAqIGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMgLSBmaWxsIHRoZSBXUFIgYW5kIExTQiBoZWFk ZXJzIG9mIGFuIGltYWdlCisgKiBAYWNyOglBQ1IgdG8gdXNlCisgKiBAaW1nOglpbWFnZSB0byBn ZW5lcmF0ZSBmb3IKKyAqIEBvZmZzZXQ6CW9mZnNldCBpbiB0aGUgV1BSIHJlZ2lvbiB3aGVyZSB0 aGlzIGltYWdlIHN0YXJ0cworICoKKyAqIEFsbG9jYXRlIHNwYWNlIGluIHRoZSBXUFIgYXJlYSBm cm9tIG9mZnNldCBhbmQgd3JpdGUgdGhlIFdQUiBhbmQgTFNCIGhlYWRlcnMKKyAqIGFjY29yZGlu Z2x5LgorICoKKyAqIFJldHVybjogb2Zmc2V0IGF0IHRoZSBlbmQgb2YgdGhpcyBpbWFnZS4KKyAq Lworc3RhdGljIHUzMgorbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgYWNyX3IzNTIg KmFjciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nLAorCQkJICB1MzIgb2Zmc2V0KQoreworCXN0 cnVjdCBsc2Zfd3ByX2hlYWRlciAqd2hkciA9ICZpbWctPndwcl9oZWFkZXI7CisJc3RydWN0IGxz Zl9sc2JfaGVhZGVyICpsaGRyID0gJmltZy0+bHNiX2hlYWRlcjsKKwlzdHJ1Y3QgbHNfdWNvZGVf aW1nX2Rlc2MgKmRlc2MgPSAmaW1nLT51Y29kZV9kZXNjOworCWNvbnN0IHN0cnVjdCBhY3JfcjM1 Ml9sc19mdW5jICpmdW5jID0KKwkJCQkJICAgIGFjci0+ZnVuYy0+bHNfZnVuY1tpbWctPmZhbGNv bl9pZF07CisKKwlpZiAoaW1nLT51Y29kZV9oZWFkZXIpIHsKKwkJbnZrbV9mYXRhbChhY3ItPmJh c2Uuc3ViZGV2LAorCQkJICAgImltYWdlcyB3aXRob3VnaCBsb2FkZXIgYXJlIG5vdCBzdXBwb3J0 ZWQgeWV0IVxuIik7CisJCXJldHVybiBvZmZzZXQ7CisJfQorCisJLyogRmlsbCBXUFIgaGVhZGVy ICovCisJd2hkci0+ZmFsY29uX2lkID0gaW1nLT5mYWxjb25faWQ7CisJd2hkci0+Ym9vdHN0cmFw X293bmVyID0gYWNyLT5iYXNlLmZ1bmMtPmJvb3RfZmFsY29uOworCXdoZHItPnN0YXR1cyA9IExT Rl9JTUFHRV9TVEFUVVNfQ09QWTsKKworCS8qIEFsaWduLCBzYXZlIG9mZiwgYW5kIGluY2x1ZGUg YW4gTFNCIGhlYWRlciBzaXplICovCisJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBMU0ZfTFNCX0hF QURFUl9BTElHTik7CisJd2hkci0+bHNiX29mZnNldCA9IG9mZnNldDsKKwlvZmZzZXQgKz0gc2l6 ZW9mKHN0cnVjdCBsc2ZfbHNiX2hlYWRlcik7CisKKwkvKgorCSAqIEFsaWduLCBzYXZlIG9mZiwg YW5kIGluY2x1ZGUgdGhlIG9yaWdpbmFsIChzdGF0aWMpIHVjb2RlCisJICogaW1hZ2Ugc2l6ZQor CSAqLworCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgTFNGX1VDT0RFX0RBVEFfQUxJR04pOworCWxo ZHItPnVjb2RlX29mZiA9IG9mZnNldDsKKwlvZmZzZXQgKz0gaW1nLT51Y29kZV9zaXplOworCisJ LyoKKwkgKiBGb3IgZmFsY29ucyB0aGF0IHVzZSBhIGJvb3QgbG9hZGVyIChCTCksIHdlIGFwcGVu ZCBhIGxvYWRlcgorCSAqIGRlc2Mgc3RydWN0dXJlIG9uIHRoZSBlbmQgb2YgdGhlIHVjb2RlIGlt YWdlIGFuZCBjb25zaWRlcgorCSAqIHRoaXMgdGhlIGJvb3QgbG9hZGVyIGRhdGEuIFRoZSBob3N0 IHdpbGwgdGhlbiBjb3B5IHRoZSBsb2FkZXIKKwkgKiBkZXNjIGFyZ3MgdG8gdGhpcyBzcGFjZSB3 aXRoaW4gdGhlIFdQUiByZWdpb24gKGJlZm9yZSBsb2NraW5nCisJICogZG93bikgYW5kIHRoZSBI UyBiaW4gd2lsbCB0aGVuIGNvcHkgdGhlbSB0byBETUVNIDAgZm9yIHRoZQorCSAqIGxvYWRlci4K KwkgKi8KKwlsaGRyLT5ibF9jb2RlX3NpemUgPSBBTElHTihkZXNjLT5ib290bG9hZGVyX3NpemUs CisJCQkJICAgTFNGX0JMX0NPREVfU0laRV9BTElHTik7CisJbGhkci0+dWNvZGVfc2l6ZSA9IEFM SUdOKGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCwKKwkJCQkgTFNGX0JMX0NPREVfU0la RV9BTElHTikgKyBsaGRyLT5ibF9jb2RlX3NpemU7CisJbGhkci0+ZGF0YV9zaXplID0gQUxJR04o ZGVzYy0+YXBwX3NpemUsIExTRl9CTF9DT0RFX1NJWkVfQUxJR04pICsKKwkJCQlsaGRyLT5ibF9j b2RlX3NpemUgLSBsaGRyLT51Y29kZV9zaXplOworCS8qCisJICogVGhvdWdoIHRoZSBCTCBpcyBs b2NhdGVkIGF0IDB0aCBvZmZzZXQgb2YgdGhlIGltYWdlLCB0aGUgVkEKKwkgKiBpcyBkaWZmZXJl bnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgZG9lc24ndCBjb2xsaWRlIHRoZSBhY3R1YWwKKwkgKiBP UyBWQSByYW5nZQorCSAqLworCWxoZHItPmJsX2ltZW1fb2ZmID0gZGVzYy0+Ym9vdGxvYWRlcl9p bWVtX29mZnNldDsKKwlsaGRyLT5hcHBfY29kZV9vZmYgPSBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0 ICsKKwkJCSAgICAgZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0OworCWxoZHItPmFwcF9j b2RlX3NpemUgPSBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplOworCWxoZHItPmFwcF9kYXRh X29mZiA9IGRlc2MtPmFwcF9zdGFydF9vZmZzZXQgKworCQkJICAgICBkZXNjLT5hcHBfcmVzaWRl bnRfZGF0YV9vZmZzZXQ7CisJbGhkci0+YXBwX2RhdGFfc2l6ZSA9IGRlc2MtPmFwcF9yZXNpZGVu dF9kYXRhX3NpemU7CisKKwlsaGRyLT5mbGFncyA9IDA7CisJaWYgKGltZy0+ZmFsY29uX2lkID09 IGFjci0+YmFzZS5mdW5jLT5ib290X2ZhbGNvbikKKwkJbGhkci0+ZmxhZ3MgPSBMU0ZfRkxBR19E TUFDVExfUkVRX0NUWDsKKworCS8qIEdQQ0NTIHdpbGwgYmUgbG9hZGVkIHVzaW5nIFBSSSAqLwor CWlmIChpbWctPmZhbGNvbl9pZCA9PSBOVktNX0ZBTENPTl9HUENDUykKKwkJbGhkci0+ZmxhZ3Mg fD0gTFNGX0ZMQUdfRk9SQ0VfUFJJVl9MT0FEOworCisJLyogQWxpZ24gYW5kIHNhdmUgb2ZmIEJM IGRlc2NyaXB0b3Igc2l6ZSAqLworCWxoZHItPmJsX2RhdGFfc2l6ZSA9IEFMSUdOKGZ1bmMtPmJs X2Rlc2Nfc2l6ZSwgTFNGX0JMX0RBVEFfU0laRV9BTElHTik7CisKKwkvKgorCSAqIEFsaWduLCBz YXZlIG9mZiwgYW5kIGluY2x1ZGUgdGhlIGFkZGl0aW9uYWwgQkwgZGF0YQorCSAqLworCW9mZnNl dCA9IEFMSUdOKG9mZnNldCwgTFNGX0JMX0RBVEFfQUxJR04pOworCWxoZHItPmJsX2RhdGFfb2Zm ID0gb2Zmc2V0OworCW9mZnNldCArPSBsaGRyLT5ibF9kYXRhX3NpemU7CisKKwlyZXR1cm4gb2Zm c2V0OworfQorCisvKioKKyAqIHN0cnVjdCBsc191Y29kZV9tZ3IgLSBtYW5hZ2VyIGZvciBhbGwg TFMgZmFsY29uIGZpcm13YXJlcworICogQGNvdW50OgludW1iZXIgb2YgbWFuYWdlZCBMUyBmYWxj b25zCisgKiBAd3ByX3NpemU6CXNpemUgb2YgdGhlIHJlcXVpcmVkIFdQUiByZWdpb24gaW4gYnl0 ZXMKKyAqIEBpbWdfbGlzdDoJbGlua2VkIGxpc3Qgb2YgbHNmX3Vjb2RlX2ltZworICovCitzdHJ1 Y3QgbHNfdWNvZGVfbWdyIHsKKwl1MTYgY291bnQ7CisJdTMyIHdwcl9zaXplOworCXN0cnVjdCBs aXN0X2hlYWQgaW1nX2xpc3Q7Cit9OworCitzdGF0aWMgdm9pZAorbHNfdWNvZGVfbWdyX2luaXQo c3RydWN0IGxzX3Vjb2RlX21nciAqbWdyKQoreworCW1lbXNldChtZ3IsIDAsIHNpemVvZigqbWdy KSk7CisJSU5JVF9MSVNUX0hFQUQoJm1nci0+aW1nX2xpc3QpOworfQorCitzdGF0aWMgdm9pZAor bHNfdWNvZGVfbWdyX2NsZWFudXAoc3RydWN0IGxzX3Vjb2RlX21nciAqbWdyKQoreworCXN0cnVj dCBsc191Y29kZV9pbWcgKmltZywgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW1n LCB0LCAmbWdyLT5pbWdfbGlzdCwgbm9kZSkgeworCQlrZnJlZShpbWctPnVjb2RlX2RhdGEpOwor CQlrZnJlZShpbWctPnVjb2RlX2hlYWRlcik7CisJCWtmcmVlKGltZyk7CisJfQorfQorCitzdGF0 aWMgdm9pZAorbHNfdWNvZGVfbWdyX2FkZF9pbWcoc3RydWN0IGxzX3Vjb2RlX21nciAqbWdyLCBz dHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcpCit7CisJbWdyLT5jb3VudCsrOworCWxpc3RfYWRkX3Rh aWwoJmltZy0+bm9kZSwgJm1nci0+aW1nX2xpc3QpOworfQorCisvKioKKyAqIGxzX3Vjb2RlX21n cl9maWxsX2hlYWRlcnMgLSBmaWxsIFdQUiBhbmQgTFNCIGhlYWRlcnMgb2YgYWxsIG1hbmFnZWQg aW1hZ2VzCisgKi8KK3N0YXRpYyB2b2lkCitsc191Y29kZV9tZ3JfZmlsbF9oZWFkZXJzKHN0cnVj dCBhY3JfcjM1MiAqYWNyLCBzdHJ1Y3QgbHNfdWNvZGVfbWdyICptZ3IpCit7CisJc3RydWN0IGxz X3Vjb2RlX2ltZyAqaW1nOworCXUzMiBvZmZzZXQ7CisKKwkvKgorCSAqIFN0YXJ0IHdpdGggYW4g YXJyYXkgb2YgV1BSIGhlYWRlcnMgYXQgdGhlIGJhc2Ugb2YgdGhlIFdQUi4KKwkgKiBUaGUgZXhw ZWN0YXRpb24gaGVyZSBpcyB0aGF0IHRoZSBzZWN1cmUgZmFsY29uIHdpbGwgZG8gYSBzaW5nbGUg RE1BCisJICogcmVhZCBvZiB0aGlzIGFycmF5IGFuZCBjYWNoZSBpdCBpbnRlcm5hbGx5IHNvIGl0 J3Mgb2sgdG8gcGFjayB0aGVzZS4KKwkgKiBBbHNvLCB3ZSBhZGQgMSB0byB0aGUgZmFsY29uIGNv dW50IHRvIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGFycmF5LgorCSAqLworCW9mZnNldCA9IHNp emVvZihzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIpICogKG1nci0+Y291bnQgKyAxKTsKKworCS8qCisJ ICogV2FsayB0aGUgbWFuYWdlZCBmYWxjb25zLCBhY2NvdW50aW5nIGZvciB0aGUgTFNCIHN0cnVj dHMKKwkgKiBhcyB3ZWxsIGFzIHRoZSB1Y29kZSBpbWFnZXMuCisJICovCisJbGlzdF9mb3JfZWFj aF9lbnRyeShpbWcsICZtZ3ItPmltZ19saXN0LCBub2RlKSB7CisJCW9mZnNldCA9IGxzX3Vjb2Rl X2ltZ19maWxsX2hlYWRlcnMoYWNyLCBpbWcsIG9mZnNldCk7CisJfQorCisJbWdyLT53cHJfc2l6 ZSA9IG9mZnNldDsKK30KKworLyoqCisgKiBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByIC0gd3JpdGUg dGhlIFdQUiBibG9iIGNvbnRlbnRzCisgKi8KK3N0YXRpYyBpbnQKK2xzX3Vjb2RlX21ncl93cml0 ZV93cHIoc3RydWN0IGFjcl9yMzUyICphY3IsIHN0cnVjdCBsc191Y29kZV9tZ3IgKm1nciwKKwkJ ICAgICAgIHN0cnVjdCBudmttX2dwdW9iaiAqd3ByX2Jsb2IsIHUzMiB3cHJfYWRkcikKK3sKKwlz dHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7CisJdTMyIHBvcyA9IDA7CisKKwludmttX2ttYXAod3By X2Jsb2IpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsICZtZ3ItPmltZ19saXN0LCBub2Rl KSB7CisJCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwgcG9zLCAmaW1nLT53cHJfaGVh ZGVyLAorCQkJCSAgICAgIHNpemVvZihpbWctPndwcl9oZWFkZXIpKTsKKworCQludmttX2dwdW9i al9tZW1jcHlfdG8od3ByX2Jsb2IsIGltZy0+d3ByX2hlYWRlci5sc2Jfb2Zmc2V0LAorCQkJCSAg ICAgJmltZy0+bHNiX2hlYWRlciwgc2l6ZW9mKGltZy0+bHNiX2hlYWRlcikpOworCisJCS8qIEdl bmVyYXRlIGFuZCB3cml0ZSBCTCBkZXNjcmlwdG9yICovCisJCWlmICghaW1nLT51Y29kZV9oZWFk ZXIpIHsKKwkJCWNvbnN0IHN0cnVjdCBhY3JfcjM1Ml9sc19mdW5jICpsc19mdW5jID0KKwkJCQkJ ICAgICBhY3ItPmZ1bmMtPmxzX2Z1bmNbaW1nLT5mYWxjb25faWRdOworCQkJdTggZ2Rlc2NbbHNf ZnVuYy0+YmxfZGVzY19zaXplXTsKKworCQkJbHNfZnVuYy0+Z2VuZXJhdGVfYmxfZGVzYygmYWNy LT5iYXNlLCBpbWcsIHdwcl9hZGRyLAorCQkJCQkJICBnZGVzYyk7CisKKwkJCW52a21fZ3B1b2Jq X21lbWNweV90byh3cHJfYmxvYiwKKwkJCQkJICAgICAgaW1nLT5sc2JfaGVhZGVyLmJsX2RhdGFf b2ZmLAorCQkJCQkgICAgICBnZGVzYywgbHNfZnVuYy0+YmxfZGVzY19zaXplKTsKKwkJfQorCisJ CS8qIENvcHkgdWNvZGUgKi8KKwkJbnZrbV9ncHVvYmpfbWVtY3B5X3RvKHdwcl9ibG9iLCBpbWct PmxzYl9oZWFkZXIudWNvZGVfb2ZmLAorCQkJCSAgICAgIGltZy0+dWNvZGVfZGF0YSwgaW1nLT51 Y29kZV9zaXplKTsKKworCQlwb3MgKz0gc2l6ZW9mKGltZy0+d3ByX2hlYWRlcik7CisJfQorCisJ bnZrbV93bzMyKHdwcl9ibG9iLCBwb3MsIE5WS01fRkFMQ09OX0lOVkFMSUQpOworCisJbnZrbV9k b25lKHdwcl9ibG9iKTsKKworCXJldHVybiAwOworfQorCisvKiBCb3RoIHNpemUgYW5kIGFkZHJl c3Mgb2YgV1BSIG5lZWQgdG8gYmUgMTI4Sy1hbGlnbmVkICovCisjZGVmaW5lIFdQUl9BTElHTk1F TlQJMHgyMDAwMAorLyoqCisgKiBhY3JfcjM1Ml9wcmVwYXJlX2xzX2Jsb2IoKSAtIHByZXBhcmUg dGhlIExTIGJsb2IKKyAqCisgKiBGb3IgZWFjaCBzZWN1cmVseSBtYW5hZ2VkIGZhbGNvbiwgbG9h ZCB0aGUgRlcsIHNpZ25hdHVyZXMgYW5kIGJvb3Rsb2FkZXJzIGFuZAorICogcHJlcGFyZSBhIHVj b2RlIGJsb2IuIFRoZW4sIGNvbXB1dGUgdGhlIG9mZnNldHMgaW4gdGhlIFdQUiByZWdpb24gZm9y IGVhY2gKKyAqIGJsb2IsIGFuZCBmaW5hbGx5IHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB1Y29kZSBi bG9icyBpbnRvIGEgR1BVIG9iamVjdCB0aGF0CisgKiB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBX UFIgcmVnaW9uIGJ5IHRoZSBIUyBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludAorYWNyX3IzNTJf cHJlcGFyZV9sc19ibG9iKHN0cnVjdCBhY3JfcjM1MiAqYWNyLCB1NjQgd3ByX2FkZHIsIHUzMiB3 cHJfc2l6ZSwKKwkJCSB1bnNpZ25lZCBsb25nIG1hbmFnZWRfZmFsY29ucykKK3sKKwljb25zdCBz dHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9IGFjci0+YmFzZS5zdWJkZXY7CisJc3RydWN0IGxz X3Vjb2RlX21nciBtZ3I7CisJaW50IGZhbGNvbl9pZDsKKwlpbnQgcmV0OworCisJbHNfdWNvZGVf bWdyX2luaXQoJm1ncik7CisKKwkvKiBMb2FkIGFsbCBMUyBibG9icyAqLworCWZvcl9lYWNoX3Nl dF9iaXQoZmFsY29uX2lkLCAmbWFuYWdlZF9mYWxjb25zLCBOVktNX0ZBTENPTl9FTkQpIHsKKwkJ c3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOworCisJCWltZyA9IGxzX3Vjb2RlX2ltZ19sb2FkKHN1 YmRldiwKKwkJCQkJYWNyLT5mdW5jLT5sc19mdW5jW2ZhbGNvbl9pZF0tPmxvYWQpOworCisJCWlm IChJU19FUlIoaW1nKSkgeworCQkJcmV0ID0gUFRSX0VSUihpbWcpOworCQkJZ290byBjbGVhbnVw OworCQl9CisJCWxzX3Vjb2RlX21ncl9hZGRfaW1nKCZtZ3IsIGltZyk7CisJfQorCisJLyoKKwkg KiBGaWxsIHRoZSBXUFIgYW5kIExTRiBoZWFkZXJzIHdpdGggdGhlIHJpZ2h0IG9mZnNldHMgYW5k IGNvbXB1dGUKKwkgKiByZXF1aXJlZCBXUFIgc2l6ZQorCSAqLworCWxzX3Vjb2RlX21ncl9maWxs X2hlYWRlcnMoYWNyLCAmbWdyKTsKKwltZ3Iud3ByX3NpemUgPSBBTElHTihtZ3Iud3ByX3NpemUs IFdQUl9BTElHTk1FTlQpOworCisJLyogQWxsb2NhdGUgR1BVIG9iamVjdCB0aGF0IHdpbGwgY29u dGFpbiB0aGUgV1BSIHJlZ2lvbiAqLworCXJldCA9IG52a21fZ3B1b2JqX25ldyhzdWJkZXYtPmRl dmljZSwgbWdyLndwcl9zaXplLCBXUFJfQUxJR05NRU5ULAorCQkJICAgICAgZmFsc2UsIE5VTEws ICZhY3ItPmxzX2Jsb2IpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKworCW52a21fZGVi dWcoc3ViZGV2LCAiJWQgbWFuYWdlZCBMUyBmYWxjb25zLCBXUFIgc2l6ZSBpcyAlZCBieXRlc1xu IiwKKwkJICAgIG1nci5jb3VudCwgbWdyLndwcl9zaXplKTsKKworCS8qIElmIFdQUiBhZGRyZXNz IGFuZCBzaXplIGFyZSBub3QgZml4ZWQsIHNldCB0aGVtIHRvIGZpdCB0aGUgTFMgYmxvYiAqLwor CWlmICh3cHJfc2l6ZSA9PSAwKSB7CisJCXdwcl9hZGRyID0gYWNyLT5sc19ibG9iLT5hZGRyOwor CQl3cHJfc2l6ZSA9IG1nci53cHJfc2l6ZTsKKwkvKgorCSAqIEJ1dCBpZiB0aGUgV1BSIHJlZ2lv biBpcyBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIsIGl0IGlzIGlsbGVnYWwgZm9yCisJICogdGhlIEhT IGJsb2IgdG8gYmUgbGFyZ2VyIHRoYW4gdGhpcyByZWdpb24uCisJICovCisJfSBlbHNlIGlmICht Z3Iud3ByX3NpemUgPiB3cHJfc2l6ZSkgeworCQludmttX2Vycm9yKHN1YmRldiwgIldQUiByZWdp b24gdG9vIHNtYWxsIGZvciBGVyBibG9iIVxuIik7CisJCW52a21fZXJyb3Ioc3ViZGV2LCAicmVx dWlyZWQ6ICVkQlxuIiwgbWdyLndwcl9zaXplKTsKKwkJbnZrbV9lcnJvcihzdWJkZXYsICJhdmFp bGFibGU6ICVkQlxuIiwgd3ByX3NpemUpOworCQlyZXQgPSAtRU5PU1BDOworCQlnb3RvIGNsZWFu dXA7CisJfQorCisJLyogV3JpdGUgTFMgYmxvYiAqLworCXJldCA9IGxzX3Vjb2RlX21ncl93cml0 ZV93cHIoYWNyLCAmbWdyLCBhY3ItPmxzX2Jsb2IsIHdwcl9hZGRyKTsKKwlpZiAocmV0KQorCQlu dmttX2dwdW9ial9kZWwoJmFjci0+bHNfYmxvYik7CisKK2NsZWFudXA6CisJbHNfdWNvZGVfbWdy X2NsZWFudXAoJm1ncik7CisKKwlyZXR1cm4gcmV0OworfQorCisKKworCisvKioKKyAqIGFjcl9y MzUyX2hzZl9wYXRjaF9zaWduYXR1cmUoKSAtIHBhdGNoIEhTIGJsb2Igd2l0aCBjb3JyZWN0IHNp Z25hdHVyZQorICovCitzdGF0aWMgdm9pZAorYWNyX3IzNTJfaHNmX3BhdGNoX3NpZ25hdHVyZShz dHJ1Y3QgbnZrbV9zZWNib290ICpzYiwgdm9pZCAqYWNyX2ltYWdlKQoreworCXN0cnVjdCBmd19i aW5faGVhZGVyICpoc2Jpbl9oZHIgPSBhY3JfaW1hZ2U7CisJc3RydWN0IGhzZl9md19oZWFkZXIg KmZ3X2hkciA9IGFjcl9pbWFnZSArIGhzYmluX2hkci0+aGVhZGVyX29mZnNldDsKKwl2b2lkICpo c19kYXRhID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5kYXRhX29mZnNldDsKKwl2b2lkICpzaWc7 CisJdTMyIHNpZ19zaXplOworCisJLyogRmFsY29uIGluIGRlYnVnIG9yIHByb2R1Y3Rpb24gbW9k ZT8gKi8KKwlpZiAoc2ItPmRlYnVnX21vZGUpIHsKKwkJc2lnID0gYWNyX2ltYWdlICsgZndfaGRy LT5zaWdfZGJnX29mZnNldDsKKwkJc2lnX3NpemUgPSBmd19oZHItPnNpZ19kYmdfc2l6ZTsKKwl9 IGVsc2UgeworCQlzaWcgPSBhY3JfaW1hZ2UgKyBmd19oZHItPnNpZ19wcm9kX29mZnNldDsKKwkJ c2lnX3NpemUgPSBmd19oZHItPnNpZ19wcm9kX3NpemU7CisJfQorCisJLyogUGF0Y2ggc2lnbmF0 dXJlICovCisJbWVtY3B5KGhzX2RhdGEgKyBmd19oZHItPnBhdGNoX2xvYywgc2lnICsgZndfaGRy LT5wYXRjaF9zaWcsIHNpZ19zaXplKTsKK30KKworc3RhdGljIHZvaWQKK2Fjcl9yMzUyX2ZpeHVw X2hzX2Rlc2Moc3RydWN0IGFjcl9yMzUyICphY3IsIHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLAor CQkgICAgICAgc3RydWN0IGhzZmxjbl9hY3JfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgbnZrbV9n cHVvYmogKmxzX2Jsb2IgPSBhY3ItPmxzX2Jsb2I7CisKKwlkZXNjLT51Y29kZV9ibG9iX2Jhc2Ug PSBsc19ibG9iLT5hZGRyOworCWRlc2MtPnVjb2RlX2Jsb2Jfc2l6ZSA9IGxzX2Jsb2ItPnNpemU7 CisKKwlkZXNjLT53cHJfb2Zmc2V0ID0gMDsKKworCS8qIFdQUiByZWdpb24gaW5mb3JtYXRpb24g aWYgV1BSIGlzIG5vdCBmaXhlZCAqLworCWlmIChzYi0+d3ByX3NpemUgPT0gMCkgeworCQlkZXNj LT53cHJfcmVnaW9uX2lkID0gMTsKKwkJZGVzYy0+cmVnaW9ucy5ub19yZWdpb25zID0gMTsKKwkJ ZGVzYy0+cmVnaW9ucy5yZWdpb25fcHJvcHNbMF0ucmVnaW9uX2lkID0gMTsKKwkJZGVzYy0+cmVn aW9ucy5yZWdpb25fcHJvcHNbMF0uc3RhcnRfYWRkciA9IGxzX2Jsb2ItPmFkZHIgPj4gODsKKwkJ ZGVzYy0+cmVnaW9ucy5yZWdpb25fcHJvcHNbMF0uZW5kX2FkZHIgPQorCQkJCQkgICAobHNfYmxv Yi0+YWRkciArIGxzX2Jsb2ItPnNpemUpID4+IDg7CisJfQorfQorCitzdGF0aWMgdm9pZAorYWNy X3IzNTJfZ2VuZXJhdGVfaHNfYmxfZGVzYyhjb25zdCBzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyICpo ZHIsIHZvaWQgKl9ibF9kZXNjLAorCQkJICAgICB1NjQgb2Zmc2V0KQoreworCXN0cnVjdCBhY3Jf cjM1Ml9mbGNuX2JsX2Rlc2MgKmJsX2Rlc2MgPSBfYmxfZGVzYzsKKwl1NjQgYWRkcl9jb2RlLCBh ZGRyX2RhdGE7CisKKwltZW1zZXQoYmxfZGVzYywgMCwgc2l6ZW9mKCpibF9kZXNjKSk7CisJYWRk cl9jb2RlID0gb2Zmc2V0ID4+IDg7CisJYWRkcl9kYXRhID0gKG9mZnNldCArIGhkci0+ZGF0YV9k bWFfYmFzZSkgPj4gODsKKworCWJsX2Rlc2MtPmN0eF9kbWEgPSBGQUxDT05fRE1BSURYX1ZJUlQ7 CisJYmxfZGVzYy0+Y29kZV9kbWFfYmFzZSA9IGxvd2VyXzMyX2JpdHMoYWRkcl9jb2RlKTsKKwli bF9kZXNjLT5ub25fc2VjX2NvZGVfb2ZmID0gaGRyLT5ub25fc2VjX2NvZGVfb2ZmOworCWJsX2Rl c2MtPm5vbl9zZWNfY29kZV9zaXplID0gaGRyLT5ub25fc2VjX2NvZGVfc2l6ZTsKKwlibF9kZXNj LT5zZWNfY29kZV9vZmYgPSBoZHItPmFwcFswXS5zZWNfY29kZV9vZmY7CisJYmxfZGVzYy0+c2Vj X2NvZGVfc2l6ZSA9IGhkci0+YXBwWzBdLnNlY19jb2RlX3NpemU7CisJYmxfZGVzYy0+Y29kZV9l bnRyeV9wb2ludCA9IDA7CisJYmxfZGVzYy0+ZGF0YV9kbWFfYmFzZSA9IGxvd2VyXzMyX2JpdHMo YWRkcl9kYXRhKTsKKwlibF9kZXNjLT5kYXRhX3NpemUgPSBoZHItPmRhdGFfc2l6ZTsKK30KKwor LyoqCisgKiBhY3JfcjM1Ml9wcmVwYXJlX2hzX2Jsb2IgLSBsb2FkIGFuZCBwcmVwYXJlIGEgSFMg YmxvYiBhbmQgQkwgZGVzY3JpcHRvcgorICoKKyAqIEBzYiBzZWN1cmUgYm9vdCBpbnN0YW5jZSB0 byBwcmVwYXJlIGZvcgorICogQGZ3IG5hbWUgb2YgdGhlIEhTIGZpcm13YXJlIHRvIGxvYWQKKyAq IEBibG9iIHBvaW50ZXIgdG8gZ3B1b2JqIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgdG8gcmVjZWl2 ZSB0aGUgSFMgRlcgcGF5bG9hZAorICogQGJsX2Rlc2MgcG9pbnRlciB0byB0aGUgQkwgZGVzY3Jp cHRvciB0byB3cml0ZSBmb3IgdGhpcyBmaXJtd2FyZQorICogQHBhdGNoIHdoZXRoZXIgd2Ugc2hv dWxkIHBhdGNoIHRoZSBIUyBkZXNjcmlwdG9yIChvbmx5IGZvciBIUyBsb2FkZXJzKQorICovCitz dGF0aWMgaW50CithY3JfcjM1Ml9wcmVwYXJlX2hzX2Jsb2Ioc3RydWN0IGFjcl9yMzUyICphY3Is IHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLAorCQkJIGNvbnN0IGNoYXIgKmZ3LCBzdHJ1Y3QgbnZr bV9ncHVvYmogKipibG9iLAorCQkJIHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgKmxvYWRfaGVhZGVy LCBib29sIHBhdGNoKQoreworCXN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2ID0gJnNiLT5zdWJk ZXY7CisJdm9pZCAqYWNyX2ltYWdlOworCXN0cnVjdCBmd19iaW5faGVhZGVyICpoc2Jpbl9oZHI7 CisJc3RydWN0IGhzZl9md19oZWFkZXIgKmZ3X2hkcjsKKwlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVy ICpsb2FkX2hkcjsKKwl2b2lkICphY3JfZGF0YTsKKwlpbnQgcmV0OworCisJYWNyX2ltYWdlID0g bnZrbV9hY3JfbG9hZF9maXJtd2FyZShzdWJkZXYsIGZ3LCAwKTsKKwlpZiAoSVNfRVJSKGFjcl9p bWFnZSkpCisJCXJldHVybiBQVFJfRVJSKGFjcl9pbWFnZSk7CisKKwloc2Jpbl9oZHIgPSBhY3Jf aW1hZ2U7CisJZndfaGRyID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5oZWFkZXJfb2Zmc2V0Owor CWxvYWRfaGRyID0gYWNyX2ltYWdlICsgZndfaGRyLT5oZHJfb2Zmc2V0OworCWFjcl9kYXRhID0g YWNyX2ltYWdlICsgaHNiaW5faGRyLT5kYXRhX29mZnNldDsKKworCS8qIFBhdGNoIHNpZ25hdHVy ZSAqLworCWFjcl9yMzUyX2hzZl9wYXRjaF9zaWduYXR1cmUoc2IsIGFjcl9pbWFnZSk7CisKKwkv KiBQYXRjaCBkZXNjcmlwdG9yIHdpdGggV1BSIGluZm9ybWF0aW9uPyAqLworCWlmIChwYXRjaCkg eworCQlzdHJ1Y3QgaHNmbGNuX2Fjcl9kZXNjICpkZXNjOworCisJCWRlc2MgPSBhY3JfZGF0YSAr IGxvYWRfaGRyLT5kYXRhX2RtYV9iYXNlOworCQlhY3JfcjM1Ml9maXh1cF9oc19kZXNjKGFjciwg c2IsIGRlc2MpOworCX0KKworCWlmIChsb2FkX2hkci0+bnVtX2FwcHMgPiBBQ1JfUjM1Ml9NQVhf QVBQUykgeworCQludmttX2Vycm9yKHN1YmRldiwgIm1vcmUgYXBwcyAoJWQpIHRoYW4gc3VwcG9y dGVkICglZCkhIiwKKwkJCSAgIGxvYWRfaGRyLT5udW1fYXBwcywgQUNSX1IzNTJfTUFYX0FQUFMp OworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXA7CisJfQorCW1lbWNweShsb2FkX2hl YWRlciwgbG9hZF9oZHIsIHNpemVvZigqbG9hZF9oZWFkZXIpICsKKwkJCSAgICAgICAoc2l6ZW9m KGxvYWRfaGRyLT5hcHBbMF0pICogbG9hZF9oZHItPm51bV9hcHBzKSk7CisKKwkvKiBDcmVhdGUg QUNSIGJsb2IgYW5kIGNvcHkgSFMgZGF0YSB0byBpdCAqLworCXJldCA9IG52a21fZ3B1b2JqX25l dyhzdWJkZXYtPmRldmljZSwgQUxJR04oaHNiaW5faGRyLT5kYXRhX3NpemUsIDI1NiksCisJCQkg ICAgICAweDEwMDAsIGZhbHNlLCBOVUxMLCBibG9iKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFu dXA7CisKKwludmttX2ttYXAoKmJsb2IpOworCW52a21fZ3B1b2JqX21lbWNweV90bygqYmxvYiwg MCwgYWNyX2RhdGEsIGhzYmluX2hkci0+ZGF0YV9zaXplKTsKKwludmttX2RvbmUoKmJsb2IpOwor CitjbGVhbnVwOgorCWtmcmVlKGFjcl9pbWFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50CithY3JfcjM1Ml9wcmVwYXJlX2hzYmxfYmxvYihzdHJ1Y3QgYWNyX3IzNTIgKmFjcikK K3sKKwljb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9IGFjci0+YmFzZS5zdWJkZXY7 CisJc3RydWN0IGZ3X2Jpbl9oZWFkZXIgKmhkcjsKKwlzdHJ1Y3QgZndfYmxfZGVzYyAqaHNibF9k ZXNjOworCisJYWNyLT5oc2JsX2Jsb2IgPSBudmttX2Fjcl9sb2FkX2Zpcm13YXJlKHN1YmRldiwg ImFjci9ibCIsIDApOworCWlmIChJU19FUlIoYWNyLT5oc2JsX2Jsb2IpKSB7CisJCWludCByZXQg PSBQVFJfRVJSKGFjci0+aHNibF9ibG9iKTsKKworCQlhY3ItPmhzYmxfYmxvYiA9IE5VTEw7CisJ CXJldHVybiByZXQ7CisJfQorCisJaGRyID0gYWNyLT5oc2JsX2Jsb2I7CisJaHNibF9kZXNjID0g YWNyLT5oc2JsX2Jsb2IgKyBoZHItPmhlYWRlcl9vZmZzZXQ7CisKKwkvKiB2aXJ0dWFsIHN0YXJ0 IGFkZHJlc3MgZm9yIGJvb3QgdmVjdG9yICovCisJYWNyLT5iYXNlLnN0YXJ0X2FkZHJlc3MgPSBo c2JsX2Rlc2MtPnN0YXJ0X3RhZyA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWNy X3IzNTJfbG9hZF9ibG9icyAtIGxvYWQgYmxvYnMgY29tbW9uIHRvIGFsbCBBQ1IgVjEgdmVyc2lv bnMuCisgKgorICogVGhpcyBpbmNsdWRlcyB0aGUgTFMgYmxvYiwgSFMgdWNvZGUgbG9hZGluZyBi bG9iLCBhbmQgSFMgYm9vdGxvYWRlci4KKyAqCisgKiBUaGUgSFMgdWNvZGUgdW5sb2FkIGJsb2Ig aXMgb25seSB1c2VkIG9uIGRHUFUgaWYgdGhlIFdQUiByZWdpb24gaXMgdmFyaWFibGUuCisgKi8K K2ludAorYWNyX3IzNTJfbG9hZF9ibG9icyhzdHJ1Y3QgYWNyX3IzNTIgKmFjciwgc3RydWN0IG52 a21fc2VjYm9vdCAqc2IpCit7CisJaW50IHJldDsKKworCS8qIEZpcm13YXJlIGFscmVhZHkgbG9h ZGVkPyAqLworCWlmIChhY3ItPmZpcm13YXJlX29rKQorCQlyZXR1cm4gMDsKKworCS8qIExvYWQg YW5kIHByZXBhcmUgdGhlIG1hbmFnZWQgZmFsY29uJ3MgZmlybXdhcmVzICovCisJcmV0ID0gYWNy X3IzNTJfcHJlcGFyZV9sc19ibG9iKGFjciwgc2ItPndwcl9hZGRyLCBzYi0+d3ByX3NpemUsCisJ CQkJICAgICAgIHNiLT5tYW5hZ2VkX2ZhbGNvbnMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwkvKiBMb2FkIHRoZSBIUyBmaXJtd2FyZSB0aGF0IHdpbGwgbG9hZCB0aGUgTFMgZmlybXdh cmVzICovCisJaWYgKCFhY3ItPmxvYWRfYmxvYikgeworCQlyZXQgPSBhY3JfcjM1Ml9wcmVwYXJl X2hzX2Jsb2IoYWNyLCBzYiwgImFjci91Y29kZV9sb2FkIiwKKwkJCQkJICAgICAgICZhY3ItPmxv YWRfYmxvYiwKKwkJCQkJICAgICAgICZhY3ItPmxvYWRfYmxfaGVhZGVyLCB0cnVlKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogSWYgdGhlIEFDUiByZWdpb24gaXMgZHlu YW1pY2FsbHkgcHJvZ3JhbW1lZCwgd2UgbmVlZCBhbiB1bmxvYWQgRlcgKi8KKwlpZiAoc2ItPndw cl9zaXplID09IDApIHsKKwkJcmV0ID0gYWNyX3IzNTJfcHJlcGFyZV9oc19ibG9iKGFjciwgc2Is ICJhY3IvdWNvZGVfdW5sb2FkIiwKKwkJCQkJICAgICAgICZhY3ItPnVubG9hZF9ibG9iLAorCQkJ CQkgICAgICAgJmFjci0+dW5sb2FkX2JsX2hlYWRlciwgZmFsc2UpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKwl9CisKKwkvKiBMb2FkIHRoZSBIUyBmaXJtd2FyZSBib290bG9hZGVyICov CisJaWYgKCFhY3ItPmhzYmxfYmxvYikgeworCQlyZXQgPSBhY3JfcjM1Ml9wcmVwYXJlX2hzYmxf YmxvYihhY3IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlhY3ItPmZpcm13 YXJlX29rID0gdHJ1ZTsKKwludmttX2RlYnVnKCZzYi0+c3ViZGV2LCAiTFMgYmxvYiBzdWNjZXNz ZnVsbHkgY3JlYXRlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhY3JfcjM1Ml9s b2FkKCkgLSBwcmVwYXJlIEhTIGZhbGNvbiB0byBydW4gdGhlIHNwZWNpZmllZCBibG9iLCBtYXBw ZWQKKyAqIGF0IEdQVSBhZGRyZXNzIG9mZnNldC4KKyAqLworc3RhdGljIGludAorYWNyX3IzNTJf bG9hZChzdHJ1Y3QgbnZrbV9hY3IgKl9hY3IsIHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLAorCSAg ICAgIHN0cnVjdCBudmttX2dwdW9iaiAqYmxvYiwgdTY0IG9mZnNldCkKK3sKKwlzdHJ1Y3QgYWNy X3IzNTIgKmFjciA9IGFjcl9yMzUyKF9hY3IpOworCXN0cnVjdCBudmttX2RldmljZSAqZGV2aWNl ID0gc2ItPnN1YmRldi5kZXZpY2U7CisJc3RydWN0IGZ3X2Jpbl9oZWFkZXIgKmhkciA9IGFjci0+ aHNibF9ibG9iOworCXN0cnVjdCBmd19ibF9kZXNjICpoc2JsX2Rlc2MgPSBhY3ItPmhzYmxfYmxv YiArIGhkci0+aGVhZGVyX29mZnNldDsKKwl2b2lkICpibG9iX2RhdGEgPSBhY3ItPmhzYmxfYmxv YiArIGhkci0+ZGF0YV9vZmZzZXQ7CisJdm9pZCAqaHNibF9jb2RlID0gYmxvYl9kYXRhICsgaHNi bF9kZXNjLT5jb2RlX29mZjsKKwl2b2lkICpoc2JsX2RhdGEgPSBibG9iX2RhdGEgKyBoc2JsX2Rl c2MtPmRhdGFfb2ZmOworCXUzMiBjb2RlX3NpemUgPSBBTElHTihoc2JsX2Rlc2MtPmNvZGVfc2l6 ZSwgMjU2KTsKKwljb25zdCBzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyICpsb2FkX2hkcjsKKwljb25z dCB1MzIgYmFzZSA9IHNiLT5iYXNlOworCWNvbnN0IHUzMiBibF9kZXNjX3NpemUgPSBhY3ItPmZ1 bmMtPmhzX2JsX2Rlc2Nfc2l6ZTsKKwl1OCBibF9kZXNjW2JsX2Rlc2Nfc2l6ZV07CisJdTMyIGNv ZGVfc3RhcnQ7CisKKwkvKiBGaW5kIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IgZm9yIG91ciBi bG9iIGFuZCBjb3B5IGl0ICovCisJaWYgKGJsb2IgPT0gYWNyLT5sb2FkX2Jsb2IpIHsKKwkJbG9h ZF9oZHIgPSAmYWNyLT5sb2FkX2JsX2hlYWRlcjsKKwl9IGVsc2UgaWYgKGJsb2IgPT0gYWNyLT51 bmxvYWRfYmxvYikgeworCQlsb2FkX2hkciA9ICZhY3ItPnVubG9hZF9ibF9oZWFkZXI7CisJfSBl bHNlIHsKKwkJbnZrbV9lcnJvcihfYWNyLT5zdWJkZXYsICJpbnZhbGlkIHNlY3VyZSBib290IGJs b2IhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBDb3B5IEhTIGJvb3Rs b2FkZXIgZGF0YQorCSAqLworCW52a21fZmFsY29uX2xvYWRfZG1lbShkZXZpY2UsIHNiLT5iYXNl LCBoc2JsX2RhdGEsIDB4MDAwMDAsCisJCQkgICAgICBoc2JsX2Rlc2MtPmRhdGFfc2l6ZSk7CisK KwkvKiBDb3B5IEhTIGJvb3Rsb2FkZXIgY29kZSB0byBlbmQgb2YgSU1FTSAqLworCWNvZGVfc3Rh cnQgPSAobnZrbV9yZDMyKGRldmljZSwgYmFzZSArIDB4MTA4KSAmIDB4MWZmKSA8PCA4OworCWNv ZGVfc3RhcnQgLT0gY29kZV9zaXplOworCW52a21fZmFsY29uX2xvYWRfaW1lbShkZXZpY2UsIHNi LT5iYXNlLCBoc2JsX2NvZGUsIGNvZGVfc3RhcnQsCisJCQkgICAgICBjb2RlX3NpemUsIGhzYmxf ZGVzYy0+c3RhcnRfdGFnKTsKKworCS8qIEdlbmVyYXRlIHRoZSBCTCBoZWFkZXIgKi8KKwlhY3It PmZ1bmMtPmdlbmVyYXRlX2hzX2JsX2Rlc2MobG9hZF9oZHIsIGJsX2Rlc2MsIG9mZnNldCk7CisK KwkvKgorCSAqIENvcHkgSFMgQkwgaGVhZGVyIHdoZXJlIHRoZSBIUyBkZXNjcmlwdG9yIGV4cGVj dHMgaXQgdG8gYmUKKwkgKi8KKwludmttX2ZhbGNvbl9sb2FkX2RtZW0oZGV2aWNlLCBiYXNlLCAm YmxfZGVzYywgaHNibF9kZXNjLT5kbWVtX2xvYWRfb2ZmLAorCQkJICAgICAgYmxfZGVzY19zaXpl KTsKKworCXJldHVybiAwOworfQorCisvKgorICogYWNyX3IzNTJfcmVzZXQoKSAtIGV4ZWN1dGUg c2VjdXJlIGJvb3QgZnJvbSB0aGUgcHJlcGFyZWQgc3RhdGUKKyAqCisgKiBMb2FkIHRoZSBIUyBi b290bG9hZGVyIGFuZCBhc2sgdGhlIGZhbGNvbiB0byBydW4gaXQuIFRoaXMgd2lsbCBpbiB0dXJu CisgKiBsb2FkIHRoZSBIUyBmaXJtd2FyZSBhbmQgcnVuIGl0LCBzbyBvbmNlIHRoZSBmYWxjb24g c3RvcHMgYWxsIHRoZSBtYW5hZ2VkCisgKiBmYWxjb25zIHNob3VsZCBoYXZlIHRoZWlyIExTIGZp cm13YXJlIGxvYWRlZCBhbmQgYmUgcmVhZHkgdG8gcnVuLgorICovCitzdGF0aWMgaW50CithY3Jf cjM1Ml9yZXNldChzdHJ1Y3QgbnZrbV9hY3IgKl9hY3IsIHN0cnVjdCBudmttX3NlY2Jvb3QgKnNi LAorCSAgICAgICBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbikKK3sKKwlzdHJ1Y3QgYWNyX3Iz NTIgKmFjciA9IGFjcl9yMzUyKF9hY3IpOworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgYWxs IGJsb2JzIGFyZSByZWFkeSAqLworCXJldCA9IGFjcl9yMzUyX2xvYWRfYmxvYnMoYWNyLCBzYik7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogRHVtbXkgR00yMDAgaW1wbGVt ZW50YXRpb246IHBlcmZvcm0gc2VjdXJlIGJvb3QgZWFjaCB0aW1lIHdlIGFyZQorCSAqIGNhbGxl ZCBvbiBGRUNTLiBTaW5jZSBvbmx5IEZFQ1MgYW5kIEdQQ0NTIGFyZSBtYW5hZ2VkIGFuZCBzdGFy dGVkCisJICogdG9nZXRoZXIsIHRoaXMgb3VnaHQgdG8gYmUgc2FmZS4KKwkgKgorCSAqIE9uY2Ug d2UgaGF2ZSBwcm9wZXIgUE1VIGZpcm13YXJlIGFuZCBzdXBwb3J0LCB0aGlzIHdpbGwgYmUgY2hh bmdlZAorCSAqIHRvIGEgcHJvcGVyIGNhbGwgdG8gdGhlIFBNVSBtZXRob2QuCisJICovCisJaWYg KGZhbGNvbiAhPSBOVktNX0ZBTENPTl9GRUNTKQorCQlnb3RvIGVuZDsKKworCS8qIElmIFdQUiBp cyBzZXQgYW5kIHdlIGhhdmUgYW4gdW5sb2FkIGJsb2IsIHJ1biBpdCB0byB1bmxvY2sgV1BSICov CisJaWYgKGFjci0+dW5sb2FkX2Jsb2IgJiYKKwkgICAgYWNyLT5mYWxjb25fc3RhdGVbTlZLTV9G QUxDT05fRkVDU10gIT0gTk9OX1NFQ1VSRSkgeworCQlyZXQgPSBzYi0+ZnVuYy0+cnVuX2Jsb2Io c2IsIGFjci0+dW5sb2FkX2Jsb2IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisK KwkvKiBSZWxvYWQgYWxsIG1hbmFnZWQgZmFsY29ucyAqLworCXJldCA9IHNiLT5mdW5jLT5ydW5f YmxvYihzYiwgYWNyLT5sb2FkX2Jsb2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKK2Vu ZDoKKwlhY3ItPmZhbGNvbl9zdGF0ZVtmYWxjb25dID0gUkVTRVQ7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK2Fjcl9yMzUyX3N0YXJ0KHN0cnVjdCBudmttX2FjciAqX2Fjciwgc3RydWN0 IG52a21fc2VjYm9vdCAqc2IsCisJCSAgICBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbikKK3sK KwlzdHJ1Y3QgYWNyX3IzNTIgKmFjciA9IGFjcl9yMzUyKF9hY3IpOworCWNvbnN0IHN0cnVjdCBu dmttX3N1YmRldiAqc3ViZGV2ID0gJnNiLT5zdWJkZXY7CisJaW50IGJhc2U7CisKKwlzd2l0Y2gg KGZhbGNvbikgeworCWNhc2UgTlZLTV9GQUxDT05fRkVDUzoKKwkJYmFzZSA9IDB4NDA5MDAwOwor CQlicmVhazsKKwljYXNlIE5WS01fRkFMQ09OX0dQQ0NTOgorCQliYXNlID0gMHg0MWEwMDA7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCW52a21fZXJyb3Ioc3ViZGV2LCAiY2Fubm90IHN0YXJ0IHVu aGFuZGxlZCBmYWxjb24hXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbnZrbV93cjMy KHN1YmRldi0+ZGV2aWNlLCBiYXNlICsgMHgxMzAsIDB4MDAwMDAwMDIpOworCWFjci0+ZmFsY29u X3N0YXRlW2ZhbGNvbl0gPSBSVU5OSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQK K2Fjcl9yMzUyX2Zpbmkoc3RydWN0IG52a21fYWNyICpfYWNyLCBzdHJ1Y3QgbnZrbV9zZWNib290 ICpzYiwgYm9vbCBzdXNwZW5kKQoreworCXN0cnVjdCBhY3JfcjM1MiAqYWNyID0gYWNyX3IzNTIo X2Fjcik7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwkvKiBSdW4gdGhlIHVubG9hZCBibG9i IHRvIHVucHJvdGVjdCB0aGUgV1BSIHJlZ2lvbiAqLworCWlmIChhY3ItPnVubG9hZF9ibG9iICYm CisJICAgIGFjci0+ZmFsY29uX3N0YXRlW05WS01fRkFMQ09OX0ZFQ1NdICE9IE5PTl9TRUNVUkUp CisJCXJldCA9IHNiLT5mdW5jLT5ydW5fYmxvYihzYiwgYWNyLT51bmxvYWRfYmxvYik7CisKKwlm b3IgKGkgPSAwOyBpIDwgTlZLTV9GQUxDT05fRU5EOyBpKyspCisJCWFjci0+ZmFsY29uX3N0YXRl W2ldID0gTk9OX1NFQ1VSRTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCithY3Jf cjM1Ml9kdG9yKHN0cnVjdCBudmttX2FjciAqX2FjcikKK3sKKwlzdHJ1Y3QgYWNyX3IzNTIgKmFj ciA9IGFjcl9yMzUyKF9hY3IpOworCisJbnZrbV9ncHVvYmpfZGVsKCZhY3ItPnVubG9hZF9ibG9i KTsKKworCWtmcmVlKGFjci0+aHNibF9ibG9iKTsKKwludmttX2dwdW9ial9kZWwoJmFjci0+bG9h ZF9ibG9iKTsKKwludmttX2dwdW9ial9kZWwoJmFjci0+bHNfYmxvYik7CisKKwlrZnJlZShhY3Ip OworfQorCitjb25zdCBzdHJ1Y3QgYWNyX3IzNTJfbHNfZnVuYworYWNyX3IzNTJfbHNfZmVjc19m dW5jID0geworCS5sb2FkID0gYWNyX2xzX3Vjb2RlX2xvYWRfZmVjcywKKwkuZ2VuZXJhdGVfYmxf ZGVzYyA9IGFjcl9yMzUyX2dlbmVyYXRlX2ZsY25fYmxfZGVzYywKKwkuYmxfZGVzY19zaXplID0g c2l6ZW9mKHN0cnVjdCBhY3JfcjM1Ml9mbGNuX2JsX2Rlc2MpLAorfTsKKworY29uc3Qgc3RydWN0 IGFjcl9yMzUyX2xzX2Z1bmMKK2Fjcl9yMzUyX2xzX2dwY2NzX2Z1bmMgPSB7CisJLmxvYWQgPSBh Y3JfbHNfdWNvZGVfbG9hZF9ncGNjcywKKwkuZ2VuZXJhdGVfYmxfZGVzYyA9IGFjcl9yMzUyX2dl bmVyYXRlX2ZsY25fYmxfZGVzYywKKwkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3Jf cjM1Ml9mbGNuX2JsX2Rlc2MpLAorfTsKKworY29uc3Qgc3RydWN0IGFjcl9yMzUyX2Z1bmMKK2Fj cl9yMzUyX2Z1bmMgPSB7CisJLmdlbmVyYXRlX2hzX2JsX2Rlc2MgPSBhY3JfcjM1Ml9nZW5lcmF0 ZV9oc19ibF9kZXNjLAorCS5oc19ibF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcl9yMzUy X2ZsY25fYmxfZGVzYyksCisJLmxzX2Z1bmMgPSB7CisJCVtOVktNX0ZBTENPTl9GRUNTXSA9ICZh Y3JfcjM1Ml9sc19mZWNzX2Z1bmMsCisJCVtOVktNX0ZBTENPTl9HUENDU10gPSAmYWNyX3IzNTJf bHNfZ3BjY3NfZnVuYywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBudmttX2Fjcl9m dW5jCithY3JfcjM1Ml9iYXNlX2Z1bmMgPSB7CisJLmJvb3RfZmFsY29uID0gTlZLTV9GQUxDT05f UE1VLAorCS5kdG9yID0gYWNyX3IzNTJfZHRvciwKKwkuZmluaSA9IGFjcl9yMzUyX2ZpbmksCisJ LmxvYWQgPSBhY3JfcjM1Ml9sb2FkLAorCS5yZXNldCA9IGFjcl9yMzUyX3Jlc2V0LAorCS5zdGFy dCA9IGFjcl9yMzUyX3N0YXJ0LAorfTsKKworc3RydWN0IG52a21fYWNyICoKK2Fjcl9yMzUyX25l d18oY29uc3Qgc3RydWN0IGFjcl9yMzUyX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IGFjcl9yMzUy ICphY3I7CisKKwlhY3IgPSBremFsbG9jKHNpemVvZigqYWNyKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFhY3IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJYWNyLT5iYXNlLmZ1bmMgPSAm YWNyX3IzNTJfYmFzZV9mdW5jOworCWFjci0+ZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gJmFjci0+ YmFzZTsKK30KKworc3RydWN0IG52a21fYWNyICoKK2Fjcl9yMzUyX25ldyh2b2lkKQoreworCXJl dHVybiBhY3JfcjM1Ml9uZXdfKCZhY3JfcjM1Ml9mdW5jKTsKK30KZGlmZiAtLWdpdCBhL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaCBiL2RybS9ub3V2ZWF1L252a20v c3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjQwYzk2MTliNDY5MwotLS0gL2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1L252 a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3IzNTIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNiwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19OVktNX1NFQ0JPT1RfQUNSX1IzNTJfSF9fCisj ZGVmaW5lIF9fTlZLTV9TRUNCT09UX0FDUl9SMzUyX0hfXworCisjaW5jbHVkZSAiYWNyLmgiCisK K3N0cnVjdCBsc191Y29kZV9pbWc7CisKKyNkZWZpbmUgQUNSX1IzNTJfTUFYX0FQUFMgOAorCitz dHJ1Y3QgaHNmX2xvYWRfaGVhZGVyX2FwcCB7CisJdTMyIHNlY19jb2RlX29mZjsKKwl1MzIgc2Vj X2NvZGVfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IGhzZl9sb2FkX2hlYWRlciAtIEhTIGZp cm13YXJlIGxvYWQgaGVhZGVyCisgKi8KK3N0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgeworCXUzMiBu b25fc2VjX2NvZGVfb2ZmOworCXUzMiBub25fc2VjX2NvZGVfc2l6ZTsKKwl1MzIgZGF0YV9kbWFf YmFzZTsKKwl1MzIgZGF0YV9zaXplOworCXUzMiBudW1fYXBwczsKKwlzdHJ1Y3QgaHNmX2xvYWRf aGVhZGVyX2FwcCBhcHBbMF07Cit9OworCisvKioKKyAqIHN0cnVjdCBhY3JfcjM1Ml9sc19mdW5j IC0gbWFuYWdlcyBhIHNpbmdsZSBMUyBmaXJtd2FyZQorICoKKyAqIEBsb2FkOiBsb2FkIHRoZSBl eHRlcm5hbCBmaXJtd2FyZSBpbnRvIGEgbHNfdWNvZGVfaW1nCisgKiBAZ2VuZXJhdGVfYmxfZGVz YzogZnVuY3Rpb24gY2FsbGVkIG9uIGEgYmxvY2sgb2YgYmxfZGVzY19zaXplIHRvIGdlbmVyYXRl IHRoZQorICoJCSAgICAgIHByb3BlciBib290bG9hZGVyIGRlc2NyaXB0b3IgZm9yIHRoaXMgTFMg ZmlybXdhcmUKKyAqIEBibF9kZXNjX3NpemU6IHNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgZGVzY3Jp cHRvcgorICovCitzdHJ1Y3QgYWNyX3IzNTJfbHNfZnVuYyB7CisJaW50ICgqbG9hZCkoY29uc3Qg c3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7CisJdm9pZCAoKmdl bmVyYXRlX2JsX2Rlc2MpKGNvbnN0IHN0cnVjdCBudmttX2FjciAqLAorCQkJCSBjb25zdCBzdHJ1 Y3QgbHNfdWNvZGVfaW1nICosIHU2NCwgdm9pZCAqKTsKKwl1MzIgYmxfZGVzY19zaXplOworfTsK KworLyoqCisgKiBzdHJ1Y3QgYWNyX3IzNTJfZnVuYyAtIG1hbmFnZXMgbnVhbmNlcyBiZXR3ZWVu IEFDUiB2ZXJzaW9ucworICoKKyAqIEBnZW5lcmF0ZV9oc19ibF9kZXNjOiBmdW5jdGlvbiBjYWxs ZWQgb24gYSBibG9jayBvZiBibF9kZXNjX3NpemUgdG8gZ2VuZXJhdGUKKyAqCQkJIHRoZSBwcm9w ZXIgSFMgYm9vdGxvYWRlciBkZXNjcmlwdG9yCisgKiBAaHNfYmxfZGVzY19zaXplOiBzaXplIG9m IHRoZSBIUyBib290bG9hZGVyIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IGFjcl9yMzUyX2Z1bmMg eworCXZvaWQgKCpnZW5lcmF0ZV9oc19ibF9kZXNjKShjb25zdCBzdHJ1Y3QgaHNmX2xvYWRfaGVh ZGVyICosIHZvaWQgKiwKKwkJCQkgICAgdTY0KTsKKwl1MzIgaHNfYmxfZGVzY19zaXplOworCisJ Y29uc3Qgc3RydWN0IGFjcl9yMzUyX2xzX2Z1bmMgKmxzX2Z1bmNbTlZLTV9GQUxDT05fRU5EXTsK K307CisKKy8qKgorICogc3RydWN0IGFjcl9yMzUyIC0gQUNSIGRhdGEgZm9yIGRyaXZlciByZWxl YXNlIDM1MiAoYW5kIGJleW9uZCkKKyAqLworc3RydWN0IGFjcl9yMzUyIHsKKwlzdHJ1Y3QgbnZr bV9hY3IgYmFzZTsKKwljb25zdCBzdHJ1Y3QgYWNyX3IzNTJfZnVuYyAqZnVuYzsKKworCS8qCisJ ICogSFMgRlcgLSBsb2NrIFdQUiByZWdpb24gKGRHUFUgb25seSkgYW5kIGxvYWQgTFMgRldzCisJ ICogb24gVGVncmEgdGhlIEhTIEZXIGNvcGllcyB0aGUgTFMgYmxvYiBpbnRvIHRoZSBmaXhlZCBX UFIgaW5zdGVhZAorCSAqLworCXN0cnVjdCBudmttX2dwdW9iaiAqbG9hZF9ibG9iOworCXN0cnVj dCB7CisJCXN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgbG9hZF9ibF9oZWFkZXI7CisJCXN0cnVjdCBo c2ZfbG9hZF9oZWFkZXJfYXBwIF9fbG9hZF9hcHBzW0FDUl9SMzUyX01BWF9BUFBTXTsKKwl9Owor CisJLyogSFMgRlcgLSB1bmxvY2sgV1BSIHJlZ2lvbiAoZEdQVSBvbmx5KSAqLworCXN0cnVjdCBu dmttX2dwdW9iaiAqdW5sb2FkX2Jsb2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGhzZl9sb2FkX2hl YWRlciB1bmxvYWRfYmxfaGVhZGVyOworCQlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyX2FwcCBfX3Vu bG9hZF9hcHBzW0FDUl9SMzUyX01BWF9BUFBTXTsKKwl9OworCisJLyogSFMgYm9vdGxvYWRlciAq LworCXZvaWQgKmhzYmxfYmxvYjsKKworCS8qIExTIEZXcywgdG8gYmUgbG9hZGVkIGJ5IHRoZSBI UyBBQ1IgKi8KKwlzdHJ1Y3QgbnZrbV9ncHVvYmogKmxzX2Jsb2I7CisKKwkvKiBGaXJtd2FyZSBh bHJlYWR5IGxvYWRlZD8gKi8KKwlib29sIGZpcm13YXJlX29rOworCisJLyogVG8ga2VlcCB0cmFj ayBvZiB0aGUgc3RhdGUgb2YgYWxsIG1hbmFnZWQgZmFsY29ucyAqLworCWVudW0geworCQkvKiBJ biBub24tc2VjdXJlIHN0YXRlLCBubyBmaXJtd2FyZSBsb2FkZWQsIG5vIHByaXZpbGVnZXMqLwor CQlOT05fU0VDVVJFID0gMCwKKwkJLyogSW4gbG93LXNlY3VyZSBtb2RlIGFuZCByZWFkeSB0byBi ZSBzdGFydGVkICovCisJCVJFU0VULAorCQkvKiBJbiBsb3ctc2VjdXJlIG1vZGUgYW5kIHJ1bm5p bmcgKi8KKwkJUlVOTklORywKKwl9IGZhbGNvbl9zdGF0ZVtOVktNX0ZBTENPTl9FTkRdOworfTsK KyNkZWZpbmUgYWNyX3IzNTIoYWNyKSBjb250YWluZXJfb2YoYWNyLCBzdHJ1Y3QgYWNyX3IzNTIs IGJhc2UpCisKK3N0cnVjdCBudmttX2FjciAqYWNyX3IzNTJfbmV3Xyhjb25zdCBzdHJ1Y3QgYWNy X3IzNTJfZnVuYyAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl9yMzYxLmMgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290 L2Fjcl9yMzYxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jZTIy ZmZmNDU5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNi b290L2Fjcl9yMzYxLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICovCisKKyNpbmNsdWRlICJhY3JfcjM1Mi5oIgorI2luY2x1ZGUgImxzX3Vjb2RlLmgiCisKKy8q KgorICogc3RydWN0IGFjcl9yMzYxX2ZsY25fYmxfZGVzYyAtIERNRU0gYm9vdGxvYWRlciBkZXNj cmlwdG9yCisgKiBAc2lnbmF0dXJlOgkJMTZCIHNpZ25hdHVyZSBmb3Igc2VjdXJlIGNvZGUuIDBz IGlmIG5vIHNlY3VyZSBjb2RlCisgKiBAY3R4X2RtYToJCURNQSBjb250ZXh0IHRvIGJlIHVzZWQg YnkgQkwgd2hpbGUgbG9hZGluZyBjb2RlL2RhdGEKKyAqIEBjb2RlX2RtYV9iYXNlOgkyNTZCLWFs aWduZWQgUGh5c2ljYWwgRkIgQWRkcmVzcyB3aGVyZSBjb2RlIGlzIGxvY2F0ZWQKKyAqCQkJKGZh bGNvbidzICR4Y2Jhc2UgcmVnaXN0ZXIpCisgKiBAbm9uX3NlY19jb2RlX29mZjoJb2Zmc2V0IGZy b20gY29kZV9kbWFfYmFzZSB3aGVyZSB0aGUgbm9uLXNlY3VyZSBjb2RlIGlzCisgKiAgICAgICAg ICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2 IHRvIGhlbHAgcGVyZgorICogQG5vbl9zZWNfY29kZV9zaXplOgl0aGUgc2l6ZSBvZiB0aGUgbm9u U2VjdXJlIGNvZGUgcGFydC4KKyAqIEBzZWNfY29kZV9vZmY6CW9mZnNldCBmcm9tIGNvZGVfZG1h X2Jhc2Ugd2hlcmUgdGhlIHNlY3VyZSBjb2RlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBs b2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgor ICogQHNlY19jb2RlX3NpemU6CW9mZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNl Y3VyZSBjb2RlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0 IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgorICogQGNvZGVfZW50cnlfcG9p bnQ6CWNvZGUgZW50cnkgcG9pbnQgd2hpY2ggd2lsbCBiZSBpbnZva2VkIGJ5IEJMIGFmdGVyCisg KiAgICAgICAgICAgICAgICAgICAgICBjb2RlIGlzIGxvYWRlZC4KKyAqIEBkYXRhX2RtYV9iYXNl OgkyNTZCIGFsaWduZWQgUGh5c2ljYWwgRkIgQWRkcmVzcyB3aGVyZSBkYXRhIGlzIGxvY2F0ZWQu CisgKgkJCShmYWxjb24ncyAkeGRiYXNlIHJlZ2lzdGVyKQorICogQGRhdGFfc2l6ZToJCXNpemUg b2YgZGF0YSBibG9jay4gU2hvdWxkIGJlIG11bHRpcGxlIG9mIDI1NkIKKyAqCisgKiBTdHJ1Y3R1 cmUgdXNlZCBieSB0aGUgYm9vdGxvYWRlciB0byBsb2FkIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBU aGlzIGhhcworICogdG8gYmUgZmlsbGVkIGJ5IGhvc3QgYW5kIGNvcGllZCBpbnRvIERNRU0gYXQg b2Zmc2V0IHByb3ZpZGVkIGluIHRoZQorICogaHNmbGNuX2JsX2Rlc2MuYmxfZGVzY19kbWVtX2xv YWRfb2ZmLgorICovCitzdHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjIHsKKwl1MzIgcmVzZXJ2 ZWRbNF07CisJdTMyIHNpZ25hdHVyZVs0XTsKKwl1MzIgY3R4X2RtYTsKKwlzdHJ1Y3QgZmxjbl91 NjQgY29kZV9kbWFfYmFzZTsKKwl1MzIgbm9uX3NlY19jb2RlX29mZjsKKwl1MzIgbm9uX3NlY19j b2RlX3NpemU7CisJdTMyIHNlY19jb2RlX29mZjsKKwl1MzIgc2VjX2NvZGVfc2l6ZTsKKwl1MzIg Y29kZV9lbnRyeV9wb2ludDsKKwlzdHJ1Y3QgZmxjbl91NjQgZGF0YV9kbWFfYmFzZTsKKwl1MzIg ZGF0YV9zaXplOworfTsKKworc3RhdGljIHZvaWQKK2Fjcl9yMzYxX2dlbmVyYXRlX2ZsY25fYmxf ZGVzYyhjb25zdCBzdHJ1Y3QgbnZrbV9hY3IgKmFjciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg bHNfdWNvZGVfaW1nICppbWcsIHU2NCB3cHJfYWRkciwKKwkJCSAgICAgICB2b2lkICpfZGVzYykK K3sKKwlzdHJ1Y3QgYWNyX3IzNjFfZmxjbl9ibF9kZXNjICpkZXNjID0gX2Rlc2M7CisJY29uc3Qg c3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7CisJdTY0 IGJhc2UsIGFkZHJfY29kZSwgYWRkcl9kYXRhOworCisJYmFzZSA9IHdwcl9hZGRyICsgaW1nLT5s c2JfaGVhZGVyLnVjb2RlX29mZiArIHBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0OworCWFkZHJfY29k ZSA9IGJhc2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0OworCWFkZHJfZGF0YSA9 IGJhc2UgKyBwZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OworCisJbWVtc2V0KGRlc2Ms IDAsIHNpemVvZigqZGVzYykpOworCWRlc2MtPmN0eF9kbWEgPSBGQUxDT05fRE1BSURYX1VDT0RF OworCWRlc2MtPmNvZGVfZG1hX2Jhc2UgPSB1NjRfdG9fZmxjbjY0KGFkZHJfY29kZSk7CisJZGVz Yy0+bm9uX3NlY19jb2RlX29mZiA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ7CisJ ZGVzYy0+bm9uX3NlY19jb2RlX3NpemUgPSBwZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfc2l6ZTsK KwlkZXNjLT5jb2RlX2VudHJ5X3BvaW50ID0gcGRlc2MtPmFwcF9pbWVtX2VudHJ5OworCWRlc2Mt PmRhdGFfZG1hX2Jhc2UgPSB1NjRfdG9fZmxjbjY0KGFkZHJfZGF0YSk7CisJZGVzYy0+ZGF0YV9z aXplID0gcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCith Y3JfcjM2MV9nZW5lcmF0ZV9oc19ibF9kZXNjKGNvbnN0IHN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIg Kmhkciwgdm9pZCAqX2JsX2Rlc2MsCisJCQkgICAgdTY0IG9mZnNldCkKK3sKKwlzdHJ1Y3QgYWNy X3IzNjFfZmxjbl9ibF9kZXNjICpibF9kZXNjID0gX2JsX2Rlc2M7CisKKwltZW1zZXQoYmxfZGVz YywgMCwgc2l6ZW9mKCpibF9kZXNjKSk7CisJYmxfZGVzYy0+Y3R4X2RtYSA9IEZBTENPTl9ETUFJ RFhfVklSVDsKKwlibF9kZXNjLT5jb2RlX2RtYV9iYXNlID0gdTY0X3RvX2ZsY242NChvZmZzZXQp OworCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9vZmYgPSBoZHItPm5vbl9zZWNfY29kZV9vZmY7CisJ YmxfZGVzYy0+bm9uX3NlY19jb2RlX3NpemUgPSBoZHItPm5vbl9zZWNfY29kZV9zaXplOworCWJs X2Rlc2MtPnNlY19jb2RlX29mZiA9IGhkci0+YXBwWzBdLnNlY19jb2RlX29mZjsKKwlibF9kZXNj LT5zZWNfY29kZV9zaXplID0gaGRyLT5hcHBbMF0uc2VjX2NvZGVfc2l6ZTsKKwlibF9kZXNjLT5j b2RlX2VudHJ5X3BvaW50ID0gMDsKKwlibF9kZXNjLT5kYXRhX2RtYV9iYXNlID0gdTY0X3RvX2Zs Y242NChvZmZzZXQgKyBoZHItPmRhdGFfZG1hX2Jhc2UpOworCWJsX2Rlc2MtPmRhdGFfc2l6ZSA9 IGhkci0+ZGF0YV9zaXplOworfQorCitjb25zdCBzdHJ1Y3QgYWNyX3IzNTJfbHNfZnVuYworYWNy X3IzNjFfbHNfZmVjc19mdW5jID0geworCS5sb2FkID0gYWNyX2xzX3Vjb2RlX2xvYWRfZmVjcywK KwkuZ2VuZXJhdGVfYmxfZGVzYyA9IGFjcl9yMzYxX2dlbmVyYXRlX2ZsY25fYmxfZGVzYywKKwku YmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfcjM2MV9mbGNuX2JsX2Rlc2MpLAorfTsK KworY29uc3Qgc3RydWN0IGFjcl9yMzUyX2xzX2Z1bmMKK2Fjcl9yMzYxX2xzX2dwY2NzX2Z1bmMg PSB7CisJLmxvYWQgPSBhY3JfbHNfdWNvZGVfbG9hZF9ncGNjcywKKwkuZ2VuZXJhdGVfYmxfZGVz YyA9IGFjcl9yMzYxX2dlbmVyYXRlX2ZsY25fYmxfZGVzYywKKwkuYmxfZGVzY19zaXplID0gc2l6 ZW9mKHN0cnVjdCBhY3JfcjM2MV9mbGNuX2JsX2Rlc2MpLAorfTsKKworY29uc3Qgc3RydWN0IGFj cl9yMzUyX2Z1bmMKK2Fjcl9yMzYxX2Z1bmMgPSB7CisJLmdlbmVyYXRlX2hzX2JsX2Rlc2MgPSBh Y3JfcjM2MV9nZW5lcmF0ZV9oc19ibF9kZXNjLAorCS5oc19ibF9kZXNjX3NpemUgPSBzaXplb2Yo c3RydWN0IGFjcl9yMzYxX2ZsY25fYmxfZGVzYyksCisJLmxzX2Z1bmMgPSB7CisJCVtOVktNX0ZB TENPTl9GRUNTXSA9ICZhY3JfcjM2MV9sc19mZWNzX2Z1bmMsCisJCVtOVktNX0ZBTENPTl9HUEND U10gPSAmYWNyX3IzNjFfbHNfZ3BjY3NfZnVuYywKKwl9LAorfTsKKworc3RydWN0IG52a21fYWNy ICoKK2Fjcl9yMzYxX25ldyh2b2lkKQoreworCXJldHVybiBhY3JfcjM1Ml9uZXdfKCZhY3JfcjM2 MV9mdW5jKTsKK30KZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv YmFzZS5jIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9iYXNlLmMKaW5kZXggZWEz Njg1MTM1OGVhLi42NGU3MGY1MDE2YTEgMTAwNjQ0Ci0tLSBhL2RybS9ub3V2ZWF1L252a20vc3Vi ZGV2L3NlY2Jvb3QvYmFzZS5jCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv YmFzZS5jCkBAIC0xOSw3ICsxOSw3MCBAQAogICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogICogREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgogICovCisKKy8qCisgKiBTZWN1cmUgYm9vdCBpcyB0aGUgcHJvY2VzcyBi eSB3aGljaCBOVklESUEtc2lnbmVkIGZpcm13YXJlIGlzIGxvYWRlZCBpbnRvCisgKiBzb21lIG9m IHRoZSBmYWxjb25zIG9mIGEgR1BVLiBGb3IgcHJvZHVjdGlvbiBkZXZpY2VzIHRoaXMgaXMgdGhl IG9ubHkgd2F5CisgKiBmb3IgdGhlIGZpcm13YXJlIHRvIGFjY2VzcyB1c2VmdWwgKGJ1dCBzZW5z aXRpdmUpIHJlZ2lzdGVycy4KKyAqCisgKiBBIEZhbGNvbiBtaWNyb3Byb2Nlc3NvciBzdXBwb3J0 aW5nIGFkdmFuY2VkIHNlY3VyaXR5IG1vZGVzIGNhbiBydW4gaW4gb25lIG9mCisgKiB0aHJlZSBt b2RlczoKKyAqCisgKiAtIE5vbi1zZWN1cmUgKE5TKS4gSW4gdGhpcyBtb2RlLCBmdW5jdGlvbmFs aXR5IGlzIHNpbWlsYXIgdG8gRmFsY29uCisgKiAgIGFyY2hpdGVjdHVyZXMgYmVmb3JlIHNlY3Vy aXR5IG1vZGVzIHdlcmUgaW50cm9kdWNlZCAocHJlLU1heHdlbGwpLCBidXQKKyAqICAgY2FwYWJp bGl0eSBpcyByZXN0cmljdGVkLiBJbiBwYXJ0aWN1bGFyLCBjZXJ0YWluIHJlZ2lzdGVycyBtYXkg YmUKKyAqICAgaW5hY2Nlc3NpYmxlIGZvciByZWFkcyBhbmQvb3Igd3JpdGVzLCBhbmQgcGh5c2lj YWwgbWVtb3J5IGFjY2VzcyBtYXkgYmUKKyAqICAgZGlzYWJsZWQgKG9uIGNlcnRhaW4gRmFsY29u IGluc3RhbmNlcykuIFRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUgbW9kZSB0aGF0CisgKiAgIGNh biBiZSB1c2VkIGlmIHlvdSBkb24ndCBoYXZlIG1pY3JvY29kZSBjcnlwdG9ncmFwaGljYWxseSBz aWduZWQgYnkgTlZJRElBLgorICoKKyAqIC0gSGVhdnkgU2VjdXJlIChIUykuIEluIHRoaXMgbW9k ZSwgdGhlIG1pY3JvcHJvY2Vzc29yIGlzIGEgYmxhY2sgYm94IC0gaXQncworICogICBub3QgcG9z c2libGUgdG8gcmVhZCBvciB3cml0ZSBhbnkgRmFsY29uIGludGVybmFsIHN0YXRlIG9yIEZhbGNv biByZWdpc3RlcnMKKyAqICAgZnJvbSBvdXRzaWRlIHRoZSBGYWxjb24gKGZvciBleGFtcGxlLCBm cm9tIHRoZSBob3N0IHN5c3RlbSkuIFRoZSBvbmx5IHdheQorICogICB0byBlbmFibGUgdGhpcyBt b2RlIGlzIGJ5IGxvYWRpbmcgbWljcm9jb2RlIHRoYXQgaGFzIGJlZW4gc2lnbmVkIGJ5IE5WSURJ QS4KKyAqICAgKFRoZSBsb2FkaW5nIHByb2Nlc3MgaW52b2x2ZXMgdGFnZ2luZyB0aGUgSU1FTSBi bG9jayBhcyBzZWN1cmUsIHdyaXRpbmcgdGhlCisgKiAgIHNpZ25hdHVyZSBpbnRvIGEgRmFsY29u IHJlZ2lzdGVyLCBhbmQgc3RhcnRpbmcgZXhlY3V0aW9uLiBUaGUgaGFyZHdhcmUgd2lsbAorICog ICB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlLCBhbmQgaWYgdmFsaWQsIGdyYW50IEhTIHByaXZpbGVn ZXMuKQorICoKKyAqIC0gTGlnaHQgU2VjdXJlIChMUykuIEluIHRoaXMgbW9kZSwgdGhlIG1pY3Jv cHJvY2Vzc29yIGhhcyBtb3JlIHByaXZpbGVnZXMKKyAqICAgdGhhbiBOUyBidXQgZmV3ZXIgdGhh biBIUy4gU29tZSBvZiB0aGUgbWljcm9wcm9jZXNzb3Igc3RhdGUgaXMgdmlzaWJsZSB0bworICog ICBob3N0IHNvZnR3YXJlIHRvIGVhc2UgZGVidWdnaW5nLiBUaGUgb25seSB3YXkgdG8gZW5hYmxl IHRoaXMgbW9kZSBpcyBieSBIUworICogICBtaWNyb2NvZGUgZW5hYmxpbmcgTFMgbW9kZS4gU29t ZSBwcml2aWxlZ2VzIGF2YWlsYWJsZSB0byBIUyBtb2RlIGFyZSBub3QKKyAqICAgYXZhaWxhYmxl IGhlcmUuIExTIG1vZGUgaXMgaW50cm9kdWNlZCBpbiBHTTIweC4KKyAqCisgKiBTZWN1cmUgYm9v dCBjb25zaXN0cyBpbiB0ZW1wb3JhcmlseSBzd2l0Y2hpbmcgYSBIUy1jYXBhYmxlIGZhbGNvbiAo dHlwaWNhbGx5CisgKiBQTVUpIGludG8gSFMgbW9kZSBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUg TFMgZmlybXdhcmVzIG9mIG1hbmFnZWQgZmFsY29ucywKKyAqIGxvYWQgdGhlbSwgYW5kIHN3aXRj aCBtYW5hZ2VkIGZhbGNvbnMgaW50byBMUyBtb2RlLiBPbmNlIHNlY3VyZSBib290CisgKiBjb21w bGV0ZXMsIG5vIGZhbGNvbiByZW1haW5zIGluIEhTIG1vZGUuCisgKgorICogU2VjdXJlIGJvb3Qg cmVxdWlyZXMgYSB3cml0ZS1wcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbiAoV1BSKSB3aGljaCBjYW4g b25seSBiZQorICogd3JpdHRlbiBieSB0aGUgc2VjdXJlIGZhbGNvbi4gT24gZEdQVSwgdGhlIGRy aXZlciBzZXRzIHVwIHRoZSBXUFIgcmVnaW9uIGluCisgKiB2aWRlbyBtZW1vcnkuIE9uIFRlZ3Jh LCBpdCBpcyBzZXQgdXAgYnkgdGhlIGJvb3Rsb2FkZXIgYW5kIGl0cyBsb2NhdGlvbiBhbmQKKyAq IHNpemUgd3JpdHRlbiBpbnRvIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycy4KKyAqCisgKiBU aGUgc2VjdXJlIGJvb3QgcHJvY2VzcyB0YWtlcyBwbGFjZSBhcyBmb2xsb3dzOgorICoKKyAqIDEp IEEgTFMgYmxvYiBpcyBjb25zdHJ1Y3RlZCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgTFMgZmlybXdh cmVzIHdlIHdhbnQgdG8KKyAqICAgIGxvYWQsIGFsb25nIHdpdGggdGhlaXIgc2lnbmF0dXJlcyBh bmQgYm9vdGxvYWRlcnMuCisgKgorICogMikgQSBIUyBibG9iIChhbHNvIGNhbGxlZCBBQ1IpIGlz IGNyZWF0ZWQgdGhhdCBjb250YWlucyB0aGUgc2lnbmVkIEhTCisgKiAgICBmaXJtd2FyZSBpbiBj aGFyZ2Ugb2YgbG9hZGluZyB0aGUgTFMgZmlybXdhcmVzIGludG8gdGhlaXIgcmVzcGVjdGl2ZQor ICogICAgZmFsY29ucy4KKyAqCisgKiAzKSBUaGUgSFMgYmxvYiBpcyBsb2FkZWQgKHZpYSBpdHMg b3duIGJvb3Rsb2FkZXIpIGFuZCBleGVjdXRlZCBvbiB0aGUKKyAqICAgIEhTLWNhcGFibGUgZmFs Y29uLiBJdCBhdXRoZW50aWNhdGVzIGl0c2VsZiwgc3dpdGNoZXMgdGhlIHNlY3VyZSBmYWxjb24g dG8KKyAqICAgIEhTIG1vZGUgYW5kIHNldHVwIHRoZSBXUFIgcmVnaW9uIGFyb3VuZCB0aGUgTFMg YmxvYiAoZEdQVSkgb3IgY29waWVzIHRoZQorICogICAgTFMgYmxvYiBpbnRvIHRoZSBXUFIgcmVn aW9uIChUZWdyYSkuCisgKgorICogNCkgVGhlIExTIGJsb2IgaXMgbm93IHNlY3VyZSBmcm9tIGFs bCBleHRlcm5hbCB0YW1wZXJpbmcuIFRoZSBIUyBmYWxjb24KKyAqICAgIGNoZWNrcyB0aGUgc2ln bmF0dXJlcyBvZiB0aGUgTFMgZmlybXdhcmVzIGFuZCwgaWYgdmFsaWQsIHN3aXRjaGVzIHRoZQor ICogICAgbWFuYWdlZCBmYWxjb25zIHRvIExTIG1vZGUgYW5kIG1ha2VzIHRoZW0gcmVhZHkgdG8g cnVuIHRoZSBMUyBmaXJtd2FyZS4KKyAqCisgKiA1KSBUaGUgbWFuYWdlZCBmYWxjb25zIHJlbWFp biBpbiBMUyBtb2RlIGFuZCBjYW4gYmUgc3RhcnRlZC4KKyAqCisgKi8KKwogI2luY2x1ZGUgInBy aXYuaCIKKyNpbmNsdWRlICJhY3IuaCIKIAogI2luY2x1ZGUgPGNvcmUvZmFsY29uLmg+CiAjaW5j bHVkZSA8c3ViZGV2L21jLmg+CkBAIC0xNTQsMTIgKzIxNywxMiBAQCBpbnQKIG52a21fc2VjYm9v dF9yZXNldChzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiwgdTMyIGZhbGNvbikKIHsKIAkvKiBVbm1h bmFnZWQgZmFsY29uPyAqLwotCWlmICghKEJJVChmYWxjb24pICYgc2ItPmZ1bmMtPm1hbmFnZWRf ZmFsY29ucykpIHsKKwlpZiAoIShCSVQoZmFsY29uKSAmIHNiLT5tYW5hZ2VkX2ZhbGNvbnMpKSB7 CiAJCW52a21fZXJyb3IoJnNiLT5zdWJkZXYsICJjYW5ub3QgcmVzZXQgdW5tYW5hZ2VkIGZhbGNv biFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gc2ItPmZ1bmMtPnJlc2V0 KHNiLCBmYWxjb24pOworCXJldHVybiBzYi0+YWNyLT5mdW5jLT5yZXNldChzYi0+YWNyLCBzYiwg ZmFsY29uKTsKIH0KIAogLyoqCkBAIC0xNjksMjQgKzIzMiwyNCBAQCBpbnQKIG52a21fc2VjYm9v dF9zdGFydChzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiwgdTMyIGZhbGNvbikKIHsKIAkvKiBVbm1h bmFnZWQgZmFsY29uPyAqLwotCWlmICghKEJJVChmYWxjb24pICYgc2ItPmZ1bmMtPm1hbmFnZWRf ZmFsY29ucykpIHsKKwlpZiAoIShCSVQoZmFsY29uKSAmIHNiLT5tYW5hZ2VkX2ZhbGNvbnMpKSB7 CiAJCW52a21fZXJyb3IoJnNiLT5zdWJkZXYsICJjYW5ub3Qgc3RhcnQgdW5tYW5hZ2VkIGZhbGNv biFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gc2ItPmZ1bmMtPnN0YXJ0 KHNiLCBmYWxjb24pOworCXJldHVybiBzYi0+YWNyLT5mdW5jLT5zdGFydChzYi0+YWNyLCBzYiwg ZmFsY29uKTsKIH0KIAogLyoqCiAgKiBudmttX3NlY2Jvb3RfaXNfbWFuYWdlZCgpIC0gY2hlY2sg d2hldGhlciBhIGdpdmVuIGZhbGNvbiBpcyBzZWN1cmVseS1tYW5hZ2VkCiAgKi8KIGJvb2wKLW52 a21fc2VjYm9vdF9pc19tYW5hZ2VkKHN0cnVjdCBudmttX3NlY2Jvb3QgKnNlY2Jvb3QsIGVudW0g bnZrbV9mYWxjb25pZHggZmlkKQorbnZrbV9zZWNib290X2lzX21hbmFnZWQoc3RydWN0IG52a21f c2VjYm9vdCAqc2IsIGVudW0gbnZrbV9mYWxjb25pZHggZmlkKQogewotCWlmICghc2VjYm9vdCkK KwlpZiAoIXNiKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gc2VjYm9vdC0+ZnVuYy0+bWFu YWdlZF9mYWxjb25zICYgQklUKGZpZCk7CisJcmV0dXJuIHNiLT5tYW5hZ2VkX2ZhbGNvbnMgJiBC SVQoZmlkKTsKIH0KIAogc3RhdGljIGludApAQCAtMjM5LDE3ICszMDIsMjAgQEAgbnZrbV9zZWNi b290ID0gewogfTsKIAogaW50Ci1udmttX3NlY2Jvb3RfY3Rvcihjb25zdCBzdHJ1Y3QgbnZrbV9z ZWNib290X2Z1bmMgKmZ1bmMsCitudmttX3NlY2Jvb3RfY3Rvcihjb25zdCBzdHJ1Y3QgbnZrbV9z ZWNib290X2Z1bmMgKmZ1bmMsIHN0cnVjdCBudmttX2FjciAqYWNyLAogCQkgIHN0cnVjdCBudmtt X2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgsCi0JCSAgc3RydWN0IG52a21fc2VjYm9vdCAqc2Ip CisJCSAgdW5zaWduZWQgbG9uZyBtYW5hZ2VkX2ZhbGNvbnMsIHN0cnVjdCBudmttX3NlY2Jvb3Qg KnNiKQogewogCXVuc2lnbmVkIGxvbmcgaWQ7CisJdTMyIHZhbDsKIAogCW52a21fc3ViZGV2X2N0 b3IoJm52a21fc2VjYm9vdCwgZGV2aWNlLCBpbmRleCwgJnNiLT5zdWJkZXYpOwogCXNiLT5mdW5j ID0gZnVuYzsKKwlzYi0+YWNyID0gYWNyOworCWFjci0+c3ViZGV2ID0gJnNiLT5zdWJkZXY7CiAK IAkvKiBzZXR1cCB0aGUgcGVyZm9ybWluZyBmYWxjb24ncyBiYXNlIGFkZHJlc3MgYW5kIG1hc2tz ICovCi0Jc3dpdGNoIChmdW5jLT5ib290X2ZhbGNvbikgeworCXN3aXRjaCAoYWNyLT5mdW5jLT5i b290X2ZhbGNvbikgewogCWNhc2UgTlZLTV9GQUxDT05fUE1VOgogCQlzYi0+ZGV2aWR4ID0gTlZL TV9TVUJERVZfUE1VOwogCQlzYi0+YmFzZSA9IDB4MTBhMDAwOwpAQCAtMjU5LDggKzMyNSwxNSBA QCBudmttX3NlY2Jvb3RfY3Rvcihjb25zdCBzdHJ1Y3QgbnZrbV9zZWNib290X2Z1bmMgKmZ1bmMs CiAJCXJldHVybiAtRUlOVkFMOwogCX07CiAKKwkvKiBJcyB0aGUgZmFsY29uIGluIGRlYnVnIG1v ZGU/ICovCisJdmFsID0gbnZrbV9yZDMyKHNiLT5zdWJkZXYuZGV2aWNlLCBzYi0+YmFzZSArIDB4 YzA4KTsKKwlzYi0+ZGVidWdfbW9kZSA9ICh2YWwgPj4gMjApICYgMHgxOworCisJdmFsID0gbnZr bV9yZDMyKGRldmljZSwgc2ItPmJhc2UgKyAweDEwOCk7CisKKwlzYi0+bWFuYWdlZF9mYWxjb25z ID0gbWFuYWdlZF9mYWxjb25zOwogCW52a21fZGVidWcoJnNiLT5zdWJkZXYsICJzZWN1cmVseSBt YW5hZ2VkIGZhbGNvbnM6XG4iKTsKLQlmb3JfZWFjaF9zZXRfYml0KGlkLCAmc2ItPmZ1bmMtPm1h bmFnZWRfZmFsY29ucywgTlZLTV9GQUxDT05fRU5EKQorCWZvcl9lYWNoX3NldF9iaXQoaWQsICZz Yi0+bWFuYWdlZF9mYWxjb25zLCBOVktNX0ZBTENPTl9FTkQpCiAJCW52a21fZGVidWcoJnNiLT5z dWJkZXYsICItICVzXG4iLCBudmttX2ZhbGNvbl9uYW1lW2lkXSk7CiAKIAlyZXR1cm4gMDsKZGlm ZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMDAuYyBiL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMDAuYwppbmRleCA2ZjQ1NzA2Zjg1OTguLjQ5 MzI3NTdhYjFhMiAxMDA2NDQKLS0tIGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9n bTIwMC5jCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMDAuYwpAQCAt MjAsMTAzMCArMjAsMjAgQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0v KgotICogU2VjdXJlIGJvb3QgaXMgdGhlIHByb2Nlc3MgYnkgd2hpY2ggTlZJRElBLXNpZ25lZCBm aXJtd2FyZSBpcyBsb2FkZWQgaW50bwotICogc29tZSBvZiB0aGUgZmFsY29ucyBvZiBhIEdQVS4g Rm9yIHByb2R1Y3Rpb24gZGV2aWNlcyB0aGlzIGlzIHRoZSBvbmx5IHdheQotICogZm9yIHRoZSBm aXJtd2FyZSB0byBhY2Nlc3MgdXNlZnVsIChidXQgc2Vuc2l0aXZlKSByZWdpc3RlcnMuCi0gKgot ICogQSBGYWxjb24gbWljcm9wcm9jZXNzb3Igc3VwcG9ydGluZyBhZHZhbmNlZCBzZWN1cml0eSBt b2RlcyBjYW4gcnVuIGluIG9uZSBvZgotICogdGhyZWUgbW9kZXM6Ci0gKgotICogLSBOb24tc2Vj dXJlIChOUykuIEluIHRoaXMgbW9kZSwgZnVuY3Rpb25hbGl0eSBpcyBzaW1pbGFyIHRvIEZhbGNv bgotICogICBhcmNoaXRlY3R1cmVzIGJlZm9yZSBzZWN1cml0eSBtb2RlcyB3ZXJlIGludHJvZHVj ZWQgKHByZS1NYXh3ZWxsKSwgYnV0Ci0gKiAgIGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZC4gSW4g cGFydGljdWxhciwgY2VydGFpbiByZWdpc3RlcnMgbWF5IGJlCi0gKiAgIGluYWNjZXNzaWJsZSBm b3IgcmVhZHMgYW5kL29yIHdyaXRlcywgYW5kIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MgbWF5IGJl Ci0gKiAgIGRpc2FibGVkIChvbiBjZXJ0YWluIEZhbGNvbiBpbnN0YW5jZXMpLiBUaGlzIGlzIHRo ZSBvbmx5IHBvc3NpYmxlIG1vZGUgdGhhdAotICogICBjYW4gYmUgdXNlZCBpZiB5b3UgZG9uJ3Qg aGF2ZSBtaWNyb2NvZGUgY3J5cHRvZ3JhcGhpY2FsbHkgc2lnbmVkIGJ5IE5WSURJQS4KLSAqCi0g KiAtIEhlYXZ5IFNlY3VyZSAoSFMpLiBJbiB0aGlzIG1vZGUsIHRoZSBtaWNyb3Byb2Nlc3NvciBp cyBhIGJsYWNrIGJveCAtIGl0J3MKLSAqICAgbm90IHBvc3NpYmxlIHRvIHJlYWQgb3Igd3JpdGUg YW55IEZhbGNvbiBpbnRlcm5hbCBzdGF0ZSBvciBGYWxjb24gcmVnaXN0ZXJzCi0gKiAgIGZyb20g b3V0c2lkZSB0aGUgRmFsY29uIChmb3IgZXhhbXBsZSwgZnJvbSB0aGUgaG9zdCBzeXN0ZW0pLiBU aGUgb25seSB3YXkKLSAqICAgdG8gZW5hYmxlIHRoaXMgbW9kZSBpcyBieSBsb2FkaW5nIG1pY3Jv Y29kZSB0aGF0IGhhcyBiZWVuIHNpZ25lZCBieSBOVklESUEuCi0gKiAgIChUaGUgbG9hZGluZyBw cm9jZXNzIGludm9sdmVzIHRhZ2dpbmcgdGhlIElNRU0gYmxvY2sgYXMgc2VjdXJlLCB3cml0aW5n IHRoZQotICogICBzaWduYXR1cmUgaW50byBhIEZhbGNvbiByZWdpc3RlciwgYW5kIHN0YXJ0aW5n IGV4ZWN1dGlvbi4gVGhlIGhhcmR3YXJlIHdpbGwKLSAqICAgdmFsaWRhdGUgdGhlIHNpZ25hdHVy ZSwgYW5kIGlmIHZhbGlkLCBncmFudCBIUyBwcml2aWxlZ2VzLikKLSAqCi0gKiAtIExpZ2h0IFNl Y3VyZSAoTFMpLiBJbiB0aGlzIG1vZGUsIHRoZSBtaWNyb3Byb2Nlc3NvciBoYXMgbW9yZSBwcml2 aWxlZ2VzCi0gKiAgIHRoYW4gTlMgYnV0IGZld2VyIHRoYW4gSFMuIFNvbWUgb2YgdGhlIG1pY3Jv cHJvY2Vzc29yIHN0YXRlIGlzIHZpc2libGUgdG8KLSAqICAgaG9zdCBzb2Z0d2FyZSB0byBlYXNl IGRlYnVnZ2luZy4gVGhlIG9ubHkgd2F5IHRvIGVuYWJsZSB0aGlzIG1vZGUgaXMgYnkgSFMKLSAq ICAgbWljcm9jb2RlIGVuYWJsaW5nIExTIG1vZGUuIFNvbWUgcHJpdmlsZWdlcyBhdmFpbGFibGUg dG8gSFMgbW9kZSBhcmUgbm90Ci0gKiAgIGF2YWlsYWJsZSBoZXJlLiBMUyBtb2RlIGlzIGludHJv ZHVjZWQgaW4gR00yMHguCi0gKgotICogU2VjdXJlIGJvb3QgY29uc2lzdHMgaW4gdGVtcG9yYXJp bHkgc3dpdGNoaW5nIGEgSFMtY2FwYWJsZSBmYWxjb24gKHR5cGljYWxseQotICogUE1VKSBpbnRv IEhTIG1vZGUgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIExTIGZpcm13YXJlcyBvZiBtYW5hZ2Vk IGZhbGNvbnMsCi0gKiBsb2FkIHRoZW0sIGFuZCBzd2l0Y2ggbWFuYWdlZCBmYWxjb25zIGludG8g TFMgbW9kZS4gT25jZSBzZWN1cmUgYm9vdAotICogY29tcGxldGVzLCBubyBmYWxjb24gcmVtYWlu cyBpbiBIUyBtb2RlLgotICoKLSAqIFNlY3VyZSBib290IHJlcXVpcmVzIGEgd3JpdGUtcHJvdGVj dGVkIG1lbW9yeSByZWdpb24gKFdQUikgd2hpY2ggY2FuIG9ubHkgYmUKLSAqIHdyaXR0ZW4gYnkg dGhlIHNlY3VyZSBmYWxjb24uIE9uIGRHUFUsIHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgV1BSIHJl Z2lvbiBpbgotICogdmlkZW8gbWVtb3J5LiBPbiBUZWdyYSwgaXQgaXMgc2V0IHVwIGJ5IHRoZSBi b290bG9hZGVyIGFuZCBpdHMgbG9jYXRpb24gYW5kCi0gKiBzaXplIHdyaXR0ZW4gaW50byBtZW1v cnkgY29udHJvbGxlciByZWdpc3RlcnMuCi0gKgotICogVGhlIHNlY3VyZSBib290IHByb2Nlc3Mg dGFrZXMgcGxhY2UgYXMgZm9sbG93czoKLSAqCi0gKiAxKSBBIExTIGJsb2IgaXMgY29uc3RydWN0 ZWQgdGhhdCBjb250YWlucyBhbGwgdGhlIExTIGZpcm13YXJlcyB3ZSB3YW50IHRvCi0gKiAgICBs b2FkLCBhbG9uZyB3aXRoIHRoZWlyIHNpZ25hdHVyZXMgYW5kIGJvb3Rsb2FkZXJzLgotICoKLSAq IDIpIEEgSFMgYmxvYiAoYWxzbyBjYWxsZWQgQUNSKSBpcyBjcmVhdGVkIHRoYXQgY29udGFpbnMg dGhlIHNpZ25lZCBIUwotICogICAgZmlybXdhcmUgaW4gY2hhcmdlIG9mIGxvYWRpbmcgdGhlIExT IGZpcm13YXJlcyBpbnRvIHRoZWlyIHJlc3BlY3RpdmUKLSAqICAgIGZhbGNvbnMuCi0gKgotICog MykgVGhlIEhTIGJsb2IgaXMgbG9hZGVkICh2aWEgaXRzIG93biBib290bG9hZGVyKSBhbmQgZXhl Y3V0ZWQgb24gdGhlCi0gKiAgICBIUy1jYXBhYmxlIGZhbGNvbi4gSXQgYXV0aGVudGljYXRlcyBp dHNlbGYsIHN3aXRjaGVzIHRoZSBzZWN1cmUgZmFsY29uIHRvCi0gKiAgICBIUyBtb2RlIGFuZCBz ZXR1cCB0aGUgV1BSIHJlZ2lvbiBhcm91bmQgdGhlIExTIGJsb2IgKGRHUFUpIG9yIGNvcGllcyB0 aGUKLSAqICAgIExTIGJsb2IgaW50byB0aGUgV1BSIHJlZ2lvbiAoVGVncmEpLgotICoKLSAqIDQp IFRoZSBMUyBibG9iIGlzIG5vdyBzZWN1cmUgZnJvbSBhbGwgZXh0ZXJuYWwgdGFtcGVyaW5nLiBU aGUgSFMgZmFsY29uCi0gKiAgICBjaGVja3MgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIExTIGZpcm13 YXJlcyBhbmQsIGlmIHZhbGlkLCBzd2l0Y2hlcyB0aGUKLSAqICAgIG1hbmFnZWQgZmFsY29ucyB0 byBMUyBtb2RlIGFuZCBtYWtlcyB0aGVtIHJlYWR5IHRvIHJ1biB0aGUgTFMgZmlybXdhcmUuCi0g KgotICogNSkgVGhlIG1hbmFnZWQgZmFsY29ucyByZW1haW4gaW4gTFMgbW9kZSBhbmQgY2FuIGJl IHN0YXJ0ZWQuCi0gKgotICovCiAKLSNpbmNsdWRlICJwcml2LmgiCisjaW5jbHVkZSAiYWNyLmgi CisjaW5jbHVkZSAiZ20yMDAuaCIKIAogI2luY2x1ZGUgPGNvcmUvZ3B1b2JqLmg+Ci0jaW5jbHVk ZSA8Y29yZS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPHN1YmRldi9mYi5oPgogCiAvKioKLSAqIHN0 cnVjdCBmd19iaW5faGVhZGVyIC0gaGVhZGVyIG9mIGZpcm13YXJlIGZpbGVzCi0gKiBAYmluX21h Z2ljOgkJYWx3YXlzIDB4M2IxZDE0ZjAKLSAqIEBiaW5fdmVyOgkJdmVyc2lvbiBvZiB0aGUgYmlu IGZvcm1hdAotICogQGJpbl9zaXplOgkJZW50aXJlIGltYWdlIHNpemUgaW5jbHVkaW5nIHRoaXMg aGVhZGVyCi0gKiBAaGVhZGVyX29mZnNldDoJb2Zmc2V0IG9mIHRoZSBmaXJtd2FyZS9ib290bG9h ZGVyIGhlYWRlciBpbiB0aGUgZmlsZQotICogQGRhdGFfb2Zmc2V0OglvZmZzZXQgb2YgdGhlIGZp cm13YXJlL2Jvb3Rsb2FkZXIgcGF5bG9hZCBpbiB0aGUgZmlsZQotICogQGRhdGFfc2l6ZToJCXNp emUgb2YgdGhlIHBheWxvYWQKLSAqCi0gKiBUaGlzIGhlYWRlciBpcyBsb2NhdGVkIGF0IHRoZSBi ZWdpbm5pbmcgb2YgdGhlIEhTIGZpcm13YXJlIGFuZCBIUyBib290bG9hZGVyCi0gKiBmaWxlcywg dG8gZGVzY3JpYmUgd2hlcmUgdGhlIGhlYWRlcnMgYW5kIGRhdGEgY2FuIGJlIGZvdW5kLgotICov Ci1zdHJ1Y3QgZndfYmluX2hlYWRlciB7Ci0JdTMyIGJpbl9tYWdpYzsKLQl1MzIgYmluX3ZlcjsK LQl1MzIgYmluX3NpemU7Ci0JdTMyIGhlYWRlcl9vZmZzZXQ7Ci0JdTMyIGRhdGFfb2Zmc2V0Owot CXUzMiBkYXRhX3NpemU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBmd19ibF9kZXNjIC0gZmlybXdh cmUgYm9vdGxvYWRlciBkZXNjcmlwdG9yCi0gKiBAc3RhcnRfdGFnOgkJc3RhcnRpbmcgdGFnIG9m IGJvb3Rsb2FkZXIKLSAqIEBkZXNjX2RtZW1fbG9hZF9vZmY6CURNRU0gb2Zmc2V0IG9mIGZsY25f YmxfZG1lbV9kZXNjCi0gKiBAY29kZV9vZmY6CQlvZmZzZXQgb2YgY29kZSBzZWN0aW9uCi0gKiBA Y29kZV9zaXplOgkJc2l6ZSBvZiBjb2RlIHNlY3Rpb24KLSAqIEBkYXRhX29mZjoJCW9mZnNldCBv ZiBkYXRhIHNlY3Rpb24KLSAqIEBkYXRhX3NpemU6CQlzaXplIG9mIGRhdGEgc2VjdGlvbgotICoK LSAqIFRoaXMgc3RydWN0dXJlIGlzIGVtYmVkZGVkIGluIGJvb3Rsb2FkZXIgZmlybXdhcmUgZmls ZXMgYXQgdG8gZGVzY3JpYmUgdGhlCi0gKiBJTUVNIGFuZCBETUVNIGxheW91dCBleHBlY3RlZCBi eSB0aGUgYm9vdGxvYWRlci4KLSAqLwotc3RydWN0IGZ3X2JsX2Rlc2MgewotCXUzMiBzdGFydF90 YWc7Ci0JdTMyIGRtZW1fbG9hZF9vZmY7Ci0JdTMyIGNvZGVfb2ZmOwotCXUzMiBjb2RlX3NpemU7 Ci0JdTMyIGRhdGFfb2ZmOwotCXUzMiBkYXRhX3NpemU7Ci19OwotCi0KLS8qKgotICogc3RydWN0 IGxzX3Vjb2RlX21nciAtIG1hbmFnZXIgZm9yIGFsbCBMUyBmYWxjb24gZmlybXdhcmVzCi0gKiBA Y291bnQ6CW51bWJlciBvZiBtYW5hZ2VkIExTIGZhbGNvbnMKLSAqIEB3cHJfc2l6ZToJc2l6ZSBv ZiB0aGUgcmVxdWlyZWQgV1BSIHJlZ2lvbiBpbiBieXRlcwotICogQGltZ19saXN0OglsaW5rZWQg bGlzdCBvZiBsc2ZfdWNvZGVfaW1nCi0gKi8KLXN0cnVjdCBsc191Y29kZV9tZ3IgewotCXUxNiBj b3VudDsKLQl1MzIgd3ByX3NpemU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBpbWdfbGlzdDsKLX07Ci0K LQotLyoKLSAqCi0gKiBIUyBibG9iIHN0cnVjdHVyZXMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1 Y3QgaHNmX2Z3X2hlYWRlciAtIEhTIGZpcm13YXJlIGRlc2NyaXB0b3IKLSAqIEBzaWdfZGJnX29m ZnNldDoJb2Zmc2V0IG9mIHRoZSBkZWJ1ZyBzaWduYXR1cmUKLSAqIEBzaWdfZGJnX3NpemU6CXNp emUgb2YgdGhlIGRlYnVnIHNpZ25hdHVyZQotICogQHNpZ19wcm9kX29mZnNldDoJb2Zmc2V0IG9m IHRoZSBwcm9kdWN0aW9uIHNpZ25hdHVyZQotICogQHNpZ19wcm9kX3NpemU6CXNpemUgb2YgdGhl IHByb2R1Y3Rpb24gc2lnbmF0dXJlCi0gKiBAcGF0Y2hfbG9jOgkJb2Zmc2V0IG9mIHRoZSBvZmZz ZXQgKHNpYykgb2Ygd2hlcmUgdGhlIHNpZ25hdHVyZSBpcwotICogQHBhdGNoX3NpZzoJCW9mZnNl dCBvZiB0aGUgb2Zmc2V0IChzaWMpIHRvIGFkZCB0byBzaWdfKl9vZmZzZXQKLSAqIEBoZHJfb2Zm c2V0OgkJb2Zmc2V0IG9mIHRoZSBsb2FkIGhlYWRlciAoc2VlIHN0cnVjdCBoc19sb2FkX2hlYWRl cikKLSAqIEBoZHJfc2l6ZToJCXNpemUgb2YgYWJvdmUgaGVhZGVyCi0gKgotICogVGhpcyBzdHJ1 Y3R1cmUgaXMgZW1iZWRkZWQgaW4gdGhlIEhTIGZpcm13YXJlIGltYWdlIGF0Ci0gKiBoc19iaW5f aGRyLmhlYWRlcl9vZmZzZXQuCi0gKi8KLXN0cnVjdCBoc2ZfZndfaGVhZGVyIHsKLQl1MzIgc2ln X2RiZ19vZmZzZXQ7Ci0JdTMyIHNpZ19kYmdfc2l6ZTsKLQl1MzIgc2lnX3Byb2Rfb2Zmc2V0Owot CXUzMiBzaWdfcHJvZF9zaXplOwotCXUzMiBwYXRjaF9sb2M7Ci0JdTMyIHBhdGNoX3NpZzsKLQl1 MzIgaGRyX29mZnNldDsKLQl1MzIgaGRyX3NpemU7Ci19OwotCi0KLS8qKgotICogc3RydWN0IGdt MjAwX2ZsY25fYmxfZGVzYyAtIERNRU0gYm9vdGxvYWRlciBkZXNjcmlwdG9yCi0gKiBAc2lnbmF0 dXJlOgkJMTZCIHNpZ25hdHVyZSBmb3Igc2VjdXJlIGNvZGUuIDBzIGlmIG5vIHNlY3VyZSBjb2Rl Ci0gKiBAY3R4X2RtYToJCURNQSBjb250ZXh0IHRvIGJlIHVzZWQgYnkgQkwgd2hpbGUgbG9hZGlu ZyBjb2RlL2RhdGEKLSAqIEBjb2RlX2RtYV9iYXNlOgkyNTZCLWFsaWduZWQgUGh5c2ljYWwgRkIg QWRkcmVzcyB3aGVyZSBjb2RlIGlzIGxvY2F0ZWQKLSAqCQkJKGZhbGNvbidzICR4Y2Jhc2UgcmVn aXN0ZXIpCi0gKiBAbm9uX3NlY19jb2RlX29mZjoJb2Zmc2V0IGZyb20gY29kZV9kbWFfYmFzZSB3 aGVyZSB0aGUgbm9uLXNlY3VyZSBjb2RlIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICBsb2Nh dGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgotICog QG5vbl9zZWNfY29kZV9zaXplOgl0aGUgc2l6ZSBvZiB0aGUgbm9uU2VjdXJlIGNvZGUgcGFydC4K LSAqIEBzZWNfY29kZV9vZmY6CW9mZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNl Y3VyZSBjb2RlIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0 IG11c3QgYmUgbXVsdGlwbGUgb2YgMjU2IHRvIGhlbHAgcGVyZgotICogQHNlY19jb2RlX3NpemU6 CW9mZnNldCBmcm9tIGNvZGVfZG1hX2Jhc2Ugd2hlcmUgdGhlIHNlY3VyZSBjb2RlIGlzCi0gKiAg ICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLiBUaGUgb2Zmc2V0IG11c3QgYmUgbXVsdGlwbGUg b2YgMjU2IHRvIGhlbHAgcGVyZgotICogQGNvZGVfZW50cnlfcG9pbnQ6CWNvZGUgZW50cnkgcG9p bnQgd2hpY2ggd2lsbCBiZSBpbnZva2VkIGJ5IEJMIGFmdGVyCi0gKiAgICAgICAgICAgICAgICAg ICAgICBjb2RlIGlzIGxvYWRlZC4KLSAqIEBkYXRhX2RtYV9iYXNlOgkyNTZCIGFsaWduZWQgUGh5 c2ljYWwgRkIgQWRkcmVzcyB3aGVyZSBkYXRhIGlzIGxvY2F0ZWQuCi0gKgkJCShmYWxjb24ncyAk eGRiYXNlIHJlZ2lzdGVyKQotICogQGRhdGFfc2l6ZToJCXNpemUgb2YgZGF0YSBibG9jay4gU2hv dWxkIGJlIG11bHRpcGxlIG9mIDI1NkIKLSAqCi0gKiBTdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYm9v dGxvYWRlciB0byBsb2FkIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBUaGlzIGhhcwotICogdG8gYmUg ZmlsbGVkIGJ5IGhvc3QgYW5kIGNvcGllZCBpbnRvIERNRU0gYXQgb2Zmc2V0IHByb3ZpZGVkIGlu IHRoZQotICogaHNmbGNuX2JsX2Rlc2MuYmxfZGVzY19kbWVtX2xvYWRfb2ZmLgotICovCi1zdHJ1 Y3QgZ20yMDBfZmxjbl9ibF9kZXNjIHsKLQl1MzIgcmVzZXJ2ZWRbNF07Ci0JdTMyIHNpZ25hdHVy ZVs0XTsKLQl1MzIgY3R4X2RtYTsKLQlzdHJ1Y3QgZmxjbl91NjQgY29kZV9kbWFfYmFzZTsKLQl1 MzIgbm9uX3NlY19jb2RlX29mZjsKLQl1MzIgbm9uX3NlY19jb2RlX3NpemU7Ci0JdTMyIHNlY19j b2RlX29mZjsKLQl1MzIgc2VjX2NvZGVfc2l6ZTsKLQl1MzIgY29kZV9lbnRyeV9wb2ludDsKLQlz dHJ1Y3QgZmxjbl91NjQgZGF0YV9kbWFfYmFzZTsKLQl1MzIgZGF0YV9zaXplOwotfTsKLQotCi0v KioKLSAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGR1cGxpY2F0ZSBhIGZpcm13YXJlIGZpbGUg aW4gbWVtb3J5IGFuZCBjaGVjayB0aGF0Ci0gKiBpdCBoYXMgdGhlIHJlcXVpcmVkIG1pbmltdW0g c2l6ZS4KLSAqLwotc3RhdGljIHZvaWQgKgotZ20yMDBfc2VjYm9vdF9sb2FkX2Zpcm13YXJlKGNv bnN0IHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAg c2l6ZV90IG1pbl9zaXplKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0Jdm9pZCAq YmxvYjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZp Y2UsIG5hbWUsICZmdyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQlpZiAo ZnctPnNpemUgPCBtaW5fc2l6ZSkgewotCQludmttX2Vycm9yKHN1YmRldiwgIiVzIGlzIHNtYWxs ZXIgdGhhbiBleHBlY3RlZCBzaXplICV6dVxuIiwKLQkJCSAgIG5hbWUsIG1pbl9zaXplKTsKLQkJ bnZrbV9maXJtd2FyZV9wdXQoZncpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0J YmxvYiA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQludmttX2Zp cm13YXJlX3B1dChmdyk7Ci0JaWYgKCFibG9iKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK LQotCXJldHVybiBibG9iOwotfQotCi0KLS8qCi0gKiBMb3ctc2VjdXJlIGJsb2IgY3JlYXRpb24K LSAqLwotCi0jZGVmaW5lIEJMX0RFU0NfQkxLX1NJWkUgMjU2Ci0vKioKLSAqIEJ1aWxkIGEgdWNv ZGUgaW1hZ2UgYW5kIGRlc2NyaXB0b3IgZnJvbSBwcm92aWRlZCBib290bG9hZGVyLCBjb2RlIGFu ZCBkYXRhLgotICoKLSAqIEBibDoJCWJvb3Rsb2FkZXIgaW1hZ2UsIGluY2x1ZGluZyAxNi1ieXRl cyBkZXNjcmlwdG9yCi0gKiBAY29kZToJTFMgZmlybXdhcmUgY29kZSBzZWdtZW50Ci0gKiBAZGF0 YToJTFMgZmlybXdhcmUgZGF0YSBzZWdtZW50Ci0gKiBAZGVzYzoJdWNvZGUgZGVzY3JpcHRvciB0 byBiZSB3cml0dGVuCi0gKgotICogUmV0dXJuOiBhbGxvY2F0ZWQgdWNvZGUgaW1hZ2Ugd2l0aCBj b3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uIGRlc2MKLSAqICAgICAgICAgaXMg YWxzbyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIHJpZ2h0IG9mZnNldHMgd2l0aGluIHJldHVybmVk IGltYWdlLgotICovCi1zdGF0aWMgdm9pZCAqCi1sc191Y29kZV9pbWdfYnVpbGQoY29uc3Qgc3Ry dWN0IGZpcm13YXJlICpibCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpjb2RlLAotCQkgICBjb25z dCBzdHJ1Y3QgZmlybXdhcmUgKmRhdGEsIHN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAqZGVzYykK LXsKLQlzdHJ1Y3QgZndfYmluX2hlYWRlciAqYmluX2hkciA9ICh2b2lkICopYmwtPmRhdGE7Ci0J c3RydWN0IGZ3X2JsX2Rlc2MgKmJsX2Rlc2MgPSAodm9pZCAqKWJsLT5kYXRhICsgYmluX2hkci0+ aGVhZGVyX29mZnNldDsKLQl2b2lkICpibF9kYXRhID0gKHZvaWQgKilibC0+ZGF0YSArIGJpbl9o ZHItPmRhdGFfb2Zmc2V0OwotCXUzMiBwb3MgPSAwOwotCXZvaWQgKmltYWdlOwotCi0JZGVzYy0+ Ym9vdGxvYWRlcl9zdGFydF9vZmZzZXQgPSBwb3M7Ci0JZGVzYy0+Ym9vdGxvYWRlcl9zaXplID0g QUxJR04oYmxfZGVzYy0+Y29kZV9zaXplLCBzaXplb2YodTMyKSk7Ci0JZGVzYy0+Ym9vdGxvYWRl cl9pbWVtX29mZnNldCA9IGJsX2Rlc2MtPnN0YXJ0X3RhZyAqIDI1NjsKLQlkZXNjLT5ib290bG9h ZGVyX2VudHJ5X3BvaW50ID0gYmxfZGVzYy0+c3RhcnRfdGFnICogMjU2OwotCi0JcG9zID0gQUxJ R04ocG9zICsgZGVzYy0+Ym9vdGxvYWRlcl9zaXplLCBCTF9ERVNDX0JMS19TSVpFKTsKLQlkZXNj LT5hcHBfc3RhcnRfb2Zmc2V0ID0gcG9zOwotCWRlc2MtPmFwcF9zaXplID0gQUxJR04oY29kZS0+ c2l6ZSwgQkxfREVTQ19CTEtfU0laRSkgKwotCQkJIEFMSUdOKGRhdGEtPnNpemUsIEJMX0RFU0Nf QkxLX1NJWkUpOwotCWRlc2MtPmFwcF9pbWVtX29mZnNldCA9IDA7Ci0JZGVzYy0+YXBwX2ltZW1f ZW50cnkgPSAwOwotCWRlc2MtPmFwcF9kbWVtX29mZnNldCA9IDA7Ci0JZGVzYy0+YXBwX3Jlc2lk ZW50X2NvZGVfb2Zmc2V0ID0gMDsKLQlkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplID0gQUxJ R04oY29kZS0+c2l6ZSwgQkxfREVTQ19CTEtfU0laRSk7Ci0KLQlwb3MgPSBBTElHTihwb3MgKyBk ZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplLCBCTF9ERVNDX0JMS19TSVpFKTsKLQlkZXNjLT5h cHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQgPSBwb3MgLSBkZXNjLT5hcHBfc3RhcnRfb2Zmc2V0Owot CWRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX3NpemUgPSBBTElHTihkYXRhLT5zaXplLCBCTF9ERVND X0JMS19TSVpFKTsKLQotCWRlc2MtPmltYWdlX3NpemUgPSBBTElHTihibF9kZXNjLT5jb2RlX3Np emUsIEJMX0RFU0NfQkxLX1NJWkUpICsKLQkJCSAgIGRlc2MtPmFwcF9zaXplOwotCi0JaW1hZ2Ug PSBremFsbG9jKGRlc2MtPmltYWdlX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghaW1hZ2UpCi0J CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JbWVtY3B5KGltYWdlICsgZGVzYy0+Ym9vdGxv YWRlcl9zdGFydF9vZmZzZXQsIGJsX2RhdGEsCi0JICAgICAgIGJsX2Rlc2MtPmNvZGVfc2l6ZSk7 Ci0JbWVtY3B5KGltYWdlICsgZGVzYy0+YXBwX3N0YXJ0X29mZnNldCwgY29kZS0+ZGF0YSwgY29k ZS0+c2l6ZSk7Ci0JbWVtY3B5KGltYWdlICsgZGVzYy0+YXBwX3N0YXJ0X29mZnNldCArIGRlc2Mt PmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCwKLQkgICAgICAgZGF0YS0+ZGF0YSwgZGF0YS0+c2l6 ZSk7Ci0KLQlyZXR1cm4gaW1hZ2U7Ci19Ci0KLS8qKgotICogbHNfdWNvZGVfaW1nX2xvYWRfZ2Vu ZXJpYygpIC0gbG9hZCBhbmQgcHJlcGFyZSBhIExTIHVjb2RlIGltYWdlCi0gKgotICogTG9hZCB0 aGUgTFMgbWljcm9jb2RlLCBib290bG9hZGVyIGFuZCBzaWduYXR1cmUgYW5kIHBhY2sgdGhlbSBp bnRvIGEgc2luZ2xlCi0gKiBibG9iLiBBbHNvIGdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIHVj b2RlIGRlc2NyaXB0b3IuCi0gKi8KLXN0YXRpYyBpbnQKLWxzX3Vjb2RlX2ltZ19sb2FkX2dlbmVy aWMoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsCi0JCQkgIHN0cnVjdCBsc191Y29k ZV9pbWcgKmltZywgY29uc3QgY2hhciAqZmFsY29uX25hbWUsCi0JCQkgIGNvbnN0IHUzMiBmYWxj b25faWQpCi17Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpibCwgKmNvZGUsICpkYXRhOwotCXN0 cnVjdCBsc2ZfdWNvZGVfZGVzYyAqbHNmX2Rlc2M7Ci0JY2hhciBmWzY0XTsKLQlpbnQgcmV0Owot Ci0JaW1nLT51Y29kZV9oZWFkZXIgPSBOVUxMOwotCi0Jc25wcmludGYoZiwgc2l6ZW9mKGYpLCAi Z3IvJXNfYmwiLCBmYWxjb25fbmFtZSk7Ci0JcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2 LT5kZXZpY2UsIGYsICZibCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcjsKLQotCXNucHJpbnRm KGYsIHNpemVvZihmKSwgImdyLyVzX2luc3QiLCBmYWxjb25fbmFtZSk7Ci0JcmV0ID0gbnZrbV9m aXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIGYsICZjb2RlKTsKLQlpZiAocmV0KQotCQlnb3Rv IGZyZWVfYmw7Ci0KLQlzbnByaW50ZihmLCBzaXplb2YoZiksICJnci8lc19kYXRhIiwgZmFsY29u X25hbWUpOwotCXJldCA9IG52a21fZmlybXdhcmVfZ2V0KHN1YmRldi0+ZGV2aWNlLCBmLCAmZGF0 YSk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlX2luc3Q7Ci0KLQlpbWctPnVjb2RlX2RhdGEgPSBs c191Y29kZV9pbWdfYnVpbGQoYmwsIGNvZGUsIGRhdGEsCi0JCQkJCSAgICAgJmltZy0+dWNvZGVf ZGVzYyk7Ci0JaWYgKElTX0VSUihpbWctPnVjb2RlX2RhdGEpKSB7Ci0JCXJldCA9IFBUUl9FUlIo aW1nLT51Y29kZV9kYXRhKTsKLQkJZ290byBmcmVlX2RhdGE7Ci0JfQotCWltZy0+dWNvZGVfc2l6 ZSA9IGltZy0+dWNvZGVfZGVzYy5pbWFnZV9zaXplOwotCi0Jc25wcmludGYoZiwgc2l6ZW9mKGYp LCAiZ3IvJXNfc2lnIiwgZmFsY29uX25hbWUpOwotCWxzZl9kZXNjID0gZ20yMDBfc2VjYm9vdF9s b2FkX2Zpcm13YXJlKHN1YmRldiwgZiwgc2l6ZW9mKCpsc2ZfZGVzYykpOwotCWlmIChJU19FUlIo bHNmX2Rlc2MpKSB7Ci0JCXJldCA9IFBUUl9FUlIobHNmX2Rlc2MpOwotCQlnb3RvIGZyZWVfaW1h Z2U7Ci0JfQotCS8qIG5vdCBuZWVkZWQ/IHRoZSBzaWduYXR1cmUgc2hvdWxkIGFscmVhZHkgaGF2 ZSB0aGUgcmlnaHQgdmFsdWUgKi8KLQlsc2ZfZGVzYy0+ZmFsY29uX2lkID0gZmFsY29uX2lkOwot CW1lbWNweSgmaW1nLT5sc2JfaGVhZGVyLnNpZ25hdHVyZSwgbHNmX2Rlc2MsIHNpemVvZigqbHNm X2Rlc2MpKTsKLQlpbWctPmZhbGNvbl9pZCA9IGxzZl9kZXNjLT5mYWxjb25faWQ7Ci0Ja2ZyZWUo bHNmX2Rlc2MpOwotCi0JLyogc3VjY2VzcyBwYXRoIC0gb25seSBmcmVlIHJlcXVlc3RlZCBmaXJt d2FyZSBmaWxlcyAqLwotCWdvdG8gZnJlZV9kYXRhOwotCi1mcmVlX2ltYWdlOgotCWtmcmVlKGlt Zy0+dWNvZGVfZGF0YSk7Ci1mcmVlX2RhdGE6Ci0JbnZrbV9maXJtd2FyZV9wdXQoZGF0YSk7Ci1m cmVlX2luc3Q6Ci0JbnZrbV9maXJtd2FyZV9wdXQoY29kZSk7Ci1mcmVlX2JsOgotCW52a21fZmly bXdhcmVfcHV0KGJsKTsKLWVycm9yOgotCXJldHVybiByZXQ7Ci19Ci0KLXR5cGVkZWYgaW50ICgq bHNmX2xvYWRfZnVuYykoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29k ZV9pbWcgKik7Ci0KLWludAotZ20yMDBfbHNfbG9hZF9mZWNzKGNvbnN0IHN0cnVjdCBudmttX3N1 YmRldiAqc3ViZGV2LCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcpCi17Ci0JcmV0dXJuIGxzX3Vj b2RlX2ltZ19sb2FkX2dlbmVyaWMoc3ViZGV2LCBpbWcsICJmZWNzIiwKLQkJCQkJIE5WS01fRkFM Q09OX0ZFQ1MpOwotfQotCi1pbnQKLWdtMjAwX2xzX2xvYWRfZ3BjY3MoY29uc3Qgc3RydWN0IG52 a21fc3ViZGV2ICpzdWJkZXYsIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZykKLXsKLQlyZXR1cm4g bHNfdWNvZGVfaW1nX2xvYWRfZ2VuZXJpYyhzdWJkZXYsIGltZywgImdwY2NzIiwKLQkJCQkJIE5W S01fRkFMQ09OX0dQQ0NTKTsKLX0KLQotLyoqCi0gKiBsc191Y29kZV9pbWdfbG9hZCgpIC0gY3Jl YXRlIGEgbHNmX3Vjb2RlX2ltZyBhbmQgbG9hZCBpdAotICovCi1zdGF0aWMgc3RydWN0IGxzX3Vj b2RlX2ltZyAqCi1sc191Y29kZV9pbWdfbG9hZChzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwg bHNmX2xvYWRfZnVuYyBsb2FkX2Z1bmMpCi17Ci0Jc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOwot CWludCByZXQ7Ci0KLQlpbWcgPSBremFsbG9jKHNpemVvZigqaW1nKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFpbWcpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcmV0ID0gbG9hZF9mdW5j KHN1YmRldiwgaW1nKTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKGltZyk7Ci0JCXJldHVybiBFUlJf UFRSKHJldCk7Ci0JfQotCi0JcmV0dXJuIGltZzsKLX0KLQotLyoqCi0gKiBnbTIwMF9zZWNib290 X2xzX2JsX2Rlc2MoKSAtIHBvcHVsYXRlIGEgRE1FTSBCTCBkZXNjcmlwdG9yIGZvciBMUyBpbWFn ZQotICogQGltZzoJdWNvZGUgaW1hZ2UgdG8gZ2VuZXJhdGUgYWdhaW5zdAotICogQGRlc2M6CWRl c2NyaXB0b3IgdG8gcG9wdWxhdGUKLSAqIEBzYjoJCXNlY3VyZSBib290IHN0YXRlIHRvIHVzZSBm b3IgYmFzZSBhZGRyZXNzZXMKLSAqCi0gKiBQb3B1bGF0ZSB0aGUgRE1FTSBCTCBkZXNjcmlwdG9y IHdpdGggdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBhCi0gKiBsc191Y29kZV9kZXNjLgot ICoKLSAqLwotc3RhdGljIHZvaWQKLWdtMjAwX3NlY2Jvb3RfbHNfYmxfZGVzYyhjb25zdCBzdHJ1 Y3QgbHNfdWNvZGVfaW1nICppbWcsIHU2NCB3cHJfYWRkciwKLQkJCSB2b2lkICpfZGVzYykKLXsK LQlzdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNjICpkZXNjID0gX2Rlc2M7Ci0JY29uc3Qgc3RydWN0 IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7Ci0JdTY0IGFkZHJf YmFzZTsKLQotCWFkZHJfYmFzZSA9IHdwcl9hZGRyICsgaW1nLT5sc2JfaGVhZGVyLnVjb2RlX29m ZiArCi0JCSAgICBwZGVzYy0+YXBwX3N0YXJ0X29mZnNldDsKLQotCW1lbXNldChkZXNjLCAwLCBz aXplb2YoKmRlc2MpKTsKLQlkZXNjLT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9VQ09ERTsKLQlk ZXNjLT5jb2RlX2RtYV9iYXNlLmxvID0gbG93ZXJfMzJfYml0cygKLQkJKGFkZHJfYmFzZSArIHBk ZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQpKTsKLQlkZXNjLT5jb2RlX2RtYV9iYXNlLmhp ID0gdXBwZXJfMzJfYml0cygKLQkJKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29k ZV9vZmZzZXQpKTsKLQlkZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRl bnRfY29kZV9zaXplOwotCWRlc2MtPmRhdGFfZG1hX2Jhc2UubG8gPSBsb3dlcl8zMl9iaXRzKAot CQkoYWRkcl9iYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkpOwotCWRlc2Mt PmRhdGFfZG1hX2Jhc2UuaGkgPSB1cHBlcl8zMl9iaXRzKAotCQkoYWRkcl9iYXNlICsgcGRlc2Mt PmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkpOwotCWRlc2MtPmRhdGFfc2l6ZSA9IHBkZXNjLT5h cHBfcmVzaWRlbnRfZGF0YV9zaXplOwotCWRlc2MtPmNvZGVfZW50cnlfcG9pbnQgPSBwZGVzYy0+ YXBwX2ltZW1fZW50cnk7Ci19Ci0KLSNkZWZpbmUgTFNGX0xTQl9IRUFERVJfQUxJR04gMjU2Ci0j ZGVmaW5lIExTRl9CTF9EQVRBX0FMSUdOIDI1NgotI2RlZmluZSBMU0ZfQkxfREFUQV9TSVpFX0FM SUdOIDI1NgotI2RlZmluZSBMU0ZfQkxfQ09ERV9TSVpFX0FMSUdOIDI1NgotI2RlZmluZSBMU0Zf VUNPREVfREFUQV9BTElHTiA0MDk2Ci0KLS8qKgotICogbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVy cyAtIGZpbGwgdGhlIFdQUiBhbmQgTFNCIGhlYWRlcnMgb2YgYW4gaW1hZ2UKLSAqIEBnc2I6CXNl Y3VyZSBib290IGRldmljZSB1c2VkCi0gKiBAaW1nOglpbWFnZSB0byBnZW5lcmF0ZSBmb3IKLSAq IEBvZmZzZXQ6CW9mZnNldCBpbiB0aGUgV1BSIHJlZ2lvbiB3aGVyZSB0aGlzIGltYWdlIHN0YXJ0 cwotICoKLSAqIEFsbG9jYXRlIHNwYWNlIGluIHRoZSBXUFIgYXJlYSBmcm9tIG9mZnNldCBhbmQg d3JpdGUgdGhlIFdQUiBhbmQgTFNCIGhlYWRlcnMKLSAqIGFjY29yZGluZ2x5LgotICoKLSAqIFJl dHVybjogb2Zmc2V0IGF0IHRoZSBlbmQgb2YgdGhpcyBpbWFnZS4KLSAqLwotc3RhdGljIHUzMgot bHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBzdHJ1 Y3QgbHNfdWNvZGVfaW1nICppbWcsCi0JCQkgIHUzMiBvZmZzZXQpCi17Ci0Jc3RydWN0IGxzZl93 cHJfaGVhZGVyICp3aGRyID0gJmltZy0+d3ByX2hlYWRlcjsKLQlzdHJ1Y3QgbHNmX2xzYl9oZWFk ZXIgKmxoZHIgPSAmaW1nLT5sc2JfaGVhZGVyOwotCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAq ZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7Ci0JY29uc3Qgc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xl X2Z1bmMgKmZ1bmMgPQotCQkJCQkJKCpnc2ItPmxzX2Z1bmMpW2ltZy0+ZmFsY29uX2lkXTsKLQot CWlmIChpbWctPnVjb2RlX2hlYWRlcikgewotCQludmttX2ZhdGFsKCZnc2ItPmJhc2Uuc3ViZGV2 LAotCQkJICAgICJpbWFnZXMgd2l0aG91Z2ggbG9hZGVyIGFyZSBub3Qgc3VwcG9ydGVkIHlldCFc biIpOwotCQlyZXR1cm4gb2Zmc2V0OwotCX0KLQotCS8qIEZpbGwgV1BSIGhlYWRlciAqLwotCXdo ZHItPmZhbGNvbl9pZCA9IGltZy0+ZmFsY29uX2lkOwotCXdoZHItPmJvb3RzdHJhcF9vd25lciA9 IGdzYi0+YmFzZS5mdW5jLT5ib290X2ZhbGNvbjsKLQl3aGRyLT5zdGF0dXMgPSBMU0ZfSU1BR0Vf U1RBVFVTX0NPUFk7Ci0KLQkvKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNsdWRlIGFuIExTQiBo ZWFkZXIgc2l6ZSAqLwotCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgTFNGX0xTQl9IRUFERVJfQUxJ R04pOwotCXdoZHItPmxzYl9vZmZzZXQgPSBvZmZzZXQ7Ci0Jb2Zmc2V0ICs9IHNpemVvZihzdHJ1 Y3QgbHNmX2xzYl9oZWFkZXIpOwotCi0JLyoKLQkgKiBBbGlnbiwgc2F2ZSBvZmYsIGFuZCBpbmNs dWRlIHRoZSBvcmlnaW5hbCAoc3RhdGljKSB1Y29kZQotCSAqIGltYWdlIHNpemUKLQkgKi8KLQlv ZmZzZXQgPSBBTElHTihvZmZzZXQsIExTRl9VQ09ERV9EQVRBX0FMSUdOKTsKLQlsaGRyLT51Y29k ZV9vZmYgPSBvZmZzZXQ7Ci0Jb2Zmc2V0ICs9IGltZy0+dWNvZGVfc2l6ZTsKLQotCS8qCi0JICog Rm9yIGZhbGNvbnMgdGhhdCB1c2UgYSBib290IGxvYWRlciAoQkwpLCB3ZSBhcHBlbmQgYSBsb2Fk ZXIKLQkgKiBkZXNjIHN0cnVjdHVyZSBvbiB0aGUgZW5kIG9mIHRoZSB1Y29kZSBpbWFnZSBhbmQg Y29uc2lkZXIKLQkgKiB0aGlzIHRoZSBib290IGxvYWRlciBkYXRhLiBUaGUgaG9zdCB3aWxsIHRo ZW4gY29weSB0aGUgbG9hZGVyCi0JICogZGVzYyBhcmdzIHRvIHRoaXMgc3BhY2Ugd2l0aGluIHRo ZSBXUFIgcmVnaW9uIChiZWZvcmUgbG9ja2luZwotCSAqIGRvd24pIGFuZCB0aGUgSFMgYmluIHdp bGwgdGhlbiBjb3B5IHRoZW0gdG8gRE1FTSAwIGZvciB0aGUKLQkgKiBsb2FkZXIuCi0JICovCi0J bGhkci0+YmxfY29kZV9zaXplID0gQUxJR04oZGVzYy0+Ym9vdGxvYWRlcl9zaXplLAotCQkJCSAg IExTRl9CTF9DT0RFX1NJWkVfQUxJR04pOwotCWxoZHItPnVjb2RlX3NpemUgPSBBTElHTihkZXNj LT5hcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQsCi0JCQkJIExTRl9CTF9DT0RFX1NJWkVfQUxJR04p ICsgbGhkci0+YmxfY29kZV9zaXplOwotCWxoZHItPmRhdGFfc2l6ZSA9IEFMSUdOKGRlc2MtPmFw cF9zaXplLCBMU0ZfQkxfQ09ERV9TSVpFX0FMSUdOKSArCi0JCQkJbGhkci0+YmxfY29kZV9zaXpl IC0gbGhkci0+dWNvZGVfc2l6ZTsKLQkvKgotCSAqIFRob3VnaCB0aGUgQkwgaXMgbG9jYXRlZCBh dCAwdGggb2Zmc2V0IG9mIHRoZSBpbWFnZSwgdGhlIFZBCi0JICogaXMgZGlmZmVyZW50IHRvIG1h a2Ugc3VyZSB0aGF0IGl0IGRvZXNuJ3QgY29sbGlkZSB0aGUgYWN0dWFsCi0JICogT1MgVkEgcmFu Z2UKLQkgKi8KLQlsaGRyLT5ibF9pbWVtX29mZiA9IGRlc2MtPmJvb3Rsb2FkZXJfaW1lbV9vZmZz ZXQ7Ci0JbGhkci0+YXBwX2NvZGVfb2ZmID0gZGVzYy0+YXBwX3N0YXJ0X29mZnNldCArCi0JCQkg ICAgIGRlc2MtPmFwcF9yZXNpZGVudF9jb2RlX29mZnNldDsKLQlsaGRyLT5hcHBfY29kZV9zaXpl ID0gZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfc2l6ZTsKLQlsaGRyLT5hcHBfZGF0YV9vZmYgPSBk ZXNjLT5hcHBfc3RhcnRfb2Zmc2V0ICsKLQkJCSAgICAgZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFf b2Zmc2V0OwotCWxoZHItPmFwcF9kYXRhX3NpemUgPSBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9z aXplOwotCi0JbGhkci0+ZmxhZ3MgPSAwOwotCWlmIChpbWctPmZhbGNvbl9pZCA9PSBnc2ItPmJh c2UuZnVuYy0+Ym9vdF9mYWxjb24pCi0JCWxoZHItPmZsYWdzID0gTFNGX0ZMQUdfRE1BQ1RMX1JF UV9DVFg7Ci0KLQkvKiBHUENDUyB3aWxsIGJlIGxvYWRlZCB1c2luZyBQUkkgKi8KLQlpZiAoaW1n LT5mYWxjb25faWQgPT0gTlZLTV9GQUxDT05fR1BDQ1MpCi0JCWxoZHItPmZsYWdzIHw9IExTRl9G TEFHX0ZPUkNFX1BSSVZfTE9BRDsKLQotCS8qIEFsaWduIGFuZCBzYXZlIG9mZiBCTCBkZXNjcmlw dG9yIHNpemUgKi8KLQlsaGRyLT5ibF9kYXRhX3NpemUgPSBBTElHTihmdW5jLT5ibF9kZXNjX3Np emUsIExTRl9CTF9EQVRBX1NJWkVfQUxJR04pOwotCi0JLyoKLQkgKiBBbGlnbiwgc2F2ZSBvZmYs IGFuZCBpbmNsdWRlIHRoZSBhZGRpdGlvbmFsIEJMIGRhdGEKLQkgKi8KLQlvZmZzZXQgPSBBTElH TihvZmZzZXQsIExTRl9CTF9EQVRBX0FMSUdOKTsKLQlsaGRyLT5ibF9kYXRhX29mZiA9IG9mZnNl dDsKLQlvZmZzZXQgKz0gbGhkci0+YmxfZGF0YV9zaXplOwotCi0JcmV0dXJuIG9mZnNldDsKLX0K LQotc3RhdGljIHZvaWQKLWxzX3Vjb2RlX21ncl9pbml0KHN0cnVjdCBsc191Y29kZV9tZ3IgKm1n cikKLXsKLQltZW1zZXQobWdyLCAwLCBzaXplb2YoKm1ncikpOwotCUlOSVRfTElTVF9IRUFEKCZt Z3ItPmltZ19saXN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWxzX3Vjb2RlX21ncl9jbGVhbnVwKHN0 cnVjdCBsc191Y29kZV9tZ3IgKm1ncikKLXsKLQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsICp0 OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGltZywgdCwgJm1nci0+aW1nX2xpc3QsIG5v ZGUpIHsKLQkJa2ZyZWUoaW1nLT51Y29kZV9kYXRhKTsKLQkJa2ZyZWUoaW1nLT51Y29kZV9oZWFk ZXIpOwotCQlrZnJlZShpbWcpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWxzX3Vjb2RlX21ncl9h ZGRfaW1nKHN0cnVjdCBsc191Y29kZV9tZ3IgKm1nciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1n KQotewotCW1nci0+Y291bnQrKzsKLQlsaXN0X2FkZF90YWlsKCZpbWctPm5vZGUsICZtZ3ItPmlt Z19saXN0KTsKLX0KLQotLyoqCi0gKiBsc191Y29kZV9tZ3JfZmlsbF9oZWFkZXJzIC0gZmlsbCBX UFIgYW5kIExTQiBoZWFkZXJzIG9mIGFsbCBtYW5hZ2VkIGltYWdlcwotICovCi1zdGF0aWMgdm9p ZAotbHNfdWNvZGVfbWdyX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBz dHJ1Y3QgbHNfdWNvZGVfbWdyICptZ3IpCi17Ci0Jc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nOwot CXUzMiBvZmZzZXQ7Ci0KLQkvKgotCSAqIFN0YXJ0IHdpdGggYW4gYXJyYXkgb2YgV1BSIGhlYWRl cnMgYXQgdGhlIGJhc2Ugb2YgdGhlIFdQUi4KLQkgKiBUaGUgZXhwZWN0YXRpb24gaGVyZSBpcyB0 aGF0IHRoZSBzZWN1cmUgZmFsY29uIHdpbGwgZG8gYSBzaW5nbGUgRE1BCi0JICogcmVhZCBvZiB0 aGlzIGFycmF5IGFuZCBjYWNoZSBpdCBpbnRlcm5hbGx5IHNvIGl0J3Mgb2sgdG8gcGFjayB0aGVz ZS4KLQkgKiBBbHNvLCB3ZSBhZGQgMSB0byB0aGUgZmFsY29uIGNvdW50IHRvIGluZGljYXRlIHRo ZSBlbmQgb2YgdGhlIGFycmF5LgotCSAqLwotCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbHNmX3dw cl9oZWFkZXIpICogKG1nci0+Y291bnQgKyAxKTsKLQotCS8qCi0JICogV2FsayB0aGUgbWFuYWdl ZCBmYWxjb25zLCBhY2NvdW50aW5nIGZvciB0aGUgTFNCIHN0cnVjdHMKLQkgKiBhcyB3ZWxsIGFz IHRoZSB1Y29kZSBpbWFnZXMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbWcsICZtZ3It PmltZ19saXN0LCBub2RlKSB7Ci0JCW9mZnNldCA9IGxzX3Vjb2RlX2ltZ19maWxsX2hlYWRlcnMo Z3NiLCBpbWcsIG9mZnNldCk7Ci0JfQotCi0JbWdyLT53cHJfc2l6ZSA9IG9mZnNldDsKLX0KLQot LyoqCi0gKiBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByIC0gd3JpdGUgdGhlIFdQUiBibG9iIGNvbnRl bnRzCi0gKi8KLXN0YXRpYyBpbnQKLWxzX3Vjb2RlX21ncl93cml0ZV93cHIoc3RydWN0IGdtMjAw X3NlY2Jvb3QgKmdzYiwgc3RydWN0IGxzX3Vjb2RlX21nciAqbWdyLAotCQkgICAgICAgc3RydWN0 IG52a21fZ3B1b2JqICp3cHJfYmxvYikKLXsKLQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7Ci0J dTMyIHBvcyA9IDA7Ci0KLQludmttX2ttYXAod3ByX2Jsb2IpOwotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeShpbWcsICZtZ3ItPmltZ19saXN0LCBub2RlKSB7Ci0JCW52a21fZ3B1b2JqX21lbWNweV90 byh3cHJfYmxvYiwgcG9zLCAmaW1nLT53cHJfaGVhZGVyLAotCQkJCSAgICAgIHNpemVvZihpbWct Pndwcl9oZWFkZXIpKTsKLQotCQludmttX2dwdW9ial9tZW1jcHlfdG8od3ByX2Jsb2IsIGltZy0+ d3ByX2hlYWRlci5sc2Jfb2Zmc2V0LAotCQkJCSAgICAgJmltZy0+bHNiX2hlYWRlciwgc2l6ZW9m KGltZy0+bHNiX2hlYWRlcikpOwotCi0JCS8qIEdlbmVyYXRlIGFuZCB3cml0ZSBCTCBkZXNjcmlw dG9yICovCi0JCWlmICghaW1nLT51Y29kZV9oZWFkZXIpIHsKLQkJCWNvbnN0IHN0cnVjdCBzZWNi b290X2xzX3NpbmdsZV9mdW5jICpsc19mdW5jID0KLQkJCQkJCSgqZ3NiLT5sc19mdW5jKVtpbWct PmZhbGNvbl9pZF07Ci0JCQl1OCBnZGVzY1tsc19mdW5jLT5ibF9kZXNjX3NpemVdOwotCi0JCQls c19mdW5jLT5nZW5lcmF0ZV9ibF9kZXNjKGltZywgZ3NiLT5hY3Jfd3ByX2FkZHIsCi0JCQkJCQkg ICZnZGVzYyk7Ci0KLQkJCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwKLQkJCQkJICAg ICAgaW1nLT5sc2JfaGVhZGVyLmJsX2RhdGFfb2ZmLAotCQkJCQkgICAgICAmZ2Rlc2MsIGxzX2Z1 bmMtPmJsX2Rlc2Nfc2l6ZSk7Ci0JCX0KLQotCQkvKiBDb3B5IHVjb2RlICovCi0JCW52a21fZ3B1 b2JqX21lbWNweV90byh3cHJfYmxvYiwgaW1nLT5sc2JfaGVhZGVyLnVjb2RlX29mZiwKLQkJCQkg ICAgICBpbWctPnVjb2RlX2RhdGEsIGltZy0+dWNvZGVfc2l6ZSk7Ci0KLQkJcG9zICs9IHNpemVv ZihpbWctPndwcl9oZWFkZXIpOwotCX0KLQotCW52a21fd28zMih3cHJfYmxvYiwgcG9zLCBOVktN X0ZBTENPTl9JTlZBTElEKTsKLQotCW52a21fZG9uZSh3cHJfYmxvYik7Ci0KLQlyZXR1cm4gMDsK LX0KLQotLyogQm90aCBzaXplIGFuZCBhZGRyZXNzIG9mIFdQUiBuZWVkIHRvIGJlIDEyOEstYWxp Z25lZCAqLwotI2RlZmluZSBXUFJfQUxJR05NRU5UCTB4MjAwMDAKLS8qKgotICogZ20yMDBfc2Vj Ym9vdF9wcmVwYXJlX2xzX2Jsb2IoKSAtIHByZXBhcmUgdGhlIExTIGJsb2IKLSAqCi0gKiBGb3Ig ZWFjaCBzZWN1cmVseSBtYW5hZ2VkIGZhbGNvbiwgbG9hZCB0aGUgRlcsIHNpZ25hdHVyZXMgYW5k IGJvb3Rsb2FkZXJzIGFuZAotICogcHJlcGFyZSBhIHVjb2RlIGJsb2IuIFRoZW4sIGNvbXB1dGUg dGhlIG9mZnNldHMgaW4gdGhlIFdQUiByZWdpb24gZm9yIGVhY2gKLSAqIGJsb2IsIGFuZCBmaW5h bGx5IHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB1Y29kZSBibG9icyBpbnRvIGEgR1BVIG9iamVjdCB0 aGF0Ci0gKiB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBXUFIgcmVnaW9uIGJ5IHRoZSBIUyBmaXJt d2FyZS4KLSAqLwotc3RhdGljIGludAotZ20yMDBfc2VjYm9vdF9wcmVwYXJlX2xzX2Jsb2Ioc3Ry dWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsKLQlzdHJ1Y3QgbnZrbV9zZWNib290ICpzYiA9ICZn c2ItPmJhc2U7Ci0Jc3RydWN0IG52a21fZGV2aWNlICpkZXZpY2UgPSBzYi0+c3ViZGV2LmRldmlj ZTsKLQlzdHJ1Y3QgbHNfdWNvZGVfbWdyIG1ncjsKLQlpbnQgZmFsY29uX2lkOwotCWludCByZXQ7 Ci0KLQlsc191Y29kZV9tZ3JfaW5pdCgmbWdyKTsKLQotCS8qIExvYWQgYWxsIExTIGJsb2JzICov Ci0JZm9yX2VhY2hfc2V0X2JpdChmYWxjb25faWQsICZzYi0+ZnVuYy0+bWFuYWdlZF9mYWxjb25z LAotCQkJIE5WS01fRkFMQ09OX0VORCkgewotCQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWc7Ci0K LQkJaW1nID0gbHNfdWNvZGVfaW1nX2xvYWQoJnNiLT5zdWJkZXYsCi0JCQkJCSgqZ3NiLT5sc19m dW5jKVtmYWxjb25faWRdLT5sb2FkKTsKLQotCQlpZiAoSVNfRVJSKGltZykpIHsKLQkJCXJldCA9 IFBUUl9FUlIoaW1nKTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlsc191Y29kZV9tZ3JfYWRk X2ltZygmbWdyLCBpbWcpOwotCX0KLQotCS8qCi0JICogRmlsbCB0aGUgV1BSIGFuZCBMU0YgaGVh ZGVycyB3aXRoIHRoZSByaWdodCBvZmZzZXRzIGFuZCBjb21wdXRlCi0JICogcmVxdWlyZWQgV1BS IHNpemUKLQkgKi8KLQlsc191Y29kZV9tZ3JfZmlsbF9oZWFkZXJzKGdzYiwgJm1ncik7Ci0JbWdy Lndwcl9zaXplID0gQUxJR04obWdyLndwcl9zaXplLCBXUFJfQUxJR05NRU5UKTsKLQotCS8qIEFs bG9jYXRlIEdQVSBvYmplY3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFdQUiByZWdpb24gKi8KLQly ZXQgPSBudmttX2dwdW9ial9uZXcoZGV2aWNlLCBtZ3Iud3ByX3NpemUsIFdQUl9BTElHTk1FTlQs IGZhbHNlLCBOVUxMLAotCQkJICAgICAgJmdzYi0+bHNfYmxvYik7Ci0JaWYgKHJldCkKLQkJZ290 byBjbGVhbnVwOwotCi0JbnZrbV9kZWJ1Zygmc2ItPnN1YmRldiwgIiVkIG1hbmFnZWQgTFMgZmFs Y29ucywgV1BSIHNpemUgaXMgJWQgYnl0ZXNcbiIsCi0JCSAgICBtZ3IuY291bnQsIG1nci53cHJf c2l6ZSk7Ci0KLQkvKiBJZiBXUFIgYWRkcmVzcyBhbmQgc2l6ZSBhcmUgbm90IGZpeGVkLCBzZXQg dGhlbSB0byBmaXQgdGhlIExTIGJsb2IgKi8KLQlpZiAoIWdzYi0+d3ByX3NpemUpIHsKLQkJZ3Ni LT5hY3Jfd3ByX2FkZHIgPSBnc2ItPmxzX2Jsb2ItPmFkZHI7Ci0JCWdzYi0+YWNyX3dwcl9zaXpl ID0gZ3NiLT5sc19ibG9iLT5zaXplOwotCX0gZWxzZSB7Ci0JCWdzYi0+YWNyX3dwcl9hZGRyID0g Z3NiLT53cHJfYWRkcjsKLQkJZ3NiLT5hY3Jfd3ByX3NpemUgPSBnc2ItPndwcl9zaXplOwotCX0K LQotCS8qIFdyaXRlIExTIGJsb2IgKi8KLQlyZXQgPSBsc191Y29kZV9tZ3Jfd3JpdGVfd3ByKGdz YiwgJm1nciwgZ3NiLT5sc19ibG9iKTsKLQlpZiAocmV0KQotCQludmttX2dwdW9ial9kZWwoJmdz Yi0+bHNfYmxvYik7Ci0KLWNsZWFudXA6Ci0JbHNfdWNvZGVfbWdyX2NsZWFudXAoJm1ncik7Ci0K LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc2VjYm9vdF9sc19mdW5jCi1nbTIwMF9s c19mdW5jID0gewotCVtOVktNX0ZBTENPTl9GRUNTXSA9ICYoc3RydWN0IHNlY2Jvb3RfbHNfc2lu Z2xlX2Z1bmMpIHsKLQkJLmxvYWQgPSBnbTIwMF9sc19sb2FkX2ZlY3MsCi0JCS5nZW5lcmF0ZV9i bF9kZXNjID0gZ20yMDBfc2VjYm9vdF9sc19ibF9kZXNjLAotCQkuYmxfZGVzY19zaXplID0gc2l6 ZW9mKHN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rlc2MpLAotCX0sCi0JW05WS01fRkFMQ09OX0dQQ0NT XSA9ICYoc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xlX2Z1bmMpIHsKLQkJLmxvYWQgPSBnbTIwMF9s c19sb2FkX2dwY2NzLAotCQkuZ2VuZXJhdGVfYmxfZGVzYyA9IGdtMjAwX3NlY2Jvb3RfbHNfYmxf ZGVzYywKLQkJLmJsX2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNj KSwKLQl9LAotfTsKLQotLyoKLSAqIEhpZ2gtc2VjdXJlIGJsb2IgY3JlYXRpb24KLSAqLwotCi0v KioKLSAqIGdtMjAwX3NlY2Jvb3RfaHNmX3BhdGNoX3NpZ25hdHVyZSgpIC0gcGF0Y2ggSFMgYmxv YiB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlCi0gKi8KLXN0YXRpYyB2b2lkCi1nbTIwMF9zZWNib290 X2hzZl9wYXRjaF9zaWduYXR1cmUoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiwgdm9pZCAqYWNy X2ltYWdlKQotewotCXN0cnVjdCBudmttX3NlY2Jvb3QgKnNiID0gJmdzYi0+YmFzZTsKLQlzdHJ1 Y3QgZndfYmluX2hlYWRlciAqaHNiaW5faGRyID0gYWNyX2ltYWdlOwotCXN0cnVjdCBoc2ZfZndf aGVhZGVyICpmd19oZHIgPSBhY3JfaW1hZ2UgKyBoc2Jpbl9oZHItPmhlYWRlcl9vZmZzZXQ7Ci0J dm9pZCAqaHNfZGF0YSA9IGFjcl9pbWFnZSArIGhzYmluX2hkci0+ZGF0YV9vZmZzZXQ7Ci0Jdm9p ZCAqc2lnOwotCXUzMiBzaWdfc2l6ZTsKLQotCS8qIEZhbGNvbiBpbiBkZWJ1ZyBvciBwcm9kdWN0 aW9uIG1vZGU/ICovCi0JaWYgKChudmttX3JkMzIoc2ItPnN1YmRldi5kZXZpY2UsIHNiLT5iYXNl ICsgMHhjMDgpID4+IDIwKSAmIDB4MSkgewotCQlzaWcgPSBhY3JfaW1hZ2UgKyBmd19oZHItPnNp Z19kYmdfb2Zmc2V0OwotCQlzaWdfc2l6ZSA9IGZ3X2hkci0+c2lnX2RiZ19zaXplOwotCX0gZWxz ZSB7Ci0JCXNpZyA9IGFjcl9pbWFnZSArIGZ3X2hkci0+c2lnX3Byb2Rfb2Zmc2V0OwotCQlzaWdf c2l6ZSA9IGZ3X2hkci0+c2lnX3Byb2Rfc2l6ZTsKLQl9Ci0KLQkvKiBQYXRjaCBzaWduYXR1cmUg Ki8KLQltZW1jcHkoaHNfZGF0YSArIGZ3X2hkci0+cGF0Y2hfbG9jLCBzaWcgKyBmd19oZHItPnBh dGNoX3NpZywgc2lnX3NpemUpOwotfQotCi0vKioKLSAqIHN0cnVjdCBoc2ZsY25fYWNyX2Rlc2Mg LSBkYXRhIHNlY3Rpb24gb2YgdGhlIEhTIGZpcm13YXJlCi0gKgotICogVGhpcyBoZWFkZXIgaXMg dG8gYmUgY29waWVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgRE1FTSBieSB0aGUgSFMgYm9vdGxvYWRl ci4KLSAqCi0gKiBAc2lnbmF0dXJlOgkJc2lnbmF0dXJlIG9mIEFDUiB1Y29kZQotICogQHdwcl9y ZWdpb25faWQ6CXJlZ2lvbiBJRCBob2xkaW5nIHRoZSBXUFIgaGVhZGVyIGFuZCBpdHMgZGV0YWls cwotICogQHdwcl9vZmZzZXQ6CQlvZmZzZXQgZnJvbSB0aGUgV1BSIHJlZ2lvbiBob2xkaW5nIHRo ZSB3cHIgaGVhZGVyCi0gKiBAcmVnaW9uczoJCXJlZ2lvbiBkZXNjcmlwdG9ycwotICogQG5vbndw cl91Y29kZV9ibG9iX3NpemU6CXNpemUgb2YgTFMgYmxvYgotICogQG5vbndwcl91Y29kZV9ibG9i X3N0YXJ0OglGQiBsb2NhdGlvbiBvZiBMUyBibG9iIGlzCi0gKi8KLXN0cnVjdCBoc2ZsY25fYWNy X2Rlc2MgewotCXVuaW9uIHsKLQkJdTggcmVzZXJ2ZWRfZG1lbVsweDIwMF07Ci0JCXUzMiBzaWdu YXR1cmVzWzRdOwotCX0gdWNvZGVfcmVzZXJ2ZWRfc3BhY2U7Ci0JdTMyIHdwcl9yZWdpb25faWQ7 Ci0JdTMyIHdwcl9vZmZzZXQ7Ci0JdTMyIG1tdV9tZW1fcmFuZ2U7Ci0jZGVmaW5lIEZMQ05fQUNS X01BWF9SRUdJT05TIDIKLQlzdHJ1Y3QgewotCQl1MzIgbm9fcmVnaW9uczsKLQkJc3RydWN0IHsK LQkJCXUzMiBzdGFydF9hZGRyOwotCQkJdTMyIGVuZF9hZGRyOwotCQkJdTMyIHJlZ2lvbl9pZDsK LQkJCXUzMiByZWFkX21hc2s7Ci0JCQl1MzIgd3JpdGVfbWFzazsKLQkJCXUzMiBjbGllbnRfbWFz azsKLQkJfSByZWdpb25fcHJvcHNbRkxDTl9BQ1JfTUFYX1JFR0lPTlNdOwotCX0gcmVnaW9uczsK LQl1MzIgdWNvZGVfYmxvYl9zaXplOwotCXU2NCB1Y29kZV9ibG9iX2Jhc2UgX19hbGlnbmVkKDgp OwotCXN0cnVjdCB7Ci0JCXUzMiB2cHJfZW5hYmxlZDsKLQkJdTMyIHZwcl9zdGFydDsKLQkJdTMy IHZwcl9lbmQ7Ci0JCXUzMiBoZGNwX3BvbGljaWVzOwotCX0gdnByX2Rlc2M7Ci19OwotCi1zdGF0 aWMgdm9pZAotZ20yMDBfc2VjYm9vdF9maXh1cF9oc19kZXNjKHN0cnVjdCBnbTIwMF9zZWNib290 ICpnc2IsCi0JCQkgICAgc3RydWN0IGhzZmxjbl9hY3JfZGVzYyAqZGVzYykKLXsKLQlkZXNjLT51 Y29kZV9ibG9iX2Jhc2UgPSBnc2ItPmxzX2Jsb2ItPmFkZHI7Ci0JZGVzYy0+dWNvZGVfYmxvYl9z aXplID0gZ3NiLT5sc19ibG9iLT5zaXplOwotCi0JZGVzYy0+d3ByX29mZnNldCA9IDA7Ci0KLQkv KiBXUFIgcmVnaW9uIGluZm9ybWF0aW9uIGlmIFdQUiBpcyBub3QgZml4ZWQgKi8KLQlpZiAoZ3Ni LT53cHJfc2l6ZSA9PSAwKSB7Ci0JCWRlc2MtPndwcl9yZWdpb25faWQgPSAxOwotCQlkZXNjLT5y ZWdpb25zLm5vX3JlZ2lvbnMgPSAxOwotCQlkZXNjLT5yZWdpb25zLnJlZ2lvbl9wcm9wc1swXS5y ZWdpb25faWQgPSAxOwotCQlkZXNjLT5yZWdpb25zLnJlZ2lvbl9wcm9wc1swXS5zdGFydF9hZGRy ID0KLQkJCQkJCQkgZ3NiLT5hY3Jfd3ByX2FkZHIgPj4gODsKLQkJZGVzYy0+cmVnaW9ucy5yZWdp b25fcHJvcHNbMF0uZW5kX2FkZHIgPQotCQkJCSAgIChnc2ItPmFjcl93cHJfYWRkciArIGdzYi0+ YWNyX3dwcl9zaXplKSA+PiA4OwotCX0KLX0KLQotLyoqCi0gKiBnbTIwMF9zZWNib290X3ByZXBh cmVfaHNfYmxvYiAtIGxvYWQgYW5kIHByZXBhcmUgYSBIUyBibG9iIGFuZCBCTCBkZXNjcmlwdG9y Ci0gKgotICogQGdzYiBzZWN1cmUgYm9vdCBpbnN0YW5jZSB0byBwcmVwYXJlIGZvcgotICogQGZ3 IG5hbWUgb2YgdGhlIEhTIGZpcm13YXJlIHRvIGxvYWQKLSAqIEBibG9iIHBvaW50ZXIgdG8gZ3B1 b2JqIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgdG8gcmVjZWl2ZSB0aGUgSFMgRlcgcGF5bG9hZAot ICogQGJsX2Rlc2MgcG9pbnRlciB0byB0aGUgQkwgZGVzY3JpcHRvciB0byB3cml0ZSBmb3IgdGhp cyBmaXJtd2FyZQotICogQHBhdGNoIHdoZXRoZXIgd2Ugc2hvdWxkIHBhdGNoIHRoZSBIUyBkZXNj cmlwdG9yIChvbmx5IGZvciBIUyBsb2FkZXJzKQotICovCi1zdGF0aWMgaW50Ci1nbTIwMF9zZWNi b290X3ByZXBhcmVfaHNfYmxvYihzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiLCBjb25zdCBjaGFy ICpmdywKLQkJCSAgICAgIHN0cnVjdCBudmttX2dwdW9iaiAqKmJsb2IsCi0JCQkgICAgICBzdHJ1 Y3QgaHNmX2xvYWRfaGVhZGVyICpsb2FkX2hlYWRlciwgYm9vbCBwYXRjaCkKLXsKLQlzdHJ1Y3Qg bnZrbV9zdWJkZXYgKnN1YmRldiA9ICZnc2ItPmJhc2Uuc3ViZGV2OwotCXZvaWQgKmFjcl9pbWFn ZTsKLQlzdHJ1Y3QgZndfYmluX2hlYWRlciAqaHNiaW5faGRyOwotCXN0cnVjdCBoc2ZfZndfaGVh ZGVyICpmd19oZHI7Ci0Jc3RydWN0IGhzZl9sb2FkX2hlYWRlciAqbG9hZF9oZHI7Ci0Jdm9pZCAq YWNyX2RhdGE7Ci0JaW50IHJldDsKLQotCWFjcl9pbWFnZSA9IGdtMjAwX3NlY2Jvb3RfbG9hZF9m aXJtd2FyZShzdWJkZXYsIGZ3LCAwKTsKLQlpZiAoSVNfRVJSKGFjcl9pbWFnZSkpCi0JCXJldHVy biBQVFJfRVJSKGFjcl9pbWFnZSk7Ci0KLQloc2Jpbl9oZHIgPSBhY3JfaW1hZ2U7Ci0JZndfaGRy ID0gYWNyX2ltYWdlICsgaHNiaW5faGRyLT5oZWFkZXJfb2Zmc2V0OwotCWxvYWRfaGRyID0gYWNy X2ltYWdlICsgZndfaGRyLT5oZHJfb2Zmc2V0OwotCWFjcl9kYXRhID0gYWNyX2ltYWdlICsgaHNi aW5faGRyLT5kYXRhX29mZnNldDsKLQotCS8qIFBhdGNoIHNpZ25hdHVyZSAqLwotCWdtMjAwX3Nl Y2Jvb3RfaHNmX3BhdGNoX3NpZ25hdHVyZShnc2IsIGFjcl9pbWFnZSk7Ci0KLQkvKiBQYXRjaCBk ZXNjcmlwdG9yIHdpdGggV1BSIGluZm9ybWF0aW9uPyAqLwotCWlmIChwYXRjaCkgewotCQlzdHJ1 Y3QgaHNmbGNuX2Fjcl9kZXNjICpkZXNjOwotCi0JCWRlc2MgPSBhY3JfZGF0YSArIGxvYWRfaGRy LT5kYXRhX2RtYV9iYXNlOwotCQlnbTIwMF9zZWNib290X2ZpeHVwX2hzX2Rlc2MoZ3NiLCBkZXNj KTsKLQl9Ci0KLQlpZiAobG9hZF9oZHItPm51bV9hcHBzID4gR00yMDBfQUNSX01BWF9BUFBTKSB7 Ci0JCW52a21fZXJyb3Ioc3ViZGV2LCAibW9yZSBhcHBzICglZCkgdGhhbiBzdXBwb3J0ZWQgKCVk KSEiLAotCQkJICAgbG9hZF9oZHItPm51bV9hcHBzLCBHTTIwMF9BQ1JfTUFYX0FQUFMpOwotCQly ZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCW1lbWNweShsb2FkX2hlYWRlciwg bG9hZF9oZHIsIHNpemVvZigqbG9hZF9oZWFkZXIpICsKLQkJCSAgICAgICAoc2l6ZW9mKGxvYWRf aGRyLT5hcHBbMF0pICogbG9hZF9oZHItPm51bV9hcHBzKSk7Ci0KLQkvKiBDcmVhdGUgQUNSIGJs b2IgYW5kIGNvcHkgSFMgZGF0YSB0byBpdCAqLwotCXJldCA9IG52a21fZ3B1b2JqX25ldyhzdWJk ZXYtPmRldmljZSwgQUxJR04oaHNiaW5faGRyLT5kYXRhX3NpemUsIDI1NiksCi0JCQkgICAgICAw eDEwMDAsIGZhbHNlLCBOVUxMLCBibG9iKTsKLQlpZiAocmV0KQotCQlnb3RvIGNsZWFudXA7Ci0K LQludmttX2ttYXAoKmJsb2IpOwotCW52a21fZ3B1b2JqX21lbWNweV90bygqYmxvYiwgMCwgYWNy X2RhdGEsIGhzYmluX2hkci0+ZGF0YV9zaXplKTsKLQludmttX2RvbmUoKmJsb2IpOwotCi1jbGVh bnVwOgotCWtmcmVlKGFjcl9pbWFnZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogSGln aC1zZWN1cmUgYm9vdGxvYWRlciBibG9iIGNyZWF0aW9uCi0gKi8KLQotc3RhdGljIGludAotZ20y MDBfc2VjYm9vdF9wcmVwYXJlX2hzYmxfYmxvYihzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiKQot ewotCXN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2ID0gJmdzYi0+YmFzZS5zdWJkZXY7Ci0KLQln c2ItPmhzYmxfYmxvYiA9IGdtMjAwX3NlY2Jvb3RfbG9hZF9maXJtd2FyZShzdWJkZXYsICJhY3Iv YmwiLCAwKTsKLQlpZiAoSVNfRVJSKGdzYi0+aHNibF9ibG9iKSkgewotCQlpbnQgcmV0ID0gUFRS X0VSUihnc2ItPmhzYmxfYmxvYik7Ci0KLQkJZ3NiLT5oc2JsX2Jsb2IgPSBOVUxMOwotCQlyZXR1 cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdtMjB4X3NlY2Jvb3RfcHJl cGFyZV9ibG9icyAtIGxvYWQgYmxvYnMgY29tbW9uIHRvIGFsbCBHTTIwWCBHUFVzLgotICoKLSAq IFRoaXMgaW5jbHVkZXMgdGhlIExTIGJsb2IsIEhTIHVjb2RlIGxvYWRpbmcgYmxvYiwgYW5kIEhT IGJvb3Rsb2FkZXIuCi0gKgotICogVGhlIEhTIHVjb2RlIHVubG9hZCBibG9iIGlzIG9ubHkgdXNl ZCBvbiBkR1BVLgotICovCi1pbnQKLWdtMjB4X3NlY2Jvb3RfcHJlcGFyZV9ibG9icyhzdHJ1Y3Qg Z20yMDBfc2VjYm9vdCAqZ3NiKQotewotCWludCByZXQ7Ci0KLQkvKiBMb2FkIGFuZCBwcmVwYXJl IHRoZSBtYW5hZ2VkIGZhbGNvbidzIGZpcm13YXJlcyAqLwotCWlmICghZ3NiLT5sc19ibG9iKSB7 Ci0JCXJldCA9IGdtMjAwX3NlY2Jvb3RfcHJlcGFyZV9sc19ibG9iKGdzYik7Ci0JCWlmIChyZXQp Ci0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIExvYWQgdGhlIEhTIGZpcm13YXJlIHRoYXQgd2ls bCBsb2FkIHRoZSBMUyBmaXJtd2FyZXMgKi8KLQlpZiAoIWdzYi0+YWNyX2xvYWRfYmxvYikgewot CQlyZXQgPSBnbTIwMF9zZWNib290X3ByZXBhcmVfaHNfYmxvYihnc2IsICJhY3IvdWNvZGVfbG9h ZCIsCi0JCQkJCQkmZ3NiLT5hY3JfbG9hZF9ibG9iLAotCQkJCQkJJmdzYi0+bG9hZF9ibF9oZWFk ZXIsIHRydWUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBMb2FkIHRo ZSBIUyBmaXJtd2FyZSBib290bG9hZGVyICovCi0JaWYgKCFnc2ItPmhzYmxfYmxvYikgewotCQly ZXQgPSBnbTIwMF9zZWNib290X3ByZXBhcmVfaHNibF9ibG9iKGdzYik7Ci0JCWlmIChyZXQpCi0J CQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1nbTIwMF9z ZWNib290X3ByZXBhcmVfYmxvYnMoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsKLQlpbnQg cmV0OwotCi0JcmV0ID0gZ20yMHhfc2VjYm9vdF9wcmVwYXJlX2Jsb2JzKGdzYik7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIGRHUFUgb25seTogbG9hZCB0aGUgSFMgZmlybXdhcmUg dGhhdCB1bnByb3RlY3RzIHRoZSBXUFIgcmVnaW9uICovCi0JaWYgKCFnc2ItPmFjcl91bmxvYWRf YmxvYikgewotCQlyZXQgPSBnbTIwMF9zZWNib290X3ByZXBhcmVfaHNfYmxvYihnc2IsICJhY3Iv dWNvZGVfdW5sb2FkIiwKLQkJCQkJICAgICAgICZnc2ItPmFjcl91bmxvYWRfYmxvYiwKLQkJCQkJ ICAgICAgICZnc2ItPnVubG9hZF9ibF9oZWFkZXIsIGZhbHNlKTsKLQkJaWYgKHJldCkKLQkJCXJl dHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWdtMjAwX3NlY2Jv b3RfYmxvYnNfcmVhZHkoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYikKLXsKLQlzdHJ1Y3QgbnZr bV9zdWJkZXYgKnN1YmRldiA9ICZnc2ItPmJhc2Uuc3ViZGV2OwotCWludCByZXQ7Ci0KLQkvKiBm aXJtd2FyZSBhbHJlYWR5IGxvYWRlZCwgbm90aGluZyB0byBkby4uLiAqLwotCWlmIChnc2ItPmZp cm13YXJlX29rKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGdzYi0+ZnVuYy0+cHJlcGFyZV9ibG9i cyhnc2IpOwotCWlmIChyZXQpIHsKLQkJbnZrbV9lcnJvcihzdWJkZXYsICJmYWlsZWQgdG8gbG9h ZCBzZWN1cmUgZmlybXdhcmVcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWdzYi0+ZmlybXdh cmVfb2sgPSB0cnVlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFNlY3VyZSBCb290IEV4 ZWN1dGlvbgotICovCi0KLS8qKgotICogZ20yMDBfc2VjYm9vdF9sb2FkX2hzX2JsKCkgLSBsb2Fk IEhTIGJvb3Rsb2FkZXIgaW50byBETUVNIGFuZCBJTUVNCi0gKi8KLXN0YXRpYyB2b2lkCi1nbTIw MF9zZWNib290X2xvYWRfaHNfYmwoc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiwgdm9pZCAqZGF0 YSwgdTMyIGRhdGFfc2l6ZSkKLXsKLQlzdHJ1Y3QgbnZrbV9kZXZpY2UgKmRldmljZSA9IGdzYi0+ YmFzZS5zdWJkZXYuZGV2aWNlOwotCXN0cnVjdCBmd19iaW5faGVhZGVyICpoZHIgPSBnc2ItPmhz YmxfYmxvYjsKLQlzdHJ1Y3QgZndfYmxfZGVzYyAqaHNibF9kZXNjID0gZ3NiLT5oc2JsX2Jsb2Ig KyBoZHItPmhlYWRlcl9vZmZzZXQ7Ci0Jdm9pZCAqYmxvYl9kYXRhID0gZ3NiLT5oc2JsX2Jsb2Ig KyBoZHItPmRhdGFfb2Zmc2V0OwotCXZvaWQgKmhzYmxfY29kZSA9IGJsb2JfZGF0YSArIGhzYmxf ZGVzYy0+Y29kZV9vZmY7Ci0Jdm9pZCAqaHNibF9kYXRhID0gYmxvYl9kYXRhICsgaHNibF9kZXNj LT5kYXRhX29mZjsKLQl1MzIgY29kZV9zaXplID0gQUxJR04oaHNibF9kZXNjLT5jb2RlX3NpemUs IDI1Nik7Ci0JY29uc3QgdTMyIGJhc2UgPSBnc2ItPmJhc2UuYmFzZTsKLQl1MzIgY29kZV9zdGFy dDsKLQotCS8qCi0JICogQ29weSBIUyBib290bG9hZGVyIGRhdGEKLQkgKi8KLQludmttX2ZhbGNv bl9sb2FkX2RtZW0oZGV2aWNlLCBnc2ItPmJhc2UuYmFzZSwgaHNibF9kYXRhLCAweDAwMDAwLAot CQkJICAgICAgaHNibF9kZXNjLT5kYXRhX3NpemUpOwotCi0JLyoKLQkgKiBDb3B5IEhTIGJvb3Rs b2FkZXIgaW50ZXJmYWNlIHN0cnVjdHVyZSB3aGVyZSB0aGUgSFMgZGVzY3JpcHRvcgotCSAqIGV4 cGVjdHMgaXQgdG8gYmUKLQkgKi8KLQludmttX2ZhbGNvbl9sb2FkX2RtZW0oZGV2aWNlLCBnc2It PmJhc2UuYmFzZSwgZGF0YSwKLQkJCSAgICAgIGhzYmxfZGVzYy0+ZG1lbV9sb2FkX29mZiwgZGF0 YV9zaXplKTsKLQotCS8qIENvcHkgSFMgYm9vdGxvYWRlciBjb2RlIHRvIGVuZCBvZiBJTUVNICov Ci0JY29kZV9zdGFydCA9IChudmttX3JkMzIoZGV2aWNlLCBiYXNlICsgMHgxMDgpICYgMHgxZmYp IDw8IDg7Ci0JY29kZV9zdGFydCAtPSBjb2RlX3NpemU7Ci0JbnZrbV9mYWxjb25fbG9hZF9pbWVt KGRldmljZSwgZ3NiLT5iYXNlLmJhc2UsIGhzYmxfY29kZSwgY29kZV9zdGFydCwKLQkJCSAgICAg IGNvZGVfc2l6ZSwgaHNibF9kZXNjLT5zdGFydF90YWcpOwotfQotCi0vKioKICAqIGdtMjAwX3Nl Y2Jvb3Rfc2V0dXBfZmFsY29uKCkgLSBzZXQgdXAgdGhlIHNlY3VyZSBmYWxjb24gZm9yIHNlY3Vy ZSBib290CiAgKi8KIHN0YXRpYyBpbnQKLWdtMjAwX3NlY2Jvb3Rfc2V0dXBfZmFsY29uKHN0cnVj dCBnbTIwMF9zZWNib290ICpnc2IpCitnbTIwMF9zZWNib290X3NldHVwX2ZhbGNvbihzdHJ1Y3Qg Z20yMDBfc2VjYm9vdCAqZ3NiLCBzdHJ1Y3QgbnZrbV9hY3IgKmFjcikKIHsKIAlzdHJ1Y3QgbnZr bV9kZXZpY2UgKmRldmljZSA9IGdzYi0+YmFzZS5zdWJkZXYuZGV2aWNlOwotCXN0cnVjdCBmd19i aW5faGVhZGVyICpoZHIgPSBnc2ItPmhzYmxfYmxvYjsKLQlzdHJ1Y3QgZndfYmxfZGVzYyAqaHNi bF9kZXNjID0gZ3NiLT5oc2JsX2Jsb2IgKyBoZHItPmhlYWRlcl9vZmZzZXQ7Ci0JLyogdmlydHVh bCBzdGFydCBhZGRyZXNzIGZvciBib290IHZlY3RvciAqLwotCXUzMiB2aXJ0X2FkZHIgPSBoc2Js X2Rlc2MtPnN0YXJ0X3RhZyA8PCA4OwogCWNvbnN0IHUzMiBiYXNlID0gZ3NiLT5iYXNlLmJhc2U7 CiAJY29uc3QgdTMyIHJlZ19iYXNlID0gYmFzZSArIDB4ZTAwOwogCXUzMiBpbnN0X2xvYzsKQEAg LTEwNzUsMTM1ICs2NSw1MiBAQCBnbTIwMF9zZWNib290X3NldHVwX2ZhbGNvbihzdHJ1Y3QgZ20y MDBfc2VjYm9vdCAqZ3NiKQogCQkgIChpbnN0X2xvYyA8PCAyOCkgfCAoMSA8PCAzMCkpOwogCiAJ LyogU2V0IGJvb3QgdmVjdG9yIHRvIGNvZGUncyBzdGFydGluZyB2aXJ0dWFsIGFkZHJlc3MgKi8K LQludmttX3dyMzIoZGV2aWNlLCBiYXNlICsgMHgxMDQsIHZpcnRfYWRkcik7CisJbnZrbV93cjMy KGRldmljZSwgYmFzZSArIDB4MTA0LCBhY3ItPnN0YXJ0X2FkZHJlc3MpOworCisJLyogQ2xlYXIg bWFpbGJveCByZWdpc3RlciB1c2VkIHRvIHJlZmxlY3QgY2FwYWJpbGl0aWVzICovCisJbnZrbV93 cjMyKGRldmljZSwgYmFzZSArIDB4MDQ0LCAweDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgot ICogZ20yMDBfc2VjYm9vdF9ydW5faHNfYmxvYigpIC0gcnVuIHRoZSBnaXZlbiBoaWdoLXNlY3Vy ZSBibG9iCisgKiBnbTIwMF9zZWNib290X3J1bl9ibG9iKCkgLSBydW4gdGhlIGdpdmVuIGhpZ2gt c2VjdXJlIGJsb2IKKyAqCiAgKi8KLXN0YXRpYyBpbnQKLWdtMjAwX3NlY2Jvb3RfcnVuX2hzX2Js b2Ioc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiwgc3RydWN0IG52a21fZ3B1b2JqICpibG9iKQor aW50CitnbTIwMF9zZWNib290X3J1bl9ibG9iKHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLCBzdHJ1 Y3QgbnZrbV9ncHVvYmogKmJsb2IpCiB7CisJc3RydWN0IGdtMjAwX3NlY2Jvb3QgKmdzYiA9IGdt MjAwX3NlY2Jvb3Qoc2IpOwogCXN0cnVjdCBudmttX3ZtYSB2bWE7Ci0JY29uc3QgdTMyIGJsX2Rl c2Nfc2l6ZSA9IGdzYi0+ZnVuYy0+YmxfZGVzY19zaXplOwotCWNvbnN0IHN0cnVjdCBoc2ZfbG9h ZF9oZWFkZXIgKmxvYWRfaGRyOwotCXU4IGJsX2Rlc2NbYmxfZGVzY19zaXplXTsKIAlpbnQgcmV0 OwogCi0JLyogRmluZCB0aGUgYm9vdGxvYWRlciBkZXNjcmlwdG9yIGZvciBvdXIgYmxvYiBhbmQg Y29weSBpdCAqLwotCWlmIChibG9iID09IGdzYi0+YWNyX2xvYWRfYmxvYikgewotCQlsb2FkX2hk ciA9ICZnc2ItPmxvYWRfYmxfaGVhZGVyOwotCi0JfSBlbHNlIGlmIChibG9iID09IGdzYi0+YWNy X3VubG9hZF9ibG9iKSB7Ci0JCWxvYWRfaGRyID0gJmdzYi0+dW5sb2FkX2JsX2hlYWRlcjsKLQl9 IGVsc2UgewotCQludmttX2Vycm9yKCZnc2ItPmJhc2Uuc3ViZGV2LCAiaW52YWxpZCBzZWN1cmUg Ym9vdCBibG9iIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIE1hcCB0aGUgSFMg ZmlybXdhcmUgc28gdGhlIEhTIGJvb3Rsb2FkZXIgY2FuIHNlZSBpdCAqLwogCXJldCA9IG52a21f Z3B1b2JqX21hcChibG9iLCBnc2ItPnZtLCBOVl9NRU1fQUNDRVNTX1JXLCAmdm1hKTsKIAlpZiAo cmV0KQogCQlyZXR1cm4gcmV0OwogCi0JLyogR2VuZXJhdGUgdGhlIEJMIGhlYWRlciAqLwotCWdz Yi0+ZnVuYy0+Z2VuZXJhdGVfYmxfZGVzYyhsb2FkX2hkciwgYmxfZGVzYywgdm1hLm9mZnNldCk7 Ci0KIAkvKiBSZXNldCB0aGUgZmFsY29uIGFuZCBtYWtlIGl0IHJlYWR5IHRvIHJ1biB0aGUgSFMg Ym9vdGxvYWRlciAqLwotCXJldCA9IGdtMjAwX3NlY2Jvb3Rfc2V0dXBfZmFsY29uKGdzYik7CisJ cmV0ID0gZ20yMDBfc2VjYm9vdF9zZXR1cF9mYWxjb24oZ3NiLCBzYi0+YWNyKTsKIAlpZiAocmV0 KQotCQlnb3RvIGVuZDsKKwkJZ290byBkb25lOwogCiAJLyogTG9hZCB0aGUgSFMgYm9vdGxvYWRl ciBpbnRvIHRoZSBmYWxjb24ncyBJTUVNL0RNRU0gKi8KLQlnbTIwMF9zZWNib290X2xvYWRfaHNf YmwoZ3NiLCAmYmxfZGVzYywgYmxfZGVzY19zaXplKTsKKwlyZXQgPSBzYi0+YWNyLT5mdW5jLT5s b2FkKHNiLT5hY3IsICZnc2ItPmJhc2UsIGJsb2IsIHZtYS5vZmZzZXQpOworCWlmIChyZXQpCisJ CWdvdG8gZG9uZTsKIAogCS8qIFN0YXJ0IHRoZSBIUyBib290bG9hZGVyICovCi0JcmV0ID0gbnZr bV9zZWNib290X2ZhbGNvbl9ydW4oJmdzYi0+YmFzZSk7CisJcmV0ID0gbnZrbV9zZWNib290X2Zh bGNvbl9ydW4oc2IpOwogCWlmIChyZXQpCi0JCWdvdG8gZW5kOworCQlnb3RvIGRvbmU7CiAKLWVu ZDoKK2RvbmU6CiAJLyogV2UgZG9uJ3QgbmVlZCB0aGUgQUNSIGZpcm13YXJlIGFueW1vcmUgKi8K IAludmttX2dwdW9ial91bm1hcCgmdm1hKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBn bTIwMF9zZWNib290X3Jlc2V0KCkgLSBleGVjdXRlIHNlY3VyZSBib290IGZyb20gdGhlIHByZXBh cmVkIHN0YXRlCi0gKgotICogTG9hZCB0aGUgSFMgYm9vdGxvYWRlciBhbmQgYXNrIHRoZSBmYWxj b24gdG8gcnVuIGl0LiBUaGlzIHdpbGwgaW4gdHVybgotICogbG9hZCB0aGUgSFMgZmlybXdhcmUg YW5kIHJ1biBpdCwgc28gb25jZSB0aGUgZmFsY29uIHN0b3BzIGFsbCB0aGUgbWFuYWdlZAotICog ZmFsY29ucyBzaG91bGQgaGF2ZSB0aGVpciBMUyBmaXJtd2FyZSBsb2FkZWQgYW5kIGJlIHJlYWR5 IHRvIHJ1bi4KLSAqLwotaW50Ci1nbTIwMF9zZWNib290X3Jlc2V0KHN0cnVjdCBudmttX3NlY2Jv b3QgKnNiLCBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbikKLXsKLQlzdHJ1Y3QgZ20yMDBfc2Vj Ym9vdCAqZ3NiID0gZ20yMDBfc2VjYm9vdChzYik7Ci0JaW50IHJldDsKLQotCS8qIE1ha2Ugc3Vy ZSBhbGwgYmxvYnMgYXJlIHJlYWR5ICovCi0JcmV0ID0gZ20yMDBfc2VjYm9vdF9ibG9ic19yZWFk eShnc2IpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIER1bW15IEdNMjAw IGltcGxlbWVudGF0aW9uOiBwZXJmb3JtIHNlY3VyZSBib290IGVhY2ggdGltZSB3ZSBhcmUKLQkg KiBjYWxsZWQgb24gRkVDUy4gU2luY2Ugb25seSBGRUNTIGFuZCBHUENDUyBhcmUgbWFuYWdlZCBh bmQgc3RhcnRlZAotCSAqIHRvZ2V0aGVyLCB0aGlzIG91Z2h0IHRvIGJlIHNhZmUuCi0JICoKLQkg KiBPbmNlIHdlIGhhdmUgcHJvcGVyIFBNVSBmaXJtd2FyZSBhbmQgc3VwcG9ydCwgdGhpcyB3aWxs IGJlIGNoYW5nZWQKLQkgKiB0byBhIHByb3BlciBjYWxsIHRvIHRoZSBQTVUgbWV0aG9kLgotCSAq LwotCWlmIChmYWxjb24gIT0gTlZLTV9GQUxDT05fRkVDUykKLQkJZ290byBlbmQ7Ci0KLQkvKiBJ ZiBXUFIgaXMgc2V0IGFuZCB3ZSBoYXZlIGFuIHVubG9hZCBibG9iLCBydW4gaXQgdG8gdW5sb2Nr IFdQUiAqLwotCWlmIChnc2ItPmFjcl91bmxvYWRfYmxvYiAmJgotCSAgICBnc2ItPmZhbGNvbl9z dGF0ZVtOVktNX0ZBTENPTl9GRUNTXSAhPSBOT05fU0VDVVJFKSB7Ci0JCXJldCA9IGdtMjAwX3Nl Y2Jvb3RfcnVuX2hzX2Jsb2IoZ3NiLCBnc2ItPmFjcl91bmxvYWRfYmxvYik7Ci0JCWlmIChyZXQp Ci0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFJlbG9hZCBhbGwgbWFuYWdlZCBmYWxjb25zICov Ci0JcmV0ID0gZ20yMDBfc2VjYm9vdF9ydW5faHNfYmxvYihnc2IsIGdzYi0+YWNyX2xvYWRfYmxv Yik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotZW5kOgotCWdzYi0+ZmFsY29uX3N0YXRl W2ZhbGNvbl0gPSBSRVNFVDsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1nbTIwMF9zZWNib290X3N0 YXJ0KHN0cnVjdCBudmttX3NlY2Jvb3QgKnNiLCBlbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbikK LXsKLQlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3NiID0gZ20yMDBfc2VjYm9vdChzYik7Ci0JaW50 IGJhc2U7Ci0KLQlzd2l0Y2ggKGZhbGNvbikgewotCWNhc2UgTlZLTV9GQUxDT05fRkVDUzoKLQkJ YmFzZSA9IDB4NDA5MDAwOwotCQlicmVhazsKLQljYXNlIE5WS01fRkFMQ09OX0dQQ0NTOgotCQli YXNlID0gMHg0MWEwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW52a21fZXJyb3IoJnNiLT5z dWJkZXYsICJjYW5ub3Qgc3RhcnQgdW5oYW5kbGVkIGZhbGNvbiFcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQludmttX3dyMzIoc2ItPnN1YmRldi5kZXZpY2UsIGJhc2UgKyAweDEzMCwg MHgwMDAwMDAwMik7Ci0JZ3NiLT5mYWxjb25fc3RhdGVbZmFsY29uXSA9IFJVTk5JTkc7Ci0KLQly ZXR1cm4gMDsKLX0KLQotCi0KIGludAogZ20yMDBfc2VjYm9vdF9vbmVpbml0KHN0cnVjdCBudmtt X3NlY2Jvb3QgKnNiKQogewpAQCAtMTI0MCwyMyArMTQ3LDIyIEBAIGdtMjAwX3NlY2Jvb3Rfb25l aW5pdChzdHJ1Y3QgbnZrbV9zZWNib290ICpzYikKIAludmttX3dvMzIoZ3NiLT5pbnN0LCAweDIw YywgdXBwZXJfMzJfYml0cyh2bV9hcmVhX2xlbiAtIDEpKTsKIAludmttX2RvbmUoZ3NiLT5pbnN0 KTsKIAorCWlmIChzYi0+YWNyLT5mdW5jLT5vbmVpbml0KSB7CisJCXJldCA9IHNiLT5hY3ItPmZ1 bmMtPm9uZWluaXQoc2ItPmFjciwgc2IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9 CisKIAlyZXR1cm4gMDsKIH0KIAogaW50CiBnbTIwMF9zZWNib290X2Zpbmkoc3RydWN0IG52a21f c2VjYm9vdCAqc2IsIGJvb2wgc3VzcGVuZCkKIHsKLQlzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqZ3Ni ID0gZ20yMDBfc2VjYm9vdChzYik7CiAJaW50IHJldCA9IDA7Ci0JaW50IGk7CiAKLQkvKiBSdW4g dGhlIHVubG9hZCBibG9iIHRvIHVucHJvdGVjdCB0aGUgV1BSIHJlZ2lvbiAqLwotCWlmIChnc2It PmFjcl91bmxvYWRfYmxvYiAmJgotCSAgICBnc2ItPmZhbGNvbl9zdGF0ZVtOVktNX0ZBTENPTl9G RUNTXSAhPSBOT05fU0VDVVJFKQotCQlyZXQgPSBnbTIwMF9zZWNib290X3J1bl9oc19ibG9iKGdz YiwgZ3NiLT5hY3JfdW5sb2FkX2Jsb2IpOwotCi0JZm9yIChpID0gMDsgaSA8IE5WS01fRkFMQ09O X0VORDsgaSsrKQotCQlnc2ItPmZhbGNvbl9zdGF0ZVtpXSA9IE5PTl9TRUNVUkU7CisJaWYgKHNi LT5hY3ItPmZ1bmMtPmZpbmkpCisJCXJldCA9IHNiLT5hY3ItPmZ1bmMtPmZpbmkoc2ItPmFjciwg c2IsIHN1c3BlbmQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNjYsMTEgKzE3Miw3IEBAIGdt MjAwX3NlY2Jvb3RfZHRvcihzdHJ1Y3QgbnZrbV9zZWNib290ICpzYikKIHsKIAlzdHJ1Y3QgZ20y MDBfc2VjYm9vdCAqZ3NiID0gZ20yMDBfc2VjYm9vdChzYik7CiAKLQludmttX2dwdW9ial9kZWwo JmdzYi0+YWNyX3VubG9hZF9ibG9iKTsKLQotCWtmcmVlKGdzYi0+aHNibF9ibG9iKTsKLQludmtt X2dwdW9ial9kZWwoJmdzYi0+YWNyX2xvYWRfYmxvYik7Ci0JbnZrbV9ncHVvYmpfZGVsKCZnc2It PmxzX2Jsb2IpOworCXNiLT5hY3ItPmZ1bmMtPmR0b3Ioc2ItPmFjcik7CiAKIAludmttX3ZtX3Jl ZihOVUxMLCAmZ3NiLT52bSwgZ3NiLT5wZ2QpOwogCW52a21fZ3B1b2JqX2RlbCgmZ3NiLT5wZ2Qp OwpAQCAtMTI4NSwzNyArMTg3LDcgQEAgZ20yMDBfc2VjYm9vdCA9IHsKIAkuZHRvciA9IGdtMjAw X3NlY2Jvb3RfZHRvciwKIAkub25laW5pdCA9IGdtMjAwX3NlY2Jvb3Rfb25laW5pdCwKIAkuZmlu aSA9IGdtMjAwX3NlY2Jvb3RfZmluaSwKLQkucmVzZXQgPSBnbTIwMF9zZWNib290X3Jlc2V0LAot CS5zdGFydCA9IGdtMjAwX3NlY2Jvb3Rfc3RhcnQsCi0JLm1hbmFnZWRfZmFsY29ucyA9IEJJVChO VktNX0ZBTENPTl9GRUNTKSB8Ci0JCQkgICBCSVQoTlZLTV9GQUxDT05fR1BDQ1MpLAotCS5ib290 X2ZhbGNvbiA9IE5WS01fRkFMQ09OX1BNVSwKLX07Ci0KLXN0YXRpYyB2b2lkCi1nbTIwMF9zZWNi b290X2dlbmVyYXRlX2JsX2Rlc2MoY29uc3Qgc3RydWN0IGhzZl9sb2FkX2hlYWRlciAqaGRyLAot CQkJICAgICAgIHZvaWQgKl9ibF9kZXNjLCB1NjQgb2Zmc2V0KQotewotCXN0cnVjdCBnbTIwMF9m bGNuX2JsX2Rlc2MgKmJsX2Rlc2MgPSBfYmxfZGVzYzsKLQotCW1lbXNldChibF9kZXNjLCAwLCBz aXplb2YoKmJsX2Rlc2MpKTsKLQlibF9kZXNjLT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9WSVJU OwotCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9vZmYgPSBoZHItPm5vbl9zZWNfY29kZV9vZmY7Ci0J YmxfZGVzYy0+bm9uX3NlY19jb2RlX3NpemUgPSBoZHItPm5vbl9zZWNfY29kZV9zaXplOwotCWJs X2Rlc2MtPnNlY19jb2RlX29mZiA9IGhkci0+YXBwWzBdLnNlY19jb2RlX29mZjsKLQlibF9kZXNj LT5zZWNfY29kZV9zaXplID0gaGRyLT5hcHBbMF0uc2VjX2NvZGVfc2l6ZTsKLQlibF9kZXNjLT5j b2RlX2VudHJ5X3BvaW50ID0gMDsKLQotCWJsX2Rlc2MtPmNvZGVfZG1hX2Jhc2UgPSB1NjRfdG9f ZmxjbjY0KG9mZnNldCk7Ci0JYmxfZGVzYy0+ZGF0YV9kbWFfYmFzZSA9IHU2NF90b19mbGNuNjQo b2Zmc2V0ICsgaGRyLT5kYXRhX2RtYV9iYXNlKTsKLQlibF9kZXNjLT5kYXRhX3NpemUgPSBoZHIt PmRhdGFfc2l6ZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBnbTIwMF9zZWNib290X2Z1bmMK LWdtMjAwX3NlY2Jvb3RfZnVuYyA9IHsKLQkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBn bTIwMF9mbGNuX2JsX2Rlc2MpLAotCS5nZW5lcmF0ZV9ibF9kZXNjID0gZ20yMDBfc2VjYm9vdF9n ZW5lcmF0ZV9ibF9kZXNjLAotCS5wcmVwYXJlX2Jsb2JzID0gZ20yMDBfc2VjYm9vdF9wcmVwYXJl X2Jsb2JzLAorCS5ydW5fYmxvYiA9IGdtMjAwX3NlY2Jvb3RfcnVuX2Jsb2IsCiB9OwogCiBpbnQK QEAgLTEzMjQsNiArMTk2LDExIEBAIGdtMjAwX3NlY2Jvb3RfbmV3KHN0cnVjdCBudmttX2Rldmlj ZSAqZGV2aWNlLCBpbnQgaW5kZXgsCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZ20yMDBfc2VjYm9v dCAqZ3NiOworCXN0cnVjdCBudmttX2FjciAqYWNyOworCisJYWNyID0gYWNyX3IzNjFfbmV3KCk7 CisJaWYgKElTX0VSUihhY3IpKQorCQlyZXR1cm4gUFRSX0VSUihhY3IpOwogCiAJZ3NiID0ga3ph bGxvYyhzaXplb2YoKmdzYiksIEdGUF9LRVJORUwpOwogCWlmICghZ3NiKSB7CkBAIC0xMzMyLDE2 ICsyMDksMTYgQEAgZ20yMDBfc2VjYm9vdF9uZXcoc3RydWN0IG52a21fZGV2aWNlICpkZXZpY2Us IGludCBpbmRleCwKIAl9CiAJKnBzYiA9ICZnc2ItPmJhc2U7CiAKLQlyZXQgPSBudmttX3NlY2Jv b3RfY3RvcigmZ20yMDBfc2VjYm9vdCwgZGV2aWNlLCBpbmRleCwgJmdzYi0+YmFzZSk7CisJcmV0 ID0gbnZrbV9zZWNib290X2N0b3IoJmdtMjAwX3NlY2Jvb3QsIGFjciwgZGV2aWNlLCBpbmRleCwK KwkJCQlCSVQoTlZLTV9GQUxDT05fRkVDUykgfCBCSVQoTlZLTV9GQUxDT05fR1BDQ1MpLAorCQkJ CSZnc2ItPmJhc2UpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlnc2ItPmZ1bmMgPSAm Z20yMDBfc2VjYm9vdF9mdW5jOwotCWdzYi0+bHNfZnVuYyA9ICZnbTIwMF9sc19mdW5jOwotCiAJ cmV0dXJuIDA7CiB9CiAKKwogTU9EVUxFX0ZJUk1XQVJFKCJudmlkaWEvZ20yMDAvYWNyL2JsLmJp biIpOwogTU9EVUxFX0ZJUk1XQVJFKCJudmlkaWEvZ20yMDAvYWNyL3Vjb2RlX2xvYWQuYmluIik7 CiBNT0RVTEVfRklSTVdBUkUoIm52aWRpYS9nbTIwMC9hY3IvdWNvZGVfdW5sb2FkLmJpbiIpOwpk aWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5oIGIvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNDVhZGYxYTNiYzIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19OVktNX1NFQ0JPT1RfR00yMDBf SF9fCisjZGVmaW5lIF9fTlZLTV9TRUNCT09UX0dNMjAwX0hfXworCisjaW5jbHVkZSAicHJpdi5o IgorCitzdHJ1Y3QgZ20yMDBfc2VjYm9vdCB7CisJc3RydWN0IG52a21fc2VjYm9vdCBiYXNlOwor CisJLyogSW5zdGFuY2UgYmxvY2sgJiBhZGRyZXNzIHNwYWNlIHVzZWQgZm9yIEhTIEZXIGV4ZWN1 dGlvbiAqLworCXN0cnVjdCBudmttX2dwdW9iaiAqaW5zdDsKKwlzdHJ1Y3QgbnZrbV9ncHVvYmog KnBnZDsKKwlzdHJ1Y3QgbnZrbV92bSAqdm07Cit9OworI2RlZmluZSBnbTIwMF9zZWNib290KHNi KSBjb250YWluZXJfb2Yoc2IsIHN0cnVjdCBnbTIwMF9zZWNib290LCBiYXNlKQorCitpbnQgZ20y MDBfc2VjYm9vdF9vbmVpbml0KHN0cnVjdCBudmttX3NlY2Jvb3QgKik7CitpbnQgZ20yMDBfc2Vj Ym9vdF9maW5pKHN0cnVjdCBudmttX3NlY2Jvb3QgKiwgYm9vbCk7Cit2b2lkICpnbTIwMF9zZWNi b290X2R0b3Ioc3RydWN0IG52a21fc2VjYm9vdCAqKTsKK2ludCBnbTIwMF9zZWNib290X3J1bl9i bG9iKHN0cnVjdCBudmttX3NlY2Jvb3QgKiwgc3RydWN0IG52a21fZ3B1b2JqICopOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMGIuYyBi L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMGIuYwppbmRleCA0MDNiNGQ2OTA5 MDIuLmEwY2JiYTc4NjJhNSAxMDA2NDQKLS0tIGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9nbTIwYi5jCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvZ20yMGIu YwpAQCAtMjAsOTggKzIwLDggQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwog Ci0jaW5jbHVkZSAicHJpdi5oIgotCi0jaW5jbHVkZSA8Y29yZS9ncHVvYmouaD4KLQotLyoKLSAq IFRoZSBCTCBoZWFkZXIgZm9ybWF0IHVzZWQgYnkgR00yMEIncyBmaXJtd2FyZSBpcyBzbGlnaHRs eSBkaWZmZXJlbnQKLSAqIGZyb20gdGhlIG9uZSBvZiBHTTIwMC4gRml4IHRoZSBkaWZmZXJlbmNl cyBoZXJlLgotICovCi1zdHJ1Y3QgZ20yMGJfZmxjbl9ibF9kZXNjIHsKLQl1MzIgcmVzZXJ2ZWRb NF07Ci0JdTMyIHNpZ25hdHVyZVs0XTsKLQl1MzIgY3R4X2RtYTsKLQl1MzIgY29kZV9kbWFfYmFz ZTsKLQl1MzIgbm9uX3NlY19jb2RlX29mZjsKLQl1MzIgbm9uX3NlY19jb2RlX3NpemU7Ci0JdTMy IHNlY19jb2RlX29mZjsKLQl1MzIgc2VjX2NvZGVfc2l6ZTsKLQl1MzIgY29kZV9lbnRyeV9wb2lu dDsKLQl1MzIgZGF0YV9kbWFfYmFzZTsKLQl1MzIgZGF0YV9zaXplOwotfTsKLQotc3RhdGljIHZv aWQKLWdtMjBiX3NlY2Jvb3RfbHNfYmxfZGVzYyhjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICpp bWcsIHU2NCB3cHJfYWRkciwKLQkJCSB2b2lkICpfZGVzYykKLXsKLQlzdHJ1Y3QgZ20yMGJfZmxj bl9ibF9kZXNjICpkZXNjID0gX2Rlc2M7Ci0JY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNj ICpwZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7Ci0JdTY0IGJhc2U7Ci0KLQliYXNlID0gd3ByX2Fk ZHIgKyBpbWctPmxzYl9oZWFkZXIudWNvZGVfb2ZmICsgcGRlc2MtPmFwcF9zdGFydF9vZmZzZXQ7 Ci0KLQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci0JZGVzYy0+Y3R4X2RtYSA9IEZB TENPTl9ETUFJRFhfVUNPREU7Ci0JZGVzYy0+Y29kZV9kbWFfYmFzZSA9IChiYXNlICsgcGRlc2Mt PmFwcF9yZXNpZGVudF9jb2RlX29mZnNldCkgPj4gODsKLQlkZXNjLT5ub25fc2VjX2NvZGVfc2l6 ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplOwotCWRlc2MtPmRhdGFfZG1hX2Jhc2Ug PSAoYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQpID4+IDg7Ci0JZGVzYy0+ ZGF0YV9zaXplID0gcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX3NpemU7Ci0JZGVzYy0+Y29kZV9l bnRyeV9wb2ludCA9IHBkZXNjLT5hcHBfaW1lbV9lbnRyeTsKLX0KLQotc3RhdGljIGludAotZ20y MGJfc2VjYm9vdF9wcmVwYXJlX2Jsb2JzKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IpCi17Ci0J c3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYgPSAmZ3NiLT5iYXNlLnN1YmRldjsKLQlpbnQgYWNy X3NpemU7Ci0JaW50IHJldDsKLQotCXJldCA9IGdtMjB4X3NlY2Jvb3RfcHJlcGFyZV9ibG9icyhn c2IpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlhY3Jfc2l6ZSA9IGdzYi0+YWNyX2xv YWRfYmxvYi0+c2l6ZTsKLQkvKgotCSAqIE9uIFRlZ3JhIHRoZSBXUFIgcmVnaW9uIGlzIHNldCBi eSB0aGUgYm9vdGxvYWRlci4gSXQgaXMgaWxsZWdhbCBmb3IKLQkgKiB0aGUgSFMgYmxvYiB0byBi ZSBsYXJnZXIgdGhhbiB0aGlzIHJlZ2lvbi4KLQkgKi8KLQlpZiAoYWNyX3NpemUgPiBnc2ItPndw cl9zaXplKSB7Ci0JCW52a21fZXJyb3Ioc3ViZGV2LCAiV1BSIHJlZ2lvbiB0b28gc21hbGwgZm9y IEZXIGJsb2IhXG4iKTsKLQkJbnZrbV9lcnJvcihzdWJkZXYsICJyZXF1aXJlZDogJWRCXG4iLCBh Y3Jfc2l6ZSk7Ci0JCW52a21fZXJyb3Ioc3ViZGV2LCAiV1BSIHNpemU6ICVkQlxuIiwgZ3NiLT53 cHJfc2l6ZSk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZAotZ20yMGJfc2VjYm9vdF9nZW5lcmF0ZV9ibF9kZXNjKGNvbnN0IHN0cnVjdCBoc2Zf bG9hZF9oZWFkZXIgKmxvYWRfaGRyLAotCQkJICAgICAgIHZvaWQgKl9ibF9kZXNjLCB1NjQgb2Zm c2V0KQotewotCXN0cnVjdCBnbTIwYl9mbGNuX2JsX2Rlc2MgKmJsX2Rlc2MgPSBfYmxfZGVzYzsK LQotCW1lbXNldChibF9kZXNjLCAwLCBzaXplb2YoKmJsX2Rlc2MpKTsKLQlibF9kZXNjLT5jdHhf ZG1hID0gRkFMQ09OX0RNQUlEWF9WSVJUOwotCWJsX2Rlc2MtPm5vbl9zZWNfY29kZV9vZmYgPSBs b2FkX2hkci0+bm9uX3NlY19jb2RlX29mZjsKLQlibF9kZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9 IGxvYWRfaGRyLT5ub25fc2VjX2NvZGVfc2l6ZTsKLQlibF9kZXNjLT5zZWNfY29kZV9vZmYgPSBs b2FkX2hkci0+YXBwWzBdLnNlY19jb2RlX29mZjsKLQlibF9kZXNjLT5zZWNfY29kZV9zaXplID0g bG9hZF9oZHItPmFwcFswXS5zZWNfY29kZV9zaXplOwotCWJsX2Rlc2MtPmNvZGVfZW50cnlfcG9p bnQgPSAwOwotCWJsX2Rlc2MtPmNvZGVfZG1hX2Jhc2UgPSBvZmZzZXQgPj4gODsKLQlibF9kZXNj LT5kYXRhX2RtYV9iYXNlID0gKG9mZnNldCArIGxvYWRfaGRyLT5kYXRhX2RtYV9iYXNlKSA+PiA4 OwotCWJsX2Rlc2MtPmRhdGFfc2l6ZSA9IGxvYWRfaGRyLT5kYXRhX3NpemU7Ci19Ci0KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZ20yMDBfc2VjYm9vdF9mdW5jCi1nbTIwYl9zZWNib290X2Z1bmMgPSB7 Ci0JLmJsX2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ20yMGJfZmxjbl9ibF9kZXNjKSwKLQku Z2VuZXJhdGVfYmxfZGVzYyA9IGdtMjBiX3NlY2Jvb3RfZ2VuZXJhdGVfYmxfZGVzYywKLQkucHJl cGFyZV9ibG9icyA9IGdtMjBiX3NlY2Jvb3RfcHJlcGFyZV9ibG9icywKLX07Ci0KKyNpbmNsdWRl ICJhY3IuaCIKKyNpbmNsdWRlICJnbTIwMC5oIgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkEK ICNkZWZpbmUgVEVHUkFfTUNfQkFTRQkJCQkweDcwMDE5MDAwCkBAIC0xMzksMTUgKzQ5LDE1IEBA IGdtMjBiX3RlZ3JhX3JlYWRfd3ByKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IpCiAJCW52a21f ZXJyb3IoJnNiLT5zdWJkZXYsICJDYW5ub3QgbWFwIFRlZ3JhIE1DIHJlZ2lzdGVyc1xuIik7CiAJ CXJldHVybiBQVFJfRVJSKG1jKTsKIAl9Ci0JZ3NiLT53cHJfYWRkciA9IGlvcmVhZDMyX25hdGl2 ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9CT01fMCkgfAorCXNiLT53cHJfYWRkciA9IGlv cmVhZDMyX25hdGl2ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9CT01fMCkgfAogCSAgICAg ICgodTY0KWlvcmVhZDMyX25hdGl2ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9CT01fSElf MCkgPDwgMzIpOwotCWdzYi0+d3ByX3NpemUgPSBpb3JlYWQzMl9uYXRpdmUobWMgKyBNQ19TRUNV UklUWV9DQVJWRU9VVDJfU0laRV8xMjhLKQorCXNiLT53cHJfc2l6ZSA9IGlvcmVhZDMyX25hdGl2 ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9TSVpFXzEyOEspCiAJCTw8IDE3OwogCWNmZyA9 IGlvcmVhZDMyX25hdGl2ZShtYyArIE1DX1NFQ1VSSVRZX0NBUlZFT1VUMl9DRkcwKTsKIAlpb3Vu bWFwKG1jKTsKIAogCS8qIENoZWNrIHRoYXQgV1BSIHNldHRpbmdzIGFyZSB2YWxpZCAqLwotCWlm IChnc2ItPndwcl9zaXplID09IDApIHsKKwlpZiAoc2ItPndwcl9zaXplID09IDApIHsKIAkJbnZr bV9lcnJvcigmc2ItPnN1YmRldiwgIldQUiByZWdpb24gaXMgZW1wdHlcbiIpOwogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CkBAIC0xODUsMTkgKzk1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBudmtt X3NlY2Jvb3RfZnVuYwogZ20yMGJfc2VjYm9vdCA9IHsKIAkuZHRvciA9IGdtMjAwX3NlY2Jvb3Rf ZHRvciwKIAkub25laW5pdCA9IGdtMjBiX3NlY2Jvb3Rfb25laW5pdCwKLQkucmVzZXQgPSBnbTIw MF9zZWNib290X3Jlc2V0LAotCS5zdGFydCA9IGdtMjAwX3NlY2Jvb3Rfc3RhcnQsCi0JLm1hbmFn ZWRfZmFsY29ucyA9IEJJVChOVktNX0ZBTENPTl9GRUNTKSwKLQkuYm9vdF9mYWxjb24gPSBOVktN X0ZBTENPTl9QTVUsCi19OwotCi1zdGF0aWMgY29uc3Qgc2VjYm9vdF9sc19mdW5jCi1nbTIwYl9s c19mdW5jID0gewotCVtOVktNX0ZBTENPTl9GRUNTXSA9ICYoc3RydWN0IHNlY2Jvb3RfbHNfc2lu Z2xlX2Z1bmMpIHsKLQkJLmxvYWQgPSBnbTIwMF9sc19sb2FkX2ZlY3MsCi0JCS5nZW5lcmF0ZV9i bF9kZXNjID0gZ20yMGJfc2VjYm9vdF9sc19ibF9kZXNjLAotCQkuYmxfZGVzY19zaXplID0gc2l6 ZW9mKHN0cnVjdCBnbTIwYl9mbGNuX2JsX2Rlc2MpLAotCX0sCisJLmZpbmkgPSBnbTIwMF9zZWNi b290X2ZpbmksCisJLnJ1bl9ibG9iID0gZ20yMDBfc2VjYm9vdF9ydW5fYmxvYiwKIH07CiAKIGlu dApAQCAtMjA2LDYgKzEwNSwxMSBAQCBnbTIwYl9zZWNib290X25ldyhzdHJ1Y3QgbnZrbV9kZXZp Y2UgKmRldmljZSwgaW50IGluZGV4LAogewogCWludCByZXQ7CiAJc3RydWN0IGdtMjAwX3NlY2Jv b3QgKmdzYjsKKwlzdHJ1Y3QgbnZrbV9hY3IgKmFjcjsKKworCWFjciA9IGFjcl9yMzUyX25ldygp OworCWlmIChJU19FUlIoYWNyKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNyKTsKIAogCWdzYiA9IGt6 YWxsb2Moc2l6ZW9mKCpnc2IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdzYikgewpAQCAtMjE0LDEz ICsxMTgsMTEgQEAgZ20yMGJfc2VjYm9vdF9uZXcoc3RydWN0IG52a21fZGV2aWNlICpkZXZpY2Us IGludCBpbmRleCwKIAl9CiAJKnBzYiA9ICZnc2ItPmJhc2U7CiAKLQlyZXQgPSBudmttX3NlY2Jv b3RfY3RvcigmZ20yMGJfc2VjYm9vdCwgZGV2aWNlLCBpbmRleCwgJmdzYi0+YmFzZSk7CisJcmV0 ID0gbnZrbV9zZWNib290X2N0b3IoJmdtMjBiX3NlY2Jvb3QsIGFjciwgZGV2aWNlLCBpbmRleCwK KwkJCQlCSVQoTlZLTV9GQUxDT05fRkVDUyksICZnc2ItPmJhc2UpOwogCWlmIChyZXQpCiAJCXJl dHVybiByZXQ7CiAKLQlnc2ItPmZ1bmMgPSAmZ20yMGJfc2VjYm9vdF9mdW5jOwotCWdzYi0+bHNf ZnVuYyA9ICZnbTIwYl9sc19mdW5jOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2Ry bS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGUuaCBiL2RybS9ub3V2ZWF1L252 a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjA1MTgzNzFhMjg3YwotLS0gL2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1 L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNvZGUuaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNCwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX05WS01fU0VDQk9PVF9MU19VQ09ERV9I X18KKyNkZWZpbmUgX19OVktNX1NFQ0JPT1RfTFNfVUNPREVfSF9fCisKKyNpbmNsdWRlIDxjb3Jl L29zLmg+CisjaW5jbHVkZSA8Y29yZS9mYWxjb24uaD4KKyNpbmNsdWRlIDxjb3JlL3N1YmRldi5o PgorCisvKgorICoKKyAqIExTIGJsb2Igc3RydWN0dXJlcworICoKKyAqLworCisvKioKKyAqIHN0 cnVjdCBsc2ZfdWNvZGVfZGVzYyAtIExTIGZhbGNvbiBzaWduYXR1cmVzCisgKiBAcHJkX2tleXM6 CQlzaWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBwcm9kdWN0aW9uIG1vZGUKKyAq IEBkZ2Jfa2V5czoJCXNpZ25hdHVyZSB0byB1c2Ugd2hlbiB0aGUgR1BVIGlzIGluIGRlYnVnIG1v ZGUKKyAqIEBiX3ByZF9wcmVzZW50Ogl3aGV0aGVyIHRoZSBwcm9kdWN0aW9uIGtleSBpcyBwcmVz ZW50CisgKiBAYl9kZ2JfcHJlc2VudDoJd2hldGhlciB0aGUgZGVidWcga2V5IGlzIHByZXNlbnQK KyAqIEBmYWxjb25faWQ6CQlJRCBvZiB0aGUgZmFsY29uIHRoZSB1Y29kZSBhcHBsaWVzIHRvCisg KgorICogRGlyZWN0bHkgbG9hZGVkIGZyb20gYSBzaWduYXR1cmUgZmlsZS4KKyAqLworc3RydWN0 IGxzZl91Y29kZV9kZXNjIHsKKwl1OCBwcmRfa2V5c1syXVsxNl07CisJdTggZGJnX2tleXNbMl1b MTZdOworCXUzMiBiX3ByZF9wcmVzZW50OworCXUzMiBiX2RiZ19wcmVzZW50OworCXUzMiBmYWxj b25faWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBsc2ZfbHNiX2hlYWRlciAtIExTIGZpcm13YXJl IGhlYWRlcgorICogQHNpZ25hdHVyZToJCXNpZ25hdHVyZSB0byB2ZXJpZnkgdGhlIGZpcm13YXJl IGFnYWluc3QKKyAqIEB1Y29kZV9vZmY6CQlvZmZzZXQgb2YgdGhlIHVjb2RlIGJsb2IgaW4gdGhl IFdQUiByZWdpb24uIFRoZSB1Y29kZQorICogICAgICAgICAgICAgICAgICAgICAgYmxvYiBjb250 YWlucyB0aGUgYm9vdGxvYWRlciwgY29kZSBhbmQgZGF0YSBvZiB0aGUKKyAqICAgICAgICAgICAg ICAgICAgICAgIExTIGZhbGNvbgorICogQHVjb2RlX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBi bG9iLCBpbmNsdWRpbmcgYm9vdGxvYWRlcgorICogQGRhdGFfc2l6ZToJCXNpemUgb2YgdGhlIHVj b2RlIGJsb2IgZGF0YQorICogQGJsX2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUgYm9vdGxvYWRlciBj b2RlCisgKiBAYmxfaW1lbV9vZmY6CW9mZnNldCBpbiBpbWVtIG9mIHRoZSBib290bG9hZGVyCisg KiBAYmxfZGF0YV9vZmY6CW9mZnNldCBvZiB0aGUgYm9vdGxvYWRlciBkYXRhIGluIFdQUiByZWdp b24KKyAqIEBibF9kYXRhX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YQorICogQGFw cF9jb2RlX29mZjoJb2Zmc2V0IG9mIHRoZSBhcHAgY29kZSByZWxhdGl2ZSB0byB1Y29kZV9vZmYK KyAqIEBhcHBfY29kZV9zaXplOglzaXplIG9mIHRoZSBhcHAgY29kZQorICogQGFwcF9kYXRhX29m ZjoJb2Zmc2V0IG9mIHRoZSBhcHAgZGF0YSByZWxhdGl2ZSB0byB1Y29kZV9vZmYKKyAqIEBhcHBf ZGF0YV9zaXplOglzaXplIG9mIHRoZSBhcHAgZGF0YQorICogQGZsYWdzOgkJZmxhZ3MgZm9yIHRo ZSBzZWN1cmUgYm9vdGxvYWRlcgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHdyaXR0ZW4gaW50 byB0aGUgV1BSIHJlZ2lvbiBmb3IgZWFjaCBtYW5hZ2VkIGZhbGNvbi4gRWFjaAorICogaW5zdGFu Y2UgaXMgcmVmZXJlbmNlZCBieSB0aGUgbHNiX29mZnNldCBtZW1iZXIgb2YgdGhlIGNvcnJlc3Bv bmRpbmcKKyAqIGxzZl93cHJfaGVhZGVyLgorICovCitzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgewor CXN0cnVjdCBsc2ZfdWNvZGVfZGVzYyBzaWduYXR1cmU7CisJdTMyIHVjb2RlX29mZjsKKwl1MzIg dWNvZGVfc2l6ZTsKKwl1MzIgZGF0YV9zaXplOworCXUzMiBibF9jb2RlX3NpemU7CisJdTMyIGJs X2ltZW1fb2ZmOworCXUzMiBibF9kYXRhX29mZjsKKwl1MzIgYmxfZGF0YV9zaXplOworCXUzMiBh cHBfY29kZV9vZmY7CisJdTMyIGFwcF9jb2RlX3NpemU7CisJdTMyIGFwcF9kYXRhX29mZjsKKwl1 MzIgYXBwX2RhdGFfc2l6ZTsKKwl1MzIgZmxhZ3M7CisjZGVmaW5lIExTRl9GTEFHX0xPQURfQ09E RV9BVF8wCQkxCisjZGVmaW5lIExTRl9GTEFHX0RNQUNUTF9SRVFfQ1RYCQk0CisjZGVmaW5lIExT Rl9GTEFHX0ZPUkNFX1BSSVZfTE9BRAk4Cit9OworCisvKioKKyAqIHN0cnVjdCBsc2Zfd3ByX2hl YWRlciAtIExTIGJsb2IgV1BSIEhlYWRlcgorICogQGZhbGNvbl9pZDoJCUxTIGZhbGNvbiBJRAor ICogQGxzYl9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGxzYl9sc2ZfaGVhZGVyIGluIHRoZSBXUFIg cmVnaW9uCisgKiBAYm9vdHN0cmFwX293bmVyOglzZWN1cmUgZmFsY29uIHJlcG9uc2libGUgZm9y IGJvb3RzdHJhcHBpbmcgdGhlIExTIGZhbGNvbgorICogQGxhenlfYm9vdHN0cmFwOglza2lwIGJv b3RzdHJhcHBpbmcgYnkgQUNSCisgKiBAc3RhdHVzOgkJYm9vdHN0cmFwcGluZyBzdGF0dXMKKyAq CisgKiBBbiBhcnJheSBvZiB0aGVzZSBpcyB3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl IFdQUiByZWdpb24sIG9uZSBmb3IKKyAqIGVhY2ggbWFuYWdlZCBmYWxjb24uIFRoZSBhcnJheSBp cyB0ZXJtaW5hdGVkIGJ5IGFuIGluc3RhbmNlIHdoaWNoIGZhbGNvbl9pZAorICogaXMgTFNGX0ZB TENPTl9JRF9JTlZBTElELgorICovCitzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgeworCXUzMiBmYWxj b25faWQ7CisJdTMyIGxzYl9vZmZzZXQ7CisJdTMyIGJvb3RzdHJhcF9vd25lcjsKKwl1MzIgbGF6 eV9ib290c3RyYXA7CisJdTMyIHN0YXR1czsKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19OT05F CQkJCTAKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19DT1BZCQkJCTEKKyNkZWZpbmUgTFNGX0lN QUdFX1NUQVRVU19WQUxJREFUSU9OX0NPREVfRkFJTEVECQkyCisjZGVmaW5lIExTRl9JTUFHRV9T VEFUVVNfVkFMSURBVElPTl9EQVRBX0ZBSUxFRAkJMworI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVT X1ZBTElEQVRJT05fRE9ORQkJNAorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05f U0tJUFBFRAkJNQorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX0JPT1RTVFJBUF9SRUFEWQkJNgor fTsKKworCisvKioKKyAqIHN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyAtIGRlc2NyaXB0b3Igb2Yg ZmlybXdhcmUgaW1hZ2UKKyAqIEBkZXNjcmlwdG9yX3NpemU6CQlzaXplIG9mIHRoaXMgZGVzY3Jp cHRvcgorICogQGltYWdlX3NpemU6CQkJc2l6ZSBvZiB0aGUgd2hvbGUgaW1hZ2UKKyAqIEBib290 bG9hZGVyX3N0YXJ0X29mZnNldDoJc3RhcnQgb2Zmc2V0IG9mIHRoZSBib290bG9hZGVyIGluIHVj b2RlIGltYWdlCisgKiBAYm9vdGxvYWRlcl9zaXplOgkJc2l6ZSBvZiB0aGUgYm9vdGxvYWRlcgor ICogQGJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ6CXN0YXJ0IG9mZiBzZXQgb2YgdGhlIGJvb3Rsb2Fk ZXIgaW4gSU1FTQorICogQGJvb3Rsb2FkZXJfZW50cnlfcG9pbnQ6CWVudHJ5IHBvaW50IG9mIHRo ZSBib290bG9hZGVyIGluIElNRU0KKyAqIEBhcHBfc3RhcnRfb2Zmc2V0OgkJc3RhcnQgb2Zmc2V0 IG9mIHRoZSBMUyBmaXJtd2FyZQorICogQGFwcF9zaXplOgkJCXNpemUgb2YgdGhlIExTIGZpcm13 YXJlJ3MgY29kZSBhbmQgZGF0YQorICogQGFwcF9pbWVtX29mZnNldDoJCW9mZnNldCBvZiB0aGUg YXBwIGluIElNRU0KKyAqIEBhcHBfaW1lbV9lbnRyeToJCWVudHJ5IHBvaW50IG9mIHRoZSBhcHAg aW4gSU1FTQorICogQGFwcF9kbWVtX29mZnNldDoJCW9mZnNldCBvZiB0aGUgZGF0YSBpbiBETUVN CisgKiBAYXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0OglvZmZzZXQgb2YgYXBwIGNvZGUgZnJvbSBh cHBfc3RhcnRfb2Zmc2V0CisgKiBAYXBwX3Jlc2lkZW50X2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUg Y29kZQorICogQGFwcF9yZXNpZGVudF9kYXRhX29mZnNldDoJb2Zmc2V0IG9mIGRhdGEgZnJvbSBh cHBfc3RhcnRfb2Zmc2V0CisgKiBAYXBwX3Jlc2lkZW50X2RhdGFfc2l6ZToJc2l6ZSBvZiBkYXRh CisgKgorICogQSBmaXJtd2FyZSBpbWFnZSBjb250YWlucyB0aGUgY29kZSwgZGF0YSwgYW5kIGJv b3Rsb2FkZXIgb2YgYSBnaXZlbiBMUworICogZmFsY29uIGluIGEgc2luZ2xlIGJsb2IuIFRoaXMg c3RydWN0dXJlIGRlc2NyaWJlcyB3aGVyZSBldmVyeXRoaW5nIGlzLgorICoKKyAqIFRoaXMgY2Fu IGJlIGdlbmVyYXRlZCBmcm9tIGEgKGJvb3Rsb2FkZXIsIGNvZGUsIGRhdGEpIHNldCBpZiB0aGV5 IGhhdmUKKyAqIGJlZW4gbG9hZGVkIHNlcGFyYXRlbHksIG9yIGNvbWUgZGlyZWN0bHkgZnJvbSBh IGZpbGUuCisgKi8KK3N0cnVjdCBsc191Y29kZV9pbWdfZGVzYyB7CisJdTMyIGRlc2NyaXB0b3Jf c2l6ZTsKKwl1MzIgaW1hZ2Vfc2l6ZTsKKwl1MzIgdG9vbHNfdmVyc2lvbjsKKwl1MzIgYXBwX3Zl cnNpb247CisJY2hhciBkYXRlWzY0XTsKKwl1MzIgYm9vdGxvYWRlcl9zdGFydF9vZmZzZXQ7CisJ dTMyIGJvb3Rsb2FkZXJfc2l6ZTsKKwl1MzIgYm9vdGxvYWRlcl9pbWVtX29mZnNldDsKKwl1MzIg Ym9vdGxvYWRlcl9lbnRyeV9wb2ludDsKKwl1MzIgYXBwX3N0YXJ0X29mZnNldDsKKwl1MzIgYXBw X3NpemU7CisJdTMyIGFwcF9pbWVtX29mZnNldDsKKwl1MzIgYXBwX2ltZW1fZW50cnk7CisJdTMy IGFwcF9kbWVtX29mZnNldDsKKwl1MzIgYXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0OworCXUzMiBh cHBfcmVzaWRlbnRfY29kZV9zaXplOworCXUzMiBhcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQ7CisJ dTMyIGFwcF9yZXNpZGVudF9kYXRhX3NpemU7CisJdTMyIG5iX292ZXJsYXlzOworCXN0cnVjdCB7 dTMyIHN0YXJ0OyB1MzIgc2l6ZTsgfSBsb2FkX292bFs2NF07CisJdTMyIGNvbXByZXNzZWQ7Cit9 OworCisvKioKKyAqIHN0cnVjdCBsc191Y29kZV9pbWcgLSB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3Ig bG9hZGVkIExTIGZpcm13YXJlcworICogQG5vZGU6CQl0byBsaW5rIHdpdGhpbiBsc2ZfdWNvZGVf bWdyCisgKiBAZmFsY29uX2lkOgkJSUQgb2YgdGhlIGZhbGNvbiB0aGlzIExTIGZpcm13YXJlIGlz IGZvcgorICogQHVjb2RlX2Rlc2M6CQlsb2FkZWQgb3IgZ2VuZXJhdGVkIG1hcCBvZiB1Y29kZV9k YXRhCisgKiBAdWNvZGVfaGVhZGVyOgloZWFkZXIgb2YgdGhlIGZpcm13YXJlCisgKiBAdWNvZGVf ZGF0YToJCWZpcm13YXJlIHBheWxvYWQgKGNvZGUgYW5kIGRhdGEpCisgKiBAdWNvZGVfc2l6ZToJ CXNpemUgaW4gYnl0ZXMgb2YgZGF0YSBpbiB1Y29kZV9kYXRhCisgKiBAd3ByX2hlYWRlcjoJCVdQ UiBoZWFkZXIgdG8gYmUgd3JpdHRlbiB0byB0aGUgTFMgYmxvYgorICogQGxzYl9oZWFkZXI6CQlM U0IgaGVhZGVyIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIExTIGJsb2IKKyAqCisgKiBQcmVwYXJpbmcg dGhlIFdQUiBMUyBibG9iIHJlcXVpcmVzIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgTFMgZmly bXdhcmVzCisgKiAoc2l6ZSwgZXRjKSB0byBiZSBrbm93bi4gVGhpcyBzdHJ1Y3R1cmUgY29udGFp bnMgYWxsIHRoZSBkYXRhIG9mIG9uZSBMUworICogZmlybXdhcmUuCisgKi8KK3N0cnVjdCBsc191 Y29kZV9pbWcgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwllbnVtIG52a21fZmFsY29uaWR4 IGZhbGNvbl9pZDsKKworCXN0cnVjdCBsc191Y29kZV9pbWdfZGVzYyB1Y29kZV9kZXNjOworCXUz MiAqdWNvZGVfaGVhZGVyOworCXU4ICp1Y29kZV9kYXRhOworCXUzMiB1Y29kZV9zaXplOworCisJ c3RydWN0IGxzZl93cHJfaGVhZGVyIHdwcl9oZWFkZXI7CisJc3RydWN0IGxzZl9sc2JfaGVhZGVy IGxzYl9oZWFkZXI7Cit9OworCisvKioKKyAqIHN0cnVjdCBmd19iaW5faGVhZGVyIC0gaGVhZGVy IG9mIGZpcm13YXJlIGZpbGVzCisgKiBAYmluX21hZ2ljOgkJYWx3YXlzIDB4M2IxZDE0ZjAKKyAq IEBiaW5fdmVyOgkJdmVyc2lvbiBvZiB0aGUgYmluIGZvcm1hdAorICogQGJpbl9zaXplOgkJZW50 aXJlIGltYWdlIHNpemUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyCisgKiBAaGVhZGVyX29mZnNldDoJ b2Zmc2V0IG9mIHRoZSBmaXJtd2FyZS9ib290bG9hZGVyIGhlYWRlciBpbiB0aGUgZmlsZQorICog QGRhdGFfb2Zmc2V0OglvZmZzZXQgb2YgdGhlIGZpcm13YXJlL2Jvb3Rsb2FkZXIgcGF5bG9hZCBp biB0aGUgZmlsZQorICogQGRhdGFfc2l6ZToJCXNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBU aGlzIGhlYWRlciBpcyBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEhTIGZpcm13YXJl IGFuZCBIUyBib290bG9hZGVyCisgKiBmaWxlcywgdG8gZGVzY3JpYmUgd2hlcmUgdGhlIGhlYWRl cnMgYW5kIGRhdGEgY2FuIGJlIGZvdW5kLgorICovCitzdHJ1Y3QgZndfYmluX2hlYWRlciB7CisJ dTMyIGJpbl9tYWdpYzsKKwl1MzIgYmluX3ZlcjsKKwl1MzIgYmluX3NpemU7CisJdTMyIGhlYWRl cl9vZmZzZXQ7CisJdTMyIGRhdGFfb2Zmc2V0OworCXUzMiBkYXRhX3NpemU7Cit9OworCisvKioK KyAqIHN0cnVjdCBmd19ibF9kZXNjIC0gZmlybXdhcmUgYm9vdGxvYWRlciBkZXNjcmlwdG9yCisg KiBAc3RhcnRfdGFnOgkJc3RhcnRpbmcgdGFnIG9mIGJvb3Rsb2FkZXIKKyAqIEBkZXNjX2RtZW1f bG9hZF9vZmY6CURNRU0gb2Zmc2V0IG9mIGZsY25fYmxfZG1lbV9kZXNjCisgKiBAY29kZV9vZmY6 CQlvZmZzZXQgb2YgY29kZSBzZWN0aW9uCisgKiBAY29kZV9zaXplOgkJc2l6ZSBvZiBjb2RlIHNl Y3Rpb24KKyAqIEBkYXRhX29mZjoJCW9mZnNldCBvZiBkYXRhIHNlY3Rpb24KKyAqIEBkYXRhX3Np emU6CQlzaXplIG9mIGRhdGEgc2VjdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGVtYmVk ZGVkIGluIGJvb3Rsb2FkZXIgZmlybXdhcmUgZmlsZXMgYXQgdG8gZGVzY3JpYmUgdGhlCisgKiBJ TUVNIGFuZCBETUVNIGxheW91dCBleHBlY3RlZCBieSB0aGUgYm9vdGxvYWRlci4KKyAqLworc3Ry dWN0IGZ3X2JsX2Rlc2MgeworCXUzMiBzdGFydF90YWc7CisJdTMyIGRtZW1fbG9hZF9vZmY7CisJ dTMyIGNvZGVfb2ZmOworCXUzMiBjb2RlX3NpemU7CisJdTMyIGRhdGFfb2ZmOworCXUzMiBkYXRh X3NpemU7Cit9OworCitpbnQgYWNyX2xzX3Vjb2RlX2xvYWRfZmVjcyhjb25zdCBzdHJ1Y3QgbnZr bV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKK2ludCBhY3JfbHNfdWNvZGVfbG9h ZF9ncGNjcyhjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAq KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvbHNfdWNvZGVfZ3IuYyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvbHNfdWNv ZGVfZ3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA5ZjVmMWYx YTUwZAotLS0gL2Rldi9udWxsCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv bHNfdWNvZGVfZ3IuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NiwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworCisjaW5jbHVkZSAibHNfdWNvZGUuaCIKKyNpbmNsdWRlICJhY3IuaCIKKworI2luY2x1 ZGUgPGNvcmUvZmlybXdhcmUuaD4KKworI2RlZmluZSBCTF9ERVNDX0JMS19TSVpFIDI1NgorLyoq CisgKiBCdWlsZCBhIHVjb2RlIGltYWdlIGFuZCBkZXNjcmlwdG9yIGZyb20gcHJvdmlkZWQgYm9v dGxvYWRlciwgY29kZSBhbmQgZGF0YS4KKyAqCisgKiBAYmw6CQlib290bG9hZGVyIGltYWdlLCBp bmNsdWRpbmcgMTYtYnl0ZXMgZGVzY3JpcHRvcgorICogQGNvZGU6CUxTIGZpcm13YXJlIGNvZGUg c2VnbWVudAorICogQGRhdGE6CUxTIGZpcm13YXJlIGRhdGEgc2VnbWVudAorICogQGRlc2M6CXVj b2RlIGRlc2NyaXB0b3IgdG8gYmUgd3JpdHRlbgorICoKKyAqIFJldHVybjogYWxsb2NhdGVkIHVj b2RlIGltYWdlIHdpdGggY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIGluZm9ybWF0aW9uLiBkZXNj CisgKiAgICAgICAgIGlzIGFsc28gdXBkYXRlZCB0byBjb250YWluIHRoZSByaWdodCBvZmZzZXRz IHdpdGhpbiByZXR1cm5lZCBpbWFnZS4KKyAqLworc3RhdGljIHZvaWQgKgorbHNfdWNvZGVfaW1n X2J1aWxkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmwsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAq Y29kZSwKKwkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpkYXRhLCBzdHJ1Y3QgbHNfdWNvZGVf aW1nX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGZ3X2Jpbl9oZWFkZXIgKmJpbl9oZHIgPSAodm9p ZCAqKWJsLT5kYXRhOworCXN0cnVjdCBmd19ibF9kZXNjICpibF9kZXNjID0gKHZvaWQgKilibC0+ ZGF0YSArIGJpbl9oZHItPmhlYWRlcl9vZmZzZXQ7CisJdm9pZCAqYmxfZGF0YSA9ICh2b2lkICop YmwtPmRhdGEgKyBiaW5faGRyLT5kYXRhX29mZnNldDsKKwl1MzIgcG9zID0gMDsKKwl2b2lkICpp bWFnZTsKKworCWRlc2MtPmJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0ID0gcG9zOworCWRlc2MtPmJv b3Rsb2FkZXJfc2l6ZSA9IEFMSUdOKGJsX2Rlc2MtPmNvZGVfc2l6ZSwgc2l6ZW9mKHUzMikpOwor CWRlc2MtPmJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQgPSBibF9kZXNjLT5zdGFydF90YWcgKiAyNTY7 CisJZGVzYy0+Ym9vdGxvYWRlcl9lbnRyeV9wb2ludCA9IGJsX2Rlc2MtPnN0YXJ0X3RhZyAqIDI1 NjsKKworCXBvcyA9IEFMSUdOKHBvcyArIGRlc2MtPmJvb3Rsb2FkZXJfc2l6ZSwgQkxfREVTQ19C TEtfU0laRSk7CisJZGVzYy0+YXBwX3N0YXJ0X29mZnNldCA9IHBvczsKKwlkZXNjLT5hcHBfc2l6 ZSA9IEFMSUdOKGNvZGUtPnNpemUsIEJMX0RFU0NfQkxLX1NJWkUpICsKKwkJCSBBTElHTihkYXRh LT5zaXplLCBCTF9ERVNDX0JMS19TSVpFKTsKKwlkZXNjLT5hcHBfaW1lbV9vZmZzZXQgPSAwOwor CWRlc2MtPmFwcF9pbWVtX2VudHJ5ID0gMDsKKwlkZXNjLT5hcHBfZG1lbV9vZmZzZXQgPSAwOwor CWRlc2MtPmFwcF9yZXNpZGVudF9jb2RlX29mZnNldCA9IDA7CisJZGVzYy0+YXBwX3Jlc2lkZW50 X2NvZGVfc2l6ZSA9IEFMSUdOKGNvZGUtPnNpemUsIEJMX0RFU0NfQkxLX1NJWkUpOworCisJcG9z ID0gQUxJR04ocG9zICsgZGVzYy0+YXBwX3Jlc2lkZW50X2NvZGVfc2l6ZSwgQkxfREVTQ19CTEtf U0laRSk7CisJZGVzYy0+YXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0ID0gcG9zIC0gZGVzYy0+YXBw X3N0YXJ0X29mZnNldDsKKwlkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXplID0gQUxJR04oZGF0 YS0+c2l6ZSwgQkxfREVTQ19CTEtfU0laRSk7CisKKwlkZXNjLT5pbWFnZV9zaXplID0gQUxJR04o YmxfZGVzYy0+Y29kZV9zaXplLCBCTF9ERVNDX0JMS19TSVpFKSArCisJCQkgICBkZXNjLT5hcHBf c2l6ZTsKKworCWltYWdlID0ga3phbGxvYyhkZXNjLT5pbWFnZV9zaXplLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWltYWdlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1lbWNweShpbWFn ZSArIGRlc2MtPmJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0LCBibF9kYXRhLAorCSAgICAgICBibF9k ZXNjLT5jb2RlX3NpemUpOworCW1lbWNweShpbWFnZSArIGRlc2MtPmFwcF9zdGFydF9vZmZzZXQs IGNvZGUtPmRhdGEsIGNvZGUtPnNpemUpOworCW1lbWNweShpbWFnZSArIGRlc2MtPmFwcF9zdGFy dF9vZmZzZXQgKyBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQsCisJICAgICAgIGRhdGEt PmRhdGEsIGRhdGEtPnNpemUpOworCisJcmV0dXJuIGltYWdlOworfQorCisvKioKKyAqIGxzX3Vj b2RlX2ltZ19sb2FkX2dyKCkgLSBsb2FkIGFuZCBwcmVwYXJlIGEgTFMgR1IgdWNvZGUgaW1hZ2UK KyAqCisgKiBMb2FkIHRoZSBMUyBtaWNyb2NvZGUsIGJvb3Rsb2FkZXIgYW5kIHNpZ25hdHVyZSBh bmQgcGFjayB0aGVtIGludG8gYSBzaW5nbGUKKyAqIGJsb2IuIEFsc28gZ2VuZXJhdGUgdGhlIGNv cnJlc3BvbmRpbmcgdWNvZGUgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIGludAorbHNfdWNvZGVf aW1nX2xvYWRfZ3IoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsIHN0cnVjdCBsc191 Y29kZV9pbWcgKmltZywKKwkJICAgICBjb25zdCBjaGFyICpmYWxjb25fbmFtZSwgY29uc3QgdTMy IGZhbGNvbl9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJsLCAqY29kZSwgKmRhdGE7 CisJc3RydWN0IGxzZl91Y29kZV9kZXNjICpsc2ZfZGVzYzsKKwljaGFyIGZbNjRdOworCWludCBy ZXQ7CisKKwlpbWctPnVjb2RlX2hlYWRlciA9IE5VTEw7CisKKwlzbnByaW50ZihmLCBzaXplb2Yo ZiksICJnci8lc19ibCIsIGZhbGNvbl9uYW1lKTsKKwlyZXQgPSBudmttX2Zpcm13YXJlX2dldChz dWJkZXYtPmRldmljZSwgZiwgJmJsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJc25w cmludGYoZiwgc2l6ZW9mKGYpLCAiZ3IvJXNfaW5zdCIsIGZhbGNvbl9uYW1lKTsKKwlyZXQgPSBu dmttX2Zpcm13YXJlX2dldChzdWJkZXYtPmRldmljZSwgZiwgJmNvZGUpOworCWlmIChyZXQpCisJ CWdvdG8gZnJlZV9ibDsKKworCXNucHJpbnRmKGYsIHNpemVvZihmKSwgImdyLyVzX2RhdGEiLCBm YWxjb25fbmFtZSk7CisJcmV0ID0gbnZrbV9maXJtd2FyZV9nZXQoc3ViZGV2LT5kZXZpY2UsIGYs ICZkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaW5zdDsKKworCWltZy0+dWNvZGVfZGF0 YSA9IGxzX3Vjb2RlX2ltZ19idWlsZChibCwgY29kZSwgZGF0YSwKKwkJCQkJICAgICAmaW1nLT51 Y29kZV9kZXNjKTsKKwlpZiAoSVNfRVJSKGltZy0+dWNvZGVfZGF0YSkpIHsKKwkJcmV0ID0gUFRS X0VSUihpbWctPnVjb2RlX2RhdGEpOworCQlnb3RvIGZyZWVfZGF0YTsKKwl9CisJaW1nLT51Y29k ZV9zaXplID0gaW1nLT51Y29kZV9kZXNjLmltYWdlX3NpemU7CisKKwlzbnByaW50ZihmLCBzaXpl b2YoZiksICJnci8lc19zaWciLCBmYWxjb25fbmFtZSk7CisJbHNmX2Rlc2MgPSBudmttX2Fjcl9s b2FkX2Zpcm13YXJlKHN1YmRldiwgZiwgc2l6ZW9mKCpsc2ZfZGVzYykpOworCWlmIChJU19FUlIo bHNmX2Rlc2MpKSB7CisJCXJldCA9IFBUUl9FUlIobHNmX2Rlc2MpOworCQlnb3RvIGZyZWVfaW1h Z2U7CisJfQorCS8qIG5vdCBuZWVkZWQ/IHRoZSBzaWduYXR1cmUgc2hvdWxkIGFscmVhZHkgaGF2 ZSB0aGUgcmlnaHQgdmFsdWUgKi8KKwlsc2ZfZGVzYy0+ZmFsY29uX2lkID0gZmFsY29uX2lkOwor CW1lbWNweSgmaW1nLT5sc2JfaGVhZGVyLnNpZ25hdHVyZSwgbHNmX2Rlc2MsIHNpemVvZigqbHNm X2Rlc2MpKTsKKwlpbWctPmZhbGNvbl9pZCA9IGxzZl9kZXNjLT5mYWxjb25faWQ7CisJa2ZyZWUo bHNmX2Rlc2MpOworCisJLyogc3VjY2VzcyBwYXRoIC0gb25seSBmcmVlIHJlcXVlc3RlZCBmaXJt d2FyZSBmaWxlcyAqLworCWdvdG8gZnJlZV9kYXRhOworCitmcmVlX2ltYWdlOgorCWtmcmVlKGlt Zy0+dWNvZGVfZGF0YSk7CitmcmVlX2RhdGE6CisJbnZrbV9maXJtd2FyZV9wdXQoZGF0YSk7Citm cmVlX2luc3Q6CisJbnZrbV9maXJtd2FyZV9wdXQoY29kZSk7CitmcmVlX2JsOgorCW52a21fZmly bXdhcmVfcHV0KGJsKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK2ludAorYWNyX2xzX3Vj b2RlX2xvYWRfZmVjcyhjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwKKwkJICAgICAg IHN0cnVjdCBsc191Y29kZV9pbWcgKmltZykKK3sKKwlyZXR1cm4gbHNfdWNvZGVfaW1nX2xvYWRf Z3Ioc3ViZGV2LCBpbWcsICJmZWNzIiwgTlZLTV9GQUxDT05fRkVDUyk7Cit9CisKK2ludAorYWNy X2xzX3Vjb2RlX2xvYWRfZ3BjY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsCisJ CQlzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcpCit7CisJcmV0dXJuIGxzX3Vjb2RlX2ltZ19sb2Fk X2dyKHN1YmRldiwgaW1nLCAiZ3BjY3MiLCBOVktNX0ZBTENPTl9HUENDUyk7Cit9CmRpZmYgLS1n aXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L3ByaXYuaCBiL2RybS9ub3V2ZWF1 L252a20vc3ViZGV2L3NlY2Jvb3QvcHJpdi5oCmluZGV4IDE5MjI0MjJmZDUzOS4uNzA4ZGZhMTNl NWQ1IDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L3ByaXYuaAor KysgYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L3ByaXYuaApAQCAtMzAsMTg4ICsz MCwxNSBAQCBzdHJ1Y3QgbnZrbV9zZWNib290X2Z1bmMgewogCWludCAoKm9uZWluaXQpKHN0cnVj dCBudmttX3NlY2Jvb3QgKik7CiAJaW50ICgqZmluaSkoc3RydWN0IG52a21fc2VjYm9vdCAqLCBi b29sIHN1c3BlbmQpOwogCXZvaWQgKigqZHRvcikoc3RydWN0IG52a21fc2VjYm9vdCAqKTsKLQlp bnQgKCpyZXNldCkoc3RydWN0IG52a21fc2VjYm9vdCAqLCBlbnVtIG52a21fZmFsY29uaWR4KTsK LQlpbnQgKCpzdGFydCkoc3RydWN0IG52a21fc2VjYm9vdCAqLCBlbnVtIG52a21fZmFsY29uaWR4 KTsKLQotCS8qIElEIG9mIHRoZSBmYWxjb24gdGhhdCB3aWxsIHBlcmZvcm0gc2VjdXJlIGJvb3Qg Ki8KLQllbnVtIG52a21fZmFsY29uaWR4IGJvb3RfZmFsY29uOwotCS8qIEJpdC1tYXNrIG9mIElE cyBvZiBtYW5hZ2VkIGZhbGNvbnMgKi8KLQl1bnNpZ25lZCBsb25nIG1hbmFnZWRfZmFsY29uczsK KwlpbnQgKCpydW5fYmxvYikoc3RydWN0IG52a21fc2VjYm9vdCAqLCBzdHJ1Y3QgbnZrbV9ncHVv YmogKik7CiB9OwogCi1pbnQgbnZrbV9zZWNib290X2N0b3IoY29uc3Qgc3RydWN0IG52a21fc2Vj Ym9vdF9mdW5jICosIHN0cnVjdCBudmttX2RldmljZSAqLAotCQkgICAgICBpbnQgaW5kZXgsIHN0 cnVjdCBudmttX3NlY2Jvb3QgKik7CitpbnQgbnZrbV9zZWNib290X2N0b3IoY29uc3Qgc3RydWN0 IG52a21fc2VjYm9vdF9mdW5jICosIHN0cnVjdCBudmttX2FjciAqLAorCQkgIHN0cnVjdCBudmtt X2RldmljZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcsCisJCSAgc3RydWN0IG52a21fc2VjYm9vdCAq KTsKIGludCBudmttX3NlY2Jvb3RfZmFsY29uX3Jlc2V0KHN0cnVjdCBudmttX3NlY2Jvb3QgKik7 CiBpbnQgbnZrbV9zZWNib290X2ZhbGNvbl9ydW4oc3RydWN0IG52a21fc2VjYm9vdCAqKTsKIAot LyoKLSAqCi0gKiBMUyBibG9iIHN0cnVjdHVyZXMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1Y3Qg bHNmX3Vjb2RlX2Rlc2MgLSBMUyBmYWxjb24gc2lnbmF0dXJlcwotICogQHByZF9rZXlzOgkJc2ln bmF0dXJlIHRvIHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gcHJvZHVjdGlvbiBtb2RlCi0gKiBAZGdi X2tleXM6CQlzaWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBkZWJ1ZyBtb2RlCi0g KiBAYl9wcmRfcHJlc2VudDoJd2hldGhlciB0aGUgcHJvZHVjdGlvbiBrZXkgaXMgcHJlc2VudAot ICogQGJfZGdiX3ByZXNlbnQ6CXdoZXRoZXIgdGhlIGRlYnVnIGtleSBpcyBwcmVzZW50Ci0gKiBA ZmFsY29uX2lkOgkJSUQgb2YgdGhlIGZhbGNvbiB0aGUgdWNvZGUgYXBwbGllcyB0bwotICoKLSAq IERpcmVjdGx5IGxvYWRlZCBmcm9tIGEgc2lnbmF0dXJlIGZpbGUuCi0gKi8KLXN0cnVjdCBsc2Zf dWNvZGVfZGVzYyB7Ci0JdTggcHJkX2tleXNbMl1bMTZdOwotCXU4IGRiZ19rZXlzWzJdWzE2XTsK LQl1MzIgYl9wcmRfcHJlc2VudDsKLQl1MzIgYl9kYmdfcHJlc2VudDsKLQl1MzIgZmFsY29uX2lk OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgLSBMUyBmaXJtd2FyZSBoZWFk ZXIKLSAqIEBzaWduYXR1cmU6CQlzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBmaXJtd2FyZSBhZ2Fp bnN0Ci0gKiBAdWNvZGVfb2ZmOgkJb2Zmc2V0IG9mIHRoZSB1Y29kZSBibG9iIGluIHRoZSBXUFIg cmVnaW9uLiBUaGUgdWNvZGUKLSAqICAgICAgICAgICAgICAgICAgICAgIGJsb2IgY29udGFpbnMg dGhlIGJvb3Rsb2FkZXIsIGNvZGUgYW5kIGRhdGEgb2YgdGhlCi0gKiAgICAgICAgICAgICAgICAg ICAgICBMUyBmYWxjb24KLSAqIEB1Y29kZV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNvZGUgYmxvYiwg aW5jbHVkaW5nIGJvb3Rsb2FkZXIKLSAqIEBkYXRhX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBi bG9iIGRhdGEKLSAqIEBibF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgY29kZQot ICogQGJsX2ltZW1fb2ZmOglvZmZzZXQgaW4gaW1lbSBvZiB0aGUgYm9vdGxvYWRlcgotICogQGJs X2RhdGFfb2ZmOglvZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YSBpbiBXUFIgcmVnaW9uCi0g KiBAYmxfZGF0YV9zaXplOglzaXplIG9mIHRoZSBib290bG9hZGVyIGRhdGEKLSAqIEBhcHBfY29k ZV9vZmY6CW9mZnNldCBvZiB0aGUgYXBwIGNvZGUgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCi0gKiBA YXBwX2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUgYXBwIGNvZGUKLSAqIEBhcHBfZGF0YV9vZmY6CW9m ZnNldCBvZiB0aGUgYXBwIGRhdGEgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCi0gKiBAYXBwX2RhdGFf c2l6ZToJc2l6ZSBvZiB0aGUgYXBwIGRhdGEKLSAqIEBmbGFnczoJCWZsYWdzIGZvciB0aGUgc2Vj dXJlIGJvb3Rsb2FkZXIKLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyB3cml0dGVuIGludG8gdGhl IFdQUiByZWdpb24gZm9yIGVhY2ggbWFuYWdlZCBmYWxjb24uIEVhY2gKLSAqIGluc3RhbmNlIGlz IHJlZmVyZW5jZWQgYnkgdGhlIGxzYl9vZmZzZXQgbWVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5n Ci0gKiBsc2Zfd3ByX2hlYWRlci4KLSAqLwotc3RydWN0IGxzZl9sc2JfaGVhZGVyIHsKLQlzdHJ1 Y3QgbHNmX3Vjb2RlX2Rlc2Mgc2lnbmF0dXJlOwotCXUzMiB1Y29kZV9vZmY7Ci0JdTMyIHVjb2Rl X3NpemU7Ci0JdTMyIGRhdGFfc2l6ZTsKLQl1MzIgYmxfY29kZV9zaXplOwotCXUzMiBibF9pbWVt X29mZjsKLQl1MzIgYmxfZGF0YV9vZmY7Ci0JdTMyIGJsX2RhdGFfc2l6ZTsKLQl1MzIgYXBwX2Nv ZGVfb2ZmOwotCXUzMiBhcHBfY29kZV9zaXplOwotCXUzMiBhcHBfZGF0YV9vZmY7Ci0JdTMyIGFw cF9kYXRhX3NpemU7Ci0JdTMyIGZsYWdzOwotI2RlZmluZSBMU0ZfRkxBR19MT0FEX0NPREVfQVRf MAkJMQotI2RlZmluZSBMU0ZfRkxBR19ETUFDVExfUkVRX0NUWAkJNAotI2RlZmluZSBMU0ZfRkxB R19GT1JDRV9QUklWX0xPQUQJOAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIg LSBMUyBibG9iIFdQUiBIZWFkZXIKLSAqIEBmYWxjb25faWQ6CQlMUyBmYWxjb24gSUQKLSAqIEBs c2Jfb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBsc2JfbHNmX2hlYWRlciBpbiB0aGUgV1BSIHJlZ2lv bgotICogQGJvb3RzdHJhcF9vd25lcjoJc2VjdXJlIGZhbGNvbiByZXBvbnNpYmxlIGZvciBib290 c3RyYXBwaW5nIHRoZSBMUyBmYWxjb24KLSAqIEBsYXp5X2Jvb3RzdHJhcDoJc2tpcCBib290c3Ry YXBwaW5nIGJ5IEFDUgotICogQHN0YXR1czoJCWJvb3RzdHJhcHBpbmcgc3RhdHVzCi0gKgotICog QW4gYXJyYXkgb2YgdGhlc2UgaXMgd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBXUFIg cmVnaW9uLCBvbmUgZm9yCi0gKiBlYWNoIG1hbmFnZWQgZmFsY29uLiBUaGUgYXJyYXkgaXMgdGVy bWluYXRlZCBieSBhbiBpbnN0YW5jZSB3aGljaCBmYWxjb25faWQKLSAqIGlzIExTRl9GQUxDT05f SURfSU5WQUxJRC4KLSAqLwotc3RydWN0IGxzZl93cHJfaGVhZGVyIHsKLQl1MzIgZmFsY29uX2lk OwotCXUzMiBsc2Jfb2Zmc2V0OwotCXUzMiBib290c3RyYXBfb3duZXI7Ci0JdTMyIGxhenlfYm9v dHN0cmFwOwotCXUzMiBzdGF0dXM7Ci0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfTk9ORQkJCQkw Ci0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfQ09QWQkJCQkxCi0jZGVmaW5lIExTRl9JTUFHRV9T VEFUVVNfVkFMSURBVElPTl9DT0RFX0ZBSUxFRAkJMgotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVT X1ZBTElEQVRJT05fREFUQV9GQUlMRUQJCTMKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJ REFUSU9OX0RPTkUJCTQKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX1NLSVBQ RUQJCTUKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19CT09UU1RSQVBfUkVBRFkJCTYKLX07Ci0K LQotLyoqCi0gKiBzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgLSBkZXNjcmlwdG9yIG9mIGZpcm13 YXJlIGltYWdlCi0gKiBAZGVzY3JpcHRvcl9zaXplOgkJc2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IK LSAqIEBpbWFnZV9zaXplOgkJCXNpemUgb2YgdGhlIHdob2xlIGltYWdlCi0gKiBAYm9vdGxvYWRl cl9zdGFydF9vZmZzZXQ6CXN0YXJ0IG9mZnNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiB1Y29kZSBp bWFnZQotICogQGJvb3Rsb2FkZXJfc2l6ZToJCXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIKLSAqIEBi b290bG9hZGVyX2ltZW1fb2Zmc2V0OglzdGFydCBvZmYgc2V0IG9mIHRoZSBib290bG9hZGVyIGlu IElNRU0KLSAqIEBib290bG9hZGVyX2VudHJ5X3BvaW50OgllbnRyeSBwb2ludCBvZiB0aGUgYm9v dGxvYWRlciBpbiBJTUVNCi0gKiBAYXBwX3N0YXJ0X29mZnNldDoJCXN0YXJ0IG9mZnNldCBvZiB0 aGUgTFMgZmlybXdhcmUKLSAqIEBhcHBfc2l6ZToJCQlzaXplIG9mIHRoZSBMUyBmaXJtd2FyZSdz IGNvZGUgYW5kIGRhdGEKLSAqIEBhcHBfaW1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGFwcCBp biBJTUVNCi0gKiBAYXBwX2ltZW1fZW50cnk6CQllbnRyeSBwb2ludCBvZiB0aGUgYXBwIGluIElN RU0KLSAqIEBhcHBfZG1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGRhdGEgaW4gRE1FTQotICog QGFwcF9yZXNpZGVudF9jb2RlX29mZnNldDoJb2Zmc2V0IG9mIGFwcCBjb2RlIGZyb20gYXBwX3N0 YXJ0X29mZnNldAotICogQGFwcF9yZXNpZGVudF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGNvZGUK LSAqIEBhcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQ6CW9mZnNldCBvZiBkYXRhIGZyb20gYXBwX3N0 YXJ0X29mZnNldAotICogQGFwcF9yZXNpZGVudF9kYXRhX3NpemU6CXNpemUgb2YgZGF0YQotICoK LSAqIEEgZmlybXdhcmUgaW1hZ2UgY29udGFpbnMgdGhlIGNvZGUsIGRhdGEsIGFuZCBib290bG9h ZGVyIG9mIGEgZ2l2ZW4gTFMKLSAqIGZhbGNvbiBpbiBhIHNpbmdsZSBibG9iLiBUaGlzIHN0cnVj dHVyZSBkZXNjcmliZXMgd2hlcmUgZXZlcnl0aGluZyBpcy4KLSAqCi0gKiBUaGlzIGNhbiBiZSBn ZW5lcmF0ZWQgZnJvbSBhIChib290bG9hZGVyLCBjb2RlLCBkYXRhKSBzZXQgaWYgdGhleSBoYXZl Ci0gKiBiZWVuIGxvYWRlZCBzZXBhcmF0ZWx5LCBvciBjb21lIGRpcmVjdGx5IGZyb20gYSBmaWxl LgotICovCi1zdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgewotCXUzMiBkZXNjcmlwdG9yX3NpemU7 Ci0JdTMyIGltYWdlX3NpemU7Ci0JdTMyIHRvb2xzX3ZlcnNpb247Ci0JdTMyIGFwcF92ZXJzaW9u OwotCWNoYXIgZGF0ZVs2NF07Ci0JdTMyIGJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0OwotCXUzMiBi b290bG9hZGVyX3NpemU7Ci0JdTMyIGJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ7Ci0JdTMyIGJvb3Rs b2FkZXJfZW50cnlfcG9pbnQ7Ci0JdTMyIGFwcF9zdGFydF9vZmZzZXQ7Ci0JdTMyIGFwcF9zaXpl OwotCXUzMiBhcHBfaW1lbV9vZmZzZXQ7Ci0JdTMyIGFwcF9pbWVtX2VudHJ5OwotCXUzMiBhcHBf ZG1lbV9vZmZzZXQ7Ci0JdTMyIGFwcF9yZXNpZGVudF9jb2RlX29mZnNldDsKLQl1MzIgYXBwX3Jl c2lkZW50X2NvZGVfc2l6ZTsKLQl1MzIgYXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OwotCXUzMiBh cHBfcmVzaWRlbnRfZGF0YV9zaXplOwotCXUzMiBuYl9vdmVybGF5czsKLQlzdHJ1Y3Qge3UzMiBz dGFydDsgdTMyIHNpemU7IH0gbG9hZF9vdmxbNjRdOwotCXUzMiBjb21wcmVzc2VkOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgbHNfdWNvZGVfaW1nIC0gdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGxvYWRl ZCBMUyBmaXJtd2FyZXMKLSAqIEBub2RlOgkJdG8gbGluayB3aXRoaW4gbHNmX3Vjb2RlX21ncgot ICogQGZhbGNvbl9pZDoJCUlEIG9mIHRoZSBmYWxjb24gdGhpcyBMUyBmaXJtd2FyZSBpcyBmb3IK LSAqIEB1Y29kZV9kZXNjOgkJbG9hZGVkIG9yIGdlbmVyYXRlZCBtYXAgb2YgdWNvZGVfZGF0YQot ICogQHVjb2RlX2hlYWRlcjoJaGVhZGVyIG9mIHRoZSBmaXJtd2FyZQotICogQHVjb2RlX2RhdGE6 CQlmaXJtd2FyZSBwYXlsb2FkIChjb2RlIGFuZCBkYXRhKQotICogQHVjb2RlX3NpemU6CQlzaXpl IGluIGJ5dGVzIG9mIGRhdGEgaW4gdWNvZGVfZGF0YQotICogQHdwcl9oZWFkZXI6CQlXUFIgaGVh ZGVyIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIExTIGJsb2IKLSAqIEBsc2JfaGVhZGVyOgkJTFNCIGhl YWRlciB0byBiZSB3cml0dGVuIHRvIHRoZSBMUyBibG9iCi0gKgotICogUHJlcGFyaW5nIHRoZSBX UFIgTFMgYmxvYiByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIExTIGZpcm13YXJl cwotICogKHNpemUsIGV0YykgdG8gYmUga25vd24uIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFs bCB0aGUgZGF0YSBvZiBvbmUgTFMKLSAqIGZpcm13YXJlLgotICovCi1zdHJ1Y3QgbHNfdWNvZGVf aW1nIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JZW51bSBudmttX2ZhbGNvbmlkeCBmYWxj b25faWQ7Ci0KLQlzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgdWNvZGVfZGVzYzsKLQl1MzIgKnVj b2RlX2hlYWRlcjsKLQl1OCAqdWNvZGVfZGF0YTsKLQl1MzIgdWNvZGVfc2l6ZTsKLQotCXN0cnVj dCBsc2Zfd3ByX2hlYWRlciB3cHJfaGVhZGVyOwotCXN0cnVjdCBsc2ZfbHNiX2hlYWRlciBsc2Jf aGVhZGVyOwotfTsKIAogc3RydWN0IGZsY25fdTY0IHsKIAl1MzIgbG87CkBAIC0yMzMsMTUwICs2 MCw0IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZsY25fdTY0IHU2NF90b19mbGNuNjQodTY0IHUp CiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBHTTIwMF9BQ1JfTUFYX0FQUFMgOAotCi1zdHJ1 Y3QgaHNmX2xvYWRfaGVhZGVyX2FwcCB7Ci0JdTMyIHNlY19jb2RlX29mZjsKLQl1MzIgc2VjX2Nv ZGVfc2l6ZTsKLX07Ci0KLS8qKgotICogc3RydWN0IGhzZl9sb2FkX2hlYWRlciAtIEhTIGZpcm13 YXJlIGxvYWQgaGVhZGVyCi0gKi8KLXN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgewotCXUzMiBub25f c2VjX2NvZGVfb2ZmOwotCXUzMiBub25fc2VjX2NvZGVfc2l6ZTsKLQl1MzIgZGF0YV9kbWFfYmFz ZTsKLQl1MzIgZGF0YV9zaXplOwotCXUzMiBudW1fYXBwczsKLQlzdHJ1Y3QgaHNmX2xvYWRfaGVh ZGVyX2FwcCBhcHBbMF07Ci19OwotCi0vKioKLSAqIHN0cnVjdCBzZWNib290X2xzX3NpbmdsZV9m dW5jIC0gbWFuYWdlcyBhIHNpbmdsZSBMUyBmaXJtd2FyZQotICoKLSAqIEBsb2FkOiBsb2FkIHRo ZSBleHRlcm5hbCBmaXJtd2FyZSBpbnRvIGEgbHNfdWNvZGVfaW1nCi0gKiBAZ2VuZXJhdGVfYmxf ZGVzYzogZnVuY3Rpb24gY2FsbGVkIG9uIGEgYmxvY2sgb2YgYmxfZGVzY19zaXplIHRvIGdlbmVy YXRlIHRoZQotICoJCSAgICAgIHByb3BlciBib290bG9hZGVyIGRlc2NyaXB0b3IgZm9yIHRoaXMg TFMgZmlybXdhcmUKLSAqIEBibF9kZXNjX3NpemU6IHNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgZGVz Y3JpcHRvcgotICovCi1zdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYyB7Ci0JaW50ICgqbG9h ZCkoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7Ci0J dm9pZCAoKmdlbmVyYXRlX2JsX2Rlc2MpKGNvbnN0IHN0cnVjdCBsc191Y29kZV9pbWcgKiwgdTY0 LCB2b2lkICopOwotCXUzMiBibF9kZXNjX3NpemU7Ci19OwotCi0vKioKLSAqIHR5cGVkZWYgc2Vj Ym9vdF9sc19mdW5jIC0gbWFuYWdlcyBhbGwgdGhlIExTIGZpcm13YXJlcyBmb3IgdGhpcyBBQ1IK LSAqLwotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYyAqCi1zZWNi b290X2xzX2Z1bmNbTlZLTV9GQUxDT05fRU5EXTsKLQotaW50IGdtMjAwX2xzX2xvYWRfZmVjcyhj b25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKLWludCBn bTIwMF9sc19sb2FkX2dwY2NzKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqLCBzdHJ1Y3QgbHNf dWNvZGVfaW1nICopOwotCi0vKioKLSAqIENvbnRhaW5zIHRoZSB3aG9sZSBzZWN1cmUgYm9vdCBz dGF0ZSwgYWxsb3dpbmcgaXQgdG8gYmUgcGVyZm9ybWVkIGFzIG5lZWRlZAotICogQHdwcl9hZGRy OgkJcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgV1BSIHJlZ2lvbgotICogQHdwcl9zaXplOgkJc2l6 ZSBpbiBieXRlcyBvZiB0aGUgV1BSIHJlZ2lvbgotICogQGxzX2Jsb2I6CQlMUyBibG9iIG9mIGFs bCB0aGUgTFMgZmlybXdhcmVzLCBzaWduYXR1cmVzLCBib290bG9hZGVycwotICogQGxzX2Jsb2Jf c2l6ZToJc2l6ZSBvZiB0aGUgTFMgYmxvYgotICogQGxzX2Jsb2JfbmJfcmVnaW9uczoJbnVtYmVy IG9mIExTIGZpcm13YXJlcyB0aGF0IHdpbGwgYmUgbG9hZGVkCi0gKiBAYWNyX2Jsb2I6CQlIUyBi bG9iCi0gKiBAYWNyX2Jsb2Jfdm1hOgltYXBwaW5nIG9mIHRoZSBIUyBibG9iIGludG8gdGhlIHNl Y3VyZSBmYWxjb24ncyBWTQotICogQGFjcl9ibF9kZXNjOglib290bG9hZGVyIGRlc2NyaXB0b3Ig b2YgdGhlIEhTIGJsb2IKLSAqIEBoc2JsX2Jsb2I6CQlIUyBibG9iIGJvb3Rsb2FkZXIKLSAqIEBp bnN0OgkJaW5zdGFuY2UgYmxvY2sgZm9yIEhTIGZhbGNvbgotICogQHBnZDoJCXBhZ2UgZGlyZWN0 b3J5IGZvciB0aGUgSFMgZmFsY29uCi0gKiBAdm06CQkJYWRkcmVzcyBzcGFjZSB1c2VkIGJ5IHRo ZSBIUyBmYWxjb24KLSAqIEBmYWxjb25fc3RhdGU6CWN1cnJlbnQgc3RhdGUgb2YgdGhlIG1hbmFn ZWQgZmFsY29ucwotICogQGZpcm13YXJlX29rOgl3aGV0aGVyIHRoZSBmaXJtd2FyZSBibG9icyBo YXZlIGJlZW4gY3JlYXRlZAotICovCi1zdHJ1Y3QgZ20yMDBfc2VjYm9vdCB7Ci0Jc3RydWN0IG52 a21fc2VjYm9vdCBiYXNlOwotCWNvbnN0IHN0cnVjdCBnbTIwMF9zZWNib290X2Z1bmMgKmZ1bmM7 Ci0JY29uc3Qgc2VjYm9vdF9sc19mdW5jICpsc19mdW5jOwotCi0JLyoKLQkgKiBBZGRyZXNzIGFu ZCBzaXplIG9mIHRoZSBmaXhlZCBXUFIgcmVnaW9uLCBpZiBhbnkuIE9uIFRlZ3JhIHRoaXMKLQkg KiByZWdpb24gaXMgc2V0IGJ5IHRoZSBib290bG9hZGVyCi0JICovCi0JdTY0IHdwcl9hZGRyOwot CXUzMiB3cHJfc2l6ZTsKLQotCS8qCi0JICogQWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgYWN0dWFs IFdQUiByZWdpb24uCi0JICovCi0JdTY0IGFjcl93cHJfYWRkcjsKLQl1MzIgYWNyX3dwcl9zaXpl OwotCi0JLyoKLQkgKiBIUyBGVyAtIGxvY2sgV1BSIHJlZ2lvbiAoZEdQVSBvbmx5KSBhbmQgbG9h ZCBMUyBGV3MKLQkgKiBvbiBUZWdyYSB0aGUgSFMgRlcgY29waWVzIHRoZSBMUyBibG9iIGludG8g dGhlIGZpeGVkIFdQUiBpbnN0ZWFkCi0JICovCi0Jc3RydWN0IG52a21fZ3B1b2JqICphY3JfbG9h ZF9ibG9iOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCBoc2ZfbG9hZF9oZWFkZXIgbG9hZF9ibF9oZWFk ZXI7Ci0JCXN0cnVjdCBoc2ZfbG9hZF9oZWFkZXJfYXBwIF9fbG9hZF9hcHBzW0dNMjAwX0FDUl9N QVhfQVBQU107Ci0JfTsKLQotCS8qIEhTIEZXIC0gdW5sb2NrIFdQUiByZWdpb24gKGRHUFUgb25s eSkgKi8KLQlzdHJ1Y3QgbnZrbV9ncHVvYmogKmFjcl91bmxvYWRfYmxvYjsKLQlzdHJ1Y3Qgewot CQlzdHJ1Y3QgaHNmX2xvYWRfaGVhZGVyIHVubG9hZF9ibF9oZWFkZXI7Ci0JCXN0cnVjdCBoc2Zf bG9hZF9oZWFkZXJfYXBwIF9fdW5sb2FkX2FwcHNbR00yMDBfQUNSX01BWF9BUFBTXTsKLQl9Owot Ci0JLyogSFMgYm9vdGxvYWRlciAqLwotCXZvaWQgKmhzYmxfYmxvYjsKLQotCS8qIExTIEZXcywg dG8gYmUgbG9hZGVkIGJ5IHRoZSBIUyBBQ1IgKi8KLQlzdHJ1Y3QgbnZrbV9ncHVvYmogKmxzX2Js b2I7Ci0KLQkvKiBJbnN0YW5jZSBibG9jayAmIGFkZHJlc3Mgc3BhY2UgdXNlZCBmb3IgSFMgRlcg ZXhlY3V0aW9uICovCi0Jc3RydWN0IG52a21fZ3B1b2JqICppbnN0OwotCXN0cnVjdCBudmttX2dw dW9iaiAqcGdkOwotCXN0cnVjdCBudmttX3ZtICp2bTsKLQotCS8qIFRvIGtlZXAgdHJhY2sgb2Yg dGhlIHN0YXRlIG9mIGFsbCBtYW5hZ2VkIGZhbGNvbnMgKi8KLQllbnVtIHsKLQkJLyogSW4gbm9u LXNlY3VyZSBzdGF0ZSwgbm8gZmlybXdhcmUgbG9hZGVkLCBubyBwcml2aWxlZ2VzKi8KLQkJTk9O X1NFQ1VSRSA9IDAsCi0JCS8qIEluIGxvdy1zZWN1cmUgbW9kZSBhbmQgcmVhZHkgdG8gYmUgc3Rh cnRlZCAqLwotCQlSRVNFVCwKLQkJLyogSW4gbG93LXNlY3VyZSBtb2RlIGFuZCBydW5uaW5nICov Ci0JCVJVTk5JTkcsCi0JfSBmYWxjb25fc3RhdGVbTlZLTV9GQUxDT05fRU5EXTsKLQotCWJvb2wg ZmlybXdhcmVfb2s7Ci19OwotI2RlZmluZSBnbTIwMF9zZWNib290KHNiKSBjb250YWluZXJfb2Yo c2IsIHN0cnVjdCBnbTIwMF9zZWNib290LCBiYXNlKQotCi0vKioKLSAqIENvbnRhaW5zIGZ1bmN0 aW9ucyB3ZSB3aXNoIHRvIGFic3RyYWN0IGJldHdlZW4gR00yMDAtbGlrZSBpbXBsZW1lbnRhdGlv bnMKLSAqIEBibF9kZXNjX3NpemU6CXNpemUgb2YgdGhlIEJMIGRlc2NyaXB0b3IgdXNlZCBieSB0 aGlzIGNoaXAuCi0gKiBAZ2VuZXJhdGVfYmxfZGVzYzoJaG9vayB0aGF0IGdlbmVyYXRlcyB0aGUg cHJvcGVyIEJMIGRlc2NyaXB0b3IgZm9ybWF0IGZyb20KLSAqCQkJdGhlIGhzZl9sb2FkX2hlYWRl ciBmb3JtYXQgaW50byBhIHByZWFsbG9jYXRlZCBhcnJheSBvZgotICoJCQlzaXplIGJsX2Rlc2Nf c2l6ZQotICogQHByZXBhcmVfYmxvYnM6CXByZXBhcmVzIHRoZSB2YXJpb3VzIGJsb2JzIG5lZWRl ZCBmb3Igc2VjdXJlIGJvb3RpbmcKLSAqLwotc3RydWN0IGdtMjAwX3NlY2Jvb3RfZnVuYyB7Ci0J LyoKLQkgKiBTaXplIG9mIHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IgZm9yIHRoaXMgY2hpcC4g QSBibG9jayBvZiB0aGlzCi0JICogc2l6ZSBpcyBhbGxvY2F0ZWQgYmVmb3JlIGJvb3RpbmcgYSBm YWxjb24gYW5kIHRoZSBmaXh1cF9ibF9kZXNjCi0JICogY2FsbGJhY2sgaXMgY2FsbGVkIG9uIGl0 Ci0JICovCi0JdTMyIGJsX2Rlc2Nfc2l6ZTsKLQl2b2lkICgqZ2VuZXJhdGVfYmxfZGVzYykoY29u c3Qgc3RydWN0IGhzZl9sb2FkX2hlYWRlciAqLCB2b2lkICosIHU2NCk7Ci0KLQlpbnQgKCpwcmVw YXJlX2Jsb2JzKShzdHJ1Y3QgZ20yMDBfc2VjYm9vdCAqKTsKLX07Ci0KLWludCBnbTIwMF9zZWNi b290X29uZWluaXQoc3RydWN0IG52a21fc2VjYm9vdCAqKTsKLXZvaWQgKmdtMjAwX3NlY2Jvb3Rf ZHRvcihzdHJ1Y3QgbnZrbV9zZWNib290ICopOwotaW50IGdtMjAwX3NlY2Jvb3RfcmVzZXQoc3Ry dWN0IG52a21fc2VjYm9vdCAqLCB1MzIpOwotaW50IGdtMjAwX3NlY2Jvb3Rfc3RhcnQoc3RydWN0 IG52a21fc2VjYm9vdCAqLCB1MzIpOwotCi1pbnQgZ20yMHhfc2VjYm9vdF9wcmVwYXJlX2Jsb2Jz KHN0cnVjdCBnbTIwMF9zZWNib290ICopOwotCiAjZW5kaWYKLS0gCjIuMTAuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxp c3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg==