From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754019AbeAIDXR (ORCPT + 1 other); Mon, 8 Jan 2018 22:23:17 -0500 Received: from mg.richtek.com ([220.130.44.152]:54710 "EHLO mg.richtek.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753793AbeAIDXO (ORCPT ); Mon, 8 Jan 2018 22:23:14 -0500 X-Greylist: delayed 604 seconds by postgrey-1.27 at vger.kernel.org; Mon, 08 Jan 2018 22:23:13 EST X-MailGates: (flag:3,DYNAMIC,RELAY,NOHOST:PASS)(compute_score:DELIVER,40 ,3) X-MailGates: (compute_score:DELIVER,40,3) From: =?utf-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= To: "heikki.krogerus@linux.intel.com" CC: "linux-kernel@vger.kernel.org" , =?utf-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= Subject: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Topic: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Index: AQHTiPTiopYmERehEUSmEYKJTcGIpw== Date: Tue, 9 Jan 2018 03:13:03 +0000 Message-ID: <1515467581323.96214@richtek.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [114.137.16.113] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: RnJvbTogU2h1RmFuIExlZSA8c2h1ZmFuX2xlZUByaWNodGVrLmNvbT4NCg0KUmljaHRlayBSVDE3 MTFIIFR5cGUtQyBjaGlwIGRyaXZlciB0aGF0IHdvcmtzIHdpdGgNClR5cGUtQyBQb3J0IENvbnRy b2xsZXIgTWFuYWdlciB0byBwcm92aWRlIFVTQiBQRCBhbmQNClVTQiBUeXBlLUMgZnVuY3Rpb25h bGl0aWVzLg0KDQpTaWduZWQtb2ZmLWJ5OiBTaHVGYW4gTGVlIDxzaHVmYW5fbGVlQHJpY2h0ZWsu Y29tPg0KLS0t4oCLDQoNCkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2Ivcmlj aHRlayxydDE3MTFoLnR4dCB8ICAgMzgNCmFyY2gvYXJtNjQvYm9vdC9kdHMvaGlzaWxpY29uL3J0 MTcxMWguZHRzaSAgICAgICAgICAgICAgICB8ICAgMTENCmRyaXZlcnMvdXNiL3R5cGVjL0tjb25m aWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDINCmRyaXZlcnMvdXNiL3R5 cGVjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDENCmRyaXZl cnMvdXNiL3R5cGVjL3J0MTcxMWgvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg IDcNCmRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDINCmRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvcnQxNzExaC5jICAgICAgICAg ICAgICAgICAgICAgICB8IDIyNDEgKysrKysrKysrKw0KZHJpdmVycy91c2IvdHlwZWMvcnQxNzEx aC9ydDE3MTFoLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDMwMCArDQo4IGZpbGVzIGNoYW5n ZWQsIDI2MDIgaW5zZXJ0aW9ucygrKQ0KDQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL3VzYi9yaWNodGVrLHJ0MTcxMWgudHh0IGIvRG9jdW1lbnRhdGlvbi9k ZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9yaWNodGVrLHJ0MTcxMWgudHh0DQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzI4Mjk5Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9yaWNodGVrLHJ0MTcxMWgudHh0DQpA QCAtMCwwICsxLDM4IEBADQorUmljaHRlayBSVDE3MTFIIFR5cGUtQyBQb3J0IENvbnRyb2xsZXIu DQorDQorUmVxdWlyZWQgcHJvcGVydGllczoNCistIGNvbXBhdGlibGUgOiBNdXN0IGJlICJyaWNo dGVrLHR5cGVjX3J0MTcxMWgiOw0KKy0gcmVnIDogTXVzdCBiZSAweDRlLCBpdCdzIGRlZmF1bHQg c2xhdmUgYWRkcmVzcyBvZiBSVDE3MTFILg0KKy0gcnQsaW50cl9ncGlvIDogSVJRIEdQSU8gcGlu IHRoYXQncyBjb25uZWN0ZWQgdG8gUlQxNzExSCBpbnRlcnJ1cHQuDQorDQorT3B0aW9uYWwgbm9k ZToNCistIHJ0LG5hbWUgOiBOYW1lIHVzZWQgZm9yIHJlZ2lzdGVyaW5nIElSUSBhbmQgY3JlYXRp bmcga3RocmVhZC4NCisgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLCAiZGVm YXVsdCIgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQsZGVmX3JvbGUgOiBEZWZhdWx0IHBvcnQgcm9s ZSAoVFlQRUNfU0lOSygwKSBvciBUWVBFQ19TT1VSQ0UoMSkpLg0KK1NldCB0byBUWVBFQ19OT19Q UkVGRVJSRURfUk9MRSgtMSkgaWYgbm8gZGVmYXVsdCByb2xlLg0KK0lmIHRoaXMgcHJvcGVydHkg aXMgbm90IHNwZWNpZmllZCwgVFlQRUNfU0lOSyB3aWxsIGJlIGFwcGxpZWQuDQorLSBydCxwb3J0 X3R5cGUgOiBQb3J0IHR5cGUgKFRZUEVDX1BPUlRfREZQKDApLCBUWVBFQ19QT1JUX1VGUCgxKSwN Cisgb3IgVFlQRUNfUE9SVF9EUlAoMikpLiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZp ZWQsDQorIFRZUEVDX1BPUlRfRFJQIHdpbGwgYmUgYXBwbGllZC4NCistIHJ0LG1heF9zbmtfbXYg OiBNYXhpbXVtIGFjY2VwdGFibGUgc2luayB2b2x0YWdlIGluIG1WLg0KKyAgSWYgdGhpcyBwcm9w ZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLCA1MDAwbVYgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQsbWF4 X3Nua19tYSA6IE1heGltdW0gc2luayBjdXJyZW50IGluIG1BLg0KKyAgSWYgdGhpcyBwcm9wZXJ0 eSBpcyBub3Qgc3BlY2lmaWVkLCAzMDAwbUEgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQsbWF4X3Nu a19tdyA6IE1heGltdW0gcmVxdWlyZWQgc2luayBwb3dlciBpbiBtVy4NCisgIElmIHRoaXMgcHJv cGVydHkgaXMgbm90IHNwZWNpZmllZCwgMTUwMDBtVyB3aWxsIGJlIGFwcGxpZWQuDQorLSBydCxv cGVyYXRpbmdfc25rX213IDogUmVxdWlyZWQgb3BlcmF0aW5nIHNpbmsgcG93ZXIgaW4gbVcuDQor SWYgdGhpcyBwcm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLA0KKzI1MDBtVyB3aWxsIGJlIGFwcGxp ZWQuDQorLSBydCx0cnlfcm9sZV9odyA6IFRydWUgaWYgdHJ5LntTcmMsU25rfSBpcyBpbXBsZW1l bnRlZCBpbiBoYXJkd2FyZS4NCisgICBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQs IEZhbHNlIHdpbGwgYmUgYXBwbGllZC4NCisNCitFeGFtcGxlOg0KK3J0MTcxMWhANGUgew0KK3N0 YXR1cyA9ICJvayI7DQorY29tcGF0aWJsZSA9ICJyaWNodGVrLHR5cGVjX3J0MTcxMWgiOw0KK3Jl ZyA9IDwweDRlPjsNCitydCxpbnRyX2dwaW8gPSA8JmdwaW8yNiAwIDB4MD47DQorcnQsbmFtZSA9 ICJydDE3MTFoIjsNCitydCxwb3J0X3R5cGUgPSA8Mj47IC8qIDA6IERGUCwgMTogVUZQLCAyOiBE UlAgKi8NCitydCxkZWZfcm9sZSA9IDwwPjsgLyogMDogU05LLCAxOiBTUkMsIC0xOiBUWVBFQ19O T19QUkVGRVJSRURfUk9MRSAqLw0KK307DQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0 cy9oaXNpbGljb24vcnQxNzExaC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9oaXNpbGljb24v cnQxNzExaC5kdHNpDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDE5NmNj MA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9oaXNpbGljb24vcnQx NzExaC5kdHNpDQpAQCAtMCwwICsxLDExIEBADQorJmkyYzcgew0KK3J0MTcxMWhANGUgew0KK3N0 YXR1cyA9ICJvayI7DQorY29tcGF0aWJsZSA9ICJyaWNodGVrLHR5cGVjX3J0MTcxMWgiOw0KK3Jl ZyA9IDwweDRlPjsNCitydCxpbnRyX2dwaW8gPSA8JmdwaW8yNiAwIDB4MD47DQorcnQsbmFtZSA9 ICJydDE3MTFoIjsNCitydCxwb3J0X3R5cGUgPSA8Mj47IC8qIDA6IERGUCwgMTogVUZQLCAyOiBE UlAgKi8NCitydCxkZWZfcm9sZSA9IDwwPjsgLyogMDogU05LLCAxOiBTUkMgKi8NCit9Ow0KK307 DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3R5 cGVjL0tjb25maWcNCmluZGV4IGJjYjI3NDQuLjdiZWRlMGIgMTAwNjQ0DQotLS0gYS9kcml2ZXJz L3VzYi90eXBlYy9LY29uZmlnDQorKysgYi9kcml2ZXJzL3VzYi90eXBlYy9LY29uZmlnDQpAQCAt NTYsNiArNTYsOCBAQCBpZiBUWVBFQ19UQ1BNDQoNCiBzb3VyY2UgImRyaXZlcnMvdXNiL3R5cGVj L2Z1c2IzMDIvS2NvbmZpZyINCg0KK3NvdXJjZSAiZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9L Y29uZmlnIg0KKw0KIGNvbmZpZyBUWVBFQ19XQ09WRQ0KIHRyaXN0YXRlICJJbnRlbCBXaGlza2V5 Q292ZSBQTUlDIFVTQiBUeXBlLUMgUEhZIGRyaXZlciINCiBkZXBlbmRzIG9uIEFDUEkNCmRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL01h a2VmaWxlDQppbmRleCBiYjMxMzhhLi5lM2FhZjNjIDEwMDY0NA0KLS0tIGEvZHJpdmVycy91c2Iv dHlwZWMvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL01ha2VmaWxlDQpAQCAtMiw2 ICsyLDcgQEANCiBvYmotJChDT05GSUdfVFlQRUMpKz0gdHlwZWMubw0KIG9iai0kKENPTkZJR19U WVBFQ19UQ1BNKSs9IHRjcG0ubw0KIG9iai15Kz0gZnVzYjMwMi8NCitvYmotJChDT05GSUdfVFlQ RUNfUlQxNzExSCkrPSBydDE3MTFoLw0KIG9iai0kKENPTkZJR19UWVBFQ19XQ09WRSkrPSB0eXBl Y193Y292ZS5vDQogb2JqLSQoQ09ORklHX1RZUEVDX1VDU0kpKz0gdWNzaS8NCiBvYmotJChDT05G SUdfVFlQRUNfVFBTNjU5OFgpKz0gdHBzNjU5OHgubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L3R5cGVjL3J0MTcxMWgvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvS2NvbmZp Zw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjJmYmZmZjUNCi0tLSAvZGV2 L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvS2NvbmZpZw0KQEAgLTAsMCAr MSw3IEBADQorY29uZmlnIFRZUEVDX1JUMTcxMUgNCit0cmlzdGF0ZSAiUmljaHRlayBSVDE3MTFI IFR5cGUtQyBjaGlwIGRyaXZlciINCitkZXBlbmRzIG9uIEkyQyAmJiBQT1dFUl9TVVBQTFkNCito ZWxwDQorICBUaGUgUmljaHRlayBSVDE3MTFIICAgVHlwZS1DIGNoaXAgZHJpdmVyIHRoYXQgd29y a3Mgd2l0aA0KKyAgVHlwZS1DIFBvcnQgQ29udHJvbGxlciBNYW5hZ2VyIHRvIHByb3ZpZGUgVVNC IFBEIGFuZCBVU0INCisgIFR5cGUtQyBmdW5jdGlvbmFsaXRpZXMuDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvdHlwZWMvcnQxNzExaC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcx MWgvTWFrZWZpbGUNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi41ZmFiOGFl DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL01ha2VmaWxl DQpAQCAtMCwwICsxLDIgQEANCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQor b2JqLSQoQ09ORklHX1RZUEVDX1JUMTcxMUgpKz0gcnQxNzExaC5vDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmMgYi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3 MTFoL3J0MTcxMWguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjFhZWYz ZTgNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvcnQxNzEx aC5jDQpAQCAtMCwwICsxLDIyNDEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCsNCisvKg0KKyAqIENvcHlyaWdodCAyMDE3IFJpY2h0ZWsgVGVjaG5vbG9naCBDb3JwLg0K KyAqDQorICogUmljaHRlayBSVDE3MTFIIFR5cGUtQyBDaGlwIERyaXZlcg0KKyAqLw0KKw0KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCisjaW5jbHVkZSA8bGludXgvZXJyLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KKyNp bmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3VzYi90Y3BtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3VzYi9wZC5oPg0KKyNp bmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNs dWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCisjaW5jbHVkZSA8bGludXgvcG93ZXJf c3VwcGx5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPg0KKyNpbmNsdWRlIDxsaW51eC93 b3JrcXVldWUuaD4NCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9jcHUuaD4NCisjaW5jbHVkZSA8bGludXgvYWxhcm10aW1lci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9zY2hlZC9jbG9jay5oPg0KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3NjaGVkL3R5cGVzLmg+DQor DQorI2luY2x1ZGUgInJ0MTcxMWguaCINCisNCisjZGVmaW5lIFJUMTcxMUhfRFJWX1ZFUlNJT04i MS4wLjMiDQorDQorI2RlZmluZSBMT0dfQlVGRkVSX0VOVFJJRVMxMDI0DQorI2RlZmluZSBMT0df QlVGRkVSX0VOVFJZX1NJWkUxMjggLyogMTI4IGNoYXIgcGVyIGxpbmUgKi8NCisNCitlbnVtIHsN CitSVDE3MTFIX0RCR19MT0cgPSAwLA0KK1JUMTcxMUhfREJHX1JFR1MsDQorUlQxNzExSF9EQkdf UkVHX0FERFIsDQorUlQxNzExSF9EQkdfREFUQSwNCitSVDE3MTFIX0RCR19NQVgsDQorfTsNCisN CitzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyB7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcDsN CitpbnQgaWQ7DQorfTsNCisNCisNCitzdHJ1Y3QgcnQxNzExaF9jaGlwIHsNCitzdHJ1Y3QgaTJj X2NsaWVudCAqaTJjOw0KK3N0cnVjdCBkZXZpY2UgKmRldjsNCit1aW50MTZfdCBkaWQ7DQoraW50 IGlycV9ncGlvOw0KK2ludCBpcnE7DQorY2hhciAqbmFtZTsNCitzdHJ1Y3QgdGNwY19kZXYgdGNw Y19kZXY7DQorc3RydWN0IHRjcGNfY29uZmlnIHRjcGNfY2ZnOw0KK3N0cnVjdCB0Y3BtX3BvcnQg KnRjcG1fcG9ydDsNCitzdHJ1Y3QgcmVndWxhdG9yICp2YnVzOw0KK3N0cnVjdCBleHRjb25fZGV2 ICpleHRjb247DQorDQorLyogSVJRICovDQorc3RydWN0IGt0aHJlYWRfd29ya2VyIGlycV93b3Jr ZXI7DQorc3RydWN0IGt0aHJlYWRfd29yayBpcnFfd29yazsNCitzdHJ1Y3QgdGFza19zdHJ1Y3Qg KmlycV93b3JrZXJfdGFzazsNCithdG9taWNfdCBwb2xsX2NvdW50Ow0KK3N0cnVjdCBkZWxheWVk X3dvcmsgcG9sbF93b3JrOw0KKw0KKy8qIExQTSAqLw0KK3N0cnVjdCBkZWxheWVkX3dvcmsgd2Fr ZXVwX3dvcms7DQorc3RydWN0IGFsYXJtIHdha2V1cF90aW1lcjsNCitzdHJ1Y3QgbXV0ZXggd2Fr ZXVwX2xvY2s7DQorZW51bSB0eXBlY19jY19wdWxsIGxwbV9wdWxsOw0KK2Jvb2wgd2FrZXVwX29u Y2U7DQorYm9vbCBsb3dfcnBfZHV0eV9jbnRkb3duOw0KK2Jvb2wgY2FibGVfb25seTsNCitib29s IGxwbTsNCisNCisvKiBJMkMgKi8NCithdG9taWNfdCBpMmNfYnVzeTsNCithdG9taWNfdCBwbV9z dXNwZW5kOw0KKw0KKy8qIHBzeSArIHBzeSBzdGF0dXMgKi8NCitzdHJ1Y3QgcG93ZXJfc3VwcGx5 ICpwc3k7DQordTMyIGN1cnJlbnRfbGltaXQ7DQordTMyIHN1cHBseV92b2x0YWdlOw0KKw0KKy8q IGxvY2sgZm9yIHNoYXJpbmcgY2hpcCBzdGF0ZXMgKi8NCitzdHJ1Y3QgbXV0ZXggbG9jazsNCisN CisvKiBwb3J0IHN0YXR1cyAqLw0KK2Jvb2wgdmNvbm5fb247DQorYm9vbCB2YnVzX29uOw0KK2Jv b2wgY2hhcmdlX29uOw0KK2Jvb2wgdmJ1c19wcmVzZW50Ow0KK2VudW0gdHlwZWNfY2NfcG9sYXJp dHkgcG9sYXJpdHk7DQorZW51bSB0eXBlY19jY19zdGF0dXMgY2MxOw0KK2VudW0gdHlwZWNfY2Nf c3RhdHVzIGNjMjsNCitlbnVtIHR5cGVjX3JvbGUgcHdyX3JvbGU7DQorYm9vbCBkcnBfdG9nZ2xp bmc7DQorDQorI2lmZGVmIENPTkZJR19ERUJVR19GUw0KK3N0cnVjdCBkZW50cnkgKmRiZ2RpcjsN CitzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyBkYmdfaW5mb1tSVDE3MTFIX0RCR19NQVhdOw0KK3N0 cnVjdCBkZW50cnkgKmRiZ19maWxlc1tSVDE3MTFIX0RCR19NQVhdOw0KK2ludCBkYmdfcmVnaWR4 Ow0KK3N0cnVjdCBtdXRleCBkYmdvcHNfbG9jazsNCisvKiBsb2NrIGZvciBsb2cgYnVmZmVyIGFj Y2VzcyAqLw0KK3N0cnVjdCBtdXRleCBsb2didWZmZXJfbG9jazsNCitpbnQgbG9nYnVmZmVyX2hl YWQ7DQoraW50IGxvZ2J1ZmZlcl90YWlsOw0KK3U4ICpsb2didWZmZXJbTE9HX0JVRkZFUl9FTlRS SUVTXTsNCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovDQorfTsNCisNCisvKg0KKyAqIExv Z2dpbmcgJiBkZWJ1Z2dpbmcNCisgKi8NCisNCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQorDQor c3RhdGljIGludCBydDE3MTFoX3JlZ19ibG9ja19yZWFkKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNo aXAsIHVpbnQ4X3QgcmVnLA0KK2ludCBsZW4sIHVpbnQ4X3QgKmRhdGEpOw0KK3N0YXRpYyBpbnQg cnQxNzExaF9yZWdfYmxvY2tfd3JpdGUoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhf dCByZWcsDQoraW50IGxlbiwgY29uc3QgdWludDhfdCAqZGF0YSk7DQorDQorc3RydWN0IHJlZ19k ZXNjIHsNCit1aW50OF90IGFkZHI7DQordWludDhfdCBzaXplOw0KK307DQorI2RlZmluZSBERUNM X1JFRyhfYWRkciwgX3NpemUpIHsuYWRkciA9IF9hZGRyLCAuc2l6ZSA9IF9zaXplfQ0KKw0KK3N0 YXRpYyBzdHJ1Y3QgcmVnX2Rlc2MgcnQxNzExaF9yZWdfZGVzY1tdID0gew0KK0RFQ0xfUkVHKFJU MTcxMUhfUkVHX1ZJRCwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUElELCAyKSwNCitERUNM X1JFRyhSVDE3MTFIX1JFR19ESUQsIDIpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RZUEVDX1JF ViwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUERfUkVWLCAyKSwNCitERUNMX1JFRyhSVDE3 MTFIX1JFR19QRElGX1JFViwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfQUxFUlQsIDIpLA0K K0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FMRVJUX01BU0ssIDIpLA0KK0RFQ0xfUkVHKFJUMTcxMUhf UkVHX1BPV0VSX1NUQVRVU19NQVNLLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19GQVVMVF9T VEFUVVNfTUFTSywgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfVENQQ19DVFJMLCAxKSwNCitE RUNMX1JFRyhSVDE3MTFIX1JFR19ST0xFX0NUUkwsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVH X0ZBVUxUX0NUUkwsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1BPV0VSX0NUUkwsIDEpLA0K K0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0NDX1NUQVRVUywgMSksDQorREVDTF9SRUcoUlQxNzExSF9S RUdfUE9XRVJfU1RBVFVTLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVMs IDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0NPTU1BTkQsIDEpLA0KK0RFQ0xfUkVHKFJUMTcx MUhfUkVHX01TR19IRFJfSU5GTywgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUlhfREVURUNU LCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19SWF9CWVRFX0NOVCwgMSksDQorREVDTF9SRUco UlQxNzExSF9SRUdfUlhfQlVGX0ZSQU1FX1RZUEUsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVH X1JYX0hEUiwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUlhfREFUQSwgMSksDQorREVDTF9S RUcoUlQxNzExSF9SRUdfVFJBTlNNSVQsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RYX0JZ VEVfQ05ULCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19UWF9IRFIsIDIpLA0KK0RFQ0xfUkVH KFJUMTcxMUhfUkVHX1RYX0RBVEEsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0NMS19DVFJM MiwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfQ0xLX0NUUkwzLCAxKSwNCitERUNMX1JFRyhS VDE3MTFIX1JFR19CTUNfQ1RSTCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfQk1DSU9fUlhE WlNFTCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfVkNPTk5fQ0xJTUlURU4sIDEpLA0KK0RF Q0xfUkVHKFJUMTcxMUhfUkVHX1JUX1NUQVRVUywgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdf UlRfSU5ULCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19SVF9NQVNLLCAxKSwNCitERUNMX1JF RyhSVDE3MTFIX1JFR19JRExFX0NUUkwsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0lOVFJT VF9DVFJMLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19XQVRDSERPR19DVFJMLCAxKSwNCitE RUNMX1JFRyhSVDE3MTFIX1JFR19JMkNSU1RfQ1RSTCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9S RUdfU1dSRVNFVCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfVFRDUENfRklMVEVSLCAxKSwN CitERUNMX1JFRyhSVDE3MTFIX1JFR19EUlBfVE9HR0xFX0NZQ0xFLCAxKSwNCitERUNMX1JFRyhS VDE3MTFIX1JFR19EUlBfRFVUWV9DVFJMLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19CTUNJ T19SWERaRU4sIDEpLA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKnJ0MTcxMWhfZGJnX2Zp bGVuYW1lW1JUMTcxMUhfREJHX01BWF0gPSB7DQorImxvZyIsICJyZWdzIiwgInJlZ19hZGRyIiwg ImRhdGEiLA0KK307DQorDQorc3RhdGljIGJvb2wgcnQxNzExaF9sb2dfZnVsbChzdHJ1Y3QgcnQx NzExaF9jaGlwICpjaGlwKQ0KK3sNCityZXR1cm4gY2hpcC0+bG9nYnVmZmVyX3RhaWwgPT0NCiso Y2hpcC0+bG9nYnVmZmVyX2hlYWQgKyAxKSAlIExPR19CVUZGRVJfRU5UUklFUzsNCit9DQorDQor c3RhdGljIHZvaWQgX3J0MTcxMWhfbG9nKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIGNvbnN0 IGNoYXIgKmZtdCwNCisgdmFfbGlzdCBhcmdzKQ0KK3sNCitjaGFyIHRtcGJ1ZmZlcltMT0dfQlVG RkVSX0VOVFJZX1NJWkVdOw0KK3U2NCB0c19uc2VjID0gbG9jYWxfY2xvY2soKTsNCit1bnNpZ25l ZCBsb25nIHJlbV9uc2VjOw0KKw0KK2lmICghY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxvZ2J1ZmZl cl9oZWFkXSkgew0KK2NoaXAtPmxvZ2J1ZmZlcltjaGlwLT5sb2didWZmZXJfaGVhZF0gPQ0KK2Rl dm1fa3phbGxvYyhjaGlwLT5kZXYsIExPR19CVUZGRVJfRU5UUllfU0laRSwgR0ZQX0tFUk5FTCk7 DQoraWYgKCFjaGlwLT5sb2didWZmZXJbY2hpcC0+bG9nYnVmZmVyX2hlYWRdKQ0KK3JldHVybjsN Cit9DQorDQordnNucHJpbnRmKHRtcGJ1ZmZlciwgc2l6ZW9mKHRtcGJ1ZmZlciksIGZtdCwgYXJn cyk7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KKw0KK2lmIChydDE3 MTFoX2xvZ19mdWxsKGNoaXApKSB7DQorY2hpcC0+bG9nYnVmZmVyX2hlYWQgPSBtYXgoY2hpcC0+ bG9nYnVmZmVyX2hlYWQgLSAxLCAwKTsNCitzdHJsY3B5KHRtcGJ1ZmZlciwgIm92ZXJmbG93Iiwg c2l6ZW9mKHRtcGJ1ZmZlcikpOw0KK30NCisNCitpZiAoY2hpcC0+bG9nYnVmZmVyX2hlYWQgPCAw IHx8DQorY2hpcC0+bG9nYnVmZmVyX2hlYWQgPj0gTE9HX0JVRkZFUl9FTlRSSUVTKSB7DQorZGV2 X3dhcm4oY2hpcC0+ZGV2LCAiJXMgYmFkIGxvZyBidWZmZXIgaW5kZXggJWRcbiIsIF9fZnVuY19f LA0KK2NoaXAtPmxvZ2J1ZmZlcl9oZWFkKTsNCitnb3RvIGFib3J0Ow0KK30NCisNCitpZiAoIWNo aXAtPmxvZ2J1ZmZlcltjaGlwLT5sb2didWZmZXJfaGVhZF0pIHsNCitkZXZfd2FybihjaGlwLT5k ZXYsICIlcyBsb2cgYnVmZmVyIGluZGV4ICVkIGlzIE5VTExcbiIsDQorX19mdW5jX18sIGNoaXAt PmxvZ2J1ZmZlcl9oZWFkKTsNCitnb3RvIGFib3J0Ow0KK30NCisNCityZW1fbnNlYyA9IGRvX2Rp dih0c19uc2VjLCAxMDAwMDAwMDAwKTsNCitzY25wcmludGYoY2hpcC0+bG9nYnVmZmVyW2NoaXAt PmxvZ2J1ZmZlcl9oZWFkXSwgTE9HX0JVRkZFUl9FTlRSWV9TSVpFLA0KKyJbJTVsdS4lMDZsdV0g JXMiLCAodW5zaWduZWQgbG9uZyl0c19uc2VjLCByZW1fbnNlYyAvIDEwMDAsDQorICB0bXBidWZm ZXIpOw0KK2NoaXAtPmxvZ2J1ZmZlcl9oZWFkID0gKGNoaXAtPmxvZ2J1ZmZlcl9oZWFkICsgMSkg JSBMT0dfQlVGRkVSX0VOVFJJRVM7DQorDQorYWJvcnQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5s b2didWZmZXJfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfbG9nKHN0cnVjdCBy dDE3MTFoX2NoaXAgKmNoaXAsDQorY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KK3ZhX2xpc3Qg YXJnczsNCisNCit2YV9zdGFydChhcmdzLCBmbXQpOw0KK19ydDE3MTFoX2xvZyhjaGlwLCBmbXQs IGFyZ3MpOw0KK3ZhX2VuZChhcmdzKTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2xvZ19z aG93KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHN0cnVjdCBzZXFfZmlsZSAqcykNCit7DQor aW50IHRhaWw7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KK3RhaWwg PSBjaGlwLT5sb2didWZmZXJfdGFpbDsNCit3aGlsZSAodGFpbCAhPSBjaGlwLT5sb2didWZmZXJf aGVhZCkgew0KK3NlcV9wcmludGYocywgIiVzIiwgY2hpcC0+bG9nYnVmZmVyW3RhaWxdKTsNCit0 YWlsID0gKHRhaWwgKyAxKSAlIExPR19CVUZGRVJfRU5UUklFUzsNCit9DQoraWYgKCFzZXFfaGFz X292ZXJmbG93ZWQocykpDQorY2hpcC0+bG9nYnVmZmVyX3RhaWwgPSB0YWlsOw0KK211dGV4X3Vu bG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KKw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IHJ0MTcxMWhfcmVnc19zaG93KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHN0cnVj dCBzZXFfZmlsZSAqcykNCit7DQoraW50IHJldCA9IDA7DQoraW50IGkgPSAwLCBqID0gMDsNCitz dHJ1Y3QgcmVnX2Rlc2MgKmRlc2MgPSBOVUxMOw0KK3VpbnQ4X3QgcmVndmFsWzJdID0gezB9Ow0K Kw0KK2ZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0MTcxMWhfcmVnX2Rlc2MpOyBpKyspIHsN CitkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2NbaV07DQorcmV0ID0gcnQxNzExaF9yZWdfYmxvY2tf cmVhZChjaGlwLCBkZXNjLT5hZGRyLCBkZXNjLT5zaXplLA0KK3JlZ3ZhbCk7DQoraWYgKHJldCA8 IDApIHsNCitkZXZfZXJyKGNoaXAtPmRldiwgIiVzIHJlYWQgcmVnMHglMDJYIGZhaWxcbiIsDQor X19mdW5jX18sIGRlc2MtPmFkZHIpOw0KK2NvbnRpbnVlOw0KK30NCisNCitzZXFfcHJpbnRmKHMs ICJyZWcweCUwMng6MHgiLCBkZXNjLT5hZGRyKTsNCitmb3IgKGogPSAwOyBqIDwgZGVzYy0+c2l6 ZTsgaisrKQ0KK3NlcV9wcmludGYocywgIiUwMngsIiwgcmVndmFsW2pdKTsNCitzZXFfcHV0cyhz LCAiXG4iKTsNCit9DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0 MTcxMWhfcmVnX2FkZHJfc2hvdyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLA0KK3N0cnVjdCBz ZXFfZmlsZSAqcykNCit7DQorc3RydWN0IHJlZ19kZXNjICpkZXNjID0gJnJ0MTcxMWhfcmVnX2Rl c2NbY2hpcC0+ZGJnX3JlZ2lkeF07DQorDQorc2VxX3ByaW50ZihzLCAiMHglMDJ4XG4iLCBkZXNj LT5hZGRyKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcnQxNzExaF9k YXRhX3Nob3coc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwNCitzdHJ1Y3Qgc2VxX2ZpbGUgKnMp DQorew0KK2ludCByZXQgPSAwLCBpID0gMDsNCitzdHJ1Y3QgcmVnX2Rlc2MgKmRlc2MgPSAmcnQx NzExaF9yZWdfZGVzY1tjaGlwLT5kYmdfcmVnaWR4XTsNCit1aW50OF90IHJlZ3ZhbFsyXSA9IHsw fTsNCisNCityZXQgPSBydDE3MTFoX3JlZ19ibG9ja19yZWFkKGNoaXAsIGRlc2MtPmFkZHIsIGRl c2MtPnNpemUsIHJlZ3ZhbCk7DQoraWYgKHJldCA8IDApDQorcmV0dXJuIHJldDsNCisNCitzZXFf cHJpbnRmKHMsICJyZWcweCUwMng9MHgiLCBkZXNjLT5hZGRyKTsNCitmb3IgKGkgPSAwOyBpIDwg ZGVzYy0+c2l6ZTsgaSsrKQ0KK3NlcV9wcmludGYocywgIiUwMngsIiwgcmVndmFsW2ldKTsNCitz ZXFfcHV0cyhzLCAiXG4iKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFo X2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikNCit7DQoraW50IHJldCA9IDA7 DQorc3RydWN0IHJ0MTcxMWhfZGJnX2luZm8gKmluZm8gPSAoc3RydWN0IHJ0MTcxMWhfZGJnX2lu Zm8gKilzLT5wcml2YXRlOw0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlw Ow0KKw0KK211dGV4X2xvY2soJmNoaXAtPmRiZ29wc19sb2NrKTsNCitzd2l0Y2ggKGluZm8tPmlk KSB7DQorY2FzZSBSVDE3MTFIX0RCR19MT0c6DQorcmV0ID0gcnQxNzExaF9sb2dfc2hvdyhjaGlw LCBzKTsNCiticmVhazsNCitjYXNlIFJUMTcxMUhfREJHX1JFR1M6DQorcmV0ID0gcnQxNzExaF9y ZWdzX3Nob3coY2hpcCwgcyk7DQorYnJlYWs7DQorY2FzZSBSVDE3MTFIX0RCR19SRUdfQUREUjoN CityZXQgPSBydDE3MTFoX3JlZ19hZGRyX3Nob3coY2hpcCwgcyk7DQorYnJlYWs7DQorY2FzZSBS VDE3MTFIX0RCR19EQVRBOg0KK3JldCA9IHJ0MTcxMWhfZGF0YV9zaG93KGNoaXAsIHMpOw0KK2Jy ZWFrOw0KK2RlZmF1bHQ6DQorcmV0ID0gLUVJTlZBTDsNCiticmVhazsNCit9DQorDQorbXV0ZXhf dW5sb2NrKCZjaGlwLT5kYmdvcHNfbG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGlj IGludCBydDE3MTFoX2RiZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpm aWxlKQ0KK3sNCitpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkNCityZXR1cm4gc2luZ2xl X29wZW4oZmlsZSwgcnQxNzExaF9kYmdfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7DQorZmlsZS0+ cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsNCityZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCBnZXRfcGFyYW1ldGVycyhjaGFyICpidWYsIGxvbmcgaW50ICpwYXJhbTEsIGludCBu dW1fb2ZfcGFyKQ0KK3sNCitjaGFyICp0b2tlbjsNCitpbnQgYmFzZSwgY250Ow0KKw0KK3Rva2Vu ID0gc3Ryc2VwKCZidWYsICIgIik7DQorDQorZm9yIChjbnQgPSAwOyBjbnQgPCBudW1fb2ZfcGFy OyBjbnQrKykgew0KK2lmICh0b2tlbiAhPSBOVUxMKSB7DQoraWYgKCh0b2tlblsxXSA9PSAneCcp IHx8ICh0b2tlblsxXSA9PSAnWCcpKQ0KK2Jhc2UgPSAxNjsNCitlbHNlDQorYmFzZSA9IDEwOw0K Kw0KK2lmIChrc3RydG91bCh0b2tlbiwgYmFzZSwgJnBhcmFtMVtjbnRdKSAhPSAwKQ0KK3JldHVy biAtRUlOVkFMOw0KKw0KK3Rva2VuID0gc3Ryc2VwKCZidWYsICIgIik7DQorfSBlbHNlDQorcmV0 dXJuIC1FSU5WQUw7DQorfQ0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGdldF9kYXRh cyhjb25zdCBjaGFyICpidWYsIGNvbnN0IGludCBsZW5ndGgsDQordW5zaWduZWQgY2hhciAqZGF0 YV9idWZmZXIsIHVuc2lnbmVkIGNoYXIgZGF0YV9sZW5ndGgpDQorew0KK2ludCBpLCBwdHI7DQor bG9uZyBpbnQgdmFsdWU7DQorY2hhciB0b2tlbls1XTsNCisNCit0b2tlblswXSA9ICcwJzsNCit0 b2tlblsxXSA9ICd4JzsNCit0b2tlbls0XSA9IDA7DQoraWYgKGJ1ZlswXSAhPSAnMCcgfHwgYnVm WzFdICE9ICd4JykNCityZXR1cm4gLUVJTlZBTDsNCisNCitwdHIgPSAyOw0KK2ZvciAoaSA9IDA7 IChpIDwgZGF0YV9sZW5ndGgpICYmIChwdHIgKyAyIDw9IGxlbmd0aCk7IGkrKykgew0KK3Rva2Vu WzJdID0gYnVmW3B0cisrXTsNCit0b2tlblszXSA9IGJ1ZltwdHIrK107DQorcHRyKys7DQoraWYg KGtzdHJ0b3VsKHRva2VuLCAxNiwgJnZhbHVlKSAhPSAwKQ0KK3JldHVybiAtRUlOVkFMOw0KK2Rh dGFfYnVmZmVyW2ldID0gdmFsdWU7DQorfQ0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IHJ0MTcxMWhfcmVnYWRkcjJpZHgodWludDhfdCByZWdfYWRkcikNCit7DQoraW50IGkgPSAwOw0K K3N0cnVjdCByZWdfZGVzYyAqZGVzYyA9IE5VTEw7DQorDQorZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUocnQxNzExaF9yZWdfZGVzYyk7IGkrKykgew0KK2Rlc2MgPSAmcnQxNzExaF9yZWdfZGVz Y1tpXTsNCitpZiAoZGVzYy0+YWRkciA9PSByZWdfYWRkcikNCityZXR1cm4gaTsNCit9DQorcmV0 dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHJ0MTcxMWhfZGJnX3dyaXRlKHN0 cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCitzaXplX3QgY291bnQs IGxvZmZfdCAqcHBvcykNCit7DQoraW50IHJldCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfZGJnX2lu Zm8gKmluZm8gPQ0KKyhzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0 YTsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsNCitzdHJ1Y3QgcmVn X2Rlc2MgKmRlc2MgPSBOVUxMOw0KK2NoYXIgbGJ1ZlsxMjhdOw0KK2xvbmcgaW50IHBhcmFtWzVd Ow0KK3Vuc2lnbmVkIGNoYXIgcmVnX2RhdGFbMl0gPSB7MH07DQorDQoraWYgKGNvdW50ID4gc2l6 ZW9mKGxidWYpIC0gMSkNCityZXR1cm4gLUVGQVVMVDsNCisNCityZXQgPSBjb3B5X2Zyb21fdXNl cihsYnVmLCB1YnVmLCBjb3VudCk7DQoraWYgKHJldCkNCityZXR1cm4gLUVGQVVMVDsNCitsYnVm W2NvdW50XSA9ICdcMCc7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+ZGJnb3BzX2xvY2spOw0KK3N3 aXRjaCAoaW5mby0+aWQpIHsNCitjYXNlIFJUMTcxMUhfREJHX1JFR19BRERSOg0KK3JldCA9IGdl dF9wYXJhbWV0ZXJzKGxidWYsIHBhcmFtLCAxKTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIo Y2hpcC0+ZGV2LCAiJXMgZ2V0IHBhcmFtIGZhaWxcbiIsIF9fZnVuY19fKTsNCityZXQgPSAtRUlO VkFMOw0KK2dvdG8gb3V0Ow0KK30NCityZXQgPSBydDE3MTFoX3JlZ2FkZHIyaWR4KHBhcmFtWzBd KTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgYWRkcjJpZHggZmFp bFxuIiwgX19mdW5jX18pOw0KK3JldCA9IC1FSU5WQUw7DQorZ290byBvdXQ7DQorfQ0KK2NoaXAt PmRiZ19yZWdpZHggPSByZXQ7DQorYnJlYWs7DQorY2FzZSBSVDE3MTFIX0RCR19EQVRBOg0KK2Rl c2MgPSAmcnQxNzExaF9yZWdfZGVzY1tjaGlwLT5kYmdfcmVnaWR4XTsNCitpZiAoKGRlc2MtPnNp emUgLSAxKSAqIDMgKyA1ICE9IGNvdW50KSB7DQorZGV2X2VycihjaGlwLT5kZXYsICIlcyBpbmNv cnJlY3QgaW5wdXQgbGVuZ3RoXG4iLA0KK19fZnVuY19fKTsNCityZXQgPSAtRUlOVkFMOw0KK2dv dG8gb3V0Ow0KK30NCityZXQgPSBnZXRfZGF0YXMoKGNoYXIgKil1YnVmLCBjb3VudCwgcmVnX2Rh dGEsIGRlc2MtPnNpemUpOw0KK2lmIChyZXQgPCAwKSB7DQorZGV2X2VycihjaGlwLT5kZXYsICIl cyBnZXQgZGF0YSBmYWlsXG4iLCBfX2Z1bmNfXyk7DQorcmV0ID0gLUVJTlZBTDsNCitnb3RvIG91 dDsNCit9DQorcmV0ID0gcnQxNzExaF9yZWdfYmxvY2tfd3JpdGUoY2hpcCwgZGVzYy0+YWRkciwg ZGVzYy0+c2l6ZSwNCityZWdfZGF0YSk7DQorYnJlYWs7DQorZGVmYXVsdDoNCityZXQgPSAtRUlO VkFMOw0KK2JyZWFrOw0KK30NCisNCitvdXQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5kYmdvcHNf bG9jayk7DQorcmV0dXJuIHJldCA8IDAgPyByZXQgOiBjb3VudDsNCit9DQorDQorc3RhdGljIGlu dCBydDE3MTFoX2RiZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpm aWxlKQ0KK3sNCitpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkNCityZXR1cm4gc2luZ2xl X3JlbGVhc2UoaW5vZGUsIGZpbGUpOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydDE3MTFoX2RiZ19vcHMgPSB7DQorLm9wZW49IHJ0MTcx MWhfZGJnX29wZW4sDQorLmxsc2Vlaz0gc2VxX2xzZWVrLA0KKy5yZWFkPSBzZXFfcmVhZCwNCisu d3JpdGU9IHJ0MTcxMWhfZGJnX3dyaXRlLA0KKy5yZWxlYXNlPSBydDE3MTFoX2RiZ19yZWxlYXNl LA0KK307DQorDQorDQorc3RhdGljIGludCBydDE3MTFoX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcnQx NzExaF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMCwgaSA9IDA7DQorc3RydWN0IHJ0MTcx MWhfZGJnX2luZm8gKmluZm8gPSBOVUxMOw0KK2ludCBsZW4gPSAwOw0KK2NoYXIgKmRpcm5hbWUg PSBOVUxMOw0KKw0KK211dGV4X2luaXQoJmNoaXAtPmxvZ2J1ZmZlcl9sb2NrKTsNCittdXRleF9p bml0KCZjaGlwLT5kYmdvcHNfbG9jayk7DQorbGVuID0gc3RybGVuKGRldl9uYW1lKGNoaXAtPmRl dikpOw0KK2Rpcm5hbWUgPSBkZXZtX2t6YWxsb2MoY2hpcC0+ZGV2LCBsZW4gKyA5LCBHRlBfS0VS TkVMKTsNCitpZiAoIWRpcm5hbWUpDQorcmV0dXJuIC1FTk9NRU07DQorc25wcmludGYoZGlybmFt ZSwgbGVuICsgOSwgInJ0MTcxMWgtJXMiLCBkZXZfbmFtZShjaGlwLT5kZXYpKTsNCitpZiAoIWNo aXAtPmRiZ2Rpcikgew0KK2NoaXAtPmRiZ2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1l LCBOVUxMKTsNCitpZiAoIWNoaXAtPmRiZ2RpcikNCityZXR1cm4gLUVOT01FTTsNCit9DQorDQor Zm9yIChpID0gMDsgaSA8IFJUMTcxMUhfREJHX01BWDsgaSsrKSB7DQoraW5mbyA9ICZjaGlwLT5k YmdfaW5mb1tpXTsNCitpbmZvLT5jaGlwID0gY2hpcDsNCitpbmZvLT5pZCA9IGk7DQorY2hpcC0+ ZGJnX2ZpbGVzW2ldID0gZGVidWdmc19jcmVhdGVfZmlsZSgNCitydDE3MTFoX2RiZ19maWxlbmFt ZVtpXSwgU19JRlJFRyB8IDA0NDQsDQorY2hpcC0+ZGJnZGlyLCBpbmZvLCAmcnQxNzExaF9kYmdf b3BzKTsNCitpZiAoIWNoaXAtPmRiZ19maWxlc1tpXSkgew0KK3JldCA9IC1FSU5WQUw7DQorZ290 byBlcnI7DQorfQ0KK30NCisNCityZXR1cm4gMDsNCitlcnI6DQorZGVidWdmc19yZW1vdmVfcmVj dXJzaXZlKGNoaXAtPmRiZ2Rpcik7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQg cnQxNzExaF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorZGVi dWdmc19yZW1vdmVfcmVjdXJzaXZlKGNoaXAtPmRiZ2Rpcik7DQorfQ0KKw0KKyNlbHNlDQorDQor c3RhdGljIHZvaWQgcnQxNzExaF9sb2coY29uc3Qgc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwg Y29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfZGVi dWdmc19pbml0KGNvbnN0IHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK3JldHVybiAw Ow0KK30NCisNCitzdGF0aWMgdm9pZCBydDE3MTFoX2RlYnVnZnNfZXhpdChjb25zdCBzdHJ1Y3Qg cnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCit9DQorDQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19G UyAqLw0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHlwZWNfY2Nfc3RhdHVzX25hbWVb XSA9IHsNCitbVFlQRUNfQ0NfT1BFTl09ICJPcGVuIiwNCitbVFlQRUNfQ0NfUkFdPSAiUmEiLA0K K1tUWVBFQ19DQ19SRF09ICJSZCIsDQorW1RZUEVDX0NDX1JQX0RFRl09ICJScC1kZWYiLA0KK1tU WVBFQ19DQ19SUF8xXzVdPSAiUnAtMS41IiwNCitbVFlQRUNfQ0NfUlBfM18wXT0gIlJwLTMuMCIs DQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX3BvbGFyaXR5X25hbWVbXSA9 IHsNCitbVFlQRUNfUE9MQVJJVFlfQ0MxXT0gIlBvbGFyaXR5X0NDMSIsDQorW1RZUEVDX1BPTEFS SVRZX0NDMl09ICJQb2xhcml0eV9DQzIiLA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCB0cmFuc21pdF90eXBlX25hbWVbXSA9IHsNCitbVENQQ19UWF9TT1BdPSAiU09QIiwNCitb VENQQ19UWF9TT1BfUFJJTUVdPSAiU09QJyIsDQorW1RDUENfVFhfU09QX1BSSU1FX1BSSU1FXT0g IlNPUCcnIiwNCitbVENQQ19UWF9TT1BfREVCVUdfUFJJTUVdPSAiREVCVUcnIiwNCitbVENQQ19U WF9TT1BfREVCVUdfUFJJTUVfUFJJTUVdPSAiREVCVUcnJyIsDQorW1RDUENfVFhfSEFSRF9SRVNF VF09ICJIQVJEX1JFU0VUIiwNCitbVENQQ19UWF9DQUJMRV9SRVNFVF09ICJDQUJMRV9SRVNFVCIs DQorW1RDUENfVFhfQklTVF9NT0RFXzJdPSAiQklTVF9NT0RFXzIiLA0KK307DQorDQorc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCB0eXBlY19yb2xlX25hbWVbXSA9IHsNCitbVFlQRUNfU0lOS109 ICJTaW5rIiwNCitbVFlQRUNfU09VUkNFXT0gIlNvdXJjZSIsDQorfTsNCisNCitzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IHR5cGVjX2RhdGFfcm9sZV9uYW1lW10gPSB7DQorW1RZUEVDX0RFVklD RV09ICJEZXZpY2UiLA0KK1tUWVBFQ19IT1NUXT0gIkhvc3QiLA0KK307DQorDQorc3RhdGljIGNv bnN0IGVudW0gdHlwZWNfY2NfcHVsbCB0eXBlY19jY19zdGF0dXNfcHVsbF9tYXBwaW5nW10gPSB7 DQorW1RZUEVDX0NDX09QRU5dID0gVFlQRUNfQ0NfUFVMTF9PUEVOLA0KK1tUWVBFQ19DQ19SQV0g PSBUWVBFQ19DQ19QVUxMX1JBLA0KK1tUWVBFQ19DQ19SRF0gPSBUWVBFQ19DQ19QVUxMX1JELA0K K1tUWVBFQ19DQ19SUF9ERUZdID0gVFlQRUNfQ0NfUFVMTF9SUF9ERUYsDQorW1RZUEVDX0NDX1JQ XzFfNV0gPSBUWVBFQ19DQ19QVUxMX1JQXzFfNSwNCitbVFlQRUNfQ0NfUlBfM18wXSA9IFRZUEVD X0NDX1BVTExfUlBfM18wLA0KK307DQorDQorc3RhdGljIGlubGluZSBlbnVtIHR5cGVjX2NjX3B1 bGwgcnQxNzExaF9jY19zdGF0dXMycHVsbChlbnVtIHR5cGVjX2NjX3N0YXR1cyBjYykNCit7DQor cmV0dXJuIHR5cGVjX2NjX3N0YXR1c19wdWxsX21hcHBpbmdbY2NdOw0KK30NCisNCisjZGVmaW5l IFBET19GSVhFRF9GTEFHUyBcDQorKFBET19GSVhFRF9EVUFMX1JPTEUgfCBQRE9fRklYRURfREFU QV9TV0FQIHwgUERPX0ZJWEVEX1VTQl9DT01NKQ0KKw0KK3N0YXRpYyBjb25zdCB1MzIgc3JjX3Bk b1tdID0gew0KK1BET19GSVhFRCg1MDAwLCA1MDAsIFBET19GSVhFRF9GTEFHUyksDQorfTsNCisN CitzdGF0aWMgY29uc3QgdTMyIHNua19wZG9bXSA9IHsNCitQRE9fRklYRUQoNTAwMCwgNTAwLCBQ RE9fRklYRURfRkxBR1MpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3BjX2NvbmZp ZyBydDE3MTFoX3RjcGNfY29uZmlnID0gew0KKy5zcmNfcGRvID0gc3JjX3BkbywNCisubnJfc3Jj X3BkbyA9IEFSUkFZX1NJWkUoc3JjX3BkbyksDQorLnNua19wZG8gPSBzbmtfcGRvLA0KKy5ucl9z bmtfcGRvID0gQVJSQVlfU0laRShzbmtfcGRvKSwNCisubWF4X3Nua19tdiA9IDUwMDAsDQorLm1h eF9zbmtfbWEgPSAzMDAwLA0KKy5tYXhfc25rX213ID0gMTUwMDAsDQorLm9wZXJhdGluZ19zbmtf bXcgPSAyNTAwLA0KKy50eXBlID0gVFlQRUNfUE9SVF9EUlAsDQorLmRlZmF1bHRfcm9sZSA9IFRZ UEVDX1NJTkssDQorLmFsdF9tb2RlcyA9IE5VTEwsDQorfTsNCisNCisjZGVmaW5lIFJUMTcxMUhf UkVTVU1FX1JFVFJZIDEwDQorI2RlZmluZSBSVDE3MTFIX1JFU1VNRV9SRVRSWV9TTEVFUCA1MA0K Kw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBydDE3MTFoX2lzX3N1c3BlbmRlZChzdHJ1Y3QgcnQxNzEx aF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0cnlfY250ID0gMDsNCisNCitmb3IgKHJldHJ5X2Nu dCA9IDA7IHJldHJ5X2NudCA8IFJUMTcxMUhfUkVTVU1FX1JFVFJZOyByZXRyeV9jbnQrKykgew0K K2lmIChhdG9taWNfcmVhZCgmY2hpcC0+cG1fc3VzcGVuZCkpIHsNCitydDE3MTFoX2xvZyhjaGlw LCAiJXMgcmV0cnkgJWQvJWRcbiIsIF9fZnVuY19fLA0KK3JldHJ5X2NudCArIDEsIFJUMTcxMUhf UkVTVU1FX1JFVFJZKTsNCittc2xlZXAoUlQxNzExSF9SRVNVTUVfUkVUUllfU0xFRVApOw0KK30g ZWxzZQ0KK3JldHVybiBmYWxzZTsNCit9DQorDQorcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRp YyBpbnQgcnQxNzExaF9yZWdfcmVhZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90 IHJlZywNCit1aW50OF90ICpkYXRhKQ0KK3sNCitpbnQgcmV0ID0gMDsNCisNCithdG9taWNfc2V0 KCZjaGlwLT5pMmNfYnVzeSwgMSk7DQoraWYgKHJ0MTcxMWhfaXNfc3VzcGVuZGVkKGNoaXApKSB7 DQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KK3JldHVybiAtRVRJTUVET1VUOw0K K30NCisNCityZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjaGlwLT5pMmMsIHJl ZywgMSwgZGF0YSk7DQoraWYgKHJldCA8IDApDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHJlZyUw MlggZmFpbCglZClcbiIsIF9fZnVuY19fLCByZWcsIHJldCk7DQorYXRvbWljX3NldCgmY2hpcC0+ aTJjX2J1c3ksIDApOw0KKw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzEx aF9yZWdfd3JpdGUoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCByZWcsDQordWlu dDhfdCBkYXRhKQ0KK3sNCitpbnQgcmV0ID0gMDsNCisNCithdG9taWNfc2V0KCZjaGlwLT5pMmNf YnVzeSwgMSk7DQoraWYgKHJ0MTcxMWhfaXNfc3VzcGVuZGVkKGNoaXApKSB7DQorYXRvbWljX3Nl dCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KK3JldHVybiAtRVRJTUVET1VUOw0KK30NCisNCityZXQg PSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2hpcC0+aTJjLCByZWcsIDEsICZkYXRh KTsNCitpZiAocmV0IDwgMCkNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgcmVnJTAyWCA9ICUwMlgg ZmFpbCglZClcbiIsIF9fZnVuY19fLCByZWcsDQorZGF0YSwgcmV0KTsNCithdG9taWNfc2V0KCZj aGlwLT5pMmNfYnVzeSwgMCk7DQorDQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBy dDE3MTFoX3JlZ19ibG9ja193cml0ZShzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90 IHJlZywNCitpbnQgbGVuLCBjb25zdCB1aW50OF90ICpkYXRhKQ0KK3sNCitpbnQgcmV0ID0gMDsN CisNCithdG9taWNfc2V0KCZjaGlwLT5pMmNfYnVzeSwgMSk7DQoraWYgKHJ0MTcxMWhfaXNfc3Vz cGVuZGVkKGNoaXApKSB7DQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KK3JldHVy biAtRVRJTUVET1VUOw0KK30NCisNCityZXQgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2Rh dGEoY2hpcC0+aTJjLCByZWcsIGxlbiwgZGF0YSk7DQoraWYgKHJldCA8IDApDQorcnQxNzExaF9s b2coY2hpcCwgIiVzIHJlZyUwMlgsIGxlbiA9ICVkIGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywNCity ZWcsIGxlbiwgcmV0KTsNCithdG9taWNfc2V0KCZjaGlwLT5pMmNfYnVzeSwgMCk7DQorDQorcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3JlZ19ibG9ja19yZWFkKHN0cnVj dCBydDE3MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3QgcmVnLA0KK2ludCBsZW4sIHVpbnQ4X3QgKmRh dGEpDQorew0KK2ludCByZXQgPSAwOw0KKw0KK2F0b21pY19zZXQoJmNoaXAtPmkyY19idXN5LCAx KTsNCitpZiAocnQxNzExaF9pc19zdXNwZW5kZWQoY2hpcCkpIHsNCithdG9taWNfc2V0KCZjaGlw LT5pMmNfYnVzeSwgMCk7DQorcmV0dXJuIC1FVElNRURPVVQ7DQorfQ0KKw0KK3JldCA9IGkyY19z bWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNoaXAtPmkyYywgcmVnLCBsZW4sIGRhdGEpOw0KK2lm IChyZXQgPCAwKQ0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyByZWclMDJYLCBsZW4gPSAlZCBmYWls KCVkKVxuIiwgX19mdW5jX18sDQorcmVnLCBsZW4sIHJldCk7DQorYXRvbWljX3NldCgmY2hpcC0+ aTJjX2J1c3ksIDApOw0KKw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50 IHJ0MTcxMWhfcmVnX3dyaXRlX3dvcmQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhf dCByZWcsDQordWludDE2X3QgZGF0YSkNCit7DQorZGF0YSA9IGNwdV90b19sZTE2KGRhdGEpOw0K K3JldHVybiBydDE3MTFoX3JlZ19ibG9ja193cml0ZShjaGlwLCByZWcsIDIsICh1aW50OF90ICop JmRhdGEpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBydDE3MTFoX3JlZ19yZWFkX3dvcmQo c3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCByZWcsDQordWludDE2X3QgKmRhdGEp DQorew0KK2ludCByZXQgPSAwOw0KKw0KK3JldCA9IHJ0MTcxMWhfcmVnX2Jsb2NrX3JlYWQoY2hp cCwgcmVnLCAyLCAodWludDhfdCAqKWRhdGEpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7 DQorKmRhdGEgPSBsZTE2X3RvX2NwdSgqZGF0YSk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbnQgcnQxNzExaF9wc3lfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwN CitlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9w dmFsICp2YWwpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBwb3dlcl9zdXBwbHlf Z2V0X2RydmRhdGEocHN5KTsNCisNCitzd2l0Y2ggKHBzcCkgew0KK2Nhc2UgUE9XRVJfU1VQUExZ X1BST1BfT05MSU5FOg0KK3ZhbC0+aW50dmFsID0gY2hpcC0+Y2hhcmdlX29uOw0KK2JyZWFrOw0K K2Nhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6DQordmFsLT5pbnR2YWwgPSBjaGlw LT5zdXBwbHlfdm9sdGFnZSAqIDEwMDA7IC8qIG1WIC0+IMK1ViAqLw0KK2JyZWFrOw0KK2Nhc2Ug UE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9NQVg6DQordmFsLT5pbnR2YWwgPSBjaGlwLT5jdXJy ZW50X2xpbWl0ICogMTAwMDsgLyogbUEgLT4gwrVBICovDQorYnJlYWs7DQorZGVmYXVsdDoNCity ZXR1cm4gLUVOT0RBVEE7DQorfQ0KKw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgZW51bSBw b3dlcl9zdXBwbHlfcHJvcGVydHkgcnQxNzExaF9wc3lfcHJvcGVydGllc1tdID0gew0KK1BPV0VS X1NVUFBMWV9QUk9QX09OTElORSwNCitQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywNCitQ T1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX01BWCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcG93ZXJfc3VwcGx5X2Rlc2MgcnQxNzExaF9wc3lfZGVzYyA9IHsNCisubmFtZT0gInJ0MTcx MWgtdHlwZWMtc291cmNlIiwNCisudHlwZT0gUE9XRVJfU1VQUExZX1RZUEVfVVNCX1RZUEVfQywN CisucHJvcGVydGllcz0gcnQxNzExaF9wc3lfcHJvcGVydGllcywNCisubnVtX3Byb3BlcnRpZXM9 IEFSUkFZX1NJWkUocnQxNzExaF9wc3lfcHJvcGVydGllcyksDQorLmdldF9wcm9wZXJ0eT0gcnQx NzExaF9wc3lfZ2V0X3Byb3BlcnR5LA0KK307DQorDQorc3RhdGljIGlubGluZSBpbnQgcnQxNzEx aF9zb2Z0d2FyZV9yZXNldChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0 ID0gMDsNCisNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19TV1JF U0VULCAweDAxKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKw0KK3VzbGVlcF9yYW5n ZSgxMDAwLCAyMDAwKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcnQx NzExaF9jb21tYW5kKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3QgY21kKQ0KK3sN CityZXR1cm4gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfQ09NTUFORCwgY21k KTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcnQxNzExaF9pbml0X2NjX3BhcmFtcyhzdHJ1 Y3QgcnQxNzExaF9jaGlwICpjaGlwLA0KK2NvbnN0IGVudW0gdHlwZWNfY2Nfc3RhdHVzICpjYykN Cit7DQoraW50IHJldCA9IDA7DQordWludDhfdCBlbiA9IDAsIHNlbCA9IDA7DQorDQoraWYgKCpj YyA9PSBUWVBFQ19DQ19SUF9ERUYpIHsgLyogMC41NSAqLw0KK2VuID0gMDsNCitzZWwgPSAweDgx Ow0KK30gZWxzZSBpZiAoY2hpcC0+ZGlkID49IFJUMTcxMUhfRElEX0QpIHsgLyogMC4zNSAmIDAu NzUgKi8NCitlbiA9IDE7DQorc2VsID0gMHg4MTsNCit9IGVsc2UgeyAvKiAwLjQgJiAwLjcgKi8N CitlbiA9IDE7DQorc2VsID0gMHg4MDsNCit9DQorDQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUo Y2hpcCwgUlQxNzExSF9SRUdfQk1DSU9fUlhEWkVOLCBlbik7DQoraWYgKHJldCA8IDApDQorcmV0 dXJuIHJldDsNCisNCityZXR1cm4gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdf Qk1DSU9fUlhEWlNFTCwgc2VsKTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2FsZXJ0X3N0 YXR1c19jbGVhcihzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50MzJfdCBtYXNrKQ0KK3sN CitpbnQgcmV0ID0gMDsNCit1aW50MTZfdCBtYXNrX3QxID0gMDsNCit1aW50OF90IG1hc2tfdDIg PSAwOw0KKw0KKy8qIFdyaXRlIDEgY2xlYXIgKi8NCittYXNrX3QxID0gKHVpbnQxNl90KW1hc2s7 DQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGVfd29yZChjaGlwLCBSVDE3MTFIX1JFR19BTEVSVCwg bWFza190MSk7DQoraWYgKHJldCA8IDApDQorcmV0dXJuIHJldDsNCisNCittYXNrX3QyID0gbWFz ayA+PiAxNjsNCitpZiAobWFza190Mikgew0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAs IFJUMTcxMUhfUkVHX1JUX0lOVCwgbWFza190Mik7DQoraWYgKHJldCA8IDApDQorcmV0dXJuIHJl dDsNCit9DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9pbml0X2Fs ZXJ0X21hc2soc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQordWludDE2X3QgbWFzayA9 IDA7DQorDQorbWFzayA9IFJUMTcxMUhfUkVHX0FMRVJUX0NDX1NUQVRVUyB8IFJUMTcxMUhfUkVH X0FMRVJUX1BPV0VSX1NUQVRVUzsNCisNCittYXNrIHw9IFJUMTcxMUhfUkVHX0FMRVJUX1RYX1NV Q0NFU1MgfCBSVDE3MTFIX1JFR19BTEVSVF9UWF9ESVNDQVJERUQNCit8IFJUMTcxMUhfUkVHX0FM RVJUX1RYX0ZBSUxFRCB8IFJUMTcxMUhfUkVHX0FMRVJUX1JYX0hBUkRfUlNUDQorfCBSVDE3MTFI X1JFR19BTEVSVF9SWF9TVEFUVVMgfCBSVDE3MTFIX1JFR19BTEVSVF9SWF9CVUZfT1ZGOw0KKw0K K21hc2sgfD0gUlQxNzExSF9SRUdfQUxFUlRfRkFVTFQ7DQorDQorcmV0dXJuIHJ0MTcxMWhfcmVn X3dyaXRlX3dvcmQoY2hpcCwgUlQxNzExSF9SRUdfQUxFUlRfTUFTSywgbWFzayk7DQorfQ0KKw0K K3N0YXRpYyBpbnQgcnQxNzExaF9pbml0X3Bvd2VyX3N0YXR1c19tYXNrKHN0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXApDQorew0KK3VpbnQ4X3QgbWFzayA9IFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRV U19WQlVTX1BSRVM7DQorDQorcmV0dXJuIHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhf UkVHX1BPV0VSX1NUQVRVU19NQVNLLCBtYXNrKTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFo X2luaXRfZmF1bHRfbWFzayhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitjb25zdCB1 aW50OF90IG1hc2sgPSBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfVkNPTk5fT1YNCit8IFJUMTcx MUhfUkVHX0ZBVUxUX1NUQVRVU19WQ09OTl9PQzsNCisNCityZXR1cm4gcnQxNzExaF9yZWdfd3Jp dGUoY2hpcCwgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX01BU0ssIG1hc2spOw0KK30NCisNCitz dGF0aWMgaW50IHJ0MTcxMWhfaW5pdF9ydF9tYXNrKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAp DQorew0KK3VpbnQ4X3QgcnRfbWFzayA9IFJUMTcxMUhfUkVHX01fVkJVU184MDsNCisNCitpZiAo Y2hpcC0+ZGlkIDwgUlQxNzExSF9ESURfRCkNCitydF9tYXNrIHw9IChSVDE3MTFIX1JFR19NX1dB S0VVUCB8IFJUMTcxMUhfUkVHX01fUkFfREVUQUNIKTsNCisNCityZXR1cm4gcnQxNzExaF9yZWdf d3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfUlRfTUFTSywgcnRfbWFzayk7DQorfQ0KKw0KKyNkZWZp bmUgUlQxNzExSF9XQUtFVVBfV09SS19USU1FKDEwMDApDQorc3RhdGljIGVudW0gYWxhcm10aW1l cl9yZXN0YXJ0DQorcnQxNzExaF9hbGFybV93YWtldXBfaGFuZGxlcihzdHJ1Y3QgYWxhcm0gKmFs YXJtLCBrdGltZV90IG5vdykNCit7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9DQorY29u dGFpbmVyX29mKGFsYXJtLCBzdHJ1Y3QgcnQxNzExaF9jaGlwLCB3YWtldXBfdGltZXIpOw0KKw0K K3J0MTcxMWhfbG9nKGNoaXAsICIlc1xuIiwgX19mdW5jX18pOw0KK3BtX3dha2V1cF9ldmVudChj aGlwLT5kZXYsIFJUMTcxMUhfV0FLRVVQX1dPUktfVElNRSk7DQorc2NoZWR1bGVfZGVsYXllZF93 b3JrKCZjaGlwLT53YWtldXBfd29yaywgMCk7DQorcmV0dXJuIEFMQVJNVElNRVJfTk9SRVNUQVJU Ow0KK30NCisNCitzdGF0aWMgdm9pZCBydDE3MTFoX2VuYWJsZV93YWtldXBfdGltZXIoc3RydWN0 IHJ0MTcxMWhfY2hpcCAqY2hpcCwgYm9vbCBlbikNCit7DQoraW50IHRvdXQgPSAzMDA7IC8qIHMg Ki8NCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgJWRcbiIsIF9fZnVuY19fLCBlbik7DQoraWYg KGVuKSB7DQoraWYgKCFjaGlwLT53YWtldXBfb25jZSkNCit0b3V0ID0gKGNoaXAtPmxvd19ycF9k dXR5X2NudGRvd24pID8gNSA6IDIwOw0KK2FsYXJtX3N0YXJ0X3JlbGF0aXZlKCZjaGlwLT53YWtl dXBfdGltZXIsIGt0aW1lX3NldCh0b3V0LCAwKSk7DQorfSBlbHNlDQorYWxhcm1fY2FuY2VsKCZj aGlwLT53YWtldXBfdGltZXIpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGJvb2wgcnQxNzExaF9p c19jY19vcGVuKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2lmICghY2hpcC0+ZHJw X3RvZ2dsaW5nICYmIGNoaXAtPmNjMSA9PSBUWVBFQ19DQ19PUEVOICYmDQorY2hpcC0+Y2MyID09 IFRZUEVDX0NDX09QRU4pDQorcmV0dXJuIHRydWU7DQorcmV0dXJuIGZhbHNlOw0KK30NCisNCitz dGF0aWMgaW50IHJ0MTcxMWhfc2V0X2xvd19ycF9kdXR5KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNo aXAsIGJvb2wgbG93X3JwKQ0KK3sNCit1aW50MTZfdCBkdXR5ID0gbG93X3JwID8gUlQxNzExSF9M T1dfUlBfRFVUWSA6IFJUMTcxMUhfTk9STUFMX1JQX0RVVFk7DQorDQorcmV0dXJuIHJ0MTcxMWhf cmVnX3dyaXRlX3dvcmQoY2hpcCwgUlQxNzExSF9SRUdfRFJQX0RVVFlfQ1RSTCwgZHV0eSk7DQor fQ0KKw0KKy8qDQorICogcnQxNzExaF9jaGVja19mYWxzZV9yYV9kZXRhY2gNCisgKg0KKyAqIENo ZWNrIHNpbmdsZSBSYSByZXNpc3RhbmNlIChlTWFyaykgZXhpc3RzIG9yIG5vdCB3aGVuDQorICox KSByYSBkZXRhY2ggaW50IHRyaWdnZXJlZA0KKyAqMikgd2FrZXVwIHRpbWVyIHRyaWdnZXJlZA0K KyAqDQorICogSWYgcmVlbnRlcmluZyBsb3ctcG93ZXIgbW9kZSBhbmQgZU1hcmsgc3RpbGwgZXhp c3RzLA0KKyAqIGl0IG1heSBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLg0KKyAqDQorICogSWYgY2Mg c3RhdHVzIGlzIGJvdGggb3BlbiwgcmV0dXJuIHRydWU7IG90aGVyd2lzZSByZXR1cm4gZmFsc2UN CisgKi8NCitzdGF0aWMgaW50IF9fdGNwbV9nZXRfY2Moc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hp cCk7DQorc3RhdGljIGludCBfX3RjcG1fc2V0X2NjKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAs IGVudW0gdHlwZWNfY2Nfc3RhdHVzIGNjKTsNCitzdGF0aWMgaW5saW5lIGludCBfX3RjcG1fc3Rh cnRfZHJwX3RvZ2dsaW5nKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApOw0KK3N0YXRpYyBpbmxp bmUgYm9vbCBydDE3MTFoX2NoZWNrX2ZhbHNlX3JhX2RldGFjaChzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwKQ0KK3sNCitib29sIGRycCA9IChjaGlwLT50Y3BjX2NmZy50eXBlID09IFRZUEVDX1BP UlRfRFJQKSA/IHRydWUgOiBmYWxzZTsNCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNcbiIsIF9f ZnVuY19fKTsNCisNCisvKg0KKyAqIElmIHRoZSBEVVQgaXMgRFJQIGFuZCBjdXJyZW50IENDIHN0 YXR1cyBoYXMgc3RvcHBlZCB0b2dnbGluZywNCisgKiBsZXQgY2NfaGFuZGxlciB0byBoYW5kbGUg aXQgbGF0ZXIuDQorICoNCisgKiBJZiBDQyBpcyB0b2dnbGluZywgZm9yY2UgQ0MgdG8gcHJlc2Vu dCBScA0KKyAqLw0KK2lmIChkcnApIHsNCitfX3RjcG1fZ2V0X2NjKGNoaXApOw0KKw0KK2lmICgh Y2hpcC0+ZHJwX3RvZ2dsaW5nKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIDEoJXMsICVzKVxu IiwgX19mdW5jX18sDQordHlwZWNfY2Nfc3RhdHVzX25hbWVbY2hpcC0+Y2MxXSwNCit0eXBlY19j Y19zdGF0dXNfbmFtZVtjaGlwLT5jYzJdKTsNCityZXR1cm4gdHJ1ZTsNCit9DQorX190Y3BtX3Nl dF9jYyhjaGlwLCBUWVBFQ19DQ19SUF9ERUYpOw0KK3VzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsN Cit9DQorDQorLyoNCisgKiBDaGVjayBDQyBzdGF0dXMNCisgKiBSZCAoZGV2aWNlKSAtPiBsZXQg Y2NfaGFuZGxlciB0byBoYW5kbGUgaXQgbGF0ZXINCisgKiBlTWFyayBvbmx5IC0+IFJlc2NoZWR1 bGUgd2FrZXVwIHRpbWVyDQorICogT3BlbiAtPiAodHJ1ZSBjb25kaXRpb24pDQorICogUmVhZCB0 byByZWVudGVyIGxvdy1wb3dlciBtb2RlLg0KKyAqIElmIHdlIHJlcGVhdGVkbHkgZW50ZXIgdGhp cyBzaXR1YXRpb24sDQorICogaXQgd2lsbCB0cmlnZ2VyIGxvdyBycCBkdXR5IHByb3RlY3Rpb24N CisgKi8NCitfX3RjcG1fZ2V0X2NjKGNoaXApOw0KK2lmIChydDE3MTFoX2lzX2NjX29wZW4oY2hp cCkpDQorY2hpcC0+Y2FibGVfb25seSA9IGZhbHNlOw0KK2Vsc2UgaWYgKChjaGlwLT5jYzEgKyBj aGlwLT5jYzIpID09IFRZUEVDX0NDX1JBKSB7DQorY2hpcC0+Y2FibGVfb25seSA9IHRydWU7DQor cnQxNzExaF9sb2coY2hpcCwgIiVzIDIoZW1hcmspXG4iLCBfX2Z1bmNfXyk7DQorfSBlbHNlIHsN CitjaGlwLT5jYWJsZV9vbmx5ID0gZmFsc2U7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIDMoJXMg JXMpXG4iLCBfX2Z1bmNfXywNCit0eXBlY19jY19zdGF0dXNfbmFtZVtjaGlwLT5jYzFdLA0KK3R5 cGVjX2NjX3N0YXR1c19uYW1lW2NoaXAtPmNjMl0pOw0KK3JldHVybiB0cnVlOw0KK30NCisNCitp ZiAoY2hpcC0+Y2FibGVfb25seSkNCitydDE3MTFoX2VuYWJsZV93YWtldXBfdGltZXIoY2hpcCwg dHJ1ZSk7DQorZWxzZSB7DQoraWYgKGNoaXAtPmxvd19ycF9kdXR5X2NudGRvd24pDQorcnQxNzEx aF9zZXRfbG93X3JwX2R1dHkoY2hpcCwgdHJ1ZSk7DQorZWxzZSB7DQorY2hpcC0+d2FrZXVwX29u Y2UgPSBmYWxzZTsNCitjaGlwLT5sb3dfcnBfZHV0eV9jbnRkb3duID0gdHJ1ZTsNCit9DQorfQ0K Kw0KKy8qIElmIERVUCBpcyBEUlAsIGZvcmNlIENDIHRvIHRvZ2dsZSBhZ2FpbiAqLw0KK2lmIChk cnApIHsNCitfX3RjcG1fc3RhcnRfZHJwX3RvZ2dsaW5nKGNoaXApOw0KK3J0MTcxMWhfYWxlcnRf c3RhdHVzX2NsZWFyKGNoaXAsDQorUlQxNzExSF9SRUdfQUxFUlRfRVhUX1JBX0RFVEFDSCk7DQor fQ0KKw0KK3JldHVybiBjaGlwLT5jYWJsZV9vbmx5Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcx MWhfc2V0X2xvd19wb3dlcl9tb2RlKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIGJvb2wgZW4s DQorZW51bSB0eXBlY19jY19wdWxsIHB1bGwpDQorew0KK3VpbnQ4X3QgZGF0YSA9IDA7DQorDQor cnQxNzExaF9sb2coY2hpcCwgIiVzICVkXG4iLCBfX2Z1bmNfXywgZW4pOw0KKw0KK2lmIChlbikg ew0KK2RhdGEgPSBSVDE3MTFIX1JFR19CTUNJT19MUEVOOw0KKw0KK2lmIChwdWxsICYgVFlQRUNf Q0NfUFVMTF9SUCkNCitkYXRhIHw9IFJUMTcxMUhfUkVHX0JNQ0lPX0xQUlBSRDsNCit9IGVsc2UN CitkYXRhID0gUlQxNzExSF9SRUdfQk1DSU9fQkdfRU4gfA0KK1JUMTcxMUhfUkVHX1ZCVVNfREVU X0VOIHwgUlQxNzExSF9SRUdfQk1DSU9fT1NDX0VOOw0KKw0KK3JldHVybiBydDE3MTFoX3JlZ193 cml0ZShjaGlwLCBSVDE3MTFIX1JFR19CTUNfQ1RSTCwgZGF0YSk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgcnQxNzExaF9lbnRlcl9scG1fYWdhaW4oc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7 DQorYm9vbCBjaGVja19yYSA9IChjaGlwLT5scG0pIHx8IChjaGlwLT5jYWJsZV9vbmx5KTsNCisN CitpZiAoY2hlY2tfcmEgJiYgcnQxNzExaF9jaGVja19mYWxzZV9yYV9kZXRhY2goY2hpcCkpDQor cmV0dXJuIDA7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHJldHJ5IGxwbVxuIiwgX19mdW5j X18pOw0KK2NoaXAtPmxwbSA9IHRydWU7DQorDQorcnQxNzExaF9zZXRfbG93X3Bvd2VyX21vZGUo Y2hpcCwgdHJ1ZSwNCisoY2hpcC0+cHdyX3JvbGUgIT0gVFlQRUNfU09VUkNFKSA/DQorVFlQRUNf Q0NfUFVMTF9EUlAgOiBUWVBFQ19DQ19QVUxMX1JQKTsNCisNCityZXR1cm4gMDsNCit9DQorDQor c3RhdGljIHZvaWQgcnQxNzExaF93YWtldXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp DQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPQ0KK2NvbnRhaW5lcl9vZih3b3JrLCBz dHJ1Y3QgcnQxNzExaF9jaGlwLCB3YWtldXBfd29yay53b3JrKTsNCisNCittdXRleF9sb2NrKCZj aGlwLT53YWtldXBfbG9jayk7DQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorcnQxNzExaF9s b2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQorY2hpcC0+d2FrZXVwX29uY2UgPSB0cnVlOw0K K3J0MTcxMWhfZW50ZXJfbHBtX2FnYWluKGNoaXApOw0KK211dGV4X3VubG9jaygmY2hpcC0+bG9j ayk7DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT53YWtldXBfbG9jayk7DQorcG1fcmVsYXgoY2hpcC0+ ZGV2KTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcnQxNzExaF90cnlfbG93X3Bvd2VyX21v ZGUoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorcmV0dXJuIHJ0MTcxMWhfc2V0X2xv d19wb3dlcl9tb2RlKGNoaXAsIHRydWUsIGNoaXAtPmxwbV9wdWxsKTsNCit9DQorDQorc3RhdGlj IGlubGluZSBpbnQgcnQxNzExaF9lbnRlcl9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgcnQxNzExaF9j aGlwICpjaGlwKQ0KK3sNCityZXR1cm4gcnQxNzExaF90cnlfbG93X3Bvd2VyX21vZGUoY2hpcCk7 DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfZW5hYmxlX2xvd19wb3dlcl9tb2Rl KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsDQorZW51bSB0eXBlY19jY19wdWxsIHB1bGwpDQor ew0KK2lmIChjaGlwLT5jYWJsZV9vbmx5KSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHJhIG9u bHlcbiIsIF9fZnVuY19fKTsNCitydDE3MTFoX2VuYWJsZV93YWtldXBfdGltZXIoY2hpcCwgdHJ1 ZSk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK2lmIChjaGlwLT5scG0gIT0gdHJ1ZSkgew0KK2NoaXAt PmxwbSA9IHRydWU7DQorY2hpcC0+bHBtX3B1bGwgPSBwdWxsOw0KK3JldHVybiBydDE3MTFoX2Vu dGVyX2xvd19wb3dlcl9tb2RlKGNoaXApOw0KK30NCisNCityZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGlubGluZSBpbnQgcnQxNzExaF9kaXNhYmxlX2xvd19wb3dlcl9tb2RlKHN0cnVjdCBydDE3 MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwOw0KKw0KK2lmIChjaGlwLT5scG0gIT0g ZmFsc2UpIHsNCitjaGlwLT5scG0gPSBmYWxzZTsNCitydDE3MTFoX3NldF9sb3dfcnBfZHV0eShj aGlwLCBmYWxzZSk7DQorcmV0ID0gcnQxNzExaF9zZXRfbG93X3Bvd2VyX21vZGUoY2hpcCwgZmFs c2UsDQorVFlQRUNfQ0NfUFVMTF9EUlApOw0KK30NCisNCitjaGlwLT53YWtldXBfb25jZSA9IGZh bHNlOw0KK2NoaXAtPmxvd19ycF9kdXR5X2NudGRvd24gPSBmYWxzZTsNCityZXR1cm4gcmV0Ow0K K30NCisNCitzdGF0aWMgaW50IHRjcG1faW5pdChzdHJ1Y3QgdGNwY19kZXYgKmRldikNCit7DQor aW50IHJldCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihk ZXYsDQorc3RydWN0IHJ0MTcxMWhfY2hpcCwgdGNwY19kZXYpOw0KKw0KK3J0MTcxMWhfbG9nKGNo aXAsICIlc1xuIiwgX19mdW5jX18pOw0KKw0KKy8qIENLIDMwMEsgZnJvbSAzMjBLLCBzaGlwcGlu ZyBvZmYsIGF1dG9faWRsZSBlbmFibGUsIHRvdXQgPSAzMm1zICovDQorcmV0ID0gcnQxNzExaF9y ZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfSURMRV9DVFJMLA0KK1JUMTcxMUhfUkVHX0lETEVf U0VUKDAsIDEsIDEsIDIpKTsNCitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIl cyBzZXQgaWRsZSBjdHJsIGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0 Ow0KK30NCisNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19JMkNS U1RfQ1RSTCwNCitSVDE3MTFIX1JFR19JMkNSU1RfU0VUKHRydWUsIDB4MEYpKTsNCitpZiAocmV0 IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBzZXQgaTJjcnN0IGZhaWwoJWQpXG4iLCBf X2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCisNCisvKiBVRlAgQm90aCBSRCBzZXR0 aW5nICovDQorLyogRFJQID0gMCwgUnBWYWwgPSAwIChEZWZhdWx0KSwgUmQsIFJkICovDQorcmV0 ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfUk9MRV9DVFJMLA0KK1JUMTcx MUhfUkVHX1JPTEVfQ1RSTF9SRVNfU0VUKDAsIDAsIFRZUEVDX0NDX1BVTExfUkQsDQorVFlQRUNf Q0NfUFVMTF9SRCkpOw0KK2lmIChyZXQgPCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHNl dCByb2xlIGN0cmwgZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KK3JldHVybiByZXQ7DQor fQ0KKw0KKy8qDQorICogQ0MgRGV0ZWN0IERlYm91bmNlIDogKDI2LjcgKiB2YWwpIHVzDQorICog VHJhbnNpdGlvbiB3aW5kb3cgY291bnQgOiBzcGVjIDEyfjIwdXMsIGJhc2VkIG9uIDIuNE1Ieg0K KyAqLw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX1RUQ1BDX0ZJ TFRFUiwgMHgwRik7DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgc2V0 IGNjIGRlYiBmYWlsKCVkKVxuIiwgX19mdW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQor DQorLyogIERSUCBUb2dnbGUgQ3ljbGUgOiAoNTEuMiArIDYuNCAqIHZhbCkgbXMgKi8NCitydDE3 MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19EUlBfVE9HR0xFX0NZQ0xFLCA0KTsNCitp ZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBzZXQgdG9nIGN5YyBmYWlsKCVk KVxuIiwgX19mdW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQorDQorLyogRFJQIER1dHkg Q3RybDogMzMlICovDQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGVfd29yZChjaGlwLCBSVDE3MTFI X1JFR19EUlBfRFVUWV9DVFJMLA0KK1JUMTcxMUhfTk9STUFMX1JQX0RVVFkpOw0KK2lmIChyZXQg PCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHNldCBkcnAgZHV0eSBmYWlsKCVkKVxuIiwg X19mdW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQorDQorLyogVmNvbm4gT0MgKi8NCity ZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19WQ09OTl9DTElNSVRFTiwg MSk7DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgZW4gdmNvbm4gb2Mg ZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KK3JldHVybiByZXQ7DQorfQ0KKw0KKy8qIEFs ZXJ0ICYgTWFzayAqLw0KK3JldCA9IHJ0MTcxMWhfYWxlcnRfc3RhdHVzX2NsZWFyKGNoaXAsIDB4 ZmZmZmZmZmYpOw0KK2lmIChyZXQgPCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGNsZWFy IGFsZXJ0IGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCity ZXQgPSBydDE3MTFoX2luaXRfcG93ZXJfc3RhdHVzX21hc2soY2hpcCk7DQoraWYgKHJldCA8IDAp IHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgaW5pdCBwd3IgbWFzayBmYWlsKCVkKVxuIiwgX19m dW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQorcmV0ID0gcnQxNzExaF9pbml0X2FsZXJ0 X21hc2soY2hpcCk7DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgaW5p dCBhbGVydCBtYXNrIGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywNCityZXQpOw0KK3JldHVybiByZXQ7 DQorfQ0KK3JldCA9IHJ0MTcxMWhfaW5pdF9mYXVsdF9tYXNrKGNoaXApOw0KK2lmIChyZXQgPCAw KSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGluaXQgZmF1bHQgbWFzayBmYWlsKCVkKVxuIiwg X19mdW5jX18sDQorcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCityZXQgPSBydDE3MTFoX2luaXRf cnRfbWFzayhjaGlwKTsNCitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBp bml0IHJ0IG1hc2sgZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KK3JldHVybiByZXQ7DQor fQ0KKw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHRjcG1fZ2V0X3ZidXMoc3RydWN0 IHRjcGNfZGV2ICpkZXYpDQorew0KK2ludCByZXQgPSAwOw0KK3N0cnVjdCBydDE3MTFoX2NoaXAg KmNoaXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3RjcGNfZGV2 KTsNCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNcbiIsIF9fZnVuY19fKTsNCittdXRleF9sb2Nr KCZjaGlwLT5sb2NrKTsNCityZXQgPSBjaGlwLT52YnVzX3ByZXNlbnQgPyAxIDogMDsNCittdXRl eF91bmxvY2soJmNoaXAtPmxvY2spOw0KKw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBp bnQgdGNwbV9nZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgdGNwY19kZXYgKmRldikNCit7DQorc3Ry dWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBydDE3MTFo X2NoaXAsDQordGNwY19kZXYpOw0KK2ludCBjdXJyZW50X2xpbWl0ID0gMDsNCit1bnNpZ25lZCBs b25nIHRpbWVvdXQ7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQor aWYgKCFjaGlwLT5leHRjb24pDQorcmV0dXJuIDA7DQorDQorLyoNCisgKiBVU0IyIENoYXJnZXIg ZGV0ZWN0aW9uIG1heSBzdGlsbCBiZSBpbiBwcm9ncmVzcyB3aGVuIHdlIGdldCBoZXJlLA0KKyAq IHRoaXMgY2FuIHRha2UgdXB0byA2MDBtcywgd2FpdCA4MDBtcyBtYXguDQorICovDQordGltZW91 dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDgwMCk7DQorZG8gew0KK2lmIChleHRjb25f Z2V0X3N0YXRlKGNoaXAtPmV4dGNvbiwgRVhUQ09OX0NIR19VU0JfU0RQKSA9PSAxKQ0KK2N1cnJl bnRfbGltaXQgPSA1MDA7DQorDQoraWYgKGV4dGNvbl9nZXRfc3RhdGUoY2hpcC0+ZXh0Y29uLCBF WFRDT05fQ0hHX1VTQl9DRFApID09IDEgfHwNCisgICAgZXh0Y29uX2dldF9zdGF0ZShjaGlwLT5l eHRjb24sIEVYVENPTl9DSEdfVVNCX0FDQSkgPT0gMSkNCitjdXJyZW50X2xpbWl0ID0gMTUwMDsN CisNCitpZiAoZXh0Y29uX2dldF9zdGF0ZShjaGlwLT5leHRjb24sIEVYVENPTl9DSEdfVVNCX0RD UCkgPT0gMSkNCitjdXJyZW50X2xpbWl0ID0gMjAwMDsNCisNCittc2xlZXAoNTApOw0KK30gd2hp bGUgKGN1cnJlbnRfbGltaXQgPT0gMCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7 DQorDQorcmV0dXJuIGN1cnJlbnRfbGltaXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX190Y3BtX3Nl dF9jYyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBlbnVtIHR5cGVjX2NjX3N0YXR1cyBjYykN Cit7DQordWludDhfdCBkYXRhID0gMCwgcHVsbCA9IDAsIHJwX2x2bCA9IDA7DQorDQorcnQxNzEx aF9sb2coY2hpcCwgIiVzICVzXG4iLCBfX2Z1bmNfXywgdHlwZWNfY2Nfc3RhdHVzX25hbWVbY2Nd KTsNCitzd2l0Y2ggKGNjKSB7DQorY2FzZSBUWVBFQ19DQ19PUEVOOg0KK2Nhc2UgVFlQRUNfQ0Nf UkQ6DQorY2FzZSBUWVBFQ19DQ19SUF9ERUY6DQorY2FzZSBUWVBFQ19DQ19SUF8xXzU6DQorY2Fz ZSBUWVBFQ19DQ19SUF8zXzA6DQorcHVsbCA9IHJ0MTcxMWhfY2Nfc3RhdHVzMnB1bGwoY2MpOw0K K3JwX2x2bCA9IFJUMTcxMUhfVFlQRUNfQ0NfUFVMTF9HRVRfUlBfTFZMKHB1bGwpOw0KK3B1bGwg PSBSVDE3MTFIX1RZUEVDX0NDX1BVTExfR0VUX1JFUyhwdWxsKTsNCitkYXRhID0gUlQxNzExSF9S RUdfUk9MRV9DVFJMX1JFU19TRVQoMCwgcnBfbHZsLCBwdWxsLCBwdWxsKTsNCiticmVhazsNCitk ZWZhdWx0Og0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyB1bnN1cHBvcnRlZCBjYyB2YWx1ZSAlc1xu IiwgX19mdW5jX18sDQordHlwZWNfY2Nfc3RhdHVzX25hbWVbY2NdKTsNCityZXR1cm4gLUVJTlZB TDsNCit9DQorDQorcmV0dXJuIHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX1JP TEVfQ1RSTCwgZGF0YSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zZXRfY2Moc3RydWN0IHRj cGNfZGV2ICpkZXYsIGVudW0gdHlwZWNfY2Nfc3RhdHVzIGNjKQ0KK3sNCitpbnQgcmV0ID0gMDsN CitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHJ0 MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQor cmV0ID0gX190Y3BtX3NldF9jYyhjaGlwLCBjYyk7DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2Nr KTsNCisNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIGVudW0gdHlwZWNfY2Nf c3RhdHVzIHJ0MTcxMWhfY2MyZW51bShlbnVtIHR5cGVjX2NjX3N0YXR1cyBjYywNCitib29sIGFj dF9hc19zaW5rKQ0KK3sNCityZXR1cm4gYWN0X2FzX3NpbmsgPyBjYyArIDIgOiBjYzsNCit9DQor DQorc3RhdGljIGludCBfX3RjcG1fZ2V0X2NjKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQor ew0KK2ludCByZXQgPSAwOw0KK3VpbnQ4X3Qgc3RhdHVzID0gMCwgcm9sZV9jdHJsID0gMCwgY2Nf cm9sZSA9IDA7DQorYm9vbCBhY3RfYXNfc2luaywgYWN0X2FzX2RycDsNCisNCityZXQgPSBydDE3 MTFoX3JlZ19yZWFkKGNoaXAsIFJUMTcxMUhfUkVHX0NDX1NUQVRVUywgJnN0YXR1cyk7DQoraWYg KHJldCA8IDApDQorcmV0dXJuIHJldDsNCisNCityZXQgPSBydDE3MTFoX3JlZ19yZWFkKGNoaXAs IFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCwgJnJvbGVfY3RybCk7DQoraWYgKHJldCA8IDApDQorcmV0 dXJuIHJldDsNCisNCitpZiAoc3RhdHVzICYgUlQxNzExSF9SRUdfQ0NfU1RBVFVTX0RSUF9UT0dH TElORykgew0KKy8qIGR1cmluZyB0b2dnbGluZywgY29uc2lkZXIgY2MgYXMgT3BlbiAqLw0KK2No aXAtPmNjMSA9IFRZUEVDX0NDX09QRU47DQorY2hpcC0+Y2MyID0gVFlQRUNfQ0NfT1BFTjsNCity dDE3MTFoX2xvZyhjaGlwLCAiJXMgZHJwIHRvZ2dsaW5nXG4iLCBfX2Z1bmNfXyk7DQorcmV0dXJu IDA7DQorfQ0KK2NoaXAtPmRycF90b2dnbGluZyA9IGZhbHNlOw0KKw0KK2FjdF9hc19kcnAgPSBS VDE3MTFIX1JFR19ST0xFX0NUUkxfRFJQICYgcm9sZV9jdHJsOw0KKw0KK2lmIChhY3RfYXNfZHJw KQ0KK2FjdF9hc19zaW5rID0gUlQxNzExSF9SRUdfQ0NfU1RBVFVTX0RSUF9SRVNVTFQoc3RhdHVz KTsNCitlbHNlIHsNCitjY19yb2xlID0gUlQxNzExSF9SRUdfUk9MRV9DVFJMX0NDMShyb2xlX2N0 cmwpOw0KK2FjdF9hc19zaW5rID0gKGNjX3JvbGUgPT0gVFlQRUNfQ0NfUFVMTF9SUCkgPyBmYWxz ZSA6IHRydWU7DQorfQ0KKw0KK2NoaXAtPmNjMSA9IFJUMTcxMUhfUkVHX0NDX1NUQVRVU19DQzEo c3RhdHVzKTsNCitjaGlwLT5jYzIgPSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfQ0MyKHN0YXR1cyk7 DQoraWYgKGNoaXAtPmNjMSAhPSBUWVBFQ19DQ19PUEVOKQ0KK2NoaXAtPmNjMSA9IHJ0MTcxMWhf Y2MyZW51bShjaGlwLT5jYzEsIGFjdF9hc19zaW5rKTsNCitpZiAoY2hpcC0+Y2MyICE9IFRZUEVD X0NDX09QRU4pDQorY2hpcC0+Y2MyID0gcnQxNzExaF9jYzJlbnVtKGNoaXAtPmNjMiwgYWN0X2Fz X3NpbmspOw0KKw0KK3JldCA9IHJ0MTcxMWhfaW5pdF9jY19wYXJhbXMoY2hpcCwgY2hpcC0+cG9s YXJpdHkgPw0KKyZjaGlwLT5jYzIgOiAmY2hpcC0+Y2MxKTsNCitpZiAocmV0IDwgMCkNCitydDE3 MTFoX2xvZyhjaGlwLCAiJXMgaW5pdCBjYyBwYXJhbSBmYWlsKCVkKVxuIiwgX19mdW5jX18sIHJl dCk7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGNjMSA9ICVzLCBjYzIgPSAlc1xuIiwgX19m dW5jX18sDQordHlwZWNfY2Nfc3RhdHVzX25hbWVbY2hpcC0+Y2MxXSwNCit0eXBlY19jY19zdGF0 dXNfbmFtZVtjaGlwLT5jYzJdKTsNCisNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB0 Y3BtX2dldF9jYyhzdHJ1Y3QgdGNwY19kZXYgKmRldiwNCitlbnVtIHR5cGVjX2NjX3N0YXR1cyAq Y2MxLCBlbnVtIHR5cGVjX2NjX3N0YXR1cyAqY2MyKQ0KK3sNCitpbnQgcmV0ID0gMDsNCitzdHJ1 Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHJ0MTcxMWhf Y2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorcmV0ID0g X190Y3BtX2dldF9jYyhjaGlwKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisqY2MxID0g Y2hpcC0+Y2MxOw0KKypjYzIgPSBjaGlwLT5jYzI7DQorb3V0Og0KK211dGV4X3VubG9jaygmY2hp cC0+bG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB0Y3BtX3NldF9wb2xh cml0eShzdHJ1Y3QgdGNwY19kZXYgKmRldiwNCitlbnVtIHR5cGVjX2NjX3BvbGFyaXR5IHBvbGFy aXR5KQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IGRhdGEgPSAwOw0KK3N0cnVjdCBydDE3 MTFoX2NoaXAgKmNoaXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0K K3RjcGNfZGV2KTsNCisNCittdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsNCitydDE3MTFoX2xvZyhj aGlwLCAiJXMgJXNcbiIsIF9fZnVuY19fLCBjY19wb2xhcml0eV9uYW1lW3BvbGFyaXR5XSk7DQor cmV0ID0gcnQxNzExaF9pbml0X2NjX3BhcmFtcyhjaGlwLCBwb2xhcml0eSA/ICZjaGlwLT5jYzIg OiAmY2hpcC0+Y2MxKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisNCityZXQgPSBydDE3 MTFoX3JlZ19yZWFkKGNoaXAsIFJUMTcxMUhfUkVHX1RDUENfQ1RSTCwgJmRhdGEpOw0KK2lmIChy ZXQgPCAwKQ0KK2dvdG8gb3V0Ow0KKw0KK2RhdGEgJj0gflJUMTcxMUhfUkVHX1RDUENfQ1RSTF9Q TFVHX09SSUVOVDsNCitkYXRhIHw9IHBvbGFyaXR5ID8gUlQxNzExSF9SRUdfVENQQ19DVFJMX1BM VUdfT1JJRU5UIDogMDsNCisNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFI X1JFR19UQ1BDX0NUUkwsIGRhdGEpOw0KK291dDoNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2sp Ow0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zZXRfdmNvbm4oc3RydWN0 IHRjcGNfZGV2ICpkZXYsIGJvb2wgb24pDQorew0KK2ludCByZXQgPSAwOw0KK3VpbnQ4X3QgZGF0 YSA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0 cnVjdCBydDE3MTFoX2NoaXAsDQordGNwY19kZXYpOw0KKw0KK211dGV4X2xvY2soJmNoaXAtPmxv Y2spOw0KK2lmIChjaGlwLT52Y29ubl9vbiA9PSBvbikgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIl cyB2Y29ubiBpcyBhbHJlYWR5ICVkXG4iLCBfX2Z1bmNfXywgb24pOw0KK2dvdG8gb3V0Ow0KK30N CityZXQgPSBydDE3MTFoX3JlZ19yZWFkKGNoaXAsIFJUMTcxMUhfUkVHX1BPV0VSX0NUUkwsICZk YXRhKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisNCitkYXRhICY9IH5SVDE3MTFIX1JF R19QT1dFUl9DVFJMX1ZDT05OOw0KK2RhdGEgfD0gb24gPyBSVDE3MTFIX1JFR19QT1dFUl9DVFJM X1ZDT05OIDogMDsNCisNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JF R19QT1dFUl9DVFJMLCBkYXRhKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisNCityZXQg PSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19JRExFX0NUUkwsDQorUlQxNzEx SF9SRUdfSURMRV9TRVQoMCwgMSwgb24gPyAwIDogMSwgMikpOw0KK2lmIChyZXQgPCAwKQ0KK2dv dG8gb3V0Ow0KKw0KK2NoaXAtPnZjb25uX29uID0gb247DQorcnQxNzExaF9sb2coY2hpcCwgIiVz IHZjb25uID0gJWRcbiIsIF9fZnVuY19fLCBvbik7DQorDQorb3V0Og0KK211dGV4X3VubG9jaygm Y2hpcC0+bG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB0Y3BtX3NldF92 YnVzKHN0cnVjdCB0Y3BjX2RldiAqZGV2LCBib29sIG9uLCBib29sIGNoYXJnZSkNCit7DQoraW50 IHJldCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihkZXYs IHN0cnVjdCBydDE3MTFoX2NoaXAsDQordGNwY19kZXYpOw0KKw0KK211dGV4X2xvY2soJmNoaXAt PmxvY2spOw0KK2lmIChjaGlwLT52YnVzX29uID09IG9uKQ0KK3J0MTcxMWhfbG9nKGNoaXAsICIl cyB2YnVzIGlzIGFscmVhZHkgJWRcbiIsIF9fZnVuY19fLCBvbik7DQorZWxzZSB7DQorcmV0ID0g KG9uID8gcmVndWxhdG9yX2VuYWJsZSA6IHJlZ3VsYXRvcl9kaXNhYmxlKShjaGlwLT52YnVzKTsN CitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBjYW5ub3QgJXMgdmJ1cyBy ZWd1bGF0b3IoJWQpXG4iLA0KK19fZnVuY19fLCBvbiA/ICJlbmFibGUiIDogImRpc2FibGUiLCBy ZXQpOw0KK2dvdG8gb3V0Ow0KK30NCitjaGlwLT52YnVzX29uID0gb247DQorcnQxNzExaF9sb2co Y2hpcCwgIiVzIHZidXMgPSAlZFxuIiwgX19mdW5jX18sIG9uKTsNCit9DQoraWYgKGNoaXAtPmNo YXJnZV9vbiA9PSBjaGFyZ2UpDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGNoZyBpcyBhbHJlYWR5 ICVkXG4iLCBfX2Z1bmNfXywgY2hhcmdlKTsNCitlbHNlIHsNCitjaGlwLT5jaGFyZ2Vfb24gPSBj aGFyZ2U7DQorcG93ZXJfc3VwcGx5X2NoYW5nZWQoY2hpcC0+cHN5KTsNCit9DQorDQorb3V0Og0K K211dGV4X3VubG9jaygmY2hpcC0+bG9jayk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgdGNwbV9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgdGNwY19kZXYgKmRldiwgdTMyIG1heF9t YSwNCit1MzIgbXYpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBjb250YWluZXJf b2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3RjcGNfZGV2KTsNCisNCitydDE3MTFoX2xv ZyhjaGlwLCAiJXMgJWQgbWEsICVkIG12IChub3QgaW1wbGVtZW50ZWQpXG4iLCBfX2Z1bmNfXywN CittYXhfbWEsIG12KTsNCisNCittdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsNCitjaGlwLT5zdXBw bHlfdm9sdGFnZSA9IG12Ow0KK2NoaXAtPmN1cnJlbnRfbGltaXQgPSBtYXhfbWE7DQorbXV0ZXhf dW5sb2NrKCZjaGlwLT5sb2NrKTsNCisNCitwb3dlcl9zdXBwbHlfY2hhbmdlZChjaGlwLT5wc3kp Ow0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHRjcG1fc2V0X3BkX3J4KHN0cnVjdCB0 Y3BjX2RldiAqZGV2LCBib29sIG9uKQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IHJ4X2Vu ID0gMHgwMDsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwg c3RydWN0IHJ0MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+ bG9jayk7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzICVkXG4iLCBfX2Z1bmNfXywgb24pOw0KK2lm IChvbikNCityeF9lbiA9IEJJVChUQ1BDX1RYX1NPUCkgfCBCSVQoVENQQ19UWF9IQVJEX1JFU0VU KTsNCisNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19SWF9ERVRF Q1QsIHJ4X2VuKTsNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2spOw0KK3JldHVybiByZXQ7DQor fQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zZXRfcm9sZXMoc3RydWN0IHRjcGNfZGV2ICpkZXYsIGJv b2wgYXR0YWNoZWQsDQorZW51bSB0eXBlY19yb2xlIHB3ciwgZW51bSB0eXBlY19kYXRhX3JvbGUg ZGF0YSkNCit7DQoraW50IHJldCA9IDA7DQordWludDhfdCBtc2dfaGRyID0gUlQxNzExSF9SRUdf TVNHX0hEUl9JTkZPX1NFVChkYXRhLCBwd3IpOw0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAg PSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3RjcGNfZGV2KTsNCisN CittdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgJXMgJXNc biIsIF9fZnVuY19fLCB0eXBlY19yb2xlX25hbWVbcHdyXSwNCit0eXBlY19kYXRhX3JvbGVfbmFt ZVtkYXRhXSk7DQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfTVNH X0hEUl9JTkZPLCBtc2dfaGRyKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCitjaGlwLT5w d3Jfcm9sZSA9IHB3cjsNCitvdXQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsNCityZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBfX3RjcG1fc3RhcnRfZHJwX3RvZ2ds aW5nKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwOw0KK3VpbnQ4 X3QgZGF0YSA9IDA7DQordWludDhfdCBycF9kZWYgPSBSVDE3MTFIX1RZUEVDX0NDX1BVTExfR0VU X1JQX0xWTChUWVBFQ19DQ19QVUxMX1JQX0RFRik7DQordWludDhfdCBjY19yb2xlID0gVFlQRUNf Q0NfUFVMTF9SRDsNCisNCitkYXRhID0gUlQxNzExSF9SRUdfUk9MRV9DVFJMX1JFU19TRVQoMCwg cnBfZGVmLCBjY19yb2xlLCBjY19yb2xlKTsNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlw LCBSVDE3MTFIX1JFR19ST0xFX0NUUkwsIGRhdGEpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiBy ZXQ7DQorbWRlbGF5KDEpOw0KK2RhdGEgPSBSVDE3MTFIX1JFR19ST0xFX0NUUkxfUkVTX1NFVCgx LCBycF9kZWYsIGNjX3JvbGUsIGNjX3JvbGUpOw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNo aXAsIFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCwgZGF0YSk7DQoraWYgKHJldCA8IDApDQorcmV0dXJu IHJldDsNCityZXQgPSBydDE3MTFoX2NvbW1hbmQoY2hpcCwgUlQxNzExSF9DTURfTE9PS19DT05O RUNUSU9OKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KK2NoaXAtPmRycF90b2dnbGlu ZyA9IHRydWU7DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zdGFydF9k cnBfdG9nZ2xpbmcoc3RydWN0IHRjcGNfZGV2ICpkZXYsDQorZW51bSB0eXBlY19jY19zdGF0dXMg Y2MpDQorew0KK2ludCByZXQgPSAwOw0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBjb250 YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3RjcGNfZGV2KTsNCisNCittdXRl eF9sb2NrKCZjaGlwLT5sb2NrKTsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNcbiIsIF9fZnVuY19f KTsNCityZXQgPSBfX3RjcG1fc3RhcnRfZHJwX3RvZ2dsaW5nKGNoaXApOw0KK2lmIChyZXQgPCAw KQ0KK2dvdG8gb3V0Ow0KK2lmIChjaGlwLT5kaWQgPCBSVDE3MTFIX0RJRF9EKQ0KK3JldCA9IHJ0 MTcxMWhfZW5hYmxlX2xvd19wb3dlcl9tb2RlKGNoaXAsIFRZUEVDX0NDX1BVTExfRFJQKTsNCisN CitvdXQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsNCityZXR1cm4gcmV0Ow0KK30NCisN CisjcHJhZ21hIHBhY2socHVzaCwgMSkNCitzdHJ1Y3QgdGNwY190cmFuc21pdF9wYWNrZXQgew0K K3VpbnQ4X3QgY250Ow0KK3VpbnQxNl90IG1zZ19oZWFkZXI7DQordWludDhfdCBkYXRhW3NpemVv Zih1aW50MzJfdCkgKiBQRF9NQVhfUEFZTE9BRF07DQorfTsNCisjcHJhZ21hIHBhY2socG9wKQ0K Kw0KK3N0YXRpYyBpbnQgdGNwbV9wZF90cmFuc21pdChzdHJ1Y3QgdGNwY19kZXYgKmRldiwNCitl bnVtIHRjcG1fdHJhbnNtaXRfdHlwZSB0eXBlLCBjb25zdCBzdHJ1Y3QgcGRfbWVzc2FnZSAqbXNn KQ0KK3sNCitpbnQgcmV0ID0gMDsNCitpbnQgZGF0YV9jbnQgPSAwOw0KK3N0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3Rj cGNfZGV2KTsNCitzdHJ1Y3QgdGNwY190cmFuc21pdF9wYWNrZXQgcGFja2V0Ow0KKw0KK3J0MTcx MWhfbG9nKGNoaXAsICIlcyAlc1xuIiwgX19mdW5jX18sIHRyYW5zbWl0X3R5cGVfbmFtZVt0eXBl XSk7DQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorc3dpdGNoICh0eXBlKSB7DQorY2FzZSBU Q1BDX1RYX1NPUDoNCitkYXRhX2NudCA9IHNpemVvZih1aW50MzJfdCkgKiBwZF9oZWFkZXJfY250 X2xlKG1zZy0+aGVhZGVyKTsNCitwYWNrZXQuY250ID0gZGF0YV9jbnQgKyBzaXplb2YodWludDE2 X3QpOw0KK3BhY2tldC5tc2dfaGVhZGVyID0gbXNnLT5oZWFkZXI7DQoraWYgKGRhdGFfY250ID4g MCkNCittZW1jcHkocGFja2V0LmRhdGEsICh1aW50OF90ICopbXNnLT5wYXlsb2FkLCBkYXRhX2Nu dCk7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfYmxvY2tfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdf VFhfQllURV9DTlQsDQorcGFja2V0LmNudCArIDEsICh1aW50OF90ICopJnBhY2tldCk7DQoraWYg KHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgZmFpbCAoJWQpXG4iLCBfX2Z1bmNf XywgcmV0KTsNCitnb3RvIG91dDsNCit9DQorYnJlYWs7DQorY2FzZSBUQ1BDX1RYX0hBUkRfUkVT RVQ6DQorYnJlYWs7DQorZGVmYXVsdDoNCitydDE3MTFoX2xvZyhjaGlwLCAidHlwZSAlcyBub3Qg c3VwcG9ydGVkXG4iLA0KK3RyYW5zbWl0X3R5cGVfbmFtZVt0eXBlXSk7DQorcmV0ID0gLUVJTlZB TDsNCitnb3RvIG91dDsNCit9DQorDQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQx NzExSF9SRUdfVFJBTlNNSVQsDQorUlQxNzExSF9SRUdfVFJBTlNNSVRfU0VUKDMsIHR5cGUpKTsN CitvdXQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsNCityZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IHJ0MTcxMWhfcGFyc2VfZHQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkN Cit7DQoraW50IHJldCA9IDAsIGxlbiA9IDA7DQordWludDMyX3QgdmFsID0gMDsNCitzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wID0gY2hpcC0+ZGV2LT5vZl9ub2RlOw0KK3N0cnVjdCB0Y3BjX2NvbmZp ZyAqY2ZnID0gJmNoaXAtPnRjcGNfY2ZnOw0KK2NvbnN0IGNoYXIgKm5hbWUgPSAiZGVmYXVsdCI7 DQorDQoraWYgKCFucCkNCityZXR1cm4gLUVJTlZBTDsNCisNCitkZXZfaW5mbyhjaGlwLT5kZXYs ICIlc1xuIiwgX19mdW5jX18pOw0KKw0KK21lbWNweShjZmcsICZydDE3MTFoX3RjcGNfY29uZmln LCBzaXplb2Yoc3RydWN0IHRjcGNfY29uZmlnKSk7DQorDQorcmV0ID0gb2ZfZ2V0X25hbWVkX2dw aW8obnAsICJydCxpbnRyX2dwaW8iLCAwKTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIoY2hp cC0+ZGV2LCAiJXMgZ2V0IGludCBncGlvIGZhaWwoJWQpXG4iLA0KK19fZnVuY19fLCByZXQpOw0K K3JldHVybiByZXQ7DQorfQ0KK2NoaXAtPmlycV9ncGlvID0gcmV0Ow0KK2Rldl9pbmZvKGNoaXAt PmRldiwgIiVzIGlycV9ncGlvID0gJWRcbiIsIF9fZnVuY19fLCBjaGlwLT5pcnFfZ3Bpbyk7DQor DQorb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJydCxuYW1lIiwgJm5hbWUpOw0KKw0KK2xl biA9IHN0cmxlbihuYW1lKTsNCitjaGlwLT5uYW1lID0gZGV2bV9remFsbG9jKGNoaXAtPmRldiwg bGVuICsgMSwgR0ZQX0tFUk5FTCk7DQoraWYgKCFjaGlwLT5uYW1lKQ0KK3JldHVybiAtRU5PTUVN Ow0KK3N0cmxjcHkoY2hpcC0+bmFtZSwgbmFtZSwgc3RybGVuKG5hbWUpICsgMSk7DQorDQoraWYg KG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicnQsZGVmX3JvbGUiLCAmdmFsKSA9PSAwKQ0KK2Nm Zy0+ZGVmYXVsdF9yb2xlID0gdmFsOw0KKw0KK2lmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwg InJ0LHBvcnRfdHlwZSIsICZ2YWwpID09IDApDQorY2ZnLT50eXBlID0gdmFsOw0KKw0KK2lmIChv Zl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJ0LG1heF9zbmtfbXYiLCAmdmFsKSA9PSAwKQ0KK2Nm Zy0+bWF4X3Nua19tdiA9IHZhbDsNCisNCitpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJy dCxtYXhfc25rX21hIiwgJnZhbCkgPT0gMCkNCitjZmctPm1heF9zbmtfbWEgPSB2YWw7DQorDQor aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicnQsbWF4X3Nua19tdyIsICZ2YWwpID09IDAp DQorY2ZnLT5tYXhfc25rX213ID0gdmFsOw0KKw0KK2lmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgInJ0LG9wZXJhdGluZ19zbmtfbXciLCAmdmFsKSA9PSAwKQ0KK2NmZy0+b3BlcmF0aW5nX3Nu a19tdyA9IHZhbDsNCisNCitjZmctPnRyeV9yb2xlX2h3ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29s KG5wLCAicnQsdHJ5X3JvbGVfaHciKTsNCisNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZv aWQgcnQxNzExaF9pbml0X3RjcGNfZGV2KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0K K2NoaXAtPnRjcGNfZGV2LmNvbmZpZyA9ICZjaGlwLT50Y3BjX2NmZzsNCitjaGlwLT50Y3BjX2Rl di5pbml0ID0gdGNwbV9pbml0Ow0KK2NoaXAtPnRjcGNfZGV2LmdldF92YnVzID0gdGNwbV9nZXRf dmJ1czsNCitjaGlwLT50Y3BjX2Rldi5nZXRfY3VycmVudF9saW1pdCA9IHRjcG1fZ2V0X2N1cnJl bnRfbGltaXQ7DQorY2hpcC0+dGNwY19kZXYuc2V0X2NjID0gdGNwbV9zZXRfY2M7DQorY2hpcC0+ dGNwY19kZXYuZ2V0X2NjID0gdGNwbV9nZXRfY2M7DQorY2hpcC0+dGNwY19kZXYuc2V0X3BvbGFy aXR5ID0gdGNwbV9zZXRfcG9sYXJpdHk7DQorY2hpcC0+dGNwY19kZXYuc2V0X3Zjb25uID0gdGNw bV9zZXRfdmNvbm47DQorY2hpcC0+dGNwY19kZXYuc2V0X3ZidXMgPSB0Y3BtX3NldF92YnVzOw0K K2NoaXAtPnRjcGNfZGV2LnNldF9jdXJyZW50X2xpbWl0ID0gdGNwbV9zZXRfY3VycmVudF9saW1p dDsNCitjaGlwLT50Y3BjX2Rldi5zZXRfcGRfcnggPSB0Y3BtX3NldF9wZF9yeDsNCitjaGlwLT50 Y3BjX2Rldi5zZXRfcm9sZXMgPSB0Y3BtX3NldF9yb2xlczsNCitjaGlwLT50Y3BjX2Rldi5zdGFy dF9kcnBfdG9nZ2xpbmcgPSB0Y3BtX3N0YXJ0X2RycF90b2dnbGluZzsNCitjaGlwLT50Y3BjX2Rl di5wZF90cmFuc21pdCA9IHRjcG1fcGRfdHJhbnNtaXQ7DQorY2hpcC0+dGNwY19kZXYubXV4ID0g TlVMTDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2dldF9hbGVydF9zdGF0dXMoc3RydWN0 IHJ0MTcxMWhfY2hpcCAqY2hpcCwNCit1aW50MzJfdCAqYWxlcnQpDQorew0KK2ludCByZXQgPSAw Ow0KK3VpbnQxNl90IGRhdGEgPSAwOw0KK3VpbnQ4X3QgcnRfaW50ID0gMDsNCisNCityZXQgPSBy dDE3MTFoX3JlZ19yZWFkX3dvcmQoY2hpcCwgUlQxNzExSF9SRUdfQUxFUlQsICZkYXRhKTsNCitp ZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKyphbGVydCA9IGRhdGE7DQorDQorcmV0ID0gcnQx NzExaF9yZWdfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19SVF9JTlQsICZydF9pbnQpOw0KK2lmIChy ZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorKmFsZXJ0IHw9IHJ0X2ludCA8PCAxNjsNCisNCityZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2dldF9mYXVsdF9zdGF0dXMoc3RydWN0 IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCAqc3RhdHVzKQ0KK3sNCityZXR1cm4gcnQxNzEx aF9yZWdfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVMsIHN0YXR1cyk7DQorfQ0K Kw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfZmF1bHRfc3RhdHVzX3Zjb25uX292KHN0cnVj dCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwOw0KK3VpbnQ4X3QgZGF0YSA9 IDA7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19CTUNfQ1RS TCwgJmRhdGEpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorDQorZGF0YSAmPSB+UlQx NzExSF9SRUdfRElTQ0hBUkdFX0VOOw0KK3JldHVybiBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBS VDE3MTFIX1JFR19CTUNfQ1RSTCwgZGF0YSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9m YXVsdF9zdGF0dXNfY2xlYXIoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCBzdGF0 dXMpDQorew0KK2lmIChzdGF0dXMgJiBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfVkNPTk5fT1Yp DQorcnQxNzExaF9mYXVsdF9zdGF0dXNfdmNvbm5fb3YoY2hpcCk7DQorDQorcmV0dXJuIHJ0MTcx MWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX0ZBVUxUX1NUQVRVUywgc3RhdHVzKTsNCit9 DQorDQorLyogQWxlcnQgaGFuZGxlcnMgKi8NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfYWxlcnRf Y2NfY2hhbmdlZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMDsN CisNCityZXQgPSBfX3RjcG1fZ2V0X2NjKGNoaXApOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiBy ZXQ7DQorDQoraWYgKGNoaXAtPmRycF90b2dnbGluZykgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIl cyBEUlAgdG9nZ2xpbmdcbiIsIF9fZnVuY19fKTsNCitpZiAoY2hpcC0+ZGlkIDwgUlQxNzExSF9E SURfRCAmJiBjaGlwLT5scG0gJiYgIWNoaXAtPmNhYmxlX29ubHkpDQorcnQxNzExaF9lbnRlcl9s b3dfcG93ZXJfbW9kZShjaGlwKTsNCityZXR1cm4gMDsNCit9DQoraWYgKGNoaXAtPmRpZCA8IFJU MTcxMUhfRElEX0QpDQorcnQxNzExaF9kaXNhYmxlX2xvd19wb3dlcl9tb2RlKGNoaXApOw0KKw0K K3RjcG1fY2NfY2hhbmdlKGNoaXAtPnRjcG1fcG9ydCk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgcnQxNzExaF9hbGVydF9wb3dlcl9zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgcnQxNzEx aF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMDsNCitib29sIHZidXNfcHJlcyA9IGZhbHNl Ow0KK3VpbnQ4X3QgZGF0YSA9IDA7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZChjaGlwLCBS VDE3MTFIX1JFR19QT1dFUl9TVEFUVVMsICZkYXRhKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91 dDsNCisNCit2YnVzX3ByZXMgPSAoZGF0YSAmIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVU19WQlVT X1BSRVMpID8gdHJ1ZSA6IGZhbHNlOw0KK2lmICh2YnVzX3ByZXMgIT0gY2hpcC0+dmJ1c19wcmVz ZW50KSB7DQorY2hpcC0+dmJ1c19wcmVzZW50ID0gdmJ1c19wcmVzOw0KK3J0MTcxMWhfbG9nKGNo aXAsICIlcyB2YnVzID0gJWRcbiIsIF9fZnVuY19fLCB2YnVzX3ByZXMpOw0KK3RjcG1fdmJ1c19j aGFuZ2UoY2hpcC0+dGNwbV9wb3J0KTsNCit9DQorDQorb3V0Og0KK3JldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF9yZWN2X21zZyhzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMCwgbGVuID0gMDsNCit1aW50OF90IGJ1ZlsyXTsNCitz dHJ1Y3QgcGRfbWVzc2FnZSBtc2c7DQorY29uc3QgdWludDMyX3QgYWxlcnRfcnggPQ0KK1JUMTcx MUhfUkVHX0FMRVJUX1JYX1NUQVRVUyB8IFJUMTcxMUhfUkVHX0FMRVJUX1JYX0JVRl9PVkY7DQor DQorcnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQorcmV0ID0gcnQxNzExaF9y ZWdfYmxvY2tfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19SWF9IRFIsIDIsIGJ1Zik7DQoraWYgKHJl dCA8IDApDQorcmV0dXJuIHJldDsNCisNCittZW1jcHkoJihtc2cuaGVhZGVyKSwgYnVmLCAyKTsN CisNCitsZW4gPSBwZF9oZWFkZXJfY250X2xlKG1zZy5oZWFkZXIpICogNDsNCitpZiAobGVuID4g UERfTUFYX1BBWUxPQUQgKiA0KSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIFBEIG1lc3NhZ2Ug dG9vIGxvbmcgJWRcbiIsIF9fZnVuY19fLCBsZW4pOw0KK3JldHVybiAtRUlOVkFMOw0KK30NCitp ZiAobGVuID4gMCkNCityZXQgPSBydDE3MTFoX3JlZ19ibG9ja19yZWFkKGNoaXAsIFJUMTcxMUhf UkVHX1JYX0RBVEEsIGxlbiwNCisodWludDhfdCAqKW1zZy5wYXlsb2FkKTsNCisNCisvKiBSZWFk IGNvbXBsZXRlLCBjbGVhciBSWCBzdGF0dXMgYWxlcnQgYml0ICovDQorcnQxNzExaF9hbGVydF9z dGF0dXNfY2xlYXIoY2hpcCwgYWxlcnRfcngpOw0KKw0KK3RjcG1fcGRfcmVjZWl2ZShjaGlwLT50 Y3BtX3BvcnQsICZtc2cpOw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzEx aF9hbGVydF9yZWN2X2hhcmRfcmVzZXQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQor dGNwbV9wZF9oYXJkX3Jlc2V0KGNoaXAtPnRjcG1fcG9ydCk7DQorcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF90eF9mYWlsZWQoc3RydWN0IHJ0MTcxMWhfY2hpcCAq Y2hpcCkNCit7DQordGNwbV9wZF90cmFuc21pdF9jb21wbGV0ZShjaGlwLT50Y3BtX3BvcnQsIFRD UENfVFhfRkFJTEVEKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2Fs ZXJ0X3R4X2Rpc2NhcmQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQordGNwbV9wZF90 cmFuc21pdF9jb21wbGV0ZShjaGlwLT50Y3BtX3BvcnQsIFRDUENfVFhfRElTQ0FSREVEKTsNCity ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2FsZXJ0X3R4X3N1Y2Nlc3Moc3Ry dWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQordGNwbV9wZF90cmFuc21pdF9jb21wbGV0ZShj aGlwLT50Y3BtX3BvcnQsIFRDUENfVFhfU1VDQ0VTUyk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgcnQxNzExaF9hbGVydF9mYXVsdChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0K K3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IHN0YXR1cyA9IDA7DQorDQorcmV0ID0gcnQxNzEx aF9nZXRfZmF1bHRfc3RhdHVzKGNoaXAsICZzdGF0dXMpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVy biByZXQ7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIDB4JTAyWFxuIiwgX19mdW5jX18sIHN0 YXR1cyk7DQorcnQxNzExaF9mYXVsdF9zdGF0dXNfY2xlYXIoY2hpcCwgc3RhdHVzKTsNCityZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2FsZXJ0X3J4X292ZXJmbG93KHN0cnVj dCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwOw0KK3VpbnQzMl90IGFsZXJ0 X3N0YXR1cyA9IDA7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQor DQorcmV0ID0gcnQxNzExaF9nZXRfYWxlcnRfc3RhdHVzKGNoaXAsICZhbGVydF9zdGF0dXMpOw0K K2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorDQoraWYgKGFsZXJ0X3N0YXR1cyAmIFJUMTcx MUhfUkVHX0FMRVJUX1JYX1NUQVRVUykNCityZXR1cm4gcnQxNzExaF9hbGVydF9yZWN2X21zZyhj aGlwKTsNCisNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2FsZXJ0X3dh a2V1cChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitydDE3MTFoX2xvZyhjaGlwLCAi JXNcbiIsIF9fZnVuY19fKTsNCitpZiAoY2hpcC0+ZHJwX3RvZ2dsaW5nKQ0KK3J0MTcxMWhfZW5h YmxlX3dha2V1cF90aW1lcihjaGlwLCB0cnVlKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBydDE3MTFoX2FsZXJ0X3JhX2RldGFjaChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0K K3sNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNcbiIsIF9fZnVuY19fKTsNCitpZiAoY2hpcC0+ZHJw X3RvZ2dsaW5nKQ0KK3J0MTcxMWhfZW50ZXJfbHBtX2FnYWluKGNoaXApOw0KKw0KK3JldHVybiAw Ow0KK30NCisNCitzdHJ1Y3QgcnQxNzExaF9hbGVydF9oYW5kbGVyIHsNCit1aW50MzJfdCBiaXRf bWFzazsNCitpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKTsNCit9Ow0K Kw0KKyNkZWZpbmUgUlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoeGJpdCwgeGhhbmRsZXIpIHsg XA0KKy5iaXRfbWFzayA9IDEgPDwgeGJpdCwgXA0KKy5oYW5kbGVyID0geGhhbmRsZXIsIFwNCit9 DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBydDE3MTFoX2FsZXJ0X2hhbmRsZXIgcnQxNzExaF9h bGVydF9oYW5kbGVyc1tdID0gew0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDQsIHJ0MTcx MWhfYWxlcnRfdHhfZmFpbGVkKSwNCitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFORExFUig1LCBydDE3 MTFoX2FsZXJ0X3R4X2Rpc2NhcmQpLA0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDYsIHJ0 MTcxMWhfYWxlcnRfdHhfc3VjY2VzcyksDQorUlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoMiwg cnQxNzExaF9hbGVydF9yZWN2X21zZyksDQorUlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoNywg TlVMTCksDQorUlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoOCwgTlVMTCksDQorUlQxNzExSF9E RUNMX0FMRVJUX0hBTkRMRVIoMywgcnQxNzExaF9hbGVydF9yZWN2X2hhcmRfcmVzZXQpLA0KK1JU MTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDEwLCBydDE3MTFoX2FsZXJ0X3J4X292ZXJmbG93KSwN CitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFORExFUigxNiwgcnQxNzExaF9hbGVydF93YWtldXApLA0K K1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDIxLCBydDE3MTFoX2FsZXJ0X3JhX2RldGFjaCks DQorUlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoOSwgcnQxNzExaF9hbGVydF9mYXVsdCksDQor UlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoMCwgcnQxNzExaF9hbGVydF9jY19jaGFuZ2VkKSwN CitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFORExFUigxLCBydDE3MTFoX2FsZXJ0X3Bvd2VyX3N0YXR1 c19jaGFuZ2VkKSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgX19ydDE3MTFoX2lycV9oYW5kbGVyKHN0 cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCBpID0gMCwgcmV0ID0gMDsNCit1aW50 MzJfdCBhbGVydF9zdGF0dXMgPSAwOw0KKw0KK3JldCA9IHJ0MTcxMWhfZ2V0X2FsZXJ0X3N0YXR1 cyhjaGlwLCAmYWxlcnRfc3RhdHVzKTsNCitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNo aXAsICIlcyBnZXQgYWxlcnQgc3RhdHVzIGZhaWwoJWQpXG4iLA0KK19fZnVuY19fLCByZXQpOw0K K2dvdG8gb3V0Ow0KK30NCisNCitydDE3MTFoX2FsZXJ0X3N0YXR1c19jbGVhcihjaGlwLA0KK2Fs ZXJ0X3N0YXR1cyAmICh+UlQxNzExSF9SRUdfQUxFUlRfUlhfTUFTSykpOw0KKw0KK2lmIChhbGVy dF9zdGF0dXMpDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIDB4JTA0WFxuIiwgX19mdW5jX18sIGFs ZXJ0X3N0YXR1cyk7DQorDQoraWYgKGFsZXJ0X3N0YXR1cyAmIFJUMTcxMUhfUkVHX0FMRVJUX0VY VF9WQlVTXzgwKQ0KK2FsZXJ0X3N0YXR1cyB8PSBSVDE3MTFIX1JFR19BTEVSVF9QT1dFUl9TVEFU VVM7DQorDQorZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnQxNzExaF9hbGVydF9oYW5kbGVy cyk7IGkrKykgew0KK2lmIChydDE3MTFoX2FsZXJ0X2hhbmRsZXJzW2ldLmJpdF9tYXNrICYgYWxl cnRfc3RhdHVzKSB7DQoraWYgKHJ0MTcxMWhfYWxlcnRfaGFuZGxlcnNbaV0uaGFuZGxlciAhPSAw KQ0KK3J0MTcxMWhfYWxlcnRfaGFuZGxlcnNbaV0uaGFuZGxlcihjaGlwKTsNCit9DQorfQ0KKw0K K291dDoNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgcnQxNzExaF9w b2xsX2N0cmwoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorY2FuY2VsX2RlbGF5ZWRf d29ya19zeW5jKCZjaGlwLT5wb2xsX3dvcmspOw0KKw0KK2lmIChhdG9taWNfcmVhZCgmY2hpcC0+ cG9sbF9jb3VudCkgPT0gMCkgew0KK2F0b21pY19pbmMoJmNoaXAtPnBvbGxfY291bnQpOw0KK2Nw dV9pZGxlX3BvbGxfY3RybCh0cnVlKTsNCit9DQorDQorc2NoZWR1bGVfZGVsYXllZF93b3JrKCZj aGlwLT5wb2xsX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoNDApKTsNCit9DQorDQorc3RhdGljIHZv aWQgcnQxNzExaF9pcnFfd29ya19oYW5kbGVyKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspDQor ew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPQ0KK2NvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgcnQxNzExaF9jaGlwLCBpcnFfd29yayk7DQoraW50IHJldCA9IDAsIGdwaW9fdmFsID0gMDsN CisNCitydDE3MTFoX3BvbGxfY3RybChjaGlwKTsNCittdXRleF9sb2NrKCZjaGlwLT53YWtldXBf bG9jayk7DQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorZG8gew0KK3JldCA9IF9fcnQxNzEx aF9pcnFfaGFuZGxlcihjaGlwKTsNCitpZiAocmV0IDwgMCkNCiticmVhazsNCitncGlvX3ZhbCA9 IGdwaW9fZ2V0X3ZhbHVlKGNoaXAtPmlycV9ncGlvKTsNCit9IHdoaWxlIChncGlvX3ZhbCA9PSAw KTsNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2spOw0KK211dGV4X3VubG9jaygmY2hpcC0+d2Fr ZXVwX2xvY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBydDE3MTFoX3BvbGxfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MTcxMWhfY2hpcCwNCitwb2xsX3dvcmsud29yayk7DQor DQoraWYgIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjaGlwLT5wb2xsX2NvdW50KSkNCitjcHVfaWRs ZV9wb2xsX2N0cmwoZmFsc2UpOw0KK30NCisjZGVmaW5lIFJUMTcxMUhfSVJRX1dBS0VfVElNRSg1 MDApIC8qIG1zICovDQorDQorc3RhdGljIGlycXJldHVybl90IHJ0MTcxMWhfaW50cl9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRhdGEpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBk YXRhOw0KKw0KK3BtX3dha2V1cF9ldmVudChjaGlwLT5kZXYsIFJUMTcxMUhfSVJRX1dBS0VfVElN RSk7DQora3RocmVhZF9xdWV1ZV93b3JrKCZjaGlwLT5pcnFfd29ya2VyLCAmY2hpcC0+aXJxX3dv cmspOw0KKw0KK3JldHVybiBJUlFfSEFORExFRDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFo X2luaXRfYWxlcnQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50IHJldCA9IDAs IGxlbiA9IDA7DQorY2hhciAqbmFtZSA9IE5VTEw7DQorc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFt ID0gey5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPIC0gMX07DQorDQorcnQxNzExaF9yZWdf d3JpdGVfd29yZChjaGlwLCBSVDE3MTFIX1JFR19BTEVSVF9NQVNLLCAwKTsNCitydDE3MTFoX3Jl Z193cml0ZV93b3JkKGNoaXAsIFJUMTcxMUhfUkVHX0FMRVJULCAweGZmZmYpOw0KKw0KK2xlbiA9 IHN0cmxlbihjaGlwLT5uYW1lKTsNCituYW1lID0gZGV2bV9remFsbG9jKGNoaXAtPmRldiwgbGVu ICsgNSwgR0ZQX0tFUk5FTCk7DQoraWYgKCFuYW1lKQ0KK3JldHVybiAtRU5PTUVNOw0KKw0KK3Nu cHJpbnRmKG5hbWUsIGxlbiwgIiVzLUlSUSIsIGNoaXAtPm5hbWUpOw0KKw0KK2Rldl9pbmZvKGNo aXAtPmRldiwgIiVzIG5hbWUgPSAlcywgZ3BpbyA9ICVkXG4iLCBfX2Z1bmNfXywgY2hpcC0+bmFt ZSwNCitjaGlwLT5pcnFfZ3Bpbyk7DQorDQorcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKGNo aXAtPmRldiwgY2hpcC0+aXJxX2dwaW8sDQorR1BJT0ZfSU4sIG5hbWUpOw0KK2lmIChyZXQgPCAw KSB7DQorZGV2X2VycihjaGlwLT5kZXYsICIlcyByZXF1ZXN0IGdwaW8gZmFpbCglZClcbiIsDQor X19mdW5jX18sIHJldCk7DQorZ290byBlcnJfaW5pdF9hbGVydDsNCit9DQorDQorY2hpcC0+aXJx ID0gZ3Bpb190b19pcnEoY2hpcC0+aXJxX2dwaW8pOw0KK2lmIChjaGlwLT5pcnEgPD0gMCkgew0K K2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgZ3BpbzJpcnEgZmFpbCglZClcbiIsDQorX19mdW5jX18s IGNoaXAtPmlycSk7DQorcmV0ID0gLUVJTlZBTDsNCitnb3RvIGVycl9pbml0X2FsZXJ0Ow0KK30N CitkZXZfaW5mbyhjaGlwLT5kZXYsICIlcyBpcnEgPSAlZFxuIiwgX19mdW5jX18sIGNoaXAtPmly cSk7DQorDQora3RocmVhZF9pbml0X3dvcmtlcigmY2hpcC0+aXJxX3dvcmtlcik7DQorY2hpcC0+ aXJxX3dvcmtlcl90YXNrID0ga3RocmVhZF9ydW4oa3RocmVhZF93b3JrZXJfZm4sDQorJmNoaXAt PmlycV93b3JrZXIsIGNoaXAtPm5hbWUpOw0KK2lmIChJU19FUlIoY2hpcC0+aXJxX3dvcmtlcl90 YXNrKSkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgY291bGQgbm90IGNyZWF0ZSB0Y3BjIHRh c2tcbiIsIF9fZnVuY19fKTsNCitnb3RvIGVycl9pbml0X2FsZXJ0Ow0KK30NCisNCitzY2hlZF9z ZXRzY2hlZHVsZXIoY2hpcC0+aXJxX3dvcmtlcl90YXNrLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOw0K K2t0aHJlYWRfaW5pdF93b3JrKCZjaGlwLT5pcnFfd29yaywgcnQxNzExaF9pcnFfd29ya19oYW5k bGVyKTsNCisNCityZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGNoaXAtPmRldiwgY2hpcC0+aXJxLCBy dDE3MTFoX2ludHJfaGFuZGxlciwNCitJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfTk9fVEhS RUFEIHwgSVJRRl9OT19TVVNQRU5ELCBuYW1lLA0KK2NoaXApOw0KK2lmIChyZXQgPCAwKSB7DQor ZGV2X2VycihjaGlwLT5kZXYsICIlcyByZXF1ZXN0IGlycSVkIGZhaWwoJWQpXG4iLA0KK19fZnVu Y19fLCBjaGlwLT5pcnEsIHJldCk7DQorZ290byBlcnJfaW5pdF9hbGVydDsNCit9DQorZW5hYmxl X2lycV93YWtlKGNoaXAtPmlycSk7DQorcmV0dXJuIDA7DQorDQorZXJyX2luaXRfYWxlcnQ6DQor ZGV2bV9rZnJlZShjaGlwLT5kZXYsIG5hbWUpOw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRp YyBpbnQgcnQxNzExaF9jaGVja19yZXZpc2lvbihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQ0KK3sN CitpbnQgcmV0ID0gMDsNCisNCityZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoaTJjLCAw eDAwKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KK2lmIChyZXQgIT0gMHgyOWNmKSB7 DQorZGV2X2VycigmaTJjLT5kZXYsICJ2aWQgaXMgbm90IGNvcnJlY3QsIDB4JTA0eFxuIiwgcmV0 KTsNCityZXR1cm4gLUVOT0RFVjsNCit9DQorcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRh KGkyYywgMHgwMik7DQoraWYgKHJldCA8IDApDQorcmV0dXJuIHJldDsNCitpZiAocmV0ICE9IDB4 MTcxMSkgew0KK2Rldl9lcnIoJmkyYy0+ZGV2LCAicGlkIGlzIG5vdCBjb3JyZWN0LCAweCUwNHhc biIsIHJldCk7DQorcmV0dXJuIC1FTk9ERVY7DQorfQ0KK3JldCA9IGkyY19zbWJ1c19yZWFkX3dv cmRfZGF0YShpMmMsIDB4MDQpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorLyogcmV0 dXJuIGRpZCAqLw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9pMmNf cHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisgICAgIGNvbnN0IHN0cnVjdCBpMmNf ZGV2aWNlX2lkICppZCkNCit7DQoraW50IHJldCA9IDA7DQordWludDE2X3QgZGlkID0gMDsNCitz dHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gTlVMTDsNCitzdHJ1Y3QgcG93ZXJfc3VwcGx5X2Nv bmZpZyBjZmcgPSB7fTsNCisNCitwcl9pbmZvKCIlcyAlc1xuIiwgX19mdW5jX18sIFJUMTcxMUhf RFJWX1ZFUlNJT04pOw0KKw0KK2lmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5h ZGFwdGVyLA0KK0kyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykpIHsNCitkZXZfZXJyKCZjbGllbnQt PmRldiwNCisiSTJDL1NNQnVzeXkgYmxvY2sgZnVuY3Rpb25hbGl0eSBub3Qgc3VwcG9ydGVkIVxu Iik7DQorcmV0dXJuIC1FTk9ERVY7DQorfQ0KK3JldCA9IHJ0MTcxMWhfY2hlY2tfcmV2aXNpb24o Y2xpZW50KTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2hlY2sg dmlkL3BpZC9kaWQgZmFpbFxuIik7DQorcmV0dXJuIHJldDsNCit9DQorZGlkID0gKHVpbnQxNl90 KXJldDsNCitkZXZfaW5mbygmY2xpZW50LT5kZXYsICJkaWQgPSAweCUwNHhcbiIsIGRpZCk7DQor Y2hpcCA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqY2hpcCksIEdGUF9LRVJO RUwpOw0KK2lmICghY2hpcCkNCityZXR1cm4gLUVOT01FTTsNCitjaGlwLT5pMmMgPSBjbGllbnQ7 DQorY2hpcC0+ZGV2ID0gJmNsaWVudC0+ZGV2Ow0KK2NoaXAtPmRpZCA9IGRpZDsNCittdXRleF9p bml0KCZjaGlwLT5sb2NrKTsNCittdXRleF9pbml0KCZjaGlwLT53YWtldXBfbG9jayk7DQorSU5J VF9ERUxBWUVEX1dPUksoJmNoaXAtPnBvbGxfd29yaywgcnQxNzExaF9wb2xsX3dvcmspOw0KK0lO SVRfREVMQVlFRF9XT1JLKCZjaGlwLT53YWtldXBfd29yaywgcnQxNzExaF93YWtldXBfd29yayk7 DQorYWxhcm1faW5pdCgmY2hpcC0+d2FrZXVwX3RpbWVyLCBBTEFSTV9SRUFMVElNRSwNCitydDE3 MTFoX2FsYXJtX3dha2V1cF9oYW5kbGVyKTsNCitpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBj aGlwKTsNCisNCityZXQgPSBydDE3MTFoX3BhcnNlX2R0KGNoaXApOw0KK2lmIChyZXQgPCAwKQ0K K2dvdG8gb3V0X3BhcnNlX2R0Ow0KKw0KK2NmZy5kcnZfZGF0YSA9IGNoaXA7DQorY2hpcC0+cHN5 ID0gZGV2bV9wb3dlcl9zdXBwbHlfcmVnaXN0ZXIoY2hpcC0+ZGV2LCAmcnQxNzExaF9wc3lfZGVz YywNCismY2ZnKTsNCitpZiAoSVNfRVJSKGNoaXAtPnBzeSkpIHsNCityZXQgPSBQVFJfRVJSKGNo aXAtPnBzeSk7DQorZGV2X2VycihjaGlwLT5kZXYsICIlcyByZWdpc3RlciBwc3kgZmFpbCglZClc biIsIF9fZnVuY19fLCByZXQpOw0KK2dvdG8gb3V0X3BzeV9yZWc7DQorfQ0KKw0KK2NoaXAtPnZi dXMgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoY2hpcC0+ZGV2LCAidmJ1cyIpOw0KK2lmIChJU19FUlIo Y2hpcC0+dmJ1cykpIHsNCityZXQgPSBQVFJfRVJSKGNoaXAtPnZidXMpOw0KK2dvdG8gb3V0X3Jl Z19nZXQ7DQorfQ0KKw0KK3JldCA9IHJ0MTcxMWhfZGVidWdmc19pbml0KGNoaXApOw0KK2lmIChy ZXQgPCAwKQ0KK2dvdG8gb3V0X2RiZ2ZzX2luaXQ7DQorDQorcmV0ID0gcnQxNzExaF9zb2Z0d2Fy ZV9yZXNldChjaGlwKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dF9zd19yZXNldDsNCisNCity ZXQgPSBydDE3MTFoX2luaXRfYWxlcnQoY2hpcCk7DQoraWYgKHJldCA8IDApDQorZ290byBvdXRf aW5pdF9hbGVydDsNCisNCitydDE3MTFoX2luaXRfdGNwY19kZXYoY2hpcCk7DQorDQorY2hpcC0+ dGNwbV9wb3J0ID0gdGNwbV9yZWdpc3Rlcl9wb3J0KGNoaXAtPmRldiwNCismY2hpcC0+dGNwY19k ZXYpOw0KK2lmIChJU19FUlIoY2hpcC0+dGNwbV9wb3J0KSkgew0KK3JldCA9IFBUUl9FUlIoY2hp cC0+dGNwbV9wb3J0KTsNCitkZXZfZXJyKGNoaXAtPmRldiwgIiVzIHJlZ2lzdGVyIHRjcG0gcG9y dCBmYWlsKCVkKSIsDQorX19mdW5jX18sIHJldCk7DQorZ290byBvdXRfdGNwbV9yZWc7DQorfQ0K Kw0KK3BtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmY2xpZW50LT5kZXYpOw0KK3BtX3J1bnRpbWVfZW5h YmxlKCZjbGllbnQtPmRldik7DQorZGV2X2luZm8oY2hpcC0+ZGV2LCAiJXM6IHN1Y2Nlc3NmdWxs eVxuIiwgX19mdW5jX18pOw0KK3JldHVybiAwOw0KKw0KK291dF90Y3BtX3JlZzoNCitvdXRfaW5p dF9hbGVydDoNCitvdXRfc3dfcmVzZXQ6DQorcnQxNzExaF9kZWJ1Z2ZzX2V4aXQoY2hpcCk7DQor b3V0X2RiZ2ZzX2luaXQ6DQorb3V0X3JlZ19nZXQ6DQorb3V0X3BzeV9yZWc6DQorb3V0X3BhcnNl X2R0Og0KK211dGV4X2Rlc3Ryb3koJmNoaXAtPmxvY2spOw0KK2Rldm1fa2ZyZWUoJmNsaWVudC0+ ZGV2LCBjaGlwKTsNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2kyY19y ZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCit7DQorc3RydWN0IHJ0MTcxMWhfY2hp cCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKw0KK3BtX3J1bnRpbWVfZGlz YWJsZSgmY2xpZW50LT5kZXYpOw0KK3BtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgmY2xpZW50LT5k ZXYpOw0KK2lmIChjaGlwKSB7DQorcnQxNzExaF9kZWJ1Z2ZzX2V4aXQoY2hpcCk7DQorbXV0ZXhf ZGVzdHJveSgmY2hpcC0+bG9jayk7DQorfQ0KK2Rldl9pbmZvKGNoaXAtPmRldiwgIiVzOiBzdWNj ZXNzZnVsbHlcbiIsIF9fZnVuY19fKTsNCityZXR1cm4gMDsNCit9DQorDQorI2lmZGVmIENPTkZJ R19QTV9TTEVFUA0KK3N0YXRpYyBpbnQgcnQxNzExaF9pMmNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkZXYpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCisNCitpZiAoY2hpcCkgew0KK2lmIChhdG9taWNfcmVhZCgmY2hpcC0+aTJjX2J1 c3kpKQ0KK3JldHVybiAtRUJVU1k7DQorYXRvbWljX3NldCgmY2hpcC0+cG1fc3VzcGVuZCwgMSk7 DQorfQ0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfaTJjX3BtX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisNCitpZiAoY2hpcCkNCithdG9taWNfc2V0KCZjaGlwLT5w bV9zdXNwZW5kLCAwKTsNCityZXR1cm4gMDsNCit9DQorI2VuZGlmIC8qIENPTkZJR19QTV9TTEVF UCAqLw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydDE3MTFoX2kyY19wbV9v cHMgPSB7DQorU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocnQxNzExaF9pMmNfcG1fc3VzcGVuZCwg cnQxNzExaF9pMmNfcG1fcmVzdW1lKQ0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgcnQxNzExaF9vZl9kZXZpY2VfaWRbXSA9IHsNCit7IC5jb21wYXRpYmxlID0gInJp Y2h0ZWssdHlwZWNfcnQxNzExaCIsfSwNCit7IH0sDQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBydDE3MTFoX29mX2RldmljZV9pZCk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNf ZGV2aWNlX2lkIHJ0MTcxMWhfaTJjX2RldmljZV9pZFtdID0gew0KK3sgInR5cGVjX3J0MTcxMWgi LCAwfSwNCit7IH0sDQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcnQxNzExaF9pMmNf ZGV2aWNlX2lkKTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnQxNzExaF9pMmNfZHJp dmVyID0gew0KKy5kcml2ZXIgPSB7DQorLm5hbWUgPSAidHlwZWNfcnQxNzExaCIsDQorLm93bmVy ID0gVEhJU19NT0RVTEUsDQorLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHJ0MTcxMWhf b2ZfZGV2aWNlX2lkKSwNCisucG0gPSAmcnQxNzExaF9pMmNfcG1fb3BzLA0KK30sDQorLnByb2Jl ID0gcnQxNzExaF9pMmNfcHJvYmUsDQorLnJlbW92ZSA9IHJ0MTcxMWhfaTJjX3JlbW92ZSwNCisu aWRfdGFibGUgPSBydDE3MTFoX2kyY19kZXZpY2VfaWQsDQorfTsNCittb2R1bGVfaTJjX2RyaXZl cihydDE3MTFoX2kyY19kcml2ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoImN5X2h1YW5nIDxjeV9o dWFuZ0ByaWNodGVrLmNvbT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oInJ0MTcxMWggdHlwZWMg ZHJpdmVyIik7DQorTU9EVUxFX1ZFUlNJT04oUlQxNzExSF9EUlZfVkVSU0lPTik7DQorTU9EVUxF X0xJQ0VOU0UoIkdQTCIpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgv cnQxNzExaC5oIGIvZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmgNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi44YjY3NDY0DQotLS0gL2Rldi9udWxsDQorKysg Yi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL3J0MTcxMWguaA0KQEAgLTAsMCArMSwzMDAgQEAN CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCisvKg0KKyAqIENvcHlyaWdo dCAyMDE3IFJpY2h0ZWsgVGVjaG5vbG9naCBDb3JwLg0KKyAqDQorICogUmljaHRlayBSVDE3MTFI IFR5cGUtQyBDaGlwIERyaXZlcg0KKyAqLw0KKw0KKyNpZm5kZWYgX19MSU5VWF9SVDE3MTFIX0gN CisjZGVmaW5lIF9fTElOVVhfUlQxNzExSF9IDQorDQorLyogRGV2aWNlIElEICovDQorI2RlZmlu ZSBSVDE3MTFIX0RJRF9BMHgyMTcwDQorI2RlZmluZSBSVDE3MTFIX0RJRF9CMHgyMTcxDQorI2Rl ZmluZSBSVDE3MTFIX0RJRF9DMHgyMTcyDQorI2RlZmluZSBSVDE3MTFIX0RJRF9EMHgyMTczDQor DQorLyogUmVnaXN0ZXJzICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19WSUQoMHgwMCkNCisjZGVm aW5lIFJUMTcxMUhfUkVHX1BJRCgweDAyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRElEKDB4MDQp DQorI2RlZmluZSBSVDE3MTFIX1JFR19UWVBFQ19SRVYoMHgwNikNCisjZGVmaW5lIFJUMTcxMUhf UkVHX1BEX1JFVigweDA4KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUERJRl9SRVYoMHgwQSkNCisj ZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUKDB4MTApDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVS VF9NQVNLKDB4MTIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfTUFTSygweDE0 KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX01BU0soMHgxNSkNCisjZGVmaW5l IFJUMTcxMUhfUkVHX1RDUENfQ1RSTCgweDE5KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUk9MRV9D VFJMKDB4MUEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19GQVVMVF9DVFJMKDB4MUIpDQorI2RlZmlu ZSBSVDE3MTFIX1JFR19QT1dFUl9DVFJMKDB4MUMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DQ19T VEFUVVMoMHgxRCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVUygweDFFKQ0KKyNk ZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTKDB4MUYpDQorI2RlZmluZSBSVDE3MTFIX1JF R19DT01NQU5EKDB4MjMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19NU0dfSERSX0lORk8oMHgyZSkN CisjZGVmaW5lIFJUMTcxMUhfUkVHX1JYX0RFVEVDVCgweDJmKQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfUlhfQllURV9DTlQoMHgzMCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JYX0JVRl9GUkFNRV9U WVBFKDB4MzEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19SWF9IRFIoMHgzMikNCisjZGVmaW5lIFJU MTcxMUhfUkVHX1JYX0RBVEEoMHgzNCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1RSQU5TTUlUKDB4 NTApDQorI2RlZmluZSBSVDE3MTFIX1JFR19UWF9CWVRFX0NOVCgweDUxKQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfVFhfSERSKDB4NTIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19UWF9EQVRBKDB4NTQp DQorDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQ1RSTDIoMHg4NykNCisjZGVmaW5lIFJUMTcx MUhfUkVHX0NMS19DVFJMMygweDg4KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQk1DX0NUUkwoMHg5 MCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0JNQ0lPX1JYRFpTRUwoMHg5MykNCisjZGVmaW5lIFJU MTcxMUhfUkVHX1ZDT05OX0NMSU1JVEVOKDB4OTUpDQorI2RlZmluZSBSVDE3MTFIX1JFR19SVF9T VEFUVVMoMHg5NykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JUX0lOVCgweDk4KQ0KKyNkZWZpbmUg UlQxNzExSF9SRUdfUlRfTUFTSygweDk5KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfSURMRV9DVFJM KDB4OUIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19JTlRSU1RfQ1RSTCgweDlDKQ0KKyNkZWZpbmUg UlQxNzExSF9SRUdfV0FUQ0hET0dfQ1RSTCgweDlEKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfSTJD UlNUX0NUUkwoMFg5RSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1NXUkVTRVQoMHhBMCkNCisjZGVm aW5lIFJUMTcxMUhfUkVHX1RUQ1BDX0ZJTFRFUigweEExKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf RFJQX1RPR0dMRV9DWUNMRSgweEEyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRFJQX0RVVFlfQ1RS TCgweEEzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQk1DSU9fUlhEWkVOKDB4QUYpDQorDQorDQor I2lmbmRlZiBCSVQNCisjZGVmaW5lIEJJVCh4KSgxIDw8ICh4KSkNCisjZW5kaWYNCisNCisvKg0K KyAqIFJUMTcxMUhfUkVHX0FMRVJUKDB4MTApDQorICogUlQxNzExSF9SRUdfQUxFUlRfTUFTSygw eDEyKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfVkJVU19TSU5LX0RJU0NPTk5FQ1RCSVQo MTEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9SWF9CVUZfT1ZGQklUKDEwKQ0KKyNkZWZp bmUgUlQxNzExSF9SRUdfQUxFUlRfRkFVTFRCSVQoOSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FM RVJUX0xPX1ZPTFRCSVQoOCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX0hJX1ZPTFRCSVQo NykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX1RYX1NVQ0NFU1NCSVQoNikNCisjZGVmaW5l IFJUMTcxMUhfUkVHX0FMRVJUX1RYX0RJU0NBUkRFREJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfQUxFUlRfVFhfRkFJTEVEQklUKDQpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9SWF9I QVJEX1JTVEJJVCgzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQUxFUlRfUlhfU1RBVFVTQklUKDIp DQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9QT1dFUl9TVEFUVVNCSVQoMSkNCisjZGVmaW5l IFJUMTcxMUhfUkVHX0FMRVJUX0NDX1NUQVRVU0JJVCgwKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf QUxFUlRfUlhfTUFTSyBcDQorKFJUMTcxMUhfUkVHX0FMRVJUX1JYX1NUQVRVUyB8IFJUMTcxMUhf UkVHX0FMRVJUX1JYX0JVRl9PVkYpDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19QT1dFUl9TVEFU VVNfTUFTSygweDE0KQ0KKyAqIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVUygweDFFKQ0KKyAqLw0K KyNkZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX1RDUENfSU5JVElBTEJJVCg2KQ0KKyNk ZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX1NSQ19IVkJJVCg1KQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfUE9XRVJfU1RBVFVTX1NSQ19WQlVTQklUKDQpDQorI2RlZmluZSBSVDE3MTFIX1JF R19QT1dFUl9TVEFUVVNfVkJVU19QUkVTX0RFVEJJVCgzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf UE9XRVJfU1RBVFVTX1ZCVVNfUFJFU0JJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJf U1RBVFVTX1ZDT05OX1BSRVNCSVQoMSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRV U19TSU5LX1ZCVVNCSVQoMCkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX0ZBVUxUX1NUQVRVU19N QVNLKDB4MTUpDQorICogUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTKDB4MUYpDQorICovDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfVkNPTk5fT1ZCSVQoNykNCisjZGVmaW5lIFJU MTcxMUhfUkVHX0ZBVUxUX1NUQVRVU19GT1JDRV9PRkZfVkJVU0JJVCg2KQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfRkFVTFRfU1RBVFVTX0FVVE9fRElTQ19GQUlMQklUKDUpDQorI2RlZmluZSBSVDE3 MTFIX1JFR19GQVVMVF9TVEFUVVNfRk9SQ0VfRElTQ19GQUlMQklUKDQpDQorI2RlZmluZSBSVDE3 MTFIX1JFR19GQVVMVF9TVEFUVVNfVkJVU19PQ0JJVCgzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf RkFVTFRfU1RBVFVTX1ZCVVNfT1ZCSVQoMikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxUX1NU QVRVU19WQ09OTl9PQ0JJVCgxKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX0ky Q19FUlJPUkJJVCgwKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfUk9MRV9DVFJMKDB4MUEpDQor ICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19ST0xFX0NUUkxfRFJQQklUKDYpDQorI2RlZmluZSBS VDE3MTFIX1JFR19ST0xFX0NUUkxfUkVTX1NFVChkcnAsIHJwLCBjYzEsIGNjMikgXA0KKygoZHJw KSA8PCA2IHwgKHJwKSA8PCA0IHwgKGNjMikgPDwgMiB8IChjYzEpKQ0KKyNkZWZpbmUgUlQxNzEx SF9SRUdfUk9MRV9DVFJMX0NDMihyZWcpKCgocmVnKSAmIDB4MEMpID4+IDIpDQorI2RlZmluZSBS VDE3MTFIX1JFR19ST0xFX0NUUkxfQ0MxKHJlZykoKHJlZykgJiAweDAzKQ0KKyNkZWZpbmUgUlQx NzExSF9UWVBFQ19DQ19QVUxMX0dFVF9SUF9MVkwocHVsbCkoKHB1bGwgJiAweDE4KSA+PiAzKQ0K KyNkZWZpbmUgUlQxNzExSF9UWVBFQ19DQ19QVUxMX0dFVF9SRVMocHVsbCkocHVsbCAmIDB4MDcp DQorDQorZW51bSB0eXBlY19jY19wdWxsIHsNCitUWVBFQ19DQ19QVUxMX1JBID0gMCwNCitUWVBF Q19DQ19QVUxMX1JQLA0KK1RZUEVDX0NDX1BVTExfUkQsDQorVFlQRUNfQ0NfUFVMTF9PUEVOLA0K K1RZUEVDX0NDX1BVTExfRFJQLC8qIGZyb20gcmQgKi8NCisNCitUWVBFQ19DQ19QVUxMX1JQX0RF RiA9IDEsLyogMHgwMCArIDEgKi8NCitUWVBFQ19DQ19QVUxMX1JQXzFfNSA9IDksLyogMHgwOCAr IDEgKi8NCitUWVBFQ19DQ19QVUxMX1JQXzNfMCA9IDE3LC8qIDB4MTAgKyAxICovDQorDQorVFlQ RUNfQ0NfUFVMTF9EUlBfREVGID0gNCwvKiAweDAwICsgNCAqLw0KK1RZUEVDX0NDX1BVTExfRFJQ XzFfNSA9IDEyLC8qIDB4MDggKyA0ICovDQorVFlQRUNfQ0NfUFVMTF9EUlBfM18wID0gMjAsLyog MHgxMCArIDQgKi8NCit9Ow0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfVENQQ19DVFJMKDB4MTkp DQorICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19UQ1BDX0NUUkxfQklTVF9URVNUX01PREVCSVQo MSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1RDUENfQ1RSTF9QTFVHX09SSUVOVEJJVCgwKQ0KKw0K Ky8qDQorICogUlQxNzExSF9SRUdfRkFVTFRfQ1RSTCgweDFCKQ0KKyAqLw0KKyNkZWZpbmUgUlQx NzExSF9SRUdfRkFVTFRfQ1RSTF9ESVNfVkNPTk5fT1ZCSVQoNykNCisjZGVmaW5lIFJUMTcxMUhf UkVHX0ZBVUxUX0NUUkxfRElTX1NOS19WQlVTX09DQklUKDIpDQorI2RlZmluZSBSVDE3MTFIX1JF R19GQVVMVF9DVFJMX0RJU19WQ09OTl9PQ0JJVCgwKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdf UE9XRVJfQ1RSTCgweDFDKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJfQ1RSTF9W Q09OTkJJVCgwKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfQ0NfU1RBVFVTKDB4MUQpDQorICov DQorI2RlZmluZSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfRFJQX1RPR0dMSU5HQklUKDUpDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfRFJQX1JFU1VMVChyZWcpKCgocmVnKSAmIDB4MTAp ID4+IDQpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfQ0MyKHJlZykoKChyZWcpICYg MHgwQykgPj4gMikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0NDX1NUQVRVU19DQzEocmVnKSgocmVn KSAmIDB4MDMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfUkQyRU5VTShjYykoKGNj KSArIDIpDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19DT01NQU5EKDB4MjMpDQorICovDQorZW51 bSBydDE3MTFoX2NvbW1hbmQgew0KK1JUMTcxMUhfQ01EX1dBS0VfSTJDID0gMHgxMSwNCitSVDE3 MTFIX0NNRF9ESVNBQkxFX1ZCVVNfREVURUNUID0gMHgyMiwNCitSVDE3MTFIX0NNRF9FTkFCTEVf VkJVU19ERVRFQ1QgPSAweDMzLA0KK1JUMTcxMUhfQ01EX0RJU0FCTEVfU0lOS19WQlVTID0gMHg0 NCwNCitSVDE3MTFIX0NNRF9FTkFCTEVfU0lOS19WQlVTID0gMHg1NSwNCitSVDE3MTFIX0NNRF9E SVNBQkxFX1NPVVJDRV9WQlVTID0gMHg2NiwNCitSVDE3MTFIX0NNRF9FTkFCTEVfU09VUkNFX1ZC VVMgPSAweDc3LA0KK1JUMTcxMUhfQ01EX1NPVVJDRV9WQlVTX0hWID0gMHg4OCwNCitSVDE3MTFI X0NNRF9MT09LX0NPTk5FQ1RJT04gPSAweDk5LA0KK1JUMTcxMUhfQ01EX1JYX09ORV9NT0RFID0g MHhBQSwNCitSVDE3MTFIX0NNRF9JMkNfSURMRSA9IDB4RkYsDQorfTsNCisNCisNCisvKg0KKyAq IFJUMTcxMUhfUkVHX01TR19IRFJfSU5GTygweDJFKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9S RUdfTVNHX0hEUl9JTkZPX1NFVChkcm9sZSwgcHJvbGUpIFwNCisoKGRyb2xlKSA8PCAzIHwgKFBE X1JFVjIwIDw8IDEpIHwgKHByb2xlKSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX01TR19IRFJfSU5G T19EUk9MRShyZWcpKCgocmVnKSAmIDB4MDgpID4+IDMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19N U0dfSERSX0lORk9fUFJPTEUocmVnKSgocmVnKSAmIDB4MDEpDQorDQorLyoNCisgKiBSVDE3MTFI X1JFR19UUkFOU01JVCgweDUwKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfVFJBTlNNSVRf U0VUKHJldHJ5LCB0eXBlKSgocmV0cnkpIDw8IDQgfCAodHlwZSkpDQorDQorDQorLyoNCisgKiBS VDE3MTFIX1JFR19DTEtfQ1RSTDIoMHg4NykNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX0NM S19ESVZfNjAwS19FTkJJVCg3KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX0JDTEsyX0VOQklU KDYpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQkNMSzJfVEdfRU5CSVQoNSkNCisjZGVmaW5l IFJUMTcxMUhfUkVHX0NMS19ESVZfMzAwS19FTkJJVCgzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf Q0xLX0NLXzMwMEtfRU5CSVQoMikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0NMS19CQ0xLX0VOQklU KDEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQkNMS19USF9FTkJJVCgwKQ0KKw0KKy8qDQor ICogUlQxNzExSF9SRUdfQ0xLX0NUUkwzKDB4ODgpDQorICovDQorI2RlZmluZSBSVDE3MTFIX1JF R19DTEtfT1NDTVVYX1JHX0VOQklUKDcpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQ0tfMjRN X0VOQklUKDYpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfT1NDX1JHX0VOQklUKDUpDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19DTEtfRElWXzJQNE1fRU5CSVQoNCkNCisjZGVmaW5lIFJUMTcxMUhf UkVHX0NMS19DS18yUDRNX0VOQklUKDMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfUENMS19F TkJJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX1BDTEtfUkdfRU5CSVQoMSkNCisjZGVm aW5lIFJUMTcxMUhfUkVHX0NMS19QQ0xLX1RHX0VOQklUKDApDQorDQorLyoNCisgKiBSVDE3MTFI X1JFR19CTUNfQ1RSTCgweDkwKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfSURMRV9FTkJJ VCg2KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRElTQ0hBUkdFX0VOQklUKDUpDQorI2RlZmluZSBS VDE3MTFIX1JFR19CTUNJT19MUFJQUkRCSVQoNCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0JNQ0lP X0xQRU5CSVQoMykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0JNQ0lPX0JHX0VOQklUKDIpDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19WQlVTX0RFVF9FTkJJVCgxKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf Qk1DSU9fT1NDX0VOQklUKDApDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19SVF9TVEFUVVMoMHg5 NykNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JBX0RFVEFDSEJJVCg1KQ0KKyNkZWZpbmUg UlQxNzExSF9SRUdfVkJVU184MEJJVCgxKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfUlRfSU5U KDB4OTgpDQorICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19JTlRfUkFfREVUQUNIQklUKDUpDQor I2RlZmluZSBSVDE3MTFIX1JFR19JTlRfV0FUQ0hET0dCSVQoMikNCisjZGVmaW5lIFJUMTcxMUhf UkVHX0lOVF9WQlVTXzgwQklUKDEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19JTlRfV0FLRVVQQklU KDApDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19SVF9NQVNLKDB4OTkpDQorICovDQorI2RlZmlu ZSBSVDE3MTFIX1JFR19NX1JBX0RFVEFDSEJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfTV9X QVRDSERPR0JJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfTV9WQlVTXzgwQklUKDEpDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19NX1dBS0VVUEJJVCgwKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQUxF UlRfRVhUX1JBX0RFVEFDSCgxIDw8ICgxNiArIDUpKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQUxF UlRfRVhUX1ZCVVNfODAoMSA8PCAoMTYgKyAxKSkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX0lE TEVfQ1RSTCgweDlCKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0tfMzAwS19TRUxCSVQo NykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1NISVBQSU5HX09GRkJJVCg1KQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfQVVUT0lETEVfRU5CSVQoMykNCisNCisvKiB0aW1lb3V0ID0gKHRvdXQqMisxKSAq IDYuNG1zICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19JRExFX1NFVChjazMwMCwgc2hpcF9kaXMs IGF1dG9faWRsZSwgdG91dCkgXA0KKygoKGNrMzAwKSA8PCA3KSB8ICgoc2hpcF9kaXMpIDw8IDUp IHwgXA0KKyAoKGF1dG9faWRsZSkgPDwgMykgfCAoKHRvdXQpICYgMHgwNykpDQorDQorLyoNCisg KiBSVDE3MTFIX1JFR19JTlRSU1RfQ1RSTCgweDlDKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9S RUdfSU5UUlNUX0VOQklUKDcpDQorDQorLyogdGltZW91dCA9ICh0b3V0KzEpICogMC4yc2VjICov DQorI2RlZmluZSBSVDE3MTFIX1JFR19JTlRSU1RfU0VUKGVuLCB0b3V0KSgoKGVuKSA8PCA3KSB8 ICgodG91dCkgJiAweDAzKSkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX1dBVENIRE9HX0NUUkwo MHg5RCkNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX1dBVENIRE9HX0VOQklUKDcpDQorDQor LyogdGltZW91dCA9ICh0b3V0KzEpICogMC40c2VjICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19X QVRDSERPR19DVFJMX1NFVChlbiwgdG91dCkoKChlbikgPDwgNykgfCAoKHRvdXQpICYgMHgwNykp DQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19JMkNSU1RfQ1RSTCgweDlFKQ0KKyAqLw0KKyNkZWZp bmUgUlQxNzExSF9SRUdfSTJDUlNUX0VOQklUKDcpDQorDQorLyogdGltZW91dCA9ICh0b3V0KzEp ICogMTIuNW1zICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19JMkNSU1RfU0VUKGVuLCB0b3V0KSgo ZW4gPDwgNykgfCAodG91dCAmIDB4MEYpKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfRFJQX0RV VFlfQ1RSTCgweEEzKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9MT1dfUlBfRFVUWSgxMDApLyog MTAlICovDQorI2RlZmluZSBSVDE3MTFIX05PUk1BTF9SUF9EVVRZKDMzMCkvKiAzMyUgKi8NCisN CisjZW5kaWYgLyogX19MSU5VWF9SVDE3MTFIX0ggKi8NCg0KQmVzdCBSZWdhcmRzLA0KKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNClNodS1GYW4gTGVlDQpSaWNodGVr IFRlY2hub2xvZ3kgQ29ycG9yYXRpb24NClRFTDogKzg4Ni0zLTU1MjY3ODkgIzIzNTkNCkZBWDog Kzg4Ni0zLTU1MjY2MTINCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq DQoqKioqKioqKioqKioqIEVtYWlsIENvbmZpZGVudGlhbGl0eSBOb3RpY2UgKioqKioqKioqKioq KioqKioqKioNCg0KVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGUtbWFpbCBtZXNz YWdlIChpbmNsdWRpbmcgYW55IGF0dGFjaG1lbnRzKSBtYXkgYmUgY29uZmlkZW50aWFsLCBwcm9w cmlldGFyeSwgcHJpdmlsZWdlZCwgb3Igb3RoZXJ3aXNlIGV4ZW1wdCBmcm9tIGRpc2Nsb3N1cmUg dW5kZXIgYXBwbGljYWJsZSBsYXdzLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBjb252ZXllZCBvbmx5 IHRvIHRoZSBkZXNpZ25hdGVkIHJlY2lwaWVudChzKS4gQW55IHVzZSwgZGlzc2VtaW5hdGlvbiwg ZGlzdHJpYnV0aW9uLCBwcmludGluZywgcmV0YWluaW5nIG9yIGNvcHlpbmcgb2YgdGhpcyBlLW1h aWwgKGluY2x1ZGluZyBpdHMgYXR0YWNobWVudHMpIGJ5IHVuaW50ZW5kZWQgcmVjaXBpZW50KHMp IGlzIHN0cmljdGx5IHByb2hpYml0ZWQgYW5kIG1heSBiZSB1bmxhd2Z1bC4gSWYgeW91IGFyZSBu b3QgYW4gaW50ZW5kZWQgcmVjaXBpZW50IG9mIHRoaXMgZS1tYWlsLCBvciBiZWxpZXZlIHRoYXQg eW91IGhhdmUgcmVjZWl2ZWQgdGhpcyBlLW1haWwgaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhl IHNlbmRlciBpbW1lZGlhdGVseSAoYnkgcmVwbHlpbmcgdG8gdGhpcyBlLW1haWwpLCBkZWxldGUg YW55IGFuZCBhbGwgY29waWVzIG9mIHRoaXMgZS1tYWlsIChpbmNsdWRpbmcgYW55IGF0dGFjaG1l bnRzKSBmcm9tIHlvdXIgc3lzdGVtLCBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250ZW50IG9m IHRoaXMgZS1tYWlsIHRvIGFueSBvdGhlciBwZXJzb24uIFRoYW5rIHlvdSENCg==